黑马程序员--交通灯管理系统

 

----------- 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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值