最新BAT的实习面经

一、今日头条:后台开发面经

一面,比较基础

1. 自我介绍

2. 实习经历

3. HashMap

4. 堆排,建堆的时间复杂度,O(n),为什么是这个,我忘了公式怎么推的了

5. 完全二叉树和满二叉树的概念和区别

6. 数据库:事务的概念,索引,B+树讲了一下。可能我回答的太不规范,然后也说了自己忘了数据库的知识了,于是就没往下问

7. TCP 和 UDP 的区别,为什么是3次握手,4次挥手。4次挥手就是为了等待由一方还没传完,才有四次。

8. 编程题:建堆过程

9. 编程题:最小栈:在O(1)的时间复杂度内返回栈的最小元素。思路:两个栈,一个栈模拟普通的push、pop,getMin() 操作,一个栈用于存储最小值序列。

10. ArrayList和LinkedList的区别

二面:

1. JUC听过吗,java.util.concurrent的缩写。。。哭了,我说没听过,能不能不要什么都用缩写啊。。。。

2. 知道哪些垃圾回收器,CMS的优势在哪。。。哎,真的是看过就忘啊。。。。

3. 不可变类,机制,实现原理。完全不知道。

4. 红黑树的特性,面试官说红黑树不是二叉搜索树,我怀疑人生了。

5. 编程题:数组中除了两个数,其他树都出现偶数次,找出这两个只出现一次的数。二面我就答上来这一道题,哭惹

6. 编程题:二叉树转双端链表

二、前端

一面:

  1. 业务方面的知识
  2. ssr和前后端分离的区别
  3. h5兼容问题
  4. list的无限滚动---节流
  5. 处理跨域的方法
  6. http缓存的了解--强缓存和协商缓存
  7. css中垂直居中
  8. align-center中ios8的问题-webkit-align-item: center
  9. rem的理解
  10. 算法:数组中map和reduce,如何用reduce实现map
  11. 算法:打平数组和规定深度的打平数组

二面

  1. ssr的优点
  2. vue@3.0中的preset配置?
  3. 父组件A和其子组件B/子组件C,B/C进行通信的方式
  4. 组件中eventbus的实现
  5. 组件如何设置并被使用
  6. 如何来创建多个项目?
  7. 多个组件$message如何实现最后触发的在最上面
  8. 如何实现在图片被加载之前的占位符一个image,宽高比16:9
  9. H5中边框为1px的设置
  10. 多行或单行省略
  11. div 和div > div > div的优先级
  12. 动画相关
  13. post和put的区别是什么?
  14. Cookie中的操作以及httponly
  15. 重绘和重排
  16. js1

function a() {this.b = 3}

var c = new a();

a.prototype.b = 9;

var b = 7;

a()

console.log(b)

console.log(c.b)

17.js2

setTimeout(()=>{

setTimeout(() => {

console.log('console1');

}, 0)

console.log('console2');

setTimeout(() => {

console.log('console3');

}, 200)

})

setTimeout(() => {

console.log('console4');

}, 200);

console.log('console5')

18.算法题

给定一个字符串如下,请统计字符串中出现最多的字母和次数

三、后台开发

一面:主要问了一些网络、数据库、操作系统的题

  • 开始先自我介绍,手写算法还是比较简单的:给了未来一周股票价格,求什么时候买,什么时候卖能赚最多

之后开始问一些基础问题

网络:

  • OSI七层模型
  • TCP三次握手
  • HTTP报文 method有哪几种 分别简单解释
  • cookie

数据库:

  • 数据库特征ACID 各代表什么 简单解释
  • 数据库索引 B+树B树特征
  • 事务隔离级别

操作系统:

  • 线程进程(感觉这个几乎是必考的)
  • 按ctrl+c,操作系统怎么工作
  • 说明几种IPC

之后看简历上面有写爬虫经验,问了爬虫的很多问题,比如如何爬取需要登录账号的页面,如果爬取过程被限流怎么办等等

