JAVA相关技能树
2018-07-31 21:41:38 284 举报
AI智能生成
不断更新中
作者其他创作
大纲/内容
前端及脚本语言
AngularJS
JQuery
Node.js
Vue.js
React
JSP
热加载机制
CSS
HTML
JqGrid
Markdown
ECharts
Velocity
Lua
Shell
Webpack
框架
Spring Framework
Core
IOC
常用注解
类级别注解
@Component
@Controller
@Service
@Repository
@Configuration
@ComponentsScan
@Bean
@Scope
方法变量级别注解
@Autowire
@Qualifier
@Resource
@Value
@Cacheable
@CacheEvict
三种注入方式
构造器注入
好处
保证依赖不可变(final关键字)
保证依赖不为空(省去了我们对其检查)
保证返回客户端(调用)的代码的时候是完全初始化的状态
避免了循环依赖
提升了代码的可复用性
field注入
setter注入
AOP
实现原理
动态代理
JDK实现
需要实现至少一个接口
CGlib
ASM操作字节码实现生成目标类的子类
静态代理
编译时织入
类加载时织入
关键字
Join Point(连接点)
Poincut(切入点)
Advice(通知)
Before advice
After returning advice
After throwing advice
After(finally) advice
Around advice
Introduction
Target Object
AOP proxy
Aspect(切面)
Weaving
实现方式
注解
@AspectJ
@Pointcut
@Before
@After
@Around
配置文件
常见应用
事务
日志
权限
events
resources
i18n
validation
data binding
type conversion
SpEL
Testing
mock objects
TestContext framework
Spring MVC Test
WebTestClient
Data Access
transactions
DAO support
JDBC
ORM
Marshalling XML
Spring MVC
Spring Web MVC
常用注解
类级别注解
@EnableWebMvc
@SessionAttributes
方法变量级别注解
@RequestBody
@ResponseBody
@RequestMapping
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@ModelAttribute
@RequestParam
@requestHeader
@CookieValue
@PathVariable
@CrossOrigin
@Valid
@Validated
@ExceptionHandler
@ControllerAdvice
核心组件
DispatcherServlet
HandlerMapping
HandlerAdapter
ViewResolver
···
Spring Web Flux
Reactor基础
Lambda
Mono
Flux
核心
Web MVC注解
函数式声明
RouteFunction
异步非阻塞
使用场景
Integration
remoting
JMS
JCA
JMX
email
tasks
scheduling
cache
Languages
Kotlin
Groovy
dynamic languages
MVC框架
Struts
JSF
WebWork
JFinal
ORM框架
SpringData
Spring Data JDBC
Spring Data JPA
sql生成
通过方法名拼接sql
查询
find
read
get
query
stream
First
Top
count
exists
Distinct
OrderBy
删除
remove
delete
其他
IsBetween/Between
IsNotNull/NotNull
IsNull/Null
IsLessThan/LessThan
IsLessThanEqual/LessThanEqual
IsGreaterThan/GreaterThan
IsGreaterThanEqual/GreaterThanEqual
IsBefore/Before
IsAfter/After
IsNotLike/NotLike
IsLike/Like
IsStartingWith/StartingWith/StartsWith
IsEndingWith/EndingWith/EndsWith
IsNotEmpty/NotEmpty
IsEmpty/Empty
IsNotContaining/NotContaining/NotContains
IsContaining/Containing/Contains
IsNotIn/NotIn
IsIn/In
IsNear/Near
IsWithin/Within
MatchesRegex/Matches/Regex
IsTrue/True
IsFalse/False
IsNot/Not
Is/Equals
@Query
JPQL
原生SQL
编程式
JPA自带常用API
JpaRepository<T, ID>
findAll
findAllById
saveAll
saveAndFlush
deleteInBatch
deleteAllInBatch
getOne
PagingAndSortingRepository<T, ID>
findAll
CrudRepository<T, ID>
save
saveAll
findAll
findById
existsById
count
deleteById
delete
deleteAll
其他
flush
Spring Data Mongodb
Spring Data Redis
Spring Data Elasticsearch
Spring Data Apache Solr
Spring Data Apache Hadoop
Hibernate
MyBatis
两种sql配置方式
XML配置方式
Annotation注解方式
configuration 配置各个元素
properties
setting
typeAliases
typeHandlers
objectFactory
plugins
environments
databaseProvider
mapper
分页
pageHelper
批量操作
联合查询
可能遇到的坑
jdbcType与数据库字段类型的匹配
Morphia
数据库连接池
C3P0
DBCP
druid
HikariCP
proxool
Tomcat jdbc pool
BoneCP
缓存框架
Ehcache
缓存策略
TTL
LRU
caffeine
Infinispan
日志处理
Log4j
Log4j2
Commons Logging
SLF4J
Logback
安全框架
Spring Security
Shiro
计算框架
Storm
Nimbus
Supervisor
Worker
Executor
Task
Topology
Spout
Bolt
Tuple
Stream分组
Shuffle
Fields
All
Global
None
Direct
Local or shuffle
JStorm
Spark Streaming
Flink
Blink
job框架
Quartz
常用注解
@DisallowConcurrentExecution
组件
JobDetail
Trigger
SimpleTrigger
CronTrigger
Calendar
Schedule
ElasticJob
xxl-job
微服务&分布式框架
SpringBoot
常用注解
类级别注解
@SpringBootApplication
@RestController
@EnableAutoConfiguration
@EntityScan
方法变量级别注解
三大特性
组件自动装配
web MVC
支持的模板引擎
FreeMarker
Groovy
Thymeleaf
Mustache
JSP
web Flux
支持的模板引擎
FreeMarker
Thymeleaf
Mustache
JDBC
···
嵌入式Web容器
Tomcat
Jetty
Undertow
生产准备特性
指标
健康检查
外部化配置
···
自动装配
实现方法
激活自动装配-@EnableAutoConfiguration
实现自动装配-XXXAutoConfiguration
配置自动装配实现-META-INFO/spring.factories
扩展点
SpringApplication
自动配置(Auto-Configuration)
诊断分析(Diagnostics Analyzer)
嵌入式容器(Embedded Container)
工厂加载机制(Factories Loadding Mechanism)
配置源(Property Sources)
端点(Endpoints)
监控和管理(JMX)
事件/监听器(Event/Listener)
Dubbo
组成
Provider
Consumer
Registry
Monitor
支持的容器
Spring
Jetty
Log4j
Logback
支持的协议
dubbo(默认)
RMI
hessian
webservice
http
thrift
支持的注册中心
zookeeper
redis
multicast
simple
服务治理
负载均衡
随机负载(默认)
可设置权重
一致性哈希
最小活跃度
....
配置
注册中心支持本地缓存(缓存在文件系统)
SpringCloudAlibabba
Helidon
SpringCloud
主要组件
Spring Cloud Netflix
Netflix Eureka
Netflix Hystrix
Netflix Zuul
Netflix Ribbon
负载规则
随机规则
最可用规则
轮训规则
重试实现
客户端配置
可用性过滤规则
RT权重规则
规避区域规则
Spring Cloud Bus
Spring Cloud Config
Spring Cloud OpenFeign
Spring Cloud Stream
Spring Cloud Sleuth
Spring Cloud Gateway
----------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------
注册中心&服务发现
Netflix Eureka
Spring Cloud Consul
Zookeeper
redis
Dubbo
网关
Spring Cloud Gateway
Netflix Zuul
Kong
Nginx
RPC通信框架
跨语言RPC框架
Hessian
Apache Thrift
gRPC
Hprose
服务治理RPC框架
Dubbo
DubboX
JSF
Motan
配置中心
Disconf
Spring Cloud Config
Apollo
Nacos
Zookeeper
etcd
消息总线
Spring Cloud Bus
监控
Cat
ELK
Zabbix
Zipkin
熔断降级
Sentinel
Netflix Hystrix
----------------------------------------------------------------------------------------------------------
Service Mesh
Linkerd
Istio
Envoy
动态服务发现
负载均衡
轮询
随机
带权重的最少请求
TLS 终止
HTTP/2 & gRPC 代理
熔断器
健康检查、基于百分比流量拆分的灰度发布
故障注入
丰富的度量指标
Mixer
访问控制
使用策略
收集数据
Pilot
服务发现
弹性(超时、重试、熔断器等)流量管理
智能路由
Citadel
Galley
Envoy
nginmesh
SOFA
Tencent Service Mesh
CSE Mesher
工具类库
Apache Commons
Google Guava
lombok
XStream
OkHttp
字节码操作类库
ASM
Cglib
Javassist
Byteman
Byte Buddy
bytecode-viewer
json
FastJson
Gson
Jackson
Json-lib
Resilience4j
reactive框架
Vert.x
异步框架
Netty
其他
Tiles
Apache Mesos
架构
分布式
分布式事务
2PC
Atomikos
Bitronix
TCC
3PC
JOTM
Atomikos
分布式锁
mysql行锁实现
redis setnx实现
zk、etcd实现
SOA
RESTful
WebService
安全
单项散列算法
MD5
SHA
对称加密
DES
非对称加密
RSA
HTTPS
网络安全
XSS
CSRF
注入攻击
文件上传漏洞
DDOS攻击
测试
黑盒测试
白盒测试
Junit
Spring Test
Jmeter
Sonar
语言
Java
JDK
JRE
JVM
内存模型
方法区
jdk1.8前
永久代(PermGen)
堆内存
老年代
新生代
eden:8
s0:1
s1:1
本地内存
jdk1.8
元空间(Meta Space)
运行时数据区
数据
方法区
运行时常量池
堆
指令
程序计数器
虚拟机栈
栈帧
局部变量表
内存空间编译期分配完成
方法运行期间大小不变
操作数栈
动态链接
方法出口
。。。
本地方法栈
JVM优化调优
类加载机制
双亲委派
OSGI(Open Service Gateway Initiative)
GC
回收算法
对象存活判断
引用计数法
可达性分析
GC Roots
虚拟机栈中本地变量表引用的对象
方法区中
类静态变量引用的对象
常量引用的对象
本地方法栈中JNI引用的对象
不可达还会发生什么
finalize()
引用
强引用
软引用
内存不足时回收
缓存
弱引用
下一次垃圾回收会回收掉,不管内存是否足够
大对象
虚引用
缺点
无法处理循环引用
引用产生和消除时存在加减操作,影响性能
标记-清除算法
优点
first
缺点
效率不高
回收后的空间是不连续的
复制算法
优点
实现简单、高效,不用考虑碎片
缺点
要分一块出来做复制
标记-整理算法
垃圾回收器
Minor GC
Serial
ParNew
Parallel Scavenge
Full GC/Major GC
Serial Old
Parallel Old
CMS
Java运行类库
基本数据类型
boolean
char
byte
short
int
long
float
double
集合
Collection
List
ArrayList
底层动态数组实现
查改快、尾部添加快、删除慢、中间插入慢
动态扩容
JDK1.6默认10、1.5倍+1(整除实现)
JDK1.7默认0、1.5倍扩容(位运算实现)、加了容量上限
JDK1.8默认0、1.5倍扩容
Vector
底层动态数组实现
效率低
Stack
先进后出(FILO)
LinkedList
底层基于双向循环链表
添加快、删除快、查询需要遍历,较慢
CopyOnWriteArrayList
数据最终一致、占用内存大
Set
HashSet
equals、hashCode判断是否相等
hash算法存取快
HashMap实现
LinkedHashSet
链表维护顺序
LinkedHashMap实现
随机访问慢、迭代访问快
TreeSet
红黑树结构
TreeMap实现
EnumSet
Queue
Deque
ConcurrentLinkedDeque
ConcurrentLinkedDeque
ConcurrentLinkedQueue
LinkedBlockingQueue
Map
HashMap
1.8之前底层数组+链表实现
1.8之后底层数组+链表/红黑树实现
LinkedHashMap
HashTable
Properties
WeakHashMap
弱键,可能被GC
TreeMap
红黑树结构
支持两种顺序
自然顺序
定制顺序
EnumMap
IdentityHashMap
ConcurrentHashMap
底层分段的数组+链表实现
jdk1.7分段锁
jdk1.8CAS和synchronized只锁首节点
ConcurrentSkipListMap
java6引入
Collections
工具类
Google guava
Apache conmon lang/BeanUtils/Conllections/IO
JSON
fastjson
gson
jackson
多线程
状态
New
Runnable
Blocked
Waiting
Timed-Waiting
Termnated
ThreadLocal
适用场景
连接池
session管理
泛型
IO
NIO
java1.4引入NIO
java7完善NIO
BIO
AIO
Throwable
Error
Exception
运行时异常
编译时异常
序列化
不参与序列化的情况
静态变量
transient修饰的变量
父类未实现序列化,则父类的变量不参与序列化
反射
获取对象的三种方式
对象.getClass()
类.class
Class.forName(String calssName)---常用
调用方法
getConstructor()
获取公有构造方法
getDeclaredConstructors()
获取所有构造方法
newInstance()
调用构造方法
setAccessible(true)
解除私有限定
获取变量信息
getFields()
获取所有公有变量
getDeclaredFields()
获取所有变量
获取方法信息
getMethods()
获取所有公有方法
invoke()
getDeclaredMethod()
获取所有方法
clone
servlet
组件
Servlet
Filter
Listener
socket
连接数据库
连接数据库步骤
1.加载驱动类(JDBC驱动)
2.建立连接(客户端Connection)
3.建立语句集(SQL Statement)
4.执行语句集(execute())
6.关闭结果、语句,连接
数据库连接池
dbcp
应用广泛,比较稳定,
速度稍慢,在大并发量的压力下稳定性有所下降,不提供连接池监控
c3p0
持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证
不提供连接池监控
proxool
提供连接池监控
稳定性存在问题
druid
完善的监控系统,可扩展性强,稳定
HikariCP
号称性能最好的连接池
BoneCP
Javac
Java5
泛型
枚举
自动装箱、自动拆箱
可变参数
Annotations
Tiger预定义的三种标准annotation
@Override
指出重写父类方法
@Deprecated
指出子类不能覆盖的方法
@SupressWarnings
去掉编译期警告
自定义annotation
meta-annotation
@Target
@Retention
@Documented
@Inherited
Annotation的反射
foreach
静态导包
格式化
新线程模型和并发库
ConcurrentHashMap
CopOnWriteArrayList
Java6新特性
Java7新特性
switch支持字符串
multicatch和final重抛
try-with-resources
try( ObjectInputStream on = new ObjectinputStream(new FileInputStream("XXX.txt"))){}
支持泛型实例化类型自动推断
钻石语法
NIO.2 API
新增一些获取环境信息的工具方法System类
Boolean类型反转,空指针安全、参与位运算
两个char间的equals
boolean Character.equalslgnoreCase(char ch1,char cha2)
安全的加减乘除
Java8新特性
Lambda表达式
Collectons.sort(names, (a, b) -> b.compareTo(a));
集合的流氏操作
List<User> users =users.stream().filter(user -> user.getAge() > 18).map(user::getName).limit(3).collect(toList());
方法和构造函数引用
Integer::valueOf
接口默认方法
日期处理类LocalDate、LocalTime
Java9新特性
模块化
Java10新特性
局部变量类型推断
Java11新特性
Nest-Based Access Control
Dynamic Class-File Constants
Improve Aarch64 Intrinsics
Epsilon: A No-Op Garbage Collector
Remove the Java EE and CORBA Modules
HTTP Client (Standard)
Local-Variable Syntax for Lambda Parameters
Key Agreement with Curve25519 and Curve448
Unicode 10
Flight Recorder
ChaCha20 and Poly1305 Cryptographic Algorithms
Launch Single-File Source-Code Programs
Low-Overhead Heap Profiling
Transport Layer Security (TLS) 1.3
ZGC: A Scalable Low-Latency Garbage Collector
Deprecate the Nashorn JavaScript Engine
Deprecate the Pack200 Tools and API
Java12新特性
Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
Microbenchmark Suite
Switch Expressions (Preview)
JVM Constants API
One AArch64 Port, Not Two
Default CDS Archives
Abortable Mixed Collections for G1
Promptly Return Unused Committed Memory from G1
Java13新特性
Java14新特性
Groovy
Kotlin
Go
其他
Session/Cookie
压缩
算法
Gzip
高压缩率,慢速
deflate
deflate(lvl=1)
低压缩率,快速
。。。
deflate(lvl=9)
高压缩率,慢速
Bzip2
LZMA
XZ
LZ4
LZ4(high)
LZ4(fast)
很快,可达320M/S
LZO
Snappy
Snappy(framed)
Snappy(normal)
编码
ASCII
ISO-8859-1
GB2312
GBK
GB18030
UTF-16
UTF-8
面试
面试题
非技术因素
责任心
团队精神
主动性
性格
年龄
期待
职业规划
工作业绩
技术攻关
应急
创新
分享
项目管理
程序开发案例
项目设计案例
技术面试范围
Java基础
集合
多线程
JVM
IO
设计模式
并发
框架
Spring体系
SpringBoot体系
SpringCloud体系
Dubbo体系
Mybatis
Hibernate
Netty
数据库
Mysql
Oracle
中间件
Redis
Kafka
RabbitMQ
RocketMQ
ElasticSearch
MongoDB
Zookeeper
Etcd
网络
安全
数据结构
数组
队列
栈
树
红黑树
B-Tree
B+Tree
图
算法
排序算法
查找算法
加密算法
哈希
运维及工具
Git
Maven
Linux
Docker
K8s
Jenkins
Tomcat
Jetty
Nginx
项目经验
项目内职责
贡献
收获
项目痛点及解决方案
区块链
比特币
以太坊
超级账本
云计算
服务模式
IaaS
PaaS
SaaS
Serverless
DaaS
CaaS
FaaS
BaaS
组成
DevOps
持续交付(Continuous Delivery)
微服务(MicroServices)
敏捷基础设施(Agile Infrastructure)
康威定律(Conways Law)
部署模型
公有云
私有云
社区云
混合云
特征
按需自助服务
多租户的资源池
快速伸缩
广泛的网络访问
按使用量收费的服务
人工智能
数学基础
机器学习
深度学习
常用框架
DL4J
神经网络
应用场景
IOT
协议规范
HTTP1.1/2.0
HTTPS
TCP/IP
UDP/IP
RPC
JPA
Mulicast
JWT
JMS
JSR
设计模式
七大原则
单一职责原则
开闭原则
里氏替换原则
依赖倒转原则
接口隔离原则
迪米特法则
合成复用原则
GoF 23种设计模式
创建型
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
单例模式(Singleton)
结构型
代理模式(Proxy)
适配器模式(Adapter)
桥接模式(Bridge)
组合模式(Composite)
装饰者模式(Decorator)
门面模式(Facade)
享元模式(Flyweight)
行为型
解释器模式(Interpreter)
模板方法模式(Template Method)
责任链模式(Chain of Responsibility)
命令模式(Command)
迭代器模式(Iterator)
调解者模式(Mediator)
备忘录模式(Memento)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
访问者模式(Visitor)
J2EE 模式
MVC 模式(MVC)
业务代表模式(Business Delegate)
组合实体模式(Composite Entity)
数据访问对象模式(Data Access Object)
前端控制器模式(Front Controller)
拦截过滤器模式(Intercepting Filter)
服务定位器模式(Service Locator)
传输对象模式(Transfer Object)
其他常用设计模式
简单工厂模式(Simple Factory )
委派模式(Delegate)
过滤器模式/标准模式(Filter、Criteria)
空对象模式(Null Object)
表达式
正则表达式
Cron表达式
EL表达式
JSTL表达式
OGLN表达式
数据结构和算法
算法
复杂度分析
空间复杂度
时间复杂度
排序算法
插入排序
直接插入排序
平均时间复杂度
O(n^2)
空间复杂度
O(1)
优点
稳定
希尔排序
平均时间复杂度
O(n^3/2)
折半插入
平均时间复杂度
O(n^2)
选择排序
简单选择排序
平均时间复杂度
O(n^2)
缺点
不稳定
堆排序
平均时间复杂度
O(n log n)
优点
任何情况下,复杂度相同
缺点
元素较少时,建堆消耗时间,性能较差
不稳定
树形选择排序
平均时间复杂度
O(n^2)
交换排序
冒泡排序
平均时间复杂度
O(n^2)
优点
稳定
快速排序
平均时间复杂度
O(n log n)
最坏时间复杂度
O(n^2)
缺点
不稳定
归并排序
分治法
划分
治理
组合
平均时间复杂度
O(n log n)
优点
稳定
桶排序
计数排序
基数排序
常用算法
二分法
贪心算法
分治算法
回溯算法
枚举算法
动态规划
分支界限
剪枝
哈希
GEO hash
常见的hash函数
直接定址法
直接以关键字k或者k加上某个常数(k+c)作为哈希地址。
数字分析法
提取关键字中取值比较均匀的数字作为哈希地址。
除留余数法
用关键字k除以某个不大于哈希表长度m的数p,将所得余数作为哈希表地址。
分段叠加法
按照哈希表地址位数将关键字分成位数相等的几部分,其中最后一部分可以比较短。然后将这几部分相加,舍弃最高进位后的结果就是该关键字的哈希地址。
平方取中法
如果关键字各个部分分布都不均匀的话,可以先求出它的平方值,然后按照需求取中间的几位作为哈希地址。
伪随机数法
采用一个伪随机数当作哈希函数。
布隆过滤器
数据结构
线性表
数组
链表
单向链表
双向链表
循环链表
双向循环链表
静态链表
队列
普通队列
双端队列
阻塞队列
并发队列
阻塞并发队列
栈
顺序栈
链式栈
散列表
位图
树型结构
树
二叉树
平衡二叉树
二叉查找树
平衡二叉查找树
红黑树
AVL树
完全二叉树
满二叉树
多路查找树
B树
每个节点都可以存储数据
B+树
只有叶子节点可以存储数据
相邻叶子节点有关联
2-3树
2-3-4树
赫夫曼树
堆
小顶堆
大顶堆
优先级队列
斐波那契堆
二项堆
其它
树状数组
线段树
图
图的存储
邻接矩阵
邻接表
拓扑排序
最短路径
关键路径
最小生成树
二分图
最大流
哈希表
工具
IDE
IntelliJ IDEA
插件
FindBugs
CheckStyle
JRebel
Translation
Maven Helper
Alibaba cloud toolkit
GenerateAllSetter
GenerateSerialVersionUID
GsonFormat
JProfiler
Lombok
Free Mybatis Plugin
Markdown
Eclipse
STS
Visual Studio Code
代码管理
Git
特点
直接记录快照,而非差异比较
近乎所有操作都是本地执行
时刻保持数据完整性
多数操作仅添加数据
文件的三种状态
已提交(committed),已修改(modified)和已暂存(staged)
常用命令
git init
ssh-keygen -t rsa -C "XXX@qq.com"
git status
git remote
git clone
克隆代码
git clone git@XXX.com
git pull
git push
git checkout
切分支
git chekout -b dev-0719-xxx
撤销更改
git checkout .
git checkout 1.txt
git merge
git fetch
git log
git stash
git rebase
git tag
git alias
git branch
SVN
检出
更新
提交
分支(新文件)
合并(修改旧文件)
项目管理
Maven
版本号
Gradle
Ant
Buck
Bazel
OSGI
团队共享沟通工具
Confluence
JIRA
apidoc
Redmine
Phabricator
集成
TeamCity
Strider
GitLab CI
Travis CI
Kubernetes(k8s)
Sonar
JNDI
Harbor
容器
Docker
优势
更高效的利用系统资源
更快速的启动时间
一致的运行环境
持续交付和部署
迁移方便
组成
Docker Engine
Image
Container
Registry
常用命令
Podman
Skopeo
Buildah
构建
Jenkins
Continuous integration
Continuous Delivery
Hudson
日志查看
SecureCRT
XShell
Putty
调试工具
Postman
Fiddler
Jmeter
SoapUI
tsung
文档生成
Swagger
常用注解
@ApiOperation
Rap
代码生成
Lombok
auto
immutables
javapoet
generator-jhipster
代码混淆
ProGuard
浏览器
google浏览器
插件
Session Buddy
SwitchyOmega
Octotree
firefox浏览器
360浏览器
QQ浏览器
IE浏览器
日志收集
Logstash
Filebeat
Kibana
Flume
监控
ELK
CAT
skywalking
Grafana
数据库
事务
事务隔离级别
Read-Uncommitted
可能导致脏读
Read-Committed
避免脏读,允许不可重复读和幻读
Repeatable-Read
避免脏读,不可重复读,允许幻读
Serializable
串行化读,事务只能一个一个执行,避免了脏读、
不可重复读、幻读。执行效率慢,使用时慎重
不可重复读、幻读。执行效率慢,使用时慎重
数据库事务要满足的几点要求:ACID
Atomic(原子性)
事务必须是原子的工作单元
Consistent(一致性)
事务完成时,必须是所有数据保持一致状态
Isolation(隔离性)
并发事务所做的修改必须和其他事物所作的修改是隔离的
Duration(持久性)
事务完成之后,对系统的影响是永久性的
分布式事务
事务模型
X/Open DTP
协议
2PC
3PC
实现
JOTM
Atomikos
关系型数据库
MySQL
引擎
InnoDB(支持事务)
MyISAM(支持全文索引)
BerkeleyDB
分库分表
为什么要分库分表
单表超大容量
性能问题
如何分
垂直切分
垂直分库
解决表过多问题
垂直分表
解决单表列过多问题
水平切分
大数据表拆成小表
一致性hash
范围切分(可按照ID)
日期拆分
按月拆分
按天拆分
拆分以后可能带来的问题
跨库join
跨分片数据排序分页
唯一主键问题
分布式事务问题
主从
主从同步原理
1.master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务
2. slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志
3. SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致
主从同步延时问题
产生原因
1. 当master库tps比较高的时候,产生的DDL数量超过slave一个sql线程所能承受的范围,或者slave的大型query语句产生锁等待
2. 网络传输: bin文件的传输延迟
3. 磁盘的读写耗时:文件通知更新、磁盘读取延迟、磁盘写入延迟
解决方案
1. 在数据库和应用层增加缓存处理,优先从缓存中读取数据
2. 减少slave同步延迟,可以修改slave库sync_binlog属性;
sync_binlog=0 文件系统来调度把binlog_cache刷新到磁盘
sync_binlog=n
sync_binlog=0 文件系统来调度把binlog_cache刷新到磁盘
sync_binlog=n
3. 增加延时监控
Nagios做网络监控
mk-heartbeat
Nagios做网络监控
mk-heartbeat
SQL优化
索引
种类
B-Tree索引
Hash索引
Fulltext索引
R-Tree索引
pros
提高检索效率
降低排序成本
排序分组主要消耗的是我们内存和CPU的资源
cons
更新索引IO量
调整索引所致的计算量
存储空间
是否建索引
较频繁的作为查询条件的字段应建索引
唯一性太差的字段不适合单独创建索引
更新非常频繁的字段不适合创建索引
不会出现在where子句中的字段不该创建索引
原则
永远用小结果集驱动大结果集
join
只取出自己需要的列
数据量
排序占用空间
max_length_for_sort_data
仅仅使用最有效的过滤条件
key length
尽可能避免复杂的join和子查询
锁资源
explain
join
优化
永远用小结果集驱动大结果集
保证被驱动表的join条件字段已经被索引
join buffer
join_buffer_size
order by
实现
有序
无序
排序字段和指针在Sort Buffer排序--->然后用指针去取数据
排序字段和所有字段全部取出--->排序字段+指针Sort Buffer排序(其他数据存到内存中)--->指针到内存里去取数据然后返回
节省IO
耗内存
空间换时间
优化
索引顺序一致的话不需要在排序
加大max_length_for_sort_data从而使用第二种排序方法(排序只针对需要排序的字段)
内存不足时,去掉不必要返回的字段
增大sort_buffer_size
减少在排序过程中对需要排序的字段进行分段
group by
基于排序,所以要优化好对应的排序
distinct
基于分组,所以要优化好对应的分组
limit
例子
select id,name from table where name='小明' limit 100,10
这条sql会查出110条,然后取出后10条,所以要优化查询速度
锁
行锁
pros
粒度小
cons
获取、释放所做的工作更多
容易发生死锁(多个表时)
锁优化
尽可能让所有的数据检索都通过索引来完成
合理设计索引
减少基于范围的数据是检索过滤条件
尽量控制事务的大小
业务允许的情况下,尽量使用较低级别的事务隔离
Innodb引擎
表级锁的争用状态变量
show status like 'table%';
页锁
介于行锁和表锁之间
BerkeleyDB引擎
表锁
pros
实现逻辑简单
获取、释放快
避免死锁(不会出现死锁的问题)
cons
粒度太大,并发不够高
MyISAM引擎
行级锁争用状态变量
show status like 'innodb_row_lock%';
共享锁
排他锁
间隙锁
通过在指向数据记录的第一个索引键之前和最后一个索引键之后的空域空间上标记锁定信息来实现的
乐观锁
悲观锁
事务
Oracle
SQL Server
PostgreSQL
PgSql
oceanBase
数据库设计
范式
E-R图
NoSql
Redis
数据结构
字符类型
散列类型
列表类型
集合类型
有序集合
事务
WATCH
监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
UNWATCH
取消 WATCH 命令对所有 key 的监视。
EXEC
执行所有事务块内的命令
MULTI
标记一个事务块的开始。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
DISCARD
取消事务,放弃执行事务块内的所有命令。
如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。
如果正在使用 WATCH 命令监视某个(或某些) key,那么取消所有监视,等同于执行命令 UNWATCH 。
lua脚本
优点
减少网络开销
原子操作
复用性
轻量级
KeyDB
Pika
与redis对比的优缺点
优点
容量大
加载数据快
恢复数据快
节省机器内存资源
采用binLog,实现全同步 + 增量同步,不存在缓存区写满问题
多数据key快速删除
快照式备份
缺点
单线程下性能不如redis
Memcache
BerkeleyDB
Voldemort
MongoDB
BSON
CouchDB
Membase
Couchbase
NewSql
Spanner
VoltDB
Clustrix
NuoDB
消息中间件
Zookeeper
数据模型
节点类型
持久化节点
持久化有序节点
临时节点
临时有序节点
命令
创建节点
create [-s] [-e] path data acl
获取节点
get path [watch]
列出节点
ls [path]
修改节点
set path data [version]
删除节点
delete path [version]
适用场景
订阅发布/配置中心
watcher机制实现
实现配置信息的集中式管理和数据的动态更新
服务发现
分布式锁
临时有序节点及watcher机制实现
排他锁
临时节点实现
共享锁
临时有序节点实现
负载均衡
请求/数据分摊多个计算机单元上
ID生成器
分布式队列
统一命名服务
master选举
可以避免脑裂问题
限流
Kafka/Jafka
优点
时间复杂度O(1)
TPS高
缺点
不支持定时消息
Kafka Streams
ActiveMQ
RabbitMQ
优点
高并发(erlang语言实现特性导致)
高可靠、高可用
缺点
重量级
RocketMQ
java语言实现
组件
nameserver
broker
producer
consumer
两种消费模式
PULL
DefaultMQPullConsumer
PUSH
DefaultMQPushConsumer
优点
数据可靠性高
支持同步刷盘、异步实时刷盘、同步复制、异步复制
消息投递实时性
支持消息失败重试
高TPS
单机写入TPS单实例约7万条/秒,单机部署3个Broker,可以跑到最高12万条/秒,消息大小10个字节
严格的消息顺序
支持定时消息
支持按照时间回溯消息
亿级消息堆积
缺点
消费过程要做到幂等(去重)
ZeroMQ
优点
TPS高
缺点
不支持持久化消息
可靠性、可用性较差
JMS
API
ConnectionFactory
Connection
Session
Destination
MessageProducer/consumer
消息组成
消息头
消息体
TextMessage
MapMessage
BytesMessage
StreamMessage
ObjectMessage
消息属性
JMS可靠机制
消息被确认才认为是被成功消费。消息的 消费包含三个阶段:客户端接收消息,客户端处理消息,消息被确认
事务性会话
消息在session.commit后自动提交
非事务性会话
应答模式
AUTO_ACKNOWLEDGE
自动确认
CLIENT_ACKNOWLEDGE
textMessage.acknowledge()确认消息
DUPS_OK_ACKNOWLEDGE
延迟确认
点对点(P2P模式)
发布订阅(Pub/Sub模式)
持久订阅
非持久订阅
Disque
Cassandra
Neo4j
InfoGrid
pmq
qmq
大数据
Hadoop
MapReduce
HDFS
HBase
Spark
Hive
大数据搜索
Lucene
ElasticSearch
特点
基于Lucene基本架构
java搜索界的鼻祖
实时搜索性能高
正则、substring、内存数据库
构件
Document行(Row)文本
Index索引(数据关键值)
Analyzer分词器(打标签)
Solr
特点
不能用于实时搜索
Nutch
嵌入式数据库
H2
HSQL
Derby
SQLite
UnQLite
Berkeley DB
eXtremeDB
Progress
Empress
Firebird
mSQL
OpenBASE Lite
服务器
负载均衡服务器
Nginx
f5
4层负载
redware
7层负载
Tomcat
架构
目录结构
conf
catalina.policy
catalinna.properties
logging.properties
server.xml
GlobalNamingResource
Jetty
WebSphere
Apache
Jboss
WebLogic
DNS
CDN
Resin
TOMEE
Undertow
lighttpd
glassfish
操作系统
Windows
Linux
命令
cd
ls
ll
mkdir
rmdir
mv
rm
cp
pwd
df
man
info
help
info --help
tail
tail -f SystemOut.log
tail -200 SystemErr.log
head
head -200 SystemOut.log
sz
sz a.war
vi
vi a.txt
vi +/pattern a.txt
top
iostat
iostat -dx l
vmstat
free
free /m
free /g
nicstat
Mac
0 条评论
下一页