zoukankan      html  css  js  c++  java
  • 微信|后端开发|面经(21届秋招)|2021|--转载

    微信|后端开发|面经(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)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    Java:API文档;文档注释中的javadoc标记;官方API;自己动手给项目建一个API文档
    Java:配置环境(Mac)——MySQL
    Java:配置环境(Mac)——Tomcat
    Java:配置环境(Mac)——Eclipse;修改JDK版本后,Eclipse打不开
    Java:配置环境(Mac)——JDK
    Git:九、删除项目
    Git:修改Git Bash默认打开位置(win10)
    操作系统:diskpart常用指令(使用diskpart实现分区管理)
    人生第一次离职
    C++ std::thread概念介绍
  • 原文地址:https://www.cnblogs.com/ache/p/15266293.html
Copyright © 2011-2022 走看看