我现在是个普通Java程序员,如何才能“更有竞争力”?

276 阅读9分钟

很多人会问我:我现在是个普通Java程序员,如何才能“更有竞争力”?

画外音:Java,是目前世界上最流行的语言。

我认为所谓竞争力,其实包括两个方面,现在的和未来的:搞得定当下的事,并且未来有不错的发展空间,所以,我的建议有下面3条:

1、既然选择了Java技术栈,Java必须深入学习,它是现阶段互联网公司覆盖最广的研发语言,不管是Web应用、后端服务还是大数据等等,最常见的研发语言都是Java,掌握Java核心技术体系,不管在哪里都会有立足之地。

2、尽早学习架构领域相关知识,从编程思维到架构思维的升级,这是3-5年的高级工程师将会遇到的第一个槛,早点锻炼自己的架构思维,多储备知识,才能在合适的时机升级,承担起架构设计的任务。

画外音:不想当架构师的程序员不是好开发,每个程序员心中都有一个成为架构师的梦想。永远记着,机会总是留给有准备的人。

3、持续学习,不要满足于眼前的技术高度和深度。

如果你想扎实自己的Java技术,锻炼自己的架构设计思维,我这里自己收集了一些Java资料,里面就包涵了一些BAT面试资料,以及一些Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源

由于平台规则限制,需要获取资料的朋友们可以关注小编,后台私信“666”获取。

具体内容如下:

一、分布式专题

分布式计算就是通过计算机网络将计算工作分布到多台主机上,多个主机一起协同完成工作。

我试着列一下相关知识吧。

网络通讯,网络是分布式的基础,对分布式的理解建立在对网络的理解上,包括:

  • OSI模型的7层
  • TCP/IP,DNS,NAT
  • HTTP,SPDY/HTTP2
  • Telnet

网络编程,是通过程序在多个主机之间通信。包括:

  • Socket
  • 多线程
  • 非阻塞IO
  • 网络框架
  • Netty
  • Mina
  • ZeroMQ

操作系统的网络部分

RPC,Socket使用不是很方便,很多分布式应用是基于RPC的,包括:

  • 同步RPC
  • 异步RPC
  • 主要的一些RPC协议
  • RMI
  • Rest API
  • Thrift

集群,分布式计算离不开集群。集群就是多台主机被当作一个系统

集群类型

  • 高可用,如主机备机切换,冷备,热备,双活
  • 伸缩性,如Web服务器集群,数据库服务器的Sharding
  • 并行计算,如网格,大数据

集群相关技术,包括:

  • 高可用性,保证服务一直能够被访问,延长MTBF,缩短MTTR
  • 冗余的设备
  • 多副本,为了避免单点失效
  • 负载均衡,如何将大量工作负载分配到多个主机上,最大化吞吐量,最小化平均响应时间,最大化资源利用率。
  • 伸缩性(横向),能够添加计算机和设备来应对增长的计算压力
  • 分片(Sharding),把数据分成多个数据集,由多个服务器来分别处理。
  • 自动分片
  • 容错性,当硬件或软件发生故障,能够继续运转
  • 故障检测,以及故障预测
  • 心跳包
  • 告警
  • 性能预警
  • 故障转移,当出现错误,如何解决,为了高可用性和容错性
  • 分布式一致性,在分布式环境中如何维持状态的一致性,严格一致性,还是最终一致性
  • 集群状态协调,如Zookeeper,etcd等。
  • 分布式锁,在分布式环境中如何进行加锁
  • 选主,当Master宕机,如何选择出新的Master,协议如Raft
  • 一致性哈希,如何将数据分布到集群中的多个主机。
  • 分布式事务,保证在多台服务器上完成的操作符合事务的ACID属性。
  • 安全,网络通常需要保证安全。
  • 身份认证,如何验证人或机器是他们声明的身份
  • 基于用户名/口令
  • 基于数字证书
  • 私密性,如何防止窃听和嗅探
  • 对称加密
  • 非对称加密
  • 完整性,如何保证数据不被篡改
  • 安全散列
  • 消息认证码(MAC)
  • 不可否认性
  • 基于数字证书的数字签名和验签
  • 基于密钥的散列,如HMAC
  • 互联网站的基本架构
  • 页面缓存
  • 负载均衡器,如HAProxy,Nginx
  • 分布式缓存,如Memcache,Redis
  • 消息队列,如ActiveMQ,Kafka
  • 分布式框架
  • 关系型数据库(Sharding,主从同步)
  • NoSQL
  • HBase,基于HDFS和Zookeeper的NoSQL
  • Cassandra,无主集群
  • 大数据
  • HDFS,分布式文件系统
  • MapReduce,将数据处理任务拆分为多个工作,通过集群来完成。
  • Spark,提供分布式的数据集抽象