然后又谈了谈以前的项目,网站怎么搭建的,数据库怎么实现的,怎么操作等

二面:

二面就写了两个算法题

1.给一个字符串str,打印出这个文件夹的文件结构(参考linux命令tree)

用一个递归能写出来

2.给一个有序序列,又给了这些数字两个数字在一起的分组,调整后必须使得一个组的两个数字挨着,最少交换几次数字

这个到最后也没写出来,然后二面告诉我说也是用递归实现

三面:

(没想到我一个下午连着三面。。。)

我的三面是一个大佬。。他真的让我意识到了自己有多菜。。。。还有好多要学习。。。

  • 看到我写了Django,让我说一下网站有了request之后怎么工作,怎么产生一个response
  • 看到写了Redis,让我说了一些不常用函数的应用。。
  • 看到我大学是安全专业,问了密码学块加密的的两种方法比较。。
  • 还有比如数据库范式等等
  • 然后算法,设计一个开根号的函数,我当时想到了二分法,面试官还是比较满意的,问还有没有别的方法,我说想不到了。。
  • 之后又问了些生活上的,比如最近看什么书,比如最近遇到的最大挑战等等

四、后端

3月5日视频一面(50min)

  • 自我介绍
  • 编程题:二叉树,经过root节点的的最长路径
  • 怎么判断能用的栈的大小?
  • vector怎么增长、map的底层数据结构
  • 红黑树和平衡二叉树的区别
  • map怎么循环删除满足特定条件的元素
  • 快排的复杂度
  • C++的多态
  • 多线程与多进程的区别
  • TCP的四次挥手
  • TIME_WAIT,为什么是2msl
  • select和epoll的区别
  • epoll的ET和LT模式
  • epoll的ET怎么保证读完所有的数据
  • 一百台服务器怎么生成全局唯一的订单号? 服务器id、时间戳、递增值、随机数

3月7日视频二面(1h30min)

  • 没有自我介绍
  • 一个空类是多大?加上一个成员函数?加上一个静态成员函数?加上一个静态成员?加上一个虚函数?
  • C++要自己管理内存,要怎么避免内存泄露?
  • 智能指针是否是线程安全的?
  • 是引用计数不安全还是对象的修改不安全?
  • 一个客户端通过Tcp最多能连接多少个服务端?
  • 一个服务器最多能接受多少个客户端的Tcp连接?
  • 什么是拥塞控制,什么是流量控制?
  • 滑动窗口为0怎么办?
  • stl的vector的push_back迭代器会怎样?list插入元素呢?map呢?
  • 一个很大的文件,内容是用空格隔开的字符串,怎么算出其中有多少不同的字符串?
  • 一个进程有十个线程,主线程fork一个子进程,子进程有多少个线程?
  • Reactor模式和Proactor模式的区别?
  • 编程题:一串数字,用五个星号分隔成六段,每段的数值大小不可以大于600,打印出所有可能的结果

3月11日电话三面(20min)

  • HR的设备有问题,所以就电话面了
  • 前两轮面试给自己打分
  • 两轮面试总结
  • 喜欢那个面试官的风格
  • 印象最深的一个项目
  • 其中的困难,怎么解决
  • 有什么事情是你百分之百投入的
  • 说我语调很平,感觉没什么激情。。。
  • 同学对我的评价
  • 最欣赏的一位同学
  • 实习时间
  • 还有什么问题要问的

五、抖音产品运营(日常实习)

面试时间:一面业务面,大概持续了45分钟;二面是交叉面试,大概20分钟;三面HR面大概20分钟。

面试官:很和蔼、平易近人的小哥哥

面试问题:

1.自我介绍

2.谈谈你上一段的实习经历

3.说一说你上一段实习经历中从头至尾负责过的某一业务

4.你觉得在产品推广中遇到过的最大的困难是什么?你是怎么解决的?

