2024.5.12模拟面试(项目为主)
第一位(0:0~0:33分)
面试:
讲一下双token机制?为什么要使用双token?过期时间
答:时间区别,用户体验。
系统全局模块使用 ElasticSearch 做全局搜索,使用 RocketMQ 进行异步双写实现 MySQL 和 ElasticSearch数据一致性。
es的分词器怎么做的?
答:中文分词器,在服务做分词。ik_分词器
Mcd mcd(字典?)
写的时候失败了怎么办?(rockermq持久化之后通知?
hashmap实现原理 1.8 数组+链表+红黑树
扩容的阈值是多少?不小于2^n,
链表变成红黑树的阈值
哈希冲突有哪些解决办法呢(开放寻址法、链表法)
讲一下垃圾回收有哪些算法,以及java里面的垃圾回收机制(标记清除,标记整理,复制)。
分代回收了解吗?
浏览器输入url回车的会发生什么的完整流程?
DNS服务器(本地缓存,本地域名,根域名服务器,顶级域名服务器,权威)
tcp连接
Ip
数据链路层
物理层
tcp三次握手四次挥手报文内容
Syn- Rsn-synced
Fin-…
为什么握手三次,挥手四次呢?
握手合并在一起发送的,
Close_wait,
服务器出现大量time_wait应该如何排查呢?
网络拥塞。
Mq:rocketmq和kafka区别
kafka不支持延时,潜在的的存在乱序问题
rockermq怎么保证消费顺序
同样的商品怎么保证发送同样的分区里面?
Hash(商品id)
redis数据结构(五种+bitmap+hypeloglog
zset底层实现原理
评论系统:
写评论是怎么写的?(系统架构)
直接写mysql,写mq
延迟问题怎么解决呢
第二位(0:33~1:08)
使用 Redis 数据库对网页静态资源进行缓存,网页加载提速。
怎么缓存的?
图片redis怎么存的?图片没有缓存到图片里面的
图片怎么存的?
为什么不用CDN(没听说过cdn
调用在线支付系统的 API 实现了订单的在线微信和支付宝支付。
有没有遇到什么问题,怎么解决的(官方文档,开源代码)
支付、下单成功两个操作怎么保证同时成功呢?
事务
分布式事务怎么做的?
协调者节点
是否了解raft算法?
服务有总共400g文件若干,统计每一个单词的数量
一个系统处理一部分
是否了解mapreduce?
使用 Elasticsearch 对全站的帖子、评论进行关键词搜索。
数据怎么同步到elasticsearch里面的?
直接写
Mq
binlog了解吗
binlog属于最基本的日志
有哪些格式
怎么通过binlog写stream,消费stream,
使用 Kafka 对评论、私信功能添加消息队列,保证信息成功地发送。
怎么保证成功?
失败三种情况,1、发送时,2,消息队列丢失,3,消费不到?
Partation副本(主从),发送失败重试,丢失:天然而然磁盘,不会丢失3、消费失败了
Offset:手动提交的还是自动提交的?自动提交,消费完成
kafka消息变多怎么调查。
代码bug有没有可能。
5台服务,新上线的两台对应的partation消息变多,其他三台机器正常,怎么调查
Mysql索引了解吗
目录,普通索引和主键索引(b+树),回表
A,b
Select a b from tables where a=123;会不会回表
假设我们有个sql,很慢,应该怎么查
慢查询日志,是否使用了索引,怎么看用的哪个索引explain
第三位
讲一下双token机制?为什么要使用双token?
用于登录(产品背景)。
安全、用户体验。
一个时间短,一个时间长。
假设密码撞库,我们怎么防止用户账号被盗?
用户角度:使用不同的密码,存储本地的时候使用不同的方式
系统全局模块使用 ElasticSearch 做全局搜索,使用 RocketMQ 进行异步双写实现 MySQL 和 ElasticSearch一致性。
先RocketMQ再写ElasticSearch有什么好处。
主要是考虑性能问题。
RocketMQ 写失败了应该怎么办?(死信队列)
定时(类似全量)。
全量有吗?系统中没有设置,在思考。
重试,怎么衡量重试时间?
不能太快,不能太长。
3s 2s 1s(间隔时间)
1s 2s 3s(更合理)
哪个更合理
如果消费mq写es失败了,应该怎么办?
日志监控。重试+死信队列
mq重复消费怎么避免老数据覆盖新数据?
加一个类似version的东西
es版本控制不了解。
tcp和udp区别。
tcp开销比较大,udp牺牲可靠性,换性能。
RocketMQ 对弹幕推送进行削峰
消息积压怎么办呢
主要思想:扩大partation和消费者数量
单台机器怎么能消费的更快一点呢?
消费端多线程。
怎么做消息合并merge_buffer
set特点元素不可重复。
zset不可重复有序的。
zset拆分怎么做呢?(防止一个zset过大)
几千wan个订单用一个zset
怎么消费zset呢,有顺序的
数组,zset
多个服务器,多个zset数组不在同一个服务器里面,分布式的一些处理办法
Redis zset结构应用场景
跳表:有点查询快(查找logn
说了一些特点
Redis set结构特点
字符串只能出现一次。
设计一个短链接系统,主要功能:
长链接转短链接
短链接解析成长链接
比如:
https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.16
转成https://github.com/abcdefg(假设短链接七位)(62个,大小写英文字母+10个数字)
mysql表存长短对应关系。
id 长 短
1 https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.5.16
https://github.com/abcdefg
2
3
62进制转换。
锁。
设计一个好的hash不冲突。
短转长怎么了解跳转
状态301和302的区别?
怎么加速我们的短链接转长链接?
缓存
String -> int
2
题目: 假设你有一个名为employees的表,该表有以下结构:
CREATE TABLE employees (id INT NOT NULL AUTO_INCREMENT,
first_name VARCHAR(50), last_name VARCHAR(50),
PRIMARY KEY (id));
同时,该表上有一个复合索引,由last_name和first_name两个字段组成,索引顺序为(last_name, first_name)。
现在,请你回答以下问题:如果有一个查询如下:
SELECT * FROM employees WHERE last_name = ‘Smith’ AND first_name = ‘John’;
这个查询能够使用到索引吗?为什么?
如果有一个查询如下
SELECT last_name FROM employees WHERE last_name = ‘Smith’;
这个查询能否使用到索引?为什么?
给定以下查询:
SELECT first_name FROM employees WHERE first_name = ‘John’;
这个查询能否使用到索引?为什么?
假设我们现在同时知道last_name和用户id,使用where last_name = ‘aaa’ 和 where id = ‘123’性能有区别吗?哪个更好?
Select last_name from employees where last_name = ‘aaa’/where id = ‘123’