面经哥只做互联网社招面试经历分享,关注我,每日推送精选面经,面试前,先找面经哥
背景
学历:本科
工作经验:一年+(不算实习)
当前语言:Java
base:武汉
部门\岗位:腾讯云
一面(1.5h)
1、员工成长系统(公司项目)
2、做了那些优化?(线程池优化,批处理优化、设计模式优化、性能测试、压力测试、GC优化)
3、线程池怎么调优的?
4、线程池如何分配线程?
5、如果有50000数据需要批处理,你是怎么分配线程的?
6、导出10万数据,线程池中的线程是一个线程拉取一条数据?还是怎么处理?回答:类似分页查询,每页获取2万左右,然后切分页到多个线程处理,再拉取下一页数据,直到完成
7、多线程导出,你是怎么合并导出的表格文件?每个sheet存5000条数据,直到处理完成所有数据
8、AsyncStream异步调度框架(自己实现的框架)
9、如何设计项目架构?
10、分库分表(滚表)设计?查询键设计?
11、如何修改异步执行的中间状态?
12、work成功拉取待执行状态,但是还没有执行完成,service在这时修改任务状态为取消(失败),导致了性能浪费,你怎么处理这种情况?
13、你这个框架和MQ有什么区别?
14、如果用MQ来解决上面的取消任务流程,你怎么设计?
16、分布式锁原理
17、算法:实现算法 + 讲解思路 + 分析复杂度
/*
* 合并两个有序数组
* */
public static int[] merge(int[] arr1, int[] arr2) {
int[] result = new int[arr1.length + arr2.length];
int index1 = 0;
int index2 = 0;
int all = arr1.length + arr2.length;
for (int i = 0; i < all; i++) {
int v1 = Integer.MIN_VALUE;
int v2 = Integer.MIN_VALUE;
if (index1 < arr1.length) {
v1 = arr1[index1];
}
if (index2 < arr2.length) {
v2 = arr2[index2];
}
// arr1 over
if (v1 == Integer.MIN_VALUE) {
result[i] = v2;
index2++;
} else if (v2 == Integer.MIN_VALUE) {
// arr2 over
result[i] = v1;
index1++;
} else {
if (v1 < v2) {
result[i] = v1;
index1++;
} else {
result[i] = v2;
index2++;
}
}
}
return result;
}
public static void main(String[] args) {
int[] arr1 = {1, 3, 5, 8};
int[] arr2 = {2, 4, 7};
System.out.println(Arrays.toString(merge(arr1, arr2)));
}
二面(40min)
1、如何重构项目的?
2、做了那些重构?
3、如果修改了数据库表结构,灰度发布,如何保证旧的容器请求正常(G,反馈说冗余表字段,然后做数据清洗发布)
4、Http 401 状态码 (G,没想起来)
5、restFul是什么?
6、为什么要自定义响应请求代码?用http的响应码也能实现功能啊?
7、线上问题如何排查?
8、慢SQL如何排查?
9、AsyncStream异步调度框架
10、如何优化qps的?为什么这么优化?
11、连接池问题是如何判断的?
总结:感觉和阿里巴巴的二面差不多,社招很看重项目经验,在一个项目技术点上会深挖细节实现,然后穿插知识点,总体感觉回答的可以,提升的地方就是项目技术细节描述不太直观,一句话说不完,需要用很多句话。总结能力待提升