2019实习面经

2019年春季学期实习面经归档

Posted by Ang on April 19, 2020

前言

这是一篇迟到了很久的实习面经总结。

阿里巴巴

关键词:最折腾人的面试体验

蚂蚁金服简历面

  • suika项目创新点
  • 如何设计一个长连接系统,当客户端或服务器断开时如何处理
  • 多态的实现
  • virtual关键字相关,构造函数析构函数前面可以加吗
  • 对数据库的了解如何
  • 进程间通信方法,最高效的是哪个,为什么
  • 消息队列,消息中间件
  • 一个数组中如何找到最小值,多种方法及其复杂度
  • 手撕代码:数组中最大子数组和

阿里云简历面

  • TCP与UDP的区别及报文字段
  • 分片的发生情形,UDP报文的大小
  • TCP三次握手,四次挥手,为什么不是两次握手,为什么一定要四次挥手
  • TCP的time_wait时间与作用,大量time_wait如何处理
  • TCP可靠性的设计与实现
  • 非阻塞套接字及Linux下io复用select、poll与epoll的区别
  • 在浏览器上输入一个域名到收到回复页面中间的流程

蚂蚁金服一二面

  • suika项目创新点
  • 面向接口编程
  • 死锁的形成条件、预防与处理
  • c10k问题
  • 对数据库的了解如何,索引类型、设计及实现

阿里云二面

  • 当前微型计算机的存储体系,为什么这么设计
  • 玩游戏,内存一般都比游戏容量小,怎么实现运行大型游戏
  • 如何debug
  • web server运行大致流程(网络编程一般步骤)
  • select、poll与epoll原理与区别
  • nginx是多进程还是单进程,进程间如何进行通信
  • 进程与线程,线程同步,线程通信
  • 进程内存空间布局
  • c++如何能做到避免内存泄漏
  • 设计一个内存池,如何设计,需要注意什么
  • 一个文件中有大量的字符串,现在需要对字符串进行统计,你会怎么做
  • 前缀树如何实现
  • 算法题:memmove

阿里云三面

  • suika多线程方案
  • TCP相关的receive系统调用做了些什么
  • 平滑升级,新进程老进程切换时机
  • 如果老进程有正在处理的事件,怎么处理
  • 一个处于内核态的进程接收到一个信号,相应的信号处理函数会在内核态还是用户 态进行处理
  • 对微服务的认识与了解
  • 微服务的对外暴露的接口是什么,其他服务如何能得知这个服务的存在
  • 如何进行服务发现,服务注册
  • 华为项目中,连接是长连接还是短连接,若是长连接且连接断掉,会怎么处理
  • 华为项目中主要工作与比重

阿里云四五六七面

  • 自我介绍
  • 对数据库领域最近最新技术发展的了解
  • 对网络领域最近最新技术发展的了解
  • 平时有无关注SIGMOD、VLDB、SIGCOMM等业界新研究
  • 容器技术,容器调度相关问题
  • suika项目刨根问底
  • 手撕代码:在旋转数组中寻找最小数字,分析复杂度
  • 聊人生

阿里云hr面

  • 评测阿里味儿

腾讯

关键词:最舒服的面试体验

IEG一面

  • 自我介绍
  • suika项目 非阻塞io 性能提升分析 定时器实现,内核定时器实现,有无O(1)实现
  • TCP为什么四次挥手,有3次挥手的实际场景吗
  • 设计题:UDP是不可靠的,TCP是可靠的,某公司由于历史原因使用UDP,开始时能满足应用需求。后来随着业务的发展,开始频繁的出现丢包问题。如果是你,会怎样对现有设计进行改进以满足现有的新需求。如果有多种方案,它们各自有什么优缺点
  • 关于拥塞控制,讲讲TCP拥塞控制的缺点
  • 存储用户姓名信息,并进行快速检索,一种方法可以使用数据库然后检索,如果我们需要在内存中进行这种操作的话,我们可以怎么做,复杂度是多少
  • 设计一个LRUCache,要怎么设计,需要使用什么数据结构,复杂度是多少
  • 对协程有无了解,讲讲C++常用的协程库,比较一下

IEG hr面

  • 随便聊一聊

字节跳动

关键词:最迅速的面试体验

视频架构一面

  • 自我介绍
  • 介绍一下suika项目基本情况,创新点
  • 峰值并发后,连接对象池冗余对象的处理
  • select poll epoll区别,为什么epoll效率最高
  • Nignx连接对象池的实现,Buffer的优化
  • 内核态与用户态
  • 服务器端accpet前处于什么状态
  • TCP三次握手,为什么不是两次
  • vector在stl中怎么实现的,size()需要很大的计算量吗
  • vector的迭代器与map、list有什么区别
  • 智能指针的种类,unique_ptr与shared_ptr的区别,auto_ptr与unique_ptr的区别
  • vector中push_back数据时会进行拷贝吗?对于shared_ptr会有什么影响?
  • 手撕:一维数组最大子数组和,扩展到二维

视频架构二面

  • 自我介绍
  • 介绍一下suika项目基本情况,创新点
  • 连接对象池的实现
  • Buffer的设计与实现,改进的方面
  • vector在STL中的实现
  • 如何对服务器进行性能上的该技能
  • 如何区分长连接下不同的请求,TCP如何区分不同报文
  • select poll epoll区别,为什么epoll效率最高
  • 手撕:S型层序打印树
  • Linux下C++编译过程
  • Linux进程的内存分布
  • Linux下进程通信方式
  • Linux常见信号
  • Linux下文件IO与标准IO的区别

视频架构三面

  • 游戏中关卡与NPC的设计总是固定的,这样可能会导致服务器在某些关卡负载过重,如何设计可以避免这个?
  • 微博用户间有1度、2度等关系度,如何计算他们间的关系度,如何优化计算过程?代码大概写一下

视频架构 hr面

  • 随便聊一聊

微软

关键词:得不到的永远在骚动?

STCA一面

  • 手撕:前序中序序列构建二叉树,原理与实现

STCA二面

  • 手撕:对于二维坐标系中的一个矩阵区域,我们将其划分为4等份,用1、2、3、4标识,并使用每个子矩阵右上角的点坐标作为这个子矩阵的坐标值初始矩阵范围为(0, 0)与(1,1)确定的区域,输入一个序列,按照这个序列中的数对这个区域进行划分,输出最终所得子矩阵的坐标值 Input:1, 4 Output: (0.5, 0.75)

STCA三面

  • 手撕: C++中如何检测头文件循环引用,用代码实现一下

结语

基础最重要,基础最重要,基础最重要。

参考