编程时,在整理思路时,最好要借助工具,不要空想,这样可以简化自己的思考和工作量,如一些思维工具,画图等等;一定要注意技巧和策略的使用;
做具体项目时,要注意把项目的思路转化为利于编程的思路来进行转行;切不可以不做任何改变直接按照项目上的要求来想思路是很难想的;先把业务逻辑想明白之后,再换成自己的思路来设计;
面向对象一个非常重要的经验:
谁拥有数据,谁就拥有操作这些数据的方法;例子:
人在黑板上画圆:画圆的方法是圆提供的;
列车司机刹车:刹车的方法是列车提供的;
售货员用票据统计金额:票据提供统计金额的方法;
人关上门:是门自己提供的关闭的方法;
路上的汽车有增有减:是路提供的增加减少的方法;
面向对象的设计:
谁拥有数据,谁就提供针对数据操作的方法;
面向父类和接口编程的思想必须要贯穿在开发的始终;
线程Executors类中有很多静态方法;包concurrent要熟练;这是面试要求;
关于两个面试题面向对象的总结:
石头磨成石刀,石刀砍树成木材,木材做成椅子;
球从一根绳子的一段移动到另一端;
面向对象思想设计思路:
java语言对一个对象实现功能无非只有三种方式:
1、对象自身对自己的数据进行处理的方法;
(一般这种情况比较多,这就是所谓的谁拥有数据,谁就提供针对数据操作的方法;)
2、一个类中的静态方法;
这种情况主要就是针对多个对象,提供共享的方法,每个对象都用的相同的不是由对象自身拥有的方法;若是自身拥有的方法,那么可以通过一个接口,大家都实现即可,或者继承也行;
3、通过另一个方法的参数进行传入该对象后通过返回值得到需要的返回值为void或另一个对象的功能;
这种情况主要是功能是他提供的,但是还需要一个参数;
比如球,可以提供两个参数,对象是绳子,方法是得到下一个点,参数是球和方向;
通常的,要设计面向对象的问题,就两点:通过名词提炼类或者说对象;通过动词提炼方法或者说功能;而一般对象就提供三种成员,即构造函数,成员属性,成员方法;
java的线程库Executors的使用:
java的线程库Executors,比之前的线程性能好,功能也更多一些;
java.util.concurrent这个包是java的util并发包;
,有大量的静态方法的工具类一般以s收尾;
线程Executors类中有很多静态方法;包concurrent要熟练;这是面试要求;
ExcecutorService newFixedThreadPool(Int nThreads)从一个线程池中选择空闲的线程来做事情;以后有任务时,交给这一组线程去完成任务,这组线程自己去挑选内部空闲的线程去做;不是交给单独的哪个线程;
ExcecutorService newSingleThreadExecutor() 产生一个单独的线程; 也是返回的一个线程池;他自己会挑选一个空闲的线程去执行;
返回的都是一个线程池,即ExcecutorService;
ExcecutorService里面有一个方法 execute(new Runnable());向该线程池提交一个任务;
以上的就和Thread功能一样,只不过可能这里比较强大;
内部类要访问外部类的局部变量,变量前就要加final;
一般的变量都有就近访问的原则,如果局部和成员都有该变量,他就会认为你在访问局部,如果是内部类就要求你去做终态修饰;
面试在做题时,多在细节上体现出来,因为细节上才看得出你的水平,这里可以使用内部类引用外部类的成员,怎么引用;让你的代码更加专业;
定时器的应用:
ScheduleExecutorService Executors.newScheduledThreadPool(intcorePoolSize)
Schedual 调度的意思;该方法表示过多长时间仅执行一次这个方法;
该返回值里有一个方法 ScheduleExecutorService(comment,delay,unit)表示定时器在定时;comment就是Runnable,delay是过多长时间做,只做一次;unit表示数字的度量单位;
还有一个方法 scheduleAtFixedRate (comment, initialDelay,period,unit )指的是每过多少时间都做一次;
面试题:
对于很多语句中的条件表达式,在写每一条语句的时候要明确这里应该填的是什么表达式,
如果是条件表达式要注意,对于boolean型变量就可以直接当成一个条件表达式来看,不需要再用条件表达式的格式去书写;如 boolean flag = ture; if(flag == ture)就是不好的;
对于javabean来说,boolean型的javabean中的get要变为is;
对于枚举的类是用来提供选择的元素的,不能用来new对象;
一般在什么时候选择枚举呢?
(1)这类事物每个事物的具体特点不好统一提炼成一致的;
并且每个具体的事物都会因其他的这类事物有联系和影响;即彼此之间会有一定的关联影响;
(2)这类事物的个数是固定的;尤其是这个就应该考虑;
注意:在枚举中,不可以调用null代替枚举,因为任何一方法调用了非枚举元素之外的值就会抛异常;如valueOf(null)就是不可以的,是会报异常的;当前线程停止;
学会用字符串和类名的互换使用,这是一个技巧,有时候一个对象还没有出来,就可以先用字符串代替;尤其是当很多的属性都可以公用一个字符串时,这是比较好的策略;
想办法偷懒;注意技巧的使用;
做题目一定要做到每个细节都要注意;
代码完了还要注意检测调试是否有出现业务逻辑错误;这个工作必须要有;叫内测;
总结:
整个过程中共四个线程:主线程,控制系统,随机来车和开走两个;
控制系统的线程控制灯的所有变化流程;
如果线程多了,就有可能会有些打印语句执行了,但是没有打印出来;尤其是主线程的打印语句,有可能会比其他线程反应慢,在后面去打印;
做项目一定要有一个整体感和核心对象两个意识;甚至可以简化到用接口和继承;
* 自己做面试题交通控制系统项目;
*
* 做项目一般思路:首先要看有几个对象;把对象都描述完之后,在对象的描述过程中要经常考虑需要几个线程进行操作,是一个线程还是需要多个线程;
*
* 这个项目中有三个对象:路,灯,控制系统;这三个对象就可以构成一个完整的整体,这是在项目设计的过程中必须要思考的问题;
* 一个项目就是一个完整的整体,把整体中的对象进行最简化,看是否可以把某些对象非对象化;这样整个项目就会变得简单很多;首先把项目设计到一个最简单最小的整体后,再动手设计思路;
* 在这里,就不需要把车当成一个对象考虑;只需要把其当成一个属性,或者某一个参数,这里甚至只是用一个计数器来计量了一下车;并无特别对待;
* 同时要注意在一个工程中,必定有一个核心的对象,这里核心对象是灯,而非控制器,只要把核心对象搞明白了,整个工程就明白了,其他的对象也就很容易就出来了;
*
* 做项目一定要有一个最简整体感和核心对象两个意识;甚至可以简化到用接口和继承;
*
* 分析每个对象的特点,以及他们之间的联系这就是业务逻辑,这样来设计思路;总体来说就是从三个角度来描述对象,构造函数,方法,属性;
*
* 经过业务逻辑分析可知:其实是需要控制四个方向的灯就可以控制整个系统;
*
* 一般地,一个工程尤其大工程一般都会有很多的包,所以不可能只能在本包内访问,一般做工程都应该是public,即包名和类名同;
==============================
2108

被折叠的 条评论
为什么被折叠?



