首页 简历|笔试面试

美团面经(完结)

  • 25年9月4日 发布
  • 24.1KB 共16页
美团面经(完结)美团面经(完结)美团面经(完结)美团面经(完结)美团面经(完结)

美团面经(完结)

项目

员工人数

员工总薪酬

人均薪酬

扣除股权激励

扣除股权激励+社保+公积金+高管费用

同学 1(附答案)

1.自我介绍

2.java 的基本数据类型,对应的字节数;

3.基本数据类型和包装数据类型的区别,int 和 Integer 有什么区别(默认值不一样,泛型

只能是包装数据);

答案

包装类型不赋值就是 null ,而基本类型有默认值且不是 null。

包装类型可用于泛型,而基本类型不可以。

基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员

变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道

几乎所有的对象实例(逃逸分析)都存在于堆中。

相比于对象类型, 基本数据类型占用的空间非常小。

4.浮点数据类型使用的时候要注意什么,精度丢失的原因?

答案

浮点数据类型在进行精确计算时,会出现精度丢失的问题。因为浮点数很多小数在二进制

环境下很多都无法完整的表示,只能截取部分数据来近似的表示。

1)由于计算机内部以二进制保存,所以十进制的有限位的小数,在计算机内部会是一个

无限位的小数。

2)计算机保存浮点数的精度有限,例如 float 可以保留十进制最多 7 位(二进制 23 位)

有效数字,double 以保留十进制 15~16 位(二进制 52 位)有效数字。那有效数字以后的

就被忽略了。

3)根据浮点数的存储标准(IEEE 制定),float 类型指数的起始数为 127(二进制 0111

1111),double 类型指数的起始数为 1023(二进制 011 1111 1111),在此基础上加指

数,得到的就是内存中指数的表示形式。尾数则直接填入,如果空间多余则以 0 补齐,如

果空间不够则 0 舍 1 入。

5.java 面向对象的特征,具体表现是什么,接口和抽象类的区别和共同点(都不能直接实

例化),继承的优缺点?

答案

共同点 :

都不能被实例化。

都可以包含抽象方法。

都可以有默认实现的方法(Java 8 可以用 default 关键字在接口中定义默认方法)。

区别 :

接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要

用于代码复用,强调的是所属关系。

一个类只能继承一个类,但是可以实现多个接口。

接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象

类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。

继承的优缺点

1、优点

提高了代码的再利用性。

提高了代码的维护性。

让类与类有关,是多态的前提。

2、缺点

提高类的耦合性。这样一个类的变化会影响其他与此类相关的类别。

6.==和 equals 区别;

7.hashcode;

8.java 里面的异常,之间的区别,说几个常见异常;

9.反射是什么?优缺点,反射的应用场景

答案

动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制,在运行状态

中,对于任意一个类,能够知道这个类的所有属性和方法,对于任意一个对象,能够调用

它的任意一个方法和属性,这就是 Java 的反射机制

优缺点

优点:可以实现动态创建对象和编译,体现出很大的灵活性。让用户在不需要修改代码的

情况下获得新增的类的对象。

缺点:性能会影响。

应用场景

JDBC 连接数据库时使用 Class.forName()通过反射加载数据库的驱动程序

很多开发工具如 Eclispe、IDEA 等利用反射动态解析对象的类型与结构,动态提示对象的

属性和方法

Web 服务器中利用反射调用了 Sevlet 的 service 方法

Spring AOP 的特性也是依赖反射实现的

10.讲下注解(因为前面提到了我用到了自定义注解,所以我解释了自定义注解我的实

现);

答案

提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元

素(类、方法、成员变量等)进行关联。是一种说明、配置、描述性的信息,与具体业务

无关,也不会影响正常的业务逻辑。但我们可以用反射机制来进行校验、赋值等操作。

注解的常见用途:

生成文档的注解,如@author,@param。

跟踪代码依赖性,实现替代配置文件功能,如 spring mvc 的注解。

编译时进行格式检查,如@override。

编译时进行代码生成补全,如 lombok 插件的@Data。

11.arratLsit 和 LinkedList 讲一讲,是线程安全的嘛?arratLsit 初始化大小,怎么从 0 变

到 10 的?(扩容算法实现的);

答案

ArrayList 的初始化容量在 JDK1.7 之前一直是 10,从 JDK1.7 开始初始化容量为 0,等到第

