微信|后端开发|面经(21届秋招)|2021|
LeetCode - 互联网小白
发起于 2021-01-26
一面-技术面
手撕代码
1.倒转单链表(在原链表上倒转)
struct LinkNode {
int value;
struct LinkNode * next;
};
void reverseList( struct LinkNode * head );
注意:翻转后,head 指针仍然要指向链表头部。所以原来的头节点对象,翻转后,仍然需要是头节点。(可以通过修改节点的值来实现)。
2. 数字1-N 分布在长度为N+1的数组里面,一个元素重复1次,请求重复的元素?
时间复杂度O(N) 空间复杂度O(1)。
基础问题
1.讲讲 Java 中的 new 和 C++ 中的 malloc() 的区别;
2.讲讲 Java 的垃圾回收机制(这里我水了超久);
3.进程和线程的区别;
4.为什么进程切换会比线程切换消耗的资源要多?
5.epoll() 和 select() 的区别;
6.TCP 三次握手和四次挥手;
7.两个进程分别监听 TCP 和 UDP,可以监听同一个端口吗?
T8.IME_WAIT 状态的作用。
二面-技术面
基础问题
1.Elasticsearch 的原理:我讲了下分词和倒排索引;
2.Java 的 HashMap 和 TreeMap;
3.数据库有哪些索引;
4.讲讲平衡搜索树;
5.输入www.qq.com以后的过程:讲了下DNS,http,https,http/2.0,tcp,ip,链路层(ARP协议)等内容。
手撕代码
单机里面有多个文件,每个文件包含若干个整数,找出这些文件中的值最大的k个数:
讲了下单线程和多线程的处理方式,单线程直接用一个小根堆,然后遍历每个文件;多线程的话,就对每个文件建一个小根堆,取得这个文件的top k,然后对这 k 个数排序,最后将每个文件拿到的结果来建一个大根堆,依次取出top k;
给定一个数组,里面的元素先是升序,再降序,比如 [1, 3, 5, 4, 2],找出最大的元素的下标。
三面-技术面
一共面了三个小时,前两个小时做5道编程题,最后一个小时问答。
手撕代码
某操作系统采用 LRU 作为内存页面置换算法。
假设初始内存为空,现给定将访问的内存页序列 pages, 序列长度 page_cnt 和内存总容量(页面数) mem,请返回缺页中断的次数。
例如:序列 pages = 1, 2, 3, 2, 1, 4; 内存 mem = 2
返回:5
检查两个表达式是否等价。表达式仅包含小写字母 'a'-'z', '+', '-', '(', ')',且表达式里的未知数仅有一个字符。
例如:
exp1 = "a+b+c-a", exp2 = "(b+c)", result: true
exp1 = "a-b-c", exp2 = "a-(b+c)", result: true
exp1 = "a-b+c", exp2 = "a-(b+c)", result: false
exp1 = "a-b+c", exp2 = "a-(b-(c-d)-d)", result: true
exp1 = "a+d", exp2 = "b+c", result: false
给一个由数字组成的字符串,求出所有可能的 IP 地址。
例如:给出字符串 "25525511135",所有可能的 IP 地址为:
[ "255.255.11.135", "255.255.111.35" ]
对输入的数组按出现的频率进行排序,若出现频率一致则按数字升序排序。
例如:1, 2, 4, 9, 4, 1, 4, 2, 结果为:4, 4, 4, 1, 1, 2, 2, 9
给定一个排序链表,删除所有重复的元素,只留下原链表中没有重复的元素。
例如: 1->1->2->3->3->4->4->5->6->6->null, return: 2->5->null
做完这些题以后,休息了五分钟,然后开始问操作系统、计网、Redis:(只记得一部分)
1.进程和线程的区别;
2.什么时候用多线程,什么时候用多进程;
3.32位和64位系统中,进程虚拟内存的布局;
4.进行系统调用时的过程;
5.介绍一下Redis;
6.Redis 的内存布局;(不会)
7.为什么Redis单线程也这么快:I/O复用,使用子进程去处理耗时多的任务(如rdb快照,aof文件改写);
8.select / epoll;
9.TCP握手过程;
10.监听未完成的连接时(listen阶段),如何防止DDoS。
四面-主管面
问的很深,只记得部分问题。
1.问了实习内容;
2.内核态和用户态的区别?为啥要区分内核空间和用户空间?怎么实现内核态?和底层的3.CPU指令有关吗?
4.进程间通信方式?(面试官说有十多种。。。我迷惑了)
5.UnixSocket;
6.Sleep() 等定时机制,定时精度是由什么因素决定的?怎么实现?
7.睡眠的进程/线程怎么被唤醒;
8.堆排序;
9.Mysql 联合索引的结构。
作者:互联网小白
链接:https://leetcode-cn.com/circle/discuss/EKNV6Z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。