5.针对你上一段实习中的产品谈一谈怎样选择目标用户?为什么要使用这个维度的数据?

6.对抖音的电商有何看法?

7.如果让你作为一个KOL的话,选择怎样的风格进行营销?

其他问题有些记不清了,面试官会根据你的回答进行深入的交流和讨论,所以在回答的时候也尽量要实事求是,不然会给自己挖坑。

总结下来,面试主要是针对简历的细致挖掘,你上一段实习中的经历一定要特别熟悉,包括某一数据的选择等待。

在关于解决方案类的问题的时候重点不是给出某一解决方案而是要具备相应的逻辑思维。

六、前端

一二面都是远程视频面试,在牛客网上,可以在线撸代码,面试官能实时看到, 考得比较基础,都是写过的。 一面面试官是个小姐姐,人挺好的

  • 有没有使用过css3动画,介绍一下,怎么做,关键是怎么做的CSS
  • 单行文本溢出,多行文本溢出把代码实现写出来
  • bfc布局是什么
  • js类型,封装一个类型鉴定函数
  • 闭包,平时在哪用到? 立即执行函数解决闭包中访问变量的问题
  • 事件轮训机制
  • 原生js实现bind函数
  • 一个函数,然后让你说他们的值是多少,为什么,预编译,严格模式,作用域链
  • 算法 快拍 选择排序
  • 浏览器渲染原理 二面
  • 实现一个构造函数 new的时候每次加一
  • 计算机网络tcp与udp区别, tcp拥塞机制, tcp三次握手, 四次挥手
  • react setstate为什么是异步的
  • react 性能优化
  • 知不知道css性能优化

七、商汤一面:

  • 上来自我介绍,问项目,Redis是怎么实现消息队列的,数据结构,缓存是怎么实现的。
  • 垃圾回收算法 ,分别怎么用,优缺点
  • JVM运行时内存模型
  • GC Root
  • 垃圾收集器
  • String和StringBuffer 和StringBuilder 的区别
  • LinkedList 和ArrayList的底层实现原理
  • list为什么事有序的,set为什么都是无序的
  • Concurrent HashMap的实现原理
  • 多线程相关的很多
  • Springs事务
  • mysql查询优化
  • 线程的单例模式
  • 红黑树

八、今日头条一面:

  • 上来自我介绍,介绍下项目
  • 来撸代码(我:能不能问下基础,面试官:不行,这个我说了算),三个代码题
  • 二叉树的层次遍历(按层输出,不是一行全部输出)
  • 海洋,陆地的题目
  • TOP K问题

九、盛大游戏: 1 springboot 依赖注入的方式 2 spring AOP IOC的原理 3 spring 事务 4 spring中用到哪些设计模式 4 HTTP 和HTTPS的区别 5 get 和post的区别 6 输入一个url到网站经历了哪些步骤 7 三次握手和四次挥手 8 接口和抽象类(什么时候用接口,什么时候用抽象类) 9 继承,封装,多态 10 ArrayList和Linklist的区别 11 HashMap和concurrentHashMap的区别从currentHashMap底层是用什么锁实现的(可重入锁) 12 voliate和synchronized的原理 13 多个线程如何取到一个数据 14 JVM内存模型 15 GC-ROOT 16 新生代和老年代的回收算法(什么时候是标记清除,什么时候标记整理,什么是复制算法,各有什么优缺点) 17 servlet的生命周期 18 数据库有哪几种索引 18 索引的数据结构(B+树) 19 重载和重入的区别 20 Redis(String是如何插入到Redis) 21 有十亿个数据,如何取出十万个 22 你有什么问题想问我的 23 cookie和session的区别 24 项目有几个表![图片说明]

