进入Java这个行业也有8年了,通过8年的努力,现在在阿里任职一名高级架构师。下面我想跟大家分享一下。我认为,随着你工作年限的增长、对生活对生命认识的深入,应当不断思考三个问题:
1、我到底适不适合当一名程序员?
2、我到底应不应该一辈子以程序员为职业?
3、我对编程到底持有的是一种什么样的态度,是够用就好呢还是不断研究?
最终,明确自己的职业规划,对自己的规划负责并为之努力。
关于专业技能
我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价、拿到的薪水势必也越高。
基本语法
这包括static、final、transient等关键字的作用,foreach循环的原理等等
集合
基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。
设计模式
知道常用设计模式的优缺点。
能画出常用设计模式的UML图。
多线程
Thread和Runnable的区别和联 系、多次start一个线程会怎么样、线程有哪些状态。
JDK源码
List、Map、Set实现类的源代码
ReentrantLock、AQS的源代码
AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的
线程池的实现原理
Object类中的方法以及每个方法的作用
框架
熟练使用三大框架
数据库
SQL基础和SQL优化的内容
Java虚拟机
Java虚拟机的内存布局
GC算法及几种垃圾收集器
类加载机制,也就是双亲委派模型
Java内存模型
happens-before规则
volatile关键字使用规则
架构师是纵观全局的掌控者,这个层次很熟悉开发,有多年的开发工作经验,并且也有架构设计经验,熟悉架构理念,精通面向对象的设计思想,精通java语言,在高并发,高性能方面有相关开发经验。
一、常用的设计模式
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下:
二、开源框架源码分析
程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这也造成了很多错误看源码的方式。
三、分布式架构
迎接高并发大数据的挑战,从深度到广度完善知识体系,成为下一个互联网高薪人才。
理论结合实战,透彻理解分布式架构及其解决方案。
面向人群
需要突破瓶颈;
传统行业转型进入互联网行业的人群
分布式架构原理
1、分布式架构演进过程
2、如何把应用从单机扩展到分布式
3、CDN加速静态文件访问
4、系统监控、容灾、存储动态扩容
5、架构设计及业务驱动划分
6、CAP、Base理论以及其应用
分布式架构中间件
1、分布式架构网络通信原理剖析
2、通信协议中的序列化和反序列化
3、基于框架的RPC技术Webservice/RMI/Hessian
4、深入分析Zookeeper在disconf配置中心的应用
5、基于Zookeeper实现分布式服务器动态上下线感知
6、深入分析Zookeeper Zab协议及选举机制源码解读
7、Dubbo管理中心及监控平台安装部署
8、基于Dubbo的分布式系统架构实战
9、Dubbo容错机制及高扩展性分析
分布式架构实战
1、分布式全局ID生成方案
2、Session跨域共享及企业级单点登录解决方案实战
3、分布式事务解决方案实战
4、高并发下的服务降级、限流实战
5、基于分布式架构下分布式锁的解决方案实战
6、分布式架构下实现分布式定时调度
四、微服务架构
微服务架构是一项在云中部署应用和服务的新技术
微服务不需要像普通服务那样成为一种独立的功能或者独立的资源
微服务作为一项在云中部署应用和服务的新技术已成为当下最新的热门话题
微服务的基本思想在于考虑围绕着业务领域组件来创建应用,这些应用可独立地进行开发、管理和加速。在分散的组件中使用微服务云架构和平台,使部署、管理和服务功能交付变得更加简单。
使用微服务构建现代化应用程序是很有意义的,因为它让你既利用了扩展横向扩展架构,也利用纵向扩展架构;还额外得到API的组合,且在整个业务中可重复利用。可能,每一分钟构都在交付新服务,这样你就必须拥有一个敏捷的且响应的应用程序平台,这一平台一直在不断改进中。
五、工程化专题
Git
Maven
Jenkins
Sonar
六、项目实战
要想立足于互联网公司,且能在互联网浪潮中不被淹没,对于项目的开发实战演练是不必可少的技能,也是对自身能力的一个衡量,有多少的量对等于获得多少的回报。看似简单的一个项目需求图谱,其中的底层原理,实现原理又能知道多少?你搭建一个完整的B2C项目平台到底需要多少知识?这一切都是需要我们考量的。
作者:Java高级程序员
链接:https://juejin.im/post/5bd052316fb9a05cfd2817a1
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。