锁定老帖子 主题:遇到上机考试了,悲催的。
精华帖 (0) :: 良好帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间: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(). 不管黑猫白猫能抓老鼠就是好猫,呵呵,在实际项目中很少会用到wait和notify。 |
|
返回顶楼 | |
发表时间:2012-03-13
现在手机不是都能上网吗 笔试机试试 上google 或 baidu 查查直接抄了 还管那么多
|
|
返回顶楼 | |
发表时间:2012-03-13
pengmj 写道 北京-湖南人 写道 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(). 不管黑猫白猫能抓老鼠就是好猫,呵呵,在实际项目中很少会用到wait和notify。 看在什么项目中,如果是移动平台开发,wait notify上镜率相当高。 |
|
返回顶楼 | |
发表时间:2012-03-13
太羡慕你们了,还会SSH,老夫现在只会SM了(spring、mybatis)
|
|
返回顶楼 | |
发表时间:2012-03-13
上机题都不会出很难的
|
|
返回顶楼 | |
发表时间:2012-03-13
O(∩_∩)O哈哈~,上机考试确实很坑爹啊!
|
|
返回顶楼 | |
发表时间:2012-03-13
eaglecn 写道 今天面试了一家做中间件的公司,上来先做了一套题。题很基础。有道题写出对象序列化的伪代码。
还有道题是:写出oracle常用的驱动。JVM初始化的参数。这些题不会。 写完了,要求机试,一小时六道题,必须运行结果正确。说实在的题不难,我一看就知道怎么搞。 真他大爷的眼高手低,第一道题是写两个线程,对一个全局变量i,线程A对其从1加到1000,线程B 在i加1后对其显示。第二道题:写一个socket服务端,要求能服务多个客服端,回写客户端输入。 第三道题:将一个文件中的数字进行排列,排列算法要自己写,将排序结果保存到另一个文件中。 第四道题:XML的。把一段XML文本,加入到一个新的节点下。<a>.....</a>变为<b><a>....<a></b> 最后一道题:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连. 哥就写了第一道题,中间接了个凡客诚品的电话,60分钟就过去了。 真够悲催的,这就叫眼高手低啊。手生得很。以前学的东西倒不少 什么EJB,webservice,socket编程,URL编程,java并发编程实践,oracle体系结构 高性能sql语句调整,java反射,java io和NIO,SSH框架,HTTP协议,JSP、servlet,JDBC。 所有技术在上机面前,全都不好使。 呵呵 是东方通吧 |
|
返回顶楼 | |
发表时间:2012-03-14
来个简洁点的: /** * * 写两个线程,对一个全局变量i,线程A对其从1加到1000,线程B 在i加1后对其显示. * */ public class SynchronousQueueTest { private SynchronousQueue<Integer> sq = new SynchronousQueue<Integer>(); private AtomicInteger ai = new AtomicInteger(); class AddThread implements Runnable{ public void run(){ for(int i=0;i<1000;i++){ try { sq.put(ai.incrementAndGet()); } catch (InterruptedException e) { e.printStackTrace(); } } } } class ShowThread implements Runnable{ public void run() { while(true){ try { System.out.println(sq.take()); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(2); SynchronousQueueTest sqt = new SynchronousQueueTest(); AddThread at = sqt.new AddThread(); ShowThread st = sqt.new ShowThread(); es.submit(at); es.submit(st); } } |
|
返回顶楼 | |
发表时间:2012-03-14
javaOak 写道
来个简洁点的: /** * * 写两个线程,对一个全局变量i,线程A对其从1加到1000,线程B 在i加1后对其显示. * */ public class SynchronousQueueTest { private SynchronousQueue<Integer> sq = new SynchronousQueue<Integer>(); private AtomicInteger ai = new AtomicInteger(); class AddThread implements Runnable{ public void run(){ for(int i=0;i<1000;i++){ try { sq.put(ai.incrementAndGet()); } catch (InterruptedException e) { e.printStackTrace(); } } } } class ShowThread implements Runnable{ public void run() { while(true){ try { System.out.println(sq.take()); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { ExecutorService es = Executors.newFixedThreadPool(2); SynchronousQueueTest sqt = new SynchronousQueueTest(); AddThread at = sqt.new AddThread(); ShowThread st = sqt.new ShowThread(); es.submit(at); es.submit(st); } } 这个好像也没有实现线程A加一后,等待,然后线程B输出i的值,然后线程A再执行.... |
|
返回顶楼 | |
发表时间:2012-03-14
我觉得,别说1小时6道题,能做出3道题,就已经很不错了。
附,凑个热闹,测试通过,第1题: static Integer i = 0; static byte[] lock = new byte[0]; public static void main(String[] args) { PrintThread printThread = new PrintThread(); AddThread addThread = new AddThread(); addThread.start(); printThread.start(); } static class PrintThread extends baseThread { @Override protected void perform() { System.out.println(i); } } static class AddThread extends baseThread { @Override protected void perform() { i++; } } static abstract class baseThread extends Thread { public void run() { while (true) { synchronized (lock) { perform(); lock.notify(); if (i > 100) { return; } try { lock.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } protected abstract void perform(); } |
|
返回顶楼 | |