服务端开发技术栈

本文旨在梳理服务端开发技术栈,希望帮助后端开发同学更全面了解Java服务端主要涉及的知识点

本文转自大佬邢军,已获其授权,如有转载,请标注相应信息,谢谢大家。

基本框架.jpg

1. 语言相关

1.1 Java

  • 核心知识点
    • Java的类加载机制
    • JVM相关:JVM内存模型和结构,GC原理,性能调优
    • 泛型
    • 集合体系
    • 异常体系
    • IO体系
    • 多线程编程
    • 反射
    • Servlet
  • 推荐数据
    • 《Java编程思想》
    • 《Effective Java》
    • 《深入理解Java虚拟机》

1.2 Shell、Python等脚本语言

  • 介绍
    • 此类脚本语言的意义在于辅助后端开发,包括系统运维,工具集成(借助管道、重定向),文本处理,数据计算等工作,提升后端工作效率
  • 核心知识点(Shell)
    • 常用的linux操作和运维命令
    • 管道、重定向
    • awk、sed等文本处理工具
  • 推荐书籍

1.3 SQL 语言

  • 介绍
    • 通用于传统关系型数据库和大数据场景的结构化查询模型语言。传统数据库方面要精通mysql的sql语法;大数据场景主要掌握Hive SQL(Impala和Spark SQL等均在兼容Hive SQL)
  • 核心知识点
    • 区分DDL和DML
    • 经典查询语句主要结构
    • 表连接(内连接,左外连接,右外连接,全连接)
    • 函数(普通函数,聚合函数)
    • 索引
    • 分区
  • 适用场景
    • 传统数据库,传统SQL:用于事务性数据操作,通常用于系统的业务库;
    • 大数据场景下的SQL:用于数据分析,交互式查询,批量数据处理等。
  • 推荐书籍
    • MySQL:《高性能MySQL》
    • Hive SQL:《Hive编程指南》

2. 开发工具

2.1 开发IDE Intellij/Eclipse

  • 核心知识点
    • 配置良好代码风格模板,包括文件注释,类注释,方法注释,缩进换行等
    • 安装使用必要的插件:代码规范检查插件(Alibaba Java Coding Guidelines),源码潜在bug检查插件(pmd),字节码潜在bug检查插件(findbugs)等

2.2 工程构建 MAVEN

  • 核心知识点
    • maven 仓库
    • maven pom.xml文件配置
    • maven 构建的生命周期
    • maven 插件
  • 能力要求
    • 熟练使用maven
    • 学会配置maven多级工程结构
    • 能够解决工程构建中常常出现的jar包冲突等问题
  • 推荐书籍
    • 《Maven实战》

2.3 版本管理 GIT

  • 介绍
    • git是一个开源的分布式版本控制系统,通过规范化的工具和流程,使得开发者之间高效协同,保持产品稳定运行
  • 推荐文章

3. 开发/测试框架

3.1 Spring框架体系 Spring MVC/Spring Boot

  • 核心知识点
  • 参考说明
    • 最新的版本更新和参考文档可以直接浏览 Spring官网
      • 有条件地阅读spring核心模块的代码,debug Spring框架的启动和Bean服务的过程是比较好的理解spring原理的方式

3.2 orm框架 mybatis/hibernate

  • mybatis介绍
    • 持久层框架,通过xml映射的方式,使得开发者主要关心sql实现即可,由框架实现从实体到java类的映射,数据访问层服务实现,访问优化等等
  • 核心知识点
    • 熟练配置使用mybatis,掌握mapper xml的写法
    • 会使用mybatis-generator的mvn插件自动生成DAO层代码和xml配置
    • 理解mybatis的一、二级缓存,了解sql session创建过程和sql执行过程
  • 推荐资料
    • 最新的版本更新和参考文档可以直接浏览 Mybatis官网

3.3 测试框架 Junit/TestNG

  • 核心能力要求
    • 熟练使用Junit/TestNG进行单元测试,接口测试
    • 学会借助Mockito解决外部系统,模块依赖的mock测试
    • 学会使用maven的surfire plugin和jacoco plugin等插件,度量测例的通过率,测试代码覆盖率等指标

4. 服务端中间件

4.1 key-value存储系统

  • 典型:redis/memcache
  • 核心知识点
    • redis配置策略(持久化策略,替换算法等)
    • redis的部署模式(standalone单机,sentinel哨兵,cluster集群),哨兵的本质是主从切换,cluster是真正的分布式部署可以线性扩展内存资源
    • redis支持的数据结构
  • 适用场景
    • 分布式session存储,数据缓存,分布式锁,简单的消息队列,计数器(累加器)

4.2 消息队列

  • 典型:rabbitmq/kafka
  • 核心知识
  • 适用场景
    • 消息中间件一般适用于:系统之间需要高度解耦;异步传输数据(非阻塞);保证数据传输过程中数据可以持久化,解决生产端和消费端能力不一致的问题,避免峰值数据对下游服务节点的冲击等
    • 对比rabbitmq和kafka: rabbitmq主要适用数据可靠性,一致性要求比较高的场景;kafka主要适用数据吞吐量比较的场景,如日志数据的实时传输等

