微信支付面试已面过三轮,所以在这里总结一下二、三面面经,大家一起交流学习!
二面
1、上来就做题!都没自我介绍!?
公司员工每天上下班需要进行打卡操作,工作时间为早上9点到晚上5点。迟到或者早退半小时当天按旷工处理。hr能查看所有员工的打卡信息,员工只能查看自己的打卡信息。
请编写一个能支持以上场景的程序。
/**
* 以下代码是简单伪代码实现
* 当时没有考虑并发,面试官没有提
*/
public class Time {
private DataTime firstTime;
private DataTime lastTime;
public void setFirstTime(DataTime firstTime){
this.firstTime = firstTime;
}
public void setLastTime(DataTime lastTime){
this.lastTime = lastTime;
}
}
Public class Person{
private Time personTime;
private boolean isLate;
// 伪代码
public void firstCall(){
personTime.setFirstTime(currentTimeMillis());
//如果超过九点半则记为旷工
if(currentTimeMillis()){
this.isLate = true;
}
}
// 伪代码
public void lastCall(){
personTime.setLastTime(currentTimeMillis());
//如果早于下午4:30就记为旷工
if(currentTimeMillis()){
this.isLate = true;
}
}
//hr获取打卡时间
public Time getTime(){
return this.personTime;
}
//获取是否旷工
public boolean isLate(){
return this.isLate;
}
}
2、项目介绍、难点
项目阶段全程我在说,说完之后问了一下细节,为什么消息队列使用Redis,有了解过其他的吗
我提了一下Rabbitmq
3、项目中的sql优化问题
1、索引优化
2、联合查询优化
4、索引底层实现,为什么采用B+树实现?
1、B+树
2、多路搜索、数据在叶子节点,契合磁盘存储原理,局部性原理和预读取
5、那你知道B+树是几层吗?
读者可以参考这两篇文章:
https://blog.csdn.net/qq_41999455/article/details/106138619
https://blog.csdn.net/qq_41999455/article/details/104946754
6、MySQL事务有用过吗?
讲了一下几种隔离级别的使用
7、那语言这块用什么多一些?C++写过吗?
因为我简历上写了Java C++ Go,但是Java用的最多,C++没有写过完整项目。。。
8、Java中的map有哪些?
HashMap hashTable
9、它们之间什么区别?
1、线程安全问题
2、扩容机制不同
3、Hash值计算不一样
4、HashMap允许null做键值,hashtable不允许null做键值
10、有了解过Java中的NIO吗?原理是什么?
1、基于直接内存实现
2、NIO底层原理,同步非阻塞的IO模型,它是面向缓冲区的
11、Java的内存数据区介绍一下
讲了一下Java的运行时数据区,各类数据存储
12、Linux中的IO多路复用知道吗?讲一下
从select、poll、epoll详细说了一下底层实现
这一块希望读者可以深入了解一下,与内核相关
13、分布式有了解过是吧?知道分布式事务吗?CAP?讲一下
1、分区容错性、高可用性、数据一致性;
2、三者不能同时满足,一般的分布式系统都会优先满足高可用、放弃强一致性选择最终一致性
3、从单应用架构的事务说起,介绍分布式事务的出现意义,目前分布式事务常用的2PC、3PC都讲了一下
14、除过2PC、3PC还有什么协议算法呢?
paxos算法以及zookeeper使用的ZAB协议算法
15、有实际场景应用过吗?
16、前端用过是吧,能说一下吗?
后台开发问我全栈。。。
前端都是很久之前写过的简单页面了。。。
17、那你知道目前哪些组件、框架比较好吗?
提了一下vue,我没用过。。。
18、编译原理学过了吗?
还没有,这学期才开。。
19、那今天就这样吧,后续会有人联系你下一面。
三面 (3.27)
1、自我介绍
2、时间复杂度为O(nlgn)的排序算法都有哪些呢?
快排、归并、堆排序
3、快排是稳定的吗?
不是稳定的
4、稳定是指什么意思?
在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的
5、算法题:整数无序双向链表可以转换为排序二叉树(能不能、为什么能、怎么做)
面试官要求不要一棵树的空间,我没想到。。还是太菜🤣
6、Linux进程的通信方式有哪些?
有名管道、无名管道、消息队列、共享内存
7、管道、消息队列、共享内存它们三者哪个开销最小?
原谅我个菜鸡没了解这么深,所以就以自己理解说了管道最小。。。
“那为什么管道相比其他两个开销小呢?“
emmm,扯了一些有的没得。。
补充:共享内存开销最小读者可以看这一篇文章详细了解
8、网络了解吧,TCP为什么是三次握手但挥手四次呢?
tcp是全双工通信,其次谈到了close-wait状态
9、http是那层协议?
应用层
10、那你知道https吗,是怎么实现的?
在http基础上做了ssl、tls
11、那https的数据是怎么加密的呢
证书获取阶段是非对称加密、数据传输阶段是对称加密,详细说了一下流程
12、我们一般使用sleep让进程睡眠,那我们能不能做到微妙级别的sleep呢?
这个我不知道啊。。所以就扯操作系统的操作性能和线程切换时间,认为可以达到微妙。。。
13、MySQL索引知道吧,它的索引结构是什么呢?
hash、B+树
14、现在有一个联合索引(A,B),那么 A、B、(A,B)三者谁能够命中索引呢?
结合索引的最左前缀特性,A、(A,B)能够命中
15、那(A、B)这个联合索引的B+树结构是怎样的呢?
这里不太懂,我说的是根节点为A,子节点为B的B+树
16、有什么想问我的吗?
总结
自己对于一些东西的底层还是没有理解透,理解不到位,总的来说微信三面给人感觉更底层一些,面试官都要求说到”是什么,怎么做,为什么这么做“,继续努力吧!
面试官让等通知,希望菜鸡有机会吧,许愿!