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