4.3 分布式文件存储

  • 典型:网易nos/阿里云oss
  • 适用场景
    • 存储需要在分布式架构下共享的文件对象:如前端静态文件,图片资源,大文件资源等

4.4 服务治理/RPC框架

  • 典型:阿里dubbo
  • 核心知识点
    • 注册中心,服务注册、服务发现、负载均衡、序列化、反序列化、编码、解码等核心概念
  • 适用场景
    • 在相对复杂的应用服务网络中,扮演服务治理,服务解耦,负责均衡,简化服务调用方式的作用

4.5 Java Web容器

  • 典型:tomcat/jetty等
  • 介绍
    • 本质上是一个servlet容器,即可以在其上运行Java Web的应用程序

4.6 Nginx

  • 介绍
    • nginx本质上是一个的HTTP和反向代理服务器
  • 适用场景
    • http服务器,反向代理,软负载均衡器等

4.7 关系型数据库

  • 典型: MYSQL/ORACLE
  • 核心知识点
    • 索引
    • 事务与事务隔离级别
    • 存储方法
    • 触发器
    • 不同关系型数据库的SQL差异
  • 推荐书籍
    • 《高性能MySQL》
    • 《Oracle从入门到精通》

5. 大数据存储和计算框架等

  • 核心能力要求
    • 了解大数据体系整体的框架、组成
    • 熟悉各种大数据存储,计算框架,查询引擎等主要的架构、功能和适用场景
    • 能够在项目的架构过程中进行合理的大数据技术方案选型

6. 其他

6.1 权限相关

  • 介绍:
    * 权限相关涉及到:身份认证,鉴权,权限管理等
  • 核心知识点:
    • RBAC(基于角色的权限控制)模型
    • 理解OAuth 2.0的设计思想和运行流程

6.2 安全相关

  • 介绍
    • 在后端开发中需要关注很多的安全问题,这些安全问题可能来自恶意的攻击,也可能来自系统本身的安全性和健壮性不足。防止应用安全漏洞产生的前提是理解常见的漏洞概念、原理以及产生的原因
  • 核心知识点
    • 水平权限和垂直权限漏洞,以及在程序开发中怎样避免
    • SQL注入攻击(mybatis预编译可以避免)
    • 常用的限流策略
    • CSRF 攻击
    • XSS 攻击

6.3 日志相关

  • 核心知识点
    • Log4j、Logback、SLF4J之间的关系,应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API
    • 日志的等级(error/warn/info/debug)
    • 日志的保留时间

6.4 异常处理相关

  • 核心知识点
    • 异常的分类,正确区分异常处理方式
    • 异常处理原则
    • 学会借助spring框架等,将异常转为对用户或者调用方更加友好的错误码和错误信息

6.5 RestFul接口设计相关

  • 介绍
    • restful在目前是使用较多的接口设计和服务间依赖http接口设计的主要原则,基于良好的约定规范,可以使得接口简单易懂,提高团队协作的效率
  • 推荐文章

6.6 线上问题排查流程和工具

  • 核心知识点
    • 系统问题排查:学会使用w/uptime、top、df、netstat、iostat以及各种可视化监控工具排查本机的负载、磁盘、内存、网络等系统问题
    • 应用问题排查:学会依据应用系统错误日志以及jps、jinfo、jstat、jstack、jmap以及各种可视化监控工具,排查应用系统问题
    • 数据库问题排查:学会借助mysql慢查询日志、explain以及各种可视化工具排查mysql使用过程中的各种问题
    • 网络问题排查:学会借助telnet、ping、wget、nc等工具排查网络问题

6.7 多线程编程

  • 核心知识点
    • Java线程相关接口和类的实现和关系
    • Java线程池
    • 线程同步,锁等

6.8 网络相关

  • 核心知识点
    • 掌握http协议消息体划分、连接和通信过程
    • 掌握http主要的返回状态码意义
    • 掌握https协议的连接和通信过程

6.9 设计原则和设计模式

  • 核心知识点
    • 七大设计原则
      • 单一职责原则
      • 里氏替换原则
      • 依赖倒置原则
      • 接口隔离原则
      • 迪米特法则
      • 开闭原则
      • 组合/聚合复用原则
    • 一些常用的设计模式
      • 单例模式
      • 策略模式
      • 代理模式
      • 观察者模式
      • 装饰模式
      • 适配器模式
      • 组合模式
      • 工厂模式
      • 模板方法模式
      • ...

6.10 分布式系统设计相关

  • 核心知识点
    • 分布式系统架构设计
      • SOA
      • 微服务
      • Servless
    • 分布式事务
      • 一致性理论
        • CAP定理
        • BASE 理论
      • 一致性模型
        • 强一致性
        • 弱一致性
        • 最终一致性
      • 分布式事务解决方案
        • 强一致性(两段提交和三段提交模型, Paxos或者Raft算法)
        • 最终一致性
          • eBay 事件队列方案
          • TCC (Try-Confirm-Cancel)补偿模式
          • 缓存数据最终一致性
    • 分布式锁
      • 基于数据库
      • 基于缓存
      • 基于zookeeper
    • 分布式定时器
      • Quartz,基于数据库锁的抢占式分布式定时器
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容