Java后台面经,百度+贝壳
我又来贡献面经了
贝壳的题目大多比较基础回忆不起来了,有印象深刻的话会写在里面,主要写写百度的面经
一面
-
Java的基础数据类型有哪些?String是吗?与封装类的区别?
-
Java中的继承和多态是什么意思?
-
抽象类和接口的区别?
-
JVM内存划分?每个分块的用途?
-
JVM垃圾回收机制?
-
Java中子类的变量初始化的顺序?然后扯了一会类加载器
-
Java中的4种访问权限?
-
Java中提供的线程池?聊了一下线程池参数
-
synchronized和lock的区别?扯了一下区别然后扯了一下底层实现
-
共享锁和排他锁?
-
手撕了一个顺序查找。。。(这都什么啊。。然后又手撕了一个算法,具体题目忘掉了。。
问了下二分查找的适用范围 -
(贝壳)手撕快排,多种排序的复杂度比较
-
线程的几种状态?
二面
问了部分和一面相同的题,一样的就不写了
-
CMS收集器的回收过程
-
MySQL索引的实现?引擎的区别?写了两个SQL语句
-
Redis单线程吗?为什么这么设计?
-
Redis的事务怎么处理的?怎么保证事务之间互不影响?
-
(贝壳)讲一下Redis中的scan命令
-
(贝壳+百度)讲一下Redis的哨兵机制
-
(贝壳)讲到了高可用,讲一下Raft协议?
(震惊,99%的本科生都不知道的协议,真相竟然是?UC:明天来编辑部上班) -
还是Redis,Redis怎么做持久化?两种持久化的区别?
-
Redis的发布和订阅机制?
-
Java的lock的底层实现?(AQS那一套)
-
Mybatis怎么使用事务?(不会。。
-
Spring的事务?@Transaction(然鹅我没用过也不会
-
Spring两大特性?AOP和IOC
-
AOP是怎么实现的?两种动态***的应用场景?
-
(贝壳+百度)手撕算法,百度第一题忘了。。
-
严格升序的序列种找两个数的和等于指定值(双指针
-
数组中每个位置的值等于当前位置的下标在整个数组中出现的次数,求任意n位的整个数组
比如n=7,(0,1,2,3,4,5,6)->(4,2,1,0,1,0,0,0)
0出现了4次,1出现了2次,2出现了1次,4出现了1次,得到数组
(没写出来。。) -
给出一个数组,求数组中每一位右边离当前位置最近的比当前位置上的数大的数,要求O(N)复杂度(单调栈)
-
给出一个二维数组,只有0和1,要求把1所在的行和列都置为1,要求空间复杂度为 O(1)(理扣原题)
-
给两个鸡蛋,有一栋无限高的楼,要求给出一种思路,使得可以知道鸡蛋最低在几层落下会碎,且试验次数最少(最坑爹的是面试官说不能假设楼高度是N?这什么操作?算法导论原题(然而我不记得了))
贝壳只有两面技术面
百度三面
面试官看了看我的简历
“Spark还有Ruby啊,会的挺多,既然你啥都会点咱们就不局限于Java了”
(吐血
聊了聊美团实习的项目,聊到了Spark,然后说到了Spark相对于MapReduce的改进,然后
“Spark熟吗”
“不是很熟,只是单纯的会用API”(企图糊弄过去)
“那你这个需求怎么做的”
“blablabla”
“那咱们就从MapReduce开始改进出一个Spark的架构吧”
(吐血*2
因为是架构设计,基本上是三面面试官在带着我做设计
问题归纳:
-
Spark相对于MR的改进具体是什么?
-
整个集群中的机器有哪些角色?怎么分配任务?怎么保证负载均衡?怎么保证任务执行完成?任务执行失败怎么处理?怎么保证任务处理的高性能?
-
怎么在整个集群的文件系统上执行一条SQL?针对SQL的函数分场景怎么设计成分布式运行的?(感觉有点像HiveSQL,但实际上我基本忘了。。
“RPC和HTTP的区别?”
blablabla
“那多个RPC请求进来,服务器怎么处理并发呢?”
“开线程呗”(糊弄中
中间略过5分钟
“那咱们来设计一个线程池吧”
(吐血*3
给的大条件是操作系统只提供了创建线程和线程的Join操作,线程跑完任务会自动销毁。
先设计一个线程数固定的线程池
问题归纳:
-
怎么保证任务被单个线程占用了?任务怎么派发下去?怎么保证空闲的线程可以一直拿到任务?
-
用什么方法可以把这个线程池停下来?
-
扩展成不限数量的线程池怎么处理?
其实体感上来说,百度三面我觉得是面试体验最好的,面试官思路很清晰,考察的非常灵活,对于设计中的可行处和漏洞都可以立马指出来,能感觉到是一个非常有经验的架构师,交流过程受益良多。
总之就是这样了。(啥?你要题目答案?详询[https://www.baidu.com])
然后第二天早上收到了美团的薪资call,给我开了一个我没法拒绝的条件(滑稽
秋招结束了!
#面经##百度##贝壳找房##Java工程师##秋招#