《面试题目》
- 人选背景:北京双非,计算机科学与技术(考研空挡一年,转专业降级一年)25届应届生
- 机考语言python(机考346.51)
- 资格面试(面试官比较温和)
- 本科为什么是五年
- 是否再考研究生
- 为什么来北京,父母支不支持
- 为什么找工作
- 未来职业规划
- 期望薪资
技术一面
- 先让我自我介绍大概10分钟
- 补充学校的课设负责的内容
- 问了笔试时候的题的思路
算法题:
4. 设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近 10 条推文。
实现 Twitter 类:
5. Twitter() 初始化简易版推特对象
6. void postTweet(int userId, int tweetId) 根据给定的 tweetId 和 userId 创建一条新推文。每次调用此函数都会使用一个不同的 tweetId 。
7. List getNewsFeed(int userId) 检索当前用户新闻推送中最近 10 条推文的 ID 。新闻推送中的每一项都必须是由用户关注的人或者是用户自己发布的推文。推文必须 按照时间顺序由最近到最远排序 。
8. void follow(int followerId, int followeeId) ID 为 followerId 的用户开始关注 ID 为 followeeId 的用户。
9. void unfollow(int followerId, int followeeId) ID 为 followerId 的用户不再关注 ID 为 followeeId 的用户。
10. [“Twitter”, “postTweet”, “getNewsFeed”, “follow”, “postTweet”, “getNewsFeed”, “unfollow”, “getNewsFeed”]
11. [[], [1, 5], [1], [1, 2], [2, 6], [1], [1, 2], [1]]
12. [null, null, [5], null, null, [6, 5], null, [5]]
13. Twitter twitter = new Twitter();
14. twitter.postTweet(1, 5); // 用户 1 发送了一条新推文 (用户 id = 1, 推文 id = 5)
15. twitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含一个 id 为 5 的推文
16. twitter.follow(1, 2); // 用户 1 关注了用户 2
17. twitter.postTweet(2, 6); // 用户 2 发送了一个新推文 (推文 id = 6)
18. twitter.getNewsFeed(1); // 用户 1 的获取推文应当返回一个列表,其中包含两个推文,id 分别为 -> [6, 5] 。推文 id 6 应当在推文 id 5 之前,因为它是在 5 之后发送的
19. twitter.unfollow(1, 2); // 用户 1 取消关注了用户 2
20. twitter.getNewsFeed(1); // 用户 1 获取推文应当返回一个列表,其中包含一个 id 为 5 的推文。因为用户 1 已经不再关注用户 2
21. 1 <= userId, followerId, followeeId <= 500
22. 0 <= tweetId <= 104
23. 所有推特的 ID 都互不相同
24. postTweet、getNewsFeed、follow 和 unfollow 方法最多调用 3 * 104 次
技术二面:
- 自我介绍
- 问题项目用到什么什么技术
- redis的缓存雪崩击穿,怎么解决
设计模式
算法题:
乘积最大子序列
4. 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
示例 1:
5. 输入: [2,3,-2,4]
输出: 6
6. 解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
7. 输入: [-2,0,-1]
输出: 0
8. 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
示例 3:
9. 输入: [2,3,-2,4,-3,-2,,0,-5]
输出: 144
主管综面:
- 问项目
- 聊到ai
- 为什么我会一直维护我的项目
- 用到了什么
- 项目功能都是自己想的吗
- 还会考虑考研吗
- 会不会想跳槽
- 自我评价
- 平时及时开发项目的
- 项目开发下来有什么经验
- 平时怎么开发项目的
- ai发展前景很好巴拉巴拉说一顿
- 我有些编程经历 为什么两轮技术面手撕都没写出来
《参考解析》
-
Redis核心:Redis常用数据结构:String/Hash/List/Set/ZSet。持久化:RDB(定期快照,恢复快,数据可能丢失)和AOF(追加日志,数据安全,文件大)。缓存穿透用布隆过滤器;缓存雪崩加随机过期时间+多级缓存;缓存击穿用互斥锁或逻辑过期。分布式锁用SET key value NX PX + Lua脚本保证原子释放。
-
算法题解析:常用算法思路:动态规划(状态转移方程,自底向上);BFS/DFS(图遍历,BFS找最短路,DFS回溯);双指针(有序数组去重/两数之和);滑动窗口(子串/子数组问题);二分查找(有序或单调性)。时间复杂度分析:关注最坏情况和平均情况。