转载

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

很多人会问我:我现在是个普通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程序员,如何才能“更有竞争力”?

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

原文  https://segmentfault.com/a/1190000018645989
正文到此结束
Loading...