来源: wx群
时间: 未知
公司: 跟谁学
我获取时间: 2021-07-19
- 说一下Redis中HashMap的实现(双table,渐进式rehash,扩容条件,缩容条件,bgsave,CopyOnWrite机制)
- 扩容过程中有新的请求流程
- Redis其他的数据结构(SDS,RAW,INTSET,ZIPLIST,SKIPLIST,QUICKLIST)
- 跳表的实现?
- Redis的定时任务怎么实现的?
- 订单服务过期是怎么设计的(RabbitMQ死信队列)
来源: wx群
时间: 未知
公司: 探探
我获取时间: 2021-07-28
一面:
- 首先是自我介绍,看个人的逻辑表达能力和职业规划吧?然后,看我是非计算机专业毕业,写个快排或者堆排吧。(我写了快排)
- tcp和udp的区别,三次握手过程和四次握手过程;
- vim的三种模式,怎么切换?如何调到行首,如何调到文件头,如何跳到文件尾,如何删除指定的行,怎么复制特定的行,怎么复制当前的行,怎么跳转到下一个单词,回溯到上一个单词;
- nginx和php-fpm是如何配合进行工作的?搭过LNMP环境吗?给你一台4核8g内核的机器,怎么配置nginx进程和php-fpm?
- 讲一下IO多路复用的实现原理?epoll的IO多路复用使用了哪几个函数?
- Mysql的索引,mysql的索引中整数索引快还是字符串快,为什么?关于mysql的索引以及内部机制,建议多找些资料看看;现场根据需求写sql语句,考察sum函数,avg函数,count函数,group by;
- redis的持久化有哪些?aof怎么实现持久化的过程中保持内存中的数据和新的aof文件中的数据的一致性;
- 进程和线程有哪些不同?
二面
- 写一下redis怎么限制用户在十分钟内只能登陆一次?这里要考虑到同一个账号在不同的机器上同时登陆的问题,使用setnx命令;
- redis中的sds类型与c语言中的字符串有何不同,怎么做到类型安全的;进行了那些优化(空间预分配、惰性空间删除);空间预分配的策略具体怎么实现的?惰性删除怎么确定删除哪个键的多余空间,要是你来做这种策略,准备怎么实现(可以考虑redisObject对象的lruz字段的使用);
- Redis如何删除过期键的?怎么保存键的过期信息的(重点在于考察redisDB结构的成员中有哪些成员,成员对象之间的对象共享以及expire成员保存过期时间的方式);
- 还有什么要问我的吗?
三面:
- 自我介绍;
- 给出一个数组,数组中可能含有重复元素,然后选择出所有的和为特定值的组合,两个元素一组,每个下标的元素只能用一次。比如[1, 2, 4 ,6, 15, 14, 6, 10, 8, 8, 8],和为16,那么组合为(1,15),(2,14),(8,8),(6,10).
- 你是如何理解clean code的?(可以参考《代码大全》一书,重点在于第六章和第七章,这本书我看过),感觉这个他们还是挺关注的;
- tcp和udp有什么不同?(又被问到了)
- http有了解吗?说下http有哪些方法?https 1.1与http1.0的不同(没关注过不同,没回答上来)
- 你对自己职业规划是什么?
- 还有什么要问我的吗?
四面(CTO):
- 自我介绍;
- 为什么选择技术这条路,怎么规划的?
- 你给我看的那个题目,就是省、市、县的那个题目,重点在于考察逻辑抽象能力;
五面(CEO):
- 你认为你有什么优点?举个例子说明;
- 一个架构能力的问题
- 探探的用户有一个亿,48小时的日活量为1000万,平均每个人划和被划的次数为10万次。向左划过和向右划过的不会再出现在以后的推荐名单中。那么如何在50ms中快速选择出10万个候选人推荐给用户? (重点在于考察将大数据化小,分区和分块思想,大数据的存储)
来源: wx公众号
时间: 未知
公司: redis合集
我获取时间: 2021-08-31
基础篇
- redis为什么快?(内存操作、单线程、优化过的数据结构、IO多路复用)
- redis有哪些优缺点
- redis是怎么实现原子性的
- redis为什么要用单线程,最新的redis 6.0用了多线程,是怎么实现的,你了解吗?
数据结构和常见问题篇
- redis底层数据结构有哪些?
- SDS你能简单说下吗?
- skiplist是如何实现的? 数据结构是怎么样的,查询的时间复杂度是多少
- redis的常见的数据结构你知道吗?各自的使用场景。
- zset底层是如何实现的? 什么时候用ziplist和skiplist
- redis的集群模式有哪些?你们用的是redis是哨兵集群模式,具体是怎么配置的,了解吗?
- 能说下redis主从握手的流程吗?
- 为什么要做redis分区?你知道有哪些redis分区实现方案?
- 为什么redis集群有16384个槽?
- Redis与Memcached的区别
- redis的分布式锁用过吗,怎么用的?
- redlock能简单说下吗?
- redis单实例的QPS是多少,有测过吗?最新的6.0 QPS多少知道吗?
- redis的大 key 多大算大?单个redis实例建议多大内存?
- redis的网卡如果被打爆了,怎么办?redis缓存和本地缓存是怎么配合使用的,数据的一致性是如何解决的?
- 写时复制了解吗,在redis哪里用到了?在计算机的哪些场景或者算法里有用到?
- redis支持事务吗?redis事务机制中Watch是做什么的?Redis事务支持隔离性和原子性吗
- 你们持久化方式用的哪种?AOF和RDB的异同。SAVE和BGSAVE有什么区别?AOF文件太大怎么解决?aof优势,rewrite了解么,是什么场景会有rewrite?
- redis的过期策略有哪些? 如果定期+惰性都没有删除过期的key怎么办?
- 批量删除数据你们用什么命令?
- 项目中你们的redis key是怎么设计的呢?
场景设计和优化篇
- 如何使用redis做延时队列?
- redis 中消息队列的实现方案
- 如何保证MySQL 和redis 数据一致性
- 热Key问题怎么解决呢?
- 怎么查找bigkey呢?如何避免?怎么删除大key
- redis如何做内存优化?
- 什么是缓存击穿、缓存穿透、缓存雪崩?能分别说下各自的解决方案吗?缓存预热和降级处理过吗?
来源: 未知
时间: 未知
公司: 未知
我获取时间: 2021-10-26
1.1.1. Golang
- Go中make和new的区别。 (make是初始化内部结构比如 channel 切片 map等结构,new是初始化内置类型的内存空间,并初始化为该类型的零值,最后返回该内存空间的指针)
- Go的GMP调度模型你清楚吗?你能说说是如何调度实现的机制? (可以先从以前的gm模型聊,说说以前需要加锁等效率比较底下,性能有问题,然后发展到gmp,然后说 g是什么,m是什么,p是什么,然后各种调度模型,比如本地队列和公共队列, 系统阻塞和非系统阻塞,调度都会发生什么)
- Golang的垃圾回收在什么时候触发的,GC是个什么样的流程?(gc触发有三种情况 自己手动触发;内存比上次翻倍;两分钟自动触发; gc流程可以聊三色标记过程,包括发展过程,比如以前的三色标记,后面发展到混合写屏障,减少stw的情况)
- 协程,线程和进程的区别。(这里面的协程是go的协程,可以细分聊一下,总的概括来说,线程和进程需要的资源更多,销毁,调度都比协程占据更多的资源,go的协程是用户态,调度管理是go自己runtime调度的,上下文保存只需要几个寄存器,另外协程启动需要的栈空间更少等等)
- Channel的底层数据结构是怎样的,是同步还是异步?(说一下内部结构即可,比如内置的循环队列,还有等待读的队列,等待写的队列,如果没有缓冲的话,其实是不需要用队列的等等,同步异步看有没有缓冲)
- 切片和数组的区别,你知道字符串的底层数据结构是怎样的?(内部结构不一样,切片是 data,len,cap, 数组是 bound elem, 字面上来说,数组是定长,切片是不定长,切片使用起来更加灵活)
- Map的的实现,怎么实现Map的线性安全,你知道Sync.map这个包的使用吗?使用场景知道吗? (map内部是 数组+链表,拉链法解决哈希冲突,有溢出桶,如果细聊,比如怎么进行查找的,等等,sync.map简单来说就是 读写分离,说下内部结构比如 dirty,miss等)
- Gin框架的路由实现原理你清楚吗? (我就知道 基数树,没深看)
- Gin框架为什么会比其他框架性能高? (没深看)
- Go语言函数传参是值类型还是引用类型? (值类型)
- 你了解内存对齐的概念吗?关于Go语言中的内存对齐你能说说你写代码遇到过的情况。(就是各种类型大小,通过排序之后更加节约内存)
- Go语言的的切片是的如何扩容? (这块源码特别简单,就十几行, 如果期望容量是目前两倍,就直接用期望容量,如果这个不满足,就看期望容量是否大于1024,如果大于1024,那就扩容1.25,如果小于1024,就翻倍)
- 实现一个判断通道超时的方法?(基于select) (可以用 context超时机制)
- Sync.Waitgroup你清楚实现原理吗?(内部结构比较简单, 一个 nocopy和state 状态和信号量,内部简单来说 就是计数)
1.1.2. MySQL
- MySQL的索引类型?(看怎么分,比如 聚簇索引和非聚簇索引,主键索引,普通索引,联合索引等等,看从什么纬度来说)
- B+Tree的数据结构?(底层双向链表,N叉树,结构特点就是叶子节点存储的是"数据",而且是排序的,好处是树矮所以io次数少,查询效率比较平均等等)
- MySQL的事务隔离级别,实现原理你清楚吗? (四种隔离级别,然后说下mysql默认的rr级别,再说下 幻读和幻行,解决方案 mvcc+gap lock)
- MySQL的聚集索引和非聚集索引的区别? (非聚集索引叶子节点存的是主键的值,需要回表到主键索引上进行查询,聚集索引叶子节点存储的是整条数据的值)
- MySQL的联合索引最左匹配原则 (无非就是 a,b,c 然后 and 和 or ,然后 包括 大于 小于 这种)
- MySQL执行SQL语句的的流程? (客户端提交sql,然后到sql的server层里,连接器进行连接,先会去缓存里查询,缓存里没有 通过分析器 优化器,再到执行器,再去存储引擎查询结果,部分sql需要在server层里进行再次处理,最后返回)
- MySQL你用过HashTable的索引吗?说说他的区别,以及Hash碰撞的解决,还有他的时间复杂度。 (不会)
- bin-log和redo-log你清楚吗?回答的时候我顺带会提下我知道的两阶段提交这块。(一个是记录数据可能要发生改变进行记录,redolog是记录事务对数据页做了哪些修改)
1.1.3. 计算机网络
- HTTP协议的演进,各协议版本的区别。 (1.0不记得,1.1多了 长连接 keep-alive, 支持并行下载和断点续传, 2.0 支持多路复用,二进制帧,3.0不记得了)
- 三次握手四次挥手你怎么理解? (一个是连接,一个是断开连接,如果不够,可以说下握手和挥手的各个状态时)
- 为什么需要三次握手和四次挥手?(三次握手是为了保证能够正常的连接,另外,有个机制就是服务端回传的时候是 ack和syn一起的,所以节约了一次传递,最少三次,四次挥手也是一样,最少四次)
- TimeWait状态你的理解,以及你在平时中遇到的有关TimeWait的问题,有抓包分析过吗?MSL这块在应用层你这边怎么修改的(坑问题,后面才了解MSL基于系统内核设置,现在好像还很难在应用层修改) (这块我就只知道需要等待2msl,设置这块不熟)
- 基于UDP实现一个可靠传输机制(把TCP的可靠传输机制,流量控制,拥塞,重传,确认机制在UDP上套一下) (这个不会)
- OSPF协议你知道多少,建立的报文阶段类型,还有邻居状态,你有抓包看过吗? (这个不会)
- DDOS攻击你知道多少? (没了解过,大概就是不断请求连接服务,然后把服务连接数打满,带宽占满,影响服务正常使用)
- TCP的粘包? (缓冲区大小,发送的不够缓冲区大小,就粘包一起发送,解决粘包 比如 标识位,比如发送的时候包含传送的大小等等)
- Cookie和Session区别? (会话,本地和服务器,感觉这块没啥好说的)
- 你用过哪些交换机,还有对于私有协议和点对点的视频流这块协议你知道多少? (这个不会)
- 我现在和你视频面试,我们之间的数据流在TCP/IP上是如何封装传输。发送之间会不会有三次握手连接。(点对点视频直播多为UDP)(这个不会)
1.1.4. 应用问题
- 给你一个500G-1T的文件,里面都是IP字段,你需要对这个文件基于IP地址从小到大进行排序。(大文件的思路都是分而治之,比如先把文件拆分成多个文件,把所有的ip进行hash分到各个文件里,然后各个文件进行 堆排, 比如取前100,最后再把每个文件的前100再次排序即可)
- 现在你的web后端业务能受理1000QPS,随着业务增长,你如果解决瓶颈问题。(cdn,缓存,数据库分表,服务拆分等等)
- 你在学Go语言中你遇到过哪些问题,你是怎么解决的。(略)
来源: 我自己面试
时间: 未知
公司: 得到(逻辑思维)
我获取时间: 不告知
一面:
- 基本项目
- mysql的锁有哪些, 得知看了 丁老师的课,就不问了
二面:
- 基本都是项目
- mysql联合索引 a,b,c id是主键
- select * from table where a =? and b>? and c = ?
- select a,b from table where a = ?
- select id,a,b from table where a = ?
- redis跳表结构和时间复杂度
- redis压缩列表结构和时间复杂度
三面:
- CTO面,基本问 项目管理,完全不会
- cap
- cpu没有任务的时候是什么状态
- 项目管理..
HRBP面:
- 基本14~18, 我感觉14都没有
- 问为啥跳槽,工作内容,公司业务等等
- 没给具体薪资
来源: 我自己面试
时间: 未知
公司: 洪恩教育(挂着完美世界子公司名头)
我获取时间: 不告知
一面:
- 有没有做过项目设计
- 用过哪些go的项目框架
- gin路由匹配规则和原理
- grpc是什么
- http报文结构
- 常见的mysql索引,什么情况会导致有索引,但索引失效
- mysql的innodb索引结构
- 什么是联合索引
- mysql 数字类型和对应的大小
- mysql 字符串类型和大小和区别
- redis的set和zset区别
- redis的zset为啥不用平衡二叉树(平衡二叉树和跳表的区别)
- redis的持久化
二面:
基本聊项目,无技术问题
这家hr真的贼没有礼貌。。。 我对她们印象贼差
来源: 我自己面试
时间: 未知
公司: 云账户
我获取时间: 不告知
一面:
基本聊项目
- 联合索引 abc b=&c=
- 单表几千万 为啥 id>100 比 ID> 1000w 查询要快
- redis基础类型
- zset底层实现
- 跳表的结构
- 为啥用跳表,解决了什么问题
算法题:
- 括号匹配
sql题: 某天里购买金额最多的十个人
来源: 我自己面试
时间: 未知
公司: 知乎
我获取时间: 不告知
一面:
- 项目细聊
- go的内存分配
- redis的主从模式和集群模式区别
- 设计场景: 扫码登录
- 设计场景: 知乎热榜,热点数据在不同的表里,t+1展示前一天, 前50条
- 算法题: 二叉树镜像(反转)
来源: 我自己面试
时间: 未知
公司: 美餐
我获取时间: 不告知
一面:
- 聊收银台项目
- mysql innodb的索引结构
- 为啥用b+做索引结构,不用其他的二叉树
- 隔离级别
- 每种隔离级别会导致什么问题
- 幻读场景
- 消息队列重复的原因,怎么解决
- 如果消息可以重复,消费端怎么处理
- 分表