[TOC]
- Lock 与 Condition 监视器之间的关系以及应用
- 对比 sleep、wait 以及 await 方法阻塞时系统资源的占用情况
- Java 中锁的分类总结
- Object 类中已经有 wait/notify 的机制来实现等待/通知机制,为什么还需要 Lock 中的 Condition 再实现一次
- JUC分类
- 安装 Unabtu 系统,debug ServerSocket 在 Linux 上的底层实现
- ServerSocket 的 backlog 与 Linux 内核 TCP 的队列长度区别
- 结合 Java 语言及虚拟机、OS、硬件层面讲诉进程和线程上下文切换的具体内容
- 从临界区整体到局部逐渐优化的角度分析并发编程的演进
- Lock应该确保在finally块中释放锁,否则一旦受同步保护的代码块中抛出异常,则有可能永远不 会释放持有的锁。-- 这句话在底层表示了什么
-
日志服务调用链数据接收端的架构演进之路(画图+实际数据量)
-
接收端:
- before:Rest 接口 + 内存队列 + 多线程消费者
- after:Kafka 消息队列 + 兼容 before
-
存储端:
- before:PG
- after:PG + ES 可选(数据如何做的迁移)
- 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 的设计?
- 通用设计:不同的应用状态可以用位模式表示,组合起来还可以表示一组状态变化集
- 例如:NIO 中的 SelectorKey, Brave 中,JDK 源码(如 ThreadPoolExecutor 的线程状态)中(需要查看)
- 方法论:周末和午休部分时间用于解决本清单中的问题
- 多线程实战:生产者-消费者模式
- 线程和进程上下文切换的区别以及监控
- benchmark基准测试学习并应用
- 线程池如何判断一个任务已经完成
- MyBatis foreach 标签中 separator 的种类及区别
- Excel 数据导入优化案例总结
- 业务及系统架构总结思考
- 总结 zipkin collector 的 Component 及 StorageComponent 的设计
- 补全薪税服务相关设计文档
- 日常开发处理数据时如何选择数据结构和算法
- new 一个 HashMap 占用多少 K 内存?
- count(字段)/count(主键)/count(1)/count() 的区别
- 日常开发中如何衡量构建索引的开销
- TCP 长短连接的区别以及适用场景,和在中间件中的应用
- 事件溯源模式
- 构建自己最擅长的技术领域
- Redis 字典结构的渐进式 rehash 策略与 COW 的对比
- 算法设计常见思想总结:数据规模增长后动态采用不同数据结构(以HashMap和Redis QuickList举例)
- Java 9 String 底层存储改为 byte[]- JEP 254
- 学习方法论更新计划
- PowerMock实现静态、私有、final方法mock的原理
- AQS 的学习总结
- BufferInputStream 这个 Buffer 缓冲区是用户态的还是内核态的?
- 通过日志文件压缩优化案例引出NIO及操作系统IO(mmap等)的相关知识
- 日常开发中常用 JDK API 是否涉及到 syscall、context switch 等 OS 层面的资源开销以及优化办法
- 常见 HTTP 客户端的性能对比和性能分析
- 系统设计 - 短链 | 秒杀
- Redis 完成多少分钟前来过的功能 -- 商户中心商家访问记录(jobId+访问时间)异步添加到 Redis 缓存中
- Random、ThreadLocalRandom、SecureRandom、/dev/random、/dev/urandom的学习
- 计算 Java 对象占用内存大小
- Java 对象头总结
- WireShark 实战,观察 MySQL 通讯,通过对比selectCount和select数据再count两种方式的数据传输量
- mmap 总结
- 并发编程思想(可以对比 OS)的总结
- 采用 Reactor 模式的服务端框架的总结(通用结构图,改进点、应用等)
- 对比单机系统与分布式系统的异同
- 单机系统:由 OS 调度各个部件(by 总线、中断等机制?)
- 分布式系统:由每个单点之间共同组成类似 OS 的软件(by 网络)
- 对比方向:
- 各组件间的通信方式(IPC)
- 如何发现对方
- 由谁调度,怎样调度
- 错误处理
- 数据库(以 MySQL 为例)优化总结
- 应用层面
- 尽量减少查询次数
- 尽量减少每次查询传输的数据量
- 尽量减少每次查询时间(使得数据库连接池中的连接能尽快释放)
- sql 层面
- 数据库服务器层面
- 监控
- 调优
- 应用层面
- IO 优化总结
- 区分业务场景
- 读多写少(热点数据缓存):读写分离,随机 IO 是否要关注?
- 写多读少(日志场景):顺序IO+其他
- 网络 IO
- 由此引发的问题
- 数据同步
- 区分业务场景
- 近期工作中用到的 sql 语句及函数的总结
- GC 步骤以及 GC 可以并发和不能并发以及 STW 的部分
- strace 等命令查看线程池版本和新建线程版本代码执行的 syscall、context switch 的次数差别
- Java 中间件要解决的问题和 Java 语言特性再这方面的实践(如反射的应用)
- 从零(将一个本地方法调用变成远程调用开始)实现一个 RPC 框架(HTTP -> Feign, TCP -> Dubbo)
- 如何规划好持续性学习
- JDK8 和 JDK10 中偏向锁的生效时间不一致的问题 HotSpot 中的偏向锁 JDK10偏向锁延迟时间默认为0 JDK偏向锁延迟时间
- MySQL redo 日志的刷盘策略和 Redis AOF 日志刷盘策略的对比
- 查看 docker-mysql 的慢查询日志
- 生产环境机器的配置的简单概述
- CompletableFuture 的学习和应用
- 从零开始-MySQL系列
- 【思考】- 简历加分项-翻译有深度的外文技术文章(jep,shipilov等等),自己的工作思考等
- 【BUG】PageHelper.startPage 使用的 ThreadLocal 线程本地变量用串导致了诡异的 ClassCastException 异常
- 【实践】线程池线程数量设置不当导致的任务卡死
- Tomcat 热部署修改的代码是如何做到的,它又是如何卸载旧版本的class,这个过程对服务可用性的影响是怎样的?
- 结合内存泄漏的常见情形分析 CountDownLactch 实现的多线程代码再出现异常时是否会出现内存泄露
- 【JVM专栏思考】- 【新对象的创建和回收】
- QPS统计以及压测设计 压测内容: 1. QPS 如何统计,如何作为基础设施 2. 通过不断调大QPS,观察内存变化,分析接口代码新建对象的情况(只返回前端必要的字段内容)
- 【JVM专栏思考】 - 预估当前兼饼果子以及后台的系统压力(JVM内存、磁盘空间、网络IO、CPU、数据库压力等)以及业务量暴增100、甚至1000倍时可能出现的JVM问题
- 【JVM专栏思考】- JVM的一些参数的默认设置,以及这些默认设置是不是和当前系统
- mysql not null 约束并且有默认值约束的字段传入 null 值的表现
- 一个长链接占用多大内存
- 堆 dump 查看是哪些对象在一直创建
- 对比 ParNew + CMS 的组合和 G1 的表现差别
- 线程池初始化创建核心线程的耗时测试
- ParNew:CMS 与 ParScav:MCS 的吞吐量和延时对比
- afs-api Eden 区一直稳定增长的问题查看->spring-boot-devtools
- 给定一个类似 spring 的 xml 配置文件,如何能做到一个像 spring 一样管理 bean 的 IOC 容器
- 上述情形如果不用 xml 配置文件而改用注解呢,该如何实现
- 查看其他容器的实现方式,quarks,juice等
- 观察薪税数据导入开启多线程的情况下是否有GC导致的响应延时
- 并行流与串行流的内存占用对比
- 用字符串表示游戏中的灯光闪烁效果
- [想法池] - 短视频自我介绍,并将二维码打印在简历上
- [见闻] - 毛坯车 - 配件提供3D打印接口,由用户自行选择
- 完善学习方法论
- 当我们使用 parallelStream 的时候,底层用到了 ForkJoinPool 线程池,那它里面的线程是懒加载还是立即加载的,如何测试,如何BenchMark?
- 什么时候使用 parallelStream() 的总结
- Stream 的顺序问题
- Java stream 的一些常见问题以及代码实践 - 写一篇文章总结,顺带学习 BenchMark 的使用
- @PerformanceLog 在达到阈值打印日志的是否能够获取到目标方法处理的数据集规模?
- [想法池] - 如何开一家自习室
- [想法池] - 体验其他工作
- Java Lambda 的调试技巧
- 将 cpu 核数设置成1并行流执行线程固定为 ForkJoinPool 中固定某一个 commonPool-worker,但顺序还是不固定的 - forEachOrdered() 方法会顺序处理
- CPU 如何执行程序
- main 函数是如何作为入口函数被 JVM 执行的
- Spring Boot 中的 main 函数信息是怎么通过 java -jar 找到的
- java -jar xx.jar 是如何能够执行的
- Spring Boot 打包机制
- 难道这些 Java 大牛说的都是真的
- nio file watcher 机制监控 class 文件变化然后再自定义类加载器加载
- 深入浅出多线程 Xmind 总结
- 面试计划 - 热联集团
- nio file WatchService 的实现原理和设计模式
- [想法池] - 键盘集成磁带复读机
- 多继承泛型的使用
- 开源中间件Java客户端SDK的常见设计及设计模式的应用(如Brave、Kafka、alipay SDK等等)
- armeria server 相比 SpringMVC 拥有更细粒度的 URI 控制粒度,zipkin collector 是面向众多客户端的,客户端基于不同的需求可能要发送不同数据格式的请求,zikpin 在这一块是怎么做的?我们从中学习到了什么?如何做到单机支持更高的并发以及会有什么样的问题?
- [GC] - CMS gctuning
- [GC] - ParNew+CMS
- [MySQL专栏] - Buffer Pool 结构 - Free 链表 - Flush 链表 - LRU 链表 - 冷热数据分离
- [MySql] - Buffer Pool 设置以及观察对应的磁盘IO情况
- Code Review 项总结
- Socket 文件本质
- 如何加速Java应用启动
- Java 类加载各阶段的耗时分析
- Zipkin collector接收span的分析
- MySQL行格式的数据头总结
- IOPS - 观察比较云主机厂商提供的磁盘的 IOPS 性能及读写延迟(随机读写)
- 观察磁盘的吞吐量指标(顺序读写)
- ulimit 限制及解除限制
- MySQL链接参数: allowPublicKeyRetrieval=true 允许客户端从服务端获取公钥 - MySQL版本:docker- mysql:8.0.22
- MySQL链接参数: allowMultiQueries=true 允许分号链接的多sql查询及可能产生的问题(MyBatis)
- hutool 导入 Excel 日期格式的总结 Oracle datetime
- [Best practices-Java memory arfuments for Containers](Best practices: Java memory arguments for Containers – GC easy – Universal Java GC Log Analyser)
- MySQL Buffer Pool 的一整套运行原理和机制
- GC 整体调优策略总结
- Docker Desktop安装k8s一直starting的问题
- 诊断类应用 JVM-profiler jvm-sandbox greys arthas
- kafka docker client 跑通
- 手写 trace collector webapp,和 zipkin-server 对比性能差别
- jvm-profiler 压测优化
- Hikari连接池状态监控
- spring.datasource.hikari.register-mbeans=true 不生效
- Hikari mysql tuning
- MXBean 原理、用途以及系统提供的一些默认 MXBean
- STW 期间 GC 在干什么以及此期间各个 GC 的表现
- afs + jvm-profiler 生成火焰图以及图的解读
- 锁的抽象-通过对比JVM锁和分布式锁
- afs微服务改造 - 整体架构图
- [想法池] - 共享自习室计划
- Spring @Scheduled的执行原理
- JMC提供maven坐标
- 复习策略的制定和执行 - 复习/学习时间比例控制 | 复习方式 | 评价指标
- 超时和重试机制的共性设计[ExponentialBackoffRetryPolicy]
- jvm-profiler 画图总结以及 Tomcat 运维开发项目中可以借鉴的部分
- JVM-profiler jvm-sandbox greys arthas 的对比 - 代码量/代码结构/实现方式/功能/性能等等
- afs项目与电商项目的对比
- afs项目的问题和思考以及推进落地
- [设计模式] - 访问者模式学习以及在级联删除权限场景下的应用
- 个税阅读材料
- 权限模块分离
- docker-compose afs-api + rocketmq
- 双十活动DDD建模和重构
- ContextHolder 模式总结:SpringMVC --> RequestContextHolder、SpringSecurity --> SecurityContextHolder、Brave --> CurrentTraceContext
- 异步化记录日志的实现手段(参考 pig 项目[发送异步 Spring Event 事件]总结)
- Spring 的事件机制
- HashMap和LinkedHashMap对比(表头顺序性引出)
- 深度分页的优化方案
- 大文件分片上传的优化
- spring-data 的设计思想 xxTemplate接口 xxOperations 接口(mongo --> MongoOperations, redis --> RedisOperations<K, V>/ZSetOperations<K, V> 等等)
- 思考项目中哪些地方可以用到 Redis
- 架构升级带来的其他副作用
- JVM 内存问题排查方法论的形成
- 结合 docker java 应用内存设置优化系列文章总结 JVM 内存区域
- Linux /proc 的总结
- gitee 博客搭建
- 系统设计-活跃用户分析(现有设施 VS 全新设计)
- 预测系统及业务的演进方向
- 短域名设计结合 AFS 微信二维码字数限制
- spring factories 的加载逻辑
- 总结通用注册流程
- JEP-418 为 InetAddress 获取主机名和地址提供 SPI 支持
- JEP-380: Unix domain socket channels
- java-unix-domain-socket
- 基于 JDK17 的 sealed class 和 switch pattern 重构访问者模式
- 性能优化总结
- benchmak 反射字段的获取-有 cache 和无 cache 的对比
- spring security 流程总结
- spring web framework 的 filter 体系
- 部署发布类型学习
- 结合深入解析 HotSpot 理解 LockSupport 中 park 和 unpark 方法的实现
- Mokito mock void 方法
- test-containers-mongo
- JDK8 ConcurrentHashMap#computeIfAbsent 多线程操作相同key的线程阻塞问题
- CompletableFuture/Promise/Future 区别
- CyclicBarrier 与 CountDownLatch 区别
- @Contended - false sharing
- 位运算总结
- 缓存行和伪共享
- TranscationalEventListener
- 各种高性能优化手段总结以及对应 Java 代码如何实现?
- 对比总结 Kafka 和 Zipkin 客户端发送消息的
批量发送
和压缩机制
- Linux-IO-调度策略
- Kafka 高性能设计学习思考待解决的问题
- zipkin-reporter-sender设计-----> 发送线程池的设计分析
- 长连接和短连接在 Java 层面如何实现
- eureka 和 rocketmq nameserver 的集群方式研究
- Spring Cache学习和应用
- 命令行工具-btop
- alpine-Java-app-pid-1的问题
- alpine-Java-app-pid-1的问题
- docker desktop 下 afs-eureka做ab压力测试后浏览器访问端口不通,(其他容器也是,重启容器也不行) - 使用 tini 启动
- ab test 总结
- spring cloud alibaba + gateway + niginx + docker 拆分详情
- kafka producer 黏性分区策略与 zipkin-okhttp-sender 的对比
- Eureka 如何实现心跳机制
- JDK 动态代理复习
- 【面试问题】- 复杂 sql 优化手段
- 【面试问题】- 索引失效场景
- JVM 优化案例准备
- 考虑如何将高性能队列 Disruptor 和 mpmc 融合到项目经历中去
- 消息防丢失的常规方案 - 存在数据库本地消息表中,开启后台线程定时重试
- replicated-log
- Dubbo 扩展点机制实现和 MyBatis 插件机制实现的对比的总结
- spring-boot null 检查相关的注解
- jcstress 学习
- PageHelper 能对 sqlSession.select(ms, args, resultHandler) 的情况进行拦截分页吗?
- mybatis 驼峰转换器的实现 + canal 转换
- @EnableScheduling 原理及自定义动态定时任务
- API 设计 - 可扩展性 - Customizer 模式总结 - SpanCustomizer,TracingCustomizer,RestTemplateCustomizer
- Jdk14 - JVM 参数:-XX:+ShowCodeDetailsInExceptionMessages (异常信息显示空指针的具体代码)