java高级程序员需要掌握哪些知识

版本1

如果要应聘高级开发工程师职务,仅仅懂得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 Java虚拟机
 
2.1 JVM内存区域划分
 
(1)掌握程序计数器、堆、虚拟机栈、本地方法栈、方法区(JAVA8已移除)、元空间(JAVA8新增)的作用及基本原理。
 
(2)掌握堆的划分:新生代(Eden、Survivor1、Survivor2)和老年代的作用及工作原理。
 
(3)掌握JVM内存参数设置及调优。
 
2.2 类加载
 
(1)掌握类的加载阶段:加载、链接(验证、准备、解析)、初始化、使用、卸载。
 
(2)掌握类加载器分类及其应用:启动类加载器、扩展类加载器、应用程序类加载器、自定义加载器。
 
3 J2EE
 
(1) 掌握JSP内置对象、动作及相关特点和工作原理。
 
(2) 掌握Servlet的特点和工作原理。
 
(3) 掌握Spring框架的IOC和AOP实现原理(反射和动态代理)。
 
(4) 至少掌握一个MVC框架(Spring MVC,Struts等)的工作原理,并熟练运用。
 
(5) 至少掌握一个ORM框架(Hibernate,MyBatis等)的工作原理,并熟练运用。
 
4 数据结构与算法
 
(1)掌握线性表和树的特点并熟练运用。
 
(2)掌握常用排序和查找算法:插入排序(直接插入排序、希尔排序)、选择排序(直接选择排序、堆排序)、交换排序(冒泡排序、快速排序)、归并排序,顺序查找、二分查找、哈希查找。
 
(3) 熟练运用常见排序和查找算法思想解决编程问题。
 
(4)了解几大基本算法:贪心算法、分治策略、动态规划。
 
5 计算机网络
 
(1)掌握网络的分层结构,及每层的功能特点。
 
(2)掌握TCP/IP的通信原理(三次握手、四次挥手)
 
6 数据库
 
(1)掌握复杂的SQL语句编写。
 
(2)掌握数据库的优化(SQL层面和表设计层面)。
 
(3)至少掌握一款数据库产品。
 
(4)熟悉高并发、大数据情况下的数据库开发。
 
7 Web技术
 
(1)掌握AJAX的工作原理。
 
(2)至少熟悉一款JS框架(比如JQuery)。
 
8 设计模式
 
(1)熟悉常见的设计模式。
 
(2)会将设计模式理论应用到实际开发中。
 
9 Linux
 
(1)熟练运用Linux常见命令。
 
(2)熟悉Linux操作系统基本概念及特点。
 
(3)熟悉Shell脚本。
 
10 操作系统
 
(1)掌握操作系统的进程管理。
 
(2)了解操作系统的I/O。
 
11 正则表达式
 
(1)掌握常见正则表达式符号。
 
(2)熟练运用正则表达式解决实际问题(比如匹配电话号码、邮箱、域名等)。
 

版本2

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

 

每逢长假都会有很多程序员跳槽,十一、过年是跳槽黄金时刻,尤其是过年。过年的时候年终奖到手,没有了多少牵挂,年终同学同事聚会比较多,沟通的就多,各种工作机会的消息也相应会多,所以跳槽的机会也就会多。跳槽就必不可少的要经过面试,那么作为一个Java程序员需要准备哪些面试知识呢?下面就给大家说说。

1、集合框架:

java高级程序员需要掌握哪些知识_第1张图片

从上图可以看到主要是Collection和Map的继承类和Iterator的实现类,重点掌握ArrayList、LinkedList、Vector、Stack、PriorityQueue、HashSet、LinkedHashSet、TreeSet、HashMap、LinkedHashMap、TreeMap、WeakHashMap、EnumMap、TreeMap、HashTable的特点和实现原理,还有多线程使用场景和插入多还是删除多的时候使用什么样的集合类效率会更高。

2、IO框架:

java高级程序员需要掌握哪些知识_第2张图片主要掌握Reader、Writer、InputStream、OutputStream的继承类,重点掌握字节流(FileInputStream、FileOutputSteam、BufferedInputStream、BufferedOutputStream、DataInputStream、DataOutputStream)和字符流(FileReader、FileWriter、BufferedReader、BufferedWriter、InputStreamReader、OutputStreamWriter),并熟练运用。还有就是NIO的工作原理要知道。

3、String先关:

主要考察对String的处理,顺带考察多线程和算法,大公司就是喜欢考察字符串的算法,主要是字符串查找或者剔除,多线程打印字符串,超大字符串处理。

4、异常处理:

java高级程序员需要掌握哪些知识_第3张图片掌握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,那么你就是一个很难再进一步的人。对于企业来说,有你不多,无你不少,所以我给这类求职者的综评是中+封顶。

四 沟通能力:高级工程师在技术团队中是绝对的核心人中,小项目中你就是负责人,大项目中你也要负责带新人,那么良好的沟通能力必不可少,如果你仅仅是自己一个人心里亮堂,你对企业的价值就要大打折扣。这类求职者,我也有录用过不少,因为程序员木讷可以说是一种共性,在这方面没法太挑剔,但是我给他们的综评是高-封顶。

 

转载自:https://blog.csdn.net/Jailman/article/details/78434486

你可能感兴趣的:(随笔)