您的位置:首页 > 职场人生

黑马程序员_交通灯管理系统、银行业务调度系统及自己总结的

2012-05-17 11:52 302 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

交通灯管理系统
面向对象的分析与设计:

一:每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减少一辆车。

1.设计一个Road类来表示路线,每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road 实例对象。

2.每条路线上随机增加新的车辆,增加到一个集合中保存。

3.每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。

二:每条路线每隔一秒都会检查控制本路线的灯是否为绿,一个灯由绿变红时,应该将下一个方向的灯变绿。

1.设计一个Lamp类来表示一个交通灯,每个交通灯都维护一个状态:亮(绿)或不亮(红),每个交通灯要有 变亮和变黑的方法,并且能返回自己的亮黑状态。

2.总共有12条路线,所以,系统中总共要产生12个交通灯。右拐弯的路线本来不受灯的控制,但是为了让程序采用统一的处理方式,故假设出有四个右拐弯的灯,只是这些灯 为常亮状态,即永远不变黑。

3.除了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对 应的灯则随之一同变化,因此Lamp类中要有一个变量来记住自己相反方向的灯,在一个Lamp对象的变亮和变黑方法中,将对应方向的灯也变亮和变黑。每个灯变黑时,都 伴随者下一个灯的变亮,Lamp类中还用一个变量来记住自己的下一个灯。

4.无论在程序的什么地方去获得某个方向的灯时,每次获得的都是同一个实例对象,所以Lamp类改用枚举来做显然具有很大的方便性,永远都只有代表12个方向的灯的实例 对象。

5.设计一个LampController类,它定时让当前的绿灯变红。

银行业务调度系统
面向对象的分析与设计:

一:有三种对应类型的客户:VIP客户,普通客户,快速客户 ,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务。

1.首先,经常在银行办理业务的人更有利于理解本系统,例如,我经常陪老婆跑银行,对银行的这个业务算是比较熟悉了,我知道每一个客户其实就是由银行的一个取号机器 产生号码的方式来表示的。所以,我想到要有一个号码管理器对象,让这个对象不断地产生号码,就等于随机生成了客户。

2.由于有三类客户,每类客户的号码编排都是完全独立的,所以,我想到本系统一共要产生三个号码管理器对象,各自管理一类用户的排队号码。这三个号码管理器对象统一 由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。

二:各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。

1.各个窗口怎么知道该叫哪一个号了呢?它一定是问的相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码。

2.如果我不是多次亲身经历银行的这种业务,再加之积累了大量面向对象的应用开发经验,我也不知道能否轻松进行这种设计,能否发掘出其中隐含的对象信息,我真说不出 具体的经验是什么,就是日积月累出来的一种感觉。难道这就是传说中的:“只可意会,不可言传?”

总结:面向对象的使用是根据,谁持有数据那么它就应该提供操作数据的方法。在进行银行业务模拟中,操作对象分装为三大类。NumberManger用来控制号码的生成以及获 取,如同取号机。使用NumberMachine类封装三类客户信息,分别是普通客户,快速客户和vip客户。并且提供三类客户的获取方法。由于要有4个普通客 户窗口以及分 别一个快速窗口和vip窗口。在main方法中创建相应个数的客户窗口数并且使用线程监听。

面试题一:人在黑板上画圆

要点:1.person,blackboard,circle

2.draw(){

x,y---->radius

}

面试题二:两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材可以做成椅子

要点:1. StoneKnife=KnifeFactory.CreateKnife(stone)

2.stone

3.stoneKnife

4.tree

5.chair=chairFactory.makeChair(material)

6.chair

自己总结的
1.能直接操作字符文件,必须读取相应的字节数,然后去查表,找到一个中文,字符流的好处是可以直接返回一个字符 ,但FiliReader将字符编码写死了,只能用默认的GBK 编码,而FileReader的父类 InputStreamReader(转换流)则可以任意指定编码格式

2.在System类内有改变输入输出设备的方法,

setin():重新分配标准输入流

setout():重新分配标准输出流

3.对于输入流、输出流的层次

不涉及到转换流,则最多三层