十、微博 1.hashMap的底层实现原理 2.线程池 3.Http请求头 4 .TCP 三次握手 5 .Java的启动参数 6 .Java常用的工具类 7.JDBC的事务 8.数据库的组合索引 9. 悲观锁和乐观锁 10.快速排序 11.基本的排序算法有哪几种,时间复杂度怎么样 12.聊一下cookie和session,怎么储存的,怎么设置过期时间,session里有啥 13.Spring框架熟悉不,AOP的原理,动态代理哪几种,区别,有关的反射类讲一下 14 .Request请求头里具体的字段,有什么含义 15.Token 16.数据库索引了解不,最左前缀原则,行锁,表锁,行锁,间隙锁,怎么实现的,语句 17.Jar包后面跟的参数 GC参数 18 springboot的事务

十一、海康

  • Spring 事务,
  • 单例模式,怎么写,
  • hashMap hashtable
  • 继承,多态,
  • spring aop,怎么实现aop,怎么写
  • 如何求二叉树的叶子节点!
  • JDK和jre的区别

十二、BAT中的一个 1.介绍一下项目 2.String 和StringBuffer和StringBuilder的区别 2.Map,HashSet(HashMap底层数组默认长度,如何扩容,concurrentHashMap如何实现分段所)看源码。 2.ArrayList和LinedList的区别 3.双亲委派(JVM) 4.synchronized关键字底层原理 5.synchronized和lock的区别 6.SpingMvc的一个原理 7.数据库的一个优化 8.数据库的两个引擎的区别 9.Redis里面hash和Java里面的Hash的区别。

十三、爱奇艺大数据开发岗位 一面: 1. Spark Streaming项目的流程,对接kafka的两种方式 2. Spark Streaming的工作原理 3. Spark 的工作流程 4. Spark Streaming中的batch如何实现的 5. Sqoop的调优参数与工作原理 6. bulk load的原理 7. java中object的方法有哪些? 8. java创建线程的方式有哪些? 9. hashcode和equals方法 10. HashMap的实现原理 二面:

  • 介绍项目
  • 介绍设计模式,手写单例模式,优化代码
  • 手写二叉树的中序遍历的非递归方式
  • 大数据岗二面凉了,又收到了爱奇艺后台开发岗的面试通知,当时面完之后问我什么时候能到岗,下学期(大三下)可以吗?我说可能要和老师商量下, 面试官说你们没课吗,我说有但是不多,不是专业课,然后面试官:“你翘课吗?”。。。。然后没有收到通知。 十四、阿里云大数据岗(30分钟) 1.介绍项目。 2.说说Spark Streaming实时处理数据的链路 3.Spark Streaming与kafka的两种集成方式与优缺点。 4.谈谈对Hadoop与Spark的理解。 5.说说Hive与HBase的区别 6.说说Hive的底层原理 7.HBase的底层原理 8.MapReduce的原理。 9.谈谈对Kafka的认识,Kafka的分区分配算法。 10.HBase的使用场景。 11.谈谈NoSQL。 12.UDAF与UDTF。 13.说说数据倾斜,以及发生的原因,如何解决。 14.说一下java集合类,说说HashMap的原理。 15.谈谈JDBC底层原理。 十五、同程艺龙
  • 说一下熟悉的数据结构以及操作。
  • 给定一个表达式,使用什么数据结构来计算。
  • 二叉平衡树
  • 二叉树的后序遍历
  • 虚拟内存的理解,分页式,分段式,段页式。
  • 系统的调动方式,动态链接以及静态链接。
  • 读写磁盘的原理。
  • TCP的状态,三次握手。
  • HTTP状态码。
  • java重写与重载。
  • java锁的实现机制。
  • java线程的启动方式
  • java的基本数据类型。
  • C语言的static,char*++与long*++。
  • java的String类型,StringBuffer与StringBuilder。
  • Servlet的生命周期以及如何接受客户端请求。
  • java并发包的常用 接口以及类。
  • ConcurrentHashMap的实现原理。
  • 说说对数据库的理解。
  • Mysql如何实现SQL查询的。 面完之后问我了解他们公司吗?以后意向工作城市,然后又没有女朋友,我说有(其实没有,当时脑袋秀逗了,说错了),然后问你女朋友啥专业,是不是和你一个专业,以后考研还是工作,家在哪里,接着问我是不是独生子女,父母在干嘛(第一次遇到这么问的,感觉挖户口了??)。

