1、Java基础技术体系掌握牢固:
- JVM内存分配
- 垃圾回收
- 类装载机制
- JVM性能优化
- 反射机制
- 多线程
- 网络编程
- 常用数据结构和相关算法
2、对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式:
- 熟练使用UML工具以及各种流程图
- 经典的设计模式会手写以及熟知使用场景
- 概要设计与详细设计
- 面向对象的核心思想需要运用在代码编程中,例如:高内聚低耦合
3、目前流行开源框架,除了熟练使用,还需要掌握核心原理和实现
- Spring
- Springmvc
- MyBatis
建议看源码以及debug配合掌握实现原理。
4、熟悉Oracle、MySQL等SQL,以及MongoDB等NoSQL开发。
- 特别是MySQL,相关的索引优化、SQL查询优化、慢的事务优化等,以及MySQL的分库分表等也需要掌握。
- MongoDB等典型的NoSQL大数据场景设计
5、CDN,以及分布式缓存系统Redis或 Memcached的设计和研发
CDN与分布式缓存的设计原理其实是一致的,重点你需要掌握两者之间的区别和使用场景。
6、熟悉底层中间件、分布式技术(包括缓存、消息系统、热部署)、消息中间件:Kafka、ActiveMQ、RabbitMQ,工作流中间件:JBPM。
- 分布式技术涉及范围比较广,例如相关的消息中间件就会涉及到3个以上,为什么要选择Kafka或者RabbitMQ,选择和比较需要掌握。
- 除此之外,很多内部系统还会涉及到JBPM工作流中间件等。
7、精通shell编程,熟练应用awk、sed、grep、strace、tcudump、gdb等常用命令。
8、有大型分布式、高并发、高负载(大数据量)、高可用性系统设计开发经验。
大型分布式就会设计到高并发解决方案,以下有相关的知识。
9、对配置管理和敏捷研发模式有所了解(svn,git)。
10、熟悉常见的一些解决方案及其原理:单点登录、分布式缓存、SOA、全文检索、消息中间件,负载均衡、连接池、流计算等。
11、能大概知道市面上主流技术的特点及业务瓶颈,例如秒杀系统等如何设计。
相关的知识整理如下: