以理论与实践相结合的方式,我一般不会问上面这类纯粹的知识和理论问题,而让他写一段程序,证明HashMap是线程不安全的。接着,让我们再次修改这个程序,以保证线程安全。
如面试等,如果有条件的话,最好能给被测试者一台能上Google的电脑,然后给他一段自己的空间和时间,例如一个人在小会议室呆10-20分钟。接着,另外一个监视器,同时观察他在计算机上做了什么。从中可以看出他解决问题的方法,思想。自然,另接显示器这个事,必须事先知道对方。
另外,如果你想节省时间,找出一个不安全的线程,让它告诉你为什么会出现这种怪异现象。
这样,就可以让写程序来证明List中存储的是引用还是对象实体,写程序证明弱引用强引用的区别,写出证明某些设计模式效果的程序。
这种方法,不但能检验基础知识,也能检验思考能力。要是对所学的知识了解不够,这一证明过程实际上相当困难…
这种方法的强大之处在于,你没有足够的理解Java,却能粗略地测量对方的水平。
比方说,你看不懂对方的程序,完全可以以学生的身份进行咨询。那些真正了解概念的人,就是懂得如何用浅显易懂的方法把一种知识讲清楚,他能够一路顺风向你诉说,落在你的脚下,使你感到唾弃。一个人,如果能够说出这样的概念,通常在相关领域并不是一个能手。
我会在面谈时,有时装糊涂,故意看对方能不能说清楚。遇上一见钟情,就会自生自灭,很有趣;遇上高手,真的收获颇丰。当然,也有的时候也真的不懂,虚心学习,但是边学边问,基本能了解对方水平。
就面试而言,找到一条比自己更优秀的人才的方法,才是最有希望的途径。要不然,只能招到低于自己水平的人才,那公司的未来也只能局限在领导水平上…
在以商业为主导的情况下,重点在于如何建立商业模式,如何应对可能的商业变化,如何进行版本划分,以及制定迁移升级计划。
若要做相对低级的技术优化,那就集中在性能,被Java封装底层技术的细节,操作系统,Network等基础知识的掌握程度。越仔细地把握,越好。
OS层次:进程与线程,进程的创建方式,线程的创建方式。存储器和换页概念,进程通讯,锁等。
网路通讯层次:7/5层模式,ip分片重组,ip路由,tcp握手,udp重组,网络风暴的起因等。
程序设计语言层次:面向对象、重载和重写、多态。物体建立模式,继承与合成,语言特征等。
资料结构及算法:数组链表,地图应用方案。基础排序算法,算法分析等。
资料库层次:索引、SQL、事务隔离等。
资料方面:二元运算,每一类所占字节数目,各类数之最大、最小值等。
1、先说结论:基础不扎实的采访者不能提出这样以小见大的问题。
2.可列出以下内容:
在电子线路级和非门级如何实现?怎样用逻辑电路制作最简单的计算器?例如,三体中所描述的秦始皇是如何利用人肉方阵做计算机预测天体运动规律的?
考题:“计算机构成原理”,是大学一年级的课程。
system.out.println函数在屏幕上究竟是怎样显示字符的呢?包括字符集,系统类,静态变量,ascii代码,IO,buffer,OS,图形卡驱动。
检讨要点:电脑构成原理,操作系统,JDK,字符集,乱码问题。
为何java采用单一的继承?利弊何在?怎样弥补它的缺点?如何实现受欢迎的框架和最佳设计方法?如何在C语言中模拟单根类继承的编程模式?
OOP,设计模式,OOP。
类图与集合类的选择决定?许多数据结构都会被挖掘出来。
检视点:数据结构
类负载和运行的原理,次序,及其在内存中的分配?这是什么扩展和回退点?
JVM检测点。
volatile关键字的作用和jvm编译优化?可引发并发问题。
观察点:并行,hotspot。
怎样引发一个异常?怎样制作一个不会崩溃的java程序?