如果要应聘高级开发工程师职务, 仅仅懂得 Java 的基础知识是远远不够的, 还必须懂得常用数据结构算法网络操作系统等知识因此本文不会讲解具体的技术, 笔者综合自己应聘各大公司的经历, 整理了一份大公司对 Java 高级开发工程师职位的考核纲要, 希望可以帮助到需要的人
当前, 市面上有 Java XX 宝典类似的图书, 而且图书中的内容都着重在讲解 Java 最为基础的部分, 最严重的是, 里面有着大量错误的内容, 极具误导性另外, 网上也有各种各样的 Java 面试题, 很多也是着重在 Java 语言基础上实际上, 如果要应聘高级开发工程师职务, 仅仅懂得 Java 的基础知识是远远不够的, 还必须懂得常用数据结构算法网络操作系统等知识因此本文不会讲解具体的技术, 笔者综合自己应聘各大公司的经历, 整理了一份大公司对 Java 高级开发工程师职位的考核纲要, 希望可以帮助到需要的人
1 Java 基础
1.1 Collection 和 Map
(1)掌握 Collection 和 Map 的继承体系
(2)掌握 ArrayListLinkedListVectorStackPriorityQueueHashSetLinkedHashSetTreeSetHashMapLinkedHashMapTreeMapWeakHashMapEnumMapTreeMapHashTable 的特点和实现原理
(3)掌握 CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMap 的实现原理和适用场景
1.2 IO
(1)掌握 InputStreamOutputStreamReaderWriter 的继承体系
(2)掌握字节流 (FileInputStreamDataInputStreamBufferedInputStreamFileOutputSteamDataOutputStreamBufferedOutputStream) 和字符流(BufferedReaderInputStreamReaderFileReaderBufferedWriterOutputStreamWriterPrintWriterFileWriter), 并熟练运用
(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)掌握堆的划分: 新生代 (EdenSurvivor1Survivor2) 和老年代的作用及工作原理
(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)熟练运用正则表达式解决实际问题(比如匹配电话号码邮箱域名等)
来源: http://www.codeceo.com/java-developer-interview-list.html