锁定老帖子 主题:遇到上机考试了,悲催的。
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-03-13
burningblood 写道 eaglecn 写道 burningblood 写道 LZ第一道线程是如何答的呢。有用到concurrent的Callable和Future吗,如果只是对i进行加锁,两个线程启动时的顺序是随机的啊,不能保证线程A先于线程B执行吧。
写个资源类啊,类里面包含数字i,再包含一个flag。flag=0线程1等待,否则执行add方法,i++,flag=0;flag=1线程2等待,否则执行show方法打印i,flag=1;初始flag=1不就行了吗?当然方法是Synchronized的,就是同步、互斥机制的一道题。 恩。我也是这么认为的。 其实大家都能想到,可是把你放到一定环境下,还限定时间。而且你很长时间都没写过这方面的代码,那就费力了。工作都是crud居多。线程的少,有也就是弄个线程池。咱们平时也就是找个demo改改,哪自己一点点地敲过代码。 |
|
返回顶楼 | |
发表时间:2012-03-13
我觉得这些是熟能生巧,接触少当然不行啊
|
|
返回顶楼 | |
发表时间:2012-03-13
burningblood 写道 LZ第一道线程是如何答的呢。有用到concurrent的Callable和Future吗,如果只是对i进行加锁,两个线程启动时的顺序是随机的啊,不能保证线程A先于线程B执行吧。
晕,我上机器做这些题,肯定玩完 |
|
返回顶楼 | |
发表时间:2012-03-13
package org.python.test; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; /** * * @author pengmj * @since 2012-3-13 */ public class ThreadTest { public volatile static int i = 0; /** * @param args */ public static void main(String[] args) { ThreadTest tt = new ThreadTest(); tt.run(); } public void run(){ BlockingQueue<Object> queue1 = new LinkedBlockingQueue<Object>(); BlockingQueue<Object> queue2 = new LinkedBlockingQueue<Object>(); queue1.add(new Object()); new Tadd(queue1,queue2,1000).start(); new Tprint(queue1,queue2,1000).start(); } public class Tadd extends Thread{ int count = 0; BlockingQueue<Object> queue1; BlockingQueue<Object> queue2; public Tadd(BlockingQueue<Object> queue1,BlockingQueue<Object> queue2,int count){ this.queue1 = queue1; this.queue2 = queue2; this.count = count; } public void run(){ try{ for(int j=1;j<=count;j++){ queue1.take(); i++; queue2.add(new Object()); } } catch(Exception e){} } } public class Tprint extends Thread{ int count = 0; BlockingQueue<Object> queue1; BlockingQueue<Object> queue2; public Tprint(BlockingQueue<Object> queue1,BlockingQueue<Object> queue2,int count){ this.queue1 = queue1; this.queue2 = queue2; this.count = count; } public void run(){ try{ while(count>0){ queue2.take(); System.out.println(i); queue1.add(new Object()); --count; } } catch(Exception e){} } } } |
|
返回顶楼 | |
发表时间:2012-03-13
eaglecn 写道 ios2007 写道 工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。
![]() 确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。 笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书 我应届生。我不会ssh。只会struts2+hibernate。 ssh不代表一切。不会ssh,不带不会做这个。 |
|
返回顶楼 | |
发表时间:2012-03-13
在世界的中心呼喚愛 写道 eaglecn 写道 ios2007 写道 工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。
![]() 确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。 笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书 我应届生。我不会ssh。只会struts2+hibernate。 ssh不代表一切。不会ssh,不带不会做这个。 废话,是很简单,大家都会做这样的题,看一眼就有思路了。你动手试试啊,就给你一个eclipse,一个个地给我敲出来。保证把结果正确。所以我说眼高手低就是你这样的。 |
|
返回顶楼 | |
发表时间:2012-03-13
eaglecn 写道 在世界的中心呼喚愛 写道 eaglecn 写道 ios2007 写道 工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。
![]() 确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。 笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书 我应届生。我不会ssh。只会struts2+hibernate。 ssh不代表一切。不会ssh,不带不会做这个。 废话,是很简单,大家都会做这样的题,看一眼就有思路了。你动手试试啊,就给你一个eclipse,一个个地给我敲出来。保证把结果正确。所以我说眼高手低就是你这样的。 我认错。 没注意看完。 |
|
返回顶楼 | |
发表时间:2012-03-13
在世界的中心呼喚愛 写道 eaglecn 写道 在世界的中心呼喚愛 写道 eaglecn 写道 ios2007 写道 工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。
![]() 确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。 笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书 我应届生。我不会ssh。只会struts2+hibernate。 ssh不代表一切。不会ssh,不带不会做这个。 废话,是很简单,大家都会做这样的题,看一眼就有思路了。你动手试试啊,就给你一个eclipse,一个个地给我敲出来。保证把结果正确。所以我说眼高手低就是你这样的。 我认错。 没注意看完。 其实那个公司肯定知道这些题很基础,上机的目的就是考你对api的熟练程度。我写个Synchronized关键字都得考虑考虑这个字怎么写的。 |
|
返回顶楼 | |
发表时间:2012-03-13
同样悲摧,今天面试要我上机配ssh。。。
|
|
返回顶楼 | |
发表时间:2012-03-13
pengmj 写道 package org.python.test; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; /** * * @author pengmj * @since 2012-3-13 */ public class ThreadTest { public volatile static int i = 0; /** * @param args */ public static void main(String[] args) { ThreadTest tt = new ThreadTest(); tt.run(); } public void run(){ BlockingQueue<Object> queue1 = new LinkedBlockingQueue<Object>(); BlockingQueue<Object> queue2 = new LinkedBlockingQueue<Object>(); queue1.add(new Object()); new Tadd(queue1,queue2,1000).start(); new Tprint(queue1,queue2,1000).start(); } public class Tadd extends Thread{ int count = 0; BlockingQueue<Object> queue1; BlockingQueue<Object> queue2; public Tadd(BlockingQueue<Object> queue1,BlockingQueue<Object> queue2,int count){ this.queue1 = queue1; this.queue2 = queue2; this.count = count; } public void run(){ try{ for(int j=1;j<=count;j++){ queue1.take(); i++; queue2.add(new Object()); } } catch(Exception e){} } } public class Tprint extends Thread{ int count = 0; BlockingQueue<Object> queue1; BlockingQueue<Object> queue2; public Tprint(BlockingQueue<Object> queue1,BlockingQueue<Object> queue2,int count){ this.queue1 = queue1; this.queue2 = queue2; this.count = count; } public void run(){ try{ while(count>0){ queue2.take(); System.out.println(i); queue1.add(new Object()); --count; } } catch(Exception e){} } } } 根据第一题的描述: 写两个线程,对一个全局变量i,线程A对其从1加到1000,线程B 在i加1后对其显示. 考察的不是阻塞队列,而是线程之间的通信。用到wait()和notify(). |
|
返回顶楼 | |