飞书社招技术一面 | 飞书面经
时间
2024.05.23
问题
- 个人介绍
- 疯狂问项目(过往项目都问了一遍,大概20分钟)
- 感觉这块答得不够好,基本就是实话实说了,得提前润色一下才行
- redis、mq、mysql的一些设计或者底层实现了解吗?
- 问的很宽泛、重点说了mysql的b+树索引设计
- mysql索引的设计,会考虑哪些因素?
- 字段数据区分度较大
- left join 和 where 查询较频繁的字段
- 要考虑索引覆盖,避免回表查询(来自面试官善意的提醒)
- redis底层数据结构实现了解吗?
- 类比java,具体不是很清楚(被问过很多次了,需要好好复习下)
- 用过RPC吗?
- 没
- 算法:N数之和
题目描述
不重复的随机数数组[1,3,8,11,13,22,34,61,88,772],总共有10个数字。
取任意数字,不可重复取数据,求它们的和,判断结果能否等于n。
输入为数组arr,目标和n。
输出true/false
题解:
public static void main(String[] args) { int[] arr = new int[]{1,8,10,11,13,22,34,61,88,772}; System.out.println(combinationSum(arr, 17)); } /** 回溯 + 剪枝 */ public static boolean combinationSum(int[] candidates, int target) { //排除不合理数组 if(candidates.length == 0) { return false; } return backtrack(candidates, 0, target, 0); } static boolean backtrack(int[] candidates, int start, int target, int sum) { if(sum == target) { // 找到目标和 return true; } if (sum > target) { // 超过目标和,直接结束 return false; } boolean res = false; for(int i = start; i < candidates.length; i++) { // 做选择 sum += candidates[i]; // 进入下一层决策树 res = backtrack(candidates, i + 1, target, sum); // 取消选择 sum -= candidates[i]; if (res) break; } return res; }
参考lc:39组合总和,不过做了简化,只要符合就返回ture,否则false
个人总结
- 自我介绍需要提前准备一份
- 项目经历需要整理文字叙述
- 八股需要复习,熟练后深入理解