求职刷题神器

funit.cn

讨论区 > 求职面经 > 字节跳动 Python后端二轮三轮面经

字节跳动 Python后端二轮三轮面经

追光的人
发布于2021-04-21 18:25:52 12浏览
  1. 事务的 ACID 特性
  2. Innodb 使用的索引结构
  3. b+ tree 的优点,为什么要用它
  4. 给定复合索引 (a, b, c),查询语句中用 where a = 1 and c = 1,索引是否会失效?(最左前缀匹配的相关知识)
  5. 一条 SQL 语句的执行流程 (不会)
  6. 进程和线程的区别
  7. 并发和并行的区别
  8. 进程调度的策略
  9. 死锁发生的原因
  10. 手撕代码

leetcode 原题 41 (不会,换了一题)

思路:要找最小的正整数,数组中有 n 个数字,那么缺失的最小正整数一定在 [1, n + 1] 内。

因此可以利用数组本身做哈希,遍历一遍数组,将 [1, n] 内的数字 i 放到对应下标 i - 1 上。

再遍历一遍数组,第一个 nums[i] != i + 1 的数字 i + 1即为缺失的最小正整数。

代码如下:


public int firstMissingPositive(int[] nums) {  int n = nums.length;  for(int i = 0; i  0 && nums[i] <= n && nums[nums[i] - 1] != nums[i]){ //(0, n] 的数字放到对应下标上      int temp = nums[i] - 1;      nums[i] = nums[temp];      nums[temp] = temp + 1;    }  }  int i = 0;  for(; i 

时间复杂度:O(n),虽然有 while 循环,但每个数字最多被交换一次即可到对应下标上。

  • leetcode 原题 3

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

思路:利用递增的特性,从最左下角开始遍历(该列最大值,该行最小值)。和目标数字比较:

< 目标数,说明这一列都 < 目标数,因此列下标 + 1

> 目标数,说明这一行都 > 目标数,因此行下标 - 1

这样,每次比较都可以排除一行/一列。

代码如下:


public boolean canFind(int[][] matrix, int target)if(matrix == null || matrix.length == 0return falseint rows = matrix.length, cols = matrix[0].length; int row = rows - 1, col = 0while(row >= 0 && col  target) row--;   else col++; } return false;}
  • 手撕代码

算法题:2 * 1 的小矩形填充满 2 * n 的大矩形有多少种方案?

思路:挺简单的动态规划题

代码如下:


public int nums(int n){ if(n 


这里空间复杂度是 O(n),也可以通过 状压 dp 将空间复杂度降到 O(1)。

  • 场景设计

1000 亿个无符号整数,找最大的 100 个。内存不够的情况下用什么方案?内存充足的情况下呢? partition 的方案不稳定,有什么稳定的方法吗?

内存不够堆排序,内存够用计数排序。


4.https 如何加密的

5.os 中的 pagefault (缺页中断)

6.mysql 中的底层索引结构?为什么用这个结构

7.hashmap 是线程安全的吗?想要线程安全怎么办?

8.场景设计


大文件的断点续传

这题网上也有很多方案。我是参照 tcp 的滑动窗口和重传机制来回答的。

把大文件分块并打上编号,接收端对块进行有序确认,如果有某块没收到,就告知发送端让其重发。

发送端记录最后一次发送的编号,断点续传时从这个编号开始传。

因为负载均衡,续传的时候要确定从哪个服务器拿的,这个可以让接收端记录发送端的标识。


 总结:主要考察「操作系统」、「数据库原理」、「计网」和「手撕代码」,字节是非常重视手撕的,这个一定要好好准备。当然项目做得好的同学,也是有加分的。

本文首次发布于趣IT ,转载请注明出处,谢谢合作

字节跳动 Python后端二轮三轮面经

全部评论0

成为第一个评论的人

还可以上传7

表情
热帖排行
热门话题
  1. 531人参与
  2. 243人参与
  3. 153人参与
  4. 98人参与
  5. 25人参与
  • 微信扫码加好友进群