社招 Java 中厂面试记录,难度有点大!

个人情况:社招一年半

面试公司:上海海鼎信息和深圳小赢科技

面试感受:总体难度还是有点大的,第二家公司拷打的问题非常非常多,一共 60 个问题,多少有点离谱儿。不过,面试体验很好,面试官会引导往哪个方向思考。

一面

  • 请做一下自我介绍。
  • 请介绍一下你参与过的项目。
  • 请解释一下接口(Interface)和抽象类(Abstract Class)的区别。
  • 什么是受检异常(Checked Exception)和非受检异常(Unchecked Exception)?
  • 请比较 String、StringBuffer 和 StringBuilder 的区别。
  • 请列举 Object 类中的常用方法。
  • HashTable 和 ConcurrentHashMap 是如何保证线程安全的?它们的原理是什么?
  • 死锁产生的原因是什么?如何避免死锁?
  • 请谈谈 Java 中的锁机制(例如 synchronized, ReentrantLock 等)。
  • 请解释一下数据库的行级锁。
  • 什么是线程?请介绍一下 Java 中的多线程。
  • 介绍一下 Java 的线程池,包括核心参数和常见的拒绝策略。
  • 请描述 JVM 的内存区域划分(哪些是线程私有,哪些是共享)?JDK 1.7 和 1.8 在这方面有什么主要区别(比如方法区/元空间)?
  • 请描述一次典型的垃圾回收(GC)流程。
  • 你了解哪些 JVM 的核心配置参数?什么是 OOM (OutOfMemoryError)?
  • 什么是数据库事务?什么是分布式事务?你在工作中有实际使用过分布式事务吗?
  • 你通常如何进行 SQL 调优?
  • 进行接口对接时,你会遵循哪些设计原则?
  • 如果一个接口访问很慢,你会如何排查问题?
  • 请解释一下 Spring Boot 的自动装配原理。
  • 如何设计方案来保证库存在高并发下不会超卖(超扣)?如何处理并发的出库和入库?
  • 如果线上系统发生卡顿甚至导致服务重启,你会如何分析原因?

参考答案 :上面绝大部分面试问题的答案,都可以在 JavaGuide《Java 面试指北》 中找到。