BufferedWriter bufw=new BufferedWriter(new FileWriter("buf.txt"));

BufferedReader bufw=new BufferedReader(new FileReader("buf.txt"));

如没涉及到转换流,则最多可达四层

eg:InputStream in=System.in;

BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));

BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d.txt")));

4.log4j:一款方便java日志文件的建立工具

5,其实,虚拟机每次在运行的时候,都要先获取系统的信息,只不过我们没将它打印到控制台而已,用

以下方法可以获取:

import java.util.*;

import java.io.*;

class SystemInfo

{

public static void main(String[] args) throws IOException

{

Properties prop=System.getProperties();

//System.out.println(prop);

//prop.list(System.out); //更简单的打印方式

prop.list(new PrintStream("sysinfo.txt"));

}

}

6.用流操作文件时,必须先判断文件是否存在,把文件封装成对象,可以对其进行判断和操作,这就是封装文件的好处

7.运用Rename()改名方法,将一个已经存在的文件通过指定别的路径,可实现类似剪切文件的作用

eg:

File f1=new File("SystemInfo.java");

File f2=new File("c:\\haha.java");

sop("rename:"+f2.renameTo(f1));

8.目前能使用的配置文件,有键值对的,XML,和框架

9.记事本中一小格即代表一个字节=8 bit(位)

10.如果文件出现乱码,说明编码和解码采用的编码标准不一致

11.服务器里用的是iso8859-1,能自动识别老美和欧洲的,但不能识别中文

12.遇到乱码的问题,可以尝试先用原来的编码方式编一次,在用客户端做的软件语言所采取的编码方式解码一 次

13.UTF-8编码表里有自己的标示头,可以根据给定的字节码的标示头决定连续读两个还是三个字节utf-8的特征是:用一个字节编码的,标示头为0开始;用两个字节编码的,字 节1:标示头以110开始字节2:标示头以10开始;用三个字节编码的,字节1:标示头以1110开始,字节2:标示头以10开始,字节3:标示头以10开始.

14.两台机要实现通信,最起码的一点是IP协议要相同。

15.我们ip所在的网段中有两个ip地址不能用,192.168.1.0与192.168.1.255,原因是:前者代表网络段,后者 代表这个网络段中的广播地址,对该网段的接收端中的所有ip地 址发送信息

16.判断程序那里出错,执行到了哪里,可以用一条System.out.println();语句,通过放在代码不同的地方来检 验

17.telnet是windows中提供的一个远程登录工具,他可以在dos命令行下,连接到网络中的任何一台主机,进行 配置

18.number下有八大类型。及基本数据类型

18.浏览器的强大就强大在里面内置了许多解析的引擎,如javascript、html、css等等

19.上网默认走的都是80端口

20.socket走的是传输层协议,即TCP协议,而URL是走的应用层协议,及http协议。浏览器与服务器在进行信息交换时,经过了将信息装包、拆包的过程。实际上在传输层有很 多信息头的信息,用户没看见,是因为解析掉了。

21.采用抽象方法定义某个方法可将大量的if else语句转移成一个个独立的类

22.注意:包名中不能含有java的特殊符号,否则,编译器会报找不到main方法类的错误。

23.基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示 为Class对象。

24.java中String不是基本数据类型,而是一个类

25.public static void main(String[]args):main方法的参数列表为一个字符串型的数组,通过指定的agrs[数值]来决定执行那个类。

26.HashCode()的作用:防止内存泄露

27.其实包下面也可以建子包的,每建立一个子包,就增加了一层文件夹

28.给某个文件中的属性添加get和set方法,点击鼠标右键,选择生成getter和setter方法,指定变量即可

用get或set的方法取变量名即运用了JavaBean的方法

29.有包名的类不能调用无包名的类

29.面向对象的方法就是将切面方法封装成一个各个对象,再将对象做为调用这些封装的切面代码的方法的参数

传进去

30.面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。

31.内部类要加载外部类中的局部变量,则局部变量必须加final

32.静态成员在被调用时要加下划线。

33.面向对象的设计对象,有点像力学中的被作用的对象,即受力方

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: