一名3年工作经验的程序员应该具备的技能》,在机缘巧合之中,看了这篇博客。感觉自己真的是很差,一直想着会写if…else…就已经是一名程序员了,在工作之余也很少学习。于是,自己的code技能一直没有什么进步,只是随着工作的时间增长,在增长着年龄,感觉很失败。
之前也有过一些写blog的经历,但是往往都败给了坚持。这次就不多说了,直接给自己总结下技术方面的不足,以便以后自己好好学习。
专业技能:
1、基本语法
这包括static、final、transient等关键字的作用,foreach循环的原理等等。
2、集合
基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理。
3、设计模式
三个方向:
(1)你的项目中用到了哪些设计模式,如何使用
(2)知道常用设计模式的优缺点
(3)能画出常用设计模式的UML图
4、多线程
Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。多线程同步、锁这块也是重点。
5、IO
IO分为File IO和Socket IO。Socket IO是比较重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。深入一些的话,NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等。
6、JDK源码
(1)List、Map、Set实现类的源代码
(2)ReentrantLock、AQS的源代码
(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
(4)线程池的实现原理
(5)Object类中的方法以及每个方法的作用
7、框架
画一下Spring的Bean工厂实现的UML图
8、数据库
union和union all的区别、left join、几种索引及其区别
9、数据结构和算法分析
要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。
谈谈Java虚拟机中比较重要的内容:
(1)Java虚拟机的内存布局
(2)GC算法及几种垃圾收集器
(3)类加载机制,也就是双亲委派模型
(4)Java内存模型
(5)happens-before规则
(6)volatile关键字使用规则
也许面试无用,但在走向大牛的路上,不可不会。
11、Web方面的一些问题
谈谈分布式Session的几种实现方式?
讲一下Cookie和Session的区别和联系以及Session的实现原理?
web.xml里面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至少能对它们的使用知根知底。另外,一些细节的方面比如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。
————————————————