3.18飞书面试(58min)
1. 问项目
- 首先是问redis是怎么用的
- mq的消费是怎么写的呢?
- mq如何保证消息消费的可靠性
- 你在项目中用到了本地缓存,放在了业务代码内存中。那如果签到一半你的项目突然崩了,本地缓存都消失了,那不是会出问题啊?
- 回答:不会,即便再签到都会提示已签到,因为已经写入了数据库
- 用lua脚本实现令牌桶的具体是怎么实现的?
- 你的令牌桶判断了每次填满所需要的时间,那如果说你的桶只有100,然后有1000条消息并发,那不是会突然间处理100条,然后再拒绝掉其他的,待会又再突然间处理掉100个,那不是很周期?怎么处理
- 为什么用lua脚本?为什么不直接用java的调用?
2. 问数据库(面试官说既然lua是原子性的,那不如说说数据库的原子性?)
- 说说数据库事务的原则?ACID
- 展开说一下ACID每一个(我的一致性答得稀烂,口胡过去了,啊吧啊吧)
- 说一下事务的隔离级别有哪些,mysql用哪个,可重复读还有什么问题?
- 你刚刚说可重复读都那么完美了,为啥还需要串行化读呢?(口胡)
3. 问计算机网络
- 讲一下HTTPS的通信流程
- 这里我脑抽了直接从我到腾讯云申请证书开始讲…说到后面乱七八糟,面试官说你直接从客户端请求服务端开始讲就行了…
- ssl证书是如何保证通信的?如何保证不被篡改?
- ssl证书由ca机构颁发嘛,怎么判断这个厂家可信?怎么确定厂家的信息没有被篡改?(不知道。。一下给我整蒙了,答不上来)
- 了解中间人攻击吗
- 那如果自定义证书呢?消息会不会被中间人攻击
回马枪又问了一句B+树和B树的区别?(口胡叭叭过去了,我猜B树数据是存在每一个节点里的,瞎吹发现好像蒙对了)
4. 做题:做过,大概十分钟做出来了。41. 缺失的第一个正数 - 力扣(LeetCode) (leetcode-cn.com)
5. 问java
- 你说你看过hashmap源码,那如果我要存两个对象,假设是一个STU类,他们内部所有的值都是相同的,但是他们就不是两个相同的对象,这时候map会判定他们到同一个桶内吗?
- 回答:应该…不会吧…他们是根据对象的类的hashcode分配的桶,如果不同的对象hashcode也不同。面试官这时候好像也不是特别确定,不知道是不是我答错了。
- 接上一个问题,如果我非要存两个STU对象,而且我非要不设置id,那你能怎么办呢?答:
- 接上一个问题,除了重写hashcode函数,还需要做什么其他的吗?
- 答:不知道(我看了源码,好像确实只需要重写hashcode)
6. 问go
- 我给你一个结构体和两个管道,你判断一下这两个管道哪个性能更好一点?
type struct{
xxxxxxxxx...
} s
var c1 = make(chan s)
var c2 = make(chan *s)