java
JVM的内存结构:包括虚拟机栈、本地方法栈、指令计数器、方法区、堆以及直接内存等,重点需要了解虚拟机栈和堆以及方法区。
class文件结构:实际工作中用的不多,不过了解这部分结构对理解虚拟机的工作机制有极大的帮助,强烈建议多了解,特别是常量池和方法列表的形式,不了解这些想升入学习java基本上是空谈。
线程状态:启动、阻塞、等待(分限时和不限时等待)、结束,了解这些状态代表的意义,以及哪些操作分别会进入什么状态,深入的可以对比理解下jstack命令dump出的线程信息对应的线程状态。
JVM自带的命令:虽然有各种视图话的调优工具,但是真正在生产碰到问题的时候发现还是自带的一些命令有用,比较实用的是jps、jstat、jmap、jstack。
垃圾收集器:了解基本的垃圾收集算法(标志清除、复制、标志-整理)以及各自的优缺点,哪些垃圾收集器分别使用的是什么算法,优缺点,新生代和老年代对应的垃圾收集器组合。
类加载和初始化机制:加载、连接(验证、准备、解析)、初始化、使用、卸载。
java语法:主要了解ReentrantLock和synchronized,concurrenthashmap和HashTable等区别,了解线程池的工作原理以及使用方法,了解队列,了解异常以及内部类和反射机制等等
MySQL
MySQL基础:MySQL的核心是数据库架构、索引原理以及字段性质。连项目中数据库的架构都不了解谈优化就是瞎扯淡,作为一个开发者来说数据库优化的核心就是优化索引,而MySQL中索引数据结构用的最多的就是BTree树,某些场景下可能会用到hash索引来做优化。
MyISAM和InnoDB的区别:虽然MyISAM引擎离我们越来越远,但是用MySQL了解此二者的某些核心区别是必须的。InnoDB支持事物、外键、行级锁,MyISAM支持索引前缀压缩和全文索引,基本上来说大部分场景都是适合使用InnoDB,而且据业界大牛预测MySQL官方有计划在未来的版本中集成InnoDB引擎并且做深度优化,所以InnoDB是未来的主要方向。有个地方需要注意的是InnoDB是主键聚簇索引,所以如果主键不规律的话可能insert操作可能导致性能有大的影响。
另外作为一名开发者,数据库的事物类型以及传播级别也是极度有必要清楚的。
缓存
作为一个web应用的开发者对缓存的了解是必须的,目前接触和用的最多的就是memche和ehcache,redias也有了解相比memcache可以固话缓存内容以及支持多种数据类型,性能上似乎目前为止也没啥定论,目前本人也没有使用过redias不做过多评论。一些十分频繁的访问可以考虑用下ehcache做个二级缓存,因为它是本地缓存。另外memcache的内部机制(如缓存非配制剂,以及过期机制也有必要了解)。
linux
对linux我本人之前也有过比较全面的学习,也学习过一段时间的shell编程,但是因为工作内容的关系,目前脑子里记得的也就是一些linux命令了,目前因为时间和工作内容的关系没有刻意去复习相关的东西,工作中基本够用,不懂的稍微百度下基本上也是没问题的。
通信协议
另外对tcp、udp这类协议的区别也要有个基本的了解(前者面向了解需要多次握手,稳定但是耗费资源多)
大数据
有一段时间对大数据很狂热有想往数据分析方向发展的欲望,当时比较系统的学习了下HDFS、MapReduce以及HBase,从原理来说hadoop其实是个很简单的东西,因为设计者封装的很好使用来说不难。之所以搞hadoop能相对普通java开发待遇高一些,我想主要是这个是个新兴的东西的确解决了一些平时很难已解决的问题,其次招hadoop开发的都是些比较好的公司它们给的待遇本身就比普通公司的要高。所以表面看起来搞hadoop的待遇要好些。我的感觉是hadoop的主要优势在于大数据分析,要在数据分析这个行业有所建树算法是要有比较好的底子的,而我明显不具备相关优势。所以在对hadoop有过一段时间的狂热后慢慢的重心又回到了现有的工作中。
一点规划
计划在未来一两年从架构的角度重新审视和总结下过往的工作经验。同时也系统的学习下项目管理的基本理论。
后记
说到最后技术是用来做事的,技术是死的人是活的,工作几年也见过不少人事升迁,技术固然重要但是为人处事更是一门永远需要学习的科目。技术之路是没有尽头的,时间精力有限找准自己的定位非常重要,最后分享一篇对本人很有启发的文章,与诸君共勉,我本人的职业规划已经越来越明晰了,希望还在迷茫的同志们都尽快找到最适合自己的发展计划。http://xjsunjie.blog.51cto.com/999372/1378547'
本文转自 古道卿 51CTO博客,原文链接:http://blog.51cto.com/gudaoqing/1424164