菜鸟面试

Java程序员廖志伟
Java领域优质创作者
博客专家认证
2019-09-05 11:40:37
合并链表 //已知两个链表head1 和head2 各自从小到大有序,请把它们归并成一个链表依然从小到大有序 class Node{ int data Node next } Node Merge(Node head1 , Node head2) { //TODO }     多线程 1、吃桔子 共计9个桔子,有3个小朋友,小朋友A每次拿2个桔子,小朋友B每次拿3个桔子,小朋友C每次拿1个桔子,小朋友10s吃1个桔子,吃完后继续去拿。 小朋友每次拿桔子之前和拿了桔子之后,都会对桔子数量进行报数。如果剩余的桔子不够小朋友每次拿的数量,小朋友停止拿桔子,喊一声“不拿了”并退出游戏。 请用java多线程程序表述上面的过程。 2、跑步 3个小朋友参加百米跑步比赛,A小朋友每秒跑5米,B小朋友每秒跑4米,C小朋友每秒跑3米。大家做好准备之后喊一声“我准备好了”,然后在听到发令枪响后一起起步,并在开始跑步时喊一声“我开始跑步了”,当一个小朋友跑到终点时,喊一声“我到终点了”,此时记录跑了多久。其他小朋友停止跑步,并报出自己跑了多少米,例如“x小朋友跑了yy米”。 请用java程序表述上面的过程。   3、分析字符串 写字符串的分析函数,分析一个由字母和数字组成的字符串,例如aBc12D9 1、输出字符串中字符和数字的个数。 2、相连的数字不能分为2个,即12是作为一个数字统计,输出字符串中字符和数字的个数。 3、字符大小写不区分,统计字符的个数及出现次数。 4、统计出现次数最多的字符和数字。 按照上面的要求,写4个函数     4、删除字符 要求:删除一个字符串中出现次数最多的字符,如果多个字符出现次数一样,则都删除。要求字符顺序不变。 public class RemoveMostCharTest { @Test public void testRemoveMostChar(){ String source = "ABCCDEER"; String result = "ABDR"; Assert.assertEquals(result, getRightString(source)); } /** * 删除字符 * 删除一个字符串中出现次数最多的字符,如果多个字符出现次数一样,则都删除。要求字符顺序不变。 * @param sorource * @return */ private String getRightString(String source) { return null; } }  
...全文
522 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
YangjulongTrue 2020-08-02
  • 打赏
  • 举报
回复
跑步 我感觉还是有问题 只是改变一下输出语句的地方 额 。。。。

public static volatile boolean flag=true;
public static void main(String[] args) {
for (int i=3;i<6;i++){
int finalI = i;
new Thread(()-> {
Data data = new Data();
while(data.getCount()<100&&nospringtest.flag){
synchronized (Thread.class){
if (!nospringtest.flag)
break;
data.setCount(data.getCount()+finalI);
System.out.println(Thread.currentThread().getName()+"跑了"+data.getCount()+"还有"+(100-data.getCount())+"米");
if(data.getCount()>=100){
System.out.println(Thread.currentThread().getName()+"跑完了");
nospringtest.flag=false;
return;
}
}
try {
TimeUnit.SECONDS.sleep(1);
}catch (Exception e){
e.printStackTrace();
}
}
System.out.println(Thread.currentThread().getName()+"跑了"+data.getCount()+"还有"+(100-data.getCount())+"米");
}).start();
}
}
YangjulongTrue 2020-08-02
  • 打赏
  • 举报
回复

吃桔子 我用单元测试 线程一休眠就退出了 才知道不可以用这个啊 。。。
还是用main吧

public static void main(String[] args) {
Data data = new Data();
data.setCount(9);
for (int i=1;i<4;i++){
int finalI = i;
new Thread(()-> {
while(true){
if(data.getCount()< finalI){
System.out.println("不拿了");
return;
}
synchronized (data){
if(data.getCount()< finalI){
System.out.println("不拿了");
return;
}
data.setCount(data.getCount()-finalI);
System.out.println("拿到了个"+finalI+"橘子");
System.out.println("还有"+data.getCount());
}

try {
TimeUnit.SECONDS.sleep(finalI*1);
System.out.println("吃了"+finalI+"橘子");
}catch (Exception e){
e.printStackTrace();
}
}

}).start();
}
}
class Data{
private int count;

public int getCount() {
return count;
}

public void setCount(int count) {
this.count = count;
}
}

YangjulongTrue 2020-08-02
  • 打赏
  • 举报
回复
合并链表

public static Node Merge(Node head1 , Node head2) {
Node node1;
Node node=new Node();
node1=node;
while(head1!=null&&head2!=null){
if(head1.data>head2.data){
node.next=head2;
node=node.next;
head2=head2.next;
}else{
node.next=head1;
node=node.next;
head1=head1.next;
}
}
if(head1==null)
node.next=head2;
if(head2==null)
node.next=head1;
return node1.next;
}
@Test
public void Testnode(){
Node node = new Node(new Node(new Node(5),4),3);
Node node1 = new Node(new Node(new Node(7),5),3);
Node merge = Merge(node, node1);
while (merge!=null){
System.out.println(merge.data);
merge=merge.next;
}
}



class Node{
int data;
Node next;
public Node(){}
public Node(int id){this.data=id;}
public Node(Node n,int id){this.next=n;this.data=id;}
}

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