java技术栈
java技术栈
参考了众多资料,这⾥就不再详细列举了,可以⾃⾏去搜索
1 java基础:
1.1 算法
1.1 排序算法:直接插⼊排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序
1.2 ⼆叉查树、红⿊树、B树、B+树、LSM树(分别有对应的应⽤,数据库、HBase)
1.3 BitSet解决数据重复和是否存在等问题
1.2 基本
2.1 字符串常量池的迁移
2.2 字符串KMP算法
2.3 equals和hashcode
2.4 泛型、异常、反射
2.5 string的hash算法
2.6 hash冲突的解决办法:拉链法
2.7 foreach循环的原理
2.8 static、final、transient等关键字的作⽤
2.9 volatile关键字的底层实现原理
2.10 Collections.sort⽅法使⽤的是哪种排序⽅法
2.11 Future接⼝,常见的线程池中的FutureTask实现等
2.12 string的intern⽅法的内部细节,jdk1.6和jdk1.7的变化以及内部cpp代码StringTable的实现
1.3 设计模式
单例模式
⼯⼚模式
装饰者模式
观察者设计模式
ThreadLocal设计模式
1.4 正则表达式
4.1 捕获组和⾮捕获组
4.2 贪婪,勉强,独占模式
1.5 java内存模型以及垃圾回收算法
5.1 类加载机制,也就是双亲委派模型
5.2 java内存分配模型(默认HotSpot)
线程共享的:堆区、永久区线程独享的:虚拟机栈、本地⽅法栈、程序计数器
5.3 内存分配机制:年轻代(Eden区、两个Survivor区)、年⽼代、永久代以及他们的分配过程
5.4 强引⽤、软引⽤、弱引⽤、虚引⽤与GC
5.5 happens-before规则
5.6 指令重排序、内存栅栏
5.7 Java 8的内存分代改进
5.8 垃圾回收算法:
标记-清除(不⾜之处:效率不⾼、内存碎⽚)
复制算法(解决了上述问题,但是内存只能使⽤⼀半,针对⼤部分对象存活时间短的场景,引出了⼀个默认的8:1:1的改进,缺点是仍然需要借助外界来解决可能承载不下的问题)
标记整理
5.8 常⽤垃圾收集器:
新⽣代:Serial收集器、ParNew收集器、Parallel Scavenge 收集器
⽼年代:Serial Old收集器、Parallel Old收集器、CMS(Concurrent Mark Sweep)收集器、 G1 收集器(跨新⽣代和⽼年代)
5.9 常⽤gc的参数:-Xmn、-Xms、-Xmx、-XX:MaxPermSize、-XX:SurvivorRatio、-XX:-PrintGCDetails
5.10 常⽤⼯具: jps、jstat、jmap、jstack、图形⼯具jConsole、Visual VM、MAT
1.6 锁以及并发容器的源码
6.1 synchronized和volatile理解
6.2 Unsafe类的原理,使⽤它来实现CAS。因此诞⽣了AtomicInteger系列等
6.3 CAS可能产⽣的ABA问题的解决,如加⼊修改次数、版本号
6.4 同步器AQS的实现原理
6.5 独占锁、共享锁;可重⼊的独占锁ReentrantLock、共享锁实现原理
6.6 公平锁和⾮公平锁
6.7 读写锁 ReentrantReadWriteLock的实现原理
6.8 LockSupport⼯具
6.9 Condition接⼝及其实现原理
6.10 HashMap、HashSet、ArrayList、LinkedList、HashTable、ConcurrentHashMap、TreeMap的实现原理
6.11 HashMap的并发问题
6.12 ConcurrentLinkedQueue的实现原理
6.13 Fork/Join框架
6.14 CountDownLatch和CyclicBarrier
1.7 线程池源码
7.1 内部执⾏原理
7.2 各种线程池的区别
2 web⽅⾯:
2.1 SpringMVC的架构设计
1.1 servlet开发存在的问题:映射问题、参数获取问题、格式化转换问题、返回值处理问题、视图渲染问题
1.2 SpringMVC为解决上述问题开发的⼏⼤组件及接⼝:HandlerMapping、HandlerAdapter、HandlerMethodArgumentResolver、
HttpMessageConverter、Converter、GenericConverter、HandlerMethodReturnValueHandler、ViewResolver、MultipartResolver
1.3 DispatcherServlet、容器、组件三者之间的关系
1.4 叙述SpringMVC对请求的整体处理流程
1.5 SpringBoot
2.2 SpringAOP源码
2.1 AOP的实现分类:编译期、字节码加载前、字节码加载后三种时机来实现AOP
2.2 深刻理解其中的⾓⾊:AOP联盟、aspectj、jboss AOP、Spring⾃⾝实现的AOP、Spring嵌⼊aspectj。特别是能⽤代码区分后两
2.3 接⼝设计:
AOP联盟定义的概念或接⼝:Pointcut(概念,没有定义对应的接⼝)、Joinpoint、Advice、MethodInterceptor、MethodInvocation SpringAOP针对上述Advice接⼝定义的接⼝及其实现类:BeforeAdvice、AfterAdvice、MethodBeforeAdvice、
AfterReturningAdvice;针对aspectj对上述接⼝的实现AspectJMethodBeforeAdvice、AspectJAfterReturningAdvice、
AspectJAfterThrowingAdvice、AspectJAfterAdvice。
SpringAOP定义的定义的AdvisorAdapter接⼝:将上述Advise转化为MethodInterceptor
SpringAOP定义的Pointcut接⼝:含有两个属性ClassFilter(过滤类)、MethodMatcher(过滤⽅法)
SpringAOP定义的ExpressionPointcut接⼝:实现中会引⼊aspectj的pointcut表达式
SpringAOP定义的PointcutAdvisor接⼝(将上述Advice接⼝和Pointcut接⼝结合起来)
2.4 SpringAOP的调⽤流程
时间正则表达式java2.5 SpringAOP⾃⼰的实现⽅式(代表⼈物ProxyFactoryBean)和借助aspectj实现⽅式区分
2.3 Spring事务体系源码以及分布式事务Jotm Atomikos源码实现
3.1 jdbc事务存在的问题
3.2 Hibernate对事务的改进
3.3 针对各种各样的事务,Spring如何定义事务体系的接⼝,以及如何融合jdbc事务和Hibernate事务的
3.4 三种事务模型包含的⾓⾊以及各⾃的职责
3.5 事务代码也业务代码分离的实现(AOP+ThreadLocal来实现)
3.6 Spring事务TransactionInterceptor全景
3.7 X/Open DTP模型,两阶段提交,JTA接⼝定义
3.8 Jotm、Atomikos的实现原理
3.9 事务的传播属性
3.10 PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED的实现原理以及区别
3.11 事物的挂起和恢复的原理
2.4 数据库隔离级别
4.1 Read uncommitted:读未提交
4.2 Read committed :读已提交
4.3 Repeatable read:可重复读
4.4 Serializable :串⾏化
2.5 数据库
5.1 数据库性能的优化
5.2 深⼊理解mysql的Record Locks、Gap Locks、Next-Key Locks
例如下⾯的在什么情况下会出现死锁:
start transaction; DELETE FROM t WHERE id =6; INSERT INTO t VALUES(6); commit;
5.3 insert into select语句的加锁情况
5.4 事务的ACID特性概念
5.5 innodb的MVCC理解
5.6 undo redo binlog
1 undo redo 都可以实现持久化,他们的流程是什么?为什么选⽤redo来做持久化?
2 undo、redo结合起来实现原⼦性和持久化,为什么undo log要先于redo log持久化?
3 undo为什么要依赖redo?
4 ⽇志内容可以是物理⽇志,也可以是逻辑⽇志?他们各⾃的优点和缺点是?
5 redo log最终采⽤的是物理⽇志加逻辑⽇志,物理到page,page内逻辑。还存在什么问题?怎么解决?Double Write
6 undo log为什么不采⽤物理⽇志⽽采⽤逻辑⽇志?
7 为什么要引⼊Checkpoint?
8 引⼊Checkpoint后为了保证⼀致性需要阻塞⽤户操作⼀段时间,怎么解决这个问题?(这个问题还是很有普遍性的,redis、
ZooKeeper都有类似的情况以及不同的应对策略)⼜有了同步Checkpoint和异步Checkpoint
9 开启binlog的情况下,事务内部2PC的⼀般过程(含有2次持久化,redo log和binlog的持久化)
10 解释上述过程,为什么binlog的持久化要在redo log之后,在存储引擎commit之前?
11 为什么要保持事务之间写⼊binlog和执⾏存储引擎commit操作的顺序性?(即先写⼊binlog⽇志的事务⼀定先commit)
12 为了保证上述顺序性,之前的办法是加锁prepare_commit_mutex,但是这极⼤的降低了事务的效率,怎么来实现binlog的
group commit?
13 怎么将redo log的持久化也实现group commit?⾄此事务内部2PC的过程,2次持久化的操作都可以group commit了,极⼤提
⾼了效率
2.6 ORM框架: mybatis、Hibernate
6.1 最原始的jdbc->Spring的JdbcTemplate->hibernate->JPA->SpringDataJPA的演进之路
2.7 SpringSecurity、shiro、SSO(单点登录)
7.1 Session和Cookie的区别和联系以及Session的实现原理
7.2 SpringSecurity的认证过程以及与Session的关系
7.3 CAS实现SSO(详见)
2.8 ⽇志
8.1 jdk⾃带的logging、log4j、log4j2、logback
8.2 门⾯commons-logging、slf4j
8.3 上述6种混战时的⽇志转换
2.9 datasource
9.1 c3p0
9.2 druid
9.3 JdbcTemplate执⾏sql语句的过程中对Connection的使⽤和管理
2.10 HTTPS的实现原理
3 分布式、java中间件、web服务器等⽅⾯:3.1 ZooKeeper源码
1.1 客户端架构
1.2 服务器端单机版和集版,对应的请求处理器
1.3 集版session的建⽴和激活过程
1.4 Leader选举过程
1.5 事务⽇志和快照⽂件的详细解析
1.6 实现分布式锁、分布式ID分发器
1.7 实现Leader选举
1.8 ZAB协议实现⼀致性原理
3.2 序列化和反序列化框架
2.1 Avro研究
2.2 Thrift研究
2.3 Protobuf研究
2.4 Protostuff研究
2.5 Hessian
3.3 RPC框架dubbo源码
3.1 dubbo扩展机制的实现,对⽐SPI机制
3.2 服务的发布过程
3.3 服务的订阅过程
3.4 RPC通信的设计
3.4 NIO模块以及对应的Netty和Mina、thrift源码
4.1 TCP握⼿和断开及有限状态机
4.2 backlog
4.3 BIO NIO
4.4 阻塞/⾮阻塞的区别、同步/异步的区别
4.5 阻塞IO、⾮阻塞IO、多路复⽤IO、异步IO
4.6 Reactor线程模型
4.7 jdk的poll、epoll与底层poll、epoll的对接实现
4.8 Netty⾃⼰的epoll实现
4.9 内核层poll、epoll的⼤致实现
4.10 epoll的边缘触发和⽔平触发
4.11 Netty的EventLoopGroup设计
4.12 Netty的ByteBuf设计
4.13 Netty的ChannelHandler
4.13 Netty的零拷贝
4.14 Netty的线程模型,特别是与业务线程以及资源释放⽅⾯的理解
3.5 消息队列kafka、RocketMQ、Notify、Hermes
5.1 kafka的⽂件存储设计
5.2 kafka的副本复制过程
5.3 kafka副本的leader选举过程
5.4 kafka的消息丢失问题
5.5 kafka的消息顺序性问题
5.6 kafka的isr设计和过半对⽐
5.7 kafka本⾝做的很轻量级来保持⾼效,很多⾼级特性没有:事务、优先级的消息、消息的过滤,更重要的是服务治理不健全,⼀旦
出问题,不能直观反应出来,不太适合对数据要求⼗分严苛的企业级系统,⽽适合⽇志之类并发量⼤但是允许少量的丢失或重复等场景
5.8 Notify、RocketMQ的事务设计
5.9 基于⽂件的kafka、RocketMQ和基于数据库的Notify和Hermes
5.10 设计⼀个消息系统要考虑哪些⽅⾯
5.11 丢失消息、消息重复、⾼可⽤等话题
3.6 数据库的分库分表mycat
3.7 NoSql数据库mongodb
3.8 KV键值系统memcached redis
8.1 redis对客户端的维护和管理,读写缓冲区
8.2 redis事务的实现
8.3 Jedis客户端的实现
8.4 JedisPool以及ShardedJedisPool的实现
8.5 redis epoll实现,循环中的⽂件事件和时间事件
8.6 redis的RDB持久化,save和bgsave
8.7 redis AOF命令追加、⽂件写⼊、⽂件同步到磁盘
8.8 redis AOF重写,为了减少阻塞时间采取的措施
8.9 redis的LRU内存回收算法
8.10 redis的master slave复制
8.11 redis的sentinel⾼可⽤⽅案
8.12 redis的cluster分⽚⽅案
3.9 web服务器tomcat、ngnix的设计原理
9.1 tomcat的整体架构设计
9.2 tomcat对通信的并发控制
9.3 http请求到达tomcat的整个处理流程
3.10 ELK⽇志实时处理查询系统
10.1 Elasticsearch、Logstash、Kibana
3.11 服务⽅⾯
11.1 SOA与微服务
11.2 服务的合并部署、多版本⾃动快速切换和回滚
详见
11.3 服务的治理:限流、降级
具体见
服务限流:令牌桶、漏桶
服务降级、服务的熔断、服务的隔离:netflix的hystrix组件
11.4 服务的线性扩展
⽆状态的服务如何做线性扩展:
如⼀般的web应⽤,直接使⽤硬件或者软件做负载均衡,简单的轮训机制
有状态服务如何做线性扩展:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。