JAVA相关技能树
2023-06-28 13:27:05 0 举报
AI智能生成
JAVA相关技能树
作者其他创作
大纲/内容
服务器
负载均衡服务器
Nginx
f5
4层负载
redware
7层负载
Tomcat
架构
目录结构
conf
catalina.policy
catalinna.properties
logging.properties
server.xml
GlobalNamingResource
Jetty
Apache
Jboss
WebLogic
DNS
CDN
前端及脚本语言
AngularJS
JQuery
Node.js
Vue.js
React
JSP
热加载机制
CSS
HTML
Velocity
Lua
Shell
框架
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
异步非阻塞
使用场景
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
日志处理
Log4j
Log4j2
Commons Logging
SLF4J
Logback
安全框架
Spring Security
Shiro
计算框架
Storm
JStorm
Spark Streaming
Flink
Blink
job框架
Quartz
常用注解
@DisallowConcurrentExecution
组件
JobDetail
Trigger
SimpleTrigger
CronTrigger
Calendar
Schedule
ElasticJob
微服务&分布式框架
RPC框架
跨语言RPC框架
Hessian
Apache Thrift
gRPC
服务治理RPC框架
Dubbo
组成
Provider
Consumer
Registry
Monitor
支持的容器
Spring
Jetty
Log4j
Logback
支持的协议
dubbo(默认)
RMI
hessian
webservice
http
thrift
支持的注册中心
zookeeper
redis
multicast
simple
服务治理
负载均衡
随机负载(默认)
可设置权重
一致性哈希
最小活跃度
....
配置
注册中心支持本地缓存(缓存在文件系统)
DubboX
HSF
SpringBoot
常用注解
类级别注解
@SpringBootApplication
@RestController
@EnableAutoConfiguration
@EntityScan
方法变量级别注解
三大特性
组件自动装配
web MVC
支持的模板引擎
FreeMarker
Groovy
Thymeleaf
Mustache
JSP
web Flux
支持的模板引擎
FreeMarker
Thymeleaf
Mustache
JDBC
···
嵌入式Web容器
Tomcat
Jetty
生产准备特性
指标
健康检查
外部化配置
···
自动装配
实现方法
激活自动装配-@EnableAutoConfiguration
实现自动装配-XXXAutoConfiguration
配置自动装配实现-META-INFO/spring.factories
扩展点
SpringApplication
自动配置(Auto-Configuration)
诊断分析(Diagnostics Analyzer)
嵌入式容器(Embedded Container)
工厂加载机制(Factories Loadding Mechanism)
配置源(Property Sources)
端点(Endpoints)
监控和管理(JMX)
事件/监听器(Event/Listener)
SpringCloud
主要组件
消息总线Spring Cloud Bus
服务注册发现
Consul
Eureka
路由网关
zuul
springcloud Gateway
服务链路追踪Spring Cloud Sleuth+Zipkin
负载均衡Ribbon
Ribbon
负载规则
随机规则
最可用规则
轮训规则
重试实现
客户端配置
可用性过滤规则
RT权重规则
规避区域规则
断路器Hystrix
服务调用Feign
SpringCloudAlibabba
服务注册发现Nacos
熔断限流sentinel
springcloud Gateway
负载均衡Ribbon
服务调用Feign
服务链路追踪Spring Cloud Sleuth+Zipkin
服务注册发现
Etcd
Zookeeper
数据模型
节点类型
持久化节点
持久化有序节点
临时节点
临时有序节点
命令
创建节点
create [-s] [-e] path data acl
获取节点
get path [watch]
列出节点
ls [path]
修改节点
set path data [version]
删除节点
delete path [version]
适用场景
订阅发布/配置中心
watcher机制实现
实现配置信息的集中式管理和数据的动态更新
服务发现
分布式锁
临时有序节点及watcher机制实现
排他锁
临时节点实现
共享锁
临时有序节点实现
负载均衡
请求/数据分摊多个计算机单元上
ID生成器
分布式队列
统一命名服务
master选举
可以避免脑裂问题
限流
Nacos
Eureka
Redis
配置中心
Disconf
Apollo
Nacos
Spring Cloud Config
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
分布式
分布式事务
2PC
3PC
Atomikos
分布式锁
mysql行锁实现
redis setnx实现
zk、etcd实现
reactive框架
Vert.x
异步框架
Netty
其他
Tiles
架构原理
面向服务的架构SOA
微服务架构
领域驱动设计架构DDD
设计模式
七大原则
单一职责原则
开闭原则
里氏替换原则
依赖倒转原则
接口隔离原则
迪米特法则
合成复用原则
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)
安全
单项散列算法
MD5
SHA
对称加密
DES
非对称加密
RSA
HTTPS
网络安全
XSS
CSRF
注入攻击
文件上传漏洞
DDOS攻击
概览
计算机原理
计算机操作系统
计算机网络
数据结构和算法
前端及脚本
Java体系
架构原理
其他技能
测试工具
开发工具
安全
数据库
语言
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引入
工具类
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
数据库
事务
事务隔离级别
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
数据库设计
范式
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
消息中间件
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
开发工具
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
测试工具
黑盒测试
白盒测试
Junit
Spring Test
Jmeter
Sonar
0 条评论
下一页