第一阶段:三年

我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人。这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发。我们知道如何团队协作、如何使用项目管理工具、项目版本如何控制、我们写的代码如何测试如何在线上运行等等,积累了一定的 开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段。java学习群669823128

第二阶段:五年

五年又是区分程序员的第二个门槛。有些人在三年里,除了完成工作,在空余时间基本不会研究别的东西,这些人永远就是个Coder,年纪大一些势必被 更年轻的人给顶替;有些人在三年里,除了写代码之外,还热衷于研究各种技术实现细节、看了N多好书、写一些博客、在Github上分享技术,这些人在五年 后必然具备在技术上独当一面的能力并且清楚自己未来的发展方向,从一个Coder逐步走向系统分析师或是架构师,成为项目组中不可或缺的人物。

第三阶段:十年

十年又是另一个门槛了,转行或是继续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之努力的话,那么在十年的这个节点上,有些 人必然成长为一名对行业有着深入认识、对技术有着深入认识、能从零开始对一个产品进行分析的程序员,这样的人在公司基本担任的都是CTO、技术专家、首席 架构师等最关键的职位,这对于自己绝对是一件荣耀的事,当然老板在经济上也绝不会亏待你。

第一部分总结一下,我认为,随着你工作年限的增长、对生活对生命认识的深入,应当不断思考三个问题:

1、我到底适不适合当一名程序员?

2、我到底应不应该一辈子以程序员为职业?

3、我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?

最终,明确自己的职业规划,对自己的规划负责并为之努力。

关于项目经验

在网上经常看到一些别的朋友有提出项目经验的问题,依照我面试的感觉来说,面试主要看几点:项目经验+基本技术+个人潜力(也就是值不值得培养)。

关于项目经验,我认为并发编程网的创始人方腾飞老师讲的一段话非常好:介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自 己有没有把整个系统架构或产品搞清楚,并能介绍清楚,为什么做这个系统?这个系统的价值是什么?这个系统有哪些功能?优缺点有哪些?如果让你重新设计这个 系统你会如何设计?

我觉得这就已经足以概括了。也许你仅仅工作一年,也许你做的是项目中微不足道的模块,当然这些一定是你的劣势且无法改变,但是如何弥补这个劣势?

从方老师的话中我总结几点:

1、明确你的项目到底是做什么的,有哪些功能。

2、明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用。

3、明确你的模块在整个项目中所处的位置及作用。

4、明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术。

在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况下(这一定是扣分项),可以通过这种方式来一定程度上地弥补并且增进面试官对你的好感度。

关于专业技能

写完项目接着写写一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容。我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。

java学习群669823128

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专题-mongodb

mongodb使用入门

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、分布式协调服务zookeeper

zookeeper集群及相关概念分析

zookeeper java api的使用及实践

17、从集中式到分布式架构

分布式架构的演进过程

分布式架构的基石-TCP/UDP

18、分布式通信协议

分布式通信协议-HTTP及RESTful

分布式通信协议-webservice详解

分布式通信协议-RMI

分布式通信协议-序列化技术

19、分布式服务治理

dubbo控制台及监控中心的安装部署

dubbo常用配置分析

dubbo实战演练

20、NIO技术之-Netty

NIO基本概念及BIO、AIO的对比分析

NIO核心设计思想剖析(Buffer/Channel..)

Netty产生的背景及优缺点分析

Netty实现IM聊天系统

21、分布式缓存技术-Redis

redis的安装及数据类型分析

Redis客户端的使用

Redis高可用方案实战

Redis+Lua脚本实现原子操作

22、高性能之道-MongoDB

MongoDB高可用部署

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 boot

Docker 服务编排

27、导流技术

Nginx反向代理、负载均衡

Nginx进程模型分析

Nginx+keepalived高可用方案

28、微服务技术

spring boot(mvc)

spring boot(REST)

spring boot(验证)

29、spring cloud

spring cloud config client

spring cloud config server

spring cloud netflix eureka

spring cloud netflix ribbon

spring cloud hystrix

spring cloud feign

spring cloud stream

spring cloud bus

spring cloud sleuth

30、分布式消息技术-kafka

kafka高可用集群及介绍

kafka底层实现原理分析

31、分布式缓存-redis

redis的数据类型分析

redis高可用集群方案

lua脚本在redis中的应用

32、高性能之道-MongoDB

MongoDB的基本原理