二、微服务专题

微服务架构分为四大模块,围绕微服务的通用模式,集合微服务必须要掌握的知识点,使微服务的开发更加方便、快捷,让微服务应用更加稳定、可用。

  • 微框架与微服务之间的关系
  • 热部署实战
  • 核心组件:Starter、Actuator、AutoConfiguration、Cli
  • 集成Mybaits实现多数据源路由实战、集成Dubbo实战、集成Redis缓存实战
  • 集成Swagger2构建API管理及测试体系
  • 实现多环境配置动态解析
  • Spring Cloud
  • Eureka注册中心
  • Ribbon集成REST实现负载均衡
  • Fegion声明式服务调用
  • Hystrix服务熔断降级方式
  • Zuul实现微服务网关
  • Config分布式统一配置中心
  • Sleuth调用链路跟踪
  • BUS消息总线
  • 基于Hystrix实现接口实现降级
  • 集成Spring Cloud实现统一整合方案
  • Docker虚拟化
  • Docker的镜像、仓库、容器
  • Docker File构建的LNMP环境部署个人博客Wordpress
  • Docker Compose构建LNMP环境部署个人博客Wordpress
  • Docker网络组成、路由互联、Openvswitch
  • 基于Swarm构建 Docker集群实战
  • Kubernetes简介
  • 微服务架构
  • SOA架构和微服务架构之间的区别和联系
  • 如何设计微服务及其设计原理
  • 解惑Spring Boot流行因素及能够解决什么问题
  • 什么事Spring Cloud,为何要选择Spring Cloud
  • 基于全局分析Spring Cloud各个组件所解决的问题

三、并发编程专题

  • Java线程
  • 线程模型
  • Java线程池
  • Future(各种Future)
  • Fork/Join框架
  • volatile
  • CAS(原子操作)
  • AQS(并发同步框架)
  • synchronized(同步锁)
  • 并发队列(阻塞队列)

四、工程化专题

工欲善其事必先利其器,工具对Java程序员的重要性不言而喻现在有很多库、实用工具和程序任Java开发人员选择。下图列出的工具都是程序员必不可少的工具

五、源码分析专题

程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这种怪状,真要追究起来,怪不得程序员这个群体本身 —— 它是两个原因造成的。

我们所有的教育和培训都在强调怎么写代码,并没有教大家如何读代码

大多数工作场景都是一个萝卜一个坑,我们只需要了解一个系统的局部便能开展工作,读不相干的代码,似乎没用

我常常把写代码和写作进行类比 —— 二者有很多相通之处;但从培养写代码和写作的过程来看,二者又有很多不同。我们的写作能力,是建立在大量基础阅读的基础上的,是除了学习语法和文法知识外,从小学开始,经年累月,通过阅读各种不同层次的名家的作品,再加上各种各样的写作训练,累积出来的;而我们的写代码的能力,在了解和掌握了语法/文法之后(学习和抄写 example 代码也算语法/文法学习的一部分),跳过了大量阅读名家作品的过程,直接 biu 地一下就自动养成了:学会基础的语法和试验了若干 example 后,我们就火箭般蹿到了自己写代码打怪赞经验的阶段。这样略过大量阅读代码的阶段有三个害处:

写代码的基础是不牢靠的,打怪升级的过程也是最慢的。道理很简单 —— 前辈们踩过的坑,总结的经验教训,你都不得不亲自用最慢的法子一点点试着踩一遍。

很容易养成 stackoverflow driven 的写代码习惯 —— 遇到不知如何写的代码,从网上找现成的答案,找个高票的复制粘贴改吧改吧,凑活着完成功能再说。写代码的过程中遇到问题,开启调试模式,要么设置无数断点一步步跟踪,要么到处打印信息试图为满是窟窿的代码打上补丁,导致整个写代码的过程是一部调代码的血泪史。(见我的文章:你要避免的软件开发模式)

你周围最强的那个工程师的开发水平的上限就是你的上限。

六、性能优化

性能优化,简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。性能问题永远是永恒的主题之一,而优化则更需要技巧。

对于这六大模式我也总结了一套学习资料,获取方式


由于平台规则限制,需要获取资料的朋友们可以关注小编,加入java互联网架构Q群809389099即可免费获取。