26秋招滴滴后端开发三面

实习项目
1. 没有考虑过留在之前实习过的公司吗?
2. 你主要用的语言是 Java 还是 Go?Go 的底层你了解吗?
3. 你过去哪一段项目是你觉得比较有挑战的?能具体聊聊吗?
4. 要不先讲讲你现在在字节的项目?你介绍一下?
5. 你做的这个 SDK 是在解决什么问题?什么叫同步/异步?
6. 老系统和新系统,你们为什么要做迁移?老系统代码量和问题在哪里?
7. 你总结一下你做的这个 SDK 的核心功能,能提炼为三点吗?
8. 你的 SDK 是放在业务系统里的吗?
9. 如果 SDK 需要升级,怎么推动所有调用方升级?
10. 聊聊你在快手的项目,哪个部分最有挑战?
手撕算法
11. 算法:两数之和
12. 你为什么要用哈希表来做?和暴力循环 O(n²) 的方法相比,哈希表有什么好处?
13. 如果数组有上千万的数据,你的哈希表能装得下吗?
14. 如果内存放不下所有数据,你会怎么处理?(分块/落盘/分文件…)
15. 有没有更高效的方案?
16. 你的方法只能找到一组解,如果有多组解怎么办?
17. 你觉得现在的 O(n) 算法还有优化的空间吗?
八股
18. 假设你在浏览器输入一个网站的 URL,然后点确认,到最后看到网站页面,中间发生了什么?
19. HTTP 和 HTTPS 的区别是什么?HTTPS 的安全性是怎么保证的?
20. HTTPS 的证书交换、加密解密的过程是怎么样的?
21. HTTP/2 和 HTTP/1.1 有什么区别?HTTP/2 做了哪些优化?
全部评论

相关推荐

import java.util.*;import java.io.*;public class Main {// 并查集:父节点映射 + 秩映射(按秩合并用)public static HashMap<Integer, Integer> parent = new HashMap<>();// 查找(路径压缩 + 自动初始化节点)public static int find(int x) {// 节点不存在则初始化:父节点是自己,秩为1parent.putIfAbsent(x, x);// 路径压缩(迭代版,避免递归栈溢出)while (!parent.get(x).equals(x)) {parent.put(x, parent.get(parent.get(x))); // 父节点指向祖父节点x = parent.get(x);}return x;}// 合并(按秩合并 + 路径压缩)public static void merge(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX == rootY) return;// 按秩合并:将秩小的树合并到秩大的树parent.put(rootY, rootX);}// 生成统一的边key(避免{a,b}和{b,a}重复)static String getRelationKey(int a, int b) {return a < b ? a + "," + b : b + "," + a;}public static void main(String[] args) throws IOException {// 替换Scanner为BufferedReader,提升输入效率BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] parts = br.readLine().split(" ");int n = Integer.parseInt(parts[0]);int m = Integer.parseInt(parts[1]);int q = Integer.parseInt(parts[2]);// 存储原始边Set<String> edges = new HashSet<>();for (int i = 0; i < m; ++i) {parts = br.readLine().split(" ");int a = Integer.parseInt(parts[0]);int b = Integer.parseInt(parts[1]);edges.add(getRelationKey(a, b));}// 存储有效操作(过滤无效删除)ArrayList<int[]> ops = new ArrayList<>();for (int i = 0; i < q; ++i) {parts = br.readLine().split(" ");int op = Integer.parseInt(parts[0]);int a = Integer.parseInt(parts[1]);int b = Integer.parseInt(parts[2]);if (op == 1) {String key = getRelationKey(a, b);if (edges.contains(key)) {edges.remove(key);ops.add(new int[]{op, a, b});}} else {ops.add(new int[]{op, a, b});}}// 初始化:合并所有未被删除的边(最终状态)for (String key : edges) {String[] nodes = key.split(",");int a = Integer.parseInt(nodes[0]);int b = Integer.parseInt(nodes[1]);merge(a, b);}// 倒序处理操作,记录答案List<Boolean> answers = new ArrayList<>();for (int i = ops.size() - 1; i >= 0; i--) {int[] op = ops.get(i);if (op[0] == 1) {// 原删除操作 → 逆操作:合并merge(op[1], op[2]);} else {// 原查询操作:判断是否连通boolean connected = find(op[1]) == find(op[2]);answers.add(connected);}}// 逆序输出答案for (int i = answers.size() - 1; i >= 0; --i) {System.out.println(answers.get(i) ? "Yes" : "No");}}}
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务