只需一篇文章吃透 Java 多线程技术,那些 BAT 大厂的 Java 面试官到底在想些什么

                

三面头条

只需一篇文章吃透 Java 多线程技术,那些 BAT 大厂的 Java 面试官到底在想些什么_第1张图片

面试岗位是后台研发工程师,地点选择了上海,通过大佬内推,跳过死亡笔试,加上疫情期间,所以直接视频面,从 3 点开始,断断续续到晚上 8 点结束。

一共三轮技术面试,每一轮都要写代码,也喜欢问一些底层知识,让我有点懵逼。

一面:

  1. 写一个题,找一个无序数组的中位数

  2. 写了个快排,然后让我找到无序数组第 k 大的一个数,我说先排序再找,实际上可以用快排的 partition 函数。

  3. 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少。

  4. 操作系统了解么,Linux 和 windows

  5. 说说 Linux 的磁盘管理,一脸懵逼

  6. Linux 有哪些进程通信方式,五大件

  7. Linux 的共享内存如何实现,大概说了一下。

  8. 共享内存实现的具体步骤,我说没用过

  9. socket 网络编程,说一下 TCP 的三次握手和四次挥手。

  10. 跳过网络,问了项目的一些东西

  11. 问我如何把 docker 讲很清楚,我从物理机,虚拟机到容器具体实现稍微说了下。

  12. 问我 cgroup 在 linux 的具体实现,不会。

  13. 多线程用过哪些,chm 和 countdownlatch 在实习用过

二面:

  1. 自我介绍 Java 的集合类哪些是线程安全

  2. 分别说说这些集合类,hashmap 怎么实现的,扯了很多

  3. MySQL 索引的实现,innodb 的索引,b+tree 索引是怎么实现的,为什么用 b+tree 做索引节点,一个节点存了多少数据,怎么规定大小,与磁盘页对应。

  4. MySQL 的事务隔离级别,分别解决什么问题。

  5. Redis 了解么,如果 Redis 有 1 亿个 key,使用 keys 命令是否会影响线上服务,我说会,因为是单线程模型,可以部署多个节点。

  6. 问我知不知道有一条命令可以实现上面这个功能。不知道

  7. Redis 的持久化方式,aod 和 rdb,具体怎么实现,追加日志和备份文件,底层实现原理的话知道么,不清楚。

  8. Redis 的 list 是怎么实现的,我说用 ziplist+quicklist 实现的,ziplist 压缩空间,quicklist 实现链表。

  9. sortedset 怎么实现的,使用 dict+skiplist 实现的,问我 skiplist 的数据结构,大概说了下是个实现简单的快速查询结构。

  10. 了解什么消息队列,rmq 和 kafka,没细问

  11. 写题时间到。第一题:写一个程序遍历。第二题:写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。第三题:一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。第四题:一个二叉树,找到二叉树中最长的一条路径。

三面:

  1. 三面的面试官真的高冷啊,不苟言笑就算了,我问他他都不爱搭理的,搞得我内心慌得一比,感觉凉凉。

  2. 介绍一下项目

  3. 你谈到的并发技术,chm 和 countdownlatch 怎么使用的

  4. 为什么要这么处理,使用线程池是不是也可以。我说也可以

  5. 操作系统的进程通信方式,僵尸进程和孤儿进程是什么,如何避免僵尸进程,我说让父进程显示通知,那父进程怎么知道子进程结束了,答不会。

  6. 计算机网络 TCP 和 UDP 有什么区别,为什么迅雷下载是基于 UDP 的,我说 FTP 是基于 TCP,而迅雷是 p2p 不需要 TCP 那么可靠的传输保证,他说不对。

  7. 我说是不是因为要建立连接,开销比较大,他说不对。

  8. 我说 p2p 的发送节点很多,所以不是那么需要各种传输保证,他说不对。

  9. 我说 TCP 会自动分包而 TCP 可以自己定义数据长度。。他还是说不对。

  10. 最后他说算了。我们问下一个吧。操作系统的死锁必要条件,如何避免死锁。写一个 LRU 的缓存,需要完成超时淘汰和 LRU 淘汰。我说用 lhm 行不行,他说用 linkedlist 和 hashmap 可以。于是我就写了 put 和 get 函数,进行了队头队尾操作。他说 get 复杂度会不会太高,我瞎掰了半天没找到办法,他说那就这样吧,今天面试到这。

  11. 过期淘汰的处理我还没写呢,你就说结束了,感觉凉了啊,我说我要不要把剩下逻辑说完,他说不用,心凉了一大截~

然后就是 HR 小姐姐让我等结果了。感觉不对,应该是凉凉~~~

四面阿里

只需一篇文章吃透 Java 多线程技术,那些 BAT 大厂的 Java 面试官到底在想些什么_第2张图片

有了前边头条面试的经历,自己也恶补了一些面试常见问题,这次决定试试阿里,毕竟面试不通过不亏,侥幸通过血赚啊。

面试岗位是研发工程师,直接找蚂蚁金服的大佬进行内推,参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头 offer。

一面:

  1. 自我介绍。

  2. 项目中做了什么,觉得难点在哪里。

  3. Java 的线程池说一下,各个参数的作用,如何进行的。

  4. Redis 讲一下

  5. 分布式系统的全局 id 如何实现。用 zookeeper 如何实现的呢,机器号+时间戳即可。

  6. 分布式锁的方案,redis 和 zookeeper 哪个好,如果是集群部署,高并发情况下哪个性能更好。

  7. kafka 了解么,了解哪些消息队列。

  8. 想做业务还是研究。

  9. 然后出了一道题,linux 的访问权限是 rwx 格式的。使用一个类支持访问权限的增删改查,并且注意使用的数据格式以及方法效率,规范。给了一个多小时写题。耗时将近 30 分钟。

二面:

  1. 介绍你做的项目和其中的难点。

  2. 上次面试官问的问题,反射的作用是什么。

  3. 数据仓库,多线程和并发工具等。

  4. 私有云,docker 和 k8s 等。

  5. 了解哪些中间件,dubbo,rocketmq,mycat 等。

  6. dubbo 中的 rpc 如何实现。自己实现 rpc 应该怎么做 dubbo 的服务注册与发现。

  7. 问了些排序算法耗时将近 30 分钟。

三面:

三面不是面试,而是笔试,耗时三个小时,考的是 Java 核心的基础。但是好像不能透题,就不说了。都挺有难度的。

大概说一下就是有几个考点,Java 并发的知识点,集合类,线程池,多线程、高并发之间的通信等。

HR 面:

聊人生谈理想,HR 小姐姐非常温柔,交流十分愉快。30 分钟。

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

只需一篇文章吃透 Java 多线程技术,那些 BAT 大厂的 Java 面试官到底在想些什么_第3张图片

只需一篇文章吃透 Java 多线程技术,那些 BAT 大厂的 Java 面试官到底在想些什么_第4张图片

你可能感兴趣的:(java,面试,经验分享)