MongoDB常用命令及客户端使用

手写基于MongoDB的ORM框架

MongoDB高可用解决方案

33、数据库高性能-Mysql

分库分表深入分析及主从模型

数据库中间件Mycat介绍

34、性能优化专题

从测试的角度解读如何衡量性能

了解Linux系统

35、虚拟机-JVM

内存模型、运行时数据

垃圾回收、GC日志

调优实战

36、容器优化-Tomcat

tomcat架构分析

线程模型分析

tomcat调优实战

37、Mysql数据库调优

Mysql底层存储分析

面试技巧之SQL执行计划及优化手段

上面知识词汇是否在你脑海里呢?

java学习群669823128

如何突破JAVA程序员三年的门槛的更多相关文章

  1. 如何突破 Java 程序员的分水岭

    第一阶段:一年之内的 JAVA 从业人员 这个阶段是你成长极快的阶段,而且你可能会经常加班.但是加班不代表你就可以松懈了,永远记得我说的那句话,从你入行那一刻起,你就要不停的学习.在这一年里,你至少需 ...

  2. 五月的仓颉大神写的 三年java程序员面试感悟 值得分享给大家

    感谢 五月的仓颉  的这篇文章 , 让我重新认识到自己身上的不足之处 .  原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前 ...

  3. Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  4. 腾讯架构师分享的Java程序员需要突破的技术要点

    一.源码分析 源码分析是一种临界知识,掌握了这种临界知识,能不变应万变,源码分析对于很多人来说很枯燥,生涩难懂. 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心. 我认为是阅读源码的最核心 ...

  5. 工作了3年的JAVA程序员应该具备什么技能?(zhuan)

    http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...

  6. 工作了3年的JAVA程序员应该具备什么技能?(转)

    工作了3年的JAVA程序员应该具备什么技能? 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发 ...

  7. 做什么职业,也别做程序员,尤其是Java程序员

    千万别做程序员,尤其别做Java这种门槛低,入门快的程序员(别跟我说Java搞精通了也很牛之类的,原因不解释,做5年以上就知道了),程序员本来就是我见过最坑爹的职业了...Java程序员更是,现在满地 ...

  8. 从小工到专家 ——读《Java程序员职场全攻略》有感

    从小工到专家 ——读<Java程序员职场全攻略>有感   <Java程序员职场全攻略>是以故事的形式,向读者介绍Java程序员的职场经验.作者牛开复在北京从事软件开发,已经是一 ...

  9. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

随机推荐

  1. UVALive 6906 A - Cluster Analysis

    思路:排个序,依次选就好了. #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namesp ...

  2. 深入解析Koa之核心原理

    这篇文章主要介绍了玩转Koa之核心原理分析,本文从封装创建应用程序函数.扩展res和req.中间件实现原理.异常处理的等这几个方面来介绍,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参 ...

  3. HTML5 SVG世界地图

    在线演示 本地下载

  4. 用户登录ajax局部刷新验证码

    用户登录的时候,登录页面附带验证码图片,用户需要输入正确的验证码才可以登录,验证码实现局部刷新操作. 效果如图: 代码如下: #生成验证码及图片的函数  newcode.py import rando ...

  5. java鲁棒性(健壮性)

    java能检测编译和运行时的错误 java自己操作内存减少了内存出错的可能 java实现了真数组,避免了覆盖数据的可能 Java不支持指针操作,大大减少了错误发生的可能性 ... 备注: Java能运 ...

  6. React Native 常用学习链接地址

    Android Studio下载http://www.android-studio.org/ 第二章:Android Studio概述(一)http://ask.android-studio.org/ ...

  7. MongoDB快速入门(十一)- sort() 方法

    sort() 方法 要在 MongoDB 中的文档进行排序,需要使用sort()方法. sort() 方法接受一个文档,其中包含的字段列表连同他们的排序顺序.要指定排序顺序1和-1. 1用于升序排列, ...

  8. fabric查看本地与远程主机信息

    #!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...

  9. LeetCode——Add Strings

    LeetCode--Add Strings Question Given two non-negative integers num1 and num2 represented as string, ...

  10. VMware Workstation 12 增加磁盘容量 Windows Server 2012 系统

    1.安装虚拟机后,检查C盘容量大小,发现C盘现在的空间是59.9GB,如下图: 2.使用window+R键,出现运行窗口,输入‘cmd’——>‘cd C:\Program Files (x86) ...