Open wtysos11 opened 3 years ago
因为一直在做腾讯的需求,基本是裸考,没能挖出什么东西 算法题真的要多刷刷Orz,哪怕是已经十二点睡觉七点起床也还是不能放弃刷算法题,不然就会想一道题都做不出来的我一样跟面试官尬聊到天明。
总结了一下,主要是三大点:
之后的准备包含三个部分:
感觉挺不好的,最近休息的不太好,整个人都是懵的,第一道算法题连题目都看错了。 总体来说问的与一面没什么区别,但是很多地方可能思考的不太深刻,或者回答的不太正确,被回问了几下就不太确定了。除了要知道基本概念之外还是要知道更进一步的原因。 有几个地方我之前没怎么想到,一个是InnoDB的索引,我是第一次知道InnoDB的哈希索引是自适应的……这个不用过确实是不知道;此外还有依赖反转。以及一些很底层的东西,比如内核态和用户态具体是什么,系统调用的原理这些,虽然说很基础,但是真问的话其实不一定能答出来。 主要还是多刷些算法题,然后好好休息……
居然过了二面,真是让人摸不着头脑,只能说其他人表现更差一些吧。 后面的复习要点:
参考资料:
算法
算法题库:
知识点
一些题目
数据库相关
SQL类型
索引相关
a = 1 and b= 2
是可以匹配的,b= 2 and a = 1
也是可以的(MySQL优化器会自动调整a,b的顺序使得与索引顺序一致)a = 1 and b = 2 and c > 3 and d = 4
的时候,d无法使用联合索引,因为遇到了范围查询,之后的索引无法使用。index(col)
,比如create table user(id int primary key, name varchar(20),index(name))engine=innodb;
(1,1) (1,2) (2,1) <- (2,4) -> (2,4) (3,1) (3,2)
,这个时候,单纯按b来计算为1,2,1,4,1,2
,是无序的,因此单独执行b=2是无法利用索引的。但是从局部来看又是有序的。而如果执行a>1
,则b的索引也是无序的,无法利用,因此b字段无法使用索引。SELECT * FROM table WHERE a = 1 and b = 2 and c = 3;
如果表主要执行这一条语句,应该如何设计索引SELECT * FROM table WHERE a > 1 and b = 2;
SELECT * FROM table WHERE a>1 and b = 2 and c > 3;
select id,name from user where name = 'shenjian'
,此处name部分有联合索引,索引叶子节点存储了主键id,因此通过name的索引数即可直接获取id和name,无需回表,效率较高。select *
select * from tuser where name like '张 %' and age=10 and ismale=1;
,会根据最左前缀匹配原则,匹配到第一个字是“张X”的记录,然后从这个记录开始逐个回表,到主键索引上找出相应的记录,然后比对age和ismale字段是否相等。面试题:mysql 一棵 B+ 树能存多少条数据? - soo的文章 - 知乎 https://zhuanlan.zhihu.com/p/379092178,索引查找过程讲的很不错。
数据库加锁 我以为我对MySQL锁很熟,直到我遇到字节面试官... - 是Yes呀的文章 - 知乎 https://zhuanlan.zhihu.com/p/388691518
其他
NoSQL
redis类型
缓存和数据库一致性的问题,redis怎么保持数据一致性? 管道可以减少redis服务器调用read和write的次数,减少系统调用与服务器陷入内核态的开销。所以管道不只是能够降低TCP交互代价,也能够提升redis服务器的执行效率,一般认为速度差距是十倍。 It's not just a matter of RTT
资料:
深入理解redis-scan指令
分布式系统
计算机网络
操作系统
Go语言相关
推荐资料:
现场分析
rpc
其他
nginx
kafka与其他消息队列
k8s
毕竟项目中有很多k8s相关的知识,很多地方的go团队也都是做基础平台或者中间件这些。如果能在这些方面提出自己的见解,应该是比较大的加分项:
linux操作