c++
- c++11
- 静态库与动态库:静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库;编译之后程序文件大,但加载快,隔离性好。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。
- sizeof 编译时确定还是运行时确定:sizeof在c99的动态数组里运行时确定,在c++里是编译时确定,返回是的字节数;sizeof(类型,指针,数组),sizeof(数组)返回的是数组所占空间的大小;strlen(数组)表示数组所占的字节数。strlen运行时确定,strlen表示 char * 的有效长度(不包含0)(0结束)。https://www.cnblogs.com/zpcdbky/p/5857656.html
- volatile 原理
- new 与 malloc
- 多态的原理,虚表虚指针等
- 内存布局,静态库加载后在哪里?共享内存挂载后在哪里?
- 智能指针原理,几种智能指针的对比
- 类的4个默认函数;如何禁止类的拷贝;析构函数何时要设为虚函数?为什么?构造函数为什么不能虚函数?构造函数调用顺序;析构函数调用顺序
- static 的具体用法,const 的用法
- c++ 四中类型转换的区别
- 字节对齐
- 手写string的实现
- gdb 多线程多、进程的调试
- pstack 的使用
java
linux
- 基本命令 top awk sed grep sort uniq netstat
数据结构
vector
- vector就是动态数组.它也是在堆中分配内存,元素连续存放;
- 插入数据 当size > cap 时,成倍扩容,申请一片2*size的连续空间,将原先的内容拷贝过去,并删除原先的空间;当vector 的size 过大的时候,会引起线程较大的延时(阻塞)
- 预估vector容量大小,初始化vector的时候rerserve至该大小,避免扩容;或者采用多个vector存储。
map/set
- 采用红黑树实现,空间不连续
- 自定义的key_class 作为key 需要在key_class中实现 bool operator <(const key_class& other) const 函数
unordered_map/unordered_set
- 底层采用哈希实现,数组(桶,hash函数确定)+链表
- 自定义的class 作为key 需要实现 hash 函数及 equal 函数
- 当元素个数 > 桶个数* 哈希因子后,会进行扩容操作,重新分配更多的桶,将老元素一一遍历存入新桶中。如果哈希表中元素个数过多,会引起当前线程的阻塞
- 预估数据量,初始化时调用rehash;或者采用多个hash表存储。
平衡二叉树 B树 B+树 B*树
- 平衡二叉树:二叉树,叶子节点的高度相差不超过1
- 红黑树:根结点黑色;叶子节点黑色;红节点的儿子黑色;每条路径黑色节点数目相同。ordered_map 采用红黑树实现,因为平衡二叉树在删除节点时需要旋转o(logn),而红黑树只需要旋转3次
- B树:平衡多叉树,非叶子节点包含多个元素;叶子节点处于同一层
- B+树:数据只存在于叶子节点;叶子节点快之间增加指针
- B*树:兄弟结点间,增加指针(链表)
设计模式
- 单例模式(懒汉、饿汉、线程安全)
- 代理模式与装饰模式
- 观察者模式
- 工厂模式
- 状态机模式
网络
- 7层或5层网络模型
- 滑动窗口与拥塞控制,快恢复与慢重传
- tcp 与 udp 的差别
- nagle 算法
- time_wait 及close_wait 产生原因及后果
- 三次握手 四次挥手 状态图
- select poll epoll
- 阻塞与非阻塞 同步与异步的差别
- epoll 水平触发与边缘触发区别,为什么边缘触发一定要使用非阻塞模式?
- reactor 与 proactor
- 打开一个网页,具体发生了啥
操作系统
- 死锁的几个要素
- 用户态与内核态
- 线程与进程的差别
- 线程同步与进程通信的方式
redis
数据类型及底层实现
http://www.cnblogs.com/jaycekon/p/6227442.html
- String:动态数组实现
- Hash:ziplist与dict(hashtable)
- List: ziplist或linkedlist
- Set:整数集合或者hashtable
- Sorted Set:ziplist 或者 skiplist与hashtable结合
持久化方式
- rdb: 全量同步,生成rdb文件(多长时间内有多少次变更就save):恢复数据的速度快,但是丢的数据会比较多
- aof:增量同步:文件大,恢复慢,消耗资源多;但是容易读懂,数据最多丢失一秒钟的
主从同步(复制)的步骤
- 从服务器向主服务器发送SYNC命令;主服务器收到sync命令后,后台生成rdb文件,并缓冲区记录所有的写命令;
- 主redis生成rdb文件完毕之后,将rdb文件发给送从redis;从redis收到rdb文件,加载rdb文件,将从数据库的状态更新至主开始生成rdb文件时的状态;
- 主redis将缓冲区的命令传播给从redis
内存管理与数据淘汰策略
maxmemory-policy volatile-lru #默认是noeviction,即不进行数据淘汰
- volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
- volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
- volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
- allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
- allkeys-random:从数据集中任意选择数据淘汰
- no-enviction(驱逐):禁止驱逐数据
过期键值淘汰策略
默认是定期删除与惰性删除的结合
- 定时删除:设置定时器,到时间删除
- 定期删除: 过一段时间,全库扫描一次,删除过期的
- 惰性删除:每次get的时候检查一次
zset 解决的问题
topN 及排行榜问题
hash 的渐进式rehash 过程
rehashidx从0到n-1,rehash 完毕后置为-1
http://redisbook.com/preview/dict/incremental_rehashing.html
redis4.0 的异步删除
ht 中的size及used
https://www.cnblogs.com/svan/p/7054129.html
redis 的线程模型
reactor,one loop per thread
https://www.cnblogs.com/barrywxx/p/8570821.html
redis 为什么高效
https://blog.youkuaiyun.com/chenyao1994/article/details/79491337
- 纯内存操作,数据结构简单,查找o(1)
- 单线程,没有锁及线程切换开销
- reactor,基于事件触发,非阻塞,IO多路复用
redis的事务实现方式
哨兵主从
redis-cluster 与codis 集群方案 异同与优劣
redis 与memcache 对比
mysql
- 几种引擎的区别及选取
- 事务隔离等级
- mvcc
- B+ 树做InnoDB的索引的理由
- mysql 锁粒度,乐观锁 悲观锁
- 索引种类,建索引的原则,联合索引,聚簇索引
- 分库分表如何防击穿
- 分布式事物的解决方案
算法
- 洗牌算法 http://www.matrix67.com/blog/archives/879
- 贪婪问题
- 全排列问题
- 最长公共子串
- 深度优先 广度优先
- 二叉树的深度、宽度,二叉树到某个节点的路径,二叉树中某两个节点的最近根节点
- 快排,堆排序,优化方案
- top N
- 山谷积水 https://blog.youkuaiyun.com/Thomas0713/article/details/83051990 与 https://blog.youkuaiyun.com/weixin_42018258/article/details/80626637
- 一维数组的极值点求取(log2n的复杂度)
- 找出数据中唯一出现一次的数字https://blog.youkuaiyun.com/u011960402/article/details/17750993
- 二叉树两个结点的公共祖先https://blog.youkuaiyun.com/qq_25827845/article/details/74612786
中间件
- rpc
- rocketmq 与kafka
- zookeeper
高并发案例
- 全局唯一id的方案
- 缓存与db 一致性的方案
- 中心化缓存的操作方式、优缺点
- LRU 的具体实现
- 分布式锁的几种方案
- 设计一个秒杀系统
- 数据平滑迁移的方案 https://blog.youkuaiyun.com/admin1973/article/details/65629412
https://blog.youkuaiyun.com/sofia1217/article/details/44905461
https://blog.youkuaiyun.com/qq_19320865/article/details/78497278
https://blog.youkuaiyun.com/m0_37947204/article/details/80103151
https://blog.youkuaiyun.com/u011960402/article/details/17750993
mysql 相关
https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961620&idx=1&sn=d858c302799cad451656129885214767&chksm=bd2d0cc88a5a85de11ed376570f78a22954e88aad06f0138b3fbfb7be1968699421ac0b99889&scene=21#wechat_redirect
《MySQL实战45讲》林晓冰