阿龙的学习笔记---实习面经总结

  • 2020腾讯后台开发暑期实习
    • 一面:电话面试
      • 先发了 Codeshare 的链接手撕代码,40 分钟做两道题:
      1. 字符串排序,数字>小写字母>大写字母,同类字符的相对顺序不能变,要求额外空间复杂度 O(1)。
      2. 二叉搜索树找第 K 大的节点。
      • 自我介绍。
      • 计算机网络:
      1. TCP 和 UDP 的区别、TCP 粘包、TCP 拥塞控制
      2. 三次握手 四次挥手 为什么等待 2MSL 大量连接处于 CLOSE_WAIT 是怎么回事
      3. 介绍 HTTP、 HTTP 方法、HTTP 状态码
      4. PUT 和 POST 的区别
      • 数据库:
      1. 数据库索引 为什么 B+树
      2. 数据库锁
      3. Redis 数据类型、Redis 实现分布式锁、Redis 集群
      4. Zset 底层实现
      • 操作系统,我主动说了操作系统学的不多,面试官没多问:
      1. 进程和线程的区别
      2. 进程的通信方式 有没有自己用过
      • 设计模式:
        单例、有没有线程问题
      • 数据结构和算法:
        • 了解什么树 、二叉平衡树的平衡是怎么实现的
        • hash 表 hash 冲突怎么解决
        • 排序算法:稳定性
      • 概率题:
      1. 两个孩子 已知一个是女孩 另一个是男孩的概率
      2. 49 个人 至少有几个人是同一个月生日
      3. 人站在圆形岛屿的圆心,鲨鱼在岛外,速度是人的四倍,问怎么安全跑到岸边
    • 2 面 30 分钟
      • 问了我一些机器学习、大数据和分布式的题目,不是很了解。其实我的简历里没有提到过这些,可能部门的工作有这方面的需要?
      • 深圳实习可以吗 什么时候可以来实习。读不读博。
      • 你认为后台开发的主要工作是做什么
      • 如何设计一个广告系统(谈到了 Redis)
        Redis 主从、Redis 集群、 Redis 和 MySQL 的数据一致性
      • 如何实现朋友圈广告的精准投放; 机器学习懂不懂; MapReduce 懂不懂;
      • 40TB文件 2GB内存 统计出现次数最多的单词。
    • 3 面 60 分钟
      • 自我介绍
      • 平时写哪方面的代码
      • 网络编程中如果服务器和客户端连接不上该怎么排查
      • 20 亿 QQ 号,4G 内存,O(1) 判断是否存在
      • 自己写的代码有没有可以讲讲的
      • 输入域名后需要哪些协议
      • 如何保证可靠传输
      • 实习的目标是什么
  • 2020实习面经(多公司)
    • 钉钉:一面

      • 操作系统: 进程与线程,线程怎么共享数据的,指令流水线(顺序与乱序),
      • C++:C++11新特性,智能指针,左值与右值,
      • 计网:网络模型OSI、TCP/IP,ARP协议,
      • 算法:排序算法的比较,二叉树的遍历方式,内存中的堆和栈,
      • 项目、代码调优(循环展开,goto禁用,行优先访存,循环内定义外移)
    • 英伟达的cpp开发

      • 问项目的目的;
      • 指针操作:指针越界的危害,野指针的危害(野指针是未初始化的指针,可能会指向任意地方;悬空指针是指向的内存已被销毁),为什么指针越界在编译的时候不会报错,在运行的时候会报段错误?操作系统怎么判断的?
      • C++的特点,面向对象的优点,举例说明?
      • 函数调用的特点,如果一个指针赋值为函数,那么这个指针获取的是函数的值还是返回值?
      • 手撕代码:二叉树的层序遍历;
      • 以下代码段是否合法?(不合法,虽然字符串常量还在那个位置上,不会像局部变量那样被销毁,但是字符串常量不能修改)
        char * f(){
            return "Hello world";
        }
        void main(){
            char * p = f();
            p[0] = 'h';
        }
        
    • 腾讯

      • 一面:
        • 聊了项目;
        • 数据库里面group by和order的执行顺序;(数据库selete语句复习)
        • 网络中信息传递的顺序,同网段、不同网段;
        • 手撕二分查找;
      • 二面:
        • C++ inline函数的作用、函数传参入栈的顺序,
        • 项目经历(个人在项目中的角色与遇到的困难)
        • 死锁与死循环,如何判断是死锁还是死循环;
        • 算法题:两个相交链表的交点;
      • 三面:
        • 做一个新的编程语言的意义?
        • 线程与进程的区别,线程同步(自旋锁、读写锁、信号量(二值信号量、计数信号量)、原子操作、barrier等等)
        • 软件开发应该具有的特性(低耦合高内聚),敏捷开发?(真没听过,可以补一补软件开发知识。敏捷开发是一种开发流程吧,应对快速变化的需求的一种软件开发能力。)
        • 算法题:n个节点的二叉树的最大最小深度;平衡二叉树的删除操作的时间复杂度;动规(爬楼梯);
      • HR面:
        • 选择offer的原因,做项目的收获?未来的职业规划,工作岗位的重新分配,课余生活等等;
    • 百度贴吧

      • 一面:
        • C语言动态内存分配的几种方式与比较(malloc,calloc,realloc);malloc的特点与底层实现,malloc与new的区别;
        • TCP与UDP的比较;
        • 进程通信的方式,进程与线程的比较;
        • 为什么网络层已经有了差错控制,传输层还要再来一遍?
        • 快排与堆排的应用场景,归并排序的空间复杂度(数组与链表不一样吧?)
        • 算法题:
          • 判断回文串;
          • 数组中只出现一次的数字(hash、排序、异或,说异或这个方法的时候面试官还夸我了,嘿嘿);
          • 数组中的两数相加之和(暴力法、二分法)以及时间复杂度;
          • 链表中倒数第k个元素;
          • 链表是否有环?
      • 二面:
        • C++多态怎么实现的?虚表存放的位置;虚表的大小?
        • 四种类型转换的区别;
        • class与struct的区别;
        • 数据库:主键与外键、数据库的锁(读写锁、乐观悲观锁,不太会。。。);
        • 操作系统:进程与线程、同步I/O,异步I/O(忘了)。内核态与进程态,系统调用时操作系统发生的事情;
        • 网络:画图–TCP三次握手、四次挥手,四次挥手中的wait-time出现在哪里,如何避免wait-time造成的服务端空等?
        • 手撕代码:链表逆置(两种方法:指针改变方向,头插法(写得不好));
        • 算法题:一个数组中找出min和max的方法(排序(nlogn)、遍历(n)、堆排序的重建堆(logn?));
    • smart的基础架构组

      • 手撕代码(剑指offer中二维数组寻值),两种方法(暴力搜索、从右上角逐步逼近);
      • 堆排序的思想,时间复杂度、怎么建堆?如果是二叉树不是数组怎么建堆?
      • 快排的时间复杂度?排序算法的稳定性是什么?
      • 数据库中删除数据但保留表结构用什么?
      • TCP为什么四次挥手?ARP是哪一层的协议?
      • Linux命令:一个文件有多少行?,查看内存和cpu。
    • 美团

      • 网络:http与https的差别,公私钥加密解密的过程? TCP三次握手的原理,为什么二次握手之后要有第三次?
      • 操作系统:锁机制有哪些?线程安全是什么? Linux用过什么命令?(free、df、ping、netstat等等),top命令干嘛的?
      • 数据库:数据库里面的“脏读”与“幻读”; 数据库里面的三个范式,索引是什么?
      • 让你设计一个登录系统?密码在数据库里面怎么存(MD5加密?)怎么判断用户超时了需要重新登录?(访问的时间戳判断)
      • 手撕代码:生产者消费者伪代码(如果只有一个生产者、消费者,需要加锁吗?(要判断生产者和消费者的操作是否为原子性的));链表是否有环;二进制转换为十进制。
    • 快手基础架构

      • 手撕代码:去除字符串里面的空格(不能使用string,空间复杂度为O(1),优化时间复杂度到O(n));如何实现C++里面的string?读取字符串有哪些方式?
      • C++函数为什么只有一个返回值,怎么返回的?(我说了运行时栈);函数参数保存在哪里?怎么入栈?有没有办法返回多个返回值?(我说了go语言)。
      • float型如何判断是否为0,0.0和0的区别?整型和浮点型比特存放的区别(IEEE754二进制浮点数算术标准)(我说了指数用移码表示,面试官夸我了。。。);
      • int a = 10, !!a = ?;
      • A、B间有TCP连接,如果B拔网线了,会怎么样?四次挥手的过程?为什么要四次挥手?怎么判断连接超时?
      • AWK是啥(AWK是Linux下一种处理文本文件的语言,是一个强大的文本分析工具)
      • 程序运行很慢怎么排错?(我说了死锁与死循环排错的方法);
      • mysql中索引怎么实现的?有什么用?
    • 网易互娱据说游戏开发工程师只有一面

      • C++的多态如何实现的?虚函数的作用?析构函数可以是虚函数嘛?虚析构函数的作用(可以避免内存泄漏),举个例子?虚函数表存在哪里?一个类一个还是一个对象一个(虚表是属于一个类的,一个类只有一个,对象中有虚表的指针指向虚表)?编译器会构造几个构造函数?(拷贝构造、默认构造)
      • STL里面:vector、set、map是用什么数据结构实现的?
      • Push_back的底层实现,什么时候会resize?Move语义了解过吗(C++11的新特性)
      • 哈希表避免冲突的方式?举例说明一下链表法?
      • 从cpp程序到exe程序都需要经历那些步骤?
      • TCP与UDP的区别?讲一下拥塞控制?
      • 进程与线程的区别? 讲一下多路复用;
      • 口嗨算法题:求数组中前K大的数字(大顶堆);leetcode:最大的正方形(暴力、动规);
    • DELL

      • 为什么要设计一种基于实时系统的编程语言?
      • 什么是面向对象?什么是多态,介绍一下常见的多态(重载、继承、虚函数);
      • STL用过什么?(vector、queue、stack);介绍一下queue和stack常用方法;如何实现一个最小栈?(辅助栈);C++中堆和栈的区别?(heap和stack,前面总结过一次)
      • 常见的排序算法有哪些?介绍一下堆排和快排,两者适用的环境?
      • Linux系统中进程与线程的区别?线程间如何通信?什么是死锁?
      • Http中get与post的区别,,cookie是什么?
      • 设计模式会吗?
    • 携程云计算

      • 介绍一下PCA算法,区块链的核心是什么?
      • C/C++与java的区别,C++中面向对象的特性,并举例说明;虚函数与纯虚函数?
      • 手撕代码:不许使用“==”和“if”,统计一个数组中“7”出现的次数(哈希表或者双指针);二分查找;都要写输入输出,跑通;
    • 华为中央软件院-操作系统实习生,被安排到了哥德尔实验室(做无人驾驶os和车载os)

      • 一面
        • 如何保证os的实时性?
        • 说一下race condition;了解无锁编程嘛?了解物联网平台吗?
        • 说一个你比较熟悉的内核模块(进程调度);对于实时进程来说,FIFO与RR调度哪个优先级最高?
        • 说一下TCP/IP模型,每层都有哪些协议?每种协议都是干嘛的?(ARP,RIP,OSPF,TCP、UDP,HTTP,DNS);
        • 手撕代码(三选二,要有输入输出):(1)十进制转换成十六进制,用补码表示;(2)用随机数函数random()求圆周率;(3)二分法求log2n;我做了第一题和第三题,都跑通了,然后时间到了,就结束了。
      • 二面主管面(觉得主管面主要面品质,看个人学习的习惯,还有思考的深度)
        • 车载os需要哪些特性?和你做的项目有何关系?为什么实时系统要选择C语言?
        • 区块链在无人驾驶系统中可以有应用吗?
        • 操作系统熟嘛?说一个了解比较多的(我说了内核同步),原子操作会对cache的命中率造成损失吗?自旋锁保证了什么特性?
        • 疫情在家都干嘛了? 研究生写过多少代码?以后怎么规划职业发展的? 看过什么书?有什么感悟?
        • 平时会怎么学习?有没有写过博客?
    • 字节跳动的基础架构组

      • 比特币中的挖矿是指什么?

      • 怎么防止重入攻击?共识机制?

      • C++:C++11的新特性(智能指针、vector)move用过吗?

      • 动态库与静态库的差别? 内存对齐及其原因? 如果一块较大的数据放入内存应该怎么办?(虚存/分块);

      • 手撕代码:大于N的最小非重复数(没理解题目意思。);

      • Ip网络报文格式? TTL含义? Https与http差别?

      • 三种数据库范式是啥,传递依赖有什么不好?(答了一个数据冗余,还有一个不会)

      • 死锁怎么形成的?

      • 代码优化的方法?

      • 手撕代码:已知前序中序求二叉树;数组的zigzag(a0 <= a1,a1 >= a1,a2 <= a3 …);

    • 趋势科技

      • 一面:
        • C++各种特性:
          static的作用(修饰函数、修饰变量、修饰成员函数的区别)。
          const的作用,拷贝构造函数的作用?
          如果不定义构造函数,会怎么样? 何时调用? 一般怎么定义?
          类里面的数据初始化的顺序?
          C++程序运行时的链接是指什么?
          多态是怎么实现的?虚函数表的作用?
          析构函数何时调用?不同对象的调用有顺序嘛?
          STL用过什么?Vector的resize说一下,vector与普通数组的区别?
          map的底层实现是啥?
          红黑树的插入删除说一下,红黑树里面插入n个节点的时间复杂度?
          unordered_map的底层实现是啥?
          Hash表处理冲突的机制有哪些?详细阐述一下?
        • 计网:
          Http与https的区别?说一下NAT协议?说一下DNS协议?
          键入一个网址之后会发生什么?
          https协议如何断定恶意网址的?
        • 场景题:10000000个元素怎么找第K大的元素?怎么排序?第10000个斐波那契数的后两位怎么求?
      • 二面:
        • 数据库的delete和trunk的区别,mysql建索引的方式?
        • B+树与hash表在数据库索引中的应用场景?
        • PC按下电源之后会发生什么?BOIS会做什么工作?引导文件会放在磁盘的什么地方?引导文件都有什么类型?
        • 写个代码吧:读取一个文件的倒数k行(文件操作可以google),说了思路,没让写;
        • 函数传参入栈是什么顺序?你喜欢什么编程语言?比较一下常用的编程语言吧;
        • 说一下go的基本特性,协程了解不?怎么学习一门新知识?学习中遇到过什么困难?怎么解决的?知道哪些攻击方法?(说了SYN洪泛);
        • 中间人代理了解过吗?VPN用吗?都用来干嘛?说一下VPN的原理;
        • 手里都有哪些offer了?怎么选择offer?怎么判断岗位是否与你match?
    • 七牛云

      • 先聊项目;
      • 数据结构:优先队列、堆的特性、如何利用别的数据结构实现堆的特性(最小栈、二叉搜索树);
      • TCP与UDP,ARP协议的意义,TCP实现可靠性的方法,超时重传的方法?UDP的应用场景;HTTP的head方法?Http中get是怎么判断数据传输完毕的?
      • 线程与进程的区别?线程独占的数据结构有哪些?死锁,避免死锁的方法;
      • 场景题:六个哲学家,六个筷子,六把锁怎么保证不会死锁?
      • 手撕代码:有序数组a,b,求a-b。
    • 百度实习正式批

      • 一面:
        • 聊一下项目,聊一下学校;
        • 进程与线程与协程的区别,进程与线程的优缺点与应用场景;系统如何容灾了解过吗?(没有);进程建立与线程建立有何区别?(linux内核角度来答的);
        • 手撕代码:leetcode62、63(两道动规,第二道是第一道的递进;
    • 二面:聊项目。

      • 各种问项目;怎么合作的?怎么与别人交流?
      • 内核态与用户态的切换,为什么来回切换会损失效率?
      • 平时写代码的时候会追踪这个吗?
      • 说一下你对C和cpp的理解;
      • 手撕代码:leetcode141、142;同样,第二题是第一题的递进;
    • 三轮连面:

      • 场景题:浏览器键入:www.baidu.com后会发生什么?
      • 百度现已支持https那么如果以http访问百度站点会发生什么?知道为什么嘛?(不知道。。。);
      • 本科阶段有什么收获?做项目怎么解决分歧?做项目有何收获?有没有一直坚持下来的事情?你觉得从本科到现在有何提升?以后的发展规划?现在还有什么不足?
    • 小马智行:一面,纯coding面

      • 手撕代码:
        • 链表相加,我的思路:现将两个链表翻转,然后求和,再将所得结果逆置,空间复杂度O(n),时间复杂度O(n);优化,链表逆置可以进行原地操作吗?(更改指针方向可以);
        • 有n个糖果,a每天早上吃k个,b每天晚上吃剩下的10%,求最小的k值使得a吃到的总数大于等于n/2;二分法使k在0~n的范围内尝试;一个小时结束。
    • shopee的金融后端

      • 一面;
        • 快排与堆排的时间复杂度,堆排的具体过程,
        • 数据库:数据库的封锁级别?事务的定义?乐观锁与悲观锁?数据库索引的意义?数据库引擎是什么?
        • 计网:Http与https的区别? http1.0与http2.0的区别? 什么是面向连接? 三次握手与四次挥手的过程,为什么四次挥手?
        • 系统:进程调度的算法?进程与线程,线程独有的数据结构?
        • 比特币怎么防止“重画”?
        • UTXO集合与wallet的比较?
        • 口嗨算法:爬楼梯; 1亿个ip找一个特定的?(排序后二分查找、字典树); 100元可以玩10000次赔率为3胜率50的游戏,你的策略是?
        • 手撕代码:atoi;
      • 二面:
        • C++11有哪些新特性?说说share_ptr和unique_ptr的区别?
        • 说说内核里面epoll做了那些优化?Epoll为何可以提升效率?具体怎么实现的?
        • Fd是以什么数据结构连接起来的?你在项目中遇到的最大的困难?写过多少代码?对实习有什么看法?接触过golang嘛?Linux熟嘛?怎么规划你的职业生涯的?

你可能感兴趣的:(阿龙的学习笔记)