- # Java 全栈知识点问题汇总(上)
- # 1 Java 基础
- # 1.1 语法基础
- # 面向对象特性?
- # a = a + b 与 a += b 的区别
- # 3*0.1 == 0.3 将会返回什么? true 还是 false?
- # 能在 Switch 中使用 String 吗?
- # 对equals()和hashCode()的理解?
- # final、finalize 和 finally 的不同之处?
- # String、StringBuffer与StringBuilder的区别?
- # 接口与抽象类的区别?
- # this() & super()在构造方法中的区别?
- # Java移位运算符?
- # 1.2 泛型
- # 1.3 注解
- # 1.4 异常
- # Java异常类层次结构?
- # 可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)区别?
- # throw和throws的区别?
- # Java 7 的 try-with-resource?
- # 异常的底层?
- # 1.5 反射
- # 1.6 SPI机制
- # 2 Java 集合
- # 3 Java 并发
- # 3.1 并发基础
- # 多线程的出现是要解决什么问题的? 本质什么?
- # Java是怎么解决并发问题的?
- # 线程安全有哪些实现思路?
- # 如何理解并发和并行的区别?
- # 线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式?
- # 通常线程有哪几种使用方式?
- # 基础线程机制有哪些?
- # 线程的中断方式有哪些?
- # 线程的互斥同步方式有哪些? 如何比较和选择?
- # 线程之间有哪些协作方式?
- # 3.2 并发关键字
- # Synchronized可以作用在哪里?
- # Synchronized本质上是通过什么保证线程安全的?
- # Synchronized使得同时只有一个线程可以执行,性能比较差,有什么提升的方法?
- # Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的?
- # Synchronized和Lock的对比,和选择?
- # Synchronized在使用时有何注意事项?
- # Synchronized修饰的方法在抛出异常时,会释放锁吗?
- # 多个线程等待同一个Synchronized锁的时候,JVM如何选择下一个获取锁的线程?
- # synchronized是公平锁吗?
- # volatile关键字的作用是什么?
- # volatile能保证原子性吗?
- # 32位机器上共享的long和double变量的为什么要用volatile?
- # volatile是如何实现可见性的?
- # volatile是如何实现有序性的?
- # 说下volatile的应用场景?
- # 所有的final修饰的字段都是编译期常量吗?
- # 如何理解private所修饰的方法是隐式的final?
- # 说说final类型的类如何拓展?
- # final方法可以被重载吗?
- # 父类的final方法能不能够被子类重写?
- # 说说基本类型的final域重排序规则?
- # 说说final的原理?
- # 3.3 JUC全局观
- # 3.4 JUC原子类
- # 线程安全的实现方法有哪些?
- # 什么是CAS?
- # CAS使用示例,结合AtomicInteger给出示例?
- # CAS会有哪些问题?
- # AtomicInteger底层实现?
- # 请阐述你对Unsafe类的理解?
- # 说说你对Java原子类的理解?
- # AtomicStampedReference是怎么解决ABA的?
- # 3.5 JUC锁
- # 为什么LockSupport也是核心基础类?
- # 通过wait/notify实现同步?
- # 通过LockSupport的park/unpark实现同步?
- # Thread.sleep()、Object.wait()、Condition.await()、LockSupport.park()的区别? 重点
- # 如果在wait()之前执行了notify()会怎样?
- # 如果在park()之前执行了unpark()会怎样?
- # 什么是AQS? 为什么它是核心?
- # AQS的核心思想是什么?
- # AQS有哪些核心的方法?
- # AQS定义什么样的资源获取方式?
- # AQS底层使用了什么样的设计模式?
- # 什么是可重入,什么是可重入锁? 它用来解决什么问题?
- # ReentrantLock的核心是AQS,那么它怎么来实现的,继承吗?
- # ReentrantLock是如何实现公平锁的?
- # ReentrantLock是如何实现非公平锁的?
- # ReentrantLock默认实现的是公平还是非公平锁?
- # 为了有了ReentrantLock还需要ReentrantReadWriteLock?
- # ReentrantReadWriteLock底层实现原理?
- # ReentrantReadWriteLock底层读写状态如何设计的?
- # 读锁和写锁的最大数量是多少?
- # 本地线程计数器ThreadLocalHoldCounter是用来做什么的?
- # 写锁的获取与释放是怎么实现的?
- # 读锁的获取与释放是怎么实现的?
- # 什么是锁的升降级?
- # 3.6 JUC集合类
- # 为什么HashTable慢? 它的并发度是什么? 那么ConcurrentHashMap并发度是什么?
- # ConcurrentHashMap在JDK1.7和JDK1.8中实现有什么差别? JDK1.8解決了JDK1.7中什么问题
- # ConcurrentHashMap JDK1.7实现的原理是什么?
- # ConcurrentHashMap JDK1.7中Segment数(concurrencyLevel)默认值是多少? 为何一旦初始化就不可再扩容?
- # ConcurrentHashMap JDK1.7说说其put的机制?
- # ConcurrentHashMap JDK1.7是如何扩容的?
- # ConcurrentHashMap JDK1.8实现的原理是什么?
- # ConcurrentHashMap JDK1.8是如何扩容的?
- # ConcurrentHashMap JDK1.8链表转红黑树的时机是什么? 临界值为什么是8?
- # ConcurrentHashMap JDK1.8是如何进行数据迁移的?
- # 先说说非并发集合中Fail-fast机制?
- # CopyOnWriteArrayList的实现原理?
- # 弱一致性的迭代器原理是怎么样的?
- # CopyOnWriteArrayList为什么并发安全且性能比Vector好?
- # CopyOnWriteArrayList有何缺陷,说说其应用场景?
- # 要想用线程安全的队列有哪些选择?
- # ConcurrentLinkedQueue实现的数据结构?
- # ConcurrentLinkedQueue底层原理?
- # ConcurrentLinkedQueue的核心方法有哪些?
- # 说说ConcurrentLinkedQueue的HOPS(延迟更新的策略)的设计?
- # ConcurrentLinkedQueue适合什么样的使用场景?
- # 什么是BlockingDeque? 适合用在什么样的场景?
- # BlockingQueue大家族有哪些?
- # BlockingQueue常用的方法?
- # BlockingQueue 实现例子?
- # 什么是BlockingDeque? 适合用在什么样的场景?
- # BlockingDeque 与BlockingQueue有何关系,请对比下它们的方法?
- # BlockingDeque大家族有哪些?
- # BlockingDeque 实现例子?
- # 3.7 JUC线程池
- # FutureTask用来解决什么问题的? 为什么会出现?
- # FutureTask类结构关系怎么样的?
- # FutureTask的线程安全是由什么保证的?
- # FutureTask通常会怎么用? 举例说明。
- # 为什么要有线程池?
- # Java是实现和管理线程池有哪些方式? 请简单举例如何使用。
- # ThreadPoolExecutor的原理?
- # ThreadPoolExecutor有哪些核心的配置参数? 请简要说明
- # ThreadPoolExecutor可以创建哪是哪三种线程池呢?
- # 当队列满了并且worker的数量达到maxSize的时候,会怎么样?
- # 说说ThreadPoolExecutor有哪些RejectedExecutionHandler策略? 默认是什么策略?
- # 简要说下线程池的任务执行机制?
- # 线程池中任务是如何提交的?
- # 线程池中任务是如何关闭的?
- # 在配置线程池的时候需要考虑哪些配置因素?
- # 如何监控线程池的状态?
- # 为什么很多公司不允许使用Executors去创建线程池? 那么推荐怎么使用呢?
- # ScheduledThreadPoolExecutor要解决什么样的问题?
- # ScheduledThreadPoolExecutor相比ThreadPoolExecutor有哪些特性?
- # ScheduledThreadPoolExecutor有什么样的数据结构,核心内部类和抽象类?
- # ScheduledThreadPoolExecutor有哪两个关闭策略? 区别是什么?
- # ScheduledThreadPoolExecutor中scheduleAtFixedRate 和 scheduleWithFixedDelay区别是什么?
- # 为什么ThreadPoolExecutor 的调整策略却不适用于 ScheduledThreadPoolExecutor?
- # Executors 提供了几种方法来构造 ScheduledThreadPoolExecutor?
- # Fork/Join主要用来解决什么样的问题?
- # Fork/Join框架是在哪个JDK版本中引入的?
- # Fork/Join框架主要包含哪三个模块? 模块之间的关系是怎么样的?
- # ForkJoinPool类继承关系?
- # ForkJoinTask抽象类继承关系?
- # 整个Fork/Join 框架的执行流程/运行机制是怎么样的?
- # 具体阐述Fork/Join的分治思想和work-stealing 实现方式?
- # 有哪些JDK源码中使用了Fork/Join思想?
- # 如何使用Executors工具类创建ForkJoinPool?
- # 写一个例子: 用ForkJoin方式实现1+2+3+...+100000?
- # Fork/Join在使用时有哪些注意事项? 结合JDK中的斐波那契数列实例具体说明。
- # 3.8 JUC工具类
- # 什么是CountDownLatch?
- # CountDownLatch底层实现原理?
- # CountDownLatch一次可以唤醒几个任务?
- # CountDownLatch有哪些主要方法?
- # 写道题:实现一个容器,提供两个方法,add,size 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束?
- # 什么是CyclicBarrier?
- # CountDownLatch和CyclicBarrier对比?
- # 什么是Semaphore?
- # Semaphore内部原理?
- # Semaphore常用方法有哪些? 如何实现线程同步和互斥的?
- # 单独使用Semaphore是不会使用到AQS的条件队列?
- # Semaphore初始化有10个令牌,11个线程同时各调用1次acquire方法,会发生什么?
- # Semaphore初始化有10个令牌,一个线程重复调用11次acquire方法,会发生什么?
- # Semaphore初始化有1个令牌,1个线程调用一次acquire方法,然后调用两次release方法,之后另外一个线程调用acquire(2)方法,此线程能够获取到足够的令牌并继续运行吗?
- # Semaphore初始化有2个令牌,一个线程调用1次release方法,然后一次性获取3个令牌,会获取到吗?
- # Phaser主要用来解决什么问题?
- # Phaser与CyclicBarrier和CountDownLatch的区别是什么?
- # Phaser运行机制是什么样的?
- # 给一个Phaser使用的示例?
- # Exchanger主要解决什么问题?
- # 对比SynchronousQueue,为什么说Exchanger可被视为 SynchronousQueue 的双向形式?
- # Exchanger在不同的JDK版本中实现有什么差别?
- # Exchanger实现举例
- # 什么是ThreadLocal? 用来解决什么问题的?
- # 说说你对ThreadLocal的理解
- # ThreadLocal是如何实现线程隔离的?
- # 为什么ThreadLocal会造成内存泄露? 如何解决
- # 还有哪些使用ThreadLocal的应用场景?
- # 4 Java IO
- # 4.1 基础IO
- # 4.2 5种IO模型
- # 什么是阻塞?什么是同步?
- # 什么是Linux的IO模型?
- # 什么是同步阻塞IO?
- # 什么是同步非阻塞IO?
- # 什么是多路复用IO?
- # 有哪些多路复用IO?
- # 什么是信号驱动IO?
- # 什么是异步IO?
- # 什么是Reactor模型?
- # 什么是Java NIO?
- # 4.3 零拷贝
- # 5 JVM和调优
- # 5.1 类加载机制
- # 5.2 内存结构
- # 说说JVM内存整体的结构?线程私有还是共享的?
- # 什么是程序计数器(线程私有)?
- # 什么是虚拟机栈(线程私有)?
- # Java虚拟机栈如何进行方法计算的?
- # 什么是本地方法栈(线程私有)?
- # 什么是方法区(线程共享)?
- # 永久代和元空间内存使用上的差异?
- # 堆区内存是怎么细分的?
- # JVM中对象在堆中的生命周期?
- # JVM中对象的分配过程?
- # 什么是 TLAB (Thread Local Allocation Buffer)?
- # 为什么要有 TLAB ?
- # 5.3 GC垃圾回收
- # 如何判断一个对象是否可以回收?
- # 对象有哪些引用类型?
- # 有哪些基本的垃圾回收算法?
- # 分代收集算法和分区收集算法区别?
- # 什么是Minor GC、Major GC、Full GC?
- # 说说JVM内存分配策略?
- # 什么情况下会触发Full GC?
- # Hotspot中有哪些垃圾回收器?
- # 5.4 问题排查
- # 6 Java 新版本
- # 6.1 Java 8 特性
- # 什么是函数式编程?Lambda表达式?
- # Stream中常用方法?
- # 什么是FunctionalInterface?
- # 如何自定义函数接口?
- # 内置的四大函数接口及使用?
- # Optional要解决什么问题?
- # 如何使用Optional来解决嵌套对象的判空问题?
- # 什么是默认方法,为什么要有默认方法?
- # 什么是类型注解?
- # 什么是重复注解?
- # 6.2 Java 9+ 特性
- # 7 数据结构和算法
- # 7.1 数据结构基础
- # 7.2 算法思想
- # 7.3 常见排序算法
- # 7.4 大数据处理算法
- # 何谓海量数据处理? 解决的思路?
- # 大数据处理之分治思想?
- # 海量日志数据,提取出某日访问百度次数最多的那个IP?
- # 寻找热门查询,300万个查询字符串中统计最热门的10个查询?
- # 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词?
- # 海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10?
- # 有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序?
- # 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
- # 怎么在海量数据中找出重复次数最多的一个?
- # 上千万或上亿数据(有重复),统计其中出现次数最多的前N个数据?
- # 一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析?
- # 一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入内存,问最优解?
- # 100w个数中找出最大的100个数?
- # 5亿个int找它们的中位数?
- # 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
- # 给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- # 7.5 加密算法
- # 8 数据库
- # 8.1 原理和SQL
- # 什么是事务?事务基本特性ACID?
- # 数据库中并发一致性问题?
- # 事务的隔离等级?
- # ACID靠什么保证的呢?
- # SQL 优化的实践经验?
- # Buffer Pool、Redo Log Buffer 和undo log、redo log、bin log 概念以及关系?
- # 从准备更新一条数据到事务的提交的流程描述?
- # 8.2 MySQL
- # 能说下myisam 和 innodb的区别吗?
- # 说下MySQL的索引有哪些吧?
- # 什么是B+树?为什么B+树成为主要的SQL数据库的索引实现?
- # 那你知道什么是覆盖索引和回表吗?
- # 什么是MVCC? 说说MySQL实现MVCC的原理?
- # MySQL 锁的类型有哪些呢?
- # 你们数据量级多大?分库分表怎么做的?
- # 那分表后的ID怎么保证唯一性的呢?
- # 分表后非sharding_key的查询怎么处理呢?
- # MySQL主从复制?
- # MySQL主从的延迟怎么解决呢?
- # MySQL读写分离方案?
- # 8.3 Redis
- # 什么是Redis,为什么用Redis?
- # 为什么Redis 是单线程的以及为什么这么快?
- # Redis 一般有哪些使用场景?
- # Redis 有哪些数据类型?
- # 谈谈Redis 的对象机制(redisObject)?
- # Redis 数据类型有哪些底层数据结构?
- # 为什么要设计sds?
- # Redis 一个字符串类型的值能存储最大容量是多少?
- # 为什么会设计Stream?
- # Redis Stream用在什么样场景?
- # Redis Stream消息ID的设计是否考虑了时间回拨的问题?
- # Redis Stream消费者崩溃带来的会不会消息丢失问题?
- # Redis Steam 坏消息问题,死信问题?
- # Redis 的持久化机制是什么?各自的优缺点?一般怎么用?
- # RDB 触发方式?
- # RDB由于生产环境中我们为Redis开辟的内存区域都比较大(例如6GB),那么将内存中的数据同步到硬盘的过程可能就会持续比较长的时间,而实际情况是这段时间Redis服务一般都会收到数据写操作请求。那么如何保证数据一致性呢?
- # 在进行RDB快照操作的这段时间,如果发生服务崩溃怎么办?
- # 可以每秒做一次RDB快照吗?
- # AOF是写前日志还是写后日志?
- # 如何实现AOF的?
- # 什么是AOF重写?
- # AOF重写会阻塞吗?
- # AOF日志何时会重写?
- # AOF重写日志时,有新数据写入咋整?
- # 主线程fork出子进程的是如何复制内存数据的?
- # 在重写日志整个过程时,主线程有哪些地方会被阻塞?
- # 为什么AOF重写不复用原AOF日志?
- # Redis 过期键的删除策略有哪些?
- # Redis 内存淘汰算法有哪些?
- # Redis的内存用完了会发生什么?
- # Redis如何做内存优化?
- # Redis key 的过期时间和永久有效分别怎么设置?
- # Redis 中的管道有什么用?
- # 什么是redis事务?
- # Redis事务相关命令?
- # Redis事务的三个阶段?
- # Redis事务其它实现?
- # Redis事务中出现错误的处理?
- # Redis事务中watch是如何监视实现的呢?
- # 为什么 Redis 不支持回滚?
- # Redis 对 ACID的支持性理解?
- # Redis事务其他实现?
- # Redis集群的主从复制模型是怎样的?
- # Redis 全量复制的三个阶段?
- # Redis 为什么会设计增量复制?
- # Redis 增量复制的流程?
- # 增量复制如果在网络断开期间,repl_backlog_size环形缓冲区写满之后,从库是会丢失掉那部分被覆盖掉的数据,还是直接进行全量复制呢?
- # Redis 为什么不持久化的主服务器自动重启非常危险呢?
- # Redis 为什么主从全量复制使用RDB而不使用AOF?
- # Redis 为什么还有无磁盘复制模式?
- # Redis 为什么还会有从库的从库的设计?
- # Redis哨兵机制?哨兵实现了什么功能呢?
- # Redis 哨兵集群是通过什么方式组建的?
- # Redis 哨兵是如何监控Redis集群的?
- # Redis 哨兵如何判断主库已经下线了呢?
- # Redis 哨兵的选举机制是什么样的?
- # Redis 1主4从,5个哨兵,哨兵配置quorum为2,如果3个哨兵故障,当主库宕机时,哨兵能否判断主库“客观下线”?能否自动切换?
- # 主库判定客观下线了,那么如何从剩余的从库中选择一个新的主库呢?
- # 新的主库选择出来后,如何进行故障的转移?
- # Redis事件机制?
- # Redis文件事件的模型?
- # 什么是Redis发布订阅?
- # Redis发布订阅有哪两种方式?
- # 什么是Redis Cluster?
- # 说说Redis哈希槽的概念?为什么是16384个?
- # Redis集群会有写操作丢失吗?为什么?
- # Redis 客户端有哪些?
- # Redis如何做大量数据插入?
- # Redis实现分布式锁实现? 什么是 RedLock?
- # Redis缓存有哪些问题,如何解决?
- # Redis性能问题有哪些,如何分析定位解决?
- # Redis单线程模型? 在6.0之前如何提高多核CPU的利用率?
- # Redis6.0之前的版本真的是单线程的吗?
- # Redis6.0之前为什么一致不用多线程?
- # Redis6.0为什么要引入多线程呢?
- # Redis6.0默认是否开启了多线程?
- # Redis6.0多线程开启时,线程数如何设置?
- # Redis6.0多线程的实现机制?
- # 开启多线程后,是否会存在线程并发安全问题?
- # 8.4 MongoDB
- # 什么是MongoDB?为什么使用MongoDB?
- # MongoDB与RDBMS区别?有哪些术语?
- # MongoDB聚合的管道方式?
- # MongoDB聚合的Map Reduce方式?
- # Spring Data 和MongoDB集成?
- # MongoDB 有哪几种存储引擎?
- # 谈谈你对MongoDB WT存储引擎的理解?
- # MongoDB为什么要引入复制集?有哪些成员?
- # MongoDB复制集常见部署架构?
- # MongoDB复制集是如何保证数据高可用的?
- # MongoDB复制集如何同步数据?
- # MongoDB为什么要引入分片?
- # MongoDB分片集群的结构?
- # MongoDB分片的内部是如何管理数据的呢?
- # MongoDB 中Collection的数据是根据什么进行分片的呢?
- # MongoDB如何做备份恢复?
- # MongoDB如何设计文档模型?
- # MongoDB如何进行性能优化?
- # 8.5 ElasticSearch
- # ElasticSearch是什么?基于Lucene的,那么为什么不是直接使用Lucene呢?
- # ELK 技术栈的常见应用场景?
- # ES中索引模板是什么?
- # ES中索引的生命周期管理?
- # ES查询和聚合的有哪些方式?
- # ES查询中query和filter的区别?
- # ES查询中match和term的区别?
- # ES查询中should和must的区别?
- # ES查询中match,match_phrase和match_phrase_prefix有什么区别?
- # ES查询中什么是复合查询?有哪些复合查询方式?
- # ES聚合中的Bucket聚合有哪些?如何理解?
- # ES聚合中的Metric聚合有哪些?如何理解?
- # ES聚合中的管道聚合有哪些?如何理解?
- # 如何理解ES的结构和底层实现?
- # ES内部读取文档是怎样的?如何实现的?
- # ES内部索引文档是怎样的?如何实现的?
- # ES底层数据持久化的过程?
- # ES遇到什么性能问题,如何优化的?
文章目录
THE END
暂无评论内容