前言
- 最近刚好离职了,决定开始进行真正的项目化工程化做事,包括离职总结,书写简历,面试技巧和面试题整理。
- 这个页面专门用来展示需要做的事,先定义一些简单的
ToDo
吧。
一、离职那些事
- 和公司争取
n+1
。 - 离职总结。
- 简单的修改一下简历。
- 到一些公司面试查看技术方向。
- 根据以上的技术方向确定后面稳定方向,不要再因为业务性原因换语言了。
- 对自己的求职开启项目化工程化,并拆分各个子项目进行。
二、查漏补缺
- go-spring 学习
- Go 语言的性能测试,和各种性能测试工具的使用
- 数据库优化,索引创建(级联索引在各种情况下的效果)
- Go 1.4 到 1.13 的新版特性
- Redis 数据结构
- 各种语言 GC 的特性
- 进程,线程,协程的各种语言的区别
- 离开公司的理由
- 为什么做程序员
- 职业规划
- 做哪个项目成就感最高
- 如何适应变化
- hash 函数
- hash 表
- 链表环查找
- 链表中间节点查找
- 用英文介绍之前做的项目
- 数据库主从复制
- Go channel 实现
- 微服务的服务发现
- 微服务的有状态服务(Redis)持久化
- Redis 除了常见的使用还有哪些能力
- 微服务如何排查问题
- 为什么选择 golang, 为什么又从动态语言切换到 golang
- 今后的目标学习定位 (云原生,分布式)
- 为什么从之前的公司离职
- 实现一个
sync.Map
- 之前工作服务的流量和瓶颈
- 数据库引擎,一致性,锁
- 分布式选主方案
- 进程通信方式
- Golang
gc
调优 - linux下的
/proc
目录 -
map
,slice
实现和如何查找源代码 - Go 线程协程调度模型(gpm)
G: goroutine (协程)
M: thread (线程)
P: Processor (调度器) 数量来自
GOMAXPROCS
设置 - 如何给一个未加密的
linux
系统盘安装软件 -
context.Context
实现Done() chan struct {}
一个无缓存chan
以关闭为信号来通知所有监听了该通道的方案。context.TODO()
的Done
返回的是一个nil
的chan
对于nil
的chan
发送和接收都会一直阻塞。 - http 断开信号的代理传递 connReader
- 如何检查一个
api
访问性能和稳定性 参考Prometheus
的Histogram
和Summary
如何利用Prometheus监控你的应用 - 二叉搜索树的排名查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
type BinaryTree struct { value int left *BinaryTree right *BinaryTree } // 查询该树的节点数量 func size(node *BinaryTree) int { if node == nil { return 0 } return 1 + size(node.left) + size(node.right) } func (p *BinaryTree) Rank(val int) (rank int) { if p == nil { // 说明没有找到 rank = 1 } else if val == p.value { // 匹配的排名为左树节点数量 +1 rank = size(p.left) + 1 } else if val > p.value { // 每次需要去右树查找就加上现有左树的数量 rank = size(p.left) + p.right.Rank(val) + 1 } else { // 递归到左树查找 rank = p.left.Rank(val) } return }
- 10亿日流量的点赞后端实现,不考虑后端内存问题(实际应用场景为抖音视频点赞)。 累计服务设计: 一个线上服务,对用户行为进行计数,可以支持可变时间端(最近 x 分钟,最新 x 小时)的给定用户给定用户行为(评论,点赞,关注,发帖)次数查询。查询来自 api 服务(调用量较大)
- 限流桶,漏桶限制 qps,(场景压测)。
- etcd, k8s 源码。
- 事务实现,undo,redo, 幻读,mvcc,当前读,快照读。
- go gc 垃圾回收,三色标记,混合写屏障。
- raft 分布试一致原理。
- tidb 实现原理,如何使用一个分布式的 kvdb 制作上层的 sql 数据库或者其它的定制数据库。