首页 > 科技 > Java程序员开发期间的三年门槛,你该如何突破自我?

Java程序员开发期间的三年门槛,你该如何突破自我?

第一阶段:三年

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

第二阶段:五年

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

第三阶段:十年

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

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

  • 我到底适不适合当一名程序员?
  • 我到底应不应该一辈子以程序员为职业?
  • 我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?

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

关于项目经验

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

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

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

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

  1. 明确你的项目到底是做什么的,有哪些功能。
  2. 明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用。
  3. 明确你的模块在整个项目中所处的位置及作用。
  4. 明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术。

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

关于专业技能

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

高可用

  • 负载均衡(负载均衡算法)
  • 反向代理
  • 服务隔离
  • 服务限流
  • 服务降级(自动优雅降级)
  • 失效转移
  • 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)
  • 回滚机制(上线回滚、数据库版本回滚、事务回滚)

高并发

  • 应用缓存
  • HTTP 缓存
  • 多级缓存
  • 分布式缓存
  • 连接池
  • 异步并发

分布式事务

  • 二阶段提交(强一致)
  • 三阶段提交(强一致)
  • 消息中间件(最终一致性),推荐阿里的 RocketMQ。

队列

  • 任务队列
  • 消息队列
  • 请求队列

扩容

  • 单体垂直扩容
  • 单体水平扩容
  • 应用拆分
  • 数据库拆分
  • 数据库分库分表
  • 数据异构
  • 分布式任务

网络安全

  • SQL 注入
  • XSS 攻击
  • CSRF 攻击
  • 拒绝服务(DoS,Denial of Service)攻击

学习方向:

maven的使用

  • maven的使用入门
  • maven私服的搭建及部署
  • maven坐标分析/父控设置

git版本管理及jenkins自动化构建

  • git使用入门培训
  • git常用命令分析和使用
  • jenkins环境搭建及插件配置
  • git+jenkins实现自动化构建

NoSql专题-redis高性能缓存

  • redis使用入门
  • redis常用命令及客户端的使用
  • redis高可用集群搭建

NoSql专题-mongodb

  • mongodb使用入门
  • mongodb高可用集群搭建
  • mongodb常用命令及客户端的使用

分布式专题-zookeeper+dubbo服务协调

  • zookeeper安装部署及命令分析
  • zookeeper客户端的使用
  • zookeeper实现原理分析
  • dubbo的使用入门及配置分析
  • zookeeper+dubbo实现服务注册和发现

分布式专题-消息中间件

  • activeMq-jms规范及使用
  • activeMq消息分发机制分析
  • kafka实现原理剖析
  • kafka的数据传输事务性及实践练习

分布式缓存分析对比

  • memcache的原理分析及使用
  • memcache和redis的横向对比分析
  • 分布式接口技术
  • webservice/RMI/restful的使用

高并发专题-数据库层面优化

  • 分库分表的原理及规则讲解
  • 数据库主备及高可用

性能调优专题-jvm调优

  • JVM原理剖析
  • jvm内存模型及垃圾回收器的分析

性能调优专题-容器性能优化

  • nginx性能优化
  • tomcat性能优化

性能调优专题-数据库优化

  • mysql常见优化手段分析及实践

高性能容器的使用

  • nginx使用入门
  • nginx负载均衡/反向代理实现

双十一专题-九阳真经

  • 太极聚气之分布式压测平台
  • 氤氲紫气之分布式缓存体系
  • 盘龙真诀之分布式消息系统
  • 金刚之躯之分布式跟踪系统
  • 外功辅助之分布式配置系统

微服务架构技术栈分析

  • springboot的使用

分布式协调服务zookeeper

  • zookeeper集群及相关概念分析
  • zookeeper java api的使用及实践

从集中式到分布式架构

  • 分布式架构的演进过程
  • 分布式架构的基石-TCP/UDP

分布式通信协议

  • 分布式通信协议-HTTP及RESTful
  • 分布式通信协议-webservice详解
  • 分布式通信协议-RMI
  • 分布式通信协议-序列化技术

分布式服务治理

  • dubbo控制台及监控中心的安装部署
  • dubbo常用配置分析
  • dubbo实战演练

NIO技术之-Netty

  • NIO基本概念及BIO、AIO的对比分析
  • NIO核心设计思想剖析(Buffer/Channel..)
  • Netty产生的背景及优缺点分析
  • Netty实现IM聊天系统

分布式缓存技术-Redis

  • redis的安装及数据类型分析
  • Redis客户端的使用
  • Redis高可用方案实战
  • Redis+Lua脚本实现原子操作

高性能之道-MongoDB

  • MongoDB高可用部署
  • MongoDB动态查询及索引剖析
  • MongoDB集成spring应用

数据库高性能之道-Mysql

  • 分库分表深入分析
  • Mysql主从模型配置/Mycat的使用

分布式通信技术

  • JMS基本概念和模型
  • ActiveMQ结合Spring开发
  • ActiveMQ静态网络和动态网络链接
  • Kafka的高可用方案及原理分析

SOA架构及微服务架构

  • 什么是SOA架构/为什么需要SOA
  • 领域驱动设计方法/典型SOA架构设计
  • spring boot深入剖析
  • spring boot+dubbo企业实战

Docker虚拟化技术

  • Docker虚拟化技术(镜像/仓库/容器)
  • Docker整合spring boot
  • Docker 服务编排

导流技术

  • Nginx反向代理、负载均衡
  • Nginx进程模型分析
  • Nginx+keepalived高可用方案

微服务技术

  • spring boot(mvc)
  • spring boot(REST)
  • spring boot(验证)

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

分布式消息技术-kafka

  • kafka高可用集群及介绍
  • kafka底层实现原理分析

分布式缓存-redis

  • redis的数据类型分析
  • redis高可用集群方案
  • lua脚本在redis中的应用

高性能之道-MongoDB

  • MongoDB的基本原理
  • MongoDB常用命令及客户端使用
  • 手写基于MongoDB的ORM框架
  • MongoDB高可用解决方案

数据库高性能-Mysql

  • 分库分表深入分析及主从模型
  • 数据库中间件Mycat介绍

性能优化专题

  • 从测试的角度解读如何衡量性能
  • 了解Linux系统

虚拟机-JVM

  • 内存模型、运行时数据
  • 垃圾回收、GC日志
  • 调优实战

容器优化-Tomcat

  • tomcat架构分析
  • 线程模型分析
  • tomcat调优实战

Mysql数据库调优

  • Mysql底层存储分析
  • 面试技巧之SQL执行计划及优化手段

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

最后针对知识体系我总结出了互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

领取方式:转发+转发后关注小编后台私信【资料】获取资料领取方式!

合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!



更多笔记分享

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1657717.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)