一次 add 的时候再初始化为 10。做这样的改动,就是延迟初始化 ArrayList 的实际容量,

应该是考虑到空间的问题,如果一开始就初始化为 10,这个大小为 10 的数组中就全部是

存的 null,如果数量多了,这个也是很大的空间。应该是这样的原因吧。ArrayList 的初

始化容量已经变了,不再是以前的 10 了,而是初始化为 0,等到第一次 add 的时候再初

始化为 10。做这样的改动,就是延迟初始化 ArrayList 的实际容量,应该是考虑到空间的

问题,如果一开始就初始化为 10,这个大小为 10 的数组中就全部是存的 null,如果数量

多了,这个也是很大的空间。应该是这样的原因吧。

12.hashmap 底层数据结构和原理;为什么转化成红黑树?是线程安全嘛?想用安全的

hashmap,该怎么做?

13.ConcurrentHashmap 怎么实现的线程安全?

14.jvm 的数据区域,1.8 的元空间了解吗?

15.堆的结构,垃圾回收的区域都有哪些?怎么判断死亡?引用计数法的缺点?

答案

堆的结构主要分为新生代和老年代,永久代,在 JDK1.8 之后永久代移除改为元空间。新

生代细分为 Eden 区,Survivor0 区,Survivor1 区。

垃圾回收的区域 GC 其实准确分类只有两大种:

1)部分收集 (Partial GC):

新生代收集(Minor GC / Young GC):只对新生代进行垃圾收集;

老年代收集(Major GC / Old GC):只对老年代进行垃圾收集。需要注意的是 Major GC

在有的语境中也用于指代整堆收集;

混合收集(Mixed GC):对整个新生代和部分老年代进行垃圾收集。

2)整堆收集 (Full GC):收集整个 Java 堆和方法区。

死亡对象判断方法

引用计数法

给对象中添加一个引用计数器:

每当有一个地方引用它,计数器就加 1;

当引用失效,计数器就减 1;

任何时候计数器为 0 的对象就是不可能再被使用的。

这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,

其最主要的原因是它很难解决对象之间相互循环引用的问题。

所谓对象之间的相互引用问题,如下面代码所示:除了对象 objA 和 objB 相互引用着对方

之外,这两个对象之间再无任何引用。但是他们因为互相引用对方,导致它们的引用计数

器都不为 0,于是引用计数算法无法通知 GC 回收器回收他们。

可达性分析算法

这个算法的基本思想就是通过一系列的称为 “GC Roots” 的对象作为起点,从这些节点开

始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相

连的话,则证明此对象是不可用的,需要被回收。

16.垃圾回收算法和常见垃圾回收器,讲了 cms 和 g1,年轻代有哪些垃圾收集器?说下 g1

和摒弃分代的优点。

答案

1)垃圾回收算法

标记-清除算法,该算法分为“标记”和“清除”阶段:首先标记出所有不需要回收的对象,在

标记完成后统一回收掉所有没有被标记的对象。它是最基础的收集算法,后续的算法都是

对其不足进行改进得到。这种垃圾收集算法会带来两个明显的问题:

效率问题

空间问题(标记清除后会产生大量不连续的碎片)

标记-复制算法,为了解决效率问题,“标记-复制”收集算法出现了。它可以将内存分为大

小相同的两块,每次使用其中的一块。当这一块的内存使用完后,就将还存活的对象复制

到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间

的一半进行回收。

标记-整理算法,根据老年代的特点提出的一种标记算法,标记过程仍然与“标记-清除”算

法一样,但后续步骤不是直接对可回收对象回收,而是让所有存活的对象向一端移动,然

后直接清理掉端边界以外的内存。

分代收集算法,当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思

想,只是根据对象存活周期的不同将内存分为几块。一般将 java 堆分为新生代和老年

代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。

比如在新生代中,每次收集都会有大量对象死去,所以可以选择”标记-复制“算法,只需

要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高

的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整

理”算法进行垃圾收集。

2)垃圾收集器

2-1)Serial 收集器

Serial(串行)收集器是最基本、历史最悠久的垃圾收集器了。大家看名字就知道这个收

集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收

集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有

的工作线程( “Stop The World” ),直到它收集结束。

新生代采用标记-复制算法,老年代采用标记-整理算法。

虚拟机的设计者们当然知道 Stop The World 带来的不良用户体验,所以在后续的垃圾收

