Skip to content

Latest commit

 

History

History
763 lines (474 loc) · 29.2 KB

清单.md

File metadata and controls

763 lines (474 loc) · 29.2 KB

[TOC]

2021 年

2021-04

04-23

  • Lock 与 Condition 监视器之间的关系以及应用
  • 对比 sleep、wait 以及 await 方法阻塞时系统资源的占用情况
  • Java 中锁的分类总结
  • Object 类中已经有 wait/notify 的机制来实现等待/通知机制,为什么还需要 Lock 中的 Condition 再实现一次
  • JUC分类

04-25

04-26

04-29

  • 结合 Java 语言及虚拟机、OS、硬件层面讲诉进程和线程上下文切换的具体内容
  • 从临界区整体到局部逐渐优化的角度分析并发编程的演进
  • Lock应该确保在finally块中释放锁,否则一旦受同步保护的代码块中抛出异常,则有可能永远不 会释放持有的锁。-- 这句话在底层表示了什么

2021-05

5-10

  • 日志服务调用链数据接收端的架构演进之路(画图+实际数据量)

  • 接收端:

    • before:Rest 接口 + 内存队列 + 多线程消费者
    • after:Kafka 消息队列 + 兼容 before
  • 存储端:

    • before:PG
    • after:PG + ES 可选(数据如何做的迁移)

5-10

  • Netty 学习问题记录
    • 特性:统一的 API,支持多种传输类型,阻塞和非阻塞的,具体支持的传输类型以及如何支持的,做了哪些抽象?
    • 特性:简单而强大的线程模型,具体描述
    • 特性:真正的无连接数据报套接字支持?真正的?UDP?无连接?
    • 性能:高吞吐,低延迟,更低资源消耗,更少内存复制,得益于池化和复用,具体如何做的?
    • 健壮性:不会因慢速、快速、超载连接而OOM,消除高速网络中NIO应用常见的不公平读/写比率,这是如何做到的呢?
    • SimpleChannelInboundHandler#channelRead0() 接收数据时,由服务器发送的消息可能被分块接收,这是TCP分组传输造成的吗,如果是,底层怎么实现的?
    • Channel:NIO 的一个基本构造,代表了一个到实体(如 一个硬件设备、一个文件、一个网络套接字或者一个能够执行一个或多个不同的I/O操作的程序组件)的开发连接如操作和写操作,Java 中具体由那些类Channel?
    • 基本的I/O操作(bind(),connect(),read(),write())依赖于底层网络传输所提供的原语,有哪些相关的原语?
    • Netty 的Channel接口提供的API,大大降低了直接使用Socket类的复杂性,这是如何实现的呢?
    • ChannelHandler 的方法是由网络事件触发的,在 OS 层面网络事件是如何生成和触发的?
    • Java Socket 如何使用 OS 相关原语,NIO Channel 和 Netty Channel 又是如何使用的?
  • 其他
    • Linux 系统下进程上下文切换的监控和统计
    • 工作思考:薪资数据按照 idKey 分组后可以多线程异步计算,是否可以借鉴 Netty ChannelFuture 和 ChannelFutureListener 的设计?

5-12

  • 通用设计:不同的应用状态可以用位模式表示,组合起来还可以表示一组状态变化集
    • 例如:NIO 中的 SelectorKey, Brave 中,JDK 源码(如 ThreadPoolExecutor 的线程状态)中(需要查看)
  • 方法论:周末和午休部分时间用于解决本清单中的问题
  • 多线程实战:生产者-消费者模式
  • 线程和进程上下文切换的区别以及监控

5-13

  • benchmark基准测试学习并应用

5-14

  • 线程池如何判断一个任务已经完成

5-19

  • MyBatis foreach 标签中 separator 的种类及区别
  • Excel 数据导入优化案例总结

5-24

5-31

  • 日常开发中如何衡量构建索引的开销

2021-06

6-2

6-7

  • 构建自己最擅长的技术领域

6-8

  • Redis 字典结构的渐进式 rehash 策略与 COW 的对比
  • 算法设计常见思想总结:数据规模增长后动态采用不同数据结构(以HashMap和Redis QuickList举例)
  • Java 9 String 底层存储改为 byte[]- JEP 254

6-9

  • 学习方法论更新计划

6-15

  • PowerMock实现静态、私有、final方法mock的原理

6-16

  • AQS 的学习总结
  • BufferInputStream 这个 Buffer 缓冲区是用户态的还是内核态的?
  • 通过日志文件压缩优化案例引出NIO及操作系统IO(mmap等)的相关知识
  • 日常开发中常用 JDK API 是否涉及到 syscall、context switch 等 OS 层面的资源开销以及优化办法
  • 常见 HTTP 客户端的性能对比和性能分析
  • 系统设计 - 短链 | 秒杀

6-17

  • Redis 完成多少分钟前来过的功能 -- 商户中心商家访问记录(jobId+访问时间)异步添加到 Redis 缓存中
  • Random、ThreadLocalRandom、SecureRandom、/dev/random、/dev/urandom的学习

6-22

6-23

  • WireShark 实战,观察 MySQL 通讯,通过对比selectCount和select数据再count两种方式的数据传输量

6-29

  • mmap 总结

2021-07

7-1

  • 并发编程思想(可以对比 OS)的总结

7-2

  • 采用 Reactor 模式的服务端框架的总结(通用结构图,改进点、应用等)
  • 对比单机系统与分布式系统的异同
    • 单机系统:由 OS 调度各个部件(by 总线、中断等机制?)
    • 分布式系统:由每个单点之间共同组成类似 OS 的软件(by 网络)
    • 对比方向:
      • 各组件间的通信方式(IPC)
      • 如何发现对方
      • 由谁调度,怎样调度
      • 错误处理
  • 数据库(以 MySQL 为例)优化总结
    • 应用层面
      • 尽量减少查询次数
      • 尽量减少每次查询传输的数据量
      • 尽量减少每次查询时间(使得数据库连接池中的连接能尽快释放)
      • sql 层面
    • 数据库服务器层面
      • 监控
      • 调优
  • IO 优化总结
    • 区分业务场景
      • 读多写少(热点数据缓存):读写分离,随机 IO 是否要关注?
      • 写多读少(日志场景):顺序IO+其他
    • 网络 IO
    • 由此引发的问题
      • 数据同步
  • 近期工作中用到的 sql 语句及函数的总结

7-3

  • GC 步骤以及 GC 可以并发和不能并发以及 STW 的部分
  • strace 等命令查看线程池版本和新建线程版本代码执行的 syscall、context switch 的次数差别
  • Java 中间件要解决的问题和 Java 语言特性再这方面的实践(如反射的应用)
  • 从零(将一个本地方法调用变成远程调用开始)实现一个 RPC 框架(HTTP -> Feign, TCP -> Dubbo)

7-5

7-7

7-8

7-9

7-12

7-13

7-14

7-16

7-18

  • 【思考】- 简历加分项-翻译有深度的外文技术文章(jep,shipilov等等),自己的工作思考

7-21

7-23

7-24

  • Tomcat 热部署修改的代码是如何做到的,它又是如何卸载旧版本的class,这个过程对服务可用性的影响是怎样的?
  • 结合内存泄漏的常见情形分析 CountDownLactch 实现的多线程代码再出现异常时是否会出现内存泄露
  • 【JVM专栏思考】- 【新对象的创建和回收】
    • QPS统计以及压测设计 压测内容: 1. QPS 如何统计,如何作为基础设施 2. 通过不断调大QPS,观察内存变化,分析接口代码新建对象的情况(只返回前端必要的字段内容)
  • 【JVM专栏思考】 - 预估当前兼饼果子以及后台的系统压力(JVM内存、磁盘空间、网络IO、CPU、数据库压力等)以及业务量暴增100、甚至1000倍时可能出现的JVM问题
  • 【JVM专栏思考】- JVM的一些参数的默认设置,以及这些默认设置是不是和当前系统

7-26

  • mysql not null 约束并且有默认值约束的字段传入 null 值的表现
  • 一个长链接占用多大内存
  • 堆 dump 查看是哪些对象在一直创建
  • 对比 ParNew + CMS 的组合和 G1 的表现差别
  • 线程池初始化创建核心线程的耗时测试
  • ParNew:CMS 与 ParScav:MCS 的吞吐量和延时对比
  • afs-api Eden 区一直稳定增长的问题查看->spring-boot-devtools

7-29

7-30

  • 给定一个类似 spring 的 xml 配置文件,如何能做到一个像 spring 一样管理 bean 的 IOC 容器
  • 上述情形如果不用 xml 配置文件而改用注解呢,该如何实现
  • 查看其他容器的实现方式,quarks,juice等
  • 观察薪税数据导入开启多线程的情况下是否有GC导致的响应延时
  • 并行流与串行流的内存占用对比
  • 用字符串表示游戏中的灯光闪烁效果
  • [想法池] - 短视频自我介绍,并将二维码打印在简历上
  • [见闻] - 毛坯车 - 配件提供3D打印接口,由用户自行选择
  • 完善学习方法论
  • 当我们使用 parallelStream 的时候,底层用到了 ForkJoinPool 线程池,那它里面的线程是懒加载还是立即加载的,如何测试,如何BenchMark?

7-31

2021-08

8-1

8-2

8-3

  • 面试计划 - 热联集团
  • nio file WatchService 的实现原理和设计模式
  • [想法池] - 键盘集成磁带复读机

8-4

8-6

  • 多继承泛型的使用
  • 开源中间件Java客户端SDK的常见设计及设计模式的应用(如Brave、Kafka、alipay SDK等等)
  • armeria server 相比 SpringMVC 拥有更细粒度的 URI 控制粒度,zipkin collector 是面向众多客户端的,客户端基于不同的需求可能要发送不同数据格式的请求,zikpin 在这一块是怎么做的?我们从中学习到了什么?如何做到单机支持更高的并发以及会有什么样的问题?

8-10

8-11

  • [GC] - CMS gctuning
  • [GC] - ParNew+CMS
  • [MySQL专栏] - Buffer Pool 结构 - Free 链表 - Flush 链表 - LRU 链表 - 冷热数据分离
  • [MySql] - Buffer Pool 设置以及观察对应的磁盘IO情况

8-12

8-13

8-18

8-21

8-23

8-25

8-26

8-27

8-31

  • 手写 trace collector webapp,和 zipkin-server 对比性能差别

2021-09

9-1

9-2

  • MXBean 原理、用途以及系统提供的一些默认 MXBean
  • STW 期间 GC 在干什么以及此期间各个 GC 的表现

9-6

9-7

9-9

  • afs + jvm-profiler 生成火焰图以及图的解读
  • 锁的抽象-通过对比JVM锁和分布式锁

9-14

  • afs微服务改造 - 整体架构图
  • [想法池] - 共享自习室计划
  • Spring @Scheduled的执行原理
  • JMC提供maven坐标

9-15

  • 复习策略的制定和执行 - 复习/学习时间比例控制 | 复习方式 | 评价指标
  • 超时和重试机制的共性设计[ExponentialBackoffRetryPolicy]

9-16

  • jvm-profiler 画图总结以及 Tomcat 运维开发项目中可以借鉴的部分
  • JVM-profiler jvm-sandbox greys arthas 的对比 - 代码量/代码结构/实现方式/功能/性能等等

9-17

  • afs项目与电商项目的对比
  • afs项目的问题和思考以及推进落地

9-24

  • [设计模式] - 访问者模式学习以及在级联删除权限场景下的应用
  • 个税阅读材料

9-25

2021-10

10-08

  • 权限模块分离

10-12

  • docker-compose afs-api + rocketmq
  • 双十活动DDD建模和重构
  • ContextHolder 模式总结:SpringMVC --> RequestContextHolder、SpringSecurity --> SecurityContextHolder、Brave --> CurrentTraceContext
  • 异步化记录日志的实现手段(参考 pig 项目[发送异步 Spring Event 事件]总结)
  • Spring 的事件机制

10-13

10-15

  • spring-data 的设计思想 xxTemplate接口 xxOperations 接口(mongo --> MongoOperations, redis --> RedisOperations<K, V>/ZSetOperations<K, V> 等等)

10-18

10-19

  • 思考项目中哪些地方可以用到 Redis
  • 架构升级带来的其他副作用
  • JVM 内存问题排查方法论的形成

10-20

  • 结合 docker java 应用内存设置优化系列文章总结 JVM 内存区域

10-21

10-25

  • 系统设计-活跃用户分析(现有设施 VS 全新设计)

10-26

  • 预测系统及业务的演进方向
  • 短域名设计结合 AFS 微信二维码字数限制

10-27

  • spring factories 的加载逻辑

10-28

2021-11

11-2

11-5

11-6

11-18

  • spring security 流程总结

11-23

  • spring web framework 的 filter 体系

11-24

  • 部署发布类型学习

11-25

11-30

2021-12

12-1

12-2

12-3

12-5

12-6

12-7

  • TranscationalEventListener

12-10

12-11

  • 各种高性能优化手段总结以及对应 Java 代码如何实现?
  • 对比总结 Kafka 和 Zipkin 客户端发送消息的 批量发送压缩机制

12-12

12-13

12-14

12-16

  • 长连接和短连接在 Java 层面如何实现
  • eureka 和 rocketmq nameserver 的集群方式研究

12-17

12-21

  • spring cloud alibaba + gateway + niginx + docker 拆分详情

12-22

12-27

12-28

12-30

  • kafka producer 黏性分区策略与 zipkin-okhttp-sender 的对比

12-31

2022

2022-01

01-05

  • Eureka 如何实现心跳机制

01-07

  • JDK 动态代理复习

01-14

  • 【面试问题】- 复杂 sql 优化手段
  • 【面试问题】- 索引失效场景
  • JVM 优化案例准备

01-17

  • 考虑如何将高性能队列 Disruptor 和 mpmc 融合到项目经历中去

01-20

  • 消息防丢失的常规方案 - 存在数据库本地消息表中,开启后台线程定时重试
  • replicated-log

01-21

  • Dubbo 扩展点机制实现和 MyBatis 插件机制实现的对比的总结

2022-02

02-08

2022-03

03-03

  • PageHelper 能对 sqlSession.select(ms, args, resultHandler) 的情况进行拦截分页吗?

03-11

  • mybatis 驼峰转换器的实现 + canal 转换

3-17

3-29

2022-04

4-15

4-18

4-21

4-24

2022-05

5-05

  • @EnableScheduling 原理及自定义动态定时任务

5-16

  • API 设计 - 可扩展性 - Customizer 模式总结 - SpanCustomizer,TracingCustomizer,RestTemplateCustomizer

5-24

2022-06

6-01

6-09

6-16

6-17

  • Jdk14 - JVM 参数:-XX:+ShowCodeDetailsInExceptionMessages (异常信息显示空指针的具体代码)

6-21