第一阶段:三年我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的 开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段。第二阶段:五年五年又是区分程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,这些人永远就是个Coder,年纪大一些势必被 更年轻的人给顶替;有些人在三年里,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年 后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物。第三阶段:十年十年又是另一个门槛了,转行或是继续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之努力的话,那么在十年的这个节点上,有些 人必然成长为一名对行业有着深入认识、对技术有着深入认识、能从零开始对一个产品进行分析的程序员,这样的人在公司基本担任的都是CTO、技术专家、首席 架构师等最关键的职位,这对于自己绝对是一件荣耀的事,当然老板在经济上也绝不会亏待你。第一部分总结一下,我认为,随着你工作年限的增长、对生活对生命认识的深入,应当不断思考三个问题:1、我到底适不适合当一名程序员?2、我到底应不应该一辈子以程序员为职业?3、我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?最终,明确自己的职业规划,对自己的规划负责并为之努力。关于项目经验在网上经常看到一些别的朋友有提出项目经验的问题,依照我面试的感觉来说,面试主要看几点:项目经验+基本技术+个人潜力(也就是值不值得培养)。关于项目经验,我认为并发编程网的创始人方腾飞老师讲的一段话非常好:介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自 己有没有把整个系统架构或产品搞清楚,并能介绍清楚,为什么做这个系统?这个系统的价值是什么?这个系统有哪些功能?优缺点有哪些?如果让你重新设计这个 系统你会如何设计?我觉得这就已经足以概括了。也许你仅仅工作一年,也许你做的是项目中微不足道的模块,当然这些一定是你的劣势且无法改变,但是如何弥补这个劣势?从方老师的话中我总结几点:1、明确你的项目到底是做什么的,有哪些功能。2、明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用。3、明确你的模块在整个项目中所处的位置及作用。4、明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术。在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况下(这一定是扣分项),可以通过这种方式来一定程度上地弥补并且增进面试官对你的好感度。关于专业技能写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。01 高可用负载均衡(负载均衡算法)反向代理服务隔离服务限流服务降级(自动优雅降级)失效转移超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)回滚机制(上线回滚、数据库版本回滚、事务回滚)02 高并发应用缓存HTTP 缓存多级缓存分布式缓存连接池异步并发03 分布式事务二阶段提交(强一致)三阶段提交(强一致)消息中间件(最终一致性),推荐阿里的 RocketMQ。04 队列任务队列消息队列请求队列05扩容单体垂直扩容单体水平扩容应用拆分数据库拆分数据库分库分表数据异构分布式任务06 网络安全SQL 注入XSS 攻击CSRF 攻击拒绝服务(DoS,Denial of Service)攻击学习方向:01、maven的使用maven的使用入门maven私服的搭建及部署maven坐标分析/父控设置02、git版本管理及jenkins自动化构建git使用入门培训git常用命令分析和使用jenkins环境搭建及插件配置git+jenkins实现自动化构建03、NoSql专题-redis高性能缓存redis使用入门redis常用命令及客户端的使用redis高可用集群搭建04、NoSql专题-mongodbmongodb使用入门mongodb高可用集群搭建mongodb常用命令及客户端的使用05、分布式专题-zookeeper+dubbo服务协调zookeeper安装部署及命令分析zookeeper客户端的使用zookeeper实现原理分析dubbo的使用入门及配置分析zookeeper+dubbo实现服务注册和发现06、分布式专题-消息中间件activeMq-jms规范及使用activeMq消息分发机制分析kafka实现原理剖析kafka的数据传输事务性及实践练习07、分布式缓存分析对比memcache的原理分析及使用memcache和redis的横向对比分析分布式接口技术webservice/RMI/restful的使用09、高并发专题-数据库层面优化分库分表的原理及规则讲解数据库主备及高可用10、性能调优专题-jvm调优JVM原理剖析jvm内存模型及垃圾回收器的分析11、性能调优专题-容器性能优化nginx性能优化tomcat性能优化12、性能调优专题-数据库优化mysql常见优化手段分析及实践13、高性能容器的使用nginx使用入门nginx负载均衡/反向代理实现14、双十一专题-九阳真经太极聚气之分布式压测平台氤氲紫气之分布式缓存体系盘龙真诀之分布式消息系统金刚之躯之分布式跟踪系统外功辅助之分布式配置系统15、微服务架构技术栈分析springboot的使用16、分布式协调服务zookeeperzookeeper集群及相关概念分析zookeeper java api的使用及实践17、从集中式到分布式架构分布式架构的演进过程分布式架构的基石-TCP/UDP18、分布式通信协议分布式通信协议-HTTP及RESTful分布式通信协议-webservice详解分布式通信协议-RMI分布式通信协议-序列化技术19、分布式服务治理dubbo控制台及监控中心的安装部署dubbo常用配置分析dubbo实战演练20、NIO技术之-NettyNIO基本概念及BIO、AIO的对比分析NIO核心设计思想剖析(Buffer/Channel..)Netty产生的背景及优缺点分析Netty实现IM聊天系统21、分布式缓存技术-Redisredis的安装及数据类型分析Redis客户端的使用Redis高可用方案实战Redis+Lua脚本实现原子操作22、高性能之道-MongoDBMongoDB高可用部署MongoDB动态查询及索引剖析MongoDB集成spring应用23、数据库高性能之道-Mysql分库分表深入分析Mysql主从模型配置/Mycat的使用24、分布式通信技术JMS基本概念和模型ActiveMQ结合Spring开发ActiveMQ静态网络和动态网络链接Kafka的高可用方案及原理分析25、SOA架构及微服务架构什么是SOA架构/为什么需要SOA领域驱动设计方法/典型SOA架构设计spring boot深入剖析spring boot+dubbo企业实战26、Docker虚拟化技术Docker虚拟化技术(镜像/仓库/容器)Docker整合spring bootDocker 服务编排27、导流技术Nginx反向代理、负载均衡Nginx进程模型分析Nginx+keepalived高可用方案28、微服务技术spring boot(mvc)spring boot(REST)spring boot(验证)29、spring cloudspring cloud config clientspring cloud config serverspring cloud netflix eurekaspring cloud netflix ribbonspring cloud hystrixspring cloud feignspring cloud streamspring cloud busspring cloud sleuth30、分布式消息技术-kafkakafka高可用集群及介绍kafka底层实现原理分析31、分布式缓存-redisredis的数据类型分析redis高可用集群方案lua脚本在redis中的应用32、高性能之道-MongoDBMongoDB的基本原理MongoDB常用命令及客户端使用手写基于MongoDB的ORM框架MongoDB高可用解决方案33、数据库高性能-Mysql分库分表深入分析及主从模型数据库中间件Mycat介绍34、性能优化专题从测试的角度解读如何衡量性能了解Linux系统35、虚拟机-JVM内存模型、运行时数据垃圾回收、GC日志调优实战36、容器优化-Tomcattomcat架构分析线程模型分析tomcat调优实战37、Mysql数据库调优Mysql底层存储分析面试技巧之SQL执行计划及优化手段上面知识词汇是否在你脑海里呢?