集器设计中停顿时间在不断缩短(仍然还有停顿,寻找最优秀的垃圾收集器的过程仍然在

继续)。

但是 Serial 收集器有没有优于其他垃圾收集器的地方呢?当然有,它简单而高效(与其他

收集器的单线程相比)。Serial 收集器由于没有线程交互的开销,自然可以获得很高的单

线程收集效率。Serial 收集器对于运行在 Client 模式下的虚拟机来说是个不错的选择。

2-2)ParNew 收集器

ParNew 收集器其实就是 Serial 收集器的多线程版本,除了使用多线程进行垃圾收集外,

其余行为(控制参数、收集算法、回收策略等等)和 Serial 收集器完全一样。

新生代采用标记-复制算法,老年代采用标记-整理算法。

它是许多运行在 Server 模式下的虚拟机的首要选择,除了 Serial 收集器外,只有它能与

CMS 收集器(真正意义上的并发收集器,后面会介绍到)配合工作。

2-2-1)并行和并发概念补充:

并行(Parallel) :指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。

并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行,可能会交

替执行),用户程序在继续运行,而垃圾收集器运行在另一个 CPU 上。

2-3)Parallel Scavenge 收集器

Parallel Scavenge 收集器也是使用标记-复制算法的多线程收集器,它看上去几乎和

ParNew 都一样。

Parallel Scavenge 收集器关注点是吞吐量(高效率的利用 CPU)。CMS 等垃圾收集器的关

注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是 CPU 中用于运行

用户代码的时间与 CPU 总消耗时间的比值。 Parallel Scavenge 收集器提供了很多参数供

用户找到最合适的停顿时间或最大吞吐量,如果对于收集器运作不太了解,手工优化存在

困难的时候,使用 Parallel Scavenge 收集器配合自适应调节策略,把内存管理优化交给虚

拟机去完成也是一个不错的选择。

新生代采用标记-复制算法,老年代采用标记-整理算法。

2-4)CMS 收集器

CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集

器。它非常符合在注重用户体验的应用上使用。

CMS(Concurrent Mark Sweep)收集器是 HotSpot 虚拟机第一款真正意义上的并发收集

器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作。

从名字中的 Mark Sweep 这两个词可以看出,CMS 收集器是一种 “标记-清除”算法实现

的,它的运作过程相比于前面几种垃圾收集器来说更加复杂一些。整个过程分为四个步

骤:

初始标记: 暂停所有的其他线程,并记录下直接与 root 相连的对象,速度很快 ;

并发标记: 同时开启 GC 和用户线程,用一个闭包结构去记录可达对象。但在这个阶段结

束,这个闭包结构并不能保证包含当前所有的可达对象。因为用户线程可能会不断的更新

引用域,所以 GC 线程无法保证可达性分析的实时性。所以这个算法里会跟踪记录这些发

生引用更新的地方。

重新标记: 重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记

产生变动的那一部分对象的标记记录,这个阶段的停顿时间一般会比初始标记阶段的时间

稍长,远远比并发标记阶段时间短

并发清除: 开启用户线程,同时 GC 线程开始对未标记的区域做清扫。

主要优点:并发收集、低停顿**。但是它有下面三个明显的缺点:

对 CPU 资源敏感;

无法处理浮动垃圾;

它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生。

2-5)G1 收集器

G1 (Garbage-First) 是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内

存的机器. 以极高概率满足 GC 停顿时间要求的同时,还具备高吞吐量性能特征.

并行与并发:G1 能充分利用 CPU、多核环境下的硬件优势,使用多个 CPU(CPU 或者

CPU 核心)来缩短 Stop-The-World 停顿时间。部分其他收集器原本需要停顿 Java 线程执

行的 GC 动作,G1 收集器仍然可以通过并发的方式让 java 程序继续执行。

分代收集:虽然 G1 可以不需要其他收集器配合就能独立管理整个 GC 堆,但是还是保留

了分代的概念。

空间整合:与 CMS 的“标记-清理”算法不同,G1 从整体来看是基于“标记-整理”算法实现的

收集器;从局部上来看是基于“标记-复制”算法实现的。

可预测的停顿:这是 G1 相对于 CMS 的另一个大优势,降低停顿时间是 G1 和 CMS 共同的

关注点,但 G1 除了追求低停顿外,还能建立可预测的停顿时间模型,能让使用者明确指