十六、阿里云后台开发

  • 说说你最拿手的一个项目
  • 怎么查看消失的一个进程
  • Set和List的区别
  • 打印GC日志
  • JVM GC的过程。
  • 进程和线程的区别
  • 死锁的条件以及预防死锁。
  • ARP协议。
  • 局域网,城域网,广域网
  • 线程池
  • 说说mybatis

十七、阿里云数据研发中心:大数据岗位,80分钟。 主要问了一些开放性的问题,比如:

  • spark为什么使用scala开发
  • Flink和spark的区别
  • Spark源码,源码中给你印象最深的是哪部分。为什么要读源码,从源码中学到了什么
  • 前面的部分感觉说的还可以,接下来又问了两道java并发的场景题,没回答好(当时以为不会问基础,忘了没复习并发知识)。
  • 最后两道DP算法。

十八、阿里菜鸟 一面(50分钟):

  • 一分钟自我介绍。
  • spark项目的难点。
  • spark的执行流程。
  • 如果worker节点宕机怎么办,如果在处理任务呢。
  • Posix算法,如果同时选举出两个leader怎么解决。
  • Kafka的数据怎么存储以及存储结构。
  • kafka里面为什么使用会有partition数据结构,这样做有什么好处。
  • ConcurrentHashMap的底层原理。
  • 说说红黑树,HashMap中为什么用红黑树不用平衡二叉树。
  • 快速排序。

二面 然后进行了菜鸟二面(40分钟),全称聊项目,最后一道分布式场景设计题 十九、腾讯面经:

  • 数组和链表的区别
  • 使用java语言如何创建单向链表。
  • 反转链表。
  • 找出两个字符串中的公共最长子串。
  • 找出一个整数数组中出现次数最多的数。
  • 判断一个字符串是不是两个有序的字符串交错组成的。
  • 怎么判断链表是否有环。
  • 说说动态规划。
  • 知道哪些排序算法,桶排序知道吗。
  • 给定一个数组,如何建立一个最大堆。
  • hashmap的实现原理。
  • 进程和线程的区别。
  • 线程死锁。
  • 进程的通信方式。
  • TCP三次握手。
  • NAT 局域网中的一个ip怎么访问外网。
  • HTTP状态码
  • 浏览器输入一个网址到服务器请求的过程。
  • 有哪些HTTP服务器。
  • nginx和Apache服务器的区别。
  • C++中引用和指针的区别。
  • 什么是内存泄漏。
  • java中Object类中有哪些方法。
  • wait和notify方法为什么加同步锁。
  • 知道哪些字符编码,解决了哪些问题,详细说明UTF8编码。
  • java中有哪些锁,说说自旋锁。
  • java的引用类型

二十、头条测试开发

一面(视频)

  • 算法:url反转 例如将www.baidu.com转化成www.udiab.moc
  • 网络:TCP三次握手、TCP和UDP的区别
  • linux操作:如何查找出现频率最高的100个ip地址
  • http和https的区别
  • 数据库:我不会。。。面试官也没问了
  • 输入url后都发生了什么

二面(3个面试官)

面试官1

  • 手写strcat函数和strcmp函数
  • 手写智能指针类,智能指针有关问题
  • static变量的作用域
  • 三次握手、TCP的流量控制拥塞控制、TCP如何保障可靠性传输

面试官2(说是开发加面)

为什么投了测开?(我说了实话,我确实是对头条的中台感兴趣,不过该面试官马上告诉我,头条只做业务,中台emmmmm) 介绍项目和项目中遇到的难点问题。

