校招面经
Created at 2020-01-20 Updated at 2020-09-28 Category 面试 views
百度
一面
一面面试官人真的很好,我项目介绍这块真的太垃圾了,他都叫我慢慢说,画张图理清思路,我画完图说了一遍他都觉得我这个项目没啥特点,他就随便问,好多地方我就是没过脑子随便乱说,他就说我不能这么说,面试完了他还跟我说了很多建议,说我学一个东西不能就随便学一下,要去了解他的原理,还说很多中小型企业的人,都是停留在写业务代码的阶段,写个十几年都跟两三年没什么区别,哎。一共聊了一个多小时,估计我是他最后一个面试的人他也不着急,有时间就多说会儿吧。
- 自我介绍,介绍项目
- 项目中es的使用,写了一条sql语句,让我转换为es
- 项目的难点
- 在项目中学到了什么
- 定时发送邮件怎么实现的 我说框架里的,但是最终会转换为 shell 脚本,他问我 crontab 用过吗,我。学过,没怎么用,我就记得他那个分时日月周
- 队列怎么实现的,除了 redis 有用过其他的队列吗 我,没用过,知道一点,比如 RabbitMQ 他问我,RabbitMQ 又是怎么实现队列的呢
- redis 有什么特点
- zset 怎么使用
- 数据库中什么时候要建立索引
- 乐观锁和悲观锁,读锁是乐观锁还是悲观锁
- mysql 主从复制
- binlog 里存的是什么
- 项目中数据库的量级多少 我脑袋一片空白,说了句不大,他说我不能这么说。
- tcp 和 udp 介绍一下
- 进程间通信的方式,并说出每一种的特点
- 大小堆了解吗 用在什么地方
- linux 内存泄漏怎么解决
- c 语言学的如何
- 算法 链表中倒数第k个节点,只能遍历一次
- 算法 跳台阶
- 单元测试了解吗
- 在生活中和别人遇到冲突怎么解决
- 觉得自己的表现怎么样
- 给我提了一些建议
- 有什么想问他的
二面
二面面试官拿到我的简历看了几秒就在笑,我???,他说你这怎么是群众,我,没交团费吧,我也不知道是团员还是群众了,反正不入党都一样,他说,24岁以后没入党才会变为群众,或者没交团费,幽默的面试官~
- 又是介绍项目,我巴拉巴拉说完了,他。。啥也没问,估计他觉得这项目太没意思了
- redis 里的数据结构 zset 底层是怎么样的
- 链表怎么插入和删除
- b+ 树是怎么样的
- b+ 树的根节点是怎么存放索引的,我。。不知道,瞎扯了半天开始说聚簇索引非聚簇。。。他又笑我然后不问了
- nginx 和 php 怎么通信的
- tcp 和 udp
- linux 问一个日志文件里,每行都是 key=xxx,如何计算出每一种key的数量,我在纸上先写了gerp。。然后写了个awk。。我是真不会写。他就说我用grep但是不知道xxx是什么,所以要先得到xxx,我说用awk,awk可以得到第几列的字段,但是他怎么写我忘了,反正能这么做,他说好,可以。那么得到以后如何去重呢,我想了会儿,说linux应该是有一个命令去重的,看过来着,他说有,但是我可以用别的方式,我就说,那php就是放到数组里,然后用一个函数去重吧。ok。
- 他盯着我的简历,说,诶,发现一个有意思的了,然后又问我es。 match 和 match_parse 有什么区别,match 和 term 有什么区别。
- 算法 反转二叉树
- 算法 接雨水问题 哎,这个我看到过但是不记得怎么做了,临时想了半天给他解释了好久思路,最后他认可了,说了句挺聪明,然后就结束面试了,然后我就被小姐姐带走,小姐姐告诉我出门左转
奇安信
不想吐槽这个辣鸡公司,0好感,面试觉得自己像个犯人被拷问。后来又被拉起来面了一次,那次的一二面面试官态度都不错但是没问什么东西,最后开价太低拒了。
- Mvc 解释
- 面向对象
- 单例模式
- 闭包
- yield
- Self 和 static 区别
- MySQL int 类型可以存多大的数字
- Linux 命令 crontab ps
- Xss csrf
- Redis 怎么查看内存占用
- rdb aof,rdb 磁盘上怎么写
- Redis 数据类型
- 32 位是多少字节
- Nginx
- Php 怎么起一个进程后台运行
- Php 怎么返回一个状态码
- Curl 怎么用的,怎么得到状态码
- Php 怎么下载扩展
- Redis 内部结构动态字符串
- Redis 过期策略:惰性过期和定期过期
- nginx 禁止访问目录
- git 撤销暂存
美团 2019/12/31
转 Java 后的第一面,开头就跟面试官说我学 Java 才两个多月。。然后他问了挺多 Java 的问题,好多我就说没学到,最后他问我在不在北京,下周去现场面。然后两天后又告诉我没 hc 了。
- 介绍项目
- 分布式锁的实现
- 分布式锁过期解决
- 分布式数据库主从复制
- 前缀树是什么 前缀树的使用场景
- MySQL 死锁发生的原因和解决
- MySQL 分别建立索引 a,b,c 语句
select ...where b=x,c=x,a=x能不能用到索引,建立联合索引能不能用到,a=x,b>x能不能用到,用到几个索引 - B 树和 b+ 树的区别 b+ 树的优点
- MVCC 怎么实现的
- Linux cpu 满了怎么排查
- 怎么查看占 cpu 最多的线程
- Linux 怎么搜索文件中的字符串,写到另一个文件中
- liunx 网络相关命令
- Java == 和 equals
- Java contentMap 线程安全怎么实现
- 哈希冲突解决的方法
- Java 异常
- Java 类加载
- 什么是泛型 泛型的使用场景
- 面向过程和面向对象
- 多态 父类如何调用子类的方法
- 单例模式的用途 静态内部类实现单例模式的方式
- 工厂模式的用途
- 策略模式的用途
- Get 和 post 请求的区别
- 网页请求的整个过程
- 说说自己的优缺点,对缺点的改进
字节跳动
最想去的公司,没想到投简历后不到半天就约面试了,1.5 号约的 1.16 又被我改到 1.19。一面结束的时候以为自己凉凉,因为算法题没想出来,没想到第二天 hr 约了年后二面。
一面 2020/1/19
- 介绍项目
- 分布式锁的实现 如果判断锁是不是自己的(value = 线程 ID来判断,面试官说线程 ID 不可以,问我线程 ID 长啥样, 不知道,你们实际用的是什么,记不清)
- java 有什么数据类型
- float 和 double 分别占用多少字节
- java 有哪些集合 map 有几种
- hashMap 怎么实现的
- hashMap 怎么插入的,只是插入到链表不会变吗(大于8变成红黑树),怎么哈希的,怎么扩容的
- ConcurrentHashMap 怎么实现的,分段锁怎么实现的
- 数据库 索引怎么实现的 为什么用 b+ 树
- b+ 树为什么左右节点用指针连接 我:b 树没有左右指针需要中序遍历 面试官:什么时候需要中序遍历
- 为什么二级索引存主键 ID 不直接存数据位置
- sql 语句怎么执行的,比如 select
- 索引覆盖是什么
- tcp 如何建立连接
- 为什么三次握手 第二次握手后没有回复会怎么样 重发 会一直重发吗,我:有一定次数(不确定)
- tcp 怎么保证可靠性
- 拥塞控制的详细过程 在现代网络环境中,拥塞控制有什么问题
- 设计可靠 udp
- 如何判断一个字符串是否合法,括号配对问题,如 (() 非法
- 时间复杂度 空间复杂度(我用栈 O(n))
- 空间复杂度优化(用变量计数)
- 如果 * 可以代表 ( 或者 ) 或者空怎么做 原题链接
一面 2020/2/3
哦,面完才知道,我重来了一次,这又是一面。小哥哥挺年轻的人也挺好的。
- 介绍自己在项目里做了啥
- 分布式锁
- 面向对象的特性 多态怎么实现的
- 三次握手的过程,为什么需要第三次
- 滑动窗口是什么,干什么用的
- tcp 和 udp 的区别
- mysql 数据库事务的隔离级别
- 事务隔离级别的实现
- mysql 有哪些锁,如何加锁
- 单例模式代码实现,还有其他方式吗。 静态内部类,枚举
- 找出链表的第一个公共节点
- 二叉树的公共祖先
- 不用递归怎么做
- 面试官提示:找到根节点到目标结点的路径(与剑指 offer 同思路)
- 找到两条路径后转化为找链表第一个公共节点,写出找路径的代码
二面 2020/2/3
- 上来就是算法题,还是我没做过的(只会剑指 Offer 的菜鸡),只能想出暴力解法,最后思路稍微接近了点答案,然后在面试官的提示下,死活想不出最优解。
- 二叉树中和为某一值的路径。巴拉巴拉写完了,面试官问,为什么最后要 removeLast
- http 协议是怎么样的
- get 和 post 的区别
- cookie 和 session,session 在多台不同服务器怎么办
- 数据库的主键索引和普通索引的区别,哪个查询更快
- 索引是越多越好吗,索引建多了会有什么问题,对什么操作有影响
- 问我 passport 的项目,叫我说几个接口的实现,用户登录后,业务调 api 怎么判断用户是否登录。哦凑,每天光看基础什么业务都忘干净了
三面 20202/5
- 项目介绍 分布式锁
- 分布式锁除了 redis 还有其他实现吗,我说有数据库和 zookeeper,说了数据库的实现,zk 不了解
- 团队之间如何分工
- 题目1:链表奇数位升序,偶数位降序,如何改为有序链表
- 题目二:百万的数据,找出最大的 100 个
- 用最小堆
- 如果这 100 万个数据都是 0-100 之间的有什么其他办法,用一个大小为 100 的哈希结构存储数据
- 如果数据是 100 亿,大到内存存不下怎么办,我说就分次读取
- redis 有哪些数据结构
- redis 的有序列表怎么实现
- 跳表有什么优势,比如和二叉树比较
- mysql 用的是什么数据结构存储
- b+ 树是什么样的,b 树和 b+ 树的区别,为什么用 b+ 不用 b 树
- 题目三:有一个函数 random(5) 产生随机数 0-5,如何用它来实现 random(7)
- 产生随机数的概率得是均匀的
- leetcode random 7 实现 random 10
- 场景设计题:抖音点赞,QPS 是百万级,如何设计
- 用 redis 做缓存
- 数据最终写到哪:数据库
- 怎么写:定期写入
- 有没有不一致问题:机器出问题数据丢了就可能不一致吧
- 怎么解决:redis 的持久存储 rdb 和 aof
- 磁盘出问题怎么办,rdb 和 aof 都有问题:redis 集群,用多台 redis 保证高可用
- redis 集群怎么设计的:一台写其他读
小米 2020/2/27
- 介绍项目
- rocketmq 的架构
- brocker 是集群的吗 slave 挂掉怎么办 consumer 从哪里得到消息
- 下游 消费了 consumer 后挂掉怎么办,执行了操作但是没有返回通知
- 下游 A B C 中其中一个挂掉其他成功了怎么办
- 通过定时任务系统创建延时回滚任务,如果其中一个下游未完成,则创建回滚任务发送给其他系统。
- 介绍设计模式
- 分布式锁 锁过期 锁误删 锁超时之类的
- 数据库有哪些锁
- delete from id <= 1000 和 select 出所有要删除的 id 后传给 delete 去删除哪个更快,id是主键
- 数据量大的时候数据库分页操作有什么问题,怎么优化
- 数据库事务的隔离级别
- 可重复读是指什么 可重复读的实现
- 数据库有哪些引擎,InnoDB 和 MyISAM 的区别,聚簇索引和非聚簇索引的区别
- spring 的核心思想是什么,依赖注入解决了什么问题,类 A 依赖 B,B 依赖 C,C 依赖 A的时候怎么加载(循环依赖问题)
- HashMap 的实现
- ConcurrentHashMap 的实现
- 介绍多线程
- 分层打印二叉树
祖龙娱乐 2020/3/2
- 事务消息的作用
- Java 接口和类和抽象类的区别
- Java 有哪些集合。HashMap 怎么实现
- MySQL 事务隔离级别,可重复读的实现,MVCC 实现原理,多版本的数据存放在哪里
- Spring 有什么特性,依赖注入的实现,假如有两个类都被依赖注入了,Spring 里面会 new 几个类
- 设计一个缓存池(队列),最多存储 10000 个数据,每个数据存活时间 30 分钟,过期则丢弃,实现 push 和 pull 方法。
- 有一个对象数组对应一个权重数组,随机取出最大的 10 个元素,权重越大取到的概率越高,但是权重低的也有被取到的可能性
字节跳动 3/5
- 分布式锁是锁住一部分还是整个系统,既然是锁住整个,为什么不用消息队列
- 详细讲下怎么用 mq 实现的最终一致性,还有怎么利用的消息事务
- hashmap 的结构,讲到一半,不用讲了,你来写一下它的 put 方法吧,不考虑扩容,简单写下。。
- Array 和 ArrayList 的区别
- tcp 于 http 的关系,如何基于 tcp 实现 http
- java 打开一个 http 流不关闭的后果 http://tacy.github.io/post/java-http-connect-unclose/
- io 流是基于抽象类还是接口实现的
- 数据库的乐观锁和悲观锁是什么
- 乐观锁实现原理,讲到一半,来写一个乐观锁吧
- java 的类中有什么方法
- 线程安全是什么
- voliate 和 synchorized 的区别
- 假如有一个类 A 和一个 类 B,这两个类都有一个变量和一个自增操作,A 类的变量用 voliate 修饰,B 类没有,B 类的自增操作用 synchorized 修饰,他们都是线程安全的吗,如果都是,那为什么要用 synchorized ,voliate 不是更轻量吗,synchorized 有什么作用。
- 8 个 CPU ,4 个线程,16个线程什么的。。问题我忘了,因为我不懂
- 最后提问环节,我。。有什么学习的建议吗,怎么学习。面试官答:看官方文档不要看博客看源码。好的。。
阿里 支付宝 3/6
阿里的面试官真是一如既往的人好,去年我印象中也是阿里的面试官态度最好。
其实我觉得我的表现其实很一般,还是比较差的那种,但是他说,其实我的表现还是挺优秀的,作为一个还没毕业的应届生。然后因为他们要招的是实习生,就是21届的,所以我的情况比较特殊,但是他会跟同事讨论的,最后说虽然这次也许没有机会但是我可以加他微信,以后社招会考虑我的。
- 介绍项目
- 为什么使用消息队列,已经使用了 dubbo 了为什么还要使用 MQ
- 使用模板方法模式重构有什么好处
- 还知道哪些设计模式
- 乐观锁和悲观锁 使用场景
- 用 redis 实现乐观锁
- 从 passport 这个系统中,做了哪些有挑战性的事,亮点
- 如何防止恶意用户的攻击 限流
- 使用什么方式限流
- 使用 redis 限流的话,redis 可能就扛不住了,在 redis 集群里如果有一台机器挂掉会出现什么问题
- 线程和进程
- synchorized 关键字作用
- 喜欢技术吗 想往什么技术深入发展
- 想去哪个城市 为什么要离职
- 问了下建议:对工作经历描述的不够流畅,沟通表达能力有待提高,对工作内容没有介绍出挑战点与亮点让他没有找到发问的地方
Shopee
一面 3/11
- ArrayList 和 LinkedList 区别,使用场景
- 堆是什么,数据结构,时间复杂度
- 排序算法有哪些,归并排序时间复杂度,是不是稳定的
- Map 有几种,LinkedHashMap 的数据结构,怎么实现的
- 数据库三大范式 有哪些反范式的设计
- join 和 left join、right join 的区别
- 数据库事务 什么是持久性 隔离级别 幻读是什么
- 进程和线程的区别
- 线程同步
- 页面置换算法有哪些 LRU 和 LFU 分别是什么意思
- TCP 和 UDP
- TCP 怎么保证可靠性
- 拥塞控制是什么
- 三次握手
- HTTP 状态码有哪些
- GET POST 区别 他们系统里有些 GET 请求 用了 POST 为什么
- 乐观锁和悲观锁 CAS 的过程
- Redis 分布式锁使用在了什么地方 怎么实现的 除了 Redis 还有什么方式可以实现
二面 3/19
- 介绍项目
- 介绍自己做了哪些
- springboot 和 dubbo 特点
- 用什么做的服务发现 zookeeper,zookeeper 内部原理
- 用什么实现的负载均衡 知道哪些负载均衡算法
- 不同消息队列的特点选型
- rocketmq brocker 内部进程
- kafka 的IO模型,多进程
- redis 集群怎么做的
- redis 单点故障怎么办 还有什么保证可靠性的方法
- rocketmq 在使用过程中遇到了什么问题
- 自己的职业规划
- 对 shopee 的了解
中邮消费金融 3/16
一面
- 什么是高内聚低耦合
- 讲一下设计模式
- 讲一下 Java 虚拟机
- 讲一下堆的结构
二面
- 消息队列如何保证读取时候的性能
- 消息队列什么时机得到消息有没有被消费
- 常用数据结构,数组会用在项目的什么地方
- 多线程出现什么问题 怎么解决
- 乐观锁和悲观锁
百度 3/24
介绍项目
OOM 怎么定位问题
内部类编译成 .class 文件以后是怎么体现的
如何使 final 修饰的变量可修改
Java 里面使用精度很高数字的用什么类
对一个自定义的类创建 HashMap 有什么要注意的(重写 hashCode 和 equals 方法)
线程并发的处理方法
awk 的作用
linux 如何查看 cpu 使用量
将一个数组去重后排序打印输出
途游 3/27
中信银行 3/30
字节跳动
一面 4/12
- 介绍了下重构支付订单的东西,订单的状态机
- ip 协议,DNS 寻址过程
- https加密过程
- 死锁怎么形成,java 代码里死锁的解决
- 线程同步 (我说了操作系统的 java 的)那php里怎么实现(php?单线程呀。。)那多进程呢,怎么同步(不。。不了解,写php的我对线程进程一无所知)
- 三次握手四次挥手的作用
- 算法 旋转数组的最小数字
- 线程和进程的区别 为什么进程切换慢
二面 4/12
- 问项目中消息队列的使用
- 我做的是生产者这边还是消费者这边
- 什么是最大努力通知
- 如何保证投递可靠(事务消息,半消息)
- 下游消费失败怎么办
- 消息重复投递怎么办
- 消息id存在哪里,消息里吗
- 分布式事务除了消息队列还有什么解决办法
- 我说分布式锁,叫我讲个场景,然后说如果是两个数据库,从一个数据库里减金额,另一个数据库里加金额,怎么办
- 好不容易想起了2pc,讲2pc,然后面试官提出2pc的问题,投票完成后其中一个参与者失败怎么办 (这里当初理解的不透彻,忘了,就扯 3pc,扯又没扯明白,面试官问我回答他问题了吗,很是尴尬)
- 看我项目有个redisson,他说他不太懂这个redisson,给他讲讲(你不懂,骗鬼吧)
- 如果有个线程执行时间过长超过了设置的超时时间被释放了怎么办
- 对微服务治理架构的了解(Dobble Zookeeper)
- TIME-WAIT 发生在哪个阶段
- 为什么等待 2 MSL
- 2MSL 大概是多久,现实中的时间(秒?毫秒,布吉岛)
- 正常上网请求网页的时候,进入 TIME-WAIT 的是服务器还是客户端(指网页请求的那个服务器,主动关闭连接的一方会进入 TIME-WAIT,一般是服务器主动关闭连接)。那他等待的 2MSL 对他性能有没有影响(emm,时间久就有影响吧)问题又回到了多久,布吉岛。。
- id 生成器怎么做 数据库分表
- 聚簇索引和非聚簇索引的区别 一个表里可以有几个聚簇索引
- 幻读是什么 mysql 怎么解决(我答临键锁,面试官问我刚才提到的mvcc是否可以解决)
- 设计一个加权随机算法(思考加修修改改搞了好几十分钟,面试官也亏他有耐心)
三面 4/14
面试官态度非常好,没有压迫感
- 问我有其他offer没
- 设计一个String 转 Int 的方法,做成一个基础库
- 判断负数、字符串、溢出
- 我用的是
res > Integer.MAX_VALUE / 10 || res == Integer.MAX_VALUE / 10 && pop > 7这种方式判断溢出,他问我有没有更优雅的其他方法,比如我这个为什么要判断最后一个字符,这个Integer.MAX_VALUE不就是最大数吗,我脑子抽了下,说那就直接加起来判断吧,我想复杂了,他说那要是加的时候就溢出了呢,我。。。那。。那还是就我那样判断吧。。 - 为什么我一开始写的是抛异常,后来改成了return 0;我,运行的时候报错了,懒得改,反正觉得return 0也没啥问题,面试官:那要是人家就传 0 呢,我,那,那还是抛异常吧。
- TCP/IP是哪四层
- ip 和 mac 什么关系,
- 为什么要有 ip
- mac不可以划分子网吗
- mac 属于哪一层
- ip 属于哪一层
- 端口属于哪一层
- 端口的作用
- 多个进程可以监听同一个端口吗
- sleep() 是什么
- sleep 是怎么实现的,我说运行态变阻塞态
- 这个状态的转换是中断吗,一番思考,我猜是吧,他问我这么猜的理由,我就念了遍中断的定义,说看起来是符合sleep的
- sleep 里面有个休眠时间,是如何实现的,怎么做到到了时间就唤醒。瞎逼逼了两下,不知道,就说linux有个crontab,内部啥原理,不懂
- 实习的收获
- redis 的原理是怎么学习的,看了源码吗。我说看书,redis 设计与实现。为什么要学习呢,为什么要学这个redis 的原理
- 面试就到这里,有啥想问的,我又开始emm(回答每个问题的我都这个状态),他赶紧说,没啥想问的可以不问,emm,那,那没了。
Boss直聘
一面 4/21
- static 修饰的代码块,执行顺序
- final 修饰的基本类型,在 lambada 表达式里面能不能更改
- Java 有哪些锁 synchronized 是哪种锁,可重入锁的意思
- 公平锁和非公平锁的区别
- 进程与线程的区别
- Java 线程的状态
- 数据库索引的数据结构
- Java 基本类型的大小
- 十亿个手机号里面,怎么找到一个手机号存不存在,用什么样的数据结构
- 求一个数由哪些完全平方数构成
- 怎么平衡工作与学习的时间
二面 4/30
- java 集合体系
- hashset 有一个user类要存入 hashset 需要做什么
- 安全的 hashset
- long access(String ip) 得到ip返回次数 并发环境下
- 浏览器输入网址过程
- cookie session
- 乐观锁 悲观锁
- http 响应字段
- 数据库 索引 更新数据主键,唯一,普通的区别
- 线程池参数
- redis 数据结构 hash使用场景
字节跳动广告部门 4/21
- Java 有哪些集合类
- Array list 和linked list 扩容
- Hashmap怎么插入,扩容
- conrruent hashmap Hashset
- 数据结构有哪些线程结构,非线性结构
- 二叉树有哪几种 二三树?红黑树 b树 b+树
- Java有哪些锁 实现原理
- Wait与sleep
- Cas是什么 是操作系统的指令吗
- 线程状态
- Jvm内存结构
- 垃圾回收
- Aop ioc 怎么实现的
- Maven生命周期
- Bean factory 和factory bean
- Springboot与springmvc
- 800万条数据,优化查询
- 缓存雪崩
- 大数据有了解么