很多人会问我:我现在是个普通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即可免费获取。