程序员社区

美团平台Java开发暑期实习一面二面面经 + (Java面试)

今天给大家分享一篇 美团平台Java开发暑期实习一面二面面经, 希望大家在面试中能够斩获Offer, 找到自己满意的工作。 一起来看看吧~

最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题。

点击下载完整PDF☞ 2022年最新Java面试题集

3.20笔试的,五道题,加起来A了两道多吧,3.23约的一面,约的3.24上午11点。3.26约的二面,约的3.30下午五点。
中途多次以为自己都凉了,不过还好给了机会,而且美团的面试官确实挺好的,不会的或者答的方向不太对的时候,都会去引导你。
暑期实习技术面一般是初试和复试两面。希望有offer!


一面 3.24上午11点(50分钟左右)
自己的回答没录上音,只能靠回忆了
1、自我介绍
2、项目介绍:邀约微信小程序、自定义线程池监控工具
(1)第一个项目提到了Redis,然后问了怎么用的,怎么保证和数据库数据一致的。
主要说了Redis事务

(2)用了布隆过滤器?说一说原理

多次hash+位数组

https://nyimac.gitee.io/2020/06/07/Redis%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3/#4%E3%80%81%E7%BC%93%E5%AD%98%E7%A9%BF%E9%80%8F
(3)线程池相关的项目,问了实现原理和拒绝策略

讲了一大串,Worker(继承AQS,实现Runnable),execute提交后的执行流程,addWorker->new Worker ->runWorker->getTask->...

控制状态和数量的ctl
拒绝策略四种都说了

3、操作系统
(1)缓冲区溢出(不了解...)

https://baike.baidu.com/item/%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA%E6%94%BB%E5%87%BB
(2)内存管理,进程能看到的内存是多大?
又是一个之前没怎么遇到过的问题。我理解的是进程能看到的物理内存是多少,说了虚拟内存,但是进程能看到的应该只有能够映射到的那一片内存,具体多大要看映射了多少

(3)用户态的进程怎么访问内核态的?
答的陷入,然后又问具体的指令,系统调用是什么,这个答的不太清楚

4、计算机网络
(1)TCP和IP分别解决了网络什么样的问题
TCP负责建立连接,IP负责找到具体的机器(提了下ARP协议)

5、然后看到了简历上的博客地址了:
https://nyimac.gitee.io 就按着博客上的提了一些问题
(1)又回到了Redis,问对Redis最深刻的体会是什么
感觉Redis是基于键值对的非关系型数据库,整个Redis可以看作一个很大的hashmap。
每一种用到的数据类型比如hash、set,底层都还有很多基础是数据结构来实现,并且会根据数据多少来调整
Redis的作者比较“懒”,很多东西都希望用一种能满足当前需求,并且又是最容易实现的方法来解决。比如选择使用跳表,而不是红黑树或者B+树
https://nyimac.gitee.io/2020/11/08/Redis%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/#3%E3%80%81Redis%E4%B8%AD%E7%9A%84%E8%B7%B3%E8%B7%83%E8%A1%A8

(2)为什么Redis写的时候是单线程的
https://nyimac.gitee.io/2020/11/08/Redis%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/#Redis%E4%BD%BF%E7%94%A8%E5%8D%95%E7%BA%BF%E7%A8%8B%E6%95%88%E7%8E%87%E8%BF%98%E5%BE%88%E9%AB%98%E7%9A%84%E5%8E%9F%E5%9B%A0
面试官补充说单线程可以不用考虑并发安全问题

(3)NIO中的ByteBuffer,为什么需要ByteBuffer?和普通的Buffer有什么区别?
一开始说的不太好,后面面试官引导说非直接缓冲区和直接缓冲区。
查了一下:
因为NIO中,缓冲区不单单可以是Java堆中的字节数组byte[]
,还可以是堆外内存,也就是DirectByteBuffer,很多场景使用堆外内存会减少一次内存拷贝,有更高的性能。
6、简单做个题吧
leetcode 102 二叉树层序遍历
leetcode 141 环形链表
7、智力题
3L的水桶和5L的水桶怎么量出4L的水
8、反问

二面 3.30下午5点(37分钟左右)
1、你觉得Java里有多少种可以使线程让出CPU的关键字或者原语?

sleep、wait、yield、各种Lock获取锁失败时、或者await(注意这里忘记说了LockSupport的park)

后来面试官问我Lock具体怎么让出的,我说到了AQS,state(但是就是没说到
park)
又问CAS替换state失败了,放入队列里了,怎么就让出CPU了呢?具体怎么实现的呢?
这个时候我才想起来
LockSupport的park
2、TCP三次握手的状态怎么转换的
这里问的是状态转化,我不太清楚,只知道挥手时候的状态TIME-WAIT之类的。握手就说了下序列号确认号啥的,感觉答的不是很好
3、开发过程中有没有遇到网络相关的异常?
说实话没遇到啥,但是说了下小程序直接登录时的证书验证异常,感觉不是面试官想要的答案
4、怎么构建一个请求超时?
答了一些,感觉面试官也不是很满意。面试官说:比如一个Web服务,请求过来了,你服务器也收到了,你就是不回它,这不就超时了
5、项目里用了Redis,具体拿来用作什么了?
缓存,说了下项目里是如何保证数据一致性的(还是Redis事务)
6、Redis里的哈希表和Java里的哈希表有啥区别?具体说说扩容有啥区别?
Redis中的rehash
https://nyimac.gitee.io/2020/11/08/Redis%E8%AE%BE%E8%AE%A1%E4%B8%8E%E5%AE%9E%E7%8E%B0/#rehash
Java中的resize
https://nyimac.gitee.io/2020/10/26/%E9%9B%86%E5%90%88%E6%BA%90%E7%A0%81/#resize-%E6%89%A9%E5%AE%B9%E6%96%B9%E6%B3%95

面试官接着问有啥区别,说了Redis的有缩容,Java的没有,而且具体的过程也有所不同
面试官说
(1)Redis中有缩容,Java中没有
(2)Redis中的扩容不是一次完成的,可以分多次,是渐进式地,而Java的是一次完成的
7、做个题
leetcode 543 二叉树直径
8、反问
问了下具体的部门和技术,面试官讲的很详细。后面了解到部门内部需要深入理解存储类知识,比如MySQL,Redis之类的(怪不得Redis问的比较详细)

求offer!

赞(0) 打赏
未经允许不得转载:IDEA激活码 » 美团平台Java开发暑期实习一面二面面经 + (Java面试)

一个分享Java & Python知识的社区