很多童鞋都有这样的困惑。想要成为架构师,但是不知道需要掌握哪些知识点。我现在将自己在过去13年工作中所积累的经验和技能,通过技能图谱的方式整理分享给大家!
作者陈睿,13年+技术专家,架构专题500期作者,多次操盘数亿级数据量、数亿级PV和千万级UV的大厂项目。曾先后就职于淘宝、盛大、百度、携程,历任高级研发、架构师、研发经理、事业部CTO。
数据结构+算法=程序
数据是一切能输入到计算机的信息总和,结构是指数据之间的关系,数据结构就是将数据及其之间的关系有效地存储在计算机中。
算法是指对特定问题求解步骤的一种描述,说白了就是解决问题的方法策略。
总而言之:数据结构+算法=程序。
语言掌握
任何一门开发语言都自己的语法,也有对应开发语言对应的开发框架和开发工具,掌握一门开发语言后,后期再学别的开发语言就要容易很多。
高级语言特性掌握
刚学开发的同学,早期主要是使用为主,工作1-3年后,使用的过程中需要理解为什么要这样使用,这就涉及到背后的语言高级特性,例如:
多线程
线程间的状态转换:
1. 新建(new):新创建了一个线程对象。
2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
4. 阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:
(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
5. 死亡(dead):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
网络OSI七层模型:
著名的开放系统互联基本参考模型,即OSI,是由国际标准化组织(ISO)提出。
OSI的体系结构定义了一个七层模型,用以进行进程间的通讯,并作为一个框架来协调各层标准的指定。
OSI采用七层模型可以带来如下好处:
1)各层之间是独立的。某一层并不需要知道他的下一层是如何实现,仅需要知道该层的接口所提供的服务。
2)灵活性好。当任何一层发生变化时(如技术的变化),只要曾间接口关系不变,则在这层以上或以下各层均不受影响。
3)结构上可分割。各层都可以采用最合适的技术来实现。
4)易于实现和维护。因为整个系统已被分解为若干个相对独立的子系统。
5)能促进标准化工作,因为每一层的功能及其所提供的服务都已有了精确的说明。
阿里巴巴常用开源框架
由于阿里的高并发访问,已经建立了非常完善的架构基础设施,比如小文件存储:tfs,Dubbo阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成,还有内部经常使用到的分布式缓存框架:tair
熟练掌握常用设计模式
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
JVM实现机制,垃圾回收算法
JVM基本是BAT面试题目必考,以及重点考察的重点,我举几个例子:
1. 内存模型以及分区,需要详细到每个区放什么。
2. 堆里面的分区:Eden,survivalfrom to,老年代,各自的特点。
1).JVM中堆空间可以分成三个大区,新生代、老年代、永久代
2)新生代可以划分为三个区,Eden区,两个幸存区
3.对象创建方法,对象的内存分配,对象的访问定位。
4.GC收集器有哪些?CMS收集器与G1收集器的特点。
5.Minor GC与Full GC分别在什么时候发生?
6.常见的垃圾回收算法等等。
WEB开发
很多后端工程师,比如:java web开发工程师,是需要掌握很前段的开发基础:h5、js常用框架:jquery、css以及常见的前段调试开发工具,例如:firebug 、ietester、yslow等等。
也会涉及到很多servlet的访问周期、tomcat、spring等的启动完整过程。
还有很多常用的模版引擎,阿里内部就使用veloctiy,很多公司也还在使用jsp等传统的模版引擎等。
数据库设计
常见的数据库设计原则
SQL和NOSQL的选型使用,SQL的常规掌握,索引的建立和优化原则等,也会涉及到更多大数据的分库分表原则等。
开发框架和中间件框架选择
java领域使用到的开源框架可供选项范围很多,目前常用的web开发框架组合,典型的就是SSM(springMVC+Spring+Mybatis)
中间件的框架选择也比较多,例如:分布式缓存这块就有memcached,redis等。还有常见的消息队列框架:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,目前使用最多的是ActiveMQ和Kafka。
这里也会涉及到分布式小文件的存储等。
常用的开发工具
架构设计经验
架构设计更多来自于大型网站的架构设计变迁,需要积累完整的数据库、设计模式、中间件选择、数据库性能优化、负载均衡、微服务架构的掌握等:
大型网站架构设计场景
觉得不错请点赞支持下。
----end----
PS:Mike的《架构进阶专题》又更新干货了,目前该专题已超过100期+。内容涵盖:数据结构和算法、Java高级特性、Java web核心、数据库、Java框架与必备工具、系统架构设计等,希望能真正帮助到想要从程序员进阶为高级Java、架构师之路的朋友。
还没领过的童鞋,文末有链接获取方法。
领取过的童鞋,按照之前提供链接即可访问获取。
领取方法:
关注+转发本篇文章,然后私信关键词 【架构】,即可获取。
重要的事情说三遍,关注+转发、关注+转发、关注+转发,然后私信关键词 【架构】,即可获取~