momenta一面
momenta一面
22届双非本科夹缝中生存,自己的语言是Java,面试官用go,所以没聊太多Java相关的
整个过程19分钟,最后算法做了半个多小时。
- 单例模式的实现方式?他跟我说有七种。我只知道双重锁,懒汉饿汉,这三种。我直接懵了,第一个就不会。
- Java的垃圾回收。强项,他不打断我我能说十分钟。
- 标记清除的优点和缺点,标记整理的优点和缺点。深入理解jvm有写。
- b树和b+树区别,时间复杂度是多少。开始我没分析出来,我把b+树和b树的种种区别列出来,然后引导我分析的。b树是logmn,m是底数是分的叉数,n是指数是层数。
- 用过MySQL的窗口函数吗?没用过,那要是查询一个表中每个班级的前五名怎么写。我说了两种,嵌套查询和left join。leetcode有类似的:https://leetcode-cn.com/problems/department-top-three-salaries/
- 算法:
树上的每个节点都有一个权值,权值均>=0。现在需要从根节点出发,找到一条路径(不需要非得到叶子节点),使路径上的权值和为n。将路径打印出来,用尽量少的内存和时间,写出核心代码即可,结果直接print打印,不要用数组存储,正序反序均可,打印格式随意。
// 例如,树的结构为
// 0 1,2,3
// 1 4
// 2 6
// 4 5 7
// 第一个数字代表父节点的序号,第二个数字列表代表当前父节点连接了哪些子节点。
// 节点权值为{5,7,3,8,2,1,1,6}
// 如果n = 20,则其中一条路径为 0,1,4,7 hit: 5 + 7 + 2 + 6 = 20
原来用list存储了一下,面试官问我能不能不用list存储,这里想了好久。
import java.util.*;
public class Main {
public static void main(String[] args) {
//System.out.println("Hello World!");
TreeNode a = new TreeNode(0, 5);
TreeNode b = new TreeNode(1, 7);
TreeNode c = new TreeNode(2, 3);
TreeNode d = new TreeNode(3, 8);
TreeNode e = new TreeNode(4, 2);
TreeNode f = new TreeNode(5, 1);
TreeNode g = new TreeNode(6, 1);
TreeNode h = new TreeNode(7, 6);
a.children.add(b);
a.children.add(c);
a.children.add(d);
b.children.add(e);
e.children.add(g);
e.children.add(h);
c.children.add(f);
int n = 20;
ShowMeBug solution = new ShowMeBug();
List<Integer> list = new ArrayList();
list.add(a.val);
//System.out.println(a.val);
solution.dfs(a, a.val, list, n);
//System.out.println(res);
}
static List<Integer> res = null;
public int dfs(TreeNode root, int path, List<Integer> list, int target) {
//System.out.println(root.id+" "+path);
if (res != null) {
return 0;
}
if (target == path) {
//res = new ArrayList();
//for (Integer i : list) {
// res.add(i);
//}
System.out.println(root.val);
return 1;
}
if (root == null) {
return 0;
}
//path += root.val;
List<TreeNode> children = root.children;
for (TreeNode child : children) {
//list.add(child.val);
int r = dfs(child, path + child.val, list, target);
//list.remove(list.size() - 1);
if (r == 1) {
System.out.println(root.val);
return 1;
}
}
return 0;
}
}
class TreeNode {
public Integer id;
public Integer val;
public List<TreeNode> children;
public TreeNode(Integer id, Integer val) {
this.id = id;
this.val = val;
this.children = new ArrayList();
}
}兄弟们不要问过不过了,过了自然更新。反正我是一块砖,哪里需要哪里搬,哪过了去哪。
#Java工程师实习##面经##Momenta##校招##秋招#