论坛首页 招聘求职论坛

遇到上机考试了,悲催的。

浏览 15508 次
精华帖 (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改改,哪自己一点点地敲过代码。
0 请登录后投票
   发表时间:2012-03-13  
我觉得这些是熟能生巧,接触少当然不行啊
0 请登录后投票
   发表时间:2012-03-13  
burningblood 写道
LZ第一道线程是如何答的呢。有用到concurrent的Callable和Future吗,如果只是对i进行加锁,两个线程启动时的顺序是随机的啊,不能保证线程A先于线程B执行吧。

晕,我上机器做这些题,肯定玩完
0 请登录后投票
   发表时间: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){}
		}
	}
}
0 请登录后投票
   发表时间:2012-03-13  
eaglecn 写道
ios2007 写道
工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。

确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。

笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书
我应届生。我不会ssh。只会struts2+hibernate。
ssh不代表一切。不会ssh,不带不会做这个。
0 请登录后投票
   发表时间:2012-03-13  
在世界的中心呼喚愛 写道
eaglecn 写道
ios2007 写道
工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。

确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。

笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书
我应届生。我不会ssh。只会struts2+hibernate。
ssh不代表一切。不会ssh,不带不会做这个。

废话,是很简单,大家都会做这样的题,看一眼就有思路了。你动手试试啊,就给你一个eclipse,一个个地给我敲出来。保证把结果正确。所以我说眼高手低就是你这样的。
0 请登录后投票
   发表时间:2012-03-13  
eaglecn 写道
在世界的中心呼喚愛 写道
eaglecn 写道
ios2007 写道
工作时很多情况是需要API文档的,太多了没人记得住的。起个服务端这类工作也不是天天都在做的。

确实很少敲代码。ctrl+c,Ctrl+V,然后一顿改。所以一旦上机考试,就傻眼了。这也是基础不扎实的表现啊。估计用SSH的哥们更悲剧,sql都不会写了吧。

笑了。第1,2,3,5题都是很基础的。去年我java期末考试,老师还出过这个题目。不过当时可以带一本书
我应届生。我不会ssh。只会struts2+hibernate。
ssh不代表一切。不会ssh,不带不会做这个。

废话,是很简单,大家都会做这样的题,看一眼就有思路了。你动手试试啊,就给你一个eclipse,一个个地给我敲出来。保证把结果正确。所以我说眼高手低就是你这样的。

我认错。
没注意看完。
0 请登录后投票
   发表时间: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关键字都得考虑考虑这个字怎么写的。
0 请登录后投票
   发表时间:2012-03-13  
同样悲摧,今天面试要我上机配ssh。。。
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().




0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics