Java大厂面试题精华:涵盖并发、Spring、数据库等领域

5星 · 超过95%的资源 需积分: 12 6 下载量 68 浏览量 更新于2024-09-09 1 收藏 21KB DOCX 举报
"这篇分享主要涵盖了BAT等一线互联网公司在Java面试中常问的经典题目,包括测试框架JUnit的使用、分布式锁实现、Nginx请求转发策略、HashMap与ConcurrentHashMap的区别、线程状态与同步机制、Java内存模型与垃圾回收、AOP原理、Maven与Git操作、Tomcat配置、Spring Bean的管理、Web.xml配置、Spring监听器、ZooKeeper的工作机制、IO操作、线程池、字符串与时间格式化、定时器、锁的种类与应用、ThreadLocal、JVM命令、数据库锁等核心知识点。" 1. Junit用法中的before, beforeClass, after, afterClass是测试注解,分别在每个测试方法前、所有测试方法前、每个测试方法后、所有测试方法后执行,用于初始化和清理工作。 2. 分布式锁通常使用ZooKeeper、Redis或数据库来实现,用于在多节点之间协调资源访问,防止并发冲突。 3. Nginx的请求转发算法可以通过weight参数配置权重,实现不同服务器间负载均衡。 4. 使用HashMap实现Redis可能会遇到死锁和死循环问题,因为HashMap非线程安全。推荐使用ConcurrentHashMap,它提供了线程安全的哈希表操作。 5. 线程的状态包括新建、就绪、运行、阻塞和死亡,了解这些状态有助于理解线程的生命周期。 6. sleep()使当前线程暂停指定时间,而wait()是Object类的方法,用于线程间通信,释放对象锁进入等待状态。 7. HashMap的底层实现基于数组+链表/红黑树,快速查找和插入。 8. 实现万人抢百红包,可以使用分布式锁保证并发安全,避免同一红包被多次领取。 9. Java内存模型定义了数据在处理器和主存间的交互规则,垃圾回收机制通过可达性分析确定对象是否可回收。 10. Integer的引用交换仅改变方法内的局部变量,不会影响方法外的引用。 11. AOP(面向切面编程)的底层实现通常是动态代理,如Java的CGlib和JDK动态代理,能为多个对象动态生成代理类。 12. Maven的install命令用于将项目打包并安装到本地仓库,test命令执行测试,git是版本控制工具。 13. Tomcat的docBase配置用于指定Web应用的根目录。 14. Spring的bean可以通过XML、注解、Java配置等方式进行管理。 15. Web.xml是Servlet容器的部署描述符,配置Web应用的各种元素。 16. Spring监听器可以监听容器内对象的生命周期事件。 17. ZooKeeper通过ZNode数据结构存储服务注册,并提供缓存机制。 18. IO操作如readLine()通常是阻塞的,直到读取到数据或到达文件末尾。 19. Java提供了ExecutorService等接口实现线程池,可以管理线程的创建与销毁。 20-21. 字符串格式化可以使用String.format()方法,时间格式化使用SimpleDateFormat或DateTimeFormatter。 22. 定时器通常使用Java的ScheduledExecutorService实现周期任务。 23. 结束线程通常通过设置共享变量、interrupt()或抛出InterruptedException。 24. Java的锁包括乐观锁、悲观锁、synchronized、可重入锁、读写锁等,ReentrantLock提供了更丰富的同步控制,如公平性、尝试锁、超时等待等。 25. ThreadLocal适用于需要为每个线程维护独立副本的场景,如线程安全的请求上下文。 26. Java内存模型包括堆、栈、方法区、程序计数器、本地方法栈,垃圾回收机制主要由新生代、老年代和元空间组成。 27. start()方法启动线程,使线程进入就绪状态,而run()直接执行方法,不会开启新线程。 28. QMQ消息队列的实现涉及生产者、消费者、队列和存储机制。 29. 遍历HashMap的三种方式:迭代器、键集合for-each循环、键值对forEach方法。 30. JVM命令如jps、jstat、jmap、jstack等用于监控和诊断JVM状态。 31. Memcached和Redis都是缓存系统,但Redis支持更多数据结构,且性能更高。 32. MySQL的行级锁是在索引记录级别,确保并发读写的安全。 33. ConcurrentHashMap的锁分段,通过分段锁提高并发性能,但并非分段越多越好,过多会增加锁竞争。 34. MySQL的InnoDB引擎支持行级锁,如Record Lock、Gap Lock、Next-Key Lock。 以上是面试题中涉及的关键知识点,掌握这些内容将有助于提升面试者的Java技术水平。