面试官3

  • 代码:手上一副牌12345....M,先放1张(1)到桌子上,然后把下一张(2)放到最后(M后);再放一张(3)到桌子上,然后把下一张(4)放到最后......求手上没有牌的时候桌子上的牌的顺序。(我选择用递归去做,面试官说可以不用递归,但是我个人感觉递归解释比较清楚)
  • 7层结构和各自的协议
  • DNS解析过程
  • 发挥题:如果某地区的客户表示视频业务出问题,要怎么排查?
  • 设计题:设计log类,保证线程安全

三面(交叉面)

  • 代码题:字符串去驼峰处理 例如aba输出b,abcba输出c......分析时间复杂度
  • 网络层都有哪些协议,区别是什么,各自是做什么的
  • 数据链路层都有哪些协议,区别是什么,各自是做什么的
  • 聊项目和项目出现的问题

二十一、头条测试开发

一面 首先自我介绍,大概问了一下项目,然后就是java的问题了 1 接口和抽象类的区别 2 arraylist和linkedlist区别,用途 3 map set区别和用途 4 序列化和反序列化怎么回事 5 封装 继承 多态解释一下 6 一个算法题,不是很难,具体不记得了 7 微信点赞测试 8 反问 过了不到一个小时 二面 1 自我介绍,项目介绍 2 从输入网址到关闭窗口发生了什么 3 tcp链接之前具体发生了什么 4 四次挥手是怎么回事,为什么四次 5 一个手机小程序,只能输入1-100的数字,还有一个提交按钮,设计测试用例 6 算法题,很简单的,给一个有正有负的数组变成正负交叉的,并且不改变相同符号数字的相对顺序 7 反问 隔了一天 三面 1 了解公司哪些产品,说说不足 2 设计抖音点赞测试 3 怎么做弱网测试

划重点:面试常问的东西和流程 1.自我介绍,介绍一下你的项目(项目不行的下面的要复习好) 2.Java基础(面向对象原理,String 和StringBuffer ,StringBuilder的区别) 3.集合(属于Java基础,集合问的很多,源码要熟悉,大家都会HashMap和 Concurrent HashMap的区别,你能说出大家不会的吗,底层的锁是怎么实现的,JDK1.8之前和JDK1.8之后的数据结构,看看源码,要透彻) 4.JVM(运行时数据区域(与JMM的区别),GC root,新生代垃圾回收算法,老年代垃圾回收算法,新生代又分什么,垃圾回收机器(CMS,G1),类加载机制(双亲委派等等))--深入理解Java虚拟机 5.并发编程(synchronized的底层实现原理,JMM模型,volatile与synchronize的区别,synchronize与lock 的区别,wait和sleep的区别,悲观锁和乐观锁,CAS(ABA问题怎么解决),并发容器了解哪些,线程池相关参数)---Java并发编程的艺术 6.框架(spring相关的AOP,IOC等等,spring问的很多,基本都问spring)--Spring实战 7.网络(HTTP和HTTPS的区别,TCP/IP,三次握手和四次挥手,get和Post,短地址,从浏览器输入网址的过程,TCP 和UDP的区别等等)--计算机网络第六版/自顶向下 8数据库(索引的底层数据结构,B+树怎么实现的,索引的分类,数据库的事务(ACID),隔离级别,MySQL引擎的区别,Redi数据结构,缓存,消息对列)---高性能MySQL/Redis设计与实现 9.来写两个代码(有的有,有的没有) 9.你还有什么相问的(我觉得我这次面试表现不好,你能给我一些意见吗)

强烈不建议只看面经,只看博客,这样你复习没有章法,知识浮在表面,看书,看书,最好的,看书结合博客,所有的面经都一样,无非就那么些东西,看了书,再看面经,事半功陪,只看面经,你永远停止不前,底层原理不懂,永远不会进步

原文发布于微信公众号 - 好好学java(SIHAIloveJAVA)

原文发表时间:2019-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券