拼多多 java岗面经(社招)

一面

1、当前读与快照读的区别?

2、类加载过程?

3、聚簇和非聚簇索引。

4HashMap&ConcurrentHashMap

5、再谈谈一致hash 算法?

6、乐观锁&悲观锁?

7、双亲委派机制及使用原因?

8、线程池的核心参数和基本原理。

9、线程池的调优策略。

10、可重入锁&Synchronize

11、用自己的实践经历说一下索引的使用场景

12、说说GC 算法?

13Http&Https 的区别。

1https 协议需要到CA 申请证书,一般免费证书较少,因而需要一定费用。

2http 是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl/tls 加密传输协

议。

3http https 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是

443

4http 的连接很简单,是无状态的;HTTPS 协议是由SSL/TLS+HTTP 协议构建的可进行加

密传输、身份认证的网络协议,比http 协议安全。

14Https 的加密方式。

15、你有什么职业规划。


二面

1、说说自己参与的项目,技术难度在哪里?

2Collections.sort 底层排序方式?

3、排序稳定性?

4、具体场景的排序策略?

5Http 请求过程,DNS 解析过程。

6、三次握手四次挥手。

7、简述线程池和并发工具的使用?

8、数据库索引原理。

9、频繁老年代回收怎么分析解决?

10Spring IOCAOP

11、讲讲SpringBoot/SpringCloud 的一些应用?

12、阻塞队列不用java 提供的自己怎么实现,condition wait 不能用

13、拥塞窗口讲一讲,为什么要用慢启动算法

14、负载均衡的原理?

15Redis 的数据一致性问题

16、讲讲docker 容器?

17、如何实现何高并发下的削峰,限流?

18、你有什么职业规划?三面

1、项目中用的中间件的理解(DubboMQRediskafkazk)

2、服务器雪崩是怎么造成的?之前有这样的经历吗?怎么防备?

3、高并发架构的设计思路。

4、以前项目中遇到的最大问题和解决策略。

5、生活中遇到的最大的挫折。

6、生活中遇到的最大的令你最有成就感的事情。

7、你有什么职业规划?

#拼多多##面经##java工程师##社招#
全部评论
职业规划?
点赞 回复 分享
发布于 2021-06-05 17:39
我还以为是校招呢😂第一个问题就这么有深度
点赞 回复 分享
发布于 2021-06-06 17:54
拿到offer了没
点赞 回复 分享
发布于 2021-06-24 19:22
在拼多多这样的电商平台上,后端系统需要处理大量的并发请求和数据,因此老年代回收(Full GC)频繁发生是一个常见的问题。老年代回收频繁通常会导致系统性能下降,响应延迟增加,甚至可能出现系统崩溃的情况。针对这一问题,我们可以从以下几个方面进行分析和解决: 首先,需要了解老年代回收频繁的原因。可能的原因包括: 系统承载高并发请求或处理大量数据,导致Young GC过于贫乏,每次Young GC后存活对象过多,内存分配不合理,Survivor区过小,使得对象频繁进入老年代,从而触发Full GC。 系统一次性加载过多数据进内存,导致大对象直接进入老年代,进而触发Full GC。 系统存在内存泄漏,大量对象无法回收,始终占用在老年代中,导致Full GC频繁发生。 Metaspace(永久代)因为加载类过多而触发Full GC。 误调用System.gc()方法触发Full GC。 针对以上原因,我们可以采取以下措施来解决老年代回收频繁的问题: 合理分配内存,调大Survivor区的大小,以减少对象进入老年代的可能性。同时,优化代码逻辑,减少不必要的大对象创建。 使用内存快照工具和MAT等工具分析内存使用情况,找出内存泄漏的原因,并进行修复。同时,定期清理不再使用的对象,释放内存空间。 避免误调用System.gc()方法。该方***建议JVM进行Full GC,可能导致系统性能下降。在编码过程中,应注意避免使用该方法。 对系统性能进行持续监控,以便及时发现并处理老年代回收频繁的问题。可以使用性能测试工具对系统进行压力测试,模拟高并发场景,观察系统的表现,并针对性地进行优化。 此外,拼多多作为一家电商平台,其业务特点决定了后端系统需要处理大量的并发请求和数据。因此,在解决老年代回收频繁的问题时,还需要结合具体的业务场景和需求进行考虑。例如,可以优化数据库查询、缓存策略等方面,减少系统的负载,降低老年代回收的频率。 总之,解决老年代回收频繁的问题需要从多个方面入手,包括优化内存分配、修复内存泄漏、避免误调用GC方法以及持续监控和优化系统性能等。通过这些措施的实施,可以有效地提高拼多多后端系统的稳定性和性能,提升用户体验和业务效益。
点赞 回复 分享
发布于 04-01 00:07 浙江
在JVM中,新生代(Young Generation)通常被划分为三个区域:一个Eden区(E区)和两个Survivor区(S区),通常表示为S0和S1。Survivor区用于存放经历了一次GC后仍然存活的对象。 要调整Survivor区的大小,可以使用JVM的启动参数-XX:SurvivorRatio。这个参数用于设置Eden区与单个Survivor区的大小比例。例如,-XX:SurvivorRatio=8表示Eden区的大小是单个Survivor区的8倍。 Survivor区的大小对垃圾回收的性能有重要影响。如果Survivor区太小,可能会导致对象过早地晋升到老年代(Old Generation),从而增加Full GC的频率。相反,如果Survivor区太大,可能会浪费内存资源。 在设置Survivor区的大小时,需要根据你的应用程序的特性和性能需求进行权衡。一般来说,你可以尝试不同的-XX:SurvivorRatio值,并观察应用程序的性能和GC行为,以确定最适合你的应用程序的设置。 请注意,JVM的内存管理是一个复杂的主题,涉及到许多参数和调优选项。在进行任何调整之前,建议深入理解JVM的内存模型和垃圾回收机制,并参考相关的官方文档和最佳实践。 此外,现代JVM(如Java 8及以上版本)通常具有自适应的内存管理功能,可以自动调整新生代和老年代的大小,以适应应用程序的运行时需求。在大多数情况下,这些自适应功能可以提供良好的性能,而无需手动调整内存参数。然而,对于特定的应用程序或性能要求,手动调整内存参数可能是有益的。
点赞 回复 分享
发布于 04-01 00:13 浙江

相关推荐

评论
5
34
分享
牛客网
牛客企业服务