java技术栈
2018-06-01 15:07:42 0 举报
AI智能生成
java技术栈
作者其他创作
大纲/内容
分布式、java中间件、web服务器等方面
ZooKeeper源码
客户端架构
服务器端单机版和集群版,对应的请求处理器
集群版session的建立和激活过程
Leader选举过程
事务日志和快照文件的详细解析
实现分布式锁、分布式ID分发器
实现Leader选举
ZAB协议实现一致性原理
序列化和反序列化框架
Avro研究
Thrift研究
Protobuf研究
Protostuff研究
Hessian
RPC框架dubbo源码
dubbo扩展机制的实现,对比SPI机制
服务的发布过程
服务的订阅过程
RPC通信的设计
NIO模块以及对应的Netty和Mina、thrift源码
TCP握手和断开及有限状态机
backlog
BIO NIO
阻塞/非阻塞的区别、同步/异步的区别
阻塞IO、非阻塞IO、多路复用IO、异步IO
Reactor线程模型
jdk的poll、epoll与底层poll、epoll的对接实现
Netty自己的epoll实现
内核层poll、epoll的大致实现
epoll的边缘触发和水平触发
Netty的EventLoopGroup设计
Netty的ByteBuf设计
Netty的ChannelHandler
Netty的零拷贝
Netty的线程模型,特别是与业务线程以及资源释放方面的理解
消息队列kafka、RocketMQ、Notify、Hermes
kafka的文件存储设计
kafka的副本复制过程
kafka副本的leader选举过程
kafka的消息丢失问题
kafka的消息顺序性问题
kafka的isr设计和过半对比
kafka本身做的很轻量级来保持高效,很多高级特性没有:事务、优先级的消息、消息的过滤,更重要的是服务治理不健全,一旦出问题,不能直观反应出来,不太适合对数据要求十分严苛的企业级系统,而适合日志之类并发量大但是允许少量的丢失或重复等场景
Notify、RocketMQ的事务设计
基于文件的kafka、RocketMQ和基于数据库的Notify和Hermes
设计一个消息系统要考虑哪些方面
丢失消息、消息重复、高可用等话题
数据库的分库分表mycat
NoSql数据库mongodb
KV键值系统memcached redis
redis对客户端的维护和管理,读写缓冲区
redis事务的实现
Jedis客户端的实现
JedisPool以及ShardedJedisPool的实现
redis epoll实现,循环中的文件事件和时间事件
redis的RDB持久化,save和bgsave
redis AOF命令追加、文件写入、文件同步到磁盘
redis AOF重写,为了减少阻塞时间采取的措施
redis的LRU内存回收算法
redis的master slave复制
redis的sentinel高可用方案
redis的cluster分片方案
web服务器tomcat、ngnix的设计原理
tomcat的整体架构设计
tomcat对通信的并发控制
http请求到达tomcat的整个处理流程
ELK日志实时处理查询系统
Elasticsearch、Logstash、Kibana
Spring Cloud
Spring Cloud Zookeeper:用于服务注册和发现
Spring Cloud Config:分布式配置
Spring Cloud Netflix Eureka:用于rest服务的注册和发现
Spring Cloud Netflix Hystrix:服务的隔离、熔断和降级
Spring Cloud Netflix Zuul:动态路由,API Gateway
服务方面
SOA与微服务
服务的合并部署、多版本自动快速切换和回滚
服务的治理:限流、降级
服务的线性扩展
服务链路监控和报警:CAT、Dapper、Pinpoint
分布式事务
JTA分布式事务接口定义,对此与Spring事务体系的整合
TCC分布式事务概念
TCC分布式事务实现框架案例1:tcc-transaction
TccCompensableAspect切面拦截创建ROOT事务
TccTransactionContextAspect切面使远程RPC调用资源加入到上述事务中,作为一个参与者
TccCompensableAspect切面根据远程RPC传递的TransactionContext的标记创建出分支事务
全部RPC调用完毕,ROOT事务开始提交或者回滚,执行所有参与者的提交或回滚
所有参与者的提交或者回滚,还是通过远程RPC调用,provider端开始执行对应分支事务的confirm或者cancel方法
事务的存储,集群共享问题
事务的恢复,避免集群重复恢复
TCC分布式事务实现框架案例2:ByteTCC
JTA事务管理实现,类比Jotm、Atomikos等JTA实现
事务的存储和恢复,集群是否共享问题,调用方创建CompensableTransaction事务,并加入资源
CompensableMethodInterceptor拦截器向spring事务注入CompensableInvocation资源
Spring的分布式事务管理器创建作为协调者CompensableTransaction类型事务,和当前线程进行绑定,同时创建一个jta事务
在执行sql等操作的时候,所使用的jdbc等XAResource资源加入上述jta事务
dubbo
RPC远程调用来到provider端,CompensableDubboServiceFilter根据传递过来的TransactionContext创建出对应的CompensableTransaction类型事务
provider端,执行时遇见@Transactional和@Compensable,作为一个参与者开启try阶段的事务,即创建了一个jta事务
一致性算法
raft
ZooKeeper使用的ZAB协议
paxos
大数据方向
Hadoop
UserGroupInformation源码解读:JAAS认证、user和group关系的维护
RPC通信的实现
代理用户的过程
kerberos认证
MapReduce
MapReduce理论及其对应的接口定义
HDFS
MapFile、SequenceFile
ACL
YARN、Mesos 资源调度
oozie
oozie XCommand设计
DagEngine的实现原理
Hive
HiveServer2、metatore的thrift RPC通信设计
Hive的优化过程
HiveServer2的认证和授权
metastore的认证和授权
HiveServer2向metatore的用户传递过程
Hbase
Hbase的整体架构图
Hbase的WAL和MVCC设计
client端的异步批量flush寻找RegionServer的过程
Zookeeper上HBase节点解释
Region的高可用问题对比kafka分区的高可用实现
RegionServer RPC调用的隔离问题
数据从内存刷写到HDFS的粒度问题
rowKey的设计
MemStore与LSM
Spark
不同的部署方式
SparkSql的实现方式
java基础
算法
排序算法
直接插入排序
希尔排序
冒泡排序
快速排序
直接选择排序
堆排序
归并排序
基数排序
应用、数据库、HBase
二叉查找树
红黑树
B 树
B+树
LSM 树
BitSet解决数据重复和是否存在等问题
基础
字符串常量池的迁移
字符串 KMP 算法
equals 和 hashcode
泛型、异常、反射
string 的 hash 算法
hash 冲突的解决办法:拉链法
foreach 循环的原理
static、final、transient 等关键字的作用
volatile 关键字的底层实现原理
Collections.sort 方法使用的是那种排序方法
Future 接口,常见的线程池中的 FutureTask 实现等
string 的 intern 方法的内部细节,jdk
设计模式
单例模式
工厂模式
装饰者模式
观察者模式
ThreadLocal 设计模式
正则表达式
捕获组合非捕获组
贪婪、勉强、独占模式
java 内存模型以及垃圾回收算法
类加载机制,也就是双亲委派模型
java 内存分配模型(默认 HotSpot)
线程共享的
堆区
永久区
线程独享的
虚拟机栈
本地方法栈
程序计数器
内存分配机制:年轻代(Eden 区、两个 Survivor 区)、年老代、永久代以及他们的分配过程
强引用、软引用、弱引用、虚引用与 GC
happens-before 规则
指令重排序、内存栅栏
java8的内存分代改进
垃圾回收算法
标记-清除
复制算法
标记整理
常用垃圾收集器
新生代
Serial 收集器
ParNew 收集器
Parallel Scavenge 收集器
老年代
Serial Old 收集器
Parallel Old 收集器
CMS(Concurrent Mark Sweep)收集器
G1收集器(跨新生代和老年代)
常用 gc 参数
常用工具
锁以及并发容器的源码
synchronized和volatile理解
Unsafe类的原理,使用它来实现CAS。因此诞生了AtomicInteger系列等
CAS可能产生的ABA问题的解决,如加入修改次数、版本号
同步器AQS的实现原理
独占锁、共享锁;可重入的独占锁ReentrantLock、共享锁 实现原理
公平锁和非公平锁
读写锁 ReentrantReadWriteLock的实现原理
LockSupport工具
Condition接口及其实现原理
HashMap、HashSet、ArrayList、LinkedList、HashTable、ConcurrentHashMap、TreeMap的实现原理
HashMap的并发问题
ConcurrentLinkedQueue的实现原理
Fork/Join框架
CountDownLatch和CyclicBarrier
线程池源码
内部执行原理
各种线程池的区别
web 方面
SpringMVC 的架构设计
servlet开发存在的问题
SpringMVC为解决上述问题开发的几大组件及接口
DispatcherServlet、容器、组件三者之间的关系
叙述SpringMVC对请求的整体处理流程
SpringBoot
SpringAOP 源码
AOP的实现分类:编译期、字节码加载前、字节码加载后三种时机来实现AOP
深刻理解其中的角色:AOP联盟、aspectj、jboss AOP、Spring自身实现的AOP、Spring嵌入aspectj。特别是能用代码区分后两者
接口设计
AOP联盟定义的概念或接口
SpringAOP针对上述Advice接口定义的接口及其实现类
SpringAOP定义的定义的AdvisorAdapter接口
SpringAOP定义的Pointcut接口
SpringAOP定义的ExpressionPointcut接口
SpringAOP定义的PointcutAdvisor接口
SpringAOP的调用流程
SpringAOP自己的实现方式
Spring事务体系源码以及分布式事务Jotm Atomikos源码实现
jdbc事务存在的问题
Hibernate对事务的改进
针对各种各样的事务,Spring如何定义事务体系的接口,以及如何融合jdbc事务和Hibernate事务的
三种事务模型包含的角色以及各自的职责
事务代码也业务代码分离的实现(AOP+ThreadLocal来实现)
Spring事务拦截器TransactionInterceptor全景
X/Open DTP模型,两阶段提交,JTA接口定义
Jotm、Atomikos的实现原理
事务的传播属性
PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED的实现原理以及区别
事物的挂起和恢复的原理
数据库隔离级别
Read uncommitted:读未提交
Read committed : 读已提交
Repeatable read:可重复读
Serializable :串行化
数据库
数据库性能的优化
深入理解mysql的Record Locks、Gap Locks、Next-Key Locks
insert into select语句的加锁情况
事务的ACID特性概念
innodb的MVCC理解
undo redo binlog
undo redo 都可以实现持久化,他们的流程是什么?为什么选用redo来做持久化?
undo、redo结合起来实现原子性和持久化,为什么undo log要先于redo log持久化?
undo为什么要依赖redo?
日志内容可以是物理日志,也可以是逻辑日志?他们各自的优点和缺点是?
redo log最终采用的是物理日志加逻辑日志,物理到page,page内逻辑。还存在什么问题?怎么解决?Double Write
undo log为什么不采用物理日志而采用逻辑日志?
为什么要引入Checkpoint?
引入Checkpoint后为了保证一致性需要阻塞用户操作一段时间,怎么解决这个问题?
开启binlog的情况下,事务内部2PC的一般过程(含有2次持久化,redo log和binlog的持久化)
解释上述过程,为什么binlog的持久化要在redo log之后,在存储引擎commit之前?
为什么要保持事务之间写入binlog和执行存储引擎commit操作的顺序性?(即先写入binlog日志的事务一定先commit)
为了保证上述顺序性,之前的办法是加锁prepare_commit_mutex,但是这极大的降低了事务的效率,怎么来实现binlog的group commit?
怎么将redo log的持久化也实现group commit?至此事务内部2PC的过程,2次持久化的操作都可以group commit了,极大提高了效率
ORM框架: mybatis、Hibernate
最原始的jdbc->Spring的JdbcTemplate->hibernate->JPA->SpringDataJPA的演进之路
SpringSecurity、shiro、SSO(单点登录)
Session和Cookie的区别和联系以及Session的实现原理
SpringSecurity的认证过程以及与Session的关系
CAS实现SSO
日志
jdk自带的logging、log4j、log4j2、logback
门面commons-logging、slf4j
上述6种混战时的日志转换
datasource
c3p0
druid
JdbcTemplate执行sql语句的过程中对Connection的使用和管理
HTTPS的实现原理
0 条评论
下一页