7月面试
1.1程序员网校
程序员网校必将精心制作每个技术点的文字与视频教程,尽可能一针见血的讲解清楚问题的本质和最大限度地学习者的时间,让程序员把富余的时间投入到工作和生活中去,为提高程序员的生活状况尽最大努力。
1.2交通灯管理系统
1.2.1交通灯管理系统的业务和需求分析
总共12条路线,右转弯的4条路线的控制灯可以假设称为常绿状态。另外,其他的8条路线两两成对的,可以归为四组,所以,程序只需考虑图中标注了数字号的4条路线的控制灯的切换顺序,这4条路线相反方向的路线的控制灯跟随这4条路线切换,不必额外考虑。
1.2.2精通面向对象的分析和设计的秘诀
谁拥有数据,谁就对外提供操作数据的方法。
eg:两块石头磨成一把刀,石刀可以砍树,砍成木材,木材做成椅子。
1.2.3交通灯的控制系统的类的实现细节分析
设计一个lamp类来表示一个交通灯,每一个交通灯都维护一个状态:红,绿 ;所以交通灯:自己红绿状态变量;
总共有12条路线,所以,系统中总共要产生12个交通灯。除了右拐方向的其他8条路线的灯,他们两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中 各取一个灯,对这4个灯依次变红,与这4个灯方向对应的灯则随着变化还有下一个灯随着变化,因此,要有两个变量分别记录对应方向的灯,和下一个灯。
交通灯控制器控制当前的灯变红,变绿。
1.2.4编写road类中模拟汽车上路的代码
变量:每个road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
构造方法:在road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车。
在road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除
1.2.5定义器与road类中模拟汽车穿过路口
Road类的代码:List<String> vechicles=new ArrayList<String>();
private String name=null;
public Road(String name)
{
this.name=name;
ExecutorService pool=Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int i=1;i<1000;i++)
{
Thread.sleep((new Random().nextInt(10)+1)*1000);
vechicles.add(Road.this.name+"_"+i);
}
}
});
ScheduleExecutorService timer= Executors.newScheduledThreadPool(1);
timer.schduleAtFixedRate(
new Runnable(){
public void run(){
if(vechicles.size()>0){
boolean lighted=true;
if(lighted)
System.out.println(vechicles.remove(0)+" is traversing");
},1,1,TimeUnit.SECONDS);
}
);
}
1.2.6编写表示交通灯的lamp类的代码
利用枚举:S2N,S2W,E2W,E2S,
N2S,N2E,W2E,W2N,
S2E,E2N,N2W,W2S;
1.2.7编写交通灯控制器的类与总成测试
LampController类的编写:
整个系统中只能有一套交通控制系统,所以,lampController类最好是设计成单例。
LampController构造方法中要设定第一个绿的灯;
lampController对象的Start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。
mainClass类的编写:
利用for循环创建代表12条路线的对象。接着再获得LampController对象并调用其start方法。
总结:交通灯管理系统串联一下,首先,主函数创建12条路线,并产生路上汽车的集合,汽车上路,在获取灯对象并判断灯是否为亮,然后创建交通灯控制器对象,交通灯控制器对象,对象中的当前灯变绿。路上的车判断灯为绿,则穿过路口。四个灯轮换变绿,相应的灯同样变绿。