概述
技术工程化进阶
- 基础技术力求能够在掌握基本原理的情况下,手写demo实现,不需要达到工程实践的基础
- 基本原理掌握后,需要进行工程化实践,利用封装,提供框架实现。需要不断重构优化
核心要点
基础
- int char占用字节
- 深入解析String#intern
- 这一次,彻底解决Java的值传递和引用传递
java基础
- 线程的实现方式 线程的实现主要有3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。
- 线程间通信wait/notify机制
- 锁相关问题
- synchronize 内置锁 实现机制 与lock实现的区别
- 显式锁 ReentrantLock
- AQS以及基于AQS的并发工具
- 线程池
- 基于reentrantlock的并发容器实现,LinkListBlokQueue,ArrayListBlokQueue
linux 操作系统
- 常用命令
数据结构与算法
- 数据结构
- 数组 链表 二叉树 平衡二叉树 红黑树
- 排序算法 冒泡 选择 插入
- 查找算法
依赖具体的数据结构 数组顺序查找,二分查找依赖有序表,二叉查找算法,hash查找
参考资料
- jvm基本原理
- java 内存结构
- java 内存模型
- 类加载机制 Java双亲委派模型及破坏
- jvm调优
- 垃圾收集器,各种不同区域的回收算法选择,并行算法与新生代与老年代采用不同的算法
- 调优命令jps,jstat,jmap,jstack
- 从实际案例聊聊Java应用的GC优化
- minor gc 会发生stop the world 现象吗?
- 一篇简单易懂的原理文章,让你把JVM玩弄与手掌之中
协议基础
内存数据库
- redis线程模型,基于NIO非阻塞同步,所有操作同一个线程中执行,防止并发操作
- Redis基础篇
关系数据库
- 数据范式
- Mysql
- innodb的数据也存储结构 compact Redundant
- 前提目录页与数据页都是安装查找列排好序
- B+树实现聚簇索引,根据逐渐查找目录页->数据页
- 二级索引,针对不同列建立索引,目录页存放索引列+页号,数据页存放索引列+主键
- 匹配原则(全值匹配,最左匹配)注意查询的列与建立索引的列的顺序,建立索引的时候是按照第一个key排序,依次类推。如果第一个搜索的列不是定义的索引的第一个,那么索引将无法使用
- 浅谈数据库并发控制 - 锁和 MVCC
- MySQL事务隔离级别和MVCC
- 事务的隔离级别主要为了解决不同事务之间执行过程中数据的可见性问题,不同的隔离级别处理各种脏读,不可重复读等各种问题,为了解决不同事务之间的并发度。需要根据实际情况选用合适的事务隔离级别,但这也无法改变数据一致性问题,这就需要锁来解决
- mysql 幻读的详解、实例及解决办法 数据库默认级别为read repeated ,为了避免幻读,可以数据x锁来避免
- 死锁查找
- show engine innodb status
- show processlist
- show open tables;
- MySQL 主从复制搭建,基于日志(binlog)
消息中间件
RPC
- 请求需要动态代理
- zookeeper存储服务地址ip
- 负载均衡
- 网络通信,对象序列化问题
- 接收请求,调用对应方法返回
- 限流熔断
分布式
- 一致性hash算法
实践经验
- linux 工具
- tar iftop tail more grep
- 系统运行指标
- web 容器线程数 根据每个任务的运行市场以及当前线程数估算单台机的理论并发值
- RPC容器线程数
- 架构思想 如何利用缓存集群,数据库集群,分布式协调zookeepr,消息中间件,大数据流式计算技术,熔断保护技术组合解决实际遇到的问题
问题排查
困难问题
- 性能问题 推送速率
- 业务问题 消息安全性问题 兼容独立推送问题 数据统计问题 第三方开放问题 接口限流 业务发展的演进,架构调整
开源项目
研究一个开源项目需要理解基本功能,机制,如果需要深入源码级别的,需要深究其原理,看其那些地方存在不适合业务的地方,需要对这些不适合的地方进行额外的修改,加上自己的策略,比如elasticjob在处理耗时任务时,突然与zookeeper发生断连,此时任务线程任然在执行,并没有暂停。这个时候就需要自己维护任务状态
面试
- 警惕错位面试
- 完整面试经过
- 我是如何通过阿里面试的 android 面试,更多偏向于基础面试