
面试题总结
面试题总结
Xzzz2020
个人博客地址:https://xzzz2020.gitee.io/,可以收藏一下,会第一时间发布文章
展开
-
如何进行消息队列技术选型?
文章目录一、问题导读二、面试官心理分析三、面试题剖析1. 为什么使用消息队列啊?2. MQ的优缺点3. kafka、activemq、rabbitmq、rocketmq都有什么优点和缺点一、问题导读为什么使用消息队列啊?消息队列有什么优点和缺点啊?kafka、activemq、rabbitmq、rocketmq都有什么区别以及适合哪些场景?二、面试官心理分析第一,你知道不知道你们系统里为什么要用消息队列这个东西?第二,你既然用了消息队列这个东西,你知道不知道用了有什么好处?第三,既然你用了M原创 2020-09-05 16:12:40 · 438 阅读 · 1 评论 -
【总结】RocketMq高级特性
文章目录一、消息存储1. 为什么要存储到文件系统?如何保证性能?2. 加入持久化后RocketMq的架构是什么样的?3. 存储结构是什么样的?4. 刷盘机制有哪些?5. 如何保证消息不丢失?二、高可用机制1. 消息消费的高可用(主从)2. 消息发送高可用(配置多个主节点)3. 主从复制三、负载均衡1. Producer负载均衡2. Consumer负载均衡四、消息重试机制1. 顺序消息的重试2. 无序消息的重试五、死信队列六、消费幂等1. 什么时候产生重复消息?2. 处理方式一、消息存储分布式队列因为原创 2020-07-27 18:52:57 · 1082 阅读 · 0 评论 -
【总结】JVM内存机制
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:JVM专栏文章目录一、简介二、程序计数器三、虚拟机栈问题辨析四、本地方法栈五、堆六、方法区七、运行时常量池八、直接内存一、简介Java 虚拟机在执⾏ Java 程序的过程中会把它管理的内存划分成若⼲个不同的数据区域。 JDK. 1.8 和之前的版本略有不同jdk1.8之前:jdk1.8之后:线程私有的:程序计数器虚拟机栈本地方法栈线程共享的:堆方法区直接内存 (非运行时数据区的一部分)二、程序计数器用来.原创 2020-07-27 18:51:32 · 542 阅读 · 0 评论 -
【总结】JVM垃圾回收
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:JVM专栏文章目录一、如何判断对象是否死亡?1. 引用计数法2. 可达性分析算法二、四种引用三、垃圾回收算法1. 标记清除算法2. 复制算法3.标记压缩算法4. 分代收集算法四、常见的垃圾回收器有那些?1. Serial 收集器2. ParNew 收集器3. Parallel Scavenge 收集器4. Serial Old 收集器5. Parallel Old 收集器6. CMS 收集器7. G1 收集器五、其他1. 方法区可以GC吗?2. .原创 2020-07-27 18:50:37 · 642 阅读 · 1 评论 -
【总结】类加载器
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:JVM专栏文章目录一、简介二、自定义加载器三、双亲委派模型1. 双亲委派模型的好处2. 双亲委派模型实现源码分析3. 如果我们不想用双亲委派模型怎么办?4. ClassLoader.loadClass 和 Class.forName 的区别一、简介JVM 中内置了三个重要的 ClassLoader,除了 BootstrapClassLoader 其他类加载器均由 Java 实现且全部继承自java.lang.ClassLoader:Boo.原创 2020-07-27 18:49:43 · 325 阅读 · 1 评论 -
【总结】类加载过程
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:JVM专栏文章目录一、类的加载过程二、加载三、验证四、准备五、解析六、初始化七、卸载一、类的加载过程分为三大阶段加载:查找并且加载类的二进制数据链接:验证:确保被加载类的正确性准备:为类的静态变量分配内存,并将其初始化为默认值解析:把类中的符号引用转换为直接引用初始化:执行构造方法二、加载类加载过程的第一步,主要完成下面3件事情:通过全类名获取定义此类的二进制字节流将字节流所代表的静态存.原创 2020-07-27 18:48:47 · 5706 阅读 · 1 评论 -
【总结】Redis主从复制
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录1. 复制的完整流程2. 数据同步相关的核心机制3. 全量复制4. 增量复制5. heartbeat6. 异步复制7. 主从复制流程1. 复制的完整流程slave node启动,仅仅保存master node的信息,包括master node的host和ip,但是复制流程没开始master host和ip是在redis.conf里面的slaveof配置的slave node内部有个定时任务,每秒检查是否有新的mast.原创 2020-07-27 18:46:06 · 269 阅读 · 0 评论 -
【总结】Redis哨兵
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录一、哨兵的介绍二、 哨兵的核心知识三、为什么redis哨兵集群只有2个节点无法正常工作?四、经典的3节点哨兵集群五、两种数据丢失的情况1. 异步复制导致的数据丢失2. 脑裂导致的数据丢失3. 解决六、sdown和odown转换机制七、哨兵集群的自动发现机制八、slave配置的自动纠正九、slave->master选举算法十、quorum和majority十一、configuration epoch十二、configur.原创 2020-07-27 18:44:19 · 308 阅读 · 0 评论 -
【总结】Redis配置
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录一、容灾策略1. 如何配置RDB持久化机制2. RDB持久化机制的工作流程3. AOF持久化的配置4. AOF rewrite5. AOF破损文件的修复6. AOF和RDB同时工作7. 企业级的备份策略二、读写分离1. redis replication主从复制过程2. 主从搭建从节点主节点读写分离架构的测试3. 快速压测三、哨兵配置1. 解决异步复制和脑裂导致的数据丢失2. 配置经典三节点哨兵3. 常用命令四、Redis-.原创 2020-07-27 18:43:15 · 126 阅读 · 0 评论 -
【总结】Redis基础
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录一、简单介绍一下Redis二、五种数据结构1. 字符串 string2. 列表 list3. 字典 hash4. 集合 set5. 有序列表 zset二、Redis和Memcached的区别?三、为什么Redis那么快?四、从海量Key里查询出某一固定前缀的Key?五、如何用Redis实现异步消息队列六、Redis有哪些使用场景?七、redis的删除策略有哪些八、什么是布隆过滤器?1. 原理2. 使用场景九、缓存穿透有哪些解.原创 2020-07-27 18:41:21 · 129 阅读 · 0 评论 -
【总结】Redis持久化
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录一、持久化的意义持久化详解1、RDB和AOF两种持久化机制的介绍2、RDB持久化机制的优点3、RDB持久化机制的缺点4、AOF持久化机制的优点5、AOF持久化机制的缺点6、RDB和AOF到底该如何选择主要解决以下问题:redis的持久化,RDB,AOF,区别,各自的特点是什么,适合什么场景redis的企业级的持久化方案是什么,是用来跟哪些企业级的场景结合起来使用的???一、持久化的意义比如你部署了一.原创 2020-07-26 18:51:38 · 240 阅读 · 0 评论 -
【总结】跳跃表
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:Redis专栏文章目录一、为什么要使用跳跃表?二、什么是跳跃表?三、Redis实现一、为什么要使用跳跃表?Zset要支持随机的插入和删除,所以它 不宜使用数组来实现,关于排序问题,我们也很容易就想到 红黑树/ 平衡树 这样的树形结构,为什么 Redis 不使用这样一些结构呢?性能考虑: 在高并发的情况下,树形结构需要执行一些类似于 rebalance 这样的可能涉及整棵树的操作,相对来说跳跃表的变化只涉及局部实现考虑: 在复杂度与红黑树.原创 2020-07-26 18:50:19 · 492 阅读 · 1 评论 -
【总结】网络原理
文章目录一、简单介绍一下OSI和TCP/IP结构和功能,分别用到哪些协议?1. 应用层2. 运输层3. 网络层4. 数据链路层5. 物理层二、TCP 三次握手和四次挥手1. 为什么要三次握手?2. 为什么要四次挥手?三、TCP和UDP的区别四、TCP 协议如何保证可靠传输4.1 连续ARQ协议4.2 滑动窗口和流量控制4.3 拥塞控制五、 在浏览器中输入url地址 ->> 显示主页的过程六、状态码九、各协议与HTTP协议的关系十、HTTP长连接和短连接十一、Cookie的作用是什么?和Sess原创 2020-07-26 18:47:46 · 591 阅读 · 0 评论 -
【总结】SQL语句
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、常用数据处理函数1. substr2. trim3. ifnull4. case … when … then … else ... end二、常用聚合函数三、分组查询1. group by2. having3. select 语句顺序总结四、连接查询(重点)内连接外连接的区别?五、视图的作用六、如何创建删除索引?一、常用数据处理函数函数名解释substr取子串(substr(被截取的字符串,起始下标.原创 2020-07-26 18:46:01 · 155 阅读 · 1 评论 -
【总结】MySQL索引总结
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、为什幺要用索引?二、索引这么多优点,为什么不对表中的每一个列创建一个索引呢?三、使用索引的注意事项?四、索引什么时候会失效?五、最左前缀原则是什么?六、MySQL索引的主要数据结构1. 哈希索引2. B+树索引七、为什么索引能提高查询速度?八、索引都有哪些类型?1. 主键索引(Primary Key)2. 二级索引(辅助索引)3. 聚集索引4. 非聚集索引5. 覆盖索引九、索引创建的原则一、为什幺要用索引?通过创建唯一.原创 2020-07-26 18:44:37 · 144 阅读 · 0 评论 -
【总结】MySql架构
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、Mysql 的架构图二、Server 层1. 连接器2. 查询缓存3. 分析器4.优化器5. 执行器三、执行流程一、Mysql 的架构图客户端:比如window和linux的黑窗口、SQLlyog、java的JDBC标准等等Server 层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog 日志模块。.原创 2020-07-26 18:43:27 · 175 阅读 · 1 评论 -
【总结】MySQL存储引擎
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、MyISAM 存储引擎二、InnoDB 存储引擎三、MEMORY 存储引擎四、MyISAM和InnoDB区别存储引擎是表级别的,不同的表可以使用不同的存储引擎!!!一、MyISAM 存储引擎没有提供对数据库事务的支持,也不支持行级锁和外键,所以写操作需要锁定整个表,效率便会低一些执行读取操作的速度很快,而且不占用大量的内存和存储资源,在设计之初就预想数据组织成有固定长度的记录,按顺序存储的可以手工或.原创 2020-07-26 18:42:28 · 129 阅读 · 2 评论 -
【总结】InnoDB存储引擎
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、InnoDB存储引擎工作方式二、关键特性1. 插入缓存2. 两次写3. 自适应哈希索引三、redo log、binlog和undo log1. 什么是redo log?2. 什么是binlog?3. redo log和binlog区别4. 回滚日志(undo log)5. redo log和undo log的区别6. 一条更新语句执行的顺序一、InnoDB存储引擎工作方式将数据库文件按页(每页16k)读取到缓冲池,然后.原创 2020-07-26 18:41:26 · 212 阅读 · 1 评论 -
【总结】数据库优化策略
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、数据结构的优化二、服务器优化三、线上定位四、查询语句的优化1. sql 语句的时间花在哪儿?2. sql 语句的执行时间,又花在哪儿了?3. sql 语句的优化思路?4. 如何定量分析查的多少行,和是否沿着索引查?5. 常见的查询优化6. 缓存优化7. 读写分离8. mysql 的分库分表9. EXPLAIN使用五、索引及优化1. 索引的作用2. 索引的分类3. 索引的优点(查的快)4. 索引的缺点(增删改慢)5. 哪些情况.原创 2020-07-26 18:40:11 · 904 阅读 · 0 评论 -
【总结】数据库基础
该文章为知识总结的文章,如果是初学者,建议先从专栏学习:数据库专栏文章目录一、能简单介绍一下什么是Mysql吗?二、SQL 的分类三、数据库三大范式1. 第一范式2. 第二范式3. 第三范式4. 总结四、事务的简介五、事务的特性1. 原子性2. 一致性3. 隔离性4. 持久性六、并发事务出现的问题七、事务隔离级别1. 四个隔离级别八、数据库锁和并发策略1. 常见的锁2. 页级锁3. 乐观锁4. 悲观锁5. InnoDB锁算法九、给定业务场景说明设计数据库的思路十、说一下什么是池化设计十一、一条SQL语.原创 2020-07-26 18:38:24 · 136 阅读 · 2 评论 -
【总结】ThreadLocal
文章目录简介内存泄漏问题简介threadlocal在线程间是隔离的,不共享,用于存储线程的变量即使多个线程使用同一个ThreadLocal,也只能访问自己的属性ThreadLocal是使用的Key/Value的结构实现,内部有一个ThreadLocalMap内存泄漏问题ThreadLocal 从理论上讲并不是用来解决多线程并发问题的,因为根本不存在多线程竞争。在一些场景尤其是使用线程池)下,线程不会关闭,由于 ThreadLocal.ThreadLocalMap 的底层数据结构导致原创 2020-07-12 18:48:41 · 176 阅读 · 1 评论 -
【总结】JUC并发包
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录1. CountDownLatch2. CyclicBarrier3. Semaphore4. FutureTask5. ForkJoinForkJoinPoolForkJoinTask6. Exchange7. Condition8. StampedLock9. ReentrantReadWriteLock读写锁10. 锁的.原创 2020-07-12 18:46:08 · 1103 阅读 · 3 评论 -
【总结】Java内存模型
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录一、Java内存模型JMM二、内存间交互操作三、内存模型三大特性原子性可见性有序性四、重排序五、happens-before原则六、volatitle1. volatitle变量为何立即可见?2. 如何禁止重排序优化?3. 和synchronized的区别?七、单例模式1. 饿汉式2. **普通的懒汉式**3. 同步方法的懒汉.原创 2020-07-12 18:44:37 · 268 阅读 · 1 评论 -
【总结】Java并发实现原理
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录1. 类锁和对象锁的区别2. synchronize底层实现原理3. 什么是锁重入?4. 为什么会对synchronized嗤之以鼻4. 锁优化5. 自旋锁和自适应自旋锁6. 锁消除7. 锁粗化8. 锁膨胀和锁降级9. 偏向锁10. 轻量级锁10. 重量级锁11. ReentrantLock12. synchronize和Re.原创 2020-07-12 18:42:49 · 771 阅读 · 1 评论 -
【总结】Java并发基础
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录1. 进程和线程的区别2. start() 方法和run()方法的区别3. JAVA 线程实现/创建方式4. 如何实现处理线程的返回值5. 线程的状态6.sleep和wait方法的差异7. notify 和 notifyAll的区别8. 守护线程机制9. 中断机制InterruptedExceptioninterrupted(.原创 2020-07-12 18:41:21 · 426 阅读 · 1 评论 -
【总结】CAS
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录一、CAS原理及缺陷二、ABA问题及解决三、atomic类四、Unsafe类一、CAS原理及缺陷原理:CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。从思想上来说,Syn.原创 2020-07-12 18:40:31 · 196 阅读 · 1 评论 -
【总结】阻塞队列
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录一、ArrayBlockingQueue二、LinkedBlockingQueue三、PriorityBlockingQueue四、DelayQueue五、SynchronousQueue六、LinkedTransferQueue七、LinkedBlockingDeque一、ArrayBlockingQueue用数组实.原创 2020-07-12 18:38:52 · 141 阅读 · 1 评论 -
【总结】线程池
该文章为面试精华版,如果是初学者,建议学习专栏:Java并发专栏Java并发需要结合JVM以及操作系统的相关知识,建议先学习这两个部分:JVM专栏 和 操作系统专栏文章目录一、ThreadPoolExecutor参数含义1. 什么时候创建新的线程?2. 如何关闭线程池?二、拒绝策略三、线程池的状态四、线程池分类newCachedThreadPoolnewFixedThreadPoolnewSingleThreadExecutornewScheduledThreadPoolnewWorkSteal.原创 2020-07-12 18:37:40 · 296 阅读 · 1 评论 -
【总结】虚拟内存
本文档为面试精华版,如果是初学者,建议从专栏学习:操作系统专栏文章目录1. 什么是虚拟内存(Virtual Memory)?2. 局部性原理3. 虚拟存储器4. 虚拟内存的技术实现5. 请求分页与分页存储管理的不同?6. 常见的页面置换算法有哪些?1. 什么是虚拟内存(Virtual Memory)?这个在我们平时使用电脑特别是Windows 系统的时候太常见了。很多时候我们使用点开了很多占内存的软件,这些软件占用的内存可能已经远远超出了我们电脑本身具有的物理内存。为什么可以这样呢?正是因为虚拟内.原创 2020-07-06 15:36:02 · 871 阅读 · 1 评论 -
【总结】操作系统内存管理
本文档为面试精华版,如果是初学者,建议从专栏学习:操作系统专栏文章目录1. 操作系统的内存管理主要是做什么?2. 操作系统的内存管理机制了解吗?内存管理有哪几种方式?3. 快表和多级页表快表多级页表总结4. 分页机制和分段机制有哪些共同点和区别呢?5. 解释一下逻辑(虚拟)地址和物理地址6. CPU寻址了解吗?为什么需要虚拟地址空间?1. 操作系统的内存管理主要是做什么?操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存, free 函数:释放内存),另外地址转换也就是将逻辑.原创 2020-07-06 15:33:43 · 594 阅读 · 1 评论 -
【总结】进程、线程和死锁
本文档为面试精华版,如果是初学者,建议从专栏学习:操作系统专栏文章目录1. 聊聊进程和线程2. 进程有几种状态?3. 进程间的通信方式4. 线程间的同步的⽅式有哪些呢?5. 你知道操作系统中进程的调度算法有哪些吗?6. 发生死锁的必要条件7. 解决死锁的方式1. 聊聊进程和线程进程进程是进程实体的运行过程,是系统进行资源分配和调度的一一个独立单位。进程实体由程序段、相关数据段和PCB组成线程线程的提出源于在并发的时候,进程的切换需要消耗很大的时空开销,而线程的提出可以提高并发时系统的.原创 2020-07-04 21:29:25 · 1530 阅读 · 2 评论 -
【总结】操作系统基础
本文档为面试精华版,如果是初学者,建议从专栏学习:操作系统专栏文章目录1. 什么是操作系统?2. 什么是用户态和系统态?什么是系统调用呢?3. 操作系统的基本特征4. 中断分类1. 什么是操作系统?我通过以下四点向您介绍⼀下什么是操作系统吧:操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机系统的内核与基⽯;操作系统本质上是运⾏在计算机上的软件程序 ;操作系统为⽤户提供⼀个与系统交互的操作界⾯ ;操作系统分内核与外壳(我们可以把外壳理解成围.原创 2020-07-04 21:27:50 · 352 阅读 · 0 评论 -
Java集合面试题总结
文章目录一、 主要容器概述二、 List1. ArrayList2. LinkedList3. Vector4. ArrayList 与 LinkedList 异同5. ArrayList和Vector的区别6. System.arraycopy()和 Arrays.copyOf()三、 Set1. 哈希表2. HashSet3. hashCode()4. TreeSet四、 Map1. HashMap2. HashTable3. LinkedHashMap五、 Collections常用方法排序查找,替换原创 2020-07-03 11:28:33 · 776 阅读 · 0 评论 -
解决Hash冲突的方法总结
1. 开放地址法当出现冲突时,di是产生冲突的时候的增量序列,则将冲突的元素进行移动:-di值可能为1,2,3,…m-1,称线性探测再散列。如果di取1,则每次冲突之后,向后移动1个位置.-di取值可能为1,-1,4,-4,9,-9,16,-16,…kk,-kk(k<=m/2)称二次探测再散列。-di取值可能为伪随机数列。称伪随机探测再散列。2. 多哈希法设计多种哈希函数,可以避免冲突,但是冲突几率还是有的,函数设计的越好或越多都可以将几率降到最低。3. 拉链法(Java中采用的)原创 2020-07-03 11:24:51 · 2792 阅读 · 0 评论 -
HashMap面试题总结
文章目录HashMap简介问题集合问点一:你了解HashMap的底层数据结构吗?问点二:为什么JDK 7使用数组+链表?JDK8中为什么要使用红黑树?哈希冲突是怎么回事?HashMap又是怎么解决的?问点三:HashMap的扩容机制是怎么样的?JDK7与JDK8有什么不同吗?问点四:HashMap中的键值可以为Null吗?能简单说一下原理吗?问点五:HashMap中能put两个相同的Key吗?为什么能或为什么不能?问点六:聊一聊JDK 7的HashMap中的“死锁”是怎么回事?问点七:HashMap是线程安原创 2020-07-03 11:21:44 · 2726 阅读 · 1 评论 -
Java数组及常用类
文章目录一、 数组1. 数组简介2. 如何在数组中存放多个数据类型?3. 数组的初始化方式有几种?4. 数组如何比较?5. 数组的扩容及优化6. 数组的拷贝7. 数组的排序8. 数组的查找二、 常用类1. Arrays工具类sort()binarySearch()2. StringString 类是不可变类注意事项常用方法3. String、StringBuffer 和 StringBuilder可变性线程安全性性能4. 基本类型对应的包装类5. 数字类DecimalFormatBigDecimal6. R原创 2020-07-03 11:18:32 · 861 阅读 · 0 评论 -
JavaSE基础知识面试题总结
文章目录一、 概述1. JDK版本2. Java语言特性3. Java的加载与执行过程4. JVM、JDK和JRE的区别二、Java语言基础1. 八种基本类型2. 字符编码3. 类型转换4. 运算符5. 控制语句6. 方法三、 面向对象1. 面向过程与面向对象的区别2. 面向对象特征封装继承多态抽象3. 参数传递4. 关键字this 关键字:super 关键字static 关键字final关键字5. 代码块静态代码块实例语句块6. 类的继承7. static、构造方法和父子类的调用顺序8. 抽象类和接口(*原创 2020-06-28 11:59:35 · 2805 阅读 · 3 评论