一名3年工作经验的java程序员应该具备的技能? 下载本文

内容发布更新时间 : 2024/5/26 23:14:21星期一 下面是文章的全部内容请认真阅读。

一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。 1、基本语法

这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作 用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满 意,因为能看出你非常热衷研究技术。 最深入的一次,我记得面试官直接问到了我Volatile关 键字的底层实现原理(顺便插一句,面试和被面试本身就是相对的,面试官能问这个问题同时也让面试者感觉到面试官也是一个喜爱研究技术的人,增加了面试者对 公司的好感,我最终选择的就是问了这个问题的公司),不要觉得这太吹毛求疵了—-越简单的问题越能看出一个人的水平,别人对你技术的考量绝大多数都是以深度优先、广度次之为标准的,切记。 2、集合

非常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。

集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、 HashSet的实现原理,能流利作答,当然能掌握

CopyOnWrite容器和Queue是再好不过的了。另外多说一 句,

ConcurrentHashMap的问题在面试中问得特别多,大概是因为这个类可以衍生出非常多的问题,关于ConcurrentHashMap, 我给网友朋友们提供三点回答或者是研究方向:

(1)ConcurrentHashMap的锁分段技术。

(2)ConcurrentHashMap的读是否要加锁,为什么。

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器。 3、框架

老生常谈,面试必问的东西。一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做,比如我想要在Spring初始化bean 的时候做一些事情该怎么做、想要在bean销毁的时候做一些事情该怎么做、MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习 框架的使用细节自然都不成问题。

如果上面你的问题答得好,面试官往往会深入地问一些框架的实现原理。问得最多的就是Spring AOP的实现原理,当然这个很简单啦,两句话就搞定的的事儿,即使你不会准备一下就好了。我遇到的最变态的是让我画一下Spring的Bean工厂实 现的UML图,当然面对这样一个有深度的问题,我是绝对答不出来的/(ㄒoㄒ)/~~

4、数据库

数据库十有八九也都会问到。一些基本的像和 all的区别、left join、几种索引及其区别就不谈了,比较重要的就是数据库性能的优化,如果对于数据库的性能优化一窍不通,那么有时间,还是建议你在面试前花一两天专门 把SQL基础和SQL优化的内容准备一下。

不过数据库倒是不用担心,一家公司往往有很多部门,如果你对数据库不熟悉而基本技术又非常好,九成都是会要你的,估计会先把你放到对数据库使用不是要求非常高的部门锻炼一下。 5、Web方面的一些问题

Java主要面向Web端,因此Web的一些问题也是必问的。 我碰到过问得最多的两个问题是: 谈谈分布式Session的几种实现方式。

常用的四种能答出来自然是让面试官非常满意的。

另外一个常问的问题是:讲一下Session和Cookie的区别和联系以及Session的实现原理。这两个问题之外,web.xml里面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至少能对它们的使用知根知底。另外,一些细节的方面比如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。

6、数据结构和算法分析

数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中绝对能派上用场。数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较 重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。记得某次面试,某个面试官和 我聊到了数据库的索引,他问我:你知道索引使用的是哪种数据结构实现吗? 我答到用的Hash表吧,答错。他又问,你知道为什么要使用树吗?我答到因为Hash表可能会出现比较多的冲突,在千万甚至是上亿级别的数据面 前,会大大增加查找的时间复杂度。而树比较稳定,基本保证最多二三十次就能找到想要的数据,对方说不完全对,最后我们还是交流了一下这个问题,我也明白了 为什么要使用树,这里不说,网友朋友们觉得索引为什么要使用树来实现呢?

至于算法分析,不会、不想研究就算了,记得某次面试对方问我,Collections.sort方法使用的是哪种排序方法,额,吐血三升。当然为了 显示我的博学,对算法分析也有一定的研究(⊙﹏⊙)b,我还是硬着头皮说了一句可能是冒泡排序吧。当然答案肯定不是,有兴趣的网友朋友们可以去看一下 Collections.sort方法的源代码,用的是一种叫做TimSort的排序法,也就是增强型的归并排序法。 7、Java虚拟机

出乎我的意料,Java虚拟机应该是很重要的一块内容,结果在这几家公司中被问到的概率几乎为0。要知道,我去年可是花了大量的时间去研究Java虚拟机的,光周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》,我就读了不下五遍。

言归正传,虽然Java虚拟机没问到,但我觉得还是有必要研究的,我就简单地列一个提纲吧,谈谈Java虚拟机中比较重要的内容: (1)Java虚拟机的内存布局 (2)GC算法及几种垃圾收集器 (3)类加载机制,也就是双亲委派模型 (4)Java内存模型 (5)happens-before规则 (6)volatile关键字使用规则