一面 (另一场)

  1. 请做一下自我介绍。
  2. Redisson 实现分布式锁的原理是什么?它是如何支持可重入的?
  3. 使用 Redisson 分布式锁时,未能获取锁的线程会阻塞,它们是如何被唤醒的?
  4. (针对上题)使用定时任务轮询来尝试唤醒这些阻塞的线程,这种方式可行吗?为什么?
  5. 动态多数据源切换是如何实现的?其基本原理是什么?
  6. 请谈谈 ThreadLocal 的特性和作用。
  7. ThreadLocal 可能导致内存泄漏吗?为什么?如何避免?
  8. 请解释一下模板方法设计模式及其主要使用场景。
  9. 在 Java 中,你最常使用哪些集合类?
  10. ArrayList 是线程安全的吗?有哪些线程安全的 List 实现?
  11. CopyOnWriteArrayList 是通过加锁实现的吗?它的原理是什么?除了它还有其他的线程安全 List 吗(如 Vector, Collections.synchronizedList)?
  12. 请描述 HashMap 的底层数据结构(JDK 1.7 和 1.8+)。
  13. 数组和链表的主要区别、各自特点以及适用场景是什么?
  14. 如果 HashMap 中发生了大量的哈希冲突,可能的原因有哪些?
  15. HashMap 是线程安全的吗?请举例说明它在多线程环境下可能出现的问题(如 JDK 1.7 的死循环,JDK 1.8 的数据覆盖)。
  16. 如果需要线程安全的 Map,有哪些选择(如 ConcurrentHashMap, Hashtable, Collections.synchronizedMap)?
  17. ConcurrentHashMap 是如何保证线程安全的(分段锁/CAS + Synchronized)?
  18. 请解释一下 CAS(Compare-and-Swap)操作的原理。
  19. CAS 操作中的 ABA 问题是什么?如何解决(例如使用版本号)?
  20. 线程池主要用于哪些场景?为什么要使用线程池?它的优点是什么?
  21. 线程池中的阻塞队列(BlockingQueue)起什么作用?有哪些常用的阻塞队列类型?
  22. 请比较 synchronized 和 ReentrantLock 的主要区别。
  23. 请解释面向对象编程(OOP)和面向过程编程(POP)的区别。
  24. 你了解函数式编程吗?它有哪些主要特性?这些特性与并发编程和线程安全有什么关系(例如不可变性)?
  25. 如何排查 OOM (OutOfMemoryError) 问题?
  26. 除了堆内存 OOM,栈内存会发生 OOM(更准确地说是 StackOverflowError)吗?什么样的代码可能导致栈溢出?
  27. 请描述 Spring 中 Bean 的完整生命周期。
  28. 你了解 Spring 的事务管理吗?哪些场景下 Spring 事务会失效?如果想让同一个类中方法内部调用也应用事务,该如何处理?
  29. 如果让你封装一个日志组件,用于自动打印接口的请求参数、响应结果和执行时间,你会如何设计?
  30. 如果需要在系统中加入限流和熔断功能,你会考虑使用哪些技术(如 Sentinel, Resilience4j)?请具体描述一下实现思路。
  31. 你是如何理解"面向接口编程"的?它有什么好处?
  32. MySQL 索引(例如 B+ 树索引)的底层实现原理是什么?
  33. B 树和 B+ 树的主要区别是什么?为什么 MySQL 选择 B+ 树?
  34. 如果需要为 a 和 b 两个字段创建联合索引,应该创建 (a, b) 还是 (b, a)?依据是什么?
  35. 请列举一些常见的导致 MySQL 索引失效的场景。
  36. 为什么包含大量 NULL 值的列上建立索引效果可能不好或"失效"?(注意:MySQL 对 NULL 值索引已有优化,具体取决于版本和场景)
  37. SELECT *SELECT <索引字段> 在使用索引方面有什么区别(例如覆盖索引)?
  38. 如何为一个很长的字符串字段(如 URL)在大数据量表中创建高效的索引(例如前缀索引)?
  39. (针对上题)除了使用前缀索引,还有没有其他需要增加字段的方式来优化长字符串索引(例如使用 HASH 索引或将 URL 特征提取到新字段)?
  40. 为什么通常推荐使用自增 ID 作为 MySQL 表的主键?
  41. 请介绍一下数据库事务的隔离级别。
  42. MySQL 是如何实现"读已提交"(Read Committed)和"可重复读"(Repeatable Read)隔离级别的(例如通过 MVCC)?
  43. 请简要解释一下 MVCC(多版本并发控制)的原理。
  44. 除了索引优化,还有哪些常见的 SQL 慢查询优化方法?
  45. Redis 为什么采用单线程模型?它单线程为什么还能这么快?
  46. 什么是缓存雪崩?如何解决?
  47. 什么是缓存穿透?如何解决?
  48. 请介绍一下布隆过滤器(Bloom Filter)的原理和应用场景。
  49. 如果需要统计网站搜索某关键词的用户数量(UV),且允许一定误差,你会使用什么技术(例如 HyperLogLog)?
  50. HyperLogLog 的底层原理大致是怎样的?它的内存占用情况如何?
  51. 设计一个支付接口时,如何保证其幂等性?
  52. 在高并发场景下,如何在不使用分布式锁的情况下保证支付接口的幂等性(例如使用唯一请求 ID + 状态机/去重表)?
  53. 请描述一下使用乐观锁(例如基于版本号)的基本流程。
  54. 请再次介绍一下你的项目及其系统架构。
  55. 如果将一个单体应用改造为微服务架构,主要需要考虑哪些方面?服务间的调用通常如何实现?描述一下前端请求到达后端微服务的典型流程。
  56. Nginx 常用的负载均衡策略有哪些?如果后端某个服务节点故障,Nginx 是如何感知并处理的(健康检查)?
  57. 如果让你为一个系统设计监控体系,你会关注哪些关键指标?监控系统通常如何采集这些数据?
  58. 在工作之外,你学习或了解到的比较有挑战性的技术问题是什么?
  59. (如果适用)你认为从传统企业背景如何快速适应互联网公司的工作节奏和文化?
  60. 你对当前人工智能(AI)的发展有什么看法?它对软件开发可能带来哪些影响?

二面

  • 如果让你指导一位新人排查线上接口响应慢的问题,你会建议他从哪些方面入手?如何分析和进行 SQL 调优?
  • 为什么选择使用 Spring Boot?假设一个公司官网使用 Spring Boot,你认为主要原因可能是什么?相比 PHP、Python 等技术栈,它有哪些优势或考量?
  • ...

参考答案 :上面绝大部分面试问题的答案,都可以在 JavaGuide《Java 面试指北》 中找到。

相关推荐
星途码客几秒前
C++位运算精要:高效解题的利器
java·c++·算法
爪娃侠21 分钟前
wsl2的centos7安装jdk17、maven
java·maven
在下木子生31 分钟前
SpringBoot条件装配注解
java·spring boot·后端
huan991 小时前
Obsidian 插件篇 - 插件汇总简介
后端
周Echo周1 小时前
5、vim编辑和shell编程【超详细】
java·linux·c++·后端·编辑器·vim
用户94508519124921 小时前
一文搞懂过滤器和拦截器
java
AronTing1 小时前
03-深入解析 Spring AOP 原理及源码
后端
逻辑重构鬼才1 小时前
AES+RSA实现前后端加密通信:全方位安全解决方案
后端
Java水解1 小时前
Java面试必问到的10道面试题
java·面试
卤蛋七号1 小时前
JavaSE高级(一)
后端