2015年初收到了阿里的offer,“理想这东西是可以有的,万一实现了那”.下面分享下这一年多的的学习经历,希望能帮到大家。
要成为高级程序员,一定要掌握下面六方面的知识,具体如下图:
第一java基础
这块是最基本 也是最重要的技能,细分为以下六点:
1.Collection和Map
这块是面试时首先考察的部分,如 ArrayList和LinkedList的区别,CopyOnWriteArrayList是如何实现高并发的;HashMap(重点)、LinkedHashMap与TreeMap各自的特点与区别,ConcurrentHashMap的底层实现以及并发机制;HashSet、LinkedHashSet与TreeSet各自的特点与区别。
推荐阅读“Java程序性能优化”的第3章和第4章
2.多线程并发控制,锁优化和线程池
首先要熟悉并发控制的方法 如synchronized、重入锁,读写锁、信号量 的各自的机制与优缺点;接着要熟悉 ”锁”的性能及优化方法;最后要掌握JDK自带的线程池框架 Executor和ThreadPoolExecutor的基本使用和原理。
推荐阅读“Java程序性能优化”的第4章
3.JVM 内存区域,垃圾回收
这块也是面试时重点考察的,要非常清楚JVM的内存模型、内存分配参数 垃圾收集的算法、垃圾收集器的分类
推荐阅读“Java程序性能优化”的第5章
4.JVM调优工具
这块重点会考察 遇到实际的OOM或者系统瓶颈时 通过什么工具解决,主要通过Linux命令行工具、JDK命令行工具(重要)、与可视化工具JConsole和Visual VM。
推荐阅读“Java程序性能优化”的第6章的前5小节
5.类加载机制和类加载器
掌握类加载机制和类加载器机制
推荐阅读“深入理解Java虚拟机”第7章
6.设计模式
掌握常用的设计模式。这块面试的基本会挑一到两个设计模式进行讲解 。
推荐阅读“深入浅出设计模式”
对于这块内容的提升,我主要看得是下面三本书:
1)Java程序性能优化 点击下载
这本书真心不错,我特地买了这本书,看了有3-4遍,受益匪浅啊。
2) 深入理解Java虚拟机 点击下载
对于Java虚拟机相关知识讲解的很透彻,建议阅读2,3,4,5,7,9,12,13章,耐着性子阅读,保你受益匪浅。
3)深入浅出设计模式 点击下载
第二 网络开发
Java网络开发,也是高级开发人员必备的技能,主要包含四个方面:
1.网络编程基础
这块主要掌握网络编程的基本用法,如ServerSocket,Socket,SocketChannel和ServerSocketChannel的基本用法和区别。
推荐阅读“java网络编程精解”的第3,4,5,6,8章
2.HTTP协议
这块主要掌握HTTP协议的概念,request和response包含哪几个部分,还有常见的状态码的含义(如301和302的区别)等。
推荐阅读“HTTP协议详解”
3.IO和NIO区别
重要,主要考察的是NIO比IO的优势在什么地方,NIO是怎么实现非阻塞的,非阻塞底层实现的方式有哪几种?
推荐阅读“Java NIO”
4.netty
Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序,netty提供网络编程中问题的各种解决方案。
这块要掌握netty是什么、他的基本用法、可靠性分析、线程模型等相关知识。
推荐阅读“Netty in Action“
对于这块要着重掌握NIO和常见的网络编程开源框架(如netty,mina等)。
我主要看以下几本书,来掌握这部分知识的:
1)java网络编程精解 点击下载
2)HTTP协议详解 点击下载
3)Java NIO 点击下载
4)Netty in Action 点击下载
里面包含了netty in Action以及两篇可靠性分析文章,可靠性分析、线程模型 这两块是重点要掌握的内容。
第三 开源框架
1.spring框架
重要,这块是企业项目中 使用非常广泛的框架,要从 IOC,AOP, Spring MVC、Spring事务 这几个方面来掌握spring,深入开源 掌握它的原理和实现。
推荐阅读“spring 技术内幕“ 的2,3,4,6章节
2.memcache
重要,高效分布式缓存框架,主要从memcache的优势和使用领域,服务端原理,是否支持同步,分布式算法,如果优化等方面提问。
推荐阅读“memcache手册“ 全文
3.redis
重要,redis是一个key-value存储系统,也是一个分布式的缓存架构,它比memcache更强大,更多的数据结构,持久性。这方面的很大可能会拿memcache进行对比和选型。
推荐阅读“redis入门指南”,“redis实战”
这三块也是面试时,重点考察的知识点,一定要掌握底层原理。我主要看以下几本书,来掌握这部分知识的:
1)Spring技术内幕 点击下载
2)memcache 手册 点击下载
3)redis 入门指南 点击下载
4)redis实战 点击下载
第四 项目经验
重要,从自己做过的项目中找出一到两个,有技术亮点项目,进行详解。如使用了memcache,你要知道项目为什么选择了memcache 他的优势,底层原理,后期如何优化的;项目中遇到的问题,如何解决的;你在项目中的角色;项目目前存在的问题,未来将如何优化。
我这边通常在面试的时候,会通过项目中的memcache,来讲解和redis的区别,底层实现等问题。
第五 apache
nginx这块在京东面试的时候,被问到过,主要考察nginx相比tomcat等传统的服务器的优势在哪里,有什么区别。
建议阅读下面几篇文章:
第六 linux与数据库
1.数据库
重要,至少要熟练掌握一门数据库语言,我熟悉的是oracle。
推荐阅读“oracle 编程艺术”
2.linux
这里会考察,常见的shell脚本命令,文本处理和查看命令,流量和端口检测命令,Awk使用。
推荐阅读“Shell脚本学习指南”
我主要通过下面两本书,来学习掌握的:
1)oracle 编程艺术 点击下载
着重阅读6,8,9,11,13章节,有余力的可继续阅读3,4,5章。一般oracle锁类型 、分区 和 索引 是重点考察的对象。
2)Shell脚本学习指南 点击下载
着重阅读 3,4,5,9章节
以上六个方面,在Java高级程序员面试中,必然会被考察。去年参加了京东,大众点评,去哪儿和阿里巴巴的面试。陆续都到了这些公司的offer,最终选择了阿里巴巴。在这些互联网公司面试中,都有共同的特点,都要求面试人员Java基础扎实,深入开源,能够熟悉使用主流的缓存框架,对技术有热情,学习能力强。
面试技巧:
首先没有捷径,没有宝典,知识是不断积累的过程,临时抱佛脚是不会成功的。
关于简历:简历非常重要,其中技能和项目 一定要写自己熟悉掌握的,面试过程中会根据你写的技能,逐项考察的。
面试时 要自信 不要慌张。最好在面试自己中意的公司前,先找其他公司 先面试下,用以积累经验,查缺补漏。
最后,阿里巴巴社招及2016年的实习生火热内推中,如有感兴趣的同学,投简历到 [email protected] 中,我将以最快的速度给您答复。
分享是一种态度,学习是一种精神!2015 祝大家越来越好