博学,审问、慎思、明辨、笃行
读实用书时要提出的四个问题:
(1)整体来说,这本书到底在谈些什么?big what? 并没有改变多少。
(2)作者细部说了什么,怎么说的? small what? how?
(3)这本书说得有道理吗? 是全部有道理,还是部分有道理?why?
作者最终的目标,加上他建议的达成目标的方法--这要看你认为追求的是什么,以及什么才是最好的追求方法而定。
在什么范围,什么条件下适用,在什么范围,什么条件下不适用。要知道它能做什么,它不能做什么
(4)这本书跟你有什么关系? 理论联系实际
赞同一本实用性的书,确实需要你采取行动。 照着作者希望你做的方式来行动。How
不断操练身体和头脑,首先从不会到会、其次由会到熟练、再其次熟练到精,最后由精到通(融汇贯通),举一反三,触类旁通,
行动:为达到某种目的而进行的活动。行动目标,行动方法,行动开始时间,结束时间,行动人,行动地点,行动方式。
完全扔掉书,进行实践。
如学车:刚开始不会按着书和师傅指令动作比较慢而且经常出现错误练习着,在不停的训练过程中动作越来越快、错误越来越少进入半会不会的状态;
然后提高训练标准再继续操练,偶尔会犯点小错误,基本上不会犯大错误,进入会开状态,但不熟练;
然后继续加强操练,经过一段时间有意识的操练,慢慢地开始熟练了,能够上路上跑了初步达到初级驾驶员(拿到证),
再然后在路上继续练习,能够处理在各种异常情况,而且又快又好的在路上行驶,初步达到中级驾驶员的层次(在路上跑个1-2年,在各种汽车比赛中成绩比较好)
最后,在精的层次上继续操练、思考能够将驾驶技术方法迁移到其他领域:如学游泳、学骑自行车、学烹饪、学裁缝等就达到通(学)的层次。(需要多年的实践、思考、领悟)
学车/骑自行车:理论就是要做题,实践:就是要上车操练。
武术:主要是实践
厨艺:理论就是看菜谱,实践:按菜谱买菜,配菜,实际炒菜,品尝,调整
木匠/铁匠/建筑师:设计、实践,调整,在设计,在实践。
美容美发:
装修
裁剪
编程/软件工程/建筑工程在道的层次上很相近
最忌讳:1 没有目标/提不出问题,没有时间和资源限制,自己太放松,要有适当的紧迫感和压力感
2 重“看书”,轻“提问题,思考,讨论,实践” 有没有收获 关键看思考的深度是否能够表达出来,实践出的东西是否是可见的,并基于这个一个原型反馈不断改进
1 什么是容器?容器做什么用的? java容器放在内存中还是放在外存中呢?java有几种类型的容器,每一种容器主要做什么用途呢?
2 每一节说了什么,怎么说的?
3 这一章说的有道理吗? 是全部有道理,还是部分有道理? why要用容器?
4 这一章跟自己有什么关系?
赞同一本实用性的书,确实需要你采取行动。 照着作者希望你做的方式来行动。How
连接网络、连接数据库、读写文件、Spring、Hibernate、Struts启动过程中如何读写文件的呢?
计算机启动顺序及原理是什么?OS(Linux/Windows)启动加载原理是什么? DB(Oracle/Mysql)启动加载原理是什么? 应用服务器(Tomcat)启动原理?JVM启动原理?应用程序启动原理是什么?
实际操作(编写代码),做实验。
编程与开车,厨艺 有想通的地方,理论指导,以实践为主。
能力级别:不会(了解)——领会(理解)——熟练——精(why)——通(融汇贯通)
练习题没做:(8)(10)(16)(17)(18)(26)(27)(28) - (42)
本章涉及到得算法和数据结构:数据结构 数组、栈、队列、链表、递归、红黑-树、哈希表(但没包括图,串结构在String中):Array/List/Set/Queue/Map/......
(内存的)排序、查找:Arrays和Collections(但没包含外存排序、查找) 理清数据结构特性和算法思想从而可以帮助较好的理解和使用
本章涉及到得编程思想及设计模式:迭代器模式Iterator、CollectionData是适配器设计模式的一个实例、生成器模式、享元模式、模板方法
本章涉及到比较好的工具:net.mindview.util.Stack
本章设计到得计算机理论知识:java内存管理
第17章容器深入研究 (研习:掌握层次:)P495 课后练习在P427
17.1 完整的容器分类法(研习:1掌握层次:领会)P495
Java SE5新添加了:
Queue接口及其实现PriorityQueue和各种风格的BlockingQueue,其中BlockingQueue将在第21章中介绍
ConcurrentMap接口及其实现ConcurrentHashMap,它们也是用于多线程机制的,在第21章中介绍
CopyOnWriteArrayList和CopyOnWriteArraySet,也是用于多线程机制的。
EnumSet和EnumMap,为使用enum而设计的Set和Map的特殊实现,在19章介绍
在Collections类中的多个便利方法。
17.2 填充容器(研习:1掌握层次:领会)P496
17.2.1 一种Generator解决方案P497
17.2.2 Map生成器P498
17.2.3 使用Abstract类
17.3 Collection的功能方法(研习:1掌握层次:领会)P506
17.4 可选操作(研习:1掌握层次:领会)P508
17.4.1 未获支持的操作:
Arrays.asList():返回固定尺寸的List, 抛出UnsupportedOperationExcepton
Collections.unmodifiableList():产生不可修改的列表。目标是产生“常量”容器对象。 抛出UnsupportedOperationExcepton
17.5 List的功能方法(研习:1掌握层次:领会)P511
17.6 Set和存储顺序(研习:1掌握层次:领会)P513
Set(interface):实现equals()方法以确保对象的唯一性。
HashSet和LinkedHashSet: 对存入HashSet的元素必须定义hashCode()
TreeSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口。
对于良好的编程风格而言,你应该在覆盖equals()方法时,总是同时覆盖hashCode方法。
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
17.6.1 SortedSet
17.7 队列(Queue)(研习:1掌握层次:领会)P516
除了并发应用,Queue在JavaSE5中仅有的两个实现是LinkedList和PriorityQueue,差别是在于排序行为而不是性能。
17.7.1 优先级队列
17.7.2 双向队列P518
17.8 理解Map(研习:1掌握层次:领会)P519
基本思想是它维护的是键-值(对)关联,可以使用键来查找值。
标准的Java类库中包含了Map的几种基本实现,包括:HashMap(效率), TreeMap(键值对的保存及呈现次序), LinkedHashMap, WeakHashMap,ConcurrentHashMap(并发),IdentityHashMap.
17.8.1 性能P520
ConcurrentHashMap 一种线程安全的Map, 它不涉及同步加锁。
17.8.2 SortedMapP522
SortedMap现阶段的唯一实现是TreeMap,可确保键处于排序状态
17.8.3 LinkedHashMap
17.9 散列与散列码P524
自定义对象作为HashMap的键时,要重载自定义对象的hashCode()和equals()方法,否则内存地址不同的两个自定义对象将作为2个不同的键
17.9.1 理解hashCode()(研习:1掌握层次:不会)P526
17.9.2 为速度而散列P528 练习题P454
查询一个值得过程:首先是计算散列码,然后使用散列码查询数组,最后在该数组位置的list中使用equals()方法进行线性的查询,将结果返回。
17.9.3 覆盖hashCode()(研习:1掌握层次:领会)P531
17.10 选择接口的不同实现(研习:1掌握层次:走马观花)P535
17.10.1 性能测试框架
17.10.2 对List的选择
17.10.3 微基准测试的危险P543
17.10.4 对Set的选择
17.10.5 对Map的选择P545
17.11 使用方法(研习:1掌握层次:走马观花)P548
17.11.1 List的排序和查询
17.11.2 设定Collection或Map为不可修改P552
17.11.3 Collection或Map的同步控制
17.12 持有引用(研习:1掌握层次:没看明白)P554
17.12.1 WeakHashMap p555
17.13 Java 1.0/1.1的容器(研习:1掌握层次:没看明白)(历史遗留问题)P556
17.13.1 Vector和Enumeration
17.13.2 Hashtable
17.13.3 Stack
17.13.4 BitSet
17.14 总结P560