一面
# 2024-05-16 美团
- 聊一下项目和亮点
- 为什么要使用kafka
- 如何实现持久化
- 基本数据类型有哪些
- 包装类型和基本类型有什么区别,什么场合用什么,比如Integer和int
- 拆包和装包
- 泛型(说不会) 8.抽象类和接口有什么区别(只回答了可不可以有非抽象的方法,接着问我java8里面接口有什么变化,我说不会,面试官说是interface可以定义非抽象方法,其实就是在提醒我还有其他的,接着回答了一个是否可以多继承)
- 创建线程池有什么工作
- 线程池的参数有哪些
- redis有哪些基本类型
- 选择一个讲一下底层实现
- mysql有哪些基本类型
- 有哪些索引(只回答了一级索引和二级索引以及聚类索引和非聚类索引索引,忘了回答覆盖索引和联合索引了)
- 知道联合索引吗,给你学校,姓名,性别,用哪个建表
- 写两个sql语句
# 2024-05-16 美团一面
- 部门介绍,自我介绍
- 手撕:最长公共子字符串、 lambda表达式输出list中元素大于等于80的数的个数、 给出字符串比较代码问输出true还是false 并说为什么、 SQL题多表查询输出学生分数总和大于200的学生信息
- java是怎么实现一次编译到处运行的
- 双亲委派机制
- 捕获异常catch 里写return finally的代码会执行吗,finally一般写些什么
- 文件的io流 执行完方法 不就自动回收对象了吗为什么还要去关闭流?
- hashmap底层原理,什么时候扩容,为什么线程不安全,会有什么并发问题,concurrenthashmap底层原理
- threadlocal 了解吗,有哪些应用场景
- 线程池参数,提交任务执行流程
- session cookie token 有什么区别,怎么知道前端传入的 token 是否有效
- 限流算法有哪些,漏桶算法原理。
- 拿一个身份信息去请求多个不同服务的积分接口,需要快速算出平均积分,你会如何实现(场景题 大概是这个意思)
- 了解哪些设计模式,用过哪些
- Spring的单例模式如何实现的
- Springboot 的start
- 缓存击穿了解吗
- 数据库索引设计一般如何考虑,模糊匹配走索引吗,联合索引 条件查询一个其中字段呢
- 公平锁和非公平锁
# 2024-05-15 美团日常
- 介绍项目(10min 感觉面试官就听了一遍 没啥兴趣)
- Java集合
- concurrenthashmap跟hashmap
- Java内存区域,Java递归参数放在哪
- Java垃圾收集算法,CMS,G1(面试官是想问JVM调优方面的,我说没实际操作过
- Redis持久化,单线程模型
- 数据库缓存一致性
- 给了个sql语句怎么优化
- 索引下推
- 手撕:用两个字符串表示double类型的值相乘,用String返回结果(没做出来,寄)
# 2024-05-13 美团平台技术
- 聊项目(20min)
- Kafka为什么能有这么高的吞吐?
- 一般的RPC框架是怎么运行的,介绍一下?
- 介绍一下IO多路复用,epoll为什么高效?
- ET模式与LT模式介绍一下
- 如果使用ET模式,你应该怎么处理网络事件,写一下相关的伪代码
- 介绍一下高性能网络模型,如果你自己设计会怎么做?
- 现在我有一个高QPS的接口,需要做到毫秒级响应,介绍一下你能想到的所有优化手法 (这里面试官讲了一下主要的链路,让我分析一下性能优化)
- 了解DAG调度框架吗,介绍一下?
- 如果让你设计一个分布式的HashMap你会怎么设计,如何保证数据的一致性、可靠性?
- 现在我有一个stl容器,你如何设计序列化方式使得可以快速dump内存数据?
- mmap()介绍一下,说说操作系统相关的底层机制
- 了解过协程吗?介绍一下基本思想
- 了解过倒排索引吗?介绍一下
- 做题 lc21 二分查找
# 2024-05-11 美团平台技术
- 自我介绍
- 项目介绍
- 2FA
- TOTP
- OTP
- PKCE
- java如何实现高并发
- 高并发会出现什么问题,Java如何解决的?
- Java虚拟机内存
- Java垃圾回收机制,很细
- HashMap底层、java7和java8有什么改进
- ConcurrentHashMap如何实现多进程,java7和java8有什么改进
- Java有哪些锁。
- 乐观锁悲观锁
- 进程、线程区别
- mysql
- redis
- TCP、UDP区别
- 三次握手四次挥手
- 手撕代码 二选一 反转部分链表 旋转数组后查找元素
# 2024-05-6 美团到店
- 自我介绍
- 介绍一个你的项目
- 在项目实际开发中,你有遇到哪些问题,是怎么解决的?
- 讲了jwt登陆验证,后面引入自定义拦截器和threadlocal
- 问了threadlocal的底层实现原理
- 如果有多个线程并发,都需要使用user_id数据,应该如何处理?
- 项目中有哪些难点?
- 讲一下Spring事务是什么,@Transactional注解如何实现
- 为什么使用Redis缓存,为什么快?
- 如何保证Redis和MySql的数据一致性?
- MySQL的innodb的select方法如何加行锁?
- 讲一下IO多路复用有哪些种类? 提到了异步IO,同步阻塞IO和同步非阻塞IO 答错了,应该回答select、poll和epoll
- 讲一下同步非阻塞IO是什么,底层如何实现?
- 操作系统中的内存管理如何实现?
- 讲了段式、页式、段页式
- 为什么现在使用段页式?段页式能够解决内部内存碎片的问题吗?
- 什么是内存泄漏?内存泄露会导致什么问题?
- 提到了ThreadLocal中的内存泄漏问题
- 如果程序运行完,quit,会释放掉内存吗?
- 什么是CMS垃圾回收器?
- 有哪些新生代的垃圾回收器?
- Linux命令,如何查看某一个进程?如何查看进程的线程?
- ps查看进程状态,可以使用grep筛选进程 ps -T -p
# 查看进程pid下的所有线程 - 如何使用Linux命令查看jvm线程? ps -ef | grep java # 查看java线程ID jsatck
# 查看java线程情况 jinfo -flags # 查看java线程的JVM参数 jstat -gc # 查看Java线程的gc情况 jstat -gcutil # 查看java线程的堆内存情况 jstat -class # 查看java线程的类加载情况 - 讲一下HashMap?
- 手撕:不考虑数组扩容和红黑树,实现HashMap的put方法
- 为什么HashMap的链表使用头插法会出现死循环问题? 5.6 晚上8点 二面
- 自我介绍
- 手撕:NC255 最长有效的括号字符子序列
# 2024-04-30 美团一面
- 自我介绍
- 实习
- git命令 Linux查看日志命令
- Redis持久化方式
- Redis中的数据类型
- Redis中的数据淘汰策略,是单线程还是多线程
- B树和B+树的区别
- 主键索引和非主键索引的区别
- MVCC版本相关,是怎么样找到可见版本的
- redission怎么做到可重入的
- 算法:区间反转链表
- G1垃圾回收器,如果分配的对象超过一个区了怎么办?大对象的特殊标记
- http工作原理
- http连接耗时以及后续版本的优化
- http和https
# 2024-04-28 美团后端到家面经
04.03一面
- 自我介绍
- 手撕*****************************
- 问项目:说说每个项目最有挑战的部分
- 问CS144项目,按条挨个问,之后就没问网络的东西
- 问微服务项目,格外问了一下Elasticsearch索引建立,怎么和数据库实现一致性;问项目里的一些细节
- MySQL事务,事务隔离级别,实现方式
- Java HashMap实现、时空复杂度
- JVM类加载机制
- 内存泄漏排查手段
- 线程池常用参数
- java常用锁
- 反问环节,问了业务和对个人的评价 04.10复活赛一面
- 自我介绍
- HashMap原理?简单写个HashMap(没考虑到更新的问题)
- jvm,常用的垃圾回收器?G1和ZGC原理?常用的GC调优策略?
- 网络,问三次握手为啥不能是两次,socket等待过程中的状态
- Spring,问IoC是啥,具体原理,怎么解决循环依赖;AOP是啥,怎么用,两种动态代理的区别
- MySQL,问事务,啥是脏读,啥是幻读;问锁,怎么加锁
- Redis,问常用数据结构,缓存删除策略。
- 手撕,链表反转,但是反转前n个节点
- 反问环节 04.22二面
- 自我介绍
- 说一个常用的中间件(答了Redis)
- 高并发Redis缓存击穿,怎么解决(先后答了消息队列削峰、数据库读写冷热分离,面试官一直让我再想,最后说可以Redis加锁)
- 数据库大量请求读写时,性能问题主要是什么带来的
- es是怎么设计的,怎么样提高的搜索效率(美团到家技术栈有用到es,所以面试官对这个很感兴趣,基本每次都被问到了)
- 微服务项目负责的模块?难点在哪?为啥这样子分模块?说说重构的过程?
- 手撕快排(没写太明白,但面试官估计也懒得跑,大概看一下说说思路就哦了)
- 反问环节
# 2024-04-27 美团后端到家面经
- redis点赞设计
- kafka如何保证消息不丢失
- 幂等及如何实现
- ES原理
- Java中的锁
- synchronized和reentrantlock区别
- reentrantlock为什么灵活
- volatile
- 线程池
- 是否可以只有一个参数限制线程数量
- 如何动态设置参数
- mysql索引适用场景
- 慢查询定位,explain字段
- 算法
- 删除倒数第k个节点
# 2024-04-26 美团财务平台一面
- 介绍一下第一个项目;做项目过程中学到了什么
- 项目有没有利用第三方组件,如视频处理之类的
- 介绍一下HashMap;HashMap的哈希冲突较多时会怎么处理
- HashMap扩容;多线程情况下HashMap扩容会出现什么问题
- 有没有线程安全的Map
- String a = "abc"和String a = new String("abc")区别
- String a = "abc"对它进行修改,改为"def" 发生什么
- int和Integer区别,int a=200和Integer=200一样吗
- TCP三次握手
- 线程池参数;若核心线程数为20,最大线程数为30,阻塞队列长度为100,线程池可以处理多少任务
- 介绍一下Threadlocal,需要注意什么
- 索引是怎么实现的;b+树有什么好处
- 聚簇索引和非聚簇索引
- 若联合索引a,b,c,则SQL"select b,c from ..." 有没有用到索引
- MySQL事务的隔离级别
- Redis为什么这么快;什么是缓存穿透
- 介绍一下SpringIoC
- 说一下JVM垃圾回收机制;垃圾回收的常用方法
- 求根节点到叶节点数字之和
# 2024-04-26 美团一面
- 会Java吗
- 网络分层
- url整个过程
- http状态码
- 线程 进程
- 死锁
- acid
- innodb myisam区别
- 隔离级别
- mvcc具体怎么实现
- 各种Java相关的框架
- 手撕两道算法题,easy难度吧
- 反问
# 2024-04-25 美团一面
- 项目/科研中遇到的困难?
- 拷打项目(为什么选这个方案?备选方案有哪些?给自己打多少分?)
- 自己做的比较好的点?哪里需要改进?
- 操作系统进程调度算法
- 输入地址到返回网页过程
- TCP三次握手为什么不是2/4次
- 数据库库表设计?如何评估设计的好不好?
- 数据库三大范式
- 设计索引的原则
- 为什么 MySQL 采用 B+ 树作为索引?
- 事务的隔离级别有哪些?
- JAVA的垃圾回收算法
- spring bean的生命周期
- 手撕:字符串转IP地址
# 2024-04-23 美团一面
- tcp如何保证可靠传输
- 进程之间通信方式
- 操作系统中的锁有哪些
- 讲乐观锁和悲观锁
- 讲synchronized和reentlock区别
- 讲reentLock是如何实现乐观锁和悲观锁的
- 讲openFeign调用原理
- 讲nacos服务注册原理
- openFeign发送失败的策略
- 库存的Redis和mysql数据一致性如何保证
- threadLocal的作用
- 不使用nacos,直接由A模块向B模块发请求,能不能成功得到处理
- 算法:查找前k小的元素
# 2024-04-19 美团到店一面
- 自我介绍
- 介绍一下项目的功能和模块、承担了什么角色、数据库的表怎么设计的
- 重载重写的区别?
- 重写equals的时候为什么必须要重写hashcode?
- arraylist和linkedlist的区别?
- vector是如何实现线程安全的?(这个在之前背的八股里都没遇到,Vector 的方法都具有 synchronized 关键字修饰。但对于复合操作,Vector 仍然需要进行同步处理。)
- hashmap的底层数据结构?(把数组+链表说成哈希表+链表了,纯猪脑)
- hashmap放入一个元素的过程?
- ConcurrentHashMap是如何实现线程安全的?
- synchronized 和 reentrantlock 的区别?
- reentrantlock 如何实现公平锁?
- synchronized加在静态方法和非静态方法方法上的区别?
- synchronized的锁升级过程?
- 单例模式有哪些实现方式?(只了解饿汉式和懒汉式)
- 饿汉式如何保证线程安全?(胡言乱语...)
- 线程池的核心参数?
- 线程池拒绝策略有哪些?
- 当来了一个任务线程池如何处理?
- 受检异常与非受检异常的区别?
- 有哪些非受检异常?(nullpointer,illegalargument记不清了,汗颜,太细了)
- spring和springboot的区别?为什么要基于spring再封装出springboot?
- springboot常用的注解?
- 涉及到依赖注解的注解?
- @aotuwired和@resource的区别?
- @inject的使用场景?
- springboot快速启动的原理?
- AOP的原理?
- 动态代理的分类?(jdk proxy,cglib)
- jdk proxy和cglib分别在什么场景使用?(代不代理接口)
- springboot 声明bean的注解?
- 循环依赖?
- springboot怎么解决循环依赖?
- 三级缓存?
- 每一级缓存的作用?
- springbean的生命周期?
- springbean 初始化及实例化时可以扩展的地方(postprocessor等orz)
- 缓存穿透和缓存雪崩的定义和解决方法?
- 布隆过滤器的原理?
- 布隆过滤器的误判概率受什么影响?
- mysql 事务隔离级别?
- 可重复读是如何实现的?
- MVCC
- 当前读和快照读的区别?
- 分析一条sql语句的索引使用情况
- 索引的数据结构?
- 为什么索引不使用b树?
- jvm内存区域?
- threadlocal原理?
- theradloalmap如何解决哈希冲突?
- 算法 lc92
# 2024-04-16 美团优选
- 手撕:牛客BM16
- 进程和线程之间有什么区别?
- 进程可以访问另一个进程里面的线程吗?
- 创建(自定)线程有哪几种方式?
- 线程池的工作原理?
- HashMap和HashTable有什么区别?
- 类加载器有哪几种,什么特点?
- 类加载流程?
- 双亲委派机制
- JVM包括哪几块?
- 在java中如定义垃圾,什么时候可以把他回收掉?
- 获取垃圾有哪些方法?
- 引用计数器法的原理
- 可达算法的原理
- 哪些可以当GC root
- 常用的垃圾回收算法?
- 事务隔离级别
- 读取已提交是什么意思,容易引起什么问题?
- 什么是幻读,什么是不可重复读?
- 如何解决缓存雪崩?
- Spring如何解决循环依赖?
- HTTP需要CA申请证书吗 ,HTTPS需要吗?
- Kafka是怎么保证消息不被重复消费?
# 2024-04-13
- 面试官自我介绍、我自我介绍
- 介绍项目、难点和挑战 中间用到的加解密方案
- Mysql Innodb引擎存储原理
- 索引 聚集索引 非聚集索引 回表
- explain
- Spring IOC 和DI AOP
- 线程池 哪些参数 任务队列大小 各个参数之间的关系 怎么实现线程池
- 算法题 IP地址
# 2024-04-8 美团优选一面
- 平时怎么学java的
- java创建线程的方式
- runnable接口和callable接口的区别
- 线程池的参数
- 线程池创建线程的方法
- 线程池的运行机制
- 线程池拒绝策略 什么时候拒绝
- concurrentHashMap如何实现线程安全的
- concurrentHashMap底层结构
- hashmap扩容机制
- countdownlatch有了解过吗
- synchronized和reentrantLock区别
- 读写锁知道吗?什么是读写锁分离?为什么要有读写锁分离
- sql里面有哪些锁
- MVCC多版本并发控制
- 如何去实现一个乐观锁
- 数据库的索引结构
- 索引失效的场景
- 什么是回表?如何减少回表的次数
- 创建索引的sql语句
- springBoot和spring的区别
- 什么是SpringIOC
- SpringAOP是什么?SpringAOP的应用场景
- Spring中的事务有什么用?用到的是声明式事务还是注解式事务?
- @Transactional的实现使用了哪些组件?
- 说说对Redis的了解。Redis的数据结构、Redis为什么这么快?Redis里面有什么数据结构导致它能这么快
- Redis单线程的优势?Redis里面的IO多路复用,epoll流程
- Zset的数据结构跳表。如果让你设计一个跳表,你应该如何实现
- AOF和RDB,这两种持久化方式哪个更好呢?
- jvm内存的模型划分
- 堆划分
- 每个代使用的垃圾收集器和垃圾回收策略
- jvm中的一些参数(比如调大新生代区域大小的一些参数)
- 算法:合并k个升序链表
# 2024-04-03 美团直播带货java一面
- springboot自动装配
- openFeign调用原理
- JVM内存模型
- mysql中的like索引失效
- mysql中的ACID
- zset的数据结构 没问题跳表问的另一个
- reids中持久化机制
- java中重载和重写
- java线程池参数 阻塞队列
- 算法两个链表的公共结点
# 2024-04-02 美团到店-一面
- 项目的难点
- 缓存雪崩、缓存穿透、缓存击穿
- 布隆过滤器原理
- 什么时候使用redis做缓存
- 缓存了哪些数据
- 项目用的数据表有些
- String底层
- Java基本数据类型
- StringBuilder和StringBuffer的区别,底层原理,为什么StringBuffer线程安全
- 有哪些锁
- synchronized和lock的区别
- synchronized底层原理
- 锁升级过程是什么样的,重量级锁能降级吗
- synchronized能中断吗,能获取锁状态吗
- 汇编语言学过吗(没学过)
- MySQL的存储数据结构
- 为什么要使用B+树而不是B树
- 如何判断是否使用了索引
- 索引失效的情况有哪些
- 15分钟手撕算法,给一个字符串,返回所有可能的ip地址 总结:算法核心代码写出来了,但是那个编译器有问题没运行成功 Java基本数据类型byte一时间没答上来
# 2024-03-28 美团优选-小象超市
- 进程线程区别
- 临界区是什么
- 死锁的四个条件
- ==和equals区别
- Java线程池
- 写一道SQL,用到了GROUP BY和WHERE,一开始写的HAVING被纠正了
- 如何设计订单表,用户可以有多个订单,订单可以有多个商品
- 哪些字段不适合建立索引
- 联合索引的最左匹配原则
- 分库分表的区别
- 选用哪种字段做分库依据
- 基本数据类型
- 缓存穿透和缓存雪崩是什么,如何避免
- 手撕:反转链表
# 2024-03-26 美团优选-小象超市
- 为什么要做这两个项目?
- 缓存一致性问题?
- 车票购买的整体流程?
- 如何防止超卖?令牌的粒度?下一个请求获取到令牌是什么时机?
- 库存如何扣减?
- 介绍分库分表?
- 项目中如何使用分布式锁?讨论了令牌与座位的关系?
- 分布式锁是个什么类型的锁? 临界区的概念?没懂这里要问啥
- 介绍ARP、RARP的工作原理?
- 为什么需要ARP?ip是在不同子网之间是如何转换的?
- TCP保证可靠性的机制?
- 事务的四大特性?
- 脏读、不可重复读、幻读?项目中用到的隔离级别,遇到的问题?
- 为什么需要Tomcat这种外部容器,Tomcat的作用?
- 讲讲类加载机制,为什么需要类加载,类加载的过程?了解Tomcat和servelet的类加载吗?
- 基本数据类型与包装类,缓存机制?
- 异常体系?
- 算法:层序遍历(mid)+最大路径和(hard)
# 2024-03-22
- 自我介绍
- redis中常用的数据结构
- redis抽奖功能实现,其他的数据结构可以做什么
- redis在项目中做什么,为什么速度快
- 二级缓存,缓存一致性怎么解决
- 项目上线没,流量大不大
- 谈谈对MySQL的了解吧
- 索引相关,项目中哪里用到了索引,为什么这么用
- 事务相关,四大特性等等
- 做项目时遇到的难题,这里刚开始说偏了,说了两个编程时遇到的java相关问题
- 用到的设计模式,单例,装饰,适配器,代理。怎么用到项目里的
- 两道编程题,都不难,但是第一次手撕有点紧张,以后要练练压力编程了
- 聊天了,聊了10分钟,遇到的困难及解决那些