定在一个长度为 M 毫秒的时间片段内

G1 收集器的运作大致分为以下几个步骤:

初始标记

并发标记

最终标记

筛选回收

G1 收集器在后台维护了一个优先列表,每次根据允许的收集时间,优先选择回收价值最

大的 Region(这也就是它的名字 Garbage-First 的由来) 。这种使用 Region 划分内存空间以

及有优先级的区域回收方式,保证了 G1 收集器在有限时间内可以尽可能高的收集效率

(把内存化整为零)。

17.类的生命周期(类加载),讲下双亲委派机制,最顶层的类加载器是什么;

答案

每一个类都有一个对应它的类加载器。系统中的 ClassLoader 在协同工作的时候会默认使

用 双亲委派模型 。即在类加载的时候,系统会首先判断当前类是否被加载过。已经被加

载的类会直接返回,否则才会尝试加载。加载的时候,首先会把该请求委派给父类加载器

的 loadClass() 处理,因此所有的请求最终都应该传送到顶层的启动类加载器

BootstrapClassLoader 中。当父类加载器无法处理时,才由自己来处理。当父类加载器为

null 时,会使用启动类加载器 BootstrapClassLoader 作为父类加载器。

18.了解系统调用嘛,哪些用户态会转换到系统态?

19.进程和线程的区别,线程的状态,进程间的通信方式,同步方式?

20.volatile 了解吗,有原子性嘛,多线程怎么实现原子性,用过 synchronize 嘛,讲一

讲?synchronize 可以作用到什么上面,和 ReentrantLock 的区别

21.threadlocal 讲一讲;

22.线程池的运行流程;

23.网络的七层模型,tcp 和 udp 在哪一层,区别是什么?

答案

应用层、表示层、会话层、传输层,网络层、数据链路层、物理层; TCP 和 UDP 在传输层

24.http 属于那一层,常见的状态码?说下 400,302;

答案

HTTP 属于应用层

HTTP CODE 2xx

状态码:200 ok 含义:客户端请求成功

状态码:204 No Content 含义:请求处理成功,但没有资源科返回。204 不允许返回任何

实体的主体

状态码:206 Partial Content 含义:客户发送了一个带有 Range 头的 GET 请求,服务器完

成了它。使用 video 去播放视频,返回 206,说明视频范围

HTTP CODE 3xx

状态码:301 Moved Permanently 含义:永久重定向。该状态吗表示请求的资源已被分配

了新的 URI,以后应按 Location 首部字段提示的 URI 重新保存。

状态码:302 Found 含义:和 301 Moved Permanently 状态码相似,但 302 状态码代表

的资源不是被永久移动,只是临时性质的。

状态码:303 See Other 含义:303 状态码和 302 Found 状态码有着相同的功能,但 303

状态码明确表示客户端应当采用 GET 方法获取资源。

状态码:304 Not Modified 含义:1、304 虽然被划分在 3XX 类别中,但是和重定向没有

关系。2、资源已找到,但未符合条件请求。

条件请求是啥:采用 GET 方法的请求报文中包含 If-Match,If-ModifiedSince,If-None-

Match,If-Range,If-Unmodified-Since 中任一首部。

HTTP CODE 4xx

状态码:400 Bad Request 含义:请求报文中存在语法错误。当错误发生是,需要修改请

求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

状态码:401 Unauthorized 含义:返回含有 401 的响应必须包含一个适用于被请求资源

的 WWW-Authenticate 首部用以质询(challenge)用户信息。当浏览器初次接收到 401

响应,会弹出认证用的对话窗口。

状态码:403 Forbidden 含义:该状态码表明对请求资源的访问被服务器拒绝了。服务器

端没有必要给出拒绝的详细理由。未获得文件系统的访问授权,访问权限出现某些问题

