成为java⾼级程序员需要掌握哪些
section 1
1.Core Java,就是Java基础、JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不⾜够,知其然还要知其所以然,JDK的源代码写的⾮常好,要经常查看,对使⽤频繁的类,⽐如String,集合类(List,Map,Set)等数据结构要知道它们的实现,不同的集合类有什么区别,然后才能知道在⼀个具体的场合下使⽤哪个集合类更适合、更⾼效,这些内容直接看源代码就OK了
2.多线程并发编程,现在并发⼏乎是写服务端程序必须的技术,那对Java中的多线程就要有⾜够的熟悉,包括对象锁机制、synchronized关键
字,concurrent包都要⾮常熟悉,这部分推荐你看看《Java并发编程实践》这本书,讲解的很详细
3.I/O,Socket编程,⾸先要熟悉Java中Socket编程,以及I/O包,再深⼊下去就是Java NIO,再深⼊下去是操作系统底层的Socket实现,了解Windows 和Linux中是怎么实现socket的
4.JVM的⼀些知识,不需要熟悉,但是需要了解,这是Java的本质,可以说是Java的母体, 了解之后眼界会更宽阔,⽐如Java内存模型(会对理解Java锁、多线程有帮助)、字节码、JVM的模型、各种垃圾收集器以及选择、JVM的执⾏参数(优化JVM)等等,这些知识在《深⼊Java虚拟机》这本书中都有详
尽的解释,或者去oracle⽹站上查看具体版本的JVM规范.
5.⼀些常⽤的设计模式,⽐如单例、模板⽅法、代理、适配器等等,以及在Core Java和⼀些Java框架⾥的具体场景的实现,这个可能需要慢慢积累,先了解有哪些使⽤场景,见得多了,⾃⼰就⾃然⽽然会去⽤。
6.常⽤数据库(Oracle、MySQL等)、SQL语句以及⼀般的优化
7.JavaWeb开发的框架,⽐如Spring、iBatis等框架,同样他们的原理才是最重要的,⾄少要知道他们的⼤致原理。
8.其他⼀些有名的⽤的⽐较多的开源框架和包,Netty⽹络框架,Apache common的N多包,Google的Guava等等,也可以经常去Github上⼀些代码看看。
section 2
每逢长假都会有很多程序员跳槽,⼗⼀、过年是跳槽黄⾦时刻,尤其是过年。过年的时候年终奖到⼿,没有了多少牵挂,年终同学同事聚会⽐较多,沟通的就多,各种⼯作机会的消息也相应会多,所以跳槽的机会也就会多。跳槽就必不可少的要经过⾯试,那么作为⼀个程序员需要准备哪些⾯试知识呢?下⾯就给⼤家说说。
1、集合框架:
从上图可以看到主要是Collection和Map的继承类和Iterator的实现类,重点掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特点和实现原理,还有多线程使⽤场景和插⼊多还是删除多的时候使⽤什么样的集合类效率会更⾼。
2、IO框架:
主要掌握Reader、Writer、InputStream、OutputStream的继承类,重点掌握字节流(FileInputStream、FileOutputSteam、BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream)和字符流(FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter),并熟练运⽤。还有就是NIO的⼯作原理要知道。
3、String先关:
主要考察对String的处理,顺带考察多线程和,⼤公司就是喜欢考察字符串的算法,主要是字符串查或者剔除,多线程打印字符串,超⼤字符串处理。
4、异常处理:
掌握Throwable继承类,理解Error和Exception的区别,理解运⾏时异常和编译异常的区别,掌握异常的处理⽅法,掌握try、catch、finally、throw、throws关键字的意义,掌握try-catch-finally语句的执⾏顺序,掌握异常的⼯作原理,知道常见的异常有哪些。
5、多线程:
如何创建和启动⼀个线程,有哪些⽅法?多线程如何交互,线程之间的调度、让步、合并,如何同步?⽣产和消费者模型。还有就是掌握线程安全、线程池,死锁。
6、JVM知识:
掌握常见的垃圾回收机制,掌握程序计数器、堆、栈、⽅法区的作⽤,掌握类的加载机制。掌握内存分代模型和⼯作原理。掌握JVM启动参数常见配置,了解JVM调优。
7、与算法:
掌握常见查和排序算法实现及其时间、空间复杂度。掌握常见数据结构如链表、队列、栈的基本原理和实现。
section 3
经常主持对⾼级⼯程师和中基层Tech Leader的⾯试,⼀年下来总有百⼋⼗场,我给⼤家分享⼀下我对于⾼级⼯程师的定位吧,虽然我主要负责.Net团队,但是对于其他语⾔应该也是适⽤的。
⼀ 理论基础:⾼级⼯程师必须有较好的理论基础,既包含⼀些基础的学科知识,也要包含个⼈专攻⽅向的前沿理论。我遇到过形形⾊⾊的求职者,有⼈⾃称精通领域模式,却不明⽩什么是聚合根(领域根)。甚⾄有⼈⽆法列举常⽤的⾮线性结构,更别提伪码实现和应⽤场景分析了。这些⼈普遍振振有词地说, 我有丰富的开发经验,项⽬需要实现的功能我都能做出来,我只是没有去记那些术语名词。抱歉,你不是没有记术语名词,你是根本没有潜⼼看技术⽂章的⼼态,你所谓的学习就是看⼀些诸如《21天精通Java》,《7天,从菜鸟到专家》之类的垃圾书,或者看点视频。那么你这个⾼⼯,⽐别⼈⾼在哪⾥呢?当单位需要你代表团队和合作机构沟通,甚⾄发表专栏的时候,你是不是也准备跟⼤家讲”这个东西我不知道该怎么讲,⼤家可以看⼀下我的代码“。只有代码可秀的⼈是码农,不是⾼⼯,所以我给这类求职者的综评是中+封顶。
⼆ ⼯作经验:⾼级⼯程师必须有过在项⽬中担⼼核⼼模块开发或者整体架构设计的经验,并且项⽬越⾼⼤上越好,⽐如你在互联⽹企业搞过读写分离的实现,你在电商搞过秒杀算法,你在电信⾏业做过⽹络层,我必定会⾼看⼀眼。如果你就仅仅只是⼀个⼈全栈搞过⼏个⼩⽹站,啪啪啪⼀⼤堆成熟框架⽤得倍溜,那么你只是⼀个装配⼯。我给这类求职者的综评是中+封顶。
三 培养潜⼒:⾼级⼯程师必须有全局思维,如果在你过往的⼯作历程中,你对你兄弟团队或者部门的⼯作情形⼀问三不知,甚⾄于⼀个项⽬中,你只懂⾃⼰的模块,其他同事负责的模块你就只会call个API,那么你就是⼀个很难再进⼀步的⼈。对于企业来说,有你不多,⽆你不少,所以我给这类求职者的综评是中+封顶。
四 沟通能⼒:⾼级⼯程师在技术团队中是绝对的核⼼⼈中,⼩项⽬中你就是负责⼈,⼤项⽬中你也要负责带新⼈,那么良好的沟通能⼒必不可少,如果你仅仅是⾃⼰⼀个⼈⼼⾥亮堂,你对企业的价值就要⼤打折扣。这类求职者,我也有录⽤过不少,因为程序员⽊讷可以说是⼀种共性,在这⽅⾯没法太挑剔,但是我给他们的综评是⾼-封顶。
section 4
如果要应聘⾼级开发⼯程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常⽤数据结构、算法、⽹络、操作系统等知识。因此本⽂
不会讲解具体的技术,笔者综合⾃⼰应聘各⼤公司的经历,整理了⼀份⼤公司对Java⾼级开发⼯程师职位的考核纲要,希望可以帮助到需要的⼈。
1 Java基础
1.1 Collection和Map
(1)掌握Collection和Map的继承体系。
(2)掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、 LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、 TreeMap、HashTable的特点和实现原理。
(3)掌握CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap的实现原理和适⽤场景。
1.2 IO
(1)掌握InputStream、OutputStream、Reader、Writer的继承体系。
(2)掌握字节流(FileInputStream、DataInputStream、BufferedInputStream、 FileOutputSteam、DataOutputStream、BufferedOutputStream)和字符流 (BufferedReader、InputStreamReader、FileReader、BufferedWriter、 OutputStreamWriter、PrintWriter、FileWriter),并熟练运⽤。
(3)掌握NIO实现原理及使⽤⽅法。
1.3 异常
(1)掌握Throwable继承体系。
(2)掌握异常⼯作原理。
(3)了解常见受检异常(⽐如FileNotFoundException)、⾮受检异常(⽐如NullPointerException)和错误(⽐如IOError)。
1.4 多线程
(1)掌握Executors可以创建的三种(JAVA8增加了⼀种,共四种)线程池的特点及适⽤范围。
(2)掌握多线程同步机制,并熟练运⽤。
1.5 Socket
(1)掌握Socket通信原理。
(2)熟练使⽤多线程结合Socket进⾏编程。
2
2.1 JVM内存区域划分
(1)掌握程序计数器、堆、虚拟机栈、本地⽅法栈、⽅法区(JAVA8已移除)、元空间(JAVA8新增)的作⽤及基本原理。
(2)掌握堆的划分:新⽣代(Eden、Survivor1、Survivor2)和⽼年代的作⽤及⼯作原理。
(3)掌握JVM内存参数设置及调优。
2.2 类加载
(1)掌握类的加载阶段:加载、链接(验证、准备、解析)、初始化、使⽤、卸载。
(2)掌握类加载器分类及其应⽤:启动类加载器、扩展类加载器、应⽤程序类加载器、⾃定义加载器。
3 J2EE
(1) 掌握、动作及相关特点和⼯作原理。
(2) 掌握Servlet的特点和⼯作原理。
(3) 掌握的IOC和AOP实现原理(反射和动态代理)。
(4) ⾄少掌握⼀个(Spring MVC,Struts等)的⼯作原理,并熟练运⽤。
(5) ⾄少掌握⼀个(Hibernate,MyBatis等)的⼯作原理,并熟练运⽤。
4
(1)掌握线性表和树的特点并熟练运⽤。
(2)掌握常⽤排序和查算法:插⼊排序(直接插⼊排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序,顺序查、⼆分查、哈希查。
(3) 熟练运⽤常见排序和查算法思想解决编程问题。
(4)了解⼏⼤基本算法:贪⼼算法、分治策略、动态规划。
5
(1)掌握⽹络的分层结构,及每层的功能特点。
(2)掌握的通信原理(三次握⼿、四次挥⼿)
6 数据库
(1)掌握复杂的编写。
(2)掌握数据库的优化(SQL层⾯和表设计层⾯)。
(3)⾄少掌握⼀款数据库产品。
(4)熟悉⾼并发、⼤数据情况下的数据库开发。
7 Web技术
(1)掌握AJAX的⼯作原理。
(2)⾄少熟悉⼀款JS框架(⽐如JQuery)。
8 设计模式
(1)熟悉常见的设计模式。
(2)会将设计模式理论应⽤到实际开发中。
9 Linux
(1)熟练运⽤Linux常见命令。
(2)熟悉基本概念及特点。
(3)熟悉Shell脚本。
10 操作系统
(1)掌握操作系统的进程管理。
(2)了解操作系统的I/O。
11 正则表达式
(1)掌握常见正则表达式符号。
(2)熟练运⽤正则表达式解决实际问题(⽐如匹配电话号码、邮箱、域名等)。Section 5
a.Java I/O流
b.Java多线程技术
c.Java⽹络编程
d.Java Swing
后两项可以了解即可,如果项⽬需要可以深⼊研究
3.前端基本技能
* HTML + CSS⽹页开发
* JavaScript
* Jquery
* 浏览器兼容性 CSS hack(了解)
4.熟练使⽤JSP + Servlet进⾏开发
5.MVC设计模式,原理,以及相关框架,如Struts
6.SSH框架
7.缓存技术 session & cookie
8.熟练使⽤⼀种以上Java开发⼯具
Eclipse/MyEclipse/Jbuilder/Jcreator
9.熟练使⽤XML
JDOM w3c.dom SAX
java线程池创建的四种10.Java设计模式
⼯⼚模式,单例模式 ==
11.Java反射机制
反射的各种⽤法
12.了解或熟悉 C, C++, .NET
13.熟悉JDK的配置,环境变量
14.数据库oracle必学,其他最好了解⼀种以上(mysql,sql server,access==)
oracle:视图,索引,存储过程,触发器,游标,包,常⽤函数 ==
15.数据库原理
事务的原理,锁机制,表连接,复杂查询语句(⼯作经验),性能调优,锁表以及解决⽅案==
16.JDBC,连接池
17.Ajax,反向Ajax
18.HTTP协议,request 和 response的原理,HTTP status(了解常⽤的),Https原理
19.熟悉Linux基本命令,使⽤过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项⽬
20.了解windows系统批处理脚本bat
21.了解HTML5,最好学习过
22.熟悉⼀种JS框架,如Prototype
23.J2EE原理熟悉⼀种以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉⼀门脚本语⾔,如python ,ruby
26.了解php/ asp
27.了解ftp协议及原理
28.熟练使⽤Junit测试,熟悉Mockito等测试⼯具
29,熟悉javac,javadoc,native,native2ascii等常⽤命令
31.了解Flex(不学也没关系)
32.了解敏捷开发模式
33.⼯作流workflow⾄少⽤过⼀种,如OSworkflow,了解原理
34.使⽤过VPN了解其原理
35.熟悉jstl表达式和el表达式
36.熟悉webservice,WSDL,SOAP
37.图⽚处理,如图⽚上传,预览,限制⼤⼩等,下⾯共享⼀(垃圾勿喷):
http wenku baidu com/view/05337bfc770bf78a6529541b点html
38.版本控制⼯具,CVS VSS SVN
39,JSON技术,JSON+AJAX
40.分页技术,最好⾃⼰实现过不仅仅是⽤过要知道原理
41.Java Mail
42.Java读写txt,excel
JXL技术
43.JVM原理,JVM内存管理,GC,Java堆栈池
44.熟练使⽤下⾯的⼯具:
office办公软件,word,excel,ppt等
plsql,sqldevelop 数据库开发⼯具
outlook⼤公司都⽤
ue编辑器
浏览器控制台,调试
SHH/PUTTY 远程
45.UML建模⼯具 Rational Rose等
46.使⽤log4j
47.使⽤过开放API如百度地图,腾讯街景,新浪微博等
48.页⾯静态化技术(伪静态页⾯)UrlRwriter
49.报表技术,使⽤过报表制作⼯具,如⽔晶易表
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论