java程序员⾯试应该具备的⼀些基本技能
这⾥列举⼀些Java程序员⾯试应该要具备的⼀些基本技能,仅当参考。
1.基本语法
包括static、final、transient等关键字的作⽤,foreach循环的原理等等。越简单的问题越能看出⼀个⼈的⽔平,别⼈对你技术的考量绝⼤多数都是以深度优先、⼴度次之为标准的,切记。
2.集合
⾮常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。
3.设计模式
⾯试中关于设计模式的问答主要是三个⽅向:你的项⽬中⽤到了哪些设计模式,如何使⽤;知道常⽤设计模式的优缺点;能画出常⽤设计模式的UML图。
4.多线程
这也是必问的⼀块了。问得深⼊⼀些⽐如说Thread和Runnable的区别和联系、多次start⼀个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,⼏次⾯试⼏乎都被同时问到了⼀个问题,问法不尽相同,总结起来是这么⼀个意思:
假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的⼤⼩,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?你对这个问题是否有答案呢?不难,urrent下就有现成的类可以使⽤。
另外,线程池也是⽐较常问的⼀块,常⽤的线程池有⼏种?这⼏种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际⼀些的,会给你⼀些具体的场景,让你回答这种场景该使⽤什么样的线程池⽐较合适。
最后,虽然这次⾯试问得不多,但是多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通⽅法和锁静态⽅法、死锁的原理及排查⽅法等等...
5.框架
⼀般来说会问你⼀下你们项⽬中使⽤的框架,然后给你⼀些场景问你⽤框架怎么做,⽐如我想要在spring初始化bean的时候做⼀些事情该怎么做、想要在bean 销毁的时候做⼀些事情该怎么做、MyBatis中$和#的区别等等,这些都⽐较实际了,平时积累得好、有多学习框架的使⽤细节⾃然都不成问题。
6.数据库
数据库⼗有⼋九也都会问到。⼀些基本的像union和union all的区别、left join、⼏种索引及其区别就不谈了,⽐较重要的就是数据库性能的优化,如果对于数据库的性能优化⼀窍不通,那么有时间,还是建议你在⾯试前花⼀两天专门把SQL基础和SQL优化的内容准备⼀下。
7.数据结构和算法分析
数据结构和算法分析,对于⼀名程序员来说,会⽐不会好⽽且在⼯作中绝对能派上⽤场。数组、链表是基础,栈和队列深⼊⼀些但也不难,树挺重要的,⽐较重要的树AVL树、红⿊树,可以不了解它们的具体实现,但是要知道什么是⼆叉查树、什么是平衡树,AVL树和红⿊树的区别。
8.Java虚拟机
谈谈Java虚拟机中⽐较重要的内容:Java虚拟机的内存布局、GC算法及⼏种垃圾收集器、类加载机制,也就是双亲委派模型、Java内存模型、happens-before规则、volatile关键字使⽤规则。也许⾯试⽆⽤,但在⾛向⼤⽜的路上,不可不会。
9.Web⽅⾯的⼀些问题
java中常用的设计模式有哪些现在的Java主要⾯向Web端,因此Web的⼀些问题也是必问的。我碰到过问得最多的两个问题是:谈谈分布式Session的⼏种实现⽅式、讲⼀下Session和Cookie的区别和联系以及Session的实现原理。
这两个问题之外,l⾥⾯的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理⼀清⼆楚吧,⾄少能对它们的使⽤知根知底。另外,⼀些细节的⽅⾯⽐如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。
"错过了太阳的时候,请你不要哭泣,因为如果你哭了,就会错失接下来的⽉亮和漫天星⾠。"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论