项目经验不丰富、技术不突出的程序员怎么打动面试官?
要想拿高工资,JDK源码不可不读。上面的内容可能还和具体场景联系起来,JDK源码就是实打实地看你平时是不是爱钻研了。我面试过程中被问了不少JDK源码的问题,其中最刁钻的一个是:String的hashCode()方法是怎么实现的,幸好咱平时String源代码看得多,答了个大概。JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码: List、Map、Set实现类的源代码 ReentrantLock、AQS的源代码 AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的 线程池的实现原理 类中的方法以及每个方法的作用 这些其实要求蛮高的,去年一整年基本把JDK中重要类的源代码研究了个遍,真的花费时间、花费精力,当然回头看,是值得的——不仅仅是为了应付面试。 7、框架 老生常谈,面试必问的东西。一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做,比如我想要在Spring初始化bean的时候做一些事情该怎么做、想要在bean销毁的时候做一些事情该怎么做、MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习框架的使用细节自然都不成问题。 如果上面你的问题答得好,面试官往往会深入地问一些框架的实现原理。问得最多的就是Spring AOP的实现原理,当然这个很简单啦,两句话就搞定的的事儿,即使你不会准备一下就好了。我遇到的最变态的是让LZ画一下Spring的Bean工厂实现的UML图,当然面对这样一个有深度的问题,按目前的水准是绝对答不出来的/(ㄒoㄒ)/~~ 8、数据库 数据库十有八九也都会问到。一些基本的像union和union all的区别、left join、几种索引及其区别就不谈了,比较重要的就是数据库性能的优化,如果对于数据库的性能优化一窍不通,那么有时间,还是建议你在面试前花一两天专门把SQL基础和SQL优化的内容准备一下。 不过数据库倒是不用担心,一家公司往往有很多部门,如果你对数据库不熟悉而基本技术又非常好,九成都是会要你的,估计会先把你放到对数据库使用不是要求非常高的部门锻炼一下。 9、数据结构和算法分析 数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中绝对能派上用场。数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。记得某次面试,某个面试官和我聊到了数据库的索引,他问我: 你知道索引使用的是哪种数据结构实现吗? 我答到用的Hash表吧,答错。他又问,你知道为什么要使用树吗?我答到因为Hash表可能会出现比较多的冲突,在千万甚至是上亿级别的数据面前,会大大增加查找的时间复杂度。而树比较稳定,基本保证最多二三十次就能找到想要的数据,对方说不完全对,最后我们还是交流了一下这个问题,我也明白了为什么要使用树,这里不说,网友朋友们觉得索引为什么要使用树来实现呢? 至于算法分析,不会、不想研究就算了,记得某次面试对方问我,Collections.sort方法使用的是哪种排序方法,额,吐血三升。当然为了显示自己的博学,对算法分析也有一定的研究(⊙﹏⊙)b,我还是硬着头皮说了一句可能是冒泡排序吧。当然答案肯定不是,有兴趣的网友朋友们可以去看一下Collections.sort方法的源代码,用的是一种叫做TimSort的排序法,也就是增强型的归并排序法。 10、Java虚拟机 出乎我的意料,Java虚拟机应该是很重要的一块内容,结果在这几家公司中被问到的概率几乎为0。要知道,LZ去年可是花了大量的时间去研究Java虚拟机的,光周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》,我就读了不下五遍。 言归正传,虽然Java虚拟机没问到,但我觉得还是有必要研究的,就简单地列一个提纲吧,谈谈Java虚拟机中比较重要的内容: Java虚拟机的内存布局 GC算法及几种垃圾收集器 类加载机制,也就是双亲委派模型 Java内存模型 happens-before规则 volatile关键字使用规则 也许面试无用,但在走向大牛的路上,不可不会。 11、Web方面的一些问题 Java主要面向Web端,因此Web的一些问题也是必问的。我碰到过问得最多的两个问题是: 谈谈分布式Session的几种实现方式 常用的四种能答出来自然是让面试官非常满意的,另外一个常问的问题是: 讲一下Session和Cookie的区别和联系以及Session的实现原理 这两个问题之外,web. 里面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至少能对它们的使用知根知底。另外,一些细节的方面比如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。 最后,如果有兴趣有时间,建议学习、研究一下SOA和RPC,面向服务体系,大型分布式架构必备,救命良方、包治百病、屡试不爽。 关于个人潜力 关于这一点我觉得是应该是贯穿于整个面试过程的。如果你能做到如下几点,相信会在面试官心里留下一个好印象。 面试时能够保持良好、平稳的心态。条理清晰地回答面试官的问题,同时体现自己有较浓的技术兴趣。 整个面试过程态度积极向上,不要有任何悲观消极的态度(尤其在谈到以前公司情况的时候,即使有再多的不满),就不会有问题。 关于HR面,不能轻视。很多公司HR对面试者都有一票否决权。因此碰到一些难处理的问题一定要慎重回答,四个字:滴水不漏。 不是所有的程序员都是大牛,都能靠技术征服面试官。大部分程序员没有太好的项目经验、技术也不是特别突出,不必妄自菲薄,因为还有很多人和你一样。 重要的是:怎么在和你差不多的程序员中脱颖而出? 我相信,只要你在面试过程中体现出对技术的热情、积极向上的态度、不卑不亢的风貌就能给面试官留下一个良好的印象,而当你具备了这些特质时,那你已经变成准大牛了。 试问,还有哪家求贤若渴的公司会因为一些表面的问题刁难你呢?还有哪个公司会拒绝你成为储备人才呢? 结语 想起一句话——你若盛开,清风自来。献给正在程序员修炼路上奋力前行的你们!共勉! (编辑:焦作站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |