讨论/求职面试/微信|后端开发|面经(21届秋招)|2021|/
微信|后端开发|面经(21届秋招)|2021|

src=http___www.weihaotui.com_Upload_News_20150413100832980614.jpg&refer=http___www.weihaotui.jpg

一面-技术面

手撕代码

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协议)等内容。

手撕代码

  1. 单机里面有多个文件,每个文件包含若干个整数,找出这些文件中的值最大的k个数:
    讲了下单线程和多线程的处理方式,单线程直接用一个小根堆,然后遍历每个文件;多线程的话,就对每个文件建一个小根堆,取得这个文件的top k,然后对这 k 个数排序,最后将每个文件拿到的结果来建一个大根堆,依次取出top k;
  2. 给定一个数组,里面的元素先是升序,再降序,比如 [1, 3, 5, 4, 2],找出最大的元素的下标。

三面-技术面

一共面了三个小时,前两个小时做5道编程题,最后一个小时问答。

手撕代码

  1. 某操作系统采用 LRU 作为内存页面置换算法。
    假设初始内存为空,现给定将访问的内存页序列 pages, 序列长度 page_cnt 和内存总容量(页面数) mem,请返回缺页中断的次数。
    例如:序列 pages = 1, 2, 3, 2, 1, 4; 内存 mem = 2
    返回:5
  2. 检查两个表达式是否等价。表达式仅包含小写字母 'a'-'z', '+', '-', '(', ')',且表达式里的未知数仅有一个字符。
    例如:
  1. exp1 = "a+b+c-a", exp2 = "(b+c)", result: true
  2. exp1 = "a-b-c", exp2 = "a-(b+c)", result: true
  3. exp1 = "a-b+c", exp2 = "a-(b+c)", result: false
  4. exp1 = "a-b+c", exp2 = "a-(b-(c-d)-d)", result: true
  5. exp1 = "a+d", exp2 = "b+c", result: false
  1. 给一个由数字组成的字符串,求出所有可能的 IP 地址。
    例如:给出字符串 "25525511135",所有可能的 IP 地址为:
    [ "255.255.11.135", "255.255.111.35" ]
  2. 对输入的数组按出现的频率进行排序,若出现频率一致则按数字升序排序。
    例如:1, 2, 4, 9, 4, 1, 4, 2, 结果为:4, 4, 4, 1, 1, 2, 2, 9
  3. 给定一个排序链表,删除所有重复的元素,只留下原链表中没有重复的元素。
    例如: 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 联合索引的结构。

12
共 1 个回复

光一次面试就仨小时五道算法题?这是要选封疆大吏还是选治世能臣啊

10