因为在原公司待的不是很开心,然后决定裸辞了(千万不要裸辞!!!一方面心理压力比较大。另一方面也可能会被压薪资)
裸辞之后没着急找工作,因为原先做的东西比较偏底层,所以也是学习了一段时间先拿小公司练练手,大厂问的东西无外乎项目、基础、算法,这些的话楼主推荐几本书,基本问的东西都在这里面了《Redis设计与实现》、《Mysql技术内幕 InnoDB存储引擎》、《TCP-IP详解卷一》、《HTTP权威指南》、《深入理解Linux内核》、《研磨设计模式》、《数据结构与算法分析-c语言描述》机械工业的那个 我这边是应聘go的开发,学习go的话推荐《Go并发编程实战》、林海的《Go源码解析》最好源码和书一起看
这篇挺长的,抽着看吧
百度
一面
- redis和etcd的区别
- 从数据结构方面来讲 Redis支持多种数据类型(string,set,list,hash,zset)
- 从读写性能上来讲,Redis读写性能优异,并且提供了RDB、AOF持久化,而etcd v3的底层采用boltdb做存储,value直接持久化
- 从使用场景上来看,etcd更适用于服务发现,配置管理,而Redis更适用于非强一致性的需求,比如说是队列,缓存,分布式Session
- 两者都是KV存储,但是etcd通过Raft算法保证了各个节点间的数据和事务的一致性,更强调各个节点间的通信;Redis则时更像是内存式的缓存,因此来说读写能力很强。
- Redis是c开发的,etcd是go开发的,他是源于k8s的兴起作为一个服务发现。
- etcd v3只能通过gRPC访问,而redis可以通过http访问,因此etcd的客户端开发工作量高很多。
- etcd的Raft算法介绍一下
- ping指令的实现,涉及到哪些协议
- linux的用户态和内核态,什么时候切换到内核态
- 为什么说线程的切换比协程要慢
- redis、etcd 分布式锁的实现
- redis string类型的底层实现
- 和c语言string的区别
- 获取字符串长度只需要O(1)的时间复杂度,程序仅需要访问SDS的len属性即可
- c语言会产生缓冲区溢出,在Redis中如果需要对SDS进行修改时,API回显检查SDS的空间是否满足修改所需要的要求,如果不满足的话,API会自动将SDS的空间拓展到执行修改所需要的大小,然后才执行实际的修改操作
- 减少修改字符串时带来的内存重分配次数,SDS通过free属性记录未使用的字节,通过未使用空间,SDS实现了空间预分配和惰性空间释放两种优化策略。是的修改字符串长度N次最多需要执行N次的内存重分配。
- c字符串只能保存文本数据,SDS可以保存文本或者二进制数据
二面
二面基本是场景设计题,具体忘了,有一说一百度面试体验很好,和面试官一起探讨解决的办法
之后有一道智力题吧,有10个元素存到长度为12的数组中,有两个元素重复,找出这两个元素
比如a+b通过把元素累加在进行减法运算可以得到a+b
通过累乘再进行除法运算可以得到a*b的值
考虑到假如元素溢出,那么可已通过平方累加得到a^2+b^2的值
根据关系式可以求得a,b的值
三面
- go和java的区别
可以从多个角度来讲 比如面向对象来说,多态继承等等
从运行速度来讲,go的并发模型 channel和goroutine
从包管理来讲,go mod 包括之前的dep等等 - go的gmp调度原理
- cpu的上下文切换问题
- channel有无缓冲槽的区别
主要还是从同步和异步来讲 - redis的zset实现
- 负载均衡实现
几道算法题 现场手写的
堆排的一道问题,string化整型,链表反转
四面
手写了两道算法,单链表的中间节点 一道dp题目 百度的算法题目都是easy到meduim级别的
然后对项目问的比较细,比如在实现的虚拟链路中keepalive是怎么实现的啊,有什么可以优化的点吗
怎么查找程序的性能瓶颈等等
滴滴 自动驾驶Vovager
一面
主要是项目和部分基础知识这里记不太清了
算法 剑指63 股票问题
dp[i]=max(dp[i-1],num[i]-num[j])
func maxProfit(prices []int) int { size := len(prices) if size==0||size==1{ return 0 } profit := 0 cost := prices[0] for i := 1; i < size; i++ { cost = min(prices[i], cost) profit = max(profit, prices[i]-cost) } return profit }
问了能不转py
二面
二面主要问了项目以及一道算法题和场景设计题,我个人觉得不具有总结性
三面
*epoll和poll的区别
三面送命了,顺时针打印矩阵,一般按层模拟就好了,我也不知道怎么脑子就抽了
func spiralOrder(matrix [][]int) []int { if matrix == nil || len(matrix) == 0 || len(matrix) == 0 { return []int{} } top := 0 hsize := len(matrix) lsize := len(matrix[0]) left := 0 bottom := hsize - 1 right := lsize - 1 index := 0 x, y := 0, 0 sum := make([]int, hsize*lsize) for bottom >= top && right >= left { for x = left; x <= right; x++ { sum[index] = matrix[top][x] index++ } for y = top + 1; y <= bottom; y++ { sum[index] = matrix[y][right] index++ } if bottom > top && right > left { for x = right - 1; x > left; x-- { sum[index] = matrix[bottom][x] index++ } for y = bottom; y > top; y-- { sum[index] = matrix[y][left] index++ } } left++ right-- top++ bottom-- } return sum }
Aibee
一面
- 数组中找出和为k的两个元素返回下标 模板题了
另一道有意思的题目可以参考leetcode 560题 - 无头结点的链表元素删除
- 排行榜的设计
- https加密过程
- InnoDb的索引模型 详细一些
- 覆盖索引和非覆盖索引的区别
二面
算法和股票差不多
根据项目延伸来问的一些问题
- slice的底层实现
- gmp调度模型
- golang的gc回收
- tcp的粘包问题
- mysql隔离级别
三面
没啥好说的 和面试官互相吹牛逼了
小米
一面
- Redis缓存策略
- 分布式CAP原理
- Mysql事务的隔离级别 分别解决了哪些问题?
- mysql的存储引擎的区别?
- Redis持久化的区别
- Grpc的过程
二面
怼了项目 业务上不合适
- 怎么限制goroutine的数量?
- redis为什么快?
字节跳动
一面
- https的过程
- 客户端请求网址,服务器接收到请求后返回证书公钥
- 客户端验证证书的有效性和合法性,然后生成一个随机值
- 客户端通过证书的公钥加密随机值,将加密后的密钥发送给服务器
- 服务器通过私钥解密密钥,通过解密后的密钥加密要发送的内容
- 客户端通过密钥解密接受的内容
- http keep-alive的作用
- 755 是什么权限? 详细见linux权限入门
7=rwx=4+2+1 5=rx
拥有者可读可写可执行 群组可读可执行 其他组可读可执行 - linux 查找当前文件后20行
tail -n 20 filename - linux统计字符出现的个数
grep -o objStr filename|wc -l - epoll和poll的区别
本质都是IO多路复用 - 算法题 10进制转7进制
- 算法题 判断数独的有效性
二面
撕AVL树 撕哈希表
知乎
一面
项目
- redis的多集群方案
- mysql的b+索引
- golang的内存分配机制
- golang的多态实现
- interface的底层实现
二面
只问了两道算法
连续子序列的最大和并返回所有序列
另一道忘了
三面
- 非递归形式的前序遍历
- k个有序链表合并
项目问题
- golang的context包
- string类型转为[]byte过程发生了什么
- redis的数据类型及底层实现
- mysql聚集索引和非聚集索引底层实现
- b+树和红黑树
腾讯
一面
之前看面经听说腾讯面试官惜字如金,果真就想几个字骗一段话啊
- golang的多路复用
- fasthttp为什么快
- pprof使用
- 性能调优怎么做
- http2.0的多路复用怎么实现的
- 最大连续子序列和
- mysql怎么监控流量
- golang调度 能不能不要p
- 负载均衡哪些算法?
二面
二面基本围绕项目拓展来说的 人家说你简历写的我不问。。
场景设计 秒杀、抽奖、推荐 三剑客
etcd和zk的区别
etcd的Raft算法详细讲一下
三面
项目细问包括一些基础问题没啥好讲的
职业规划等等
BIGO
prometheus实际使用
linux tcp 半连接
常见的linux指令
tail pwd chmod lsof netstat top实现一个压测工具
golang编写一个http客户端,支持参数httprequest -c 5 -r 1000 http://**** 客户端,输出所有响应string类型加法实现
sql题
CREATE TABLE IF NOT EXISTS `mytable` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `video_id` bigint unsigned NOT NULL DEFAULT 0, `uid` int unsigned NOT NULL DEFAULT 0, `country` varchar(194) NOT NULL , `class` varchar(64) NOT NULL , `status` tinyint(4) unsigned NOT NULL DEFAULT '0', `video_view` bigint(20) unsigned NOT NULL DEFAULT '0', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY ( `id` ) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; SELECT * FROM mytable WHERE created > ? AND class = ? AND country IN (?) ORDER BY created DESC LIMIT 100; SELECT * FROM mytable WHERE class = ? AND country IN (?) ORDER BY video_view DESC LIMIT 100; SELECT * FROM mytable WHERE created > ? AND class IN (?) LIMIT 100; SELECT * FROM mytable WHERE created > ? AND country IN (?) LIMIT 100;
怎么建索引?
map如何实现顺序读取
空间换时间
借助额外的数据结构比如slice 等,对key进行排序,遍历slice得到顺序输出协程泄***r>如果你启动了一个 goroutine,但并没有符合预期的退出,直到程序结束,此goroutine才退出,这种情况就是 goroutine 泄露。当 goroutine 泄露发生时,该 goroutine 的栈(一般 2k 内存空间起)一直被占用不能释放,goroutine 里的函数在堆上申请的空间也不能被 垃圾回收器 回收。
空结构体的用处
空结构体不占用内存空间- 实现set
- 实现chan struct{} 不占用内存空间,实现传递信号的通道
剩下的忘了一直在看表了想着还不结束, 面了两个小时
全部评论
(12) 回帖