黑马程序员_7k面试题学习笔记

来源:互联网 发布:优酷会员如何解绑淘宝 编辑:程序博客网 时间:2024/06/05 09:23

---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;amp;gt;<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! --------------------

一、面向对象的分析与设计思路

1.思路

1.深刻理解事物的本质,然后根据需求,确定有那些类或对象。

2.确定类与类之间,或对象与对象之间是如何进行消息传递的。

3.尽量考虑类的重用性、可扩展性。

重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。谁拥有属性,谁就拥有对属性操作的行为。

2.案例:

(1)人在黑板上画圆:画圆的这个动作要放到圆的类中。因为圆心和半径的属性都要放到圆类中作为私有变量,而画元还需要这些属性,所以该方法要放到圆类中。

(2)列车司机紧急刹车:刹车的这个动作,是由人发送刹车的命令,然后有车的刹车系统进行刹车的动作,所有刹车的这个动作要放到车的类中。

(3)你把门关上:关门的这个动作也要放到门这个类中,因为人只是发出了推门的动作,然后门自己和门框合并,出现关门的动作。


二、7k面试题笔记及其对应的伪代码

1.交通灯管理系统

分析共四类对象,交通灯、灯控制器、路线、汽车。但汽车属于道具,只是负责演示使用,所以不必考虑汽车这个类,那么其他三个类的伪代码设计如下:

(1)交通灯类

/** * 交通灯类 */public enum Lamp {/* * 12个方向,12盏交通灯 */S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);/*特征或属性*/private boolean lighted;//灯的状态,亮、暗private String opposite;//当前灯的颜色,红或绿private String next;//下一个灯的颜色/* * 交通灯变绿 */public void light(){。。。。。。。}/* * 交通灯变红 */public Lamp blackOut(){。。。。。。。。。}}
(2)路线类
/** *路线类 *负责定义每条路线上的车辆以及模拟各个车辆在路线上行驶  */public class Road {private List<String> vechicles=new ArrayList<String>();//路上有很多车private String name;//路线名称public Road(String name){this.name=name;/* * 构造在路上的行驶的车辆 */ExecutorService pool=Executors.newSingleThreadExecutor();pool.execute(new Runnable(){@Overridepublic void run() {/* * 产生车集合 */for(int i=1;i<1000;i++){vechicles.add(Road.this.name+"_"+i);}}});/** * 定时器 * 相隔一段时间模拟车在不同的路段上行驶 */ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {if(vechicles.size()>0){System.out.println(vechicles.remove(0)+" is traversing !");}}}, 1, 1, TimeUnit.SECONDS);}}
(3)交通灯控制器
/** * 交通灯控制器类 * 负责满足一定条件下交通灯的路线切换 */public class LampController {private Lamp currentLamp;//当前灯public LampController(){currentLamp =Lamp.S2N;currentLamp.light();/* *定时器 *  负责初始化各个交通灯的颜色  */ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {currentLamp = currentLamp.blackOut();}}, 10, 10, TimeUnit.SECONDS);}}

2.银行业务调度系统

分析共四类对象,客户、业务窗口、号码管理器、取号机器。因为该需求重点是各个业务窗口的转换问题,并没有深入研究客户,所以客户类不用创建。那么其他三个类的伪代码设计如下:

(1)业务窗口

/** * 服务窗口 * 负责创建窗口并模拟各个窗口办理各种客户的业务 */public class ServiceWindow {private CustomerType type=CustomerType.COMMON;//客户类型private int windowId=1;//窗口号码public void setType(CustomerType type) {this.type = type;}public void setWindowId(int windowId) {this.windowId = windowId;}/** * 模拟各个窗口通过各种用户类型办理各种业务 */public void start(){Executors.newSingleThreadExecutor().execute(new Runnable(){@Overridepublic void run() {while(true){switch(type){case COMMON:commonService();//普通服务窗口break;case EXPRESS:expressService();//快速服务窗口break;case VIP:vipService();//VIP服务窗口break;}}}});}//普通服务业务办理窗口private void commonService(){}//快速服务业务办理窗口private void expressService(){}//VIP服务业务办理窗口private void vipService(){}}
(2)取号机器类
/** * 取号器 * 有三种类型的客户,分别取各自的排队等待号码,因为取号机器只有一个 * 所以设计为单例模式 */public class NumberMachine {private NumberManager commonManager =new NumberManager();//普通客户private NumberManager expressManager =new NumberManager();//快速客户private NumberManager vipManager =new NumberManager();//vip客户public NumberManager getCommonManager() {return commonManager;}public NumberManager getExpressManager() {return expressManager;}public NumberManager getVipManager() {return vipManager;}private NumberMachine(){}public static NumberMachine getInstance(){return instance;}private static NumberMachine instance=new NumberMachine();}
(3)号码管理器类
/** * 号码管理器 * 负责生成新的排队号码以及各种类型的客户取走的排队号码 */public class NumberManager {private int lastNumber=1;//最新号码private List<Integer> queueNumber = new ArrayList<Integer>();//取走的号码队列/** * 生成新号码 */public synchronized Integer generateNewManager(){queueNumber.add(lastNumber);return lastNumber++;}/** * 客户所取的号码 */public synchronized Integer fetchServiceNumber(){Integer number=null;if(queueNumber.size()>0){number=queueNumber.remove(0);}return number;//删除那个对象,则返回值就是该对象}}


---------------------- <a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a&amp;amp;gt;、<a href="http://www.itheima.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
详细请查看:<a href="http://www.itheima.com" target="blank">
www.itheima.com</a>

0 0
原创粉丝点击