美文网首页BAT架构师互联网科技码农的世界
BAT架构师所具备的完整Java技术知识图谱

BAT架构师所具备的完整Java技术知识图谱

作者: mikechen的互联网架构 | 来源:发表于2019-08-29 15:25 被阅读0次

    很多童鞋都有这样的困惑。想要成为架构师,但是不知道需要掌握哪些知识点。我现在将自己在过去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、架构师之路的朋友。

    还没领过的童鞋,文末有链接获取方法。

    领取过的童鞋,按照之前提供链接即可访问获取。

    领取方法:

    关注+转发本篇文章,然后私信关键词 【架构】,即可获取。

    重要的事情说三遍,关注+转发、关注+转发、关注+转发,然后私信关键词 【架构】,即可获取~

    相关文章

      网友评论

        本文标题:BAT架构师所具备的完整Java技术知识图谱

        本文链接:https://www.haomeiwen.com/subject/ckviectx.html