美团面试题集:Java虚拟机、JVM、并发编程与数据库深度解析
需积分: 5 53 浏览量
更新于2024-08-04
收藏 1.62MB PDF 举报
"该资源为程序员面试相关的PDF文档,涵盖了Java虚拟机内存模型、动态加载类、垃圾回收机制、字符串处理、数据结构、并发编程、数据库优化、Web通信及会话管理等多个Java和Web开发的核心知识点。"
以下是相关知识点的详细说明:
1. **Java虚拟机内存模型**:
- Java内存模型分为堆内存、栈内存、方法区(在Java 8之后被元空间取代)、程序计数器和本地方法栈。内存溢出通常发生在堆内存,永久代(或元空间)过度使用也可能导致问题。
2. **动态加载类的框架**:
- 常见的有Spring框架、OSGi、PicoContainer等,它们允许在运行时动态地发现和加载新的类和组件。
3. **动态代理**:
- 主要有两种实现方式:JDK动态代理(基于接口的代理)和CGLIB动态代理(基于类的代理)。应用场景包括AOP(面向切面编程)、事务处理、日志记录等。
4. **栈溢出**:
- 栈溢出是可能发生的,通常抛出`StackOverflowError`异常。JVM可以通过`-Xss`参数设置栈的大小。
5. **查看JVM状态和堆栈信息的命令**:
- `jstat`用于收集JVM各种统计信息;`jmap`用于映射堆内存;`jstack`用于打印线程堆栈跟踪;`jinfo`提供配置信息;`jconsole`和`VisualVM`则是图形化工具。
6. **JVM垃圾回收机制**:
- 包括Minor GC、Major GC和Full GC,通过不同的垃圾收集器(如Serial、Parallel、G1等)进行自动内存管理。
7. **类加载机制**:
- 类加载由引导类加载器、扩展类加载器和应用程序类加载器完成,用户可以通过自定义类加载器实现特定的加载逻辑。`findClass`和`loadClass`都是类加载方法,但`loadClass`会先尝试父加载器。
8. **String、StringBuffer和StringBuilder**:
- String是不可变对象,适合少量字符串操作;StringBuffer和StringBuilder可变,线程安全性和性能上有所不同,后者更适合单线程环境下大量字符串拼接。
9. **不可变类的实现**:
- 通过私有构造函数、final字段、不提供修改方法等方式确保对象创建后无法修改。
10. **浅复制和深复制**:
- 浅复制只复制对象本身,深复制还复制对象引用的对象。深复制可通过序列化和反序列化、拷贝构造函数或Cloneable接口实现。
11. **HashMap、HashTable、ConcurrentHashMap**:
- HashMap非线程安全,效率高;HashTable线程安全,但效率低;ConcurrentHashMap是线程安全且高效的并发容器。
12. **CAS同步机制**:
- CAS(Compare and Swap)是无锁算法,通过原子性地比较并更新内存值来实现同步。
13. **NIO原理**:
- NIO(Non-blocking I/O)包含通道、缓冲区和选择器等组件,支持非阻塞I/O操作,提高系统并发性能。
14. **Java反射机制**:
- 反射允许运行时访问、创建、修改类的属性和方法,广泛应用于插件、序列化、动态代理等场景。
15. **Spring加载Bean的流程**:
- 从配置文件解析Bean定义,实例化Bean,依赖注入,然后初始化Bean。
16. **Java线程池**:
- ExecutorService接口和ThreadPoolExecutor类用于创建线程池,构造参数包括核心线程数、最大线程数、线程存活时间(keepAliveTime)等。
17. **并发编程场景**:
- 使用并发包中的Semaphore、ExecutorService、CountDownLatch、CyclicBarrier等工具类可以实现多接口调用和数据合并。
18. **CountDownLatch和CyclicBarrier**:
- CountDownLatch用于等待多个任务完成,计数一次后不能重置;CyclicBarrier允许一组线程等待其他线程到达屏障点后继续执行,可重用。
19. **线程加锁方式**:
- synchronized是内置锁,简单易用;Lock接口提供了更灵活的加锁机制,如ReentrantLock。
20. **volatile关键字**:
- volatile确保多线程环境下变量的可见性和有序性,但不保证原子性。
21. **MySQL存储引擎**:
- 包括InnoDB(事务支持)、MyISAM(快速查询)、Memory(数据存储在内存中)等。
22. **SQL优化**:
- 着手点包括合理创建索引、避免全表扫描、减少JOIN操作、优化子查询等。最左前缀原则是指组合索引仅在查询条件匹配最左边列时有效。
23. **Spring MVC处理请求流程**:
- 从DispatcherServlet接收请求,通过HandlerMapping找到处理器,调用HandlerAdapter处理,最后返回View给客户端。
24. **Spring事务管理**:
- 可以通过编程式(手动管理事务)或声明式(基于注解或XML配置)方式实现。事务回滚通过异常触发,自定义异常需配置为回滚异常。
25. **脏读、幻读**:
- 脏读是未提交的数据被其他事务读取;幻读是在范围查询中,事务看到的数据前后不一致。
26. **TCP四次挥手**:
- 断开连接需要四次交互,TIME_WAIT至少设置两倍MSL(报文段最大生存时间)是为了确保旧数据在网络中消亡。
27. **GET和POST请求**:
- GET用于获取资源,数据在URL中;POST用于提交数据,数据在请求体中。
28. **Cookie和Session**:
- Cookie是客户端存储,用于跟踪用户状态;Session是服务器端存储,同样用于管理用户会话。
29. **开源中间件**:
- 缓存如Redis、Memcached;消息中间件如RabbitMQ、Kafka;分布式框架如Dubbo、Spring Cloud等。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-06-21 上传
2023-02-21 上传
2021-01-27 上传
2023-08-19 上传
2021-08-22 上传
2023-04-05 上传