公司面经
字节跳动
因为有春招实习的offer(和某程序设计夏令营有冲突所以鸽了),所以秋招是给了一轮技术面+HR面
技术面:
- 套路的自我介绍
- 二叉搜索树已知先序求后序(代码实现)
对先序排序就是中序,然后问题转化为已知先序求后序
- 25匹马赛跑,5个跑道,怎么以最少的比赛次数来决出最快的3匹(思路分析)
30min左右结束了技术面,然后被通知马上进行HR面
HR面:
- 你在学校里面觉得做得最自豪的一件事?
- 你为什么会想来字节跳动?
- 你觉得你是个什么样的人
其他问题就记不清了233333
PS: Offer Get!!!
美团
线下面试 2轮技术+HR面
技术面:
首先是基础部分:
因为答上来的基础比较少 就2次一块汇总写吧
- TCP/IP模型与OSI模型
- TCP/UDP的区别
- http与https的区别
- 拥塞控制
- TCP保证可靠性
- 三次握手/四次挥手
- 进程与线程的区别
- 加密算法
然后是算法部分(现场手写代码):
第一面:
- 好像是个求子串的题 (字符串不带怕的 下一个)
- 隐约记得是比较简单的组合数学 手玩下样例 就有公式了
- 比较sb的概率dp
第二面:
- dfs输出全排列
- 不使用额外空间的链表翻转
- 有序链表归并
PS:两面面试官疯狂吐槽 算法题考不到我 问我基础 我又答不上来 让他们很难办 最后HR面完以后让我回去等消息 等了一个月没动静 估计是没了 可能需要的是能直接上手做工程的同学吧
猿辅导
PS: 因为和室友同时投了北京的后台开发 一面面试官是同一个人 问的问题基本一样 靠着室友提醒完美苟过一面
第一面:
基础部分:
- http与https的区别
- post请求报文(我直接说不会)
算法部分:
- 快排求区间第k小
- 01背包
成功苟过一面 没有室友助攻只能硬抗下一面
第二面:
基础部分:
- TCP/IP模型与OSI模型
- 进程与线程的区别
- 进程间的通信方式
- TCP/UDP的区别
算法部分:
- 比较经典的贪心题
- 完全背包
PS: 最后通过了二面,HR打电话说要去北京现场终面,那时候已经拿了pony.ai的offer,加上后面马上要去区域赛所以就鸽鸽鸽了
商汤
PS:在同学内推下,投了北京视觉研究员,因为拿到offer的时间有点晚了,所以最后没去,但是中间的面试过程和面试官超赞!!
第一面:
- 已有两个能生成0到1之间的数,并且这些数是均匀分布的随机生成器,给定一个任意的三角形,如何能在三角形内等概率随机的生成一个点(然后对于多边形呢)
- 给定n*n的正方形,每个点都有权值,有些点是障碍物,问从左上角走到右下角的最小花费
第一面完美通过,超喜欢这个面试官!!
第二面:
噩梦第二面 没问算法 基本上是c++的相关知识
- vector的相关问题
- 面向对象
- emmmm还有一些想不起来 但是答得很糟糕
第三面:
面试官看了简历 聊了聊ACM以及我在队伍内的具体工作 和 平时的学习情况以后 直接问算法:
- 比较裸的二分图 (23333我很少写二分图 差点gg)
- trie树 (???估计看我第一个答的这么艰难 第二题就放了点水)
- 概率dp+AC自动机 (全场面试最硬核的题 给了我一个概率模型 dp转移依赖于AC自动机上的状态)
- 数学题 (好像是log次二分)
PS: 4个题做对了3.5个 完全ojbk 最后给了SP的offer(听说SP+以上的都是顶会大佬)
Pony.ai
PS: 第一次去现场面 第一次现场见WF选手
线上面试:
- 问了vector相关知识
- 二维前缀差分问题 (比较easy)
PS:然后没了 一面过的很轻松 HR通知去广州总部线下面试
线下面试:
PS:因为那天公司下午茶活动 所以我被面了 6轮 超难顶!!!
大概分基础内容和算法总结下 毕竟我基础内容答上来的很少 主要开始记录被问的算法问题吧:
- 树同构问题(众所周知,树的重心不会超过两个 所以分别做树hash去check就能判树同构)
- 后缀自动机相关问题 (为了check我是不是板子选手 基本大致分析了一波后缀自动机 但是你简历上不写应该不会问你的)
- 强连通分量算法 (给了我一个场景 用tarjan算法解决)
- 链表反转
- 积分微分的应用 曲率及曲率半径的推导(2333 保研失败后想过考研 正好把高数给复习了)
- 圆上等概率的选3个点 构成锐角三角形的概率 (现场推导)
- 给定一个链表 执行三类操作:
1
2
3
1
.将链表的权值都修改成x;
2
.链表后面加入新节点;
3
.打印链表(注意 修改不能遍历所有节点 解法就类似于线段树的lazy标记吧)
- 已知有一颗n(n<=1e9)个节点的完全二叉树 每一层编号从左到右以此递增 比如 第一层的节点编号为1 第二层为2、3,现在询问插入的第n+1个节点的父亲的编号 (确定所在层的编号区间 二分答案 然后每次log的复杂度去check合法性)
- 好像还有一些脑洞题和链表题都不太难 记不清了23333
百度 国际事业部(秋招早期投的)
一面:
问题记得不是很清楚了,因为太早了,还有就是很简单。
数据库索引结构
索引用法,优化方法
愿不愿意转IOS
没有撕代码!!!没有撕!!!
二面:
还是没有撕代码。唉。。。
JVM虚拟机内存+回收等
项目
三面:
详细一点的项目。。。。
总而言之,我记不太清了,因为简单,所以。。。。
全是电话面
美团/大众点评 北京数据中心数据平台开发(分布式计算框架开发)
一面(1h+):
这个记得很清楚,因为难得问得很详细。面试官技术不错~
首先是项目,略。
数据库引擎结构、区别
索引底层结构,插入数据索引结构的变化等
索引的优化方法,以及为什么(就是优化底层是怎么实现)
索引使用(优化器如何界定)
数据库几种日志,以及如何刷新,区别
数据库三个线程用处
数据库事务详细(不是指ACID几个性质,就是事务到底是基于什么实现的)
以上数据库部分是我总结的,面试官问的比较浅,但是我讲的比较多,面试官也全部可以接住我的回答继续问。。。妙~~~体验感很好
HDFS数据如何保证不会丢失?
MR详细过程(请注意详细,从RPC开始说)
JVM虚拟机回收机制(两种分析方法->几种算法如何选择->新生代老年代如何分配,特殊情况,具体工作等,还差啥自己补充)
一个手撕代码,忘了,好像是俩。。。。
二面:
30~40min
由于前面问的过于详细,,这面面试官问的,比较少。。。。
设计一个数据系统
手撕八皇后
三面:
这是加面,leader面
分布式存储系统和分布式计算框架区别
Spark MR区别
MR和HDFS架构(画出来&说出来)
YARN容错机制
HDFS数据本地性等。。。
四面:
介绍公司培养机制,瞎聊。。。。
shopee 新加坡 后端(服务器)开发(搜索以及竞价排名)
一面:
详细的数据库,没美团细,可以参考一下美团
导入大文件到HDFS如何自定义分片
手撕不记得几道代码(不难,偏实践)
二面:
手撕代码(LRU)
数据库各类索引底层一遍
设计一个服务器(此处应有阻塞IO和Reactor模式出没)
项目
三面:
leader面
只读业务数据库,如何尽量快将修改的数据同步到HDFS
MR详细过程(没说完,嗯。。。)
再一次设计服务器
多线程为什么对CPU有负载压力
聊天。。。
英特尔 云计算开发,上海(面完没有hc了,就酱~)
一共四面(一个部门两面),瞎聊,手撕简单代码。
被拉去面了俩部门,面完后告诉HR对SSP感兴趣去,,然鹅。。。。
华为
并不考虑……
一面:
不难,手撕一个代码(居然是暴力解法,,我难受了。。。)
二面:
手撕一个代码。
JVM虚拟机
synchronized和Reentrantlock底层,(PS:最好底到硬件)
还是不难
三面:
leader面
项目+瞎聊
华为小鱼干不错,都是a评级最后给了我白菜
我。。。。。反手就是拒了
/*
*********************************************************
问题来了,请听题
*********************************************************
*/
百度 国际事业部
美团/大众点评 北京数据中心数据平台开发(分布式计算框架开发)但是据说今年薪资,十分玄幻。反正我现在也只有调查电话。。。
shopee 新加坡 后端(服务器)开发
操作系统基础
• 进程与线程的区别和联系
• 一个进程可以创建多少线程,和什么有关
• 一个程序从开始运行到结束的完整过程(四个过程)
• 进程通信方法(Linux和windows下),线程通信方法(Linux和windows下)
• 文件读写使用的系统调用
• 怎么回收线程
• 守护进程、僵尸进程和孤儿进程
• 处理僵尸进程的两种经典方法
• 进程终止的几种方式
• linux中异常和中断的区别
• 一般情况下在Linux/windows平台下栈空间的大小
• 五种IO模型
• 守护进程
• 程序从堆中动态分配内存时,虚拟内存上怎么操作的
• 交换空间与虚拟内存的关系
• 堆和栈的区别;从堆和栈上建立对象哪个快?(考察堆和栈的分配效率比较)
• 内存泄漏和内存溢出
• 常见内存分配方式和错误
• 堆内存和栈内存的区别
• 可重入函数和可重入内核
• 操作系统动态内存分配的几种策略
• 内部碎片和外部碎片
• 系统调用进入内核态的过程
• 内核态和用户态的区别
• 常见的进程调度算法以及linux的进程调度
• 中断、陷阱、故障和终止
• 进程通信方法
• 线程互斥和同步的方法
• 内存对齐的规则和作用
• 页面置换算法
• 实现一个LRU页置换算法(或者FIFO置换算法)
• 死锁的必要条件(怎么检测死锁,解决死锁问题),银行家算法(死锁避免)
• 哲学家就餐,读者写者,生产者消费者(怎么加锁解锁,伪代码)
• 海量数据的bitmap使用原理
• 布隆过滤器原理与优点
• 布隆过滤器处理大规模问题时的持久化,包括内存大小受限、磁盘换入换出问题
网络基础
• 网络的几种分层体系结构
• 建立TCP服务器的各个系统调用
• socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?
• MTU和MSS
• 对路由协议的了解与介绍
• 路由协议所使用的算法
• 路由表的项目包括哪些
• 地址解析协议ARP的过程
• 网际控制报文协议ICMP的过程
• 动态主机配置协议DHCP的过程
• WAN LAN WLAN VLAN VPN的区别
• 介绍一下VPN(虚拟专用网)
• TCP和UDP的区别
• TCP如何保证数据的正确性
• TCP和UDP相关的协议与端口号
• TCP(UDP,IP)等首部的认识(http请求报文构成)
• 网络层分片的原因与具体实现
• TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)
• TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)
• 为什么使用三次握手,两次握手可不可以?
• TIME_WAIT的意义(为什么要等于2MSL)
• 超时重传机制(不太高频)
• TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?
• 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?
• TCP滑动窗口协议
• 拥塞控制和流量控制的区别
• TCP拥塞控制,算法名字?(极其重要)
• 网页解析的过程与实现方法
• 应用层协议常用的端口号
• http协议与TCP联系
• http/1.0和http/1.1的区别
• http的请求方法有哪些?get和post的区别。
• http的状态码
• http和https的区别,由http升级为https需要做哪些操作
• https的具体实现,怎么确保安全性
• 在浏览器输入一个URL的流程,这个过程中浏览器做了什么(如www.baidu.com)
• URL包括哪三个部分?
• 长连接与短连接的区别以及使用场景
• 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?
• 介绍一下ping的过程,分别用到了哪些协议
• 对称密码和非对称密码体系
• 数字证书的了解(高频)
• 客户端为什么信任第三方证书
• RSA加密算法(非对称加密,用公匙和私匙实现);
• MD5原理(MD5是密码散列函数)=> SHA安全散列算法替代
• 单条记录高并发访问的优化
• 数据流和粘包问题
• 一台机器最多可以建立多少tcp连接?
• 五种IO模型的过程和比较
• IO多路复用(select,poll,epoll的区别)
• 有没有抓过TCP包,描述一下
• 一个ip配置多个域名,靠什么识别?
• 服务器攻击(DDos攻击)
• 重放攻击,IP欺骗
Linux相关
• Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别(超级重要)
• 文件系统的理解(EXT4,XFS,BTRFS)
• 文件处理grep,awk,sed这三个命令必知必会
• IO复用的三种方法(select,poll,epoll)深入理解,包括三者区别,内部原理实现?
• Epoll的ET模式和LT模式(ET的非阻塞)
• 查询进程占用CPU的命令(注意要了解到used,buf,cache代表意义)
• linux的其他常见命令(kill,find,cp等等)
• shell脚本用法
• 硬连接和软连接的区别
• 文件权限怎么看(rwx)
• 文件的三种时间(mtime, atime,ctime),分别在什么时候会改变
• Linux监控网络带宽的命令,查看特定进程的占用网络资源情况命令
数据库基础
• 关系型和非关系型数据库的区别(各自优点)
• 常用SQL语句(DDL,DML,DCL,TCL)
• 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写
• 数据库的索引类型
• 聚集索引和非聚集索引的区别(叶节点存储内容)
• 唯一性索引和主码索引的区别
• 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)
• 索引的底层实现(B+树,为何不采用红黑树,B树)
• B树和B+树具体实现
• 索引最左前缀问题
• Mysql的优化(高频,索引优化,性能优化)
• 数据库引擎介绍,Innodb和Myisam的特点与区别
• 数据库中事务的ACID(四大特性都要能够举例说明,理解透彻,比如原子性和一致性的关联,隔离性不好会出现的问题)
• 数据库隔离性设置不同会出现的问题(脏读、不可重复读、丢失修改、幻读)
• 数据库的隔离级别,Mysql和Oracle的隔离级别分别是什么
• 数据库连接池的作用
• Mysql的表空间方式,各自特点
• 分布式事务
• 数据库的范式
• 数据的锁的种类,加锁的方式
• 视图的作用与使用方法(如何删除等)
• 分库分表,主从复制,读写分离。(我不会,也没碰到过)
• 项目中哪里用到了数据库,怎么用的
• Memcache和Redis了解
大数据和分布式
• Hadoop框架下,各个组件的构成及作用
• BASE原则,CAP原则
• 一致性算法Raft的过程
• TIDB原理
• HBase的存储原理
• HDFS运行原理
• Hive的了解
• Spark的了解
• 介绍熟悉的设计模式(单例,简单工厂,观察者模式等等)
• 写单例模式(饿汉模式和懒汉模式),线程安全版本
• MVC设计模式