----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
这是张孝祥老师给我们讲的第一道面试题,感觉张老师思考起来很容易,可我拿到这道题就是一头雾水,听完了之后,真的学到了不少:
在动手写代码前,很多东西是需要做的(张老师介绍了在程序员写代码时,“2”表示“to”的简写,“4”表示“for”的简写)
1.切不可空想,一定要画图
画图非常有助于理解和分析问题。刚拿到这个问题,张老师要我们从身边的实例着手,联系实际想起来是比较容易些,但是仍然存在一些问题,有很多地方没有想到。于是,张老师要我们画图,这样一来,很多东西就清晰多了,刚开始拿到这道题时,不知道怎么去思考,现在把图一画,思路就清晰多了。再则,对这道面试题来说,如果不把每条路线搞清楚,下面根本不能动手。
2.面向对象的分析与设计
我们初步设想一下有哪些对象:红绿灯,红绿灯的控制系统,汽车,路线。汽车看到自己所在路线对应的灯绿了就穿过路口吗?不是,还要看自己前面是否有车,看前面是否有车,该问哪个对象呢?该问路,路中存储这车辆的集合,显然路上就应该有增加车辆和减少车辆的方法了。在看题目,不要体现车辆移动的过程,就是捕捉出车辆穿过路口的过程,也就是捕捉路上减少一辆车的过程,所以,这个车并不需要单独设计成为一个对象,用一个字符串表示就可以了。
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。在牢牢掌握几个典型的案例就可以了:人在黑板上画圆,列车司机紧急刹车,售货员统计收货小票上的金额,你把门关上等。只要掌握这些例子,你就是面试对象设计的高手。
3.在写程序时,需要打包,包名可以用公司的网址(com.isoftone.interview.traffic),由于是软通动力的面试题。
4.在编写Road类得时候,用到的是 List<String> vechicles = new ArrayList<String>();而没有用ArrayList<String> vechicles = new ArrayList<String>()是为了面向接口编写。
5.创建一个线程。用线程库,关键字为Executors,如果一个类用作工具,里面的方法都是静态的,往往用s结尾(像Utils)。在这个线程库中有大量的静态方法,方法的名字不用刻意去记,在使用的时候,在去寻找。代码如下:
ExecutorService pool = Executors.newSingleThreadExecutor(); //产生一个单独的线程池
pool.execute(new Runnable(){ //不断产生车辆
public void run() {
for(int i = 1;i<1000;i++) {
try {
Thread.sleep((new Random().nextInt(10) + 1)*1000); //1s-10s随机产生
}catch(InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i)
}
}
}
}); //提交任务,执行一个线程
6.定时器的编写
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run() {}
},
1, //过1s去执行run方法
1, //在过1s接着执行run方法
TimeUnit.SECONDS); //衡量前面数字的度量单位
7.编写Lamp类,这里用到的是枚举类(Enum),12个方向的灯是固定不变的,就是枚举类的12个实力对象。
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net/heima