1.道
面试官提出一个问题之后,不要简单的停留在其字面意思。想一想为什么要这样问,考的知识点大概是哪些。
1)头一步,面试问题的合理性——具体考察哪些知识点与内容;
2)其次才是具体知识点的
- 1)是什么:基本的知识点——要全面,不能不知道;
- 2)为什么:知识点的原理——是什么知道,为什么、怎么样也得知道;
- 3)怎么样:具体的实现层面如何实现;
eg.
1)HashMap方面的知识点:
- HashMap的特点:存储特点
- 这些特点的原理:
- key的唯一性原理:即,为什么不能存储int等基础数据类型;
- 底层或源码如何实现的;
2)ArrayList
- 特点:存储特点,具体方法
- 原理:存储如何实现,方法如何实现
反思**,平日学习中,经常只了解今日老师教授的这些知识点的内容,其中存在很大的不足:
- 1)【存在意义】为什么会有这些知识内容,其存在的意义,与解决的问题——存在即合理
- 2)【掌握全面】结合其存在意义,是掌握,不只是了解知识点的自身属性与功能——是什么(what is this?)
- 3)【理解深刻】一些属性、功能为什么是这样而不是样——为什么是这样(why is this?)
- 4)【源码实现】最后,这些知识点的具体又是如何实现的?——如何实现的(how is that?)
总结
- 边听讲,边思考,边做“笔记”[理顺逻辑]
- 实践、实践、实践:纸上得来终觉浅,绝知此事要躬行!
建立行之有效的学习方法:
- 每天必须[梳理知识],明确重难点
- 学习编程的捷径–敲,狂敲
- 学习编程的规范–加注释
- “模仿”好的编码习惯
知道某一件事的来龙去脉!【Y姐三连】
- 为什么来?
- 从哪来?
- 什么表象?
- 原因:全面、深刻的探寻
- 产生什么结果?
- 会带来什么样的影响,与趋势?
- 如何解决?
- ……
反思
问题:
- 不是“没听懂”,而是“记不住”【要能说出来,讲清楚】
- 不能知其然,而不知其所以然【合理性】
- 只懂表象,不懂内核【原理性】
在接触先进的技术时,如果我们能将它的底层结构 、本质性的东西搞清楚,会给我们带来莫大的帮助。
学习技术要掌握本质
1.掌握Java的精华特性而且一定要知道——为什么。
比如,Interface和multi-thread:
用interface是更好的多继承的模型,而多线程则是设计到语言一级的重要特性。要完全理解interface是为什么,用多线程又有几种常用的编程模型
大数据技术的核心:
-
应用场景 + 技术选型 = 业务需求
- 每项技术的底层原理、逻辑、合理性:why
- 不同应用场景的解决方案:面试案例——how
2.理解了语言的特性是为什么了之后,就可以试着上升到设计这个层次,毕竟学习语言是要用的。
没门技术的设计模式是什么
目前比较好的开发模式是采用自定向下的面向对象的设计,加上MVC的模式(你可以看一下java私塾的课程内容)。
首先要找出最顶层的对象(这往往是最难的),然后一层一层往下递归,记住每次应符合7+/-2的原则,因为我们人的短记忆就是这样。一般有图形用户界面的应从界面开始设计。
3.有了基本设计模型后,可以学一些设计模式(Design Pattern)。
这是目前证明很有效的。比如体系结构模式(Layering分层,Pipe/Filter管道或过滤器),设计模式(有很多,比如对象池Object Pool、缓冲池Cache等),编程模式(比如Copy-on-Write)。
懂了这些模式之后,就会对系统的整体结构有很好的把握,而学术上也有倾向一个系统完全可以由各种模式组合而成。
另外一个很重要的领域就是并行和分布式计算领域,大概有20种左右。
5.接下来是实践。
项目一定要有实际的商业意义!
做的项目绝对不要只是几个模块,要完整!让招聘的技术人员感觉是真正的开发项目,还是真正的商用项目
结合前面学到的设计模式,理解掌握项目的设计、模块、流程、具体实现;如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。