TME后台开发一面凉经
《面试题目》
- 更新:项目考察环节,我答的不太好,所以被挂。自满了,总觉得自己项目考察回答可以,实际复盘和对比后,发现当时确实答得不够好。❌错判原因❌自满💪不通则思变
-
- 面试结束,官网直接显示流程结束,且把投递时间更新为了面试结束时间。共70分钟,虽然有些问题会思考一阵子,或者磕绊一些,但都回答上来了。不知道为什么秒挂。
- -----面试经过如下------
- 先让30分钟写2到中等算法题,23分钟做出来了。接着自我介绍。
- MySQL主从复制的原理和延迟问题
- 为什么海量埋点选择使用批处理落库而不是实时写入?
- 为什么批处理,和每次执行一条有什么区别?用长连接不行吗?
数据丢了怎么办?
mysql索引结构 9. 什么情况下索引会失效 10. 项目中做redis缓存及缓存击穿方案的具体实现 11. 公司提供的Squirrel服务是不是相当于通用组件能力 12. 缓存穿透和缓存雪崩怎么防范 13. 布隆过滤器怎么解决缓存穿透问题 14. Redis的持久化机制有哪些?项目里怎么选择的? 15. Redis是自己部署的吗?(不是,直接申请的资源) 16. java的线程池有哪些参数 17. 线上部署问题是如何解决的 18. 电脑 A 用 TCP 的方式发送一个 Hello World 给电脑 B ,电脑 B 收到了 Hello World 之后返回一个OK 给电脑 A。描述一下这整个传输过程。 19. 为什么挥手是4个包?三个包行不行? 20. 设计一个后台的一个系统,把刚才那个那个逻辑升级一下。客户端会发送一个消息给服务端,服务端收到了之后会返回发送消息的用户的用户id uid 以及他上一次访问的时间。如果说他上一次没访问过,是第一次访问的,那就返回一个0给他。如果说上次有访问就返回上一次访问的时间给他。这是一个交互,最大 QPS 是10万。你来设计一下整个系统,怎么设计呢? 21. 用Redis缓存什么?(user:uid , 上次访问时间)的键值对 22. 为什么有数据库,还要使用缓存?不是可以读备库吗? 23. 结束了,没让我反问。我主动问了做什么业务?部门在哪个地方?面试流程推进快吗?(快慢由后续面试的同学时间安排决定)?评价我的表现(说还可以)
《参考解析》
-
计算机网络:TCP(传输控制协议)是面向连接、可靠的传输协议,提供流量控制和拥塞控制;UDP(用户数据报协议)是无连接、不可靠但速度更快的协议。TCP通过三次握手建立连接(SYN→SYN+ACK→ACK),四次挥手断开(FIN→ACK→FIN→ACK)。
-
MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
Java并发:Java并发:synchronized关键字(偏向锁→轻量级锁→重量级锁升级);ReentrantLock(可重入、可中断、公平锁);volatile(内存可见性+禁止指令重排,不保证原子性);CAS(Compare-And-Swap,无锁乐观并发);ThreadLocal(线程本地变量,WeakReference,注意内存泄漏)。线程池核心参数:corePoolSize/maximumPoolSize/keepAliveTime/workQueue/handler。