(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因。

状态码:404 Not Found 含义:该状态吗表明服务器上无法找到请求的资源。

HTTP CODE 5xx

状态码:500 Intertnal Server Error 含义:服务器本身发生错误。也有可能是 Web 应用

存在的 bug 或某些临时的故障

状态码:503 Intertnal Server Error 含义:该状态码表明服务器暂时处于超负载或正在进

行停机维护,现在无法处理请求。

25.Redis 除了做缓存还能用来干什么,数据结构,缓存过期是怎么清理的,随便讲一个淘

汰算法?

26.spring 的 bean 生命周期;

答案

调用 bean 的构造方法创建 Bean

通过反射调用 setter 方法进行属性的依赖注入

如果 Bean 实现了 BeanNameAware 接口,Spring 将调用 setBeanName()方法,设置

Bean 的 name

如果 Bean 实现了 BeanFactoryAware 接口,Spring 将调用 setBeanFactory()方法,把

beanFactory 设置给 Bean

如果存在 BeanPostProcessor,Spring 将调用他们的 postProcessBeforeInitialization(预

初始化)方法,在 Bean 初始化前对其进行处理。

如果 Bean 实现了 InitializingBean 接口,Spring 将调用它的 afterPropertiesSet 方法。然

后调用 xml 定义的 init-method 方法,两个方法作用类似,都是在初始化 bean 的时候执行

如果存在 BeanPostProcessor,Spring 将调用他们的 postProcessAfterInitialization(后初

始化)方法,在 Bean 初始化后对其进行处理。

Bean 初始化完成,供应用使用,分为两种情况:如果 Bean 为单例的话,那么容器会返

回 Bean 给用户,并存入缓冲池;

当要销毁 Bean 的时候,如果 Bean 实现了 DisposableBean 接口,执行 destroy() 方法。

当要销毁 Bean 的时候,如果 Bean 在配置文件中的定义包含 destroy-method 属性,执行

指定的方法。

如果 Bean 是多例的话,容器将 Bean 返回给用户,剩下的生命周期由用户控制

27.讲下 IOC;

答案

IOC,即控制反转,就是由 Spring 容器管理 bean 的整个生命周期。

通过反射实现对其他对象的控制,包括初始化、创建、销毁等,解放手动创建对象的过

程,同时降低类之间的耦合度。

IOC 的好处就是降低了类之间的耦合,对象创建和初始化交给 Spring 容器管理,在需要的

时候只需向容器进行申请。

28.sentinel 和 nacos 的主要作用和原理;

29.问了问项目;

30.问了个模块我的数据库设计;

31.我在项目里怎么用的数据库表的索引;

32.分布式锁怎么用的?我讲了 Redision 锁。

33.算法:二分查找。

34.反问。

同学 2(优选物流调度,附答案)

一面 9.10 72min

• 实习、项目、MySQL 分布式锁深挖

• 进程和线程的区别?

• Java IO 流 如何划分?

• BIO、NIO、AIO 的区别?

• Java 反射用过吗?

• 说说 final 关键字

• JVM 内存结构了解吗?

• 说说创建对象的流程?

• JVM 引用类型有什么特点?

• 了解 GC 吗?不可达判断知道吗?

• 说说 MySQL 事务的隔离级别,如何实现?

• 说说 MVCC,解决了什么问题?(避免锁降低效率)

• 说说 MySQL 的三大日志?

• MySQL 执行语句的整个过程了解吗?

• select for update 锁什么?

• 算法 快排找 topK 个数字

详细答案:传送门

二面 9.13 66min

详细答案:https://mp.weixin.qq.com/s/dqk7ddguGxTs1Yy4pg9RCg

• String、StringBuilder、StringBuffer、为什么这么设计

• String 不可变、为什么不可变,有什么好处?怎么保证不可变。

• 抽象类能写构造函数吗(能)

• 接口能吗(不能)

• 为什么二者有这样的区别

• 为什么重写 equals,建议必须重写 hashCode 方法

• HashMap 的内部结构,1.7 和 1.8 的区别,有什么改进

• 进程间的通信方式

• 代码使用匿名管道使两个进程通信

• MySQL ACID 哪些机制来保证

• redo log、 bin log

• linux 命令 日志文件,每行都是一个异常,统计基数排序

• BeanFactory 和 ApplicationContext

• bean 加工有哪些方法?

• 设计模式,策略模式

• 为什么三次握手,有什么缺点,洪泛攻击,半连接服务拒绝

• 让你重新设计,怎么设计

• 智力题:100 瓶药水、一瓶毒药,一轮最少用多少只老鼠

• 算法:三数之和,不能重复

HR 面 9.20 28min

同学 3(一面)

详细答案:https://mp.weixin.qq.com/s/Vj-fd8ay2wvZdiKab2xD-w

1. java 的反射机制,反射的应用场景 AOP 的实现原理是什么,与动态代理和反射有什

么区别

2. object 有哪些方法 hashcode 和 equals 为什么需要一起重写 不重写会导致哪些问题

什么时候会用到重写 hashcode 的场景

3. redis list 如何实现,压缩 list 和双向链表,使用场景 为什么这么设计

4. 索引数据结构 为什么这么设计

5. 最左匹配原则 索引失效

6. 线程池怎么设计,拒绝策略有哪些,如何选择?怎么设计一个线程池 需要考虑哪些

因素

7. jmm 内存模型 栈 方法区存放的是什么

8. 如何判断 sql 的效率,怎样排查效率比较低的 sql

9. 如何保证 redis 缓存与数据库的一致性,为什么这么设计

10. java 的类加载机制 双亲委派机制 这样设计的原因是什么

11. jvm 中的可达性分析 对象有哪些引用类型 强引用 弱引用 软引用 虚引用的区别

12. 场景题支付宝借口回调 如何保证消息一致性

13. spring security 的原理

14. https 相比 http 有什么区别 对称加密和非对称加密 ca 证书验证

15. 数据库中的全局锁 表锁 行级锁 每种锁的应用场景有哪些

16. redis 持久化机制有哪些

17. 项目难点

18. 手撕环节 一道 medium 对链表进行插入排序

同学 4

9.14 一面 30min(偏八股):

参考答案:https://mp.weixin.qq.com/s/nwip8VIyYh0nYrbzmkt8dg

1、内存泄漏怎么排查

2、Jvm 相关知识

3、Spring AOP 发生在什么时候

4、Spring IOC

5、Bean 的生命周期

6、详细介绍一下第一个项目,难点

7、Redis 为什么性能快

8、Redis 内存中数据丢失怎么解决

9、业界使用哪一种数据持久化

10、两种持久化方法的优缺点

11、Redis 跳表

12、项目里 RocketMQ 做削峰,还有什么场景适合消息队列

13、介绍 RocketMQ 的架构,角色

14、从副本能接受请求吗

15、副本和分区的概念有什么区别

16、消费者组的概念,为什么要有这个概念

17、Java 基本数据类型

18、Object 有哪些方法

19、平时怎么使用多线程

20、核心线程数不够会怎么进行处理

21、饱和策略有哪几种

22、Java 面向对象的特点

23、策略模式

24、自己的代码用过什么设计模式

手撕

二叉树的层序遍历 秒过

9.14 二面 40min(强项目相关):

1、选一个有代表性的项目讲一下

2、为什么要做这个项目

3、实现的过程中有遇到什么困难吗

4、项目相关的一些问题

5、完成项目之后最大的提升

6、经常使用 github 看源码吗

7、另一个项目介绍

8、项目为什么会做这些优化,解决了什么问题

9、学习的方式和手段

10、竞赛相关问题

11、特别困难的经历

12、不知道怎么解决问题比如科研的时候,一般会怎么做

13、接口的性能不达标,比如是搜索,有什么解决思路

14、如何确定接口具体是哪一块慢

15、搜索的接口当数据量达到一定数量级怎么优化

16、运维项目的时候怎么判断服务是不是正常提供的,单机的项目看什么指标

17、jvm 调优有接触过吗

18、做程序员的优势和劣势

无手撕

9.20 三面 25min(偏场景题一点):

1、项目里的 kafka 做消息通知怎么使用的

2、真实场景下高并发可能导致部分账户延迟收到消息,怎么从业务上的逻辑上进行优化

3、通知推拉的模式,什么情况用 push,什么情况用 pull

4、MySQL 数据量特别大,怎么做扩展

5、索引为什么用 B+树,为什么不用红黑树

6、Redis 底层原理

7、海量的二维空间的点,再给你一个点,怎么找到离这个点最近的 100 个点

8、研究生的研究方向

9、为什么要算法转工程

10、项目中有没有合作的部分

11、职业规划

12、对于算法研究和开发有什么倾向

无手撕

9.27HR 面 20min:

常规 HR 面的问题,投递简历时考虑哪些因素,对美团的了解,对岗位的理解之类的,当

时 HR 面没有问期望薪资我都感觉要凉了,最后还是 OC 了。

反问的时候问多久能出结果,HR 说节后一周内,最后是 HR 面后 7 个工作日发的 OC。

开通会员 本次下载免费

所有资料全部免费下载! 推荐用户付费下载获取返佣积分! 积分可以兑换商品!
一键复制 下载文档 联系客服