java后台技术
本文旨在梳理服务端开发技术栈,希望帮助后端开发同学更全面了解Java服务端主要涉及的知识点
1. 语言相关
1.1 Java
核心知识点
Java的类加载机制
JVM相关:JVM内存模型和结构,GC原理,性能调优
泛型
集合体系
异常体系
IO体系
多线程编程
反射
Servlet
推荐数据
《Java编程思想》
《Effective Java》
《深入理解Java虚拟机》
1.2 Shell、Python等脚本语言
介绍
此类脚本语言的意义在于辅助后端开发,包括系统运维,工具集成(借助管道、重定向),文本处理,数据计算等工作,提升后端工作效率
核心知识点(Shell)
常用的linux操作和运维命令
管道、重定向
awk、sed等文本处理工具
推荐书籍
《linux与unix shell编程指南》
《Python编程 从入门到实践》
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多级工程结构
能够解决工程构建中常常出现的jar包冲突等问题
熟练使用maven
推荐书籍
《Maven实战》
2.3 版本管理 GIT
介绍
git是一个开源的分布式版本控制系统,通过规范化的工具和流程,使得开发者之间高效协同,保持产品稳定运行
推荐文章
3. 开发/测试框架
3.1 Spring框架体系 Spring MVC/Spring Boot
核心知识点
Spring框架的模块组成
IOC和AOP的设计思想和实现原理
Bean的作用域和生命周期
参考说明
有条件地阅读spring核心模块的代码,debug Spring框架的启动和Bean服务的过程是比较好的理解spring原理的方式
最新的版本更新和参考文档可以直接浏览 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
核心知识
两种集群模式对比:普通集群和镜像集群(HA)
kafka
基于zk的分布式拓扑结构
理解kafka支持的消息的写入流程,写入模式,消息的存储模式,消息的消费方式等
rabbitmq
适用场景
消息中间件一般适用于:系统之间需要高度解耦;异步传输数据(非阻塞);保证数据传输过程中数据可以持久化,解决生产端和消费端能力不一致的问题,避免峰值数据对下游服务节点的冲击等
对比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 分布式系统设计相关
核心知识点
Quartz,基于数据库锁的抢占式分布式定时器
基于数据库
基于缓存
基于zookeeper
一致性理论
分布式事务解决方案
一致性模型
CAP定理
BASE 理论
强一致性
弱一致性
最终一致性
eBay 事件队列方案
TCC (Try-Confirm-Cancel)补偿模式
缓存数据最终一致性
强一致性(两段提交和三段提交模型, Paxos或者Raft算法)
最终一致性
SOA
微服务
Servless
分布式系统架构设计
分布式事务
分布式锁
分布式定时器
java后台技术的更多相关文章
- Java后台技术(TDDL)
从PC客户端开发转项目经理已经有一段时间了,感觉还不错,平安这边的项目经理还需要对外,所以部门其他项目经理经常需要出差去见客户,我专门对内,部门所有的开发和测试每天做什么.接下来做什么我都必须了解,部 ...
- Java后台技术(Dubbo入门)
我现在公司提供的产品是即时通讯软件,因为我从.net桌面应用开发转岗,从java后台转项目经理,让我有幸拥有了后台开发人员所有的权限,所有的后台源码和技术文档对我开放,可惜仅在后台待了3周不到,还没来 ...
- Java后台技术IBATIS入门
做过.net后台开发的同志一定用过Entity FrameWork,该框架实现了实体Entity到数据库行的映射,通过操作实体DataSet,就能够直接同步修改到数据库.但是Java暂时没有类似的技术 ...
- Java后台技术(线程安全)
前端时间一个同事因为后台线程安全问题出了一次生产事故,今天我就对线程安全问题进行一次总结. 首先,我们来大致看以下我同事写的代码,代码我进行了精简,大致如下: for (final String re ...
- Java后台工程师面试杂记——不跳不涨工资星人跳槽经历
经过接近一个月的时间,完成换工作这件“小事”,前后总计面试了多家公司,最后也没接到几个offer,不过最终总算尘埃落定,就对这个过程进行一个总结吧. 在某互联网公司工作了近一年的时间,但是频繁的业务需 ...
- Java多线程技术学习笔记(二)
目录: 线程间的通信示例 等待唤醒机制 等待唤醒机制的优化 线程间通信经典问题:多生产者多消费者问题 多生产多消费问题的解决 JDK1.5之后的新加锁方式 多生产多消费问题的新解决办法 sleep和w ...
- 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写
基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...
- 如何用CropBox实现头像裁剪并与java后台交互
如何用CropBox实现头像裁剪并与java后台交互 参考网站:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 参考: http://blo ...
- android支付宝app支付(原生态)-包括android前端与java后台
本文讲解了 android开发的原生态app集成了支付宝支付, 还提供了java后台服务器处理支付宝支付的加密代码, app前端与java后台服务器使用json数据格式交互信息,java后台服务主要用 ...
随机推荐
- Java图形界面——Border
Swing编程边框(Border)的用法总结 Java进行客户端编程,使用了大量的Swing控件,由于系统默认的边框无法满足项目的要求,不得不自己更改控件的边框样式,网上找了不少资料,本文对Swing ...
- js的JSON
把任何JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机. 如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个Java ...
- 5C - A == B ?
Give you two numbers A and B, if A is equal to B, you should print "YES", or print "N ...
- HTML与XHTML的差别(转自)http://jingyan.baidu.com/article/597035521c31ed8fc007400a.html
HTML与XHTML之间的差别,粗略可以分为两大类比较:一个是功能上的差别,另外是书写习惯的差别.关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页. ...
- Eclipse中的maven项目搭建
一.eclipse中的maven设置 1.打开“首选项”----> "maven"---->"Installations".用来查看maven的使用 ...
- 洛谷1894 [USACO4.2]完美的牛栏The Perfect Stall
原题链接 二分图最大匹配板子. 每个奶牛向它愿意去的牛棚连边,跑二分图最大匹配即可. 这里我用的是匈牙利算法. #include<cstdio> #include<cstring&g ...
- jquery动态出操作select
var citys = {1:'北京',2:'上海',3:'广州',4:'深圳'}; $("#city option:gt(0)").remove(); for(var k in ...
- stm8 单线串口能收不能发
原因是把连接的TX和RX短接了,其实在TX和RX间要串一个电阻,然后让stm8的单线TX接到RX.
- Linux上安装java+tomcat+mysql运行环境
centos6.5jdk"1.7.0_79"mysql5.6apache-tomcat-7.0.53 安装jdk:1.先到oracle下载rpm包:jdk-7u80-linux-x ...
- BP神经网络的数学常识
输入数据X1-Xn. 输入层和隐层之间的权Wji 隐层的输入数据为:∑iwjixi 隐层的输出数据为:yj = f(∑iwjixi).其中f(x)= 隐层的输入数据为:∑jwkjyj 隐层的输出数据为 ...