Java面试深度解析:百度、美团、顺丰、京东、阿里核心技术问答

需积分: 5 0 下载量 102 浏览量 更新于2024-08-03 收藏 6KB TXT 举报
"最新百度美团顺丰京东阿里面经" 在最新的面试经验分享中,涵盖了多个IT领域的知识点,主要集中在Java编程、并发编程、操作系统、数据库、网络协议、垃圾回收、设计模式以及Web开发等方面。以下是这些知识点的详细解释: 1. **synchronized和ReentrantLock的底层实现**:synchronized基于JVM的Monitor机制,即monitorenter和monitorexit指令,而ReentrantLock依赖于AbstractQueuedSynchronizer(AQS)。重入原理通过entrycount和state字段来实现。 2. **锁的四种状态及升级过程**:从无锁到偏向锁,再到轻量级锁,最后升级为重量级锁,这个过程是为了减少锁的开销。 3. **CMS(Concurrent Mark Sweep)和G1(Garbage First)收集器**:CMS是低暂停时间的垃圾收集器,适合响应时间敏感的应用;G1则是新一代的垃圾收集器,目标是整体停顿时间可控。 4. **G1何时触发Full GC**:通常在堆空间不足或者年轻代空间不足以分配新对象时,G1会触发Full GC。 5. **线程安全的方式**:除了CAS、原子类、synchronized和Lock,还可以使用final关键字确保初始化安全,volatile保证变量可见性,以及使用线程局部变量ThreadLocal。 6. **HashMap和Hashtable的异同**:HashMap是非线程安全,允许null值但不允许null键;Hashtable是线程安全,两者都基于哈希表,但Hashtable不支持null键或值。 7. **允许null键的Map**:HashMap、LinkedHashMap和WeakHashMap。 8. **null键在HashMap的位置**:由于哈希值为0,null键会映射到底层数组的第0个位置。 9. **Hashtable扩容机制**:扩容为原来的2倍加1,这是为了保持哈希函数的均匀分布,避免碰撞。 10. **红黑树插入时间复杂度**:O(logn),红黑树是一种自平衡的二叉查找树。 11. **哈希冲突解决方式**:开放寻址法、链地址法、再散列法、建立公共溢出区等。 12. **大量数据排序**:外部排序,如多路归并排序,适用于数据量超过内存的情况。 13. **Tomcat类加载器重写**:Tomcat为了实现自己的类加载逻辑,比如Web应用的类隔离,会重写类加载器。 14. **TCP三次握手四次挥手**:TCP连接的建立与断开涉及SYN、ACK、FIN和RST等状态的转换。 15. **MySQL事务隔离级别**:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。 16. **B树与B+树的区别**:B树每个节点可以有多个子节点,而B+树所有数据都在叶子节点,且叶子节点之间有指针链接。 17. **设计模式**:例如单例模式(Singleton)、工厂模式(Factory)、观察者模式(Observer),它们在JDK源码中有广泛应用。 18. **Java运行时数据区**:包括程序计数器、虚拟机栈、本地方法栈、堆和方法区(Java 8后改为元空间)。 19. **垃圾回收算法**:如标记-清除、复制、标记-整理、分代收集等。 20. **吞吐量优先和响应时间优先的垃圾回收器**:吞吐量优先的如Parallel Scavenge,响应时间优先的如CMS。 21. **类加载全过程**:加载、验证、准备、解析和初始化。 22. **线程池的7个参数**:corePoolSize、maximumPoolSize、keepAliveTime、workQueue、threadFactory、handler、blockWhenExhausted。 23. **CAS的ABA问题**:通过AtomicStampedReference或AtomicMarkableReference来解决,它们增加了版本戳来防止ABA问题。 24. **Java内存模型(JMM)**:定义了线程如何访问共享变量,包括8个原子操作指令,如load、store、compareAndSwap等。 25. **有界和无界阻塞队列**:有界队列限制了容量,无界队列则没有容量限制。 26. **cookie和session**:cookie是客户端存储用户信息的方式,session是服务器端保存用户状态的机制。 27. **反射**:Java反射机制可以在运行时检查类、接口、字段和方法的信息,创建并调用对象。过度使用会影响性能,因为它破坏了编译时类型检查。 28. **AQS(Advanced Queued Synchronizer)**:它是Java并发包中许多同步组件的基础,如ReentrantLock、Semaphore等,通过维护一个FIFO等待队列来管理线程。 29. **AQS为何基于CAS和volatile**:state字段是volatile修饰的,确保可见性和有序性;compareAndSetState和setState等方法使用CAS保证原子性。 30. **JUC包的同步组件与AQS**:如ReentrantLock实现了tryAcquire、tryRelease等主要方法,实现线程的获取和释放锁。