# Java ## 《On Java 中文版 基础卷:基于 8、11、17》 《Java编程思想》作者新作 8.7(161人评价) [美] Bruce Eckel / 陈德伟 / 臧秀涛 / 孙卓 / 秦彬 / 人民邮电出版社 / 2022-3-20 / 129.8 https://book.douban.com/subject/35751619/ **01 什么是对象** **02 安装 Java 和本书示例** **03 对象无处不在** **04 操作符** **05 控制流** **5.2 if-else** **5.3 迭代语句** **06 初始化和清理** **6.7 构造器初始化** **6.7.1 初始化顺序** **6.10 新特性:局部变量类型推断** **07 实现隐藏** **7.1 package:库单元** **7.2 Java 访问权限修饰符** **7.5 新特性:模块** **08 复用** **09 多态** **10 接口** **10.9 嵌套接口** **10.10 接口和工厂** **10.11 新特性:接口的 private 方法** **10.12 新特性:密封类和密封接口** **11 内部类** **11.6 匿名内部类** **11.7 嵌套类** **11.11 局部内部类** **12 集合** **13 函数式编程** **13.6 闭包** **13.8 柯里化和部分求值** **14 流** **14.4 Optional 类型** **15 异常** **16 代码校验** **16.6 基准测试** **17 文件** **18 字符串** **18.6 新特性:文本块** **18.7 正则表达式** **19 反射** **20 泛型** **20.15 潜在类型机制** **21 数组** ## 《On Java 中文版:进阶卷》 《Java编程思想》作者新作 8.3(67人评价) [美] Bruce Eckel / 孙卓 / 陈德伟 / 臧秀涛 / 人民邮电出版社 / 2022-3-20 / 129.8 https://book.douban.com/subject/35751623/ **01 枚举类型** **1.13 新特性:switch 中的箭头语法** **1.14 新特性:switch 中的 case null** **1.15 新特性:将 switch 作为表达式** **1.16 新特性:智能转型** **1.17 新特性:模式匹配** **02 对象传递和返回** **03 集合专题** **3.14 持有引用** **04 注解** **05 并发编程** **5.10 CompletableFuture** **06 底层并发** **6.7 库组件** **6.7.1 延迟队列 DelayQueue** **6.7.2 优先级阻塞队列 PriorityBlockingQueue** **6.7.3 无锁集合** **07 Java I/O 系统** **7.3 新 I/O 系统** **08 设计模式** ## 《Java 编程思想(第4版)》 9.0(4234人评价) [美] Bruce Eckel / 陈昊鹏 / 机械工业出版社 / 2007-6 / 108.00元 https://book.douban.com/subject/2130190/ ## 《Java 核心技术 卷I(原书第11版)基础知识》 9.1(341人评价) [美] 凯 S.霍斯特曼(Cay S.Horstmann) / 林琪 / 苏钰涵 / 机械工业出版社 / 2019-11-25 / 149元 https://book.douban.com/subject/34898994/ ## 《Java 核心技术 卷II(原书第11版)高级特性》 8.1(63人评价) [美] 凯 S.霍斯特曼(Cay S.Horstmann) / 陈昊鹏 / 机械工业出版社 / 2019-12 / 149.00 https://book.douban.com/subject/34935138/ ## 《疯狂 Java 讲义(第3版)》 8.2(132人评价) 李刚 / 电子工业出版社 / 2014-7-1 / 109.00元 https://book.douban.com/subject/25959184/ ## 《Java 8 实战》 9.1(692人评价) 厄马(Raoul-Gabriel Urma) / 弗斯科(Mario Fusco) / 米克罗夫特(Alan Mycroft) / 陆明刚 / 劳佳 / 人民邮电出版社 / 2016-4-1 https://book.douban.com/subject/26772632/ ## 《Java 函数式编程》 8.2(23人评价) 【法】Pierre-Yves Saumont(皮埃尔-伊夫斯 索蒙特) / 高清华 / 电子工业出版社 / 2018-1-1 / 119.00元 https://book.douban.com/subject/27594722/ ## 《Java 性能权威指南》 8.2(162人评价) 奥克斯 (Scott Oaks) / 柳飞 / 陆明刚 / 臧秀涛 / 人民邮电出版社 / 2016-3-1 / CNY 79.00 https://book.douban.com/subject/26740520/ ## 《NIO 与 Socket 编程技术指南》 4.3(39人评价) 高洪岩 / 机械工业出版社 / 2018-1-1 https://book.douban.com/subject/30295813/ **第1章 缓冲区的使用** **1.1 NIO 概述** **1.3 Buffer 类的使用** **1.4 ByteBuffer 类的使用** **1.5 CharBuffer 类的 API 使用** **第2章 通道和 FileChannel 类的使用** **2.2 通道接口的层次结构** AsynchronousChannel AsynchronousByteChannel ReadableByteChannel ScatteringByteChannel WritableByteChannel GatheringByteChannel ByteChannel SeekableByteChannel NetworkChannel MulticastChannel InterruptibleChannel **2.3 AbstractInterruptibleChannel 类的介绍** **2.4 FileChannel 类的使用** **第3章 获取网络设备信息** **3.1 NetworkInterface 类的常用方法** **3.2 NetworkInterface 类的静态方法** **第4章 实现 Socket 通信** **4.1 基于 TCP 的 Socket 通信** **4.2 ServerSocket 类的使用** **4.3 Socket 类的使用** **4.4 基于 UDP 的 Socket 通信** **第5章 选择器的使用** **5.1 选择器与 I/O 多路复用** **5.2 核心类 Selector、SelectionKey 和 SelectableChannel 的关系** **5.3 通道类 AbstractInterruptibleChannel 与接口 InterruptibleChannel 的介绍** **5.4 通道类 SelectableChannel 的介绍** **5.5 通道类 AbstractSelectableChannel** **5.6 通道类 ServerSocketChannel 与接口 NetworkChannel 的介绍** **5.7 ServerSocketChannel 类、Selector 和 SelectionKey 的使用** **5.8 Selector 类的使用** **5.9 SelectionKey 类的使用** **5.10 DatagramChannel 类的使用** **5.11 PipeSinkChannel 和 PipeSourceChannel 类的使用** **5.12 SelectorProvider 的使用** **第6章 AIO 的使用** **6.1 AsynchronousFileChannel 类的使用** **6.2 AsynchronousServerSocketChannel 和 AsynchronousSocketChannel 类的使用** **6.3 同步、异步、阻塞与非阻塞之间的关系** ## 面试题 ### 基础 JDK & JVM & JRE 的区别 JVM,JDK,JRE 三者的之间的联系? Java为什么被称为平台无关性语言? 方法重载和方法重写区别? 重载和重写的区别 重写和重载的区别`【2次】` java的链式调用是怎么实现的 成员变量和局部变量的区别? 接口定义一个变量,这个变量的默认作用域 讲一下 static staic 和 final 关键字结合 jvm 来讲 讲讲 jdk 动态代理。 GBK 里面中文字符占用字节数 Java 是引用传递还是值传递 现在有个对象 user,通过参数传递到其他方法中去,然后 user 的 name 改变了,那么传递的这个对象是值传递还是引用传递,为什么?顺便解释一下值传递和引用传递。 Java SPI? #### 操作符 &和&&区别 & 和 && 的区别? #### 序列化 Java 的序列化了解吗? 什么是序列化、反序列化 Java里序列化怎么做(实现Serializable接口······),那实现接口和继承有什么区别,为什么要有接口和继承 集合的序列化和反序列化里面内容是什么,原理是什么? java的序列化和反序列化什么含义 生成的serialVersionUID有什么用 #### 对象 创建对象的几种方式(只答了 new 和反射,没答全) 问创建对象的几种方式 #### Object Object 类里有什么方法 Object类有哪些方法?详细说明 Object 类你了解哪些方法 有用过 Object 类中相关锁的方法吗 wait和sleep wait/await和sleep区别 讲一下 Java 里面的 clone 除了 `clone()` 还有哪些方式可以对对象进行深拷贝? #### 判等、比较 程序题:判断两个对象是否== equals 和 == (可以谈谈自动装箱方面的不同) ==和equals的区别 equals和==的区别 equals和hashcode 对 hashCode() 与 equals() 的了解 为什么重写 equals 还要重写 hashCode,不重写会有什么问题 重写方法的时候,只重写equals方法,不重写hashcode方法有什么问题? 要对一个对象去重的话,hashCode() 和 equals() 方法怎么重写? - 扩展:有一个用户类,字段有用户 id、名称、邮箱、手机等,要去重的话,hashCode() 和 equals() 方法怎么重写?你会用哪些字段去拼接 hashCode? 一个类的两个对象怎么进行比较 既然说到hashcode,有没有可能两个对象equals但是hashcode不同 如果出现了上述这种情况,有可能发生什么情况 `hashcode` 的作用,如果 `hashcode` 相同,怎么存入元素 Comparable和Comparator接口是干什么的,其区别 有一个list,给它按照类里的一个属性排序 在java中,0.000000001 和0其实是判定相等的,那么我怎么才能得到真实值呢 #### final 说一下final 讲一下 final final关键字,final修饰的方法不能被重写,能被重载吗 (在这里额外提了Java内存模型对于final的底层实现) final 关键字可以修饰哪些?分别有什么影响? final干嘛的,如果有一个final Stirng a = "123",后面还可以改变吗 #### 类 java类变量的加载过程,父类静态变量和子类静态变量哪个先加载,int和long哪个先加载 内部类有哪些以及特点和应用 内部类、枚举类 匿名类,内部类静态内部类 **Enum.valueOf() 和 Enum.ordinal()** #### 数组 Java 高效拷贝数组 数组下标查找在内存中是如何查找的?为什么是 O(1)的复杂度? 有个string数组,里面有些空的值,我想去除空的,怎么做 ### 面向对象 java特点描述一下,继承封装多态分别是什么意思 面向对象和面向过程的区别 封装 继承 多态 Java三大特性 面向对象的特性`【2次】` 什么是面向对象? java的继承和多态讲讲,继承在项目里面是怎么使用的 #### 多态 多态(一个接口,有多个方法) 抽象类(不能实例化,只能通过继承的方式) 什么是多态? 说说Java多态 **怎么理解多态?我讲了自己背的一些。然后面试官讲了讲编译时多态和运行时多态的区别啥的。** Java 多态的优点? 多态的分类 多态的原理是什么,感觉这个很容易被问到 接口和虚函数。 继承,接口,抽象类区别? 接口和抽象类 接口和抽象类的比较 抽象类和接口有什么不同 接口和抽象类有什么区别? 接口和抽象类之间的区别? Java 中的接口、抽象类有什么区别?举个实际的例子说明接口和抽象类的应用场景 讲一下接口和抽象类 接口和抽象类的区别 `【6次】` 抽象类和接口的区别; 抽象方法能不能加final; 抽象类和接口有什么区别?两者都不能被实例化,都可以包含抽象方法且都可以有默认实现的方法。不过,接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。并且,一个类只能继承一个类,但是可以实现多个接口。 ### 类型 八种基本类型 说一下 Java 基础类型 java基本类型和占用字节数,回答八种,也特意提到boolean类型,1或者4个字节,为什么? Java 的基本数据类型有哪些?分别多少字节? int取值范围 为什么 int 是 2 的 31 次方 long 的长度和范围,为什么要减一 你说你熟悉Java基础,那讲一讲int与Integer的区别。我特意解释了拆箱装箱、Integer的一些源码、泛型的应用。 常用类型 BigDecimal java中的一个类,我觉得,多一些思考是比较重要的 讲一下基本类型,String 是不是基本类型 #### 包装类 基本类型和包装类型的区别,涉及自动装箱和拆箱,怎么做的,原理 基本类型和包装类型的区别 封装类与封装类,封装类与基本类型比较。 包装类的底层需要去看看, Integer(100)和 Long(100)相等吗? 包装类型的常量池技术 说一下 Integer 包装类 两个包装类用 == 比较会怎么样 注意Integer在[-128,127]和这个区间之外是有区别的。在这个区间之内,Integer类型是IntegerCache.cache[x],这是一个静态类,所以可是使用==,在这个范围之外是Integer类型是直接new Integer(x) #### String String 创建对象;intern 方法 string、stringbuilder、stringbuffer区别 String ,StringBuffer,StringBuilder哪个是安全的,我就说反过。。 字符串编码的区别,被问到过,我觉得比较容易被忽视的一个点 String、StringBuffer、StringBuilder 的区别 说一下string stringbuffer stringbuilder String、StringBuffer、StringBuilder 的区别 String、StringBuilder、StringBuffer有什么区别? stringbuffer和stringbuilder **看过源码吗?String源码知道吗?(答:String类是final char[]数组实现的,注意这个是java8的时候,java9变成了byte[])** String 为什么是不可变的? String 能否被继承 String是基本数据类型吗?能被继承吗?final关键字 讲一下 String 基本类型的转换 ### 集合 说一下堆、栈,队列、集合之间的区别?对了解过上面这些的源码实现吗? Java 的集合都有哪些,都有什么特点? Java 的集合类有了解么 Java中常用的集合类 (先说Collection和Map接口,再分别说子接口和实现类,以及大概的区别,没让细讲源码) 有一组数据,需要按照顺序对它进行加密,如果用集合做的话你会选哪个集合?比如一个数组,其元素本身无序,每个元素是字母或者数字都行,对它从小到大进行排序,你会选哪个集合去存储? (我当时好像选的TreeMap?忘记了...) 三大集合的区别 非线程安全的集合怎么改为线程安全 集合框架中的线程安全类你知道那些; 有哪些线程安全的集合类,讲一讲原理(HashTable,ConcurrentHashMap,CopyOnWriteArrayList) List,Map,Set接口在取元素时,各有什么特点 HashSet,TreeMap 讲一下 `ArrayList` 和 `HashMap` 底层数据结构,优缺点,使用方式。 说说常用的容器和各自的特点 对集合有什么了解?`List` 和 `Set` 的区别?`ArrayList`、`LinkedList`以及两者区别?`HashMap` 和 `TreeMap` 的区别? HashMap 的位操作,HashSet 的 contains 方法复杂度是多少,红黑树简单讲一下? **快速失败(fail-fast)和安全失败(fail-safe)的区别是什么** #### List 怎么实现一个栈的呢? Java 里的队列用过吗? ArrayList和LinkedList区别 ArrayList 和 LinkedList 区别 ArrayList 和 LinkedList 的区别? arraylist、linkedlist区别 arraylist 和 linkedkist 集合类说一下, 说一下ArrayList 和 LinkedList, ArrayList为什么用数组,怎么扩容, 为什么扩容的时候新建数组,而不是数组去扩容。 说一下ArrayList和LinkedList区别,然后讲了大量数据下在LinkedList前1/10处插入效率高,在ArrayList中部以及后部插入效率高,解释原因。 arraylist和linkedlist区别 arraylist和linkedlist使用场景 `【2次】` arraylist和linkedlist区别? ArrayList 和 LinkedList 的区别?ArrayList 的扩容方式? `ArrayList`、`LinkedList` 是线程安全的吗?(简单提了一下) list和数组区别,哪个会内存泄漏,查询的话哪个快点。我觉得查询是一样快的,因为list本来底层就是数组 ##### ArrayList ArrayList 的扩容过程 ArrayList 优势,扩容,什么时候用 ArrayList 的扩容机制 Arraylist线程安全吗?有其他数据结构是线程安全的吗? 讲到ArrayList,讲一下初始长度,扩容机制。 链表和数组的区别,提到 ArrayList,讲一下插入删除和扩容 arraylist如何去重?面试官:既然你说看过hashmap源码那我就不问了(??看过源码就不问?就不怕我乱写的吗) **ArrayList实现了哪些接口** **说了List、Cloneable、Serializable,我觉得他应该是想问RandomAccess接口,当时没回答上这个** ##### LinkedList 数组和链表区别 LinkedList 优势,什么时候用,和arraylist的区别 等等 LinkedList 实现 ##### Queue `ArrayList` 和 `LinkedList` 的区别在哪里?`Queue` 与 `Deque` 的区别? #### Set 为什么 HashSet 对一个对象去重的时候要重写 hascCode() 和 equals() 方法?(HashSet 的去重流程) #### Map Java 中的 Map 都有哪些实现? Map 有哪几个实现?分别有什么特点? Java里的Map有哪几种实现(HashMap | TreeMap | HashTable | LinkedHashMap | ConcurrentHashMap) Hash 方式和 Hash 冲突解决 hashtable hashmap synchronizedmap concurrentmap(细说,这里我紧张,面试官开始引导我,爱了!!!) HashMap,HashTable,ConcurrentHashMap的区别。 极高并发下HashTable和ConcurrentHashMap哪个性能更好,为什么,如何实现的。 ConcurrentHashMap 和 HashTable ##### HashMap HashMap 底层原理 HashMap原理,底层结构,1.7和1.8区别,头插法还是尾插法、线程安全吗 HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。 如果让你自己实现哈希表,你会考虑什么问题? 介绍一下 HashMap 讲一下 HashMap 的源码? Hashmap 源码看过吗?讲讲 hashmap 怎么实现的? HashMap八股(数据结构,扩容,链表和红黑树转换) Hashmap 源码级掌握,扩容,红黑树,最小树化容量,hash冲突解决,有些面试官会提出发自灵魂的审问,比如为什么是红黑树,别的树不可以吗;为什么8的时候树化,4不可以吗,等等 HashMap 源码实现 阅读过哪些集合源码?重点提了hashmap的哈希算法 那你说一说hashmap的实现(这里非常详细的展开说了实现原理) Hashmap 的底层原理,有哪些遍历方式? HashMap 底层实现 HashMap,扩容过程,怎么解决哈希冲突? HashMap1.8优化在哪些方面? hashmap1.7 、1.8底层结构区别 HashMap 1.7和1.8区别 HashMap原理,put和resize过程 HashMap的时间复杂度?HashMap中Hash冲突是怎么解决的?Java8中的HashMap有什么变化? 红黑树需要比较大小才能进行插入,是依据什么进行比较的?其他Hash冲突解决方式? ###### 线程安全 HashMap 有了解么,它的底层实现,为什么线程不安全,想要线程安全有什么措施 hashmap线程安全实现 HashMap 是否线程安全,如果需要使用线程安全的呢 HashMap不是线程安全的,如果要保证线程安全怎么办呢?可以用什么? HashMap 并发的时候会有什么问题 怎么让 HashMap 并发安全 有几种方法可以让 HashMap 变得线程安全 HashMap是线程安全的吗?为什么呢? 那hashmap安全吗?(不安全,我们可以用blabla...) HashMap 多线程下,怎么个个不安全法,数据丢失问题 问我HashMap是不是线程安全的,为什么不安全,会出现哪些问题,我讲了扩容出现环死循环,然后问我死循环cpu的状态是怎么样的,我答是100%,然后问我死循环其他线程能不能使用cpu,然后又问比如一个四核cpu占有率又是多少,cpu100%对整个服务器有什么影响。 `HashMap` 是线程安全的吗?为什么不安全?(不知道。没答上来)多个线程同时执行`put` 方法可能会发生数据覆盖问题 ###### get HashMap 查找效率最低和最高 如果一个hashmap有一亿条数据怎么实现高效查找; 答:可以考虑优化hash函数减少碰撞(事后大佬指点分布不均匀的话更好的应该是进行分层) ###### put 说一下 HashMap 的底层和 put 方法 hashMap put get过程 ###### 扩容 HaspMap扩容是怎样扩容的,为什么都是2的N次幂的大小。 `new Hashmap<1000>` 和 `new Hashmap<10000>` 在数据都塞满的时候有什么区别?(提示 扩容相关) HashMap 扩容了解吗?说一下扩容因子(loadFactor) 为什么负载因子是0.75(这里我提到了redis的负载因子是1或者5,但没有追问redis的hashmap) 如果hashmap溢出了怎么办(建立公共溢出区?) .公共溢出区也满了怎么办?(啊…?这我真的盲区了,我说hashmap也会扩容吧…?) HashMap 的扩容,JDK 1.7和 JDK 1.8 扩容的区别 说一下hashmap扩容的过程? HashMap 在 1.8 前后的区别?链表可能转成红黑树有什么好处? hashmap扩容方面做了哪些优化?我只答出了红黑树。 Map:只存60个键值对,需要设置初始化容量吗?设置的话设置多少初始化容量:需要 否则需要多次扩容 128 要考虑数组长度是2的幂次方、负载因子 hashmap原理,扩容,问了我hashmap怎么缩容(这里应该说红黑树退化链表的,hashmap没有缩容,我还以为自己记错了) HashMap 扩容(还争了一会为啥要2倍……我说左移右移方便,他说核心是2的倍数……我觉得不都一个意思吗)、put 的过程 hashmap 为什么是两倍扩容 ###### 红黑树 HashMap 为什么不考虑 AVL 树(AVL 性能消耗更大) 讲讲红黑树 hashmap 为什么使用的是红黑树不是其他树 hashmap,为什么要转成红黑树,不是一开始就用(红黑树的缺点) HashMap底层为什么要用红黑树呢?为什么不用平衡二叉树? HashMap 源码实现,链表转红黑树条件,红黑树是否会退化为链表 hashmap什么时候退回回链表?为什么不是7 Map ,hashmap底层实现?链表过长怎么办?红黑树特点 复杂度 HashMap底层数据结构是什么 HashMap的底层原理`【2次】` hashmap的结构 HashMap的底层数据结构?链表长度大于8就会转化成红黑树吗,没有对数组的插入有要求吗?链表是双向链表还是单向链表? HashMap 的底层, 跟hashtable有什么区别? HashMap先不考虑红黑树,手写一个底层数据结构,存储key value 平衡二叉树?hashmap底层实现,红黑树特点? 集合类,HashMap 的底层结构,为什么使用红黑树 `HashMap` 的底层数据结构 HashMap的数据结构怎么样的,我就说了一下 数组和链表这种,不知道是不是他的意思 key可否null,为什么 是否线程安全,否则会发生什么情况 ###### hash 与哈希冲突 hashmap原理,处理哈希冲突用的哪种方法? Rehash 具体会影响什么?哈希结果会受到什么影响? Rehash 过程中存放在旧桶的元素如何迁移? HashMap 源码中,计算 hash 值为什么有一个 高 16 位 和 低 16 位异或的过程? 取模的时候为什么用&(length-1) 容量不是2的整数次幂 还用&(length-1) 影响会怎样?:容量是2的整数次幂,n -1 后,高位为1后的0都变为1,如 16:10000, 16-1=15:1111, 1111 再与 hash 做 & 运算的时候,各个位置的取值取决于 hash;如果不是2的整数次幂,必然会有的0的位,0与任何数&肯定为0,会造成更多的哈希冲突 HashMap在遇到key冲突的时候是怎么处理的呢? HashMap 源码,数据结构,如何避免哈希冲突,对比 HashTable hashmap怎么解决hash冲突 除了链地址法还有其他的解决hash冲突的方法吗(开放定址和再哈希) ##### ConcurrentHashMap HashMap、ConcurrentHashMap 底层 ConcurentHashMap在什么地方加的锁,1.7和1.8区别,1.7用的segment,1.8用的synchronized ConcurrentHashMap原理,为什么多线程条件下性能这么好 我从sync在1.6做的优化谈的,他从锁的粒度方面谈的 HashMap、ConcurrentHashMap 的区别?扩容过程是怎么样的? ConcurrentHashMap 的底层实现 ConcurrentHashMap为什么是线程安全的? HashMap 和 ConcurrentHashmap 的区别 你对集合那么熟悉,看过哪些源码?HashMap,HashTable,ConcurrentHashMap等等 看过哪些源码,(hashmap,concurrenthashmap,hashtable),那你说说各自的特点。(把concurrenthashmap和hashtable说混了,面完了才想起) 说下hashmap/hashtable/concurrenthashmap,说底层了; HashMap,ConcurrentHashMap,说了ConcurrentHashMap的1.7和1.8的不同和具体实现 HashMap、Hashtable、ConcurrentHashMap的比较(扯了Hashtable不绝对安全) hashmap counrrenthashmap 要求从源码上解释。如果两个同样的put相同的key,会发生什么? HashMap和ConcurrentHashMap HashMap和ConcurrentHashMap哪个效率更高?为什么? ConcurrentHashMap和HashMap concureentHashMap,段锁,如何分段,和hashmap在hash上的区别,性能,等等 ##### HashTable hashmap、hashtable区别 HashMap、HashTable HashMap和HashTable区别 HashMap和Hashtable区别,我特意提了哈希算法不一样,各自的算法原理,提问:为什么不一样? Hashtable为什么不用HashMap的? HashTable ,同步锁,这块可能会问你synchronized关键字 1.6之后提升了什么,怎么提升的这些 HashTable如何实现线程安全(给每个方法加synchronized,put时只能有一个线程获取到锁) ##### LinkedHashMap LinkedHashMap的使用场景 (用LinkedHashMap实现lru,按插入顺序(默认) accessOrder = false | 按访问顺序 accessOrder = true,HashMap+双向链表) ##### TreeMap `HashMap` 和 `TreeMap` 区别? TreeMap的使用场景,底层数据结构,红黑树的存取复杂度 TreeMap 了解吗,是如何保证 Map 中的 Key 是有序的 ### 泛型 什么是泛型,怎么用泛型 泛型有啥用?泛型擦除是啥? 泛型擦除的原理 说一下泛型 泛型提供了编译时类型安全检测机制,该机制可以在编译时期就检测到非法的类型,避免了运行时的类型转换异常。可能不是他想要的答案?我不知道他想问什么,他说算了下一个问题。 解释一下泛型的作用,泛型的桥方法?泛型擦除是什么? ### 异常 异常体系 异常捕获处理 异常的处理方式 异常有哪几种方式, 怎么自己写一个异常。 Java 异常 层次结构 对异常有什么了解?常见的运行时异常?对于受检查异常怎么处理?一直写 `try-catch`会显得代码非常的不优雅,你会怎么进行处理?统一异常处理有什么好处?对于非受检查异常(运行时异常)怎么处理?讲了讲异常的体系结构;列举了常见的运行时异常;try-catch;都抛出,然后统一异常处理;美化代码,对返回结果进行封装,符合前端要求;写代码的时候进行预期,写得严谨一些。 #### try-catch-finally finally 的作用 如果在 finally 块中有 return 语句,发生异常会执行吗?不发生呢? **try catch finally 都出现return的情况** finally的实现原理 #### 不同类型 异常的类型,具体的例子有哪些 异常 Exception 和错误 Error 有什么区别?常见的 Error 有哪些? Error和Exception区别 讲一讲异常, throwable, exception, error 一般io操作会捕获异常,然后在catch中释放资源,有更简单的办法吗。 ### 注解 java元注解 注解和接口的区别 注解的原理 元注解 ### 反射 反射的优缺点 #### 原理 讲一下反射是什么和反射的原理。 反射机制 反射的实现及原理 希望大家能够好好看一下反射的原理,怎么确定类,怎么调方法 反射的原理 java中反射获取到的属性和方法是存储在什么地方 #### 具体使用 有哪三种获取类的实例的方式? 如何通过反射和设置对象私有字段的值 反射如何获取方法上的注解 上手就问你了解反射么,讲讲吧?我真不知道从哪里讲起。 然后问反射的private的访问,关于是否能访问私有成员变量 那private还有什么用 反射的作用,反射相关的类(我说了一些反射相关的方法,说不太清楚相关的类是什么意思,后来才知道他说的是construction这种类,我就说还有字段,方法这种,他还说我没回答清楚他的问题,我说您是要我把这些单词说出来吗?他又说你和别人说类的时候不可能说构造器,肯定说的是construction这个单词,好吧。。) 反射怎么使用 **如何通过反射的方式去访问一个类中的匿名内部类的变量?** #### 使用场景 反射的应用场景 反射的使用场景 反射的应用场景 反射的运用场景 jdk哪里东西用了反射 什么时候用到反射?->(动态代理,Spring 中判断类是否有某个注解或者是否实现了某个接口) #### 本地方法 Java 中我们自己写的代码可以调用本地方法吗?(回答的不行)->JNI(没用过不太知道) **Java 如何调用 JNI 的,说说过程** 底层会怎么防止我们调用本地方法呢?(检测调用类所在的包是不是某个特定的包) 那有什么办法调用吗?(反射) ### IO bio和nio区别 Java中的io方式 io输入与输出的分别相对于谁来说 java文件读写 网络编程用过吗?IO 讲一下 说一说NIO BIO和NIO区别 了解IO吗?BIO、AIO 网络中用的 I/O 模型,讲一讲 BIO, NIO,AIO;IO 多路复用了解吗 BIO、NIO、AIO的区别和联系? 讲讲 BIO、NIO、AIO 的区别? NIO 到底有没有阻塞,NIO 到底能不能提高 IO 效率? ### 网络编程 网络编程了解过吗?说说如何创建一个 Socket 连接 ### 新特性 Java 新特性? java1.8中有哪些新的特性?(随便答了一些) 平时用jdk哪个版本?(答: 8) 用到了 Java 8 的哪些新特性? JDK8 的新特性? Java 8 有哪些让你印象深刻的新特性 Java8新特性(摆烂没答出来) java8里面新出了一些时间的类,比如比如LocalDate,与Date、 Calendar等其他时间类有什么区别? Java8 新特性:Lambda 表达式,函数式编程的效率问题,比如为什么用流的方式 foreach 更好?(不晓得呀。。。) Lambda 表达式去做数据筛选(手写代码) jdk1.8之后的lamnda表达式会不会写?我不会写,我只在python里写过lamnda。 Lambda 表达式有什么好处,什么坏处,应用场景有哪些 jdk lambda表达式几种使用方式,取最大和最小值,list转map,list中有重复的怎么办 Lambda 怎么用的,Stream 的实现原理? Java1.8 的新特性?你说到了 Lambda 表达式,你说说它的优缺点? java8新特性,讲讲用过stream里的哪些东西吧 Java 8 的 Stream 流用过吗?有什么特点? JDK8的stream的操作 jdk1.8和jdk1.9的新特性。听到这个楼主一脸懵逼,1.9根本不会,只能把1.8的一些新特性结合具体例子跟他讲了一下,比较满意。 版本8-12,每个大版本更迭引入的新功能或新特性是什么 因为上一个问题,面试官问我知道java9的时候有什么变化吗?(答:不知道。我还真没注意过java9改了String 类的实现) # JVM ## 《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第3版)》 9.4(819人评价) 周志明 / 机械工业出版社 / 2019-12 / 129.00元 https://book.douban.com/subject/34907497/ 第一部分 走近 Java 第1章 走近 Java 1.1 概述 1.2 Java 技术体系 1.3 Java 发展史 1.4 Java 虚拟机家族 1.4.1 虚拟机始祖:Sun Classic/Exact VM 1.4.2 武林盟主:HotSpot VM 1.4.3 小家碧玉:Mobile/Embedded VM 1.4.4 天下第二:BEA JRockit/IBM J9 VM 1.4.5 软硬合璧:BEA Liquid VM/Azul VM 1.4.6 挑战者:Apache Harmony/Google Android Dalvik VM 1.4.7 没有成功,但并非失败:Microsoft JVM 及其他 1.4.8 百家争鸣 1.5 展望 Java 技术的未来 1.5.1 无语言倾向 1.5.2 新一代即时编译器 1.5.3 向 Native 迈进 1.5.4 灵活的胖子 1.5.5 语言语法持续增强 1.6 实战:自己编译 JDK 第二部分 自动内存管理 第2章 Java 内存区域与内存溢出异常 2.1 概述 2.2 运行时数据区域 2.2.1 程序计数器 2.2.2 Java 虚拟机栈 2.2.3 本地方法栈 2.2.4 Java 堆 2.2.5 方法区 2.2.6 运行时常量池 2.2.7 直接内存 2.3 HotSpot 虚拟机对象探秘 2.3.1 对象的创建 2.3.2 对象的内存布局 2.3.3 对象的访问定位 2.4 实战:OutOfMemoryError 异常 2.4.1 Java 堆溢出 2.4.2 虚拟机栈和本地方法栈溢出 2.4.3 方法区和运行时常量池溢出 2.4.4 本机直接内存溢出 第3章 垃圾收集器与内存分配策略 3.1 概述 3.2 对象已死 3.2.1 引用计数算法 3.2.2 可达性分析算法 3.2.3 再谈引用 3.2.4 生存还是死亡? 3.2.5 回收方法区 3.3 垃圾收集算法 3.3.1 分代收集理论 3.3.2 标记-清除算法 3.3.3 标记-复制算法 3.3.4 标记-整理算法 3.4 HotSpot 的算法细节实现 3.4.1 根节点枚举 3.4.2 安全点 3.4.3 安全区域 3.4.4 记忆集与卡表 3.4.5 写屏障 3.4.6 并发的可达性分析 3.5 经典垃圾收集器 3.5.1 Serial 收集器 3.5.2 ParNew 收集器 3.5.3 Parallel Scavenge 收集器 3.5.4 Serial Old 收集器 3.5.5 Parallel Old 收集器 3.5.6 CMS 收集器 3.5.7 Garbage First 收集器 3.6 低延迟垃圾收集器 3.6.1 Shenandoah 收集器 3.6.2 ZGC 收集器 3.7 选择合适的垃圾收集器 3.7.1 Epsilon 收集器 3.7.2 收集器的权衡 3.7.3 虚拟机及垃圾收集器日志 3.7.4 垃圾收集器参数总结 3.8 实战:内存分配与回收策略 3.8.1 对象优先在 Eden 分配 3.8.2 大对象直接进入老年代 3.8.3 长期存活的对象将进入老年代 3.8.4 动态对象年龄判定 3.8.5 空间分配担保 第4章 虚拟机性能监控、故障处理工具 4.1 概述 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 4.2.2 jstat:虚拟机统计信息监视工具 4.2.3 jinfo:Java 配置信息工具 4.2.4 jmap:Java 内存映像工具 4.2.5 jhat:虚拟机堆转储快照分析工具 4.2.6 jstack:Java 堆栈跟踪工具 4.2.7 基础工具总结 4.3 可视化故障处理工具 4.3.1 JHSDB:基于服务性代理的调试工具 4.3.2 JConsole:Java 监视与管理控制台 4.3.3 VisualVM:多合-故障处理工具 4.3.4 Java Mission 4.4 HotSpot 虚拟机插件及工具 第5章 调优案例分析与实战 5.1 概述 5.2 案例分析 5.2.1 大内存硬件上的程序部署策略 5.2.2 集群间同步导致的内存溢出 5.2.3 堆外内存导致的溢出错误 5.2.4 外部命令导致系统缓慢 5.2.5 服务器虚拟机进程崩溃 5.2.6 不恰当数据结构导致内存过大 5.2.7 由 Windows 虚拟内存导致的长时间停顿 5.2.8 由安全点导致长时间停顿 5.3 实战:Eclipse 运行速度调优 5.3.1 调优前的程序运行状态 5.3.2 升级 JDK 版本的性能变化及兼容问题 5.3.3 编译时间和类加载时间的优化 5.3.4 调整内存设置控制垃圾收集频率 5.3.5 选择收集器降低延迟 第三部分 虚拟机执行子系统 第6章 类文件结构 6.1 概述 6.2 无关性的基石 6.3 Class 类文件的结构 6.3.1 魔数与 Class 文件的版本 6.3.2 常量池 6.3.3 访问标志 6.3.4 类索引、父类索引与接口索引集合 6.3.5 字段表集合 6.3.6 方法表集合 6.3.7 属性表集合 6.4 字节码指令简介 6.4.1 字节码与数据类型 6.4.2 加载和存储指令 6.4.3 运算指令 6.4.4 类型转换指令 6.4.5 对象创建与访问指令 6.4.6 操作数栈管理指令 6.4.7 控制转移指令 6.4.8 方法调用和返回指令 6.4.9 异常处理指令 6.4.10 同步指令 6.5 公有设计,私有实现 6.6 Class 文件结构的发展 第7章 虚拟机类加载机制 7.1 概述 7.2 类加载的时机 7.3 类加载的过程 7.3.1 加载 7.3.2 验证 7.3.3 准备 7.3.4 解析 7.3.5 初始化 7.4 类加载器 7.4.1 类与类加载器 7.4.2 双亲委派模型 7.4.3 破坏双亲委派模型 7.5 Java 模块化系统 7.5.1 模块的兼容性 7.5.2 模块化下的类加载器 第8章 虚拟机字节码执行引擎 8.1 概述 8.2 运行时栈帧结构 8.2.1 局部变量表 8.2.2 操作数栈 8.2.3 动态连接 8.2.4 方法返回地址 8.2.5 附加信息 8.3 方法调用 8.3.1 解析 8.3.2 分派 8.4 动态类型语言支持 8.4.1 动态类型语言 8.4.2 Java 与动态类型 8.4.3 java.lang.invoke 包 8.4.4 invokedynamic 指令 8.4.5 实战:掌控方法分派规则 8.5 基于栈的字节码解释执行引擎 8.5.1 解释执行 8.5.2 基于栈的指令集与基于寄存器的指令集 8.5.3 基于栈的解释器执行过程 第9章 类加载及执行子系统的案例与实战 9.1 概述 9.2 案例分析 9.2.1 Tomcat:正统的类加载器 9.2.2 OSGi:灵活的类加载器架构 9.2.3 字节码生成技术与动态代理的实现 9.2.4 Backport 工具:Java 的时光机器 9.3 实战:自己动手实现远程执行功能 9.3.1 目标 9.3.2 思路 9.3.3 实现 9.3.4 验证 第四部分 程序编译与代码优化 第10章 前端编译与优化 10.1 概述 10.2 Javac 编译器 10.2.1 Javac 的源码与调试 10.2.2 解析与填充符号表 10.2.3 注解处理器 10.2.4 语义分析与字节码生成 10.3 Java 语法糖的味道 10.3.1 泛型 10.3.2 自动装箱、拆箱与遍历循环 10.3.3 条件编译 10.4 实战:插入式注解处理器 10.4.1 实战目标 10.4.2 代码实现 10.4.3 运行与测试 10.4.4 其它应用案例 第11章 后端编译与优化 11.1 概述 11.2 即时编译器 11.2.1 解释器与编译器 11.2.2 编译对象与触发条件 11.2.3 编译过程 11.2.4 实战:查看及分析即时编译结果 11.3 提前编译器 11.3.1 提前编译的优劣得失 11.3.2 实战:Jaotc 的提前编译 11.4 编译器优化技术 11.4.1 优化技术概览 11.4.2 方法内联 11.4.3 逃逸分析 11.4.4 公共子表达式消除 11.4.5 数组边界检查消除 11.5 实战:深入理解 Graal 编译器 11.5.1 历史背景 11.5.2 构建编译调试环境 11.5.3 JVMCI 编译器接口 11.5.4 代码中间表示 11.5.5 代码优化与生成 第五部分 高效并发 第12章 Java 内存模型与线程 12.1 概述 12.2 硬件的效率与一致性 12.3 Java 内存模型 12.3.1 主内存与工作内存 12.3.2 内存间交互操作 12.3.3 对于 volatile 型变量的特殊规则 12.3.4 针对 long 和 double 型变量的特殊规则 12.3.5 原子性、可见性与有序性 12.3.6 先行发生原则 12.4 Java 与线程 12.4.1 线程的实现 12.4.2 Java 线程调度 12.4.3 状态转换 12.5 Java 与协程 12.5.1 内核线程的局限 12.5.2 协程的复苏 12.5.3 Java 的解决方案 第13章 线程安全与锁优化 13.1 概述 13.2 线程安全 13.2.1 Java 语言中的线程安全 13.2.2 线程安全的实现方法 13.3 锁优化 13.3.1 自旋锁与自适应自旋 13.3.2 锁消除 13.3.3 锁粗化 13.3.4 轻量级锁 13.3.5 偏向锁 附录A 在 Windows 系统下编译 Open JDK 6 附录B 展望 Java 技术的未来(2013年版) 附录C 虚拟机字节码指令表 附录D 对象查询语言(OQL)简介 附录E JDK 历史版本轨迹 ## 面试题 JVM了解吗,说说所知道的 (??我讲了内存区域、垃圾回收、类加载,然后,面试官说可以了) 你平时用的JVM版本是什么?最新版本是什么? **为什么要指针压缩,为什么能指针压缩?原理是什么?** 能说一下JVM的模型吗? 说说jvm?(说了内存区域和垃圾回收) 垃圾回收算法,jvm运行时区域等 **JVM虚拟机启动有哪些线程?** **staic 和 final 关键字结合 jvm 来讲** GC 底层算法,JVM 内存模型,常见的垃圾回收器,双亲委派的类加载流程; 讲下 JVM。这块主要我自己在说,一口气说下来说了有二十多分钟吧,面试官一直没说话,我就一直说,从运行时数据区,讲到一个类具体是如何存储的,再讲到垃圾回收机制和垃圾收集算法,再讲到各个版本的 JDK 的垃圾收集器,再讲到 YoungGC 和 FullGC,再讲 YoungGC 的具体过程,对象是如何分配的,出现 OOM 时如何排查,已经自己在项目的一个 GC 调优做的具体工作 问我a=2,b=1,c=a+b底层具体是一个什么样的过程,答了java内存的分布,具体在哪个位置,比如常量池在方法区,然后栈存对常量的应用之类的。 问底层呢我答内存拷贝,问有多少次内存拷贝,然后又问在多核cpu和多线程下,然后也是这种情况,cpu和底层又具体是什么样的过程,互相之间怎么影响,怎么不影响。 问我对jvm的垃圾回收了解吗,说了从新生代到老年代的整体的过程,用什么垃圾回收算法,举了几个垃圾回收器的例子,说来空间分配担保和可能产生full gc的原因,反正尽可能细的去说自己知道的,越细越好。 讲讲 GC,初生代有哪几个块,怎么晋升到老年代,什么时候是 FULL GC,最好再给他讲讲 JVM 调优,我一般都说这是我作为兴趣爱好了解的,了解的不深,不懂的水面试官会觉得你再谦虚,懂得你就说了解的比较少,可能听过-xx 之类的命令把初生代内存设置大一些,少一些 Minor GC 会提升性能之类的。 JVM 调优的目的?GC 的种类?垃圾回收算法有哪些?好像还问了为什么要分区。(笔试的时候有关于 JVM 参数的一些问题,我没背) 这三行代码 jvm 做了什么事情 - ```java String a = "123"; String b = new("456"); String c = a + b; ``` jvm 内存结构,垃圾回收策略,垃圾回收算法 ### 内存区域 jvm的基本结构 jvm中那些结构是线程独有和共有的 jvm 堆栈,区别,线程共享还是线程私有的 JVM 运行时数据区? 在JDK8中移除永久代,并把方法区移至元空间,这么设计的原因是什么 `【2次】` **元空间需要进行GC么?需要的话,元空间的GC是young gc还是full gc** JVM内存空间分布 JVM内存结构 你对jvm有了解吗?说一下jvm的内存分区? 堆里面怎么分区的?(这题真不会,只说知道为了方便垃圾回收所以分了新生代区和老年代区,其他的真不知道) jvm分区模型 首先是模型分成哪几块,堆 栈等等。。 哪些是线程私有的哪些是共有的 1.6之前和现在1.8哪些地方做了改动(主要是静态区的变化) 说一说jvm的分区 JVM内存结构 JVM 内存划分, 堆内存分代 JVM中的内存区域划分,堆的分代,为什么分代, 垃圾回收算法,垃圾回收器 JVM堆划分,方法区 JVM 运行时数据区,Synchronized 和 ReentrantLock 区别 JVM 运行时数据区 堆空间怎么分的 jvm内存分区?常量在哪?变量在哪?堆怎么划分的? jvm内存分区,gc发生在哪? 数组长度不确定,能在栈上分配内存吗? jvm的内存布局和gc过程 JVM 的内存结构,哪些是线程私有,哪些是线程公有 JVM 的结构,垃圾收集算法 JVM 内存区域 JVM 的基本结构 运行时数据区的基本结构,各种结构都有什么用途 Jvm 内存结构 堆和栈有什么区别 堆 和 栈 的区别? JVM 内存区域(两次问到,我顺便说了说永生代和元空间,两次面试看面试官表情应该算半拉亮点) JVM 的内存划分,各个部分的作用是什么? JVM 每个区具有什么功能? 元空间是起到什么作用? JVM 内存模型,哪些是公有的,哪些是私有的 堆是干嘛的, 常量池放在方法区和堆上有什么区别,是在更轻量的 GC 上回收 介绍一下 JVM 的内存区域? #### 对象的创建 对象创建过程? 创建对象一定是在堆上创建吗,每次创建对象都是在堆上申请内存的吗 对象的生命周期(new 一个对象的过程)? ### 内存溢出异常 OOM JVM OOM 排查? 什么会导致栈溢出、堆内存溢出? 怎么排查堆溢出 说下java里面的OOM JVM内存管理和垃圾回收。哪些操作会导致OOM?循环引用怎么解决? 内存泄漏,out of memory outofmemory,内存泄漏 outofmemory遇到过没,设置jvm参数吗? 那你说说java泄露,可以写一个程序吗? (我当初一听第一反应就是终于我这个会了,就回答说: 这个问题很好解决,就说 只要写一个程序 无限创建一个new对象,这个对象是强引用,就可以保证堆被撑破,他说不行,我最后又加了一句,在这个基础上,循环引用,不会被GC,面试官最后说还是不行,其实当初也是慌了,就真的不知道该怎么办了,因为以前看过OOM怎么解决,但是没想过怎么产生OOM,觉得能产生OOM的还被面试官一直否决,最后面试完在网上查才知道,其实应该再加一个条件,就是循环引用的同时,保证一个对象必须是GC root,我当初面试也没尝试再说这一句,只能说紧张加学艺不精) 评论:是不是问的是内存泄露,而你好像理解成内存溢出惹…? 内存溢出的原因 如何排查 什么是内存泄漏?什么是内存溢出?什么时候会发生内存泄露 什么时候会 OOM,服务 OOM 怎么办,如何排查 Java 内存泄漏和排查 有没有调试过内存溢出的错误? 怎么解决内存泄露; 什么时候会有内存泄漏,怎么排查 ### 垃圾收集器和内存分配策略 什么是 gc,gc 怎么排查,怎么手动让 JAVA 虚拟机 OOM JVM回收机制,从判断对象死亡、GC Roots、Stop the World、回收算法优缺点讲起,提到引用计数弊端。 垃圾回收:年轻代老年代 回收算法 垃圾回收器等 问 JVM:GC 如何判断回收的垃圾对象?GC 算法有哪些?Minor Gc 和 Full GC 有什么不同呢?ZGC 垃圾回收器了解吗? 讲解一下 JVM 的垃圾回收; #### 可达性分析 JVM怎么判断一个对象是否是垃圾对象? 说说java里面的gc机制、垃圾回收算法、如何判断一个对象是无用对象? 可达性分析 再到jvm怎么回收垃圾,说到引用计数和根可达分析,jvm怎么确定根元素 判断gcroots的原则是什么 哪些可以作为GCROOT(这里太久没看了,没答全) root引用和引用计数 垃圾回收,怎么判断对象需要回收,垃圾回收机制 怎么判断需要垃圾回收?GC Root? GC Roots 是什么?主要用来做什么? 讲讲垃圾回收和死亡对象判断方法,具体讲讲可达性分析 JVM,,哪些对象需要回收,垃圾收集算法 GC 的过程,引用计数法还有在使用吗 JVM 垃圾回收机制?如何判断需要回收? 如何判断一个类是无用的类 如何判断一个对象是否该被回收 Java 引用类型,强软弱虚 强引用 弱引用 软引用 虚引用 java 弱引用和虚引用的区别? 四种引用(强、软、弱、虚) 说说四种引用 场景题:如果是一个服务器用于存储数据,然后里面有一些数据是热点数组,需要缓存,用哪种引用 JVM中给对象赋值为null,一定会被回收么?举个case,讲到了内存泄露。 #### GC 机制、算法 垃圾回收 垃圾回收算法 三种回收算法 了解JVM吗?为什么需要垃圾回收呢? 垃圾回收机制 项目中用的哪种垃圾回收机制? 项目中用的垃圾回收机制。设置JVM参数 回收算法 回收算法有哪些具体实现?垃圾回收器 讲讲Java GC机制? Java的垃圾回收机制 Java垃圾回收,需要程序员自己回收吗? 垃圾回收机制 GC,新生代为什么要采用复制算法 GC 的过程,为什么要分代 gc算法有哪些 Java怎么进行垃圾回收的?什么对象会进老年代? 垃圾回收算法有哪些?为什么新生代使用复制算法? jvm的回收算法 JVM的回收算法,当我背到一半后,打断了,说我知道你是为了面试背背而已,过几天忘了 gc算法 jvm的回收策略 高吞吐量的话用哪种gc算法 Full GC full gc怎么触发 FullGC什么时候会发生 发生 FULL GC 的条件 Minor GC 与 Full GC 的触发机制是什么? major gc和full gc的区别,我脑抽,说反了,被鄙视了 执行了 system.gc()触发的GC机制,FGC, 如何进行回收的, 分代回收 系统周期性卡顿,如何定位问题,结合GC日志, YGC,FGC, 调整分代的大小, 减小FGC时间 产生FGC的原因 full gc问题,怎么排查 频繁GC的原因和解决方案 什么情况下老年代会发生GC? 安全点,安全点的作用?一些 JVM 源码(之前的文章写过,面试官和感兴趣) 垃圾回收算法;PS+PO,CMS 为什么要用标记清除算法?CMS 的前身,R 大的文章。 垃圾回收机制:场景:计算机性能好 但Idea(也是一个Java程序)但比较卡,原因:可能是因为频繁产生Full GC 怎么排查问题进行调整 Full GC效果不好 每次只能从90%-》85%之后又90%了,这种情况下应该怎么办比较好 (如果是一次fullgc后,剩余对象不多。那么说明你eden区设置太小,导致短生命周期的对象进入了old区。如果一次fullgc后,old区回收率不大,那么说明old区太小。) 垃圾回收算法(标记-清除,标记-复制,标记-整理) 垃圾回收策略 介绍垃圾回收算法 介绍复制回收算法 哪种垃圾回收算法效率最低 详细介绍标记算法,标记清除流程 介绍一下 JVM 的垃圾回收算法? Java 垃圾回收的方法新生代和老年代的不同的算法 垃圾回收机制讲一下 垃圾回收时标记存活对象的三色标记法原理,以及在出现漏标、错标情况时是如何解决的? 垃圾回收算法有哪些 分别介绍一下 GC 底层算法的优势和劣势以及它们的应用场景; 什么是复制算法,他的原理是什么?用在什么区?为什么用在这个区多? 标记整理法的缺点是什么? 标记复制和标记整理哪个能产生内存碎片(标记整理) #### 内存分配策略 堆如何分代 为什么要分代 新生区,老年区分布在那里,说一下他们的区别,和所使用的算法; 什么是新生区?什么是老年区?什么是永久代? 假设HashMap里面存放100万个对象,那么gc可能会有什么问题? byte[] a = new byte[10 * 1024]内存分配过程?多大的对象直接进入老年代?通过什么参数配置? 对象什么情况会进去老年代 那你知道一个对象怎么从新生代变成老年代吗?(懵逼,对不起,不知道,只简单的知道两个区的定义) 介绍 TLAB,PLAB,CAS 分配。 Eden 和 Survivor 比例可以调整么,参数是什么?还用到了哪些参数? JVM 新生代怎么划分,大对象怎么分配 怎么释放一个用完的大对象的内存空间? #### 垃圾回收器 常见的垃圾回收器 聊聊垃圾回收,实习的时候团队用的是哪个垃圾收集器?项目用什么垃圾回收器`【2次】` 常用的垃圾回收器有哪些? 常见的垃圾回收器 常见的垃圾回收期 CMS 垃圾收集器的特性,工作的四个流程,哪几个流程 stop the world 讲一讲CMS的回收过程 详细介绍下CMS? G1和CMS垃圾回收器 ZGC,聊到了彭寒成的《新一代垃圾回收器 ZGC 设计与实现》和美团技术团队的文章。 G1 G1,聊到了中村成洋的《深入 Java 虚拟机:JVM G1GC 的算法与实现》。 G1,最大的特点,标记位图,卡表卡页,SATB。 G1的适用场景和实现原理 详细说一下Remembered Set的作用,什么时候会往里面写、更新等 还有一个Collection Set,你知道C Set的作用是什么吗? 常用 GC 算法,常用的垃圾收集器, G1 了解吗 垃圾回收器都有哪些 G1 回收器与之前的回收器相比最大的不同是什么 新生代有哪些垃圾回收器 ParNew 原理 CMS 收集器收集过程 介绍 G1 垃圾收集器、回收过程,与 CMS 对比; JVM 垃圾回收器有哪些? 讲解一下 Serial 和 CMS,G1 回收器; 垃圾回收器、 算法、G1 ### 虚拟机性能监控、故障处理工具 JVM相关的分析工具有使用过哪些?具体的性能调优步骤吗? 说一下垃圾回收?如果GC突然很慢怎么排查,比如原来GC完成只需要1秒,现在要5秒?了解哪些gc相关的工具,比如jstack之类的 有没有用过工具,怎么查看Java堆的统计信息 (参考《深入理解Java虚拟机》第4章,没用过工具,只说了常用了JVM参数) jvm工具,jstack jconsole 这些,还是看一丢丢,留个印象 服务器CPU使用率很高,如何排查, top 定位进程, 如果是Java,通过jstack进行线程快照分析,jmap,jhat 等等, 用到过内存分析工具吗; 查看运行内存,JVM 状态有什么方法 ### 调优分析实战 高并发后台怎么优化GC,我主要是说了调整eden和surival的比例啥啥啥的 GC优化,程序中应该如何优化? 有没有做过 JVM 调优? jvm参数调优怎么做的 我回答的是用的微服务部署,有的微服务访问很频繁的,就多给他设置一些内存,比如网关,一些不怎么用到的,可以设置稍微小一点。然后他说:你们这就是全凭感觉瞎设置呗 jvm调优做过吗,有哪些参数可以调,具体怎么调 JVM 调优过程?怎么发现 JVM 的问题的?怎么做预警处理? JMV 优化过程,效果。为什么要升级垃圾收集器? jvm调优 加分项,美团面试的时候一面和面试官讨论了调优的一些细节 --xmns啥的 如果一个系统要进行调优你会考虑哪些方面;答:jvm(非常详细的展开),如果有数据库查询可以用索引等等。。。 聊了这么久虚拟机,你调过优吗?怎么调的。。。一脸懵逼 有没有jvm调优经验(没有) GC 调优 CPU 占用率达到 100% 可能由什么造成 jvm怎么调优,什么看gc的日志之类的 项目中关于 FULL GC 调优的细节 cpu标高100%什么原因?为什么会出现死循环? 场景题:cpu 打满且频繁 full GC,怎么解决? JVM 调优经验 说一下做了什么? JVM 的常用参数有哪些 JVM 调优常用的手段是什么 jvm 调优你如何做的?现象->排查过程->解决方式->不同解决方案的对比与选择 有 jvm 调优的经验吗?实际工作中遇到过内存相关的问题吗?用过哪些堆栈工具调试? ### 虚拟机执行子系统(Class 文件、字节码、类加载机制) 类加载机制 ClassLoader原理和应用 Java中有个String类,如果我们自己写一个java.lang.String类,会出现问题吗 (参考《深入理解Java虚拟机》第7章 虚拟机类加载机制,主要讲了类加载器的种类和双亲委派模型) 类加载过程?类隔离了解过吗? 多态和重载的底层实现原理,字节码层面的了解过吗? Java的类加载过程、机制,每个过程的作用 JAVA类加载过程(加载(类加载器问题) 验证 准备 解析 初始化) 类加载器 双亲委任 如果发生了冲突,会出现什么情况-- 编译不报错,运行调用bootstrapclassloader加载rt.jar中的类 JVM 是怎么判断两个类相等 类加载器 类加载过程 双亲委派模型 JVM 的类加载过程。谈到了双亲委派模型。 怎么打破双亲委派模型。自己实现一个类加载器,怎么打破类加载器?问具体的实现细节。 类加载器都有哪些 双亲委派机制 类加载过程? 类加载的过程是什么,每个过程具体做到了什么事 双亲委派模型的好处 双亲委派机制,和类加载器,双亲委派机制的源码看看?(问比较多次了) java 对象的内存结构?标记字是做什么的? 问 JVM:双亲委派模型的理解,有没有在项目中实践过自定义类加载器。 双亲委派模型的类加载机制? 同一个 JVM 能不能加载全县定性类名是相同的一个类?能不能加载同一个类? 简述双亲委派模型 简述类加载过程 Java 的类加载过程; 介绍一下双亲委派机制; 为什么双亲委派机制能够避免类的重复加载呢? 如何自定义一个与 Java 核心方法同名同参数的函数呢? 双亲委派机制的双亲是那双亲呢? 自定义类加载的过程是什么? 类加载机制 ### 程序编译与代码优化 **JVM Server模式与client模式启动的差别?** **Java 语法糖(lambda、自动装箱、for-each、泛型)** 动态编译和静态编译的区别 为何引入 JIT 编译?逃逸分析是什么? 什么是逃逸,是不是所有对象都在堆上分配内存 ### 内存模型与线程 Java 内存模型 Java内存模型 jvm内存模型jmm 知道的全讲讲 jvm内存模型 jvm内存模型 JVM内存模型 jvm的内存模型 讲一讲java的内存模型 JAVA内存区域(堆 栈等) JAVA内存模型(工作内存 主内存等) jvm内存模型,如何分配内存 写屏障和读屏障的区别是什么? mesi协议(缓存一致性协议) 内存屏障 Java内存模型说一下 JVM的内存模型 (我开始以为他问的是工作内存和主内存),他说不是,不用讲这些,他说记住我问的问题,我说您问的是栈,堆之类吗?他说是的,然后就给他解释(我一直记得内存结构是这些,内存模型是工作内存和主内存,还特意区分了) volatile 的作用是什么 - 防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性 - 会主动刷新存储 JVM 内存模型和垃圾回收; 讲一下 JMM 讲解一下 JVM 内存模型; 讲解一下 JVM 的内存模型; 讲讲 JMM JVM 的内存模型?运行时是怎么运作的? ### 线程安全和锁优化 字节码头部有哪些组成?说说锁标记和锁升级 偏向锁、轻量级锁是怎么做到的,我回答的是每个对象都有对象头,对象头里做的标记,然后他问我对象头里有哪些信息 # JUC / 多线程 ## 《Java 并发实现原理:JDK 源码剖析》 8.2(55人评价) 余春龙 / 电子工业出版社 / 2020-4 / 89元 https://book.douban.com/subject/35013531/ ## 《Java 并发编程实战》 9.0(1687人评价) Brian Goetz / Tim Peierls / Joshua Bloch / Joseph Bowbeer / David Holmes / Doug Lea / 童云兰 / 机械工业出版社 / 2012-2 https://book.douban.com/subject/10484692/ ## 《Java 并发编程实践》 和上面其实是同一本的不同翻译 8.8(354人评价) 戈茨 / 韩锴 / 方秒 / 电子工业出版社 / 2007-6 / 58.00元 https://book.douban.com/subject/2148132/ ## 《Java 多线程编程实战指南(核心篇)》 8.9(187人评价) 黄文海 / 电子工业出版社 / 2017-4 / 89 https://book.douban.com/subject/27034721/ ## 《Java 多线程编程实战指南(设计模式篇)》 8.0(52人评价) 黄文海 / 电子工业出版社 / 2015-10 / 59.00 https://book.douban.com/subject/26642317/ ## 《实战 Java 高并发程序设计(第2版)》 8.5(67人评价) 葛一鸣 / 电子工业出版社 / 2018-10 / 89 https://book.douban.com/subject/30358019/ ## 《Java 并发编程的艺术》 7.6(594人评价) 方腾飞 / 魏鹏 / 程晓明 / 机械工业出版社 / 2015-7-1 / 59.00元 https://book.douban.com/subject/26591326/ ## 《Java 高并发编程详解:多线程与架构设计》 7.1(39人评价) 汪文君 / 机械工业出版社 / 2018-6 / 89.00元 https://book.douban.com/subject/30255689/ ## 面试题 用过多线程吗?为什么项目要用到多线程? **伪共享(false sharing),并发编程无声的性能杀手:可以结合 `volatile` 和 `ConcurrenthashMap.countercell` 进行解答** Java线程你是怎么使用的?Thread、Runnable、Callable、Executors工具类、ThreadPoolExecutor对象 项目中用过多线程吗?如何保证多线程线程安全的?具体你做了哪些操作来实现的? 介绍 AQS、CountDownLatch、Semaphore、volatile、synchronized 异步的实现?线程池参数?@Async 需要注意的? 并发和并行的区别? 并发和并行的区别 并行和并发的区别; 同步和异步的区别? 在你实际开发中,异步一般用在什么地方? **你项目中的异步导入导出 如果有异常是怎么处理的?** 多进程与多线程 项目里用到多线程了吗? 用过多线程吗,怎么实现的多线程?(答了自己用线程池,还可以用其他三种方法创建新线程) 项目中的并发临界资源是怎么处理的? 悲观锁和乐观锁, 概念上,JDK 中的类, CAS的缺点, 空转,ABA问题。使用pause指令, AtomicStampedReference Java基础,实现多线程的方法,线程池有哪些,怎么扩容。 CAS, AQS 实现 ThreadLocal ,Volatile 多线程说一下, 你项目中用到了吗, 你怎么写的线程?几个线程有什么区别? 线程池用了吗? **线程回调,这块 被问过让我设计一个RPC,怎么实现,其实用到了回调这块的东西** **如何排查多线程问题** Java 并发编程,进程和线程的区别,协程,同步机制 多线程方面,ThreadLocal,线程池 为什么要使用多线程,有什么好处,举例具体场景 单例模式并发下实现方式 创建线程的方式 , start run 哪个是启动一个线程 线程池的优点是什么 C 或 Java 并发实现的实例? 实现互斥的方式 问 Java 并发(这块问的太深入了,顶不住啊。。。):进程和线程,了解协程吗?JMM 的理解,作用。happens-before 原则的理解,作用。Java 里面的锁你知道哪些?synchronized 关键字的理解、原理、锁升级过程。AQS 了解、原理。`ReentrantLock` 源码。`ThreadLocal` 理解、原理、内存泄露问题。 线程和进程-》进程的通信方式-》线程状态-》线程上下文切换-》死锁以及解决-》wait 和 sleep-》多线程-》为什么多线程-》如何创建多线程-》多线程安全问题-》如何解决-》两种锁 Sy 和 re-》区别和底层实现 **怎么获取子线程的返回值?** 子线程抛异常,主线程 try-catch 是否可以获取到异常 。 ### 进程、协程 进程、线程、协程区别。用过协程吗? 了解线程与协程的区别嘛?协程有哪些优势?把所有多线程都替换成协程实现可以嘛? 进程通信方式 一个CPU单核,同时只能处理一个指令,是或否? 一个CPU 8核,最多同时只能处理8条指令,是或否? 进程、线程、协程、goroutine区别 了解协程吗? 进程和线程的区别是什么?进程之间怎么通信的?线程之间呢? 进程、线程、协程的区别?为啥go的协程做的比较好(个人认为核心是有栈协程) 线程和进程的区别 线程的通信方式,进程的通信方式 进程中文件写怎么保证安全?我操作系统那块不熟,就提了JAVA中的ReadWritelock底层实现。 如何实现进程间特定场景下的高效通信, 问了存储相关的问题。 OS进程间通信的方式?Java使用的哪种方式? 进程与线程的区别 进程和线程 进程通信的几种方式 线程和进程区别,进程为什么开销大?有哪些开销 多线程和多进程的使用场景 线程间通信和进程间通信,管道法用的时候什么管道 进程和线程区别 多进程和多线程区别 进程之间的通信 所以说进程和线程的区别? 进程和线程区别 线程和进程、进程通信的理解? 进程和线程的区别; 说一下进程和线程的定义,以及他们之间的关系 进程间的通讯方式有哪些 讲一下线程和进程的区别和联系; 为什么说进程切换开销比线程大? 用户态内核态 进程间通信方式 ### 线程 java里面的线程和操作系统的线程一样吗? 系统线程的数量上限是多少 线程通信方式 线程通信方式 #### 创建 创建线程有哪几种方式?创建线程的方式`【2次】` Runnable和Callable创建线程有什么区别? java里实现线程有哪些方式 多线程的实现方式 线程的实现方式——runnable thread future 创建线程的方式,使用过的有那些,为什么没使用过 Callable 和 Future 创建线程的几种方法 问创建线程的几种方式, 我答了thread和runnable,还有callable和Future,还有线程池创建,他就说callable和runnable不是一样的吗,你干嘛说两个,我说的一个是有返回值的,一个是没有返回值的,他说我问的是创建线程的方式,你这两个是两种吗?......,还有,你这线程池能创建线程吗?(......) 如何创建线程,你比较推荐哪种方式 多线程知识了解么,创建一个线程的三种方式 实现多线程的方式 #### 生命周期、状态 Java线程有哪些状态? 线程的几种状态 线程的几种状态 说说线程的状态 Java 线程的状态有哪几种? 线程的状态 , 新建,就绪,running, wait, blocked, terminated sleep 和 wait 的区别, 类的不同,是否会释放持有的锁,monitor Java 线程的状态;time-waiting时间到了,进入什么;调用sleep()进入什么状态?time_waiting,那这个time_waiting状态会释放锁吗?不会;锁等待是什么状态?blocked wait() notify() 以及线程状态转换 wait 和 notify 以及 notifyAll `notify()` 和 `notifyall()` 的区别 多线程,sleep,wait,yield sleep 和yield方法有什么区别 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法? Java线程状态和操作系统线程有什么不同?Java线程的 runable=ready+running,操作系统线程分为 running和 ready,并不是合在一起的 为什么Java把这两个状态放在一起? 阻塞和sleep的区别?? 线程的生命周期 线程生命周期 一个线程的生命周期 线程的生命周期以及每个周期进入和结束的标志 怎样结束一个线程?直接结束(stop() 方法)线程会有什么影响? 线程的生命周期以及每个周期进入和结束的标志 线程的状态,运行 xxxx 这种 ### 线程安全 什么是线程安全?为什么不安全? **竞态** 线程竞争 **原子性、可见性、有序性** 什么是原子性 描述一下有序性 多线程中的三大问题 java 是如何解决的? 怎么才能保证多线程的可见性?(volatile 和 synchronized) **指令重排序** 一般怎么样才能做到线程安全? 如何保证线程安全 Java中线程安全的类 多线程安全(锁机制、) 什么是线程安全 如何实现线程安全 线程安全的本质是什么?如何解决可见性的问题?可以想出哪几种方法? 问线程安全怎么实现 使用了 vector 就一定能保证线程安全吗 怎么样使 ArrayList 线程安全呢? 如何保证线程安全 new 了一个对象,里面有成员变量,有很多线程去修改它,这是线程安全的吗? 多线程修改这个对象的成员变量,有哪些方式可以保证线程安全? 线程安全的 Map 和 List 分别有哪些? 使用多线程可能存在的问题; 如何防止多线程并发产生的问题 使用什么方法能解决多线程的安全性问题呢? 多个线程创建对象,是怎么实现线程安全的 ### 线程同步机制:锁、其他 线程同步的理解? 说一下你了解的锁 Java里面的锁有哪些? Java 多线程方面了解吗?比如锁有什么类型? 了解哪些 Java 锁 锁都有哪些,区别 java中有几种锁 说说线程之间的同步方式?(参考深入理解JVM第13章13.2.2节阻塞同步、非阻塞同步和无同步方案) Java中线程同步的方案有哪些 (参考《深入理解Java虚拟机》第13章第2节,从“阻塞同步方案 | 非阻塞同步方案 | 无同步方案”三部分说明) 两个不同的JVM的进程如何同步?(当时好像听错了,我就答了redis分布式锁) Java有哪些同步方案,如果不加锁呢,加锁会不会太重了 (参考《深入理解Java虚拟机》第13章第2节,从“阻塞同步方案 | 非阻塞同步方案 | 无同步方案”三部分说明,面试官提到加锁会不会太重的时候,我提了一下synchronized锁升级) 锁在操作系统层面实现原理(回答那么多,其实面试官的意思是想让我回答原子性三个字。。。) Java锁机制,都说一下~ 介绍一下Java中的锁?可重入锁如何实现的可重入? 说一下锁 线程同步方式 Java 多线程同步的方法 Java 中的锁? 对 Java 中的锁有了解吗?说一下 Synchronized 的实现原理; #### synchronized sychronized介绍一下 synchronized关键字的底层实现 synchronized 底层原理? 说一下 synchronized 的实现原理? lock和synchronized这两个区别,1.6之后对synchronized做了什么优化 synchronized和lock区别 synchronized和lock区别 synchronized 和 lock 的区别 synchronized 和 lock 的区别? Synchronized 和 ReentrantLock 区别 synchronized 和 ReentrantLock 的区别 synchronized和ReentrantLock区别 synchronized和Reentranlock区别以及底层实现原理 synchronized和ReentrantLock的区别 synchronized 和 ReentrantLock 的区别 说一下 synchronized 和 reentranlock `synchronized` 和 `ReentrantLock` 的区别,如何选择; synchronized 和 ReentrantLock 区别 了解 synchronized 和 ReentrantLock 吗?有何区别?如何选择? synchronized相关:锁住的是什么,实现原理,1.6优化,和lock的区别 `synchronized` 和 `volatile` 区别? `synchronized` 有了为什么还要 `ReentranLock` ,有啥不一样? 单例模式双重检查锁(DCL) `synchronized` 为什么是重量级锁,从操作系统层面讲 `synchronized` 的作用,出了 8 道场景题,难度较低 **`synchronized` 底层实现原理?释放锁之后如何通知其他线程获取锁?** synchronized 如何实现等待唤醒 `synchronized` 的作用; ##### 可重入性 **说说可重入锁、为什么需要可重入锁?`【3次】`** Synchronized是重入的吗?和lock区别,以及synchronized对于普通方法和静态方法加锁。 synchronized可重入性 synchronized 是可重入锁么 synchronized 是可重入锁吗 synchronized 是可重入锁吗? synchronized 和可重入锁 ReentrantLock 都发生异常时,会有什么区别? ##### 对象头 synchronzied的对象锁和类锁的区别 对象锁和类锁的区别 类锁和对象锁的不同 同步控制块和同步方法的锁对象 synchronized对普通方法和静态方法加锁 sychronized锁住方法和锁住代码块的区别,什么时候会出现死锁 其他线程如何知道已经有线程在put(Mark word) Mark word是什么 ##### 锁升级 自旋锁 `synchronized` 做了哪些优化?(偏向锁、轻量级锁、自旋锁、锁粗化、锁消除等) synchronized的锁优化 锁升级的过程(自旋的缺点,CAS有什么不足) Synchronized,偏向锁聊了很久聊到了源码,升级过程,Synchronized 的 JVM 源码?(面试官对 JVM 很感兴趣) 一个轻量级锁怎么变成一个重量级锁的呢? synchronized的锁的机制,自旋锁,可重入锁,偏向锁,轻量级锁、重量级锁,锁的膨胀过程 synchronized底层的实现原理(自旋锁、偏向锁、轻量级锁、重量级锁),什么是重量级锁,定义是什么 像synchronized这种,得知道膨胀过程,锁膨胀实现过程,比如对象头如何变化,monitor是怎么回事等 偏向锁 轻量级锁 重量级锁 锁的升级过程? 说一下自旋锁? synchronized 锁的升级过程 #### Lock lock和synchronized区别,最大的区别是 lock和synchronized区别 lock sychronized区别 Lock接口的实现类 (参考《Java并发编程的艺术》第5章,Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的,引出了队列同步器AQS,实现类讲了ReentrantLock和ReentrantReadWriteLock) ##### ReentrantLock ReentrantLock的实现原理? ReentrantLock的底层实现原理 ReentrantLock底层实现?平时怎么使用的? ReentrantLock是怎么实现的,讲到AQS,顺便说了AQS ReentrantLock 和 CAS 的原理上的区别? ReentrantLock 公平锁和非公平锁 ReentrantLock 对比 sync 锁 介绍一下 Reentrantlock **ReentrantLock 用了 Unsafe 类的哪个方法** 讲一讲reentrantLock底层啥样子,实现api lockInterruptibly()、acquire()、tryAcquire() 方法 ##### ReentrantReadWriteLock 读写锁的实现方式,16位int的前八位和后八位分别作为读锁和写锁的标志位 读写锁了解吗(ReentrantReadWriteLock) `ReentrantReadWriteLock` 和 `StampedLock` #### volatile volatile 关键字是什么原理? volatile的作用和原理 volatile能不能保证原子性 说说volatile 关键字的作用 volatile作用 volatile怎么保证可见性和防止指令重排序 volatile的理解 Java中有个volatile关键字用过吗,用volatile修饰的变量来记录访问次数,需要其他同步操作吗 (场景:单例模式等,参考《深入理解Java虚拟机》第12章12.3.3“对于volatile型变量的特殊规则”,从Java内存模型JMM的角度讲volatile,说明指令中的lock前缀和将esp寄存器的值+0这个空操作) volatile关键字的作用(引出Java内存模型,保证可见性,防止指令重排序) 从volatile出发, 要求写出volatile解决可见性的代码 volatile 的特点,保证原子性么 volatile原理 内存屏障 volatile关键字,可见性。 volatile作用,变量不断加一,是否能够并发加正确,非原子性 volatile volatile的底层如何实现,怎么就能保住可见性了? volatile 的用法 volatile 的用法 volatile 的作用是什么 - 防止 JVM 的指令重排 ,还有一个重要的作用就是保证变量的可见性 - 会主动刷新存储 单例模式中变量前加的关键字(volatile) 继续问 Java 并发:手写 DCL(Double Check Lock) 线程安全方法。为什么需要加 volatile? volatile 的作用、底层原理。 Java 如何保证变量的可见性?(volatile 关键字) volatile 可以保证原子性么?(volatile 关键字能保证变量的可见性,但不能保证对变量的操作是原子性的) volatile 关键字 介绍一下 volatile? #### CAS CAS的ABA问题是什么,要怎么解决 (参考《深入理解Java虚拟机》P477) CAS原理,写了个底层源码 CAS 实现以及优缺点,用 CAS 实现阻塞队列(我也没听明白,自己说了下思路,面试官就说也行吧) CAS三大问题及解决方式 CAS乐观锁原理 CAS 设计思路和原理? 讲一下 CAS 的原理? CAS 是什么?ABA 问题 是什么?怎么解决 ABA 问题? CAS 是什么?原理? CAS 是什么?原理是怎样的? CAS 的原理呢 CAS 机制了解吗,存在什么问题 简述 CAS 什么是 cas? ##### 悲观锁、乐观锁 乐观锁悲观锁,在Java中的体现,举例 乐观锁,悲观锁 乐观锁和悲观锁的使用场景 乐观锁和悲观锁 乐观锁和悲观锁 乐观锁:CAS MVCC 悲观锁的常见实现方式:lock synchronized retreentlock 用过哪些锁呀?synchronized和reentrantLock区别 乐观锁, 悲观锁, 举例, 可以顺便说一下, CAS,volatile, synchronized 乐观锁和悲观锁的底层实现 乐观锁,悲观锁介绍一下 我:乐观锁实际上没有加锁 然后他就直接打断我了,发出一声嘲笑,问我:那你觉得什么是锁。 **不加锁如何保证线程安全** 比较一下悲观锁和乐观锁; 乐观锁与悲观锁 java 的锁的知识你了解吗?悲观锁乐观锁的实现?cas 是什么? #### 原子变量 AtomicInteger怎么实现的? i++ automicInteger,线程安全类,三个指令,重排序 Atomic 类的底层实现原理? 原子类 AtomicInteger 实现自增的大致原理流程?自增代码中为什么要有一个 do while 循环? `LongAdder` 实现原理? ### 合理设置线程数 **Amdahl‘s 定律** IO密集型优化 ### 线程间协作 线程之间的交互方式有哪些?有没有线程交互的封装类 (join) Thread的join方法了解吗? (我说相当于if(isAlive())wait(0)) 那为啥不直接用wait(0)?(不知道) #### 等待和通知:wait/notify wait 和notify sleep和wait区别 sleep和wait的区别; #### 条件变量 Condition **await() signal()** #### 倒计时协调器 CountDownLatch CountDownLatch 那个CountDownLatch你知道吗?说一下。信号量呢? 看你对多并发熟悉是吧,来,多个线程同时去访问同一个代码块,我想知道最后一个线程什么时候执行完,怎么做。答CountDownLatch。 #### 栅栏 CyclicBarrier cyclicbarrier 和countdownlatch的区别,个人理解 赛马和点火箭 #### 阻塞队列 BlockingQueue 相关知识 有哪些队列,你线程池一般用哪种队列 从可重入锁出发, 要求写出基于可重入锁的阻塞队列,怎么实现 怎么实现阻塞队列 实现一个blockqueue 如果让你自己实现阻塞队列,如何实现?**阻塞唤醒这一部分,如何实现?** #### 信号量 Semaphore #### 线程中断机制 **Thread.interrupt()** InterruptionException 中断和轮询的区别 #### 线程停止 ### 其他 JUC 说一下JUC包 Java并发工具包 JUC说说你知道的东西 你用过 Juc 包下的哪些东西? #### Future 说一下 Future future的底层实现异步原理 Future 多线程讲一下,FutureTask ##### CompletableFuture CompletableFuture你知道吗? 项目中 CompletableFuture 如何使用的 #### ConcurrentHashMap ConcurrentHashMap线程安全怎么实现的 ConcurrentHashMap分段锁原理,java8和java7实现的区别 ConcurrentHashMap 读写加锁的情况 那说说concurrenthashmap的原理 concurrenthashmap中1.7和1.8的区别 ConcurrentHashMap 用到了 synchronized 么,说说 synchronized 的底层是怎么实现的 ConcurrentHashMap ConcurrentHashMap有用过吗? ConcurrentHashMap 的底层实现 concurrenthashmap 的原理 concurrenthashmap 和 hashmap ConcurrentHashMap 用的是什么并发机制? ConcurrentHashMap 原理 ConcurrentHashMap 底层实现,扩容问题。 #### CopyOnWriteArrayList CopyOnWriteArrayList底层实现 楼主故意引线程安全的CopyOnWriteArrayList,然后把源码吹了一下。 CopyOnWrite 了解吗(CopyOnWriteArrayList ) #### AQS (AbstractQueuedSynchronizer) 还有哪些基于AQS的同步工具 JDK 可重入锁, 读写锁 , 底层 AQS,抽象队列同步器的机制 问我对多线程和JUC熟悉吗,我说了AQS、ReentrantLock、线程池、CountDownLatch、CyclicBarrier,然后问了我AQS是什么,介绍了AQS的一部分内容,和具体实现。 AQS(AbstractQueuedSynchronizer) AQS 基本介绍以及 JDK 中的应用 讲讲 AQS? AQS ### 线程特有对象 ThreadLocal threadlocal 是干嘛的? 说说threadlocal怎么实现的 threadlocalmap中key为啥要用弱引用,key被gc后value怎么办 ThreadLocal相关 楼主嘴贱,扯了一下ThreadLocal,疯狂问这个,底层实现我还可以讲一下,问一下使用背景,怎么使用?有点懵,忘了 private HashMap map = new HashMap<>(); 线程一:map.put(1,2); 线程二: map.put(1,3); 两个线程去执行一段代码 if(map.get(1) == 2) 输出... if(map.get(1) == 3) 输出.. 问线程一和线程二执行完上述完会出现什么问题? - 我回答说可能出现覆盖,跟执行顺序有关系,怎么解决,我说map用锁修饰?可以,有没有其他的,再想一想,想一想?? - 然后想了好久,没想出来,他说ThreadLocal你没听过么?我豁然开朗,于是开始拼命解释原理实现、可能导致的内存泄露问题,挽救路线完成。 怎么用ThreadLocal解决问题、原理实现,内存泄漏 ThreadLocal static能不能修饰threadLocal,为什么,这道题我当时一听到其实挺懵逼的 ThreadLocal 底层原理?什么场景使用的 ThreadLocal? ThreadLocal 的原理 ThreadLocal 的作用?一般有什么用法?(使用场景) `ThreadLocal` 使用过程中可能存在的问题(内存泄露); `ThreadLocal` 内存泄露问题是怎么导致的; thread 内存泄漏 threadlocal 底层实现 聊聊`ThreadLocal` (概念+一些应用举例+常见的内存泄漏问题); ThreadLocal 的底层需要了解一下,底层的数据结构 你用了 ThreadLocal 为什么要用这个,其他线程可以获取到这个信息吗?要怎么获取到 ### 死锁 你能手动实现一个死锁的情况吗 死锁的四个必要特性, 非共享, 持有并等待, 非抢占, 循环等待 死锁避免 死锁预防 死锁,死锁避免,预防 死锁的条件,怎么解除死锁,怎么观测死锁。 避免死锁的三个必要条件 简述哲学家进餐问题和银行家算法 死锁的必要条件 死锁,死锁条件 避免死锁的三个必要条件 ### 线程池 说说Java线程池的原理?线程池有哪些?线程池工厂有哪些线程池类型,及其线程池参数是什么? 线程池的创建形式,使用场景 线程池实现方式-销毁线程 线程池有几种创建方式 线程池各个参数介绍一下,原理是什么。你常用哪种线程池,为什么? 线程池底层实现原理 为什么要用线程池? 线程池工作原理 为什么要使用线程池 Java 并发编程,说一下理解,线程池的优缺点 线程池然后说到了无界队列,引出了内存溢出 使用线程池的优点是什么 线程池中异常抛出的路径知道吗 线程池原理、类型以及关键参数 项目中用到了线程池,用的什么线程池,怎么配置的参数? 线程池,怎么实现的,要注意什么? 几种线程池 参数含义 如何选择 线程池的特点和具体实现,线程的状态, 线程池,默认的几种队列,Java 的几个默认线程池 线程池,哪些线程池,有哪些拒绝策略 为什么要用线程池?项目中使用的线程池是使用内置的还是自己创建的? 为什么要有线程池?(作用) 项目中有哪些地方用到线程池? 线程池原理; 这个线程池工作原理是什么?(通常是问核心线程数+最大线程数+队列的意义)拒绝策略有哪些?线程之间的通信? 问线程池:如何理解线程池、参数、拒绝策略、原理?你的项目是如何使用线程池的?如果然你设计一个线程池,你会怎么做? **服务掉线了,线程池中的任务怎么办?(考察关闭线程池的几种方式)** 对线程池的了解,怎么创建线程池 线程池使用的注意事项?是不是线程越多越好? #### 分类 你说有静态方法创建线程池,他们有什么区别?或者说他们有什么隐患? 线程池哪几种?分别说一下 线程池有哪些类型 有哪些线程池的类型 Java 的线程池类型有哪些 #### 运行流程、状态 那线程池的线程具体在什么时候创建一个线程或者销毁一个线程? 一个任务进来后,线程池是怎么处理的? 线程池的状态 线程池的运行过程 怎么监控线程池的运行状态,答的用一些线程监控的工具,面试官说指代码层面上,只争对线程池,没答上 线程池运行中,突然电脑关机了,内存数据都会丢失,开机后怎么办? *我开始说了写备份到内存,其实就是持久化,但是这个不行,不可能时时刻刻写。* *然后我就突然灵光乍现想起redis里的AOF,我就说记录任务队列,开机后回滚重新再执行一次就好了。面试官指导说我这个有点对,说是消息队列的一些框架的内容,分布式队列,但我消息队列我只知道是个什么东西,其他一无所知。* 线程池中LinkedBlockingQueue满了的话,线程会怎么样 线程池处理任务的流程 在线程池中,线程满了会怎么处理?(线程池原理流程,以 execute() 方法为例) 线程池负载降下来之后,多余的线程会怎么处理? **如何打破线程池先放队列再扩容的逻辑,有什么框架实现了** 为什么需要有任务队列,为啥不来一个任务就开一个线程?(占用内存,同时线程多了上下文切换比较频繁) 描述 Java 线程池的执行 #### 创建、配置参数 线程池、自定义线程池、自定义拒绝策略有了解过吗?什么场景用? 线程池?说说怎么创建?答:7个具体参数 线程池原理,有什么参数? 如何合理地配置线程池 工作队列 创建线程的几种方式,创建线程池几个参数的含义,线程饱和策略 线程池 有哪些参数,各个参数的意义 线程池有哪些创建方式和安全性问题 线程池的底层原理和实现方法 线程池原理,拒绝策略,核心线程数 线程池,这个还是很重要的,在生产中用的挺多,四个线程池类型,其参数,参数的理解很重要,corepoolSize怎么设置,maxpoolsize怎么设置,keep-alive各种的,和美团面试官探讨过阻塞队列在生产中的设置,他说他一般设置为0,防止用户阻塞 线程池的关键参数有哪些?当没有任务的时候,核心数线程还需要保持么?核心线程数是怎么理解的? 问了java线程池的具体参数,问了最长空闲等待时间的具体情况,释放线程的过程,什么时候什么情况释放,释放时队列的情况是怎么样的。然后给了一个具体的场景分配服务器和设置线程池参数。单次任务的cpu时间是100ms,要达到一秒钟1000次任务量,服务器是4核8g,问要多少服务器,每个服务器具体的线程池参数配置是多少。 问线程池参数设置和每个参数的意义,问线程池怎么从工作队列中取任务 Java 线程池的参数以及其具体意义 线程池,过期时间的具体作用 线程池创建的方式有哪些?`ThreadPoolExecuter` 的参数有哪些? 线程池的核心参数,为什么用线程池 线程池核心参数,常见饱和策略 线程池有用过吗?有哪些核心参数?分别什么作用? 项目中是如何创建线程池的,什么不用 `Executors` 去创建线程池; 线程池有哪几种创建方式?用哪种比较好?都会有哪些参数? 线程池的参数和作用? 线程池核心参数,以及工作原理 Java 线程池的几个参数以及其具体意义 线程池相关(最大线程数和核心线程相等怎么好) 为什么不推荐使用内置线程池创建方式? ##### 拒绝策略 线程池+拒绝策略 线程池的拒绝策略有哪几种? 线程池的拒绝策略 线程池的原理,饱和策略有哪些?你项目中用到的是哪种饱和策略?为什么? 线程池的拒绝策略有些什么 线程池的拒绝策略 线程池配置无界队列之后,拒绝策略怎么搞,什么时候用到无界队列 #### ForkJoinPool 了解Java的线程池吗?里面有一个ForkJoinPool,有没有用过?说一下 ForkJoinPool和其他的线程池有什么不一样的地方吗?比如用到了哪些算法 ### Java 内存模型 **内存屏障** **happens-before 关系** 高并发 重排序,happens-before,内存屏障 monitorenter, monitorexit happends-before法则 volatile ,作用,底层, lock 前缀的指令, 多CPU的嗅探机制,多处理器下的缓存一致性协议 ### 设计题 多线程下实现一个计数器 白板编程:用栈实现一个**线程安全**、高效的队列 有ABC三个线程,怎么编程让B在C前面执行,A在B前面执行(之前看过这题,说了思路被diss太麻烦但是逻辑可行) 给了一个例子让阐述解决思路:有十个线程,更新变量的值,每次加1,同时打出,每个线程只能打印一次,当十个线程打完以后,同时打一句话任务结束。 生产者消费者模式,要求手写过代码,还是要知道的 代码题:三个线程如何实现交替打印ABC 如何线程安全的实现一个计数器 并发题目,数字 0-9,线程 A 先打印,打印到 5 之后,线程 B 接着打印。我说了用等待通知机制的思路(synchronized、ReentrantLock ),面试官说不能在外部加代码,只能在 run 里面写代码,我说用 AtomicInteger,说了下思路,要我写出代码,我口述了下代码,他还是不满意,说还是引入了外部变量,然后我说没有其他思路了,就没再问 除了刚刚的场景 还有什么场景使用过异步任务,并发任务计算结果后做聚合 么做? 场景题:高并发的情况下保证数据的一致性怎么做到 场景题:有 10 个线程分别对 i = 0 做 10 次自增操作,最后 i 的值会是多少,为什么 场景题:在生产者消费者问题中怎么保证当消费者用完产品后生产者会马上得知,不能使用 while 循环去解决 场景题:多个玩家打 Boss,打一下扣血挨个进行的过程,如何实现(多线程并发)? - 面试官:扩展一下,Java 里面做多线程有哪几种方式?(哪些技术哪些类?) - 回答了手动创建线程、使用线程池、同步锁 synchronized、Atomic 类 笔试题:两个线程从 0 交替输出 50,控制其中一个线程先开始(使用了 synchronized + CountDownLatch) - 后面提示之后就是简单通过两个线程判断奇数或偶数来输出然后原子类自增(有规则的计数场景) - 面试官:为什么使用 synchronized + notify + wait + CounDownLatch? - 面试官:这里可以用 CAS 和原子类来实现吗?不用锁同步机制这些如何协调两个线程交替输出 0 到 50? 需要主线程等待子线程执行完毕后再执行,有哪些方法可以实现 用多线程模拟猴子吃香蕉(写代码) # Vavr # Guava # JUnit ## 《JUnit 实战:第2版》 6.6(45人评价) (美)塔凯文(Petar Tahchiev Felipe Leme),(美)(Vincent Massol Gary Gregory) / 王魁 / 人民邮电出版社 / 2012-4 https://book.douban.com/subject/10561424/ ## 面试题(包含单元测试) 单元测试介绍一下,多模块依赖怎么单元测试。Mockito 有没有做过单元测试,不能连数据库, 你怎么做的单元测试。 这些项目会做单元测试吗,或者说平时的自测、代码质量保障是通过什么方式做的? - 工具类的库会写单测; - 自动化测试会由流量回放平台,QA 执行常用的用例; - 整个流量回放都是 QA 负责的吗?后端需要在代码里面做配合; # Mockito # Netty ## 《Netty 实战》 7.6(374人评价) 诺曼·毛瑞尔(Norman Maurer) / 马文·艾伦·沃尔夫泰尔(Marvin Allen Wolfthal) / 何品 / 人民邮电出版社 / 2017-5-1 https://book.douban.com/subject/27038538/ ## 《Netty 进阶之路:跟着案例学 Netty》 7.8(45人评价) 李林锋 / 电子工业出版社 / 2018-11-1 / 79.00元 https://book.douban.com/subject/30381214/ ## 面试题 Netty原理 Netty解决了rpc 、 分布式调度系统哪一些共性问题? Netty怎么使用少线程解决并发请求的问题的 网络通信熟悉吗?比如 Netty? 看你项目中用到了 Netty,简单介绍下吧。这里还有个 问题是问到 Netty 和 SpringBoot 整合的,但我一直都没理解她想问什么 粘包拆包问题,Netty 解决粘包拆包的 Decoder netty 的核心组件 netty 的 nio 和 bio Netty 的线程模型 netty作用,自己的理解,组件(我明明记了很多!没说出来,我不李姐) reactor网络模型? Netty 用到过吗?讲讲 reactor。Netty 的空轮询 bug 有了解吗? # Tomcat ## 《深入分析 Java Web 技术内幕(修订版)》 6.9(309人评价) 许令波 / 电子工业出版社 / 2014-8-1 / CNY 79.00 https://book.douban.com/subject/25953851/ ## 面试题 可以看一看Tomcat容器的过程 ,Connector和 Context容器两大部分。 完成从socket到 request和Response对象的构造 # EJB # Spring ## 《Spring 实战(第4版)》 8.1(708人评价) Craig Walls 沃尔斯 / 张卫滨 / 人民邮电出版社 / 2016-4-1 / CNY 89.00 https://book.douban.com/subject/26767354/ ## 《Spring 实战(第5版)》 主要在介绍 Spring 外接其它模块了,感觉没第4版好 7.0(126人评价) [美] 克雷格·沃斯 / 张卫滨 / 人民邮电出版社 / 2020-2 / 99.00元 https://book.douban.com/subject/34949443/ ## 《Spring 源码深度解析(第2版)》 7.2(84人评价) 郝佳 / 人民邮电出版社 / 2019-1 / 99.00 https://book.douban.com/subject/30452948/ ## 《互联网轻量级 SSM 框架解密:Spring、Spring MVC、MyBatis 源码深度剖析》 (评价人数不足) 李艳鹏 等 / 电子工业出版社 / 2019-3 / 109 https://book.douban.com/subject/30443579/ **第1篇 深入剖析 Spring 源码** **第1章 Spring 基础介绍** **1.1 Spring 的核心结构** **1.2 Spring 的领域模型** **第2章 Spring 上下文和容器** **2.1 Spring 上下文的设计** **2.2 Spring 容器 BeanFactory 的设计** **2.3 Spring 父子上下文与容器** **第3章 Spring 加载机制的设计与实现** **3.1 Spring ApplicationContext 的加载及源码实现** **3.2 Spring XML 文件标签加载解析及自定义** **3.3 Spring 注解的加载及自动注入** **第4章 Spring Bean 探秘** **4.1 Spring Bean 的定义和注册设计** **4.2 Spring Bean 的定义模型** **4.3 Spring Bean 的运行(获取、创建)实现** **4.4 Spring Bean 的依赖注⼊的实现** **4.5 Spring Bean 的初始化** **第5章 Spring 代理与 AOP** **5.1 Spring 代理的设计及 JDK、CGLIB 动态代理** **5.2 Spring AOP 的设计** **5.3 Spring AOP 的加载和执行机制** **5.3.1 Spring AOP 的加载及源码解析** **5.3.2 Spring AOP 的创建执行及源码解析** **5.4 Spring 事务管理设计及源码** **5.5 Spring 事务传播机制** **第6章 Spring 实战** **6.1 对 Spring 重复 AOP 问题的分析** **6.2 Spring Bean 循环依赖的问题** ## 《精通 Spring 4.x:企业应用开发实战》 8.4(165人评价) 陈雄华 / 林开雄 / 文建国 / 电子工业出版社 / 2017-1-1 / CNY 128.00 https://book.douban.com/subject/26952826/ ## 《Spring 揭秘》 9.2(465人评价) 王福强 / 人民邮电出版社 / 2009-8 / 99.00元 https://book.douban.com/subject/3897837/ ## 面试题 说一下对 Spring 框架的理解? spring用到哪些组件,具体场景 介绍一下 Spring,说一下 Spring 常用注解的用途。 介绍 SpringBean 创建过程、AOP 实现原理? Spring 容器加载的过程?Bean 的生命周期?BeanFactory 和 FactoryBean 的区别 Spring Bean 加载机制、生命周期;TransactionManager 项目中如何去暴露controller中的接口 看过Spring的底层源码吗,说说你知道的? 除了spring你还接触过其他框架吗,java系列的? spring 哪里运用到了反射 spring, springmvc中代理模式用在哪些地方 controller 和 service 和 dao 怎么关联起来的 Spring 问题,IOC、AOP、代理模式,JDK 和 CGLIB 区别,代理模式底层实现,对 IOC 的理解 spring的特性(我只说了ioc和aop); Spring哪些很好的特性:IOC AOP`【2次】` 讲讲对Ioc和AOP的理解 spring的两大特性- ioc aop,实现原理 aop ioc介绍一下? IOC 和 AOP 具体介绍一下 spring ioc aop 说一下对 IoC 和 AOP 的理解? IOC 和 AOP 具体介绍一下 对 Spring 的 IOC 和 AOP 讲解一下; Spring IOC 和 AOP 是怎么理解的,另外 AOP 可以用在什么场景中? spring 常见八股(aop,ioc,常见的注解等等) aop ioc 原理应用及相关注解 Spring 容器的启动过程 spring 中的拦截器和过滤器区别? JdbcTemplate执行execute方法 为什么用 Spring, SpringMVC 为什么要用spring,不用spring的话要怎么办 Spring 的特性和优势是什么 Spring 有什么优点 Spring 有哪些组件 Spring 启动流程 **Spring 事件驱动模型的事件是同步还是异步的?** **你觉得 SpringEL 表达式时通过什么去解析的?** 场景题:如果实现一个你自己的 Spring 框架需要考录那些方面,简单聊聊 **Spring 的体系结构,有什么重要模块知道吗?** Spring 的 Context(上下文) 了解吗? 因为我项目中用到了,所以被提问了 Spring 二次开发常用的扩展点,还涉及到了 Bean 的生命周期。BeanPostProcessor,在你项目中如何使用的 Spring 中你常用哪些注解?Autowired 实现原理 对 Spring、SpringMVC、SpringBoot 的了解 (我没提到 SpringBoot 的自动装配,这个是 SpringBoot 的核心来着) ### 注解 Spring 的注解 spring用过哪些注解 Spring 常用注解和作用 Spring 的常用注解 Spring 的常用注解 **`@Required` 注解的作用** 基于注解的形式,是怎么实现的, 你知道其原理吗,说一下 Spring 通过注解实现 DI 的原理 Spring 启动类的注解,介绍一下 Spring 中常用注解有哪些,它们的用途是什么? Spring 常用的注解?两种注入方式的区别? ### IOC 如何使用IOC ioc容器有什么优点 介绍一下 Spring IOC,注解和 XML 两种方式有什么区别?后置处理器,扩展点有什么用?在项目中有用到过吗? ioc 含义和原理 IOC、DI原理 **IOC 和 DI 是什么关系** IOC 配置的三种方式 IOC IoC 和 new 对象的区别? 讲讲 SpringIOC 的控制反转。 #### Bean Spring Bean 是什么 bean 扫描路径 Bean 是线程安全的吗 讲一下 Spring Bean 的生命周期和循环依赖问题 ##### 声明 声明bean的几种方式 控制一个 Bean 的创建有几种方式?比如依赖了一些属性,有这些属性才创建这个 Bean。 创建 Bean 有几种方式? ##### 注入 spring注入的几种方式; 依赖注入的几种方式 Spring怎么注入一个私有成员变量?(反射,设置可见性true) 依赖注入的三种方式 为什么推荐构造器注入方式? 场景题:在使用构造器注入方式时注入了太多的类导致 Bad Smell 怎么办 ##### 获取 通常如何获取bean ##### 自动装配 spring中的自动装配方式 除了autowire其他获取bean的注解的方法 @Autowired的实现原理 使用@autowired注入的时候,如果这个接口有多个实现,怎么指定注入哪一个的实现 autowire是按照什么规则来获取bean的? autowired 和 resource 的区别 看你项目中用到了 Spring,自动装配的过程了解吗。 resource 和 autowired 区别 @Autowired 和@Resouce 的区别? @autowired 和@resource 区别 spring 的自动装配过程 ##### Scope 作用范围 spring默认是单例还是多例,怎么实现多例 Bean的默认作用范围是什么?其他的作用范围? spring是单例还是多例,多线程并发会出现什么问题 spring默认是单例还是多例,全局变量会有什么问题 Spring的Bean默认是单例还是多例,我想改成多例的怎么办 Spring几种scope区别? Spring生命周期,几种scope区别 #### 源码 IOC 源码 怎么实现 IOC 的 ioc原理详细讲讲,源码看过么 spring中是如何进行依赖注入的,依赖注入的原理 BeanFactory 和 FactoryBean 的区别? beanFactory的理解,怎么加载bean FactoryBean的理解 怎么管理 Bean 的 ##### bean 加载 bean加载步骤; bean的加载过程 Spring的bean的加载过程,越具体越好,答了bean的生命周期,bean获取那一块的确不太熟没敢答。 ##### bean 生命周期 spring生命周期 Spring生命周期 bean的生命周期 Spring 中 Bean 的生命周期介绍一下 说一下Spring bean的生命周期?bean什么时候会被销毁呢? Spring的bean的生命周期 bean 的生命周期 Spring Bean 的生命周期。 Spring Bean 的生命周期 spring bean的实例化过程。 ——不熟悉的地方不要写上去。 IOC 的实例化过程,原理 Spring Bean 的生命周期?这部分我主要根据自己写的一个小框架回答了,因为这个小框架拦截了 `BeanPostProcessor` ,所以在 Spring 容器在启动的时候会自动检测是否有类实现该接口,在调用类的构造方法之前,会执行 `postProcessBeforeInitialization` 调用构造方法之后执行 `postProcessAfterInitialization`,主要这么回答的, 巴拉巴拉讲了快 10 分钟。 ##### 解决循环依赖 spring怎么解决循环依赖 Spring 的循环依赖怎么解决的,为什么需要加个三级缓存,二级不行么? Spring 是怎么解决循环依赖的?Spring 解决构造方法注入的循环依赖了吗?解决多例下的循环依赖了吗? Spring 如何解决循环依赖问题? 怎么解决循环依赖的情况 spring如何解决循环依赖 如果存在A依赖B,B依赖A,那么是怎么加到IOC中去的 Spring 为何不能解决非单例属性之外的循环依赖? Spring 循环依赖,Spring 为何需要三级缓存解决循环依赖,而不是二级缓存?我说了自己理解,但是看他样子这不是他想要的答案。 Spring 循环依赖了解吗,怎么解决 - 少部分情况是不支持循环依赖的,比如非单例的 bean 和`@Async`注解的 bean 无法支持循环依赖 - 在全局配置文件中设置允许循环依赖存在:`spring.main.allow-circular-references=true`。 - 在导致循环依赖的 Bean 上添加 `@Lazy` 注解,这是一种比较推荐的方式 解决循环依赖注入 ### AOP AOP的应用与底层`【2次】` 说一下 SpringAOP 的概念,实际运用场景。 AOP的应用与底层 什么是AOP,举个例子 aop 含义和原理 aop原理和应用 AoP 的具体应用 AspectJ 注解方式接触过吗,具体说说有什么特点和不足 问 Spring:怎么理解 AOP的?你在项目中是怎么使用的?Spring AOP 和 AspectJ AOP 有什么区别? #### 使用 AOP 的原生 API 有没有了解 AOP 切面有哪些使用场景? AOP 是什么?有几种通知 #### 动态代理 AOP 是什么?AOP 怎么实现的? 动态代理和静态代理的区别?动态代理的具体实现?JDK 动态代理 和 CGlib 动态代理的区别? 切面的本质是什么?(原理) 注解底层怎么实现的(动态代理) spring的aop怎么实现的 aop实现方式,jdk动态代理和cglib动态代理区别 jdk动态代理和cglib区别,哪个更快,有没有看过他们生成的字节码文件 Spring AOP实现有哪几种实现,接口代理和类代理会有什么区别? 动态代理,JDK 动态代理和 CGlib 动态代理的区别?Spring 是如何选用的?怎么配置? 代理模式(静态动态,动态的两种方式及区别,cglib缺点我说了final和首次字节码生成的效率) aop动态代理,jdk动态代理 源码 看过吗 AOP, JDK代理, Proxy, InvocationHandler AOP 动态代理有哪几种实现方式,有什么区别 AOP 动态代理 ### 事务 spring事务 Spring 事务 讲一讲spring的事务特性 Spring 如何管理事务 Spring 的事务传播行为 Spring 的几个事务传播级别 spring 事务传播机制 spring事务传播机制 spring事务传播行为,底层实现原理 spring事务传播行为、隔离级别 事务的隔离级别 事务的传播级别 项目中是如何使用事务的? Spring 事务实现原理,Spring 的 ACID 如何实现的?如果让你用 JDBC 实现事务怎么实现? spring事务的了解 事务注解失效有哪些原因(自己还经历过@Transaction失效的bug的,当时没答上来,被自己气死) 一个类里面有两个方法A和B,方法A有@Transaction,B没有,但B调用了A,外界调用B会不会触发事务? A 方法调用 B 方法,如果 B 方法开启事务 则直接用 B 方法的事务,如果是你,你怎么设计怎么做? Spring 事务了解吗,Spring 事务的注解不生效,是什么原因 #### 源码 Spring 事务的实现原理? Spring事务管理是怎么实现的? Spring 事务注解 `Transaction` 实现原理? ### 设计模式 spring中用到的设计模式 Spring 设计模式 Spring 用了哪些设计模式 Spring 中用了那些设计模式,具体用在什么地方 Spring 的单例模式使用在哪里? # Spring Security ## 面试题 SpringSecurity 相关的问题。我忘了问的啥,反正我讲了讲项目中怎么用到的 SpringSecurity 。 spring security怎么实现认证授权的 SpringSecurity的前后端分离,登录怎么做的 我:拦截登录的url,然后获取到用户名和密码,把这个用户名和密码交给manager,manager会交给具体的provider处理,provider会调用UserDetailsService的方法完成验证。 这里是我失误了,他说用户名和密码时通过getattribute 获取到的吗,我说是的。 # Shiro ## 面试题 怎么做权限控制 为什么使用shiro,你直接使用aop不也是一样的吗,shiro还有标签~各种扯 shiro的两个最重要的函数 认证和授权是怎么做的 shiro框架记住我的功能是怎么实现的? # Spring MVC ## 《看透 Spring MVC:源代码分析与实践》 7.4(98人评价) 韩路彪 / 机械工业出版社 / 2016-1-1 / CNY 69.00 https://book.douban.com/subject/26696099/ ## 《互联网轻量级 SSM 框架解密:Spring、Spring MVC、MyBatis 源码深度剖析》 (评价人数不足) 李艳鹏 等 / 电子工业出版社 / 2019-3 / 109 https://book.douban.com/subject/30443579/ **第2篇 深⼊剖析Spring MVC源码** **第7章 MVC简介** **7.1 MVC的体系结构和⼯作原理** **7.1.1 控制器** **7.1.2 视图** **7.1.3 模型** **7.2 Web MVC的体系结构和⼯作原理** **第8章 Spring Web MVC⼯作流** **8.1 组件及其接⼝** **8.1.1 DispatcherServlet** **8.1.2 处理器映射** **8.1.3 处理器适配器** **8.1.4 处理器与控制器** **8.1.5 视图解析器** **8.1.6 视图** **8.2 组件间的协调通信** **第9章 DispatcherServlet的实现** **9.1 深⼊剖析GenericServlet和HttpServlet** **9.1.1 HTTP和Servlet规范简介** **9.1.2 Servlet和GenericServlet详解** **9.1.3 HttpServlet详解** **9.2 深⼊剖析DispatcherServlet** **9.2.1 HttpServletBean详解** **9.2.2 FrameworkServlet详解** **9.2.3 DispatchServlet详解** **9.3 根共享环境的加载** **9.3.1 基于Servlet环境监听器的实现结构** **9.3.2 多级Spring环境的加载⽅式** **第10章 基于简单控制器的流程实现** **10.1 通过Bean名称URL处理器映射获取处理器执⾏链** **10.1.1 抽象处理器映射** **10.1.2 抽象URL处理器映射** **10.1.3 抽象探测URL处理器映射** **10.1.4 Bean名称URL处理器映射** **10.2 通过处理器适配器把请求转接给处理器** **10.2.1 简单控制处理适配器的设计** **10.2.2 表单控制器处理HTTP请求的流程** **10.3 对控制器类体系结构的深⼊剖析** **10.3.1 Web内容产⽣器** **10.3.2 抽象控制器类** **10.3.3 基本命令控制器** **10.3.4 抽象表单控制器** **10.3.5 简单表单控制器** **第11章 基于注解控制器的流程实现** **11.1 默认注解处理器映射的实现** **11.2 注解处理器适配器的架构设计** **11.3 深⼊剖析注解控制器的处理流程** **11.3.1 解析处理器⽅法** **11.3.2 解析处理器⽅法的参数** **11.3.3 绑定、初始化领域模型和管理领域模型** **11.3.4 调⽤处理器⽅法** **11.3.5 处理⽅法返回值和隐式模型到模型或视图的映射** **11.3.6 如何更新模型数据** **第12章 基于HTTP请求处理器实现RPC** **12.1 深⼊剖析RPC客户端的实现** **12.2 深⼊剖析RPC服务端的实现** **第13章 深⼊剖析处理器映射、处理器适配器及处理器的实现** **13.1 处理器映射的实现架构** **13.1.1 处理器映射实现类** **13.1.2 处理器映射抽象类** **13.1.3 对处理器映射类的代码剖析** **13.2 处理器适配器的实现架构** **13.3 深⼊剖析处理器** **13.3.1 简单控制器** **13.3.2 注解控制器** **13.3.3 HTTP请求处理器** **13.4 拦截器的实现架构** **第14章 视图解析和视图显⽰** **14.1 基于URL的视图解析器和视图** **14.1.1 内部资源视图解析器和内部资源视图** **14.1.2 ⽡块视图解析器和⽡块视图** **14.1.3 模板视图解析器和模板视图** **14.1.4 XSLT视图解析器和XSLT视图** **14.2 更多的视图解析器** **14.2.1 Bean名称视图解析器** **14.2.2 内容选择视图解析器** **14.2.3 资源绑定视图解析器** **14.2.4 XML视图解析器** ## 面试题(包含 JSP、Servlet) Java web过滤器的生命周期? 拦截器和过滤器的区别?使用场景? spring mvc这样做有什么好处 spring mvc用过那些注解 \ 说说springmvc一些常用注解和作用 `【2次】 不使用 Spring 框架 或者 JSP & Servlet 如何实现浏览器和服务器之间的通信 SpringMVC 有几个IOC容器?由什么决定?有点懵,特意反复跟面试官确认这个问题,在IOC概念饶了一圈又一圈,回答不好。 和struct的区别 你一般是怎么对mvc项目进行分层的 为什么有了springmvc还要在项目中使用spring? 什么是 MVC? SpringMVC 拦截器是用什么实现的? 除了@ResponseBody,controller层如何标准返回给前端所要的数据类型?你会怎么实现? ### 流程、原理 springmvc的运行机制,dispatch -》 hanldermapping-—》handler -》handlerAdapter-》执行handler-》modelandview -》 返回mv -》 视图解析器-》返回view -》 渲染响应 一个请求经过 Spring MVC 的哪些关键类之后到达 Controller 的?(Spring MVC 的工作流程) spring mvc的基本结构和程序流程 Spring MVC 底层实现原理 spring mvc的使用流程 springmvc流程 spring mvc流程 springmvc流程讲一下 SpringMVC执行流程 Spring MVC的原理和流程 dispatch-servlet的工作原理 SpringMVC的 dispatcher-servlet的请求解析过程 SpringMVC 的请求过程,客户端的查询请求到渲染页面返回给用户的流程 怎么配置,工作原理 ### Servlet 讲一讲Servlet, web.xml 配置路径到servlet的映射, init, service, destroy `Servlet` 域对象有什么了解 (忘了也没背,乱答了一通) servlet 是用来干嘛的? SpringMVC 主要是干什么事情的? ### JSP JSP 内置对象有哪些? jsp有没有用过(因为不记得jsp的东西了,我直接说了没有) jsp(汉得昨天刚问完不会,今天继续摆烂没去看) ### 跨域 什么是跨域问题?如何解决? 项目中遇到的问题?跨域。为什么跨域?解决方法? 一个 Tomcat 上发布两个项目,一个端口 80,一个 81,相互之间调用算不算跨域 # Spring Boot ## 《Spring Boot 揭秘:快速构建微服务体系》 6.8(140人评价) 王福强 / 机械工业出版社 / 2016-5 / 59.00元 https://book.douban.com/subject/26808298/ ## 《Spring Boot 实战》 6.8(475人评价) [美]克雷格·沃斯 / 丁雪丰 / 人民邮电出版社 / 2016-9 / 59.00元 https://book.douban.com/subject/26857423/ ## 面试题 springboot中bean的生命周期 Spring Boot 如何启动的(@SpringBootApplication、内置 Tomcat、starter),配置parent,约定大于配置的实现(SPI),Dubbo 的 SPI 实习项目为什么用Spring Boot?有什么好处? 对springboot理解,它主要特性是什么 Spring Boot实现定时任务有哪些方式? springboot怎么启动的?遇到过什么问题吗?是放到tomcat吗?启动的时候加载的信息是什么东西? 为什么要用springboot+mybatis SpringBoot 有什么好处,答一个好处就问是怎么实现这个好处的(这谁记这个,服) Springboot 的优势 SpringBoot 的优点是什么? 如何部署springmvc项目 以及如何部署springboot项目 springboot的插件,你使用过哪些 ### 和 Spring 比较 springboot 比 spring 好在哪里 Spring boot 相对 Spring有什么优势 spring和springboot的关系,为什么要有springboot spring 和 springboot的区别? 问 Springboot 和 Spring 区别 springboot和spring的不同 和spring相比,做了什么改变 ### 自动配置 自动配置怎么实现的; 看过开源框架源码吗,SpringBoot自动装配原理 springboot特性,自动装配怎么实现的 springboot原理,如何实现的自动装配 Springboot 有什么特点,了解 springboot 的自动装配原理么? Springboot 自动装配,SPI 原理讲一下? Spring Boot 如何实现自动加载 Spring Boot 的自动装配原理 springboot 自动配置原理 SpringBoot 的自动装配原理。 ### starter SpringBoot starter 封过吗?最关键一步是啥?(SPI) SpringBoot Starter原理 starter你知道哪些 场景题:自定义一个你自己的 starter 怎么实现(开共享屏幕实现) ### yml、配置文件 yml文件里有一些属性,怎么获取这些属性 有一个枚举类,有很多value和code,然后yml中的一个属性对应这个code的值,怎么通过code的值获取到这个对应value 我想说循环判断,但是觉得没这么简单,所以沉默了半天。。。。 然后他说枚举类里面有一个方法valueOf 啊这,是他没表达清楚还是我理解错了? springboot打包成jar之后,怎么做到不重新打包修改他的properties配置文件 SpringBoot 配置文件加载优先级是怎样的?(比如 yaml 配置文件、启动参数、从配置中心拉取的配置、Linux 启动带的参数) ### 注解 SpringBoot怎么自定义注解 你用过SpringBoot的哪些注解 - @component,@service,@controller,@controlleradvice,@Repository - @Autowired,@Inject,@Resource,@Qualifier,一般@Resource单独使用,@Qualifier会和@Autowired一起用 - @dependsOn - @Configuration,@bean, @ComponentScan, - @Aspect,@PointCut, - @Scope,@PostConstruct,@PreDestory 讲一下 SpringBoot 的几个常用注解和他们的含义? springboot 常用注解 **@SpringBootApplication 这个注解的解释?** ### 全局异常 全局异常捕获怎么做的 ### 跨域 SpringBoot如何解决跨域,具体怎么配置 ### 设计模式 springboot使用那些设计模式(不知道) Springboot框架设计模式 以及功能实现 # Spring Cloud ## 《Spring 微服务实战》 8.1(173人评价) [美]约翰·卡内尔(John Carnell) / 陈文辉 / 人民邮电出版社 / 2018-6-1 / 79.00 https://book.douban.com/subject/30233791/ ## 《Spring Cloud 微服务实战》 7.6(271人评价) 翟永超 / 电子工业出版社 / 2017-5 / 89 https://book.douban.com/subject/27025912/ ## 《Spring Cloud Alibaba 微服务原理与实战》 7.3(33人评价) 谭锋(Mic) / 电子工业出版社 / 2020-4 / 106元 https://book.douban.com/subject/35041576/ 第1章 微服务的发展史 第2章 微服务解决方案之 Spring Cloud 第3章 Spring Cloud 的核心之 Spring Boot 3.3 Spring Boot 自动装配的原理 3.4 手写实现一个 Starter 第4章 微服务架构下的服务治理 4.1 如何理解 Apache Dubbo 4.4 快速上手 ZooKeeper 4.5 Apache Dubbo 集成 ZooKeeper 实现服务注册的步骤 4.7 Apache Dubbo 的高级应用 4.8 Apache Dubbo 核心源码分析 第5章 服务注册与发现 5.1 什么是 Alibaba Nacos 5.2 Nacos 的基本使用 5.3 Nacos 的高可用部署 5.4 Dubbo 使用 Nacos 实现注册中心 5.5 Spring Cloud Alibaba Nacos Discovery 5.6 Nacos 实现原理分析 5.7 深入解读 Nacos 源码 第6章 Nacos 实现统一配置管理 6.1 Nacos 配置中心简介 6.2 Nacos 集成 Spring Boot 实现统一配置管理 6.3 Spring Cloud Alibaba Nacos Config 6.4 Nacos Config 实现原理解析 6.5 Spring Cloud 如何实现配置的加载 6.6 Nacos Config 核心源码解析 第7章 基于 Sentinel 的微服务限流及熔断 7.1 服务限流的作用及实现 7.2 服务熔断与降级 7.3 分布式服务限流框架 Sentinel 7.4 Sentinel 的基本应用 7.5 Spring Cloud 集成 Sentinel 实践 7.6 Sentinel 集成 Nacos 实现动态流控规则 7.7 Sentinel Dashboard 集成 Nacos 实现规则同步 7.8 Dubbo 集成 Sentinel 实现限流 7.9 Sentinel 热点限流 7.10 Sentinel 的工作原理 7.11 Spring Cloud Sentinel 工作原理分析 7.12 Sentinel 核心源码分析 第8章 分布式事务 8.1 分布式事务问题的理论模型 8.2 分布式事务问题的常见解决方案 8.3 分布式事务框架 Seata 8.4 Seata 的安装 8.5 AT 模式 Dubbo 集成 Seata 8.6 Spring Cloud Alibaba Seata 8.7 Seata AT 模式的实现原理 第9章 RocketMQ 分布式消息通信 9.1 什么是 RocketMQ 9.2 Spring Cloud Alibaba RocketMQ 9.3 RocketMQ 集群管理 9.4 如何实现顺序消息 9.5 如何实现事务消息 9.6 高性能设计 9.7 高可用设计 第10章 微服务网关之 Spring Cloud Gateway 10.1 API 网关的作用 10.1.1 统一认证鉴权 10.1.2 灰度发布 10.2 网关的本质及技术选型 10.3 Spring Cloud Gateway 网关实战 10.4 Spring Cloud Gateway 原理分析 10.5 Route Predicate Factories 10.6 Gateway Filter Factories 10.7 自定义过滤器 10.8 Spring Cloud Gateway 集成 Nacos 实现请求负载 10.9 Spring Cloud Gateway 集成 Sentinel 网关限流 ## 面试题 springcloud用过哪些组件 SpringCloud 项目里用到哪些组件? Spring Cloud了解过吗? SpringCloud的具体组件 核心组件有哪些以及对应的功能 有没有自己搭建过微服务 谈谈你对微服务的理解 springcloud 中 A 服务要调用 B 服务,同时需要将 token 传入 B 服务中,请问使用什么方式传递? 你用过 SpringCloud 吗?你用过哪些 RPC 然后记得上来就一个问题 SpringCloud 与 Dubbo 的区别 ### 注册中心 springcloud 的注册服务使用的什么?除了这个还有其他的了解吗? 多个服务端上下线怎么感知 ### 链路追踪 怎么做的分布式链路追踪?原理是啥? ### 负载均衡 springcloud组件、用途,负载均衡的几种算法 负载均衡算法有哪些?自适应负载均衡怎么做的?有什么问题?怎么优化的? 负载均衡策略 ### 熔断、限流、降级 降级策略和降级框架 如何做降级的?如何做限流? 熔断和降级的区别,具体使用场景有哪些? spring cloud用过哪些组件 讲讲熔断机制 你刚才提到了服务端保护机制,如何实现的?这里我答了限制连接数以及接口限流,基于责任链模式。之后问了用到的令牌桶以外的常用限流算法。 限流算法 限流是怎么实现的,对什么限流? 介绍服务降级和熔断 服务限流和降级有什么区别 服务降级原理 服务限流原理(算法) 怎么实现令牌桶 令牌桶中令牌用对象还是计数器,各有什么优缺点(生命周期) 令牌生产和消费策略 令牌生产和消费在一个桶和两个桶怎么控制 ### 配置中心 配置中心用过吗 配置中心怎么用的(没做,架构图上画了,说了GitHub) ### Spring Cloud Netflix #### Eureka eureka原理 让你设计eureka,你怎么设计 eureka搭过集群吗 eureka 2.0已经停止更新了,替换? Consul、Nacos、Etcd Eureka的服务注册发现原理,服务剔除原理(顺便说了Eureka集群) #### Hystrix cloud相关的组件用过哪些,hystrix熔断原理是什么,除了线程池还有什么。熔断有个半开状态,有什么用 降级处理hystrix了解过么 #### Ribbon Spring Cloud 有哪些组件?负载均衡的组件?(Ribbon, 一开始忘了,答成 Gateway 了)默认的负载均衡策略? ### Spring Cloud Alibaba #### Nacos 关于Nacos与ZK的区别,为什么选择Nacos nacos 和 zookeeper 区别,优势分别是什么 知道 CAP 吗 nacos 和 zookeeper 分别用的是 CP 还是 AP,为什么 nacos 与 zookeeper 的区别 #### Sentinel Sentinel 熔断机制 #### Seata 两张表保存在不同的数据库里面,怎么保证事务(SpringCloud 的分布式事务,只大概介绍了一下 Seata 的使用,没有涉及原理); 分布式事务 seta ????? 你的项目用到了哪些技术?这些技术你吃透了没有?举个例子,你的项目经历使用了 Seata 来做分布式事务,那 Seata 相关的问题你要提前准备一下吧,比如说 Seata 支持哪些配置中心、Seata 的事务分组是怎么做的、Seata 支持哪些事务模式,怎么选择? ### Gateway Spring Gateway路由的应用详情 我个人会引导他问我 SpringCloud,我会给他讲下 GateWay 做什么的,原理是什么,怎么跟 Nacos(注册中心)和 Fegin 配合的,这块就是个人经历结合项目谈。 GateWay 和 Nginx 的相同点和不同点在那里? GateWay 处理后请求在微服务中的进一步处理是什么? GateWay 需要注册到 Nacos 中吗?如何注册的? # Zookeeper ## 《从 Paxos 到 ZooKeeper:分布式一致性原理与实践》 7.7(511人评价) 倪超 / 电子工业出版社 / 2015-2-1 / 75.00元 https://book.douban.com/subject/26292004/ **第1章 分布式架构** **1.1 集中式到分布式** **1.2 从 ACID 到 CAP/BASE** **1.2.1 ACID** **1.2.2 分布式事务** **1.2.3 CAP 和 BASE 理论** **第2章 一致性协议** **2.1 2PC 与 3PC** **2.1.1 2PC** **2.1.2 3PC** **2.2 Paxos 算法** Paxos **第3章 Paxos 的工程实践** **3.1 Chubby(跳过)** **3.2 Hypertable(跳过)** **第4章 ZooKeeper 与 Paxos** **4.1 初识 ZooKeeper** **4.2 ZooKeeper 的 ZAB 协议** **4.2.4 ZAB 与 Paxos 算法的联系与区别** **第5章 使用 ZooKeeper** **第6章 ZooKeeper 的典型应用场景** **6.1 典型应用场景及实现** **6.1.1 数据发布/订阅** **6.1.2 负载均衡** **6.1.3 命名服务** **6.1.4 分布式协调/通知** **6.1.5 集群管理** **6.1.6 Master 选举** **6.1.7 分布式锁** **6.1.8 分布式队列** **6.2 ZooKeeper 在大型分布式系统中的应用** **6.2.1 Hadoop(跳过)** **6.2.2 HBase(跳过)** **6.2.3 Kafka** **6.3 ZooKeeper 在阿里巴巴的实践与应用** **6.3.2 案例二 RPC 服务框架:Dubbo** **6.3.3 案例三 基于 MySQL Binlog 的增量订阅和消费组件:Canal** **第7章 ZooKeeper 技术内幕** **7.1 系统模型** **7.1.1 数据模型** - 树 - 事务 ID **7.1.2 节点特性** - 持久节点 - 持久顺序节点 - 临时节点 - 临时顺序节点 **7.1.3 版本——保证分布式数据原子性操作** **7.1.4 Watcher——数据变更的通知** **7.1.5 ACL——保障数据的安全** **7.2 序列化与协议** **7.2.1 Jute 介绍** **7.3 客户端** **7.4 会话** **7.5 服务器启动** **7.5.1 单机版服务器启动** **7.5.2 集群版服务器启动** **7.6 Leader 选举** **7.7 各服务器角色介绍** **7.7.1 Leader** **7.7.2 Follower** **7.7.3 Observer** **7.7.4 集群间消息通信** **7.8 请求处理** **7.9 数据与存储** **第8章 ZooKeeper 运维** ## 面试题 任务幂等性改造?ZK 怎么部署的,几台机器,挂了一台怎么办? ZK在项目中的应用 ZK 明明有了有序的指令队列,为什么还要用 zxid 来辅助排序? nacos 和 zookeeper 区别,优势分别是什么 nacos 与 zookeeper 的区别 说下自己对 Zookeeper 的理解已经在项目中是如何应用的,自己扯 ZAB,已经 ZK 在 Dubbo 做注册中心,在 Kafka 中做集群管理,还有分布式锁实现,集群选举 Raft 和 Paxos 区别已经具体的流程 Zookeeper了解吗?(。不了解) ZK在项目中的应用 ### CAP 知道 CAP 吗 nacos 和 zookeeper 分别用的是 CP 还是 AP,为什么 #### 一致性 你提到了 Zookeeper 的一致性,它是如何保证的? Zookeeper 是强一致性吗? #### 可用性 Zookeeper 作为注册中心,假如崩溃了怎么办?这里开始连环问了 假如我同一时间有大量服务发布,你提到了 Zookeeper 只有主节点负责写, 怎么解决?假如主节点崩溃了,新选举出的主节点仍然没办法面对我的大流量,也崩溃了,如何解决? zk挂了怎么办 zookeeper原理大概讲下。以及你用到的实际案例,比如 HA(高可用) #### 分区容错性 Zookeeper 如何应对网络分区的,脑裂问题了解吗,如何解决? ### 注册中心、服务发现、心跳检测 为什么选用 Zookeeper 作为注册中心,注册中心作用是什么 zookeeper 是怎么服务发现的 zookeeper 心跳检测 ### 分布式锁 Zookeeper锁是如何实现的?Curator zookeeper分布式锁 ### ZAB 协议、选举过程 ZAB 协议,ZK 选举过程,ZXID 的结构是怎么样的?ZXID 有什么用? ZK 的选举过程是怎么样的?如果选举过程中网络故障怎么办?ZAB 和 RAFT 的最大区别是什么? ZAB 协议,选举的过程,这里问的很详细 #### Paxos basic paxos 和 multi paxos 的使用? 为什么拜占庭将军无解? ### 节点类型 节点类型有几种? # Dubbo ## 《深入理解 Apache Dubbo 与实战》 6.6(71人评价) 诣极 / 林琳 / 电子工业出版社 / 2019-7 / 79 https://book.douban.com/subject/34455777/ ## 面试题 和eureka有什么区别 为什么要用dubbo,不用行不行? Dubbo有了解过吗?讲一下(讲了Dubbo的10层架构,服务注册和服务发现的流程,consumer和provider之间通信) Dubbo 的连接(这里问的贼细,全靠推理推出来的。。) Dubbo 的负载均衡 dubbo了解吗?(。。不了解) Dubbo 配置优先顺序 dubbo 本地缓存地址:`dubbo` 底层源码 跨域请求的一些知识点 了解过 Dubbo 的历史版本更替吗 简单说一下 Dubbo,Dubbo 的作用 会使用 Dubbo 的其他使用方式吗 能不能简单说一下其他作用 Dubbo 使用的注册中心和推荐的协议 ### 源码、原理 怎么学习Dubbo的?看过源码吗?(主要看视频和博客,没看过源码) 原理,怎么用 Dubbo 源码读过吗? dubbo、netty介绍原理 ### 设计模式 Dubbo用了哪些设计模式(没看过源码,就讲了下代理模式) ### rpc 调用过程、协议 根据项目中用的 dubbo,问用的什么协议 dubbo 通信过程:`rpc`调用过程 rpc 调用过程, (为什么看dubbo源码) 讲一下 Dubbo 服务引用底层?开始一直以为是动态代理调用 invoker 模型,结果说不够底层原理问 RPC 协议。 讲一下 Dubbo RPC 协议调用过程,使用哪些协议? Dubbo 的网络层是怎么实现的?怎么实现自定义协议? 了解哪些开源的rpc框架?dubbo的调用过程简单说一下? 分布式系统、rpc调用过程、了解dubbo吗? Rpc是一个什么协议 ### 服务发现 Dubbo 的服务发现是怎么做的? Dubbo 服务暴露源码 + Dubbo 服务注册 ### SPI 讲 Dubbo SPI 的源码? # Thrift ## 《Learning Apache Thrift》 **第1章:介绍 Apache Thrift** **第2章:安装和启动 Apache Thrift** **第3章:启动你的第一个 Apache Thrift 服务和客户端** **第4章:理解 Apache Thrift 如何运行** **Apache Thrift 的架构** Transport Protocol Processor Server and client **Apache Thrift 类型系统** **IDL 语法** **第5章 在不同语言中生成并运行代码** **第6章 在 Apache Thrift 中处理异常** **第7章 一个客户-服务端应用的例子** **第8章 Apache Thrift 的高级用法** ## 面试题(包含 RPC) 为什么用 Thrift?Thrift 如何解决高并发? 服务调用超时可能由什么造成 后端服务出现了大量超时,怎么排查?(支支吾吾答了一通,答得不好。) ### RPC 用到过哪些rpc框架? rpc原理 RPC原理 如何设计一个 RPC 框架?需要考虑哪些点? RPC框架,同步异步,响应时间,这些都被问到过,还让设计过 如果你自己设计一个rpc框架,怎么设计? # MyBatis ## 《MyBatis 技术内幕》 7.8(104人评价) 徐郡明 / 电子工业出版社 / 2017-7 / 79 https://book.douban.com/subject/27087564/ ## 《互联网轻量级 SSM 框架解密:Spring、Spring MVC、MyBatis 源码深度剖析》 (评价人数不足) 李艳鹏 等 / 电子工业出版社 / 2019-3 / 109 https://book.douban.com/subject/30443579/ **第3篇 深⼊剖析MyBatis源码** **第15章 MyBatis介绍15.1 MyBatis的历史** **15.2 MyBatis⼦项⽬** **15.3 MyBatis的⾃⾝定位** **15.3.1 JPA持久化框架** **15.3.2 MyBatis的功能** **15.3.3 MyBatis与JPA的异同** **15.4 MyBatis的架构** **15.4.1 模块** **15.4.2 MyBatis的项⽬包** **第16章 构建阶段** **16.1 关键类** **16.2 关键时序** **16.3 构建的⼊⼝:SqlSessionFactoryBuilder 和 SqlSessionFactory** **16.4 配置(Configuration)和配置构造器(XmlConfigBuilder)** **16.4.1 XmlConfigBuilder的初始化** **16.4.2 完整的mybatis-3-config.dtd** **16.4.3 解析配置⽂件构建Configuration配置** **16.5 SQL简介** **16.6 SQL映射的构建** **16.6.1 通过XML定义的SQL Mapper** **16.6.2 Configuration类中与SQL Mapping相关的类** **16.6.3 XmlMapperBuilder是如何⼯作的** **16.6.4 映射注解器定义的SQL Mapper** **16.6.5 ⼩结** **第17章 执⾏阶段** **17.1 关键类** **17.2 关键接⼝及默认实现初始化** **17.2.1 SqlSession及其关联类的构建过程17.2.2 StatementHandler语句处理器** **17.3 DQL语句是如何执⾏的** **17.3.1 查询接⼝** **17.3.2 关键时序** **17.3.3 程序执⾏查询的⼊⼝:DefaultSqlSession#selectList(statement)** **17.3.4 ⽣成执⾏语句:getMappedStatement()** **17.3.5 执⾏器查询:Executor#query()** **17.3.6 JDBC执⾏语句:SimpleStatementHandler#query()** **17.3.7 结果集处理:DefaultResultSetHandler#handlerResultSets()** **17.4 DML语句是如何执⾏的** **17.4.1 操作接⼝** **17.4.2 关键时序** **17.4.3 程序执⾏更新的⼊⼝:DefaultSqlSession#update()** **17.4.4 执⾏器执⾏⽅法:Executor#update()** **17.4.5 SQL语句执⾏:SimpleStatementHandler#update()** **17.4.6 结果集主键逻辑:Jdbc3KeyGenerator#processAfter()** **17.5 ⼩结** **第18章 专题特性解析** **18.1 动态SQL⽀持** **18.1.1 XmlScriptBuilder解析配置** **18.1.2 NodeHandler构建SqlNode树** **18.1.3 SqlNode处理SQL语句** **18.2 MyBatis的缓存⽀持** **18.2.1 本地缓存18.2.2 ⼆级缓存** **18.3 结果集⽀持:Object、List、Map和Cursor** **18.4 ⾃定义扩展点及接⼝** **第19章 作为中间件如何承上启下** **19.1 MyBatis与底层的JDBC** **19.1.1 java.sql.DataSource** **19.1.2 java.sql.Connection** **19.1.3 java.sql.Statement** **19.1.4 java.sql.Resultset** **19.2 MyBatis的主流集成⽅式** **19.2.1 mybatis-spring简介** **19.2.2 Spring对JDBC的⽀持** **19.2.3 mybatis-spring与Spring** ## 面试题(包含 JDBC) jpa和mybatis区别 mybatis是停留在使用层面还是有更深的理解 为什么要使用mybatis,而不是jdbc 和hibernate相比,为什么选择mybatis 为什么要用 mybatis 不直接用 sql mybatis 好在哪里 动态 SQL 有哪些,都有什么用途 为什么要使用连接池 Mybatis优点 逆向工程 ### 使用 配置 mybatis用过什么标签 mybatis 中如何传递多个参数 mybatis的xml有什么标签 Spring 和 Mybatis 整合的步骤 Mybatis 中 resultmap 的继承 接口层和数据库交互的方式有哪些 mybatis一对多,多对多怎么做 #### 分页 mybatis 分页是怎么做的? mybatis 中如何做分页 ### 原理、源码 简述 MyBatis 的层次结构 sqlSessionFactory 与 SqlSession 介绍一下 Excutor 的概念 Mybatis 执行流程 mybatis String 如何映射到 varchar mybatis如何进行类型转换 如何自动包装对象 mybatis 比如实体类中是 string,数据库中是 integer 会怎么样 Mybatis是如何做到动态sql解析 怎么让mapper 和xml对应 Mybatis是如何实现xml文件与实体类的映射 MyBatis 的逻辑分页和物理分页了解吗? #### 缓存 mybatis 一二级缓存 mybatis 的一二级缓存 ### \# 和 $、sql 注入 mybatis防止sql注入怎么实现 mybatis #和$的区别。`【3次】` mybatis 中的#{}和${}有什么区别?默认使用哪个?为什么这么使用? MyBatis 中 `#{}` 和 `${}` 的区别? Mybatis #和$ $ 和 # 的区别 $ 和 # 的区别 \#{} 和 ${}的区别? ${字符串替换符}和#{占位符 预编译处理}的区别 mybatis # 和 $ 区别 怎么防止依赖注入 SQL注入,mybaits怎么防止SQL注入? ### JDBC mybatis和jdbc怎么防止sql注入 原始jdbc使用流程 statement和preparedstatement的区别 # MyBatis Plus ## 面试题 MybatisPlus 的底层原理 mybatisplus 分页插件实现原理,或者说 mybatisplus 的底层原理 # Oracle # MySQL ## 《SQL 必知必会(第4版)》 8.5(1869人评价) 福达 (Ben Forta) / 钟鸣 / 刘晓霞 / 人民邮电出版社 / 2013-5-1 / 29.00元 https://book.douban.com/subject/24250054/ ## 《SQL 基础教程(第2版)》 9.1(810人评价) [日] MICK / 孙 淼 / 罗 勇 / 人民邮电出版社 / 2017-6 / 79.00元 https://book.douban.com/subject/27055712/ ## 《SQL 进阶教程》 9.1(299人评价) [ 日] MICK / 吴炎昌 / 人民邮电出版社 / 2017-11 / 79.00元 https://book.douban.com/subject/27194738/ ## 《MySQL 技术内幕:InnoDB 存储引擎(第2版)》 8.4(698人评价) 姜承尧 / 机械工业出版社 / 2013-5 / 79.00元 https://book.douban.com/subject/24708143/ ## 《MySQL 是怎么运行的:从根儿上理解 MySQL》 9.3(563人评价) 小孩子4919 / 人民邮电出版社 / 2020-11-1 / 99.00元 https://book.douban.com/subject/35231266/ 第0章 万里长征第一步(非常重要)-如何愉快的阅读本小册 第1章 装作自己是个小白-重新认识MySQL 第2章 MySQL的调控按钮-启动选项和系统变量 第3章 乱码的前世今生-字符集和比较规则 3.2 MySQL 中支持的字符集和排序规则 第4章 从一条记录说起-InnoDB 记录结构 4.2 InnoDB 页简介 4.3 InnoDB 行格式 第5章 盛放记录的大盒子-InnoDB 数据页结构 5.1 不同类型的页简介 5.2 数据页结构的快速浏览 5.3 记录在页中的存储 5.4 Page Directory(页目录) 5.5 Page Header(页面头部) 5.6 File Header(文件头部) 5.7 File Trailer 第6章 快速查询的秘籍-B+树索引 第7章 好东西也得先学会怎么用-B+树索引的使用 7.1 索引的代价 7.2 B+ 树索引适用的条件 7.3 回表的代价 7.4 如何挑选索引 第8章 数据的家-MySQL的数据目录 第9章 存放页面的大池子-InnoDB的表空间 9.2 独立表空间结构 9.3 系统表空间结构 第10章 条条大路通罗马-单表访问方法 第11章 两个表的亲密接触-连接的原理 第12章 谁最便宜就选谁-MySQL基于成本的优化 第13章 兵马未动,粮草先行-InnoDB 统计数据是如何收集的 13.2 基于磁盘的永久性统计数据 13.3 基于内存的非永久性统计数据 第14章 不好看就要多整容-MySQL基于规则的优化(内含关于子查询优化二三事儿) 14.1 条件从简 14.2 外连接消除 14.3 子查询优化 第15章 查询优化的百科全书-Explain详解(上) 第16章 查询优化的百科全书-Explain详解(下) 第17章 神兵利器-optimizer trace 表的功效 第18章 调节磁盘和 CPU 的矛盾-InnoDB 的 Buffer Pool 第19章 从猫爷被杀说起-事务简介 第20章 说过的话就一定要办到-redo 日志(上) 第21章 说过的话就一定要办到-redo 日志(下) 第22章 后悔了怎么办-undo 日志(上) 第23章 后悔了怎么办-undo 日志(下) 第24章 一条记录的多幅面孔-事务的隔离级别与 MVCC 第25章 工作面试老大难 - 锁 ## 《高性能 MySQL(第3版)》 (1082人评价) 施瓦茨 (Baron Schwartz) / 扎伊采夫 (Peter Zaitsev) / 特卡琴科 (Vadim Tkachenko) / 宁海元 / 周振兴 / 彭立勋 / 电子工业出版社 / 2013-5-1 https://book.douban.com/subject/23008813/ ## 《高可用 MySQL:构建健壮的数据中心》 7.7(107人评价) Charles Bell Mats Kindahl Lars Thalmann / 宁青 / 唐李洋 诸云萍 / 电子工业出版社 / 2011-10 / 98.00元 https://book.douban.com/subject/6847455/ ## 面试题 数据库的事务, innodb 的索引实现原理 MySQL 日志系统(写入顺序、buffer 了解吗)、默认事务级别、处理了哪些事务问题 MySQL 有几个日志文件(redo log、undo log、bin log),慢 SQL 如何获取,执行计划具体字段 MySQL 聚簇索引?行和索引的数据结构?主键采用什么字段(递增主键,它的好处?) 如何防止sql注入 数据库:索引、Join、Left Join、Right Join、Union 区别、数据库三范式,设计表时是如何考虑的 数据库:索引、存储引擎对比、查询优化 数据库原理,数据库中间件,索引优化 数据库,事务,隔离级别,存储引擎 MySQL 索引,存储引擎,查询优化 数据库索引,存储引擎 存储引擎,B+ Tree 的结构,最左匹配原则 MySQL索引的机制,我说的是B+,不知道是不是他的意思 为什么要用索引,好处是?坏处是? 简单介绍一下MySQL的事务。这里我又好难了,又不知道回答的方向是什么。于是就说了事务的隔离,MySQL的引擎 数据库回滚的原理,这个我还真不怎么会 MySQL 的分页怎么做的 数据库自增 ID 和 UUID 对比 数据库中主键、外键的定义,它们的用途是什么?数据库 SQL 语句如何调优? 数据导入,如何批量导入,这么大的数据量能一次性导入吗,那你是怎么导入的。 其他问题,比如集群,索引,性能优化。 怎么处理数据库多版本接入 ### SQL 语法 做的最复杂的sql是什么?项目里面是什么怎么用的? 有没有用过数据库 , 怎么去连 。 哪几个步骤? 说一下。 数据库连接池了解吗, 有什么好处?有没有写过复杂sql 游标了解吗 数据库用吗? 平时写sql吗? 写过复杂的sql吗? 多少数据量 数据库的连表查询和嵌套查询,分页查询 数据库增删查改语句重复应该考虑什么 mysql的一些语句,这些肯定需要掌握的 delete 和 truncate 的区别(不会) #### 写 SQL sql找出每个班级成绩排名第二的学生 Mysql:怎么找出表中重复的数字 Mysql表A中a字段有重复值,在重复数据中删除掉id小的,只留id最大的值,该怎么写执行句? 查询创建时间最大的那一条用户数据怎么查询?查询创建时间最大的 2 条用户数据怎么查询?top 和 limit 的区别? 查询数据库 表 a 中的所有内容并按 b 列 升序排列的 SQL 语句? 行转列 列转行 sql 题:一个学生成绩表,里面有学号,科目,成绩,统计出总成绩前十个的学号。 #### 分组查询 分组查询的关键字 #### 函数 数据库中用过那些聚合函数 聚合函数有哪些? ##### count() `count(*)` 里面 * 的理解 #### 子查询 数据库的子查询,嵌套子查询 #### 连接 JOIN 左右外连接;数据库 全/左外/又外/内 链接简单说明; inner join,left join,right join区别 `【3次】` 数据库表A有m条数据,B有n条数据, left join一下, 有多少条数据。 内连接和外连接的区别 几种联表查询 偶尔有几个比较水的,还会问左联右联 #### 外键 MySQL外键删除策略? #### 视图 视图的好处。 什么是视图 MySQL 的视图了解吗? #### 存储过程 存储过程是什么,有什么特点? ### 类型 int 存到数据库里面一般你都用什么类型 对金额的计算用什么类型,数据库中用什么类型存储 数据库中你的小说时怎么存储的 #### 字符集和比较规则 varchar(35)的含义;中文在varchar中占几个字符;编码有哪些 问了一个笔试时候做错的的选择题:MySQL(GBK编码下)有个字符串"coder李四110"它们的char_length()和length()函数的值? ### 数据目录 ### 用户和权限 ### 逻辑架构 mysql 的缓存 #### SQL 执行流程 SQL 语句执行过程以及使用什么命令查看执行过程的状态 mydql 刷盘原理 #### 缓冲池 mysql的buffer pool设计,如何解决热点缓存? ### 存储引擎 引擎有几种,区别是什么 数据库存储引擎知道哪些,有什么区别 你用过哪些数据库?MySQL 数据库的存储引擎了解过哪些?这些存储引擎的特点是什么? 引擎,区别是什么 mysql 有几种数据库引擎。(面试官一开始说成了 mybatis 的存储引擎。) sql两种引擎区别 mysql数据库默认存储引擎,有什么优点 你了解的myql存储引擎有哪些?再说说常用的存储引擎?mysql的存储引擎了解的有哪些`【3次】` 数据库的引擎 数据库两种引擎,索引结构 讲一下存储引擎 数据库的存储引擎应用场景,索引结构 mysql存储引擎 MySQL 默认是什么存储引擎,为啥用这个? MySQL 的默认数据库引擎 MySQL 支持哪些存储引擎?默认使用哪个? MyISAM 和 InnoDB 比较; innodb和MyISAM的区别 数据库引擎MyISAM和InnoDB的区别 Innodb和MyISAM区别 稀疏索引和密集索引 MyISAM 和 InnoDB 的区别是什么? MyISAM 和 InnoDB 的区别 MyISAM 和 InnoDB 的区别? InnoDB 和 MyISAM 的有啥区别?和 MEMORY 呢? #### MyISAM 为什么MyISAM查询性能好? #### InnoDB 存储引擎,InnoDB InnoDB优点 InnoDB 引擎的特点,支不支持事务 ##### 数据存储结构:行、页、区、段、表空间 mysql数据存到哪的? MySQL 索引?B+树?主键索引每一个节点的大小?一个 page 多大?如果一条数据大于 16KB 怎么存?text 最多存多少数据?行溢出问题?数据存储格式有哪些?溢出页如何管理? 介绍一些 mysql 底层结构? ##### 删除原理 **为什么 MySQL 表删除了一堆数据,但是文件大小不变?MySQL 对于删除的数据,仅仅只是删除占位,被删除的数据仅缺失了之前数据页的占位。物理删除会造成数据空洞。** 如果使用delete删除,是真的把这个记录删除了吗? *我没答出来。这个考的其实是mysql三种事务日志类型,redo log(重做日志)和binlog(归档日志),回滚日志(undo log)。其中undo log保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读。所以使用undo log可以回滚。* MySql 怎么删除数据。 ### 索引 mysql索引 索引(为何使用 b+树而不是使用别的数据结构? 索引下推?倒排索引?) MySQL 的索引了解吗? MySQL 索引了解吗(那时候不会就直接说不会了) 问了mysql的引擎,索引,有哪些索引,然后问了主键索引和非主键索引的区别,讲了聚集索引,然后问了索引访问的过程,问了用聚集索引和不用的磁盘io访问次数的不同。 数据库索引有了解吗,你这个项目用了索引吗,用在了哪张表,为什么要用索引,索引快在哪里,事务隔离级别,传播方式这些介绍下。 索引了解吗? 哪些字段要加索引?加了索引为什么就快了? 底层数据结构说一下,红黑树了解吗? 为什么不用红黑树? B+树说一下?B+树在增加数据的时候, 会碰到什么样的问题? MySQL索引的理解(主键索引和二级索引) MySQL索引 讲一下Mysql索引(说了innodb myisam区别) 如果我想要强制走某个索引,能实现吗? MySQL 中如何强制走指定的索引 索引的知识 索引是什么概念有什么作用? mysql 索引 mysql 索引介绍 - 聚集索引和非聚索引的区别(InnoDb 和 MyISAM 对比) - 索引选择(优化器怎么选择索引) - 索引失效 - 索引下推 数据库索引原理? 索引有什么作用 索引特性 mysql索引的底层原理?`【4次】` mysql的索引结构,有什么优点 数据库有哪些索引? 讲一下索引 索引实现?什么时候用索引? Innodb的索引实现 索引为什么快,底层是怎么实现的 索引那块怎么优化的,索引底层数据结构? SQL 索引,存储引擎对比,B+、B-、红黑树对比,Hash 索引和联合索引 索引,有哪些索引,怎么用 说说索引和主键的用途。 聚集索引,覆盖索引 数据库索引,讨论了一下 B+ 树能存多少数据 mysql 索引你知道吗? MySQL 索引了解吗 MySQL 索引是什么 问数据库:MySQL 索引的理解、底层数据结构。如何看 SQL 语句是否使用了索引? 索引对数据库的作用是什么? mysql 索引 你理解的索引是什么? #### 分类 mysql索引(这里说了b+树,感觉面试官问的是唯一索引聚集索引那些,理解错意思x2) 数据库有哪几种索引 有什么类型索引?各有什么特点? MySQL有哪些索引 MySQL索引类型 MySQL索引类型, 底层的数据结构 索引的分类 MySQL 索引的分类 索引有哪些种类 MySQL 有哪几种索引? 有几种索引 索引有哪些种类 **全文索引** ##### 聚簇和非聚簇 聚簇索性和非聚簇索性 聚簇索引和非聚簇索引;怎么分配;为什么这样分配; 聚集索引和非聚集索引 什么是聚簇索引,什么是非聚簇索引 聚簇索引和非聚簇索引 innodb中主键索引和非主键索引都是聚簇索引吗 聚集索引和非聚集索引的区别 聚簇索引和非聚簇索引; ###### 回表 为什么会出现回表查询,怎么避免 `【2 次】` ###### 主键和二级索引 默认主键索引:如果没有设置主键索引, `innodb` 会默认添加一个隐藏列作为主键索引 有1亿数据,走主键索引,mysql底层 IO次数是多少? 自增id为什么会用完,用完了怎么办? *因为删除操作不会改变自增id,自增id会一直增长,如果频繁删除和新增,那很快就会到达限制* *用完了的话就只能更新,不能新增。这个我真不知道,我心里嘀咕是不是类似uid那样新造个类型的字符串id出来,但我没说。* 主键索引和二级索引的区别 讲讲二级索引 (我当时就蒙蔽了,我索引都准备那么长时间的聚簇索引,其他的东西,上来问我一个 没听过的,我只能扯我知道的索引是什么,索引的结构是用B和B+做的等等等,但是面试官不满意我扯开话题) MySQL 主键索引和普通索引的区别是什么?谁的性能更好一些?如果是在 10W 级的数据下,谁的性能更好些? ##### 联合索引 mysql 联合索引 从联合索引出发,要求画出联合索引B+树索引图。 什么情况下使用复合索引更好? 联合索引,举例子什么时候不走 介绍一下联合索引吧? 以(a,b,c)为例,在什么情况下,单查 b 也能够命中联合索引? 项目中是怎么使用索引的?联合索引了解吗? 什么是联合索引,为什么要建联合索引? ###### 最左匹配 复合索引最左匹配,以及从源码上讲为什么要最左匹配 table 有a b c d四列,(b c d) 联合索引,selct c,d from table where c = 1会使用这个联合索引吗?不会,最左匹配 现在有一个联合索引(A,B) 我有一个sql语句是 select xxx from xxx where A=xxx 会用到索引吗 select xxx from xxx whereB=xxx 会用到索引吗 为什么会是最左匹配原则 组合索引怎么使用?最左匹配的原理 解释一下最左前缀法则 mysql最左匹配原则 最左前缀匹配原则; 解释一下最左前缀法则 最左匹配原则是什么 ##### 唯一索引 mysql的主键,唯一索引区别,怎么建索引; 主键索引和唯一索引的区别 主键索引和唯一索引可以存储 null 值吗 #### 数据结构 索引数据结构 索引的底层数据结构 数据库索引结构 索引底层的数据结构 MySQL索引结构?介绍一下B树和B+树?MyISAM和InnoDB索引的区别? **MyISAM索引底层是什么结构** 索引底层常见的数据结构,MyISAM 引擎和 InnoDB 引擎用的是哪种; 深问一点可能会问下底层数据结构,索引跟数据是不是放在一起的之类的 索引储存的数据结构? MySQL 索引的底层存储结构; 索引底层的数据结构 ##### B+ 树 MySQL 中的索引为什么用 B+ Tree 而不用 B Tree 索引为什么要用B+树,B+树和B-树的区别是什么 InnoDB 为啥索引的数据结果要用 B+树? 为什么 InnoDB 使用 B+树作为索引的数据结构 mysql都有哪些索引类型;为什么b+树,红黑树、b树为什么不好; B+树叶子节点链表一定是放的是key和值吗 B+树和红黑树 为什么选择b+树 mysql索引怎么实现的,btree索引有什么特点 B-树和B+树区别,数据库索引原理 mysql的b+树和b树的区别 b+树,三层b+树可以存多少数据? 介绍下MySQL索引?讲到了b+树,详细说说? MySQL 底层存储数据结构是什么?(B+树) mysql用过吗?讲一下b+树 B树和B+树区别 为什么选择B+树不选择B树 Mysql索引优缺点, B+树 数据库B+树 那你讲讲B+树存储什么数据 (叶子结点存储数据库中的数据项) InnoDB索引用的什么数据结构?B+树是怎么存储数据的? Mysql 索引,数据结构为什么使用 B+ 树 简述索引作用,简述为什用 B+树 索引的数据结构是什么?什么是 B+树? B 树与 B+树应用场景 不同生产环境需要不同的树(数据库索引 B+树对比其他树) ##### hash 为啥不用 Hash 索引?Hash 索引查找的时候不是更快吗? hash和B+树的区别?分别应用于什么场景?哪个比较好? MySQL里主要有哪些索引结构?哈希索引和B+树索引比较? hash 索引和 B+ 树索引有什么区别 #### 创建和设计原则 mysql怎么创建索引 创建索引的原则(区分度,是否是查询时使用,插入性能和读取性能权衡,减少回表) 给字段加索引最好怎么加? 什么时候要建立数据库索引 索引的设置有什么要求呢? 设置索引有什么注意的地方 什么场景下适合建索引? 规则字段和不规则字段,哪个适合建索引? 提高数据库检索速度的方法? 使用索引能带来什么好处,你项目中是怎么使用的; 建立索引的出发点,该怎么建? a,b,c,d,四个字段,查询语句的 where 条件 a=b,orderby c。(mysql 翻页越翻越慢怎么优化,满足 a=b 的字段很多,怎么高效的排序,分页查询) mysql 设计索引的注意事项? Mysql 索引设置注意点?索引类型?索引失效场景? #### 索引查询优化 ##### 索引失效 有哪些导致索引失效的场景? 哪些让索引失效的情况 手写一条 SQL 语句然后判断索引是否生效 in()一定会使用到索引吗 索引失效的场景 索引失效的点 索引失效 mysql索引失效场景 什么时候不走索引 什么情况下会导致索引失效? 为什么使用模糊匹配会失效,你能给我解释一下底层原理吗? like语句什么时候能用什么时候不能用? *第一个就是%,那么会和通配符在一起导致%失效。还有就是text很长时也不行。当然这个我没答上来。* 如果数据库有100条值,数据库引擎会使用索引搜索吗? *因为innodb数据库引擎有个机制是,会对sql语句优化后会判断是用索引查找还是全盘扫描比较快,如果数据库殷勤认为全盘扫描更快就会使用全盘扫描,但100算不算少我就不知道了。反正我是这么说的* WHERE id NOT IN (?, ?, ?) 会走索引吗? - 还是要看成本; - 举例:id 字段只包含 3 个值,1、2、3,3 只有几行,而 1、2 各有 100w 行,如果查询条件是 NOT IN (1, 2) 会走索引,如果查询条件是 NOT IN (3) 不会走索引。 什么场景下索引会失效? - 场景有很多,但是如果我是一个引擎,我关注的不是什么情况会失效,而是走什么路径所花费的随机 I/O 和顺序 I/O 最少,如果走某个索引花费的随机 I/O 比从聚簇索引(顺序)查(成本)都还要高,那还不如直接去全表扫描; - 典型例子:捞超过全表 30% 的数据; mysql优化,什么时候不会用到索引 1. select *,可能会导致不走索引 2. where后面有函数运算,导致不走索引 3. 索引不适用于隐式转换的情况,比如你的SELECT * FROM T WHERE Y = 5 在Y上面有一个索引,但是Y列是VARCHAR2的,那么Oracle会将上面的5进行一个隐式的转换,SELECT * FROM T WHERE TO_NUMBER(Y) = 5,这个时候也是有可能用不到索引的。 4. like查询使用通配符开头不会用到索引 索引何时失效; mysql索引底层实现,索引失效的情况 加了索引一定会走索引吗?索引失效的情况有哪些? 索引什么时候会失效 造成索引失效的常见原因你知道那些,项目中遇到过索引失效问题吗; 给你几个具体的组合索引排列问你会不会失效 索引失效的场景 NOT IN 一定走索引吗 索引失效的场景 ##### 覆盖索引 mysql覆盖索引,聚簇索引 为什么会有覆盖索引 为什么覆盖索引存在最左匹配原则 覆盖索引是什么意思 索引覆盖了解吗 覆盖索引是什么意思 覆盖索引是怎么样的 ##### 索引下推 了解索引下推吗?什么情况下会下推到引擎去处理? - 通过某个索引没办法按顺序地覆盖所有的查询条件,但是仍然可以利用索引内存在的字段(尽管不是有序的,需要扫描)去进一步过滤; - 举例:idx(a,b,c,d),查询条件为 a=? and b=? and d=?,发生下推减少回表数量; select c,d from table where b = 1 and d = 2会走索引吗?我:行。面试官:这个可以行,也可以不行…分情况,MySQL中有一些优化,比如ICP,就会将索引下推(我没懂…) ### 数据库表设计 你会怎么设计数据库表结构 项目中的数据库是怎么设计的?索引是怎么设计的?为什么这么设计?有没有什么缺陷?怎么优化查询的?假设有一个班级,班级里有老师、学生,有语数外等几门课程刚考完试出了成绩,你该如何设计这张表? 讨论了一下数据库表设计 一个实时通讯软件怎么设计他的数据库表 数据库设计通常分为哪几步 角色和用户多对多关系表设计 如何设计数据库表 #### 范式 3NF是什么 说说关系型和非关系型数据库的区别?三范式是啥? 数据库的范式?【三大范式】 看你数据库用的不错,数据库三范式+BCNF范式? 说一下数据库范式 数据库,三大范式 三大范式 MySQL 三大范式说一个你了解的 数据库的三大范式是什么? #### 高并发、大数据量下 那如果数据量很大,并且我要保证实时数据和历史数据有交集有历史沉淀,你会怎么设计? 用户量增多了怎么办,服务器压力太大了你会用什么方式,数据库呢,遇到高并发呢,你会改变表结构吗。 场景题:MySQL 对于千万级的数据库或者大表怎么处理 ### 调优 sql 优化(选择一个适合自己业务的 sql 场景 描述清楚自己如何通过 explain 命令来分析和优化的?) 项目中用到了哪些 SQL 优化手段 项目开发过程中进行过 SQL 优化吗? sql 如何进行一个优化呢 mysql导入大量数据怎么优化 有做过数据库优化吗 mysql优化,有做过sql从几秒优化到几十毫秒的吗 mysql优化,like查询的时候,数据量很大,如果like查询以%开头,不会走索引,怎么优化。多表关联查询,怎么优化 数据库是如何调优的?1.数据表加合适的索引 2.针对执行计划进行优化 3.根据慢sql进行优化 4.加缓存 5.参数调优 MySQL 优化?EXPLAIN?深分页?using filesort?MVCC? 如何优化数据库操作 数据库优化了解哪些; 一条sql怎么优化? 数据库select查询优化问题。 大数据量的优化 数据量很大的情况下,数据库要怎么加快查询呢 数据量大了,数据库怎么处理(扯了分库分表,RedisCluster做缓存) 如何做的MySQL优化? 数据库优化,最左原则啊,水平分表,垂直分表 数据库层面的优化(索引、SQL、读写分离、分库分表) 数据库优化技巧 你在日常工作中对 SQL 进行了什么优化?巴拉巴拉,深度分页的优化、索引的优化、建立合适的联合索引,利用覆盖索引或者索引下推这块牵扯的太多了,就稍微答了一些,这块还可以扩展,例如:针对索引区分度建立联合索引,尽量保持区分度高的在最左。联合查询的时候,关联字段都需要加上索引。有排序场景,尽量不查询 text,Blog 字段,合理利用内存排序,避免 MySQL 的文件排序 这里扩展一下就是,MySQL 有一个叫做 sort_buffer,对这里优化才是关键。 数据库表优化的点 平时怎么调优 MySQL?做了哪些调优? 对 SQL 优化有什么了解 (笔试题也有。没了解,就提了一下索引,讲了讲我知道的,面试官说对新手来说 SQL 优化的一些内容对个人做能力提升是最显著的) 讲述下 SQL 优化方式 对 MySQL 进行过调优吗? 调试过数据库参数吗 已经用了 MQ 了为什么还会出现 mysql 连接数过高,怎么优化 mysql 的性能瓶颈,怎么分库分表? 写查询语句的时候应该从哪些方面考虑来注意性能。 如何优化一个 SQL #### 性能分析工具 怎么分析 SQL 语句性能 慢 SQL 你是怎么调优的?怎么看 SQL 有没有使用索引? ##### 慢 SQL MySQL的慢sql优化一般如何来做?除此外还有什么方法优化? SQL慢查询的常见优化步骤是什么? 聊了一篇之前写过的 MySQL 的一篇博客,讲讲 MySQL 慢 SQL 优化思路?解决流程,应该从哪些方面考虑? 慢SQL优化 MySQL查询比较慢的话,通过什么方式来优化 (情况①:偶尔很慢,可能是数据库在查询脏页,或者没拿到锁 情况②:一直很慢,可能是没有索引,或者有索引但没走索引,或者表数据量太大需要分库分表) 数据库查询慢是什么原因。 数据库查询慢怎么办 如何开启慢查询日志 如果有一条 SQL 语句执行的很慢,怎么进行优化? 如何找慢 SQL? (MySQL 慢查询日志是用来记录 MySQL 在执行命令中,响应时间超过预设阈值的 SQL 命令) 如果有一条 SQL 语句执行的很慢,如何进行优化; 怎么解决 MySQL 慢查询?(加索引、分库分表、数据分页) mysql 如何查询慢 sql?为什么会有慢 sql?数据库的优化手段? 如何进行数据库性能的分析,如何排查慢 sql ##### EXPLAIN 执行计划 sql优化,说说explain需要关注哪些参数? 一条sql语句如何执行的?怎么看sql的执行计划? 如果你发现查询很慢怎么办?(答:explain) 如何分析 SQL 的性能?(可以通过 `EXPLAIN` 命令分析对应的 `SELECT` 命令) SQL explain 会输出哪些信息? #### 深分页 有一个表有几个亿的数据,写sql分页查询怎么优化 有一个查询接口,会查一张表,数据量有几百万,前端调接口的时候每次都要等很久,如何做优化?(深分页?) #### 读写分离 怎么实现读写分离 MySQL 读写分离方案 #### 分库分表 数据库水平切分,垂直切分的设计思路和切分顺序 MySQL 分库分表 水平分库分表场景 分库分表,数据库事务,分布式事务 实现过分库分表吗,有哪些分库分表的组件 MySQL分库分表的方案? (我介绍了我们使用的三种方式,hash法、range法以及当前正在使用的hash+range法) 讲一下数据库分库分表的实现; 项目如何分表? ### 事务 讲一下事务 数据库事务,ACID,mvcc 事务的特性 ACID , 数据库的死锁发生的情景 什么是事务?事务隔离级别和MVCC? (我对于这里比较了解,在征得面试官同意后,展开说了InnoDB底层对于各个隔离级别以及MVCC的实现,包括各种锁、ReadView机制和版本链机制) 数据库事务的特点,隔离性对应哪几种隔离级别 说一下mysql的事务隔离级别,然后讲了四个隔离级别,以及对应产生的问题(脏读不可重复读幻读),以及InnoDB对应的2 3级别的实现,MVVC的实现,两个隔离级别产生Review的时间点和次数的区别,还有Next-Key Lock ,行锁加间隙锁。 mysql怎么支持事务的? MySQL如何支持事务 mysql事务是怎么实现的 MySQL 如何实现事务的?主要 undolog 日志是怎么工作的, 拿事务 id 回答 数据库的事务是什么?事务的四大原则(ACID)是什么?四个隔离级别是什么? 事务(ACID 隔离级别 幻读如何出现的 又是如何解决?) mysql 事务 MySQL 事务的实现 事务了解吗 事务特性、隔离级别 问数据库:如何理解事务?表级锁和行级锁的理解,幻读、脏读问题的解决。 #### ACID 事务的特性 说说事务特性(ACID)? 事务 ACID 特性 数据库事务4大特性 mysql的ACID`【2次】` 事务acid mysql如何保证acid MySQL 的 ACID 是什么 MySQL 的事务特性; **MySQL 如何保证事务的一致性?** #### 并发问题 事务并发的问题解决方法 脏读幻读不可重复读,怎么解决 不可重复读是什么 MySQL如何解决脏读、不可重复读、幻读 如何解决脏读?(读已提交)MySQL如何判断事务有没有提交?事务A中对id=1进行修改,不提交;事务B中读取id=1的数据,如何判断这个数据有没有被提交? 如果对记录修改,是否会读到修改的值? 数据库的隔离性问题,acid,脏读,不可重复读、幻读。 并发事务带来了哪些问题? 并发事务带来的问题有哪些 mysql 并发相关问题 脏读和幻读发生在哪些级别? ##### 幻读 数据库如何解决幻读 幻读举个例子 innodb如何解决幻读 如何解决幻读 怎么防止幻读 MySQL 的默认隔离级别能否解决幻读的问题 #### 隔离级别 MySQL的事务隔离级别,分别解决什么问题。 数据库的隔离级别 mysql事务隔离级别 mysql中几个隔离等级,分别为了解决什么问题?(脏读、幻读、不可重复度) 数据库隔离级别 InnoDB事务隔离级别有哪些? mysql 事务的隔离级别?`【2次】` 事务隔离级别 MySQL隔离级别、存在的问题 mysql的隔离级别 隔离级别 数据库的隔离级别 数据库的隔离状态 MySQL 事务隔离级别 事务隔离级别有哪些 MySQL 事务隔离级别? 数据库事务隔离级别 读已提交,可重复读是什么意思 mysql事务的隔离级别 mysql的事务、隔离级别 mysql事务隔离级别 事务并发产生的问题 mysql的默认事务级别,一共有哪些事务级别 事务的隔离级别以及解决了哪些问题 MySQL 的隔离级别是基于锁实现的吗? MySQL 有哪几种事务隔离级别?分别代表什么使用场景(会导致什么问题)? 简单描述一下数据库的四种隔离级别以及对应的三种相关问题 MySQL 的事务隔离级别; MySQL 默认的隔离级别,底层是怎么实现的; 数据库的隔离级别? 数据库隔离级别,可重复读解决幻读怎么做的?数据库本身的 mvcc 各个隔离级别,能防止什么? ##### 可重复读(默认) 可重复读是怎么实现的呢? 怎么实现的可重复读 (主要从锁机制+MVCC的角度讲,详细说明了当前要访问的版本的事务id和ReadView中活跃事务id列表的关系,如果大于最大值怎么样,小于最小值怎么样,介于最大值最小值之间要怎么办) InnoDB可重复读是否存在幻读问题 如何实现可重复读 数据库的隔离级别,怎么实现可重复读 我回答了MVCC,然后开始讲MVCC的原理,我快讲完的时候他突然说你是在回答我的问题吗?我问的是怎么实现可重复读,两者有关系吗?我后面还解释了一下 InnoDB 的默认隔离级别,可重复读,解决了什么问题,没有解决什么问题? 问一下 MySQL 默认隔离级别,可以解决幻读吗?(考察 当前读 快照读 间隙锁 等) 事务隔离级别,MySQL默认级别,(可重复读),为啥使用可重复读?(可重复读+MVCC达到了序列化要求) mysql默认隔离级别 数据库默认隔离级别 InnoDB 默认隔离级别,RR 能防止幻读吗,RR 默认使用间隙锁吗 #### 多版本并发控制 MVCC mysql 的锁和 MVCC 我就说了表锁、间隙锁和行锁;mvcc 说了 undolog 和每个行的隐藏字段用于维护版本号,实现隔离性和多版本控制 mysql的mvcc以及rr是否能解决幻读? MVCC`【2次】` 从mysql事务出发,要求画出RC和RR隔离级别下的MVCC。 MVCC 乐观锁/悲观锁 MVCC 是什么,核心问题是什么,为什么会有 MVCC MVCC MVCC 讲一下 细说一下 MVCC; MVCC 解决什么问题 mvcc 机制(实现原理以及 rr 和 rc 隔离级别下实现的区别?) MVCC + 锁 保证隔离性 MVCC 解决的问题 ##### 快照读和当前读 当前读与快照度是什么?用缓存和数据库举例子,当前读相当于直接读库,快照度相当于直接读缓存。RC 级别在执行 SQL 前后生成快照。RR 级别在开启事务生成全局快照后续的查询操作只读快照部分,这里还可以扩展,唯一索引其实是当前读。 造成幻读的原因了解吗,快照读、当前读。 #### 锁 锁(给一个 sql 问这条 sql 在不同隔离级别下是如何加锁的?) 高并发的时候,请求量非常大,同时更新数据库的一条数据,这时候应该怎么处理?用锁和不用锁,怎么设计? mysql锁机制 mysql有哪些锁? mysql锁是锁的什么(索引) 数据库的锁 MySQL锁机制 数据库锁 sql 怎么手动加锁 简述下数据库的各种锁 你之前 mysql 怎么加锁的? mysql 锁? ##### 读写锁 读锁和写锁实现的底层原理 ##### 按粒度划分:行锁、表锁、页锁 mysql锁,行锁,表锁 ,什么时候发生锁,怎么锁,原理 MySQL 的锁,表级锁是哪一层的锁?行锁是哪一层的锁? select for update是表锁还是行锁? `【2次】` 数据库锁按照锁的粒度分为哪几种?用过哪种?为什么会出现死锁? 给例子判断什么时候触发行级锁和表级锁 表级锁和行级锁的实现原理 ###### 间隙锁、临键锁 还了解 MySQL 的哪些锁?间隙锁、临检锁..... 间隙锁和nextkey锁 myql间歇锁的实现原理 MySQL 间隙锁需要补充一下 ##### 悲观锁、乐观锁 说下乐观锁,悲观锁(select for update),并写出sql实现? 数据库的悲观锁、乐观锁、间隙锁 mysql里面的乐观锁和悲观锁熟悉吗? mysql是怎么实现乐观锁和悲观锁的? 那你了解哪些在SQL语句中可以用的悲观锁? 把乐观锁加在数据库上面,怎么实现 乐观锁和悲观锁,数据库是怎么实现的,数据库语句? Java和mysql的锁介绍,乐观锁和悲观锁 ##### 显式锁、隐式锁 隐式锁是什么了解吗? ##### 死锁 遇到的死锁问题?唯一键冲突导致的死锁问题,MySQL 为什么要这么设计? mysql有一条数据死锁了,怎么排查问题,mysql表死锁,怎么排查 mysql的锁 mysql的死锁 ### 日志 用笔画 MySQL 一条记录的入库过程,写日志过程,日志两阶段提交? MySQL 的 binlog、redo log、undo log 写入过程?刷盘机制和参数设置。MVCC 机制了解吗? 说一说 MySQL 中三大日志 redolog undolog binlog 的区别和作用 说说binlog和redolog,redolog两阶段提交的过程? redolog undolog binlog(会问分别是用来做什么的 有什么共同点 区别?) 从mysql update语句出发, 要求说出binlog 与 redolog一致性问题。 MySQL 日志都有什么,分别有什么作用 MySQL 的日志讲一下 mysql 三大日志 #### redo log redo log和undo log区别 redo log和undo log是如何生成的(这块细节忘了,只说了先写内存,然后再刷盘) #### undo log undo log如何保证原子性 事务回滚的实现 #### bin log 双向数据同步会涉及 BinLog 监听,可能造成消息来回弹,你怎么处理的?幂等,数据标记。 binlog 与主从复制 binlog 作用是什么 #### relay log ### 主从复制、部署 主从机器延时应该从哪台读取 同城异机房如何容灾部署 mysql主从架构: 回答了主从复制机制和主从架构的作用 提问mysql双主架构在不分表的情况下保证数据一致性。回答:pc两阶段提交 如何避免mysql双主架构出现会循环的数据更新?回答:使用一个标志位,来标记请求的来源,如果是来自用户则执行后广播至其他主节点,如果来自其他主节点则执行。面试官对于回答没有做任何评价 mysql怎么实现主从复制? 【binlog】 主从复制是怎么实现同步的,答传bin log文件,后续数据更新怎么同步,答mysql不了解,但我知道redis主从复制后续是通过一个复制缓存区来记录新增的命令,通过发送这些命令实现同步 主从复制,为什么要用主从复制?一个数据库同时读和写不行吗?磁盘角度分析?(硬盘、寻址、随机读写...) MySQL 主从复制是什么意思 MySQL 主从的延迟怎么解决 主从复制流程 mysql 主从数据库设计 ### 备份恢复 数据库了解多少,索引说一下,存储引擎比较,热备份、冷备份 MySQL 如何恢复到误删前的状态? ### 数据库对比 关系型数据库和非关系型数据库 MySQL、Redis、MongoDB、CouchDB 的区别 MySQL 和 Redis 对比,我把能知道的都说了,还是没答到点上 MySQL和Redis区别,原理 使用过哪些数据库,了解数据库的哪些方面? 数据库对比,MongoDB、PostgreSQL 和 MySQL 对比。之前公司用过,让我对比,我还真不知道优缺点,只知道关系型数据库和非关系型数据库的关系。后续还是需要看看 #### 缓存一致性 redis和mysql一致性解决方案(答到一半面试官打断了,说写两道题,感觉挺不尊重人的) 缓存和数据一致性,怎么处理。流式计算 oracle--mysql数据库迁移,不停止业务的前提下怎么迁移(双写??缓存一致性??) mysql和redis怎么保证数据一致 # MyCat ## 面试题 每天抓拍的数据量比较大,有做过分库分表吗 用的shardingjdbc 还有mycat,中小公司一般用shardingjdbc, # Canal # Redis ## 《Redis 开发与运维》 9.0(471人评价) 付磊 / 张益军 / 机械工业出版社 / 2017-3-1 / 89.00 https://book.douban.com/subject/26971561/ 第1章 初识 Redis 1.2 Redis 特性 1.3 Redis 使用场景 第2章 API 的理解和使用 2.2 字符串 2.3 哈希 2.4 列表 2.5 集合 2.6 有序集合 2.7 键管理 第3章 小功能大用处 3.1 慢查询分析 3.2 Redis Shell 3.3 Pipeline 3.4 事务与 Lua 3.5 Bitmaps 3.6 HyperLogLog 3.7 发布订阅 3.8 GEO 第4章 客户端 4.1 客户端通信协议 4.2 Java 客户端 Jedis 第5章 持久化 5.1 RDB 5.2 AOF 5.3 问题定位与优化 第6章 复制 6.1 配置 6.2 拓扑 6.3 原理 6.4 开发与运维中的问题 第7章 Redis 的噩梦:阻塞 第8章 理解内存 第9章 哨兵 9.2 安装和部署 9.5 实现原理 第10章 集群 10.1 数据分布 10.2 搭建集群 10.3 节点通信 10.3.2 Gossip 消息 10.5 请求路由 10.6 故障转移 10.7 集群运维 第11章 缓存设计 11.2 缓存更新策略 11.3 缓存粒度控制 11.4 穿透优化 11.5 无底洞优化 11.6 雪崩优化 11.7 热点 key 重建优化 第12章 开发运维的“陷阱” 12.4 处理 bigkey 12.5 寻找热点 key 第13章 Redis 监控运维平台 CacheCloud 第14章 Redis 配置统计字典 ## 《Redis 设计与实现》 (1553人评价) 黄健宏 / 机械工业出版社 / 2014-6 / 79.00 https://book.douban.com/subject/25900156/ ## 《Redis 深度历险:核心原理与应用实践》 8.0(359人评价) 钱文品 / 电子工业出版社 / 2019-1 / 79 https://book.douban.com/subject/30386804/ ## 《Redis 实战》 7.9(509人评价) Josiah L. Carlson / 黄健宏 / 人民邮电出版社 / 2015-10 / 69.00元 https://book.douban.com/subject/26612779/ ## 《Redis 入门指南(第2版)》 7.6(163人评价) 李子骅 / 人民邮电出版社 / 2015-5-1 / CNY 49.00 https://book.douban.com/subject/26419240/ ## 面试题 Redis 的几种数据结构,底层分别是怎么做的?用 Redis 缓存什么数据?怎么更新数据?怎么淘汰数据? Redis 的 AOF 和 RDB 区别,能配合使用吗?热 key 问题和大 key 问题怎么解决? Redis 使用场景、缓存什么数据?怎么保证数据一致性? 还了解 Redis 哪些知识、Redis 的优势、CP 还是 AP?CAP 理论。 Redis 大 key、热 key 的处理,主从复制 对Redis了解多吗?你觉得Redis最核心的功能是什么? 来,谈一谈你的redis理解,为什么使用prostuff,不用传统的序列化? 分布式锁(项目), redlock,持久化机制,主从复制过程, redis知道的都说出来 讲一讲Redis的特性,redis为什么快,redis你用了哪些数据结构,粉丝列表可以用redis存储吗,redis集群会配置吗,redis宕机后数据会消失吗,redis可以持久化吗,怎么持久化。 你们怎么保证Redis缓存和数据库的数据一致性?缓存雪崩?击穿?穿透? 问Redis,问了持久化,RDB和AOF,然后问了AOF的具体过程,问了AOF文件重写是怎么做的,问了Redis为什么单线程,Redis底层的数据结构,SDS ### 命令 redis查看内存占用命令 Redis中的命令 ### 数据类型 Redis 的 String 底层结构,hash 底层结构,rehash 过程是怎么样的? 用过Redis的哪些数据类型? Redis常用数据结构?`【3次】` Redis 的数据结构有哪些?使用场景?(尬住了,只知道 sorted set 的场景) redis数据结构(5个基础数据结构和3个高级数据结构) 项目 中用到了redis的什么结构 Redis有哪些数据结构 项目中用到了Redis,介绍一下Redis数据类型 Redis 的数据结构 redis的数据结构 最常问 hash是什么, sorted set怎么实现的 Redis 有哪些数据类型,每一种都有什么实际应用 redis 数据类型,具体的用法 Redis 数据类型有哪些?String 的应用场景有哪些?String 还是 Hash 存储对象数据更好呢? #### 基本数据结构 redis的基础数据类型,以及他们如何实现 Redis中的基本数据类型 Redis 基本的数据结构 Redis 中常见的数据结构,应用场景; Redis 的基本数据类型 Redis 常用数据结构 Redis 常用数据结构 ##### hash Redis如何解决key冲突? Redis 中的 hashmap 是怎么实现的(?? ? ) ##### set set和zset区别 ##### zset redis的zset为啥不用b+树/红黑树 zset底层排序是如何实现的 zset排序是通过什么顺序进行排序的 #### 其他数据结构(GEO、Stream、bitmap、bitfield、HyperLogLog) Redis除了常用的数据结构外,还熟悉其他的数据结构吗? ##### GEO Redis存储地图的数据结构,即GEO(地理位置)数据类型,有什么特点呢?有没有用过 ##### Stream 为什么会设计 Redis Stream Redis Stream 消费者崩溃带来的会不会消息丢失问题 Redis Steam 坏消息问题,死信问题 ##### bitmap 关于 Bitmap,设计一个签到系统以及位图压缩的方法 bitmap 了解吗 常用场景以及明显的优势 #### 源码和底层实现 Redis ssd,Redis 内存空间优化的点,embstr 和 row、intset、ziplist。 redis 跳跃表 层数的设置 redis几种数据结构以及分别的实现方式,ziplist是咋实现的? redis 早期版本的 5 种数据结构?说说 String 的底层数据结构?Hash 呢?说一说渐进式 hash 扩容的过程? zset底层数据结构? redis的跳表的实现 redis的底层数据结构知道吗(只知道用到了跳表,然后说了下跳表) Redis 源码读过吗?直接说源码 redis的对象类型, 每种对象类型对应的底层的数据结构,参考redis设计与实现。 string, list, hash, set, sortedset. 每种对象都至少有2中数据结构, SDS, linkedlist, ziplist, intset, ziplist, skiplist Redis 数据结构,底层实现、ZSET 底层实现 sds 存在的意义 底层数据结构有哪些?跳表实现原理?为何不用红黑树? Redis 有了解过吗。zset 的底层数据结构(压缩列表+跳表),zrange 的时间复杂度 redis 数据结构 sds 优化 redis 的 ZSET 底层 ### 为什么快 Redis 为什么快? redis 速度快是因为什么原因 redis快的特点? redis为什么快? Redis为什么能承载高并发 问Redis为什么快,我答内存数据库、单线程、IO多路复用的epoll。 #### 单线程 单线程的redis为什么这么快 为什么 Redis 是单线程的 Redis6.0 之前为什么一致不用多线程 Redis 单线程模型 Redis 为什么是单线程的 redis 单线程多线程 #### 多线程 IO redis的多reactor模型是怎么样的?核心线程是多线程吗? Redis中的IO模型 redis 效率高,6.0 用多线程进行访问和之前比有什么区别?能展开说说吗? 介绍一下 Redis 的线程模型; #### IO 多路复用 说说redis架构(单线程,io多路复用) Redis 的 IO 多路复用模型 ### 持久化 Redis 的持久化 redis 持久化方式? redis持久化方式 redis怎么实现持久化?持久化能保证不丢失数据吗? 项目有用到redis,说说redis两种持久化的方式和特点 redis持久化机制 Redis 持久化实现方式,优缺点 Redis 的两种持久化,各自的优缺点 redis是基于内存的,那么它有持久化吗,aof rdb aof和rdb的优缺点,你在项目中使用的哪一个 Redis 的持久化机制是什么 Redis 持久化策略 Redis 的持久化? 简述 RDB、AOF redis 的持久化方式; Redis 的持久化机制是如何实现的? 说一下 Redis 的持久化机制; redis 持久化机制的应用场景有什么呢? redis 持久化 Redis 持久化操作 #### RDB RDB 方式会造成数据的缺失吗? #### AOF AOF 是写前日志还是写后日志 持久化机制 AOF Redis 持久化了解吗,讲一下 AOF ### 事务 Redis支持事务吗?与mysql的事务有什么不同 redis事务, 分布式事务, 2PC, 本地消息表等, 3PC Redis线程安全吗,事务支持一致性吗 Redis 事务相关命令 Redis 事务中出现错误的处理 为什么 Redis 不支持回滚 ### 管道 redis 批处理? 数据量很大的数据放到 redis 中,需要做什么处理比较好 ### 发布订阅 Redis中消息模型中消费线程数和生产线程数框架中设置的为多少 ### 部署、高可用 redis怎么部署的? 这里我答了springboot怎么引入redis,感觉应该答单机和多机部署的。 redis哨兵集群相关问题(怎么主从同步,怎么哨兵选举, 怎么master选举) Redis 主从复制、哨兵、cluster 集群;热 key 使用redis来实现单点登录,那么当单个redis节点内存不够的时候,怎么办? 集群化,redis-Cluster redis,主从,哨兵,集群,分布式锁。 redis的 性能,可用性,主从复制+哨兵, redis缓存访问有网络上的消耗。 **Redis 的容灾,单机和分布式环境分别说一下** **说一下Redis Cloud的设计与实现** 因为项目的原因,问我redis是怎么保证高可用的,主从和集群怎么加在一起 Redis 主从、哨兵、集群工作原理?三种部署方式的区别? Redis 数据同步和数据迁移如何做? 高可用方面你知道吗? #### 主从复制(replica) redis 主从同步 Redis主从同步 说一说 Redis 的主从复制吧? Redis 主从复制? Redis 主从架构,如何保持数据一致性 redis的主从复制是怎么实现的 **redis 的全量同步和增量同步;** #### 哨兵(sentinel) redis 哨兵集群 Redis哨兵机制 描述一下Redis中的哨兵机制,主从切换具体是如何实现的? 说一下 redis 的哨兵模式,master 的选举机制; redis sentinel 哨兵 主从一直切换 ,是什么缘故 ##### RAFT 协议 Redis里面使用到了Raft协议,你有了解么? redis master 宕机后,怎么在 slave 中选举出一个作为新的 master; #### 集群(cluster) 日常在用的 Redis 集群都是什么架构?**在主从模式和 Redis Cluster 中分布式锁会有什么问题?** redis 集群模式 redis 集群 redis集群同步,redis集群是ap还是cp? Redis 集群选举,心跳检测 redis 集群相关问题 ##### 哈希槽、一致性哈希 Redis中数据倾斜问题 Redis的哈希环最多有16384个槽,为什么是16384? 当哈希环出现“数据倾斜” 该如何解决? redis的slot是什么?为啥slot的16K的大小? Redis 中,为什么默认槽数量要被设置为 16384(2^14)? 一致性哈希算法 一致性 Hash(我从余数 Hash 讲到 一致性 Hash 再到一致性 Hash 实现再到一致性 Hash 缺点再引出 Redis 原生集群实现去中心化的哈希槽实现)讲了十分钟吧,讲完面试官都笑了,然后问我 Redis 看过哪些书,自己说了两本 + 掘金小册一个 Redis 的槽分配,如果一个集群节点挂了怎样重新分配对应的槽 Redis 集群的哈希算法和渐进式 rehash 的过程 redis集群怎么进行数据分配,hash槽 ##### Gossip 协议 Resdis 节点间如何通信,用了什么协议,具体流程 Redis 用的 Gossip 协议有哪些具体消息?谣言传播,为什么要去中心化?有哪些优缺点? ### 使用场景 任务在Redis中怎么存储的,key是什么 说一下Redis的使用场景 Redis 的具体应用 Redis 一般有哪些使用场景 Redis 是用来干嘛的? redis 失效如何验证登录 Redis 如何防止超卖的现象 #### 好处、特点 为什么用 redis,有什么优势 为什么选择redis,有什么好处,基于内存,抗压 redis 特点 #### 缓存 项目涉及缓存,所以问了蛮久基于业务方面缓存怎么做,比如缓存时间怎么设置,缓存哪部分数据,要取到很久之前的数据该怎么做之类的。(用Redis做的缓存) 怎么想到要用redis缓存数据的 缓存使用的具体场景,一致性问题,缓存使用常见问题有哪些? Redis 缓存有哪些问题,如何解决 Redis 缓存机制 Redis 分布式缓存 分布式缓存设计、缓存问题解决思路(雪崩、穿透)。 讲讲缓存击穿、缓存雪崩、缓存一致性,分别用什么方法解决? ##### 大 key、热 key Redis 存储数据需要注意哪些问题?热 key 问题、大 key 问题怎么处理? ###### big key redis大key怎么删除?(unlink,和分批缓删) ###### 热 key redis的热点key问题 热 key 的解决方案(如何发现 如何优化) 设置热点 key,如果热点 key 过期,就需要去查数据库,并且想让用户察觉不到这个过程,怎么处理(用双 key)/比如请求 redis100ms,在查询 mysql400ms,现在保证无论查没查到 redis 都保证 100ms 以内? ##### 双写一致性 如何保证数据库与redis缓存一致的 分布式缓存读写不一致问题 缓存和数据库一致性问题怎么解决?为什么要删缓存而不是更新缓存?删缓存删失败了怎么办? Redis 作为缓存、MySQL 作为数据库如何保证缓存一致性?如何对账保证一致? redis数据一致性问题,如何解决? 缓存和数据库怎么保证一致性 秒杀过程中怎么保证redis缓存和数据库的一致性? redis的更新策略(先操作数据库还是先操作缓存) MySQL 和 Redis 怎么保持数据一致? 旁路缓冲策略:Redis有三种读写策略分别是:**旁路缓存模式策略、读写穿透策略、异步缓存写入策略。** 如何保证缓存和数据库的一致性? 项目中加了缓存,那你是在什么时机去同步缓存?(旁路缓存模式,先更新 DB 再删除缓存) 更新 DB 之后再删除缓存的话,如果某个接口更新的数据很多,涉及的缓存也很多,那接口响应时间就会被拉长,怎么优化这个问题?回答了异步删除缓存 MySQL 和 Redis 怎么保持数据一致; Redis 如何保证缓存的一致性? 使用 RabbitMq 和延迟双删适用于什么场景?(注:好像其实是问 Redis 延时用 MQ 做的?) 缓存一致性策略有哪些? 在缓存一致性过程中如果 MQ 宕机了怎么办? ###### 本地缓存 知道的本地缓存,选择 Caffeine 的原因; Redis 这类缓存和 Caffeine 的区别; 你觉得在项目的二级缓存中如何保证 本地缓存 和 Redis 缓存 的一致性?(比如某个节点进行更新操作,多节点的 Redis 缓存 都会更新,但是对于 本地缓存,只会更新当前节点,如何保证其他节点的 本地缓存 都进行更新?) ##### 缓存预热、雪崩、击穿、穿透 Redis 在你项目中如何使用的,穿透、雪崩、击穿了解吗 Redis 的缓存击穿、穿透、雪崩,及其解决方案 再说说缓存雪崩、缓存击穿缓存穿透吧,解决办法? 缓存穿透, 缓存击穿, 缓存雪崩基本概念及解决方案。 redis缓存问题-雪崩,击穿 缓存穿透和缓存雪崩,解决方法 如何解决缓存雪崩和缓存击穿 缓存击穿,穿透,雪崩怎么处理,怎么预防 Redis 缓存穿透、缓存击穿、缓存雪崩区别和解决方案 缓存雪崩,缓存击穿,缓存穿透,如何解决?击穿和穿透的本质区别是什么 缓存击穿是什么?缓存雪崩是什么? 什么是 Redis 的缓存穿透、缓存击穿? 缓存穿透、击穿、打满、雪崩出现的原因与常用解决办法 缓存穿透和缓存雪崩的区别,解决办法; 什么是缓存雪崩,什么是缓存穿透,什么是缓存击穿? 缓存雪崩 缓存击穿 缓存穿透 缓存穿透和缓存击穿(布隆过滤器) ###### 缓存预热 谈谈你对redis的理解。提到一个redis热启动,没听过,一脸懵逼。 多个用户请求同时第一次访问空的redis,怎么样不使redis崩溃? 多个线程同时访问为空的redis,怎么解决(这两个问题跟网易一模一样) ###### 缓存击穿 怎么防止缓存击穿的问题? redis的缓存击穿,怎么处理这个问题 谈一下缓存击穿,如何解决 ###### 缓存穿透 缓存穿透的解决方案。Redis解决缓存穿透`【2次】` Redis解决缓存穿透 缓存穿透的解决方案 ###### 布隆过滤器 布隆过滤器 布隆过滤器 布隆过滤器的原理是什么?它的优点是什么?缺陷是什么? 布隆过滤器 ##### 缓存过期、淘汰 Redis缓存回收机制 数据过期、内存淘汰 ###### 过期删除 redis过期键删除策略(定期删除、惰性删除、定时删除) Redis 过期键的删除策略有哪些 Redis 的过期策略? ###### 内存淘汰 Redis 热点有一个 LFU 的过期键淘汰策略,他和 LRU 有啥区别? redis内存淘汰策略有几种 Redis内存淘汰策略?缓存淘汰策略?`【2次】` redis 的淘汰算法,你在哪配置淘汰算法 Redis的缓存淘汰策略有哪些? Redis 内存淘汰算法有哪些 **单线程的 Redis 怎么执行内存淘汰策略;** #### 分布式锁 redis 分布式锁 说一下(Redis)分布式锁的实现? - setnx / 唯一 value / ttl 基于 Redis 的分布式锁会有什么问题? - 主从模型下同步不保证一致会导致锁失效 Redis 分布式锁超时可以超时时间设长一点可以吗?不可以的话需要怎么解决? - 不根本解决问题,可以考虑旁路的 goroutine 不断自旋续期 对 Redis 锁续期这个怎么实现呢? Redis 分布式锁和 ZK 分布式锁的比较。AP 和 CP,CAP 理论讲一下? redis怎么实现分布式锁?用缓存怎么实现锁?`【2次】` redis为什么能实现分布式锁? 使用redis实现分布式锁、写代码,只写了线程获取锁的步骤和伪代码 Redis怎么实现分布式锁,具体的命令是什么?如果是分布式集群会有什么问题?这里答RedLock算法 如果用redis做分布式锁,他的好处是什么,有考虑到其他方案吗? 除了redis能实现还有其他实现方式吗 Redis分布式锁实现 Redis 分布式锁实现,Redis 集群选举 说一下基于Redis实现的分布式锁,问的比较细,比如线程阻塞导致,导致锁过期,其他线程获取了锁然后前一个线程又释放了第二个线程的锁这种,还问了一个线程等待Redis的分布式锁,整体等待时间的是怎么样的(这个答得不太好,主要没理解他这么问的意图) redis锁机制,怎么处理并发(我说这个不太熟,mysql的锁机制比较熟,小哥哥说那你讲一下) redis 分布式锁的实现原理 setNX 啥的 Redis 如何实现 分布式锁? Redis 分布式锁(设置过期时间,如果 redis 宕机,守护线程也会失效,那么锁只要到期就会直接释放,不会再守护-延迟释放时间) ##### Redlock 算法 Redis 分布式锁、红锁。红锁有什么问题? redis,分布式锁, redlock算法 Redis 分布式锁的限制,RedLock 的实现? ##### Redisson Redisson 分布式锁。写了鱼皮一个项目上去,用了 Redisson 的限流器,就给我各种问这个分布式锁的原理。然后最近在网上也去找相关 Redisson 资料,发现 B 站的算法好像给人攻破一样,前几页全是一家培训机构(图灵),都要给你讲一半,然后推销,暂时 B 站没发现系统讲 Redisson 的视频,有没有小伙伴看过比较好的推荐一下。 分布式锁(redission) 为什么用 Redis+lua 而不用 Redission Redission 了解吗(守护线程) #### 共享 session Redis 亿级用户共享 session 的问题 redis介绍, 系统中的角色,作为缓存, 分布式session服务器 redis解决分布式Session问题, 单点登录, Session一致性问题,描述,如何实现 redis模拟session,除了redis你还考虑过别的吗 分布式 Session ### 调优 Redis 如何做内存优化 redis 缓存中有上万条数据,怎么查更快速一些(不是考察二分的) ### 数据库对比 Redis和LevelDB的区别 redis特点?和Mysql区别?缺点?数据存储在哪的 redis 和memcache的区别 Redis 和其它轻量级缓存比如 Memcached 相比,优势有哪些? 单从性能上比较,Redis 和 Memcached 哪个更好? Redis 和 MySql 有什么区别? 除了 mysql 和 redis,还用过什么数据源,Hive 了解过吗 # MongoDB ## 《MongoDB 实战(第二版)》 第二版翻译不行 4.2(21人评价) Kyle Banker / Peter Bakkum / Shaun Verch / Doug Garrett / Tim Hawkins / 徐雷 / 徐扬 / 华中科技大学出版社 / 2017-3-1 https://book.douban.com/subject/27061123/ 第一版:8.2(153人评价) [美] Kyle Banker / 丁雪丰 / 人民邮电出版社 / 2012-10 / 59.00元 https://book.douban.com/subject/19977785/ ## 面试题 mongodb怎么做到高可用,故障转移咋搞? mongodb的objectId是如何生成的? mongodb怎么做数据迁移?怎么做故障转移? 使用mongodb时遇到过什么问题?(数据不均衡,shard key设置以及chunk分裂和迁移) MongoDB 中针对于百万级别的数据,如何优化查询?如何分页?如何创建索引?做过数据统计那么统计的精度是每天还是每个月还是每年?如果去动态查询这些统计数据? # CouchDB # LevelDB ## 面试题 能说一下 LevelDB 的存储结构吗? - 内心:完了写上简历了但又没复习,啥都不记得了; # Hyperledge Fabric # Spark # TensorFlow # Elasticsearch ## 《深入理解 Elasticsearch(原书第2版)》 6.6(12人评价) Rafal Kuc / Marek Rogozinski / 机械工业出版社 / 2017-5 https://book.douban.com/subject/27066928/ ## 《Elasticsearch 源码解析与优化实战》 8.0(59人评价) 张超 / 电子工业出版社 / 2019-1 / 89 https://book.douban.com/subject/30386800/ ## 面试题 elasticsearch的写入流程?是否是强一致性?为啥叫准实时? ES底层 ES 一定要和 MySQL 同步吗?直接存在 ES 里不行吗? ES底层 ES的具体操作 问 ES 我说 document index 只了解基本用法 ### 使用场景 什么场景下使用了 ES? 项目中是如何使用 ES的; 怎么做数据冷热分离?怎么做分库分表?为什么要用 ES? ### 为什么快 ES 检索比较快的原因,为什么 MySQL 不行; ES 检索为什么比 MySQL 快? 为什么 ES 检索比较快? 为什么用Elasticsearch,为什么ES的查询速度快 ### 分片 elasticsearch中什么是分段、分片?副本的作用? Elastic 分片、索引生命周期 ### 倒排索引 elasticsearch倒排索引 elasticsearch的倒排索引实现(前缀树,fst,and/or条件快速合并) 讲一下倒排索引; 倒排索引 是什么讲一下? # Kafka ## 《Kafka 权威指南》 8.5(435人评价) Neha Narkhede / Gwen Shapira / Todd Palino / 薛命灯 / 人民邮电出版社 / 2017-12 / 69.00元 https://book.douban.com/subject/27665114/ **第1章 初始 Kafka** **第2章 安装 Kafka** **第3章 Kafka 生产者——向 Kafka 写入数据** **3.5 序列化器** **3.5.2 使用 Avro 序列化** **第4章 Kafka 消费者——从 Kafka 读取数据** **第5章 深入 Kafka** **第6章 可靠的数据传递** **第7章 构建数据管道** **第8章 跨集群数据镜像** **第9章 管理 Kafka** **第10章 监控 Kafka** **第11章 流式处理** ## 《深入理解 Kafka 核心设计与实践原理》 8.8(327人评价) 朱忠华 / 电子工业出版社 / 2019-1 / 99 https://book.douban.com/subject/30437872/ ## 《Apache Kafka 实战》 8.6(84人评价) 胡夕 / 电子工业出版社 / 2018-5 / 89 https://book.douban.com/subject/30221096/ ## 《Apache Kafka 源码剖析》 8.9(101人评价) 徐郡明 / 电子工业出版社 / 2017-5 / 89 https://book.douban.com/subject/27038473/ ## 面试题 Kafka 高水位了解过吗?为什么 Kafka 需要 Leader Epoch? kafka的使用上你们有遇到什么问题吗? Kafka 架构原理,消费异常处理,重复消费处理,Kafak 可靠性,Kafak 副本机制,还一个什么高位低位,我不会 ### 组成部分、概念 kafka怎么处理提交offset的?(有个特殊的topic) kafka副本了解吗,讲一下 #### 消费者组 Kafka 组成部分?消费者组,及其意义和好处 如何设置消费者组 为什么不让一个partition被同组的多个consumer消费 #### ISR kafka的ISR是什么?怎么做数据同步? Kafka 的 ISR 机制? ### 为什么快 Kafka 消息的写入过程简单介绍一下,Kafka 为什么这么快? 顺序写为啥性能高? Kafka 为什么单机并发高,速度快? 为什么快? Kafka 为何高吞吐? #### 物理存储、实现原理 Kafka 基本工作原理? 了解Kafka的原理吗 kafka为啥用page cache而mysql要自己实现buffer pool Kafka 的服务端的物理存储架构是什么?零拷贝,mmap,sendfile、DMA gather。 Kafka 的 log,index,稀疏索引。零拷贝,mmap,sendfile、DMA gather Kafka 的优势在哪里?实现原理是什么?批消息处理,零拷贝技术,网络接口层-用户态-内核态,缩短拷贝链路。 ### 选举 Kafka 几种选举过程简单介绍一下? Kafka rebalance 策略,具体过程。GroupCoordinator 选举、消费组协调器选举过程?kafka 默认 topic 干什么用的? Kafka 四个选举,Controller 选举、Partition leader 选举、GroupCoordinator 选举、消费组协调器选举。整体设计问题,使用场景,流量规划怎么做的? ### 再平衡 触发 Rebalance ### 消息不丢失、可靠性 Kafka 能保证数据一条都不丢失吗?为什么?业务上丢数据了怎么办? MQ 消息发送不在 MySQL 事务中如何保证一致性? 为何使用消息队列?如何保证消息不丢失? 如何保证数据一致性,即原子性,ack kafka怎么保证消息不丢失 消息中间件,可靠性消息?(没深入不了解、面试官小哥还给我解释了一下) ### 消息幂等性、数据去重 消息幂等性 ### 数据有序性 Kafka 消息的可靠性、顺序性是如何实现的的? ### 消息积压 MQ 消息积压 MQ 消息积压遇到过吗?你是怎么处理这个? ### 使用场景 MQ 使用场景有哪些?在项目中具体哪些地方用到了? 你使用 MQ(RocketMQ 和 Kafka)的应用场景什么? 消息队列在项目中的应用 聊项目,消息队列怎么用的? 策略是什么? 项目中消息队列怎么用的?使用哪些具体业务场景? ### 延时队列 Kafka 的优势是什么?RocketMQ 延迟队列怎么做的?如果让你优化你会怎么做?Kafka 能实现延迟队列吗? MQ 延时队列 ### 消息队列 消息队列性能对比及选型 MQ的作用,同步转异步,消除峰值 消息队列原理介绍(不太会) Kafka 与其他 MQ 的对比与选择 MQ 的原理,你知道哪些 MQ,各自有什么特点,什么时候需要用 MQ 对消息队列及中间件相关的了解 你说 DTS 从 RocketMQ 变为了 Kafka, 你说说 2 个消息队列的区别?这块可能答的不太行,RocketMQ 本质就是基于 Kafka 来做的,但是实时性会比 Kafka 好,并且支持事务性消息,但是 Kafka 也可以有特殊的方法支持事务消息。 mq怎么用的,有什么好处,还了解过哪些mq(扯了RocketMQ和Kafka)? kafka相对别的消息队列的区别 #### 设计 如果让你自己设计一个消息队列,怎么设计,消息队列底层最核心的技术是什么? 个人观点:消息存储+通信 其他就是高可用和高可靠的保障了,比如注册中心、负载均衡、确认应答 # RabbitMQ ## 《RabbitMQ 实战指南》 8.3(191人评价) 朱忠华 / 电子工业出版社 / 2017-11-1 / 79.00元 https://book.douban.com/subject/27591386/ ## 面试题 topic 和 block ### 好处 为什么选择rabbitMQ, 社区活跃,高并发 你项目中用的是 RabbitMQ,为什么,和其他 MQ 对比如何? 为什么用 MQ?这个问题我是从 MQ 的优点分析,什么削峰、解耦、异步讲了一堆 mq的作用(异步、削峰、解耦) ### 原理 Rabbitmq实现原理 RabbitMQ的原理 RabbitMQ 的原理 RabbitMQ的原理 说说rabittmq架构(说了分为虚拟机、交换机和队列,然后说了下消息的传递过程,面试官否认了,说这只是应用层面) ### 应用场景 项目中用到了rabbitmq,使用中遇到什么问题 使用 RabbitMQ 怎么优化 Redis 的,为什么引入 RabbitMq 中转更快了。如果不使用 RabbitMq,实际的操作 ### 重复消费问题 rabbitmq重复消费怎么解决,除了数据库里查记录还有其他什么方法 ### 消息可靠性 消息可靠性?分 3 个阶段吧(生产消息、存储消息和消费消息),就 balabala 讲一堆,基本每次面试都要问,具体可以参考这篇文章MQ 消息的可靠性、幂等性与有序性保障。消息幂等性这块个人感觉我回答的不算好,后续继续复习一下。 ### 顺序消费 RabbitMQ 异步和削峰 怎么保证消息的顺序消费 ### 高可用 Rabbitmq 高可用 ### 延时队列 延时队列的实现原理 ### 设计模式 rabbitmq用了哪些设计模式。发布订阅模式,还有其他的吗,我不知道,有知道的朋友可以告诉我一下 # RocketMQ ## 面试题 RocketMQ 写日志用到了零拷贝,但是 Kafka 写日志的时候不用零拷贝。 ### 好处 为什么引入RocketMQ 通过对核心接口的压测, 发现接口 tps 相对较低,经过排查发现主流程中操作步骤相对较多。 一次写请求处理了比较多内容,导致整个请求的响应缓慢。 通过将核心的流程和辅助功能进行拆分, 通过异步的方式完成后续的工作,从而提高接口的吞吐量。 为什么使用RocketMQ 技术选型: RabbitMQ,RocketMQ和Kafka 主要从:消息堆积,响应速度,底层语言和使用场景进行分析 ### 消息可靠性 如何保证消息的可靠性 从 客户端,MQ和消费端来进行保证消息可靠。 客户端: 通过事务消息来进行保证,或者失败重试(sendResult判断) MQ : 通过RocketMQ 集群,进行保证,主要由运维负责(可能会牵扯到MQ消息保存的问题) 消费端:1、消费幂等和2、流水表的形式 这个问题需要结合到项目中的实际场景进行分析, 不能硬套 rocketmq 如何保证消息可靠 rocketmq 消费失败:如何解决消费失败的问题,和消费失败可能导致的 `n+1` 问题 RocketMQ 如何保证消息必达(消息可靠性)?(生产者发送的消息如何保证能投递到 MQ?) RocketMQ 广播消息 丢失消息怎么办? ### 分布式事务 RocketMQ 能做分布式事务吗? rocketmq half message,介绍 `half message` ,失败如何回调等 从银行转账出发, 要求描述出两阶段提交基于(RocketMQ) ### 消息队列 消息队列技术选型 别的MQ也要了解,比如RocketMQ(阿里的,java开发,再次开发,并发高,分布式,出错少) ### 应用场景 项目中有用到 RocketMQ,主要用来做什么?用到 RocketMQ 不是维护成本比较高吗? 项目中的 RocketMQ 主要用来做什么? 项目中为什么要用 RocketMQ?你觉得邮件模块这里有没有必要用 MQ?(使用消息队列的好处和问题) # Nginx ## 《深入理解 Nginx(第2版):模块开发与架构解析》 8.7(194人评价) 陶辉 / 机械工业出版社 / 2016-2 / 99.00元 https://book.douban.com/subject/26745255/ ## 面试题 nginx反向代理是什么,正向代理呢 nginx你们一般做什么,正向代理一般用来干啥 你会前端啊,说说vue用history打包之后,部署到服务器,nginx需要配置什么 负载均衡反向代理,这个时候,访问后台的那个ip到底是客户还是反向代理,还怎么统计ip? 负载均衡了解吗,如果让你实现负载均衡你会使用哪种方法,为什么要用这种方法,其他方式又了解过吗,各自方式的特点。 负载均衡的策略 怎么配置负载均衡 怎么限流 怎么使用nginx缓存 为什么使用nginx,有别的替代品吗 nginx的压力测试,你测试过吗,能抗住多少压力 nginx是如何实现反向代理的,哪一层的方向代理? 应用层 如何向外提供HTTPS协议的服务, 在内网使用http协议, 通过nginx配置来进行实现 nginx可承受的压力 nginx怎么配置负载均衡 # Linux ## 《Linux Shell 脚本攻略(第3版)》 7.8(35人评价) [美] Clif Flynt / [印] Shantanu Tushar / [印] Sarath Lakshman / 门佳 / 人民邮电出版社 / 2018-3 / 89.00元 https://book.douban.com/subject/30172987/ ## 《Linux 高性能服务器编程》 7.9(310人评价) 游双 / 机械工业出版社 / 2013-5-1 / CNY 69.00 https://book.douban.com/subject/24722611/ ## 面试题(包含操作系统) Linux内核了解吗 硬链接和软连接 linux 执行二进制文件过程。。。【三面考的,我当场就裂开了】 linux的使用场景,你什么时候会用linux -- 》 布置服务器 linux中数据怎么存储,关于数据块怎么优化存储。随机读和顺序读。 linux内存管理,以及其中的算法。 ### 命令 linux怎么看java进程,除了jps和top命令还有其他的吗 vmstat命令干嘛的 Linux常用指令 top/free/df/mv/cp/sed/scp...... linux你使用过吗,用到了那些命令 Linux常见的操作指令 Linux系统下的常用指令 问了一些linux命令,如何查看进程、杀死进程、su命令,还有一些其他的忘记了,都是些比较基础的 常用的Linux指令 Linux 知道哪些命令 Linux 在某个目录下搜索文本 ”abc” 和查找 ”abc” 文件的命令? 说一说 Linux 常用命令。 linux 常用命令 Linux 查看资源配比的命令 top load average Linux 查看磁盘/文件使用情况 df du Linux 命令 linux 系统使用过吗?用过哪些命令? Linux 常用命令了解哪些? ab 压测 如何修改linux的文件权限 命令 常见的命令 sed 和 awk 感觉linux必考。。 怎么查看进程和杀死进程 打印一个文件夹中的所有文件 linux指令:观察端口netstat、内存top、磁盘df、进程打开多少文件夹怎么看(我说了ps…不对,应该lsof ) Linux平台:查看文件指令(tail/sed)、进程启动方式(命令行直接运行可执行文件) Linux常用指令,如何查看某个ip被哪个进程占用 ### IO 多路复用 linux select 通知 Linux io多路复用/aio IO多路复用,用过没有?说说IO多路复用,做过网络编程吗?`【2次】` 说说poll和epoll的区别。 I/O多路复用机制 select与epoll的区别 多路io复用 5种io, select epoll区别,select数组为什么默认1024 ? IO 多路复用了解吗 Linux 中的 epoll 和 select 这些多路复用了解过吗? Linux中epoll和select区别 select,poll,epoll的区别 ### 问题排查 项目部署到Linux服务器后,cpu飙到100%了,怎么去排查? 听你说对linux比较熟,环境搭建过吗(tomcat之类的),有没有遇到什么问题 搭环境都成为一个技术点来问了嘛,反正我现在用docker了。 ### shell 编程 有没有 Linux 下的编程经验? ### 线程、进程 linux中线程的状态 linux 创建进程啥的【也裂开】 一个进程的栈大小是多少知道吗?打开文件的上限是多少? Linux进程间的通信方式, 管道,有名管道,socket,共享内存,消息队列 ### 零拷贝 mmap是为了解决什么问题?什么是零拷贝 ### 操作系统 操作系统执行一个程序的过程? 聊聊系统调用,记得具体命令吗? 操作系统了解说,说一下你设计操作系统要几个模块。 (磁盘管理 线程管理 IO管理 文件管理) #### 进程、线程 进程调度算法`【2次】` 进程切换的TLB了解吗? 进程线程协程 进程通信方式,哪种最高效 进程同步方式 进程间的通信机制`【2次】` 进程通信的方式,匿名管道,命名管道如何生成,信号怎么生成,头文件? 进程和线程的区别?`【4次】` 线程切换的时机?给线程分配时间片,操作系统怎么知道时间片用完了?线程切换 一定会引起内核态和用户态的切换吗? 进程的地址空间里面有什么? 线程切换要保存哪些上下文? ##### 用户态、内核态 用户态和内核态的区别 为什么要区分用户态和内核态 用户态和内核态 内核,用户态,内核态,怎么切换 #### 中断 操作系统怎么处理中断的?怎么判断是哪种类型的中断? #### 内存 os内存伙伴算法 操作系统内存管理 ##### 段、页 内存分页、分段 段表、页表是什么? 为什么需要段表?多级页表是啥? 页式管理和段式管理 ##### 虚拟内存 虚拟内存 怎么理解虚拟地址空间? 操作系统中的虚拟地址转换物理地址的全过程? 虚拟内存和物理内存之间如何联系的?什么时候进行交换。 逻辑地址和物理地址的转化 虚拟内存 谈谈虚拟内存【听到谈谈就麻】 #### 磁盘 操作系统读写磁盘,影响磁盘读写时间的因素有哪些? # Jenkins # Docker ## 《第一本 Docker 书》 7.3(445人评价) [澳]詹姆斯•特恩布尔(James Turnbull) / 李兆海 / 刘斌 / 巨震 / 人民邮电出版社 / 2014-12 / 59 https://book.douban.com/subject/26285268/ ## 《Docker 技术入门与实战 第3版》 6.8(85人评价) 杨保华 / 戴王剑 / 曹亚仑 / 机械工业出版社 / 2018-9-14 / 89.00元 https://book.douban.com/subject/30329430/ ## 《每天5分钟玩转Docker容器技术》 8.0(141人评价) CloudMan / 清华大学出版社 / 2017-9-16 / 49 https://book.douban.com/subject/27593748/ ## 《Docker 实战》 7.4(50人评价) 【美】Jeff Nickoloff / 电子工业出版社 / 2017-1 / 79 https://book.douban.com/subject/26928415/ ## 《Docker——容器与容器云(第2版)》 8.1(162人评价) 浙江大学SEL实验室 / 人民邮电出版社 / 2016-10 / 89.00元 https://book.douban.com/subject/26894736/ ## 《Docker 进阶与实战》 6.9(86人评价) 华为Docker实践小组 / 机械工业出版社 / 2016-1-5 / 79.00元 https://book.douban.com/subject/26701218/ ## 面试题 打包 Docker 镜像 Docker 相对于 Linux 直接部署有什么不同 Docker的原理 和vmware的区别 你一般是怎么部署的 IDEA,直接把项目部署到docker并打包到云服务器 docker的好处,小,快 了解docker镜像吗?答:image相关 了解docker网络吗?答:不了解,但是了解docker资源隔离,于是回答资源隔离 # Kubernetes ## 面试题 K8s的容器网络flannel和calico说说(flannel的三种模式可以详细说说) 还了解其他的K8s中的API对象吗? 多少个服务,多少台机器?K8S,怎么做到隔离? # Maven ## 面试题 Maven 工程是怎么创建的,平时是怎么创建工程的。(这个原问题好像不是这个,我不太理解他的问题,我想着不就是 new Project 然后设置选选一些选项啥的吗 hhh。然后就讲了讲聚合工程啥的) Maven 包冲突怎么解决 Maven的理解 依赖冲突,有碰到过吗,你是怎么解决的~ # Gradle # Git ## 《精通 Git(第2版)》 8.9(166人评价) Scott Chacon / Ben Straub / 门佳 / 刘梓懿 / 人民邮电出版社 / 2017-9 / 89.00元 https://book.douban.com/subject/27133267/ ## 面试题 git 合并分支的相关细节问题(不会,没合并过) git cherry-pick 的作用 git 命令 创建分支 项目中如何使用 git 和 maven 的 git中是如何解决冲突的(自己根据实际使用随便答了一些) git分布式版本控制能干什么 git分支合并的命令 git rebase命令发生了什么 # SVN # Python ## 面试题 Python 可变数据类型与不可变数据类型 # Scala # Kotlin # JavaScript # C++ ## 面试题 C++的基本数据结构了解过吗? # 前端 ## 面试题 两次点击,怎么防止重复下订单 怎样防止表单重复提交 一个n层嵌套的json字符串怎么解析 项目的JS和AJAX也是自己写的吗,介绍下你是如何开发前后端的 restful 前端语言与 Java 性能对比 Ajax技术的基本使用和原理 用过jquery哪些框架 es6语法熟悉吗 vue用过哪些组件 jquery冒泡了解吗 你会前端啊,说说vue用history打包之后,部署到服务器,nginx需要配置什么 # 计算机网络 ## 面试题 客户端 和一台服务器能建立多少连接,怎么做拥塞控制和进程间通信? HTTP 和 TCP 协议及其关系的理解? 后面关于网络就更深入了,TCP 底层是怎么实现的,如果让你用 Java 模拟 TCP 的过程,做一个仿真,你有什么想法。大学学习计网的时候,协议栈之类的了解过吗(这部分我都不懂,认栽了) 长连接实现 mac地址和ip地址,瞎扯了写 hosts文件 端口的实现 抓过网络包吗?(安卓网络抓包 Fiddler) ### TCP 和 UDP TCP 和 UDP 的区别;三次握手和四次挥手 tcp和udp的区别(可以从头部的差异来记忆) tcp和udp有什么区别?分别应用于哪些场景? 讲讲tcp udp协议 `【2次】` UDP和TCP的区别 UDP 和TCP的区别 UDP 和 TCP 的区别 TCP 和 UDP 的区别 UDP 和 TCP 区别 tcp怎么实现可靠传输,udp可以可靠传输吗? TCP与UDP区别 TCP的流量控制和拥塞机制 三次握手和四次挥手 问计算机网络(比较深入,有一些没有回答上来,还是要多补补基础):TCP 与 UDP 的区别,TCP 三次握手四次挥手,`TIME-WAIT` 和 `CLOSE-WAIT` 是干什么的?为什么要三次握手两次不行吗?有大量连接处于 `TIME-WAIT` 的原因?TCP 是长连接还是短连接? #### TCP 说说tcp协议 tcp和ip区别。说下ip的包头和tcp的包头。 tcp三次握手,拥塞避免,流量控制 Tcp 头部组成,tcp 滑动窗口 tcp listen backlog【当时一脸懵,三面考的】 tcp如何保证不会接受重复的报文 tcp如何保证有序 如果用TCP进行服务器某端口的探测,你要怎么改tcp使得其消耗最少,面试官提示过我,tcp先发syn包,然后收到ack之后,直接回一个reset 如果有一台机器B,去模拟机器A,向C发送syn包,这个时候会怎么样,讲真的,我一脸懵逼。 TCP的原生API用过没 TCP 建立连接后模拟场景问题 ##### 可靠性 TCP如何确保可靠传输 tcp怎么保证可靠性 tcp如何解决丢包问题 TCP可靠性保证怎么实现 TCP 的可靠性怎么保障的,怎么保证接收到的内容是正确的 ##### 三握四挥 为什么是三次握手 四次挥手 tcp协议建立连接、释放连接的过程。 TCP 三握四挥 分别简述下 TCP 三次握手四次挥手,以及为什么要这么做 TCP 三次握手,四次挥手整个过程包括状态的转换。为什么是三次握手、四次挥手。发送 Fin ,实际的意义代表什么?(发送方没有数据要发送了,可以断开连接) 讲讲TCP协议的三次握手和四次挥手过程? 三次握手和四次挥手的过程 讲一下三次握手和四次握手 三次握手,四次挥手 网络协议有了解吗,为什么Tcp是三次握手四次挥手不是四四或者三三? 为什么建立三次、断开是四次 如果2次握手会怎么样,四次回收如果服务端直接把ack和fin一起返回做三次挥手会怎么样 TCP 三次握手,标志位怎么设,TIME_WAIT 发生在哪儿 ###### 三次握手 tcp三次握手之前,需要做什么?大概就是启动进程、监听端口之类的 TCP为什么可靠?三次握手的过程?为什么是三次 tcp三次握手是否能够减少为两次? TCP三次握手的过程,粘包,会不会丢包,服务器端的TCP如果长时间没有通讯,可以自动断开吗 tcp三次握手`【2次】` TCP的三次握手协议 TCP三次握手 TCP 的三次握手,为什么要经过三次握手; tcp的sync攻击,为什么三次握手 三次握手中为什么不是两次?为什么不是四次? 三次握手的过程以及每一次起到了什么作用 ###### 四次挥手 TCP 四次挥手 TCP 的四次挥手; tcp四次挥手,time waiting TCP 中 time-wait 状态 tcp状态机的切换,即三次握手和四次分手过程中,客户端和服务端的过程状态。重点在于四次分手时,**time_wait**和**close_wait** tcp time_wait状态 tcp有个状态是Time_Wait,这个具体是在哪儿,作用是什么 四次挥手,为什么等待 2 MSL TCP 四次挥手,如果不等 2MSL 的话整个网络会出现什么情况 四次挥手套接字的状态转移 四次挥手的过程以及每一次起到了什么作用 ##### 滑动窗口 tcp滑动窗口,拥塞控制`【4次】` 窗口机制,你了解吗 tcp滑动窗口和阻塞避免 滑动窗口机制 ##### 流量控制 TCP 协议中的流量控制起到什么作用 流量控制、拥塞控制 ##### 拥塞控制 拥塞控制 tcp的拥塞控制 tcp拥塞控制,滑动窗口 拥塞控制 简单描述 TCP 的拥塞控制,拥塞控制的目的 #### UDP UDP为什么是面向报文的 如何用udp保证可靠性 UDP 应用场景 ### HTTP http的request、response的具体格式 HTTP请求的过程,keep-alive HTTP 请求过程 说说http请求报文包含什么? HTTP 协议的组成?报文格式?头和 body 如何分割?cookie 在哪一部分?如何让请求携带 cookie? http报文格式 Content-Length知道吗?如果Content-Length的长度 大于报文的实际长度,分析下会有什么问题? http的缓存机制 HTTP 如何保存用户状态 http协议 (http是哪一层的协议,其传输层协议是什么,三次握手和四次挥手的完整过程) #### 请求类型 Get post还有什么方式 get和post的区别,用get和post传输的时候有个编码,那个编码的作用是什么(一开始没听懂问题,说的是Accept-Encoding,后来面试官说是想问http请求中特殊字符的转义) post 和 get 的区别 get和post区别 get和post区别,post一定是安全的么?怎么解决登录信息被截取? GET 和 POST 的区别 淘宝的登录就是get方式,怎么保证安全? #### 状态码 http状态码 HTTP 状态码有哪些 状态码 重定向和转发区别 转发和重定向的区别 http状态码,502,504? 简述下http,状态码 HTTP状态码 状态码,知道的讲一下 http 状态码? #### 对比 HTTP 版本你有哪些了解,分别简述一下各版本的区别 http1.0 1.1 1.2区别 http1.0、2.0的区别以及存在的问题 http1.0与http2.0区别 HTTP 2.0 和 HTTP 1 的区别? 什么是队头阻塞?2.0 为什么不用 UDP? Http怎么实现长链接的?http2.0的特点 http2.0 了解3.0吗 QUIC/HTTP3 了解吗? HTTP 和 HTTPS 的区别 http与https的区别 `【5次】` HTTP 和 HTTPS 的区别; 平时做项目用http还是https? 谈一谈http,https 问计算机网络:HTTPS 和HTTP 区别、 HTTPS 加密过程。 问计算机网络:HTTPS 和HTTP 区别、SSL/TLS 的工作原理、中间人攻击了解吗? ### HTTPS https 建立连接的过程 HTTPS 怎么保证传输的安全; HTTPS 校验的哈希算法是什么 HTTPS 中证书的作用; HTTPS 和 HTTP 对比;CA 数字证书;对称加密非对称加密过程? 数字证书是什么?数字证书包含什么?`【2次】` HTTPS 的加密手段是什么 https加密的过程`【5次】` http,https,https理解,秘钥交换过程 https加密过程,为什么不是非对称加密 HTTPS 加密证书传递详述,哪些是对称加密,哪些是非对称加密 #### SSL SSL套接字的过程? SSL在历史上有一次心脏流血漏洞,这个漏洞怎么出现的? ### cookie 和 session cookie和session的区别 cookie 和 session 的区别 cookie和session区别 Cookie 和 Session 有什么区别 cookie 和 session 的区别? cookie 和 session 的区别 Cookie 和 Session 有什么区别 Session 和 Cookie 的区别 简单说说cookie做什么的?session又是什么?它们直接的关系? 登录的时候用什么保存状态 session和cookie #### cookie Cookie 的作用是什么 服务器宕机了,Cookie 还能继续用吗? 有哪些方式可以增强 cookie 的安全性?或者说如何防止 cookie 被伪造? #### session 我说大部分数据还是存在session中,HR顺者问你会去清理session的数据吗?如何做的 #### token 项目中token如何使用的 你会在token中存在用户的一些基本信息吗,如何存 ### DNS dns解析出错,怎么排查错误 DNS的过程 DNS过程,问的很细 我们来问问网络吧,DNS是哪层的协议 DNS寻址过程,递归~ DNS 解析的过程 ### URL 全流程 描述下,我在浏览器上输入一个URL,到最终页面呈现经历了哪些过程?说说浏览器输入网址到返回页面的过程?`【3次】` 如果服务器返回不是静态的页面?动态的? 在浏览器中输⼊url地址 ->>会发生什么过程?(答:这个最最最常见的问题我居然忘了!忘了!这里就说的不好) 输入url的流程 输入URL 到页面加载过程 网站输入一网址过程,具体讲一下DNS解析过程。 访问百度的过程 浏览器从输入URL到返回结果中间经历了什么? 浏览器输入URL,流程 输入 URL 到前端渲染的过程 请求在服务器端的过程 网址中输入URL,一系列过程 从输入 URL 到页面加载发生了什么 输入一个 url 之后的流程 用户输入网址到显示对应页面的全过程 输入一个域名后经历的协议 问计算机网络:从输入URL到浏览器显示页面的流程。 ### 网络分层模型 计算机网络分层模型 常见的每层的代表协议 有网络层的存在,为什么还要传输层 OSI七层网络模型,常见协议作用于哪层,交换机和路由器区别,ping指令原理 简单说一下七层网络和四层网络 计算机网络七层结构,五层结构? #### OSI 七层模型 OSI 体系结构有7层,讲讲每一层的协议,都是做什么用的 OSI七层模型以及作用 OSI七层协议 OSI 七层模型 OSI 的七层模型是那些; 七层模型,每层用的协议 七层模型 IOS7层变成为什么变成5层,为什么要分层? OSI 和 TCP/IP 介绍一下 #### tcp/ip 四层模型 tcp/ip协议 tcp/ip协议 对网络方面有了解吗?讲解一下 TCP/IP 协议的网络分层; 四层网络常见的协议 #### 五层模型 五层模型 tcp的五层 说说五层网络模型吧,说说对应的协议吧 ### 其他层级协议 smtp,ftp了解吗【我都没看过,三面考的】 #### FTP 协议 ftp 怎么实现的,,, #### ARP 协议 说一下arp协议,arp协议有什么安全隐患? arp协议和ip协议 计网的ARP协议 什么时候不用查 ARP 表 讲讲 ARP,ICMP #### ICMP 协议 ICMP 是哪个路由器回的,什么地方用了 icmp,traceroute 怎么做的。 #### ARQ 协议 介绍一下 ARQ 协议 ### socket socket通信怎么建立的 socket websocket 会从tcp里面引出来 #### websocket websocket websocket 协议和 HTTP 协议的区别? 知道(聊天室)为什么选 WebSocket 吗? 你知道这个单体项目和 WebSocket 之间会有什么问题?(单应用并发量低和 WebSocket 长连接会存在什么问题?)面试官:单应用并发量低,WebSocket 开的是长连接,很多用户在排队,可能会崩,所以如果是单应用,使用 WebSocket 是不太合理的。 WebSocket 或 Socket 这种即时通信,是如何保持与服务端的长连接的?如果长时间放着不动会不会断开?心跳了解吗? # 设计模式 ## 《设计模式之禅(第2版)》 7.9(188人评价) 秦小波 / 机械工业出版社 / 2014-2-25 / 89.00元 https://book.douban.com/subject/25843319/ **第一部分 大旗不挥,谁敢冲锋——6大设计原则全新解读** **第1章 单一职责原则** **第2章 里氏替换原则** **第3章 依赖倒置原则** **第4章 接口隔离原则** **第5章 迪米特法则** **第6章 开闭原则** **第二部分 真刀实枪 —— 23 种设计模式完美演绎** **第7章 单例模式** **第8章 工厂方法模式** **第9章 抽象工厂模式** **第10章 模板方法模式** **第11章 建造者模式** **第12章 代理模式** **第13章 原型模式** **第14章 中介者模式** **第15章 命令模式** **第16章 责任链模式** **第17章 装饰模式** **第18章 策略模式** **第19章 适配器模式** **第20章 迭代器模式** **第21章 组合模式** **第22章 观察者模式** **第23章 门面模式** **第24章 备忘录模式** **第25章 访问者模式** **第26章 状态模式** **第27章 解释器模式** **第28章 享元模式** **第29章 桥梁模式** **第三部分 谁的地盘谁做主——设计模式 PK** **第30章 创建类模式大 PK** **30.1 工厂方法模式 VS 建造者模式** **30.2 抽象工厂模式 VS 建造者模式** **第31章 结构类模式大 PK** **31.1 代理模式 VS 装饰模式** **31.2 装饰模式 VS 适配器模式** **第32章 行为类模式大 PK** **32.1 命令模式 VS 策略模式** **32.2 策略模式 VS 状态模式** **32.3 观察者模式 VS 责任链模式** **第33章 跨战区 PK** **33.1 策略模式 VS 桥梁模式** **33.2 门面模式 VS 中介者模式** **33.3 包装模式群 PK** **第四部分 完美世界——设计模式混编** **第34章 命令模式 + 责任链模式** **第35章 工厂方法模式 + 策略模式** **第36章 观察者模式 + 中介者模式** **第五部分 扩展篇** **第37章 MVC 框架** **第38章 新模式** **38.1 规格模式** **38.2 对象池模式** **38.3 雇工模式** **38.4 黑板模式** **38.5 空对象模式** ## 《设计模式的艺术:软件开发人员内功修炼之道》 9.6(75人评价) 刘伟 / 清华大学出版社 / 2013-1 / 45.00元 https://book.douban.com/subject/20493657/ **第1部分 基础知识** **第2章 预备知识——UML 类图与面向对象设计原则** **2.1 UML 概述** **2.10 合成复用原则** ## 《设计模式(第2版):高等学校设计模式课程系列教材》 (评价人数不足) 刘伟 / 夏莉 / 于俊洋 / 黄辛迪 / 清华大学出版社 / 2018-12 / 79.80元 https://book.douban.com/subject/30610417/ ## 面试题 设计模式用过哪些 用过哪些设计模式?用过的设计模式(提了项目里的代理模式,aqs的模板方法模式)`【2次】` 设计模式?项目里面是怎么用的? 说几种熟悉的设计模式? 谈谈使用过的几种设计模式,以及优缺点【真的太高频了,我每次都被考】 面试中设计模式其实也是挺重要的 说一下你知道的设计模式, 说一下单例的经典问题。设计模式的六大准则了解吗? 你用过什么设计模式 (介绍了单例,工厂,装饰器,观察者就被打断了) 说说你熟悉的设计模式 在哪里使用过 你开发中都用到了什么设计模式? 了解过啥设计模式 在设计模式中你使用抽象类还是接口比较多 设计模式了解过吗?了解一下 除了单例模式还了解什么设计模式?平时在项目中有用到什么设计模式吗? 工作中用到哪些设计模式?哪个设计模式你比较熟悉,讲一下实现过程? 设计模式了解哪些? ### UML 图 UML 类图理解的怎么样?画个类图吗? ### 设计原则 Java 的设计原则是什么?为什么要用 Java 的设计原则 里式替换原则是什么 单一职责原则是什么,里式替换原则是什么 解释一下开闭原则 里氏替换解释一下 单一原则讲一下吧 开闭原则 ### 单例模式 你怎么看单例模式,写一个双重锁检测的单例模式 白板编程:单例模式,为什么要加 volatile 单例模式?为什么要双重检查? 那我们来聊聊单例模式(??????),单例模式有几种实现方式?(这里有一个地方说错了,说成饿汉是编译时期生成了) 你再想想,是编译时期吗?我问下你,你写的代码如何运行,这个过程你说一下(对不起!!!!) 为什么双重校验,一次校验不行吗(这题我会!) 那怎么用一次校验实现线程安全?(我忘了orz开始胡言乱语,没有自信的问静态内部类可以吗) 静态内部类效率也不太好,你能有什么优化方法吗(对不起!!!我真的没用过我不会!!!) 单例模式,饿汉式,懒汉式,线程安全的做法,两次判断instance是否为空,每次判断的作用是什么。 单例模式的六种实现及优缺点 静态单例实现的优势 什么情况使用枚举单例和容器单例 写了单例,具体解释了volatile禁止指令排序机制和对象new过程。 写了个单例模式。好久没写了有点忘了,双重锁检查写错了两个地方,被指出来了,尴尬 依旧单例 以及单例的经典问题。说一下单例的使用场景吧 单例模式,实现方法,应用场景 写一个单例模式 写单例模式,加锁,比较两种区别 单例模式的实现。 设计模式中有用到锁的模式 如果没有使用两个锁单例会有什么问题 单例模式中变量前加的关键字(volatile) 单例模式并发下实现方式 双重检查锁(DCL) 单例模式是啥 手写单例模式,和 Spring 的单例有什么区别 写个单例?为何静态内部类实现的单例可以做到线程安全且可延迟加载? 写一个线程安全的单例模式; 单例模式的使用方式? ### 工厂模式 设计模式,说说简单工厂模式和抽象工厂模式怎么实现的,区别 我不知道怎么描述他的实现,不知道各位能不能口述出来。我语言表达能力真不行 说说工厂设计模式 工厂模式的设计思路,优缺点 工厂模式 等等 工厂模式的三种,以及个人的理解 工厂模式的设计理念是什么?有什么好处?体现了什么编程思想? 工厂模式的作用,为什么要用工厂模式? 工厂模式主要解决什么问题? 简单工厂模式和抽象工厂模式的区别? 工厂模式是用来干嘛的?(设计模式问的好多,真得看看) ### 建造者模式 讲一讲建造者模式 建造者模式的实现方式 ### 装饰者模式 从设计模式出发, 要求写出装饰者模式和策略模式代码 解释下装饰器模式,回答不会,以前这个的确没准备 讲一讲装饰者模式 (直接介绍了使用它的原因,也说了说 设计原则) 你用过装饰者模式做过什么东西 那你了解装饰者模式的应用场景是什么 (还是在死磕我这个问题,我只能说是增加一个类型的功能,但保证不修改类的内部结构,但是就是要问我具体是什么,我只能说我知道单例,还有其他模式的应用场景,这个我真的想不起来了,当时没意识到,从这个问题没答好开始,已经步入绝望了) ### 代理模式 静态代理和动态代理的区别 动态代理原理和实现,画出代理模式UML,我说不会画,然后面试官挺好的,说你是非计算机专业的,那就不用画了,那就在纸上写一个过程吧 动态代理实现,说一下过程 代理模式,JDK 和 CGLIB,问我有没有用过,我没用过,不过看过 Dubbo 的源码,扯了下代理模式和单例模式在 Dubbo 中的应用,不过面试官应该不会 Dubbo,就没细问 什么是动态代理 静态代理和动态代理 动态代理的实现方式有哪些?对比与选择? 代理模式是什么,代理模式的具体使用场景 ### 观察者模式 观察者模式 ### 适配器模式 适配模式 设计模式,单例模式,适配器模式 适配器模式了解吗?策略和适配器模式有什么区别,你为什么选择用策略模式而不是适配器原因是什么? ### 策略模式 你使用了策略模式,为什么不用模板方法模式,这两个有什么区别?设计模式需要看看吧 ### 模板模式 对于模板模式的理解、应用场景,你在项目中是怎么使用的。 ### 责任链模式 责任链模式 策略模式????? ### 生产者消费者模式 生产者和消费者模式应用场景 ### MVC 模式 mvc模式是什么 (这里确定了面试官看我简历了,因为在简历上的项目有写到根据mvc模式做项目,具体介绍了下各自的工作) # 重构 / 代码整洁 ## 《重构(第2版) : 改善既有代码的设计》 9.2(516人评价) [美] Martin Fowler / 熊节 / 林从羽 / 人民邮电出版社 / 2019-3 / 168.00元 https://book.douban.com/subject/30468597/ ## 《代码整洁之道》 8.6(2133人评价) [美]Robert C. Martin / 韩磊 / 人民邮电出版社 / 2010-1-1 / 59.00元 https://book.douban.com/subject/4199741/ # 规范 ## 《Effective Java 中文版(原书第3版)》 8.7(372人评价) [美] Joshua Bloch / 俞黎敏 / 机械工业出版社 / 2018-12-11 / 119元 https://book.douban.com/subject/30412517/ ## 《阿里巴巴 Java 开发手册(黄山版)》 最新版本:黄山版(2022.2.3发布)1.7.1 https://github.com/alibaba/p3c 阿里巴巴Java开发手册(第2版) 8.9(36人评价) 杨冠宝 / 电子工业出版社 / 2020-9 / 45.00元 https://book.douban.com/subject/35218829/ 一、编程规约 (一)命名风格 (二)常量定义 (三)代码格式 (四)OOP 规约 (五)日期时间 (六)集合处理 (七)并发处理 (八)控制语句 (九)注释规约 (十)前后端规约 (十一)其它 二、异常日志 (一)错误码 (二)异常处理 (三)日志规约 三、单元测试 四、安全规约 五、MySQL 数据库 (一)建表规约 (二)索引规约 (三)SQL 语句 (四)ORM 映射 六、工程结构 (一)应用分层 (二)二方库依赖 (三)服务器 七、设计规约 附1:版本历史 附2:专有名词解释 附3:错误码列表 # 广告业务 ## 《计算广告:互联网商业变现的市场与技术》 8.6(1452人评价) 刘鹏 / 王超 / 人民邮电出版社 / 2015-9-1 / 69.00元 https://book.douban.com/subject/26596778/ # 推荐系统 ## 《深度学习推荐系统》 9.3(608人评价) 王喆 / 电子工业出版社 / 2020-3 / 108 https://book.douban.com/subject/35013197/ # 人工智能 接入 ChatGPT、文心一言、Stable Diffusion # 系统设计 ## 《System Design Interview》Second Edition 8.4(175人评价) Alex Xu / Independently published / 2020-6-4 / USD 28.00 https://book.douban.com/subject/35246417/ 第1章 从零到百万用户规模 第2章 粗略估计 第3章 系统设计面试的框架 第4章 设计一个限速器 第5章 设计一致性哈希 第6章 设计一个键值存储 第7章 在分布式系统里设计一个唯一 ID 生成器 第8章 设计一个 URL 缩短器 第9章 设计一个网络爬虫 第10章 设计一个通知系统 第11章 设计一个新闻推送系统 第12章 设计一个聊天系统 第13章 设计一个搜索自动补全系统 第14章 设计 Youtube 第15章 设计谷歌 Drive ## 《System Design Interview(Volumn 2)》 8.9(35人评价) Alex Xu / Sahn Lam / Byte Code LLC / 2022-3-11 / USD 40.00 https://book.douban.com/subject/35803094/ 第1章:周边服务 第2章:附近朋友 第3章:谷歌地图 第4章:分布式消息队列 第5章:性能指标监控和警告系统 第6章:广告点击事件聚合 第7章:旅馆预订系统 第8章:分布式邮件系统 第9章:类 S3 对象存储 第10章:实时游戏排行榜 第11章:支付系统 第12章:数字钱包 第13章:股票交易 ## 面试题(包含场景设计、项目优化) 设计一个网络的时候,需要考虑的因素 怎么不用经过很多层直接接收前端传阿里的东西;A用户登录,怎么保证他不读到B用户的信息?(拦截器,threadlocal类) 问我session那块,我的session共享是怎么做的,为什么这么做(面试官觉得我这么做没必要,跪),然后问session使用的过程,和cookie的关系 问了一个页面重定向的问题,问我一个页面自动跳转另一个页面怎么实现,我说了前端和后端都可以做跳转,然后问我各自的具体是怎么做的,这部分我没答好,没了解过这部分,然后问了301和302的区别,我只知道都是重定向,也没答好,(一个是临时的一个是永久的,我连这个都没答出来) 谈谈你对软件工程的理解,结合你所做的项目。 项目中的 SPI 机制,介绍一下原理以及你做了哪些改进 会怎么样设计项目的目录结构 ### 系统演进过程 单机系统演变为分布式系统,会涉及到哪些技术的调整?请从前面负载到后端详细描述。 一个单体的系统,用户线程从 1 开始增加到 1 万的并发,系统可能会在哪里崩溃,怎么解决,讲一下思考过程; ### 业务设计 开放性的系统设计,一个车票查询系统,对最短时间,最短开销进行求解,类似于12306的火车票购票系统 如何对用户画像标签做缓存 项目中如何处理终端之间的信息交互? (Web网页之间使用的WebSocket, 与手机的交互使用的自己用Netty实现的IM框架) 自己实现spring 的ioc怎么做 实现一个优先级队列 XML的解析怎么用什么解析的? 看你项目里做过 word 和 excel 的导出,是怎么实现的? 场景题:如何实现一个实时排序的游戏战力榜单 场景题:如何实现一个竞技场挑战功能,考虑高并发 爬虫有了解吗?大学的时候写过爬虫没有?如何构建一个爬虫代理服务? 设计一个考核系统,数据库如何设计(这种题之前真不会,乱答一通) #### 秒杀 秒杀场景设计 设计一个秒杀系统? 实现一个秒杀系统 秒杀场景设计,应付突然的爆发流量 具体的秒杀细节怎么做的?秒杀的核心技术在哪儿?你怎么保证的? 秒杀商品的库存放在哪里,如何保证redis和DB的一致性 不使用缓存设计一个秒杀系统如何优化(说了下主从架构、读写分离 + MQ) 秒杀系统?十个东西是十一个人抢,怎么保证不出问题?? 秒杀平台怎样预减库存,MQ 有什么作用 秒杀平台的优化,如何实现更高并发量、高可用性 秒杀的流程 ##### 库存扣减、超卖 如何解决超卖现象 防止超卖 超卖怎么解决? 怎样防止超卖现象 MQ 实现了异步但订单仍然有可能出现超卖,怎么解决 怎么防止超卖 超卖场景中怎么解决 MySQL 的写入压力,说一下你的解决方案; Redis 预减库存的实现 Redis 扣减库存了,但最后没有发货成功的情况会出现吗?如何处理? #### 登录 登录账号的流程 你项目的登录功能,输入用户名和密码,用户提交登录请求到服务端,说说处理请求的详细过程,包括网络层面的。(tcp建立连接、断开连接的过程+业务处理请求的过程) 项目中登陆模块怎么做的? 登录功能考虑过安全问题吗,你怎么解决的。 写一个简单的登录业务(MVC 模型) ##### JWT 为什么要用 jwt?有什么优点? jwt 的组成?为什么要用 jwt? jwt 从 cookie 到 jwt 解决了什么,cookie 是干什么的。 如何踢人下线?使用 jwt 这种 ##### 单点登录 单点登录你们说用 redis 解决,那这样 redis 访问压力比较大,你能从降低 redis 压力和架构设计层面讲讲如何解决这个问题呢?JWT 听说过吗? 你做单点登录,你是如何实现一处登录处处可访问的?如何踢下线?我说识别用户设备或者访问 ip,记录不同的设备来源。他说你不是用 token 吗?我说让旧 token 失效吗?他说大概这个意思你可以继续往下说 单点登录 如果不用这个单点登录,怎么管理 session ##### 多点登录 多点登陆怎么实现 ##### 权限控制 介绍项目,权限控制怎么做的; 场景题:设计一个权限系统 问项目:登录鉴权是怎么做的?为什么采用 JWT 的方式?有什么好处?如何防止 Token 被篡改? 设计一个权限系统 #### 订单 项目中订单模块怎么做的? 订单延时取消实现 订单延时取消实现 超时未支付(延迟队列主要是依靠死信队列) 假设一个场景,支付系统和订单系统,支付失败后订单系统怎么知道失败(感觉是分布式事务的一致性,我开始问他是两个系统吗?是分布式吗?他也不回答我,后面复述一遍问题我又问了一遍分布式事务的一致性,他才说是的) ##### 订单号 生成订单号的实现 #### 对账 业务的两张表如何对账的设计题……都是围绕 MySQL 做的 #### 定时任务 谈谈网上常见的任务调度器和定时器的区别 为什么不使用springboot自带的定时器 如何实现定时顺序触发的 ##### XXL-job XXL-Job 二次分片怎么做的?有些什么问题?怎么去优化的? XXL-Job 怎么封装的?任务跑失败了怎么办? #### 消息队列 设计一个 MQ 会有哪些特性(解耦、削峰、异步? ) MQ 如何设计才能达到容纳大量请求的存储量(循环?) #### 文件上传 现有一多文件上传需求,要求在 5M 带宽的服务器上上传超过 100 张图片,并且保证用户可以尽快看到上传结果。 大文件怎么处理的?使用文件流,有没有考虑断点续传? #### 短 URL 短URL实现 #### 网关 项目中网关的具体实现及作用 #### RPC 设计rpc框架考虑什么 Rpc 远程调用的流程 ##### 序列化 项目中的序列化方案,为什么序列化,你都了解哪些常用的序列化方法。 你项目中使用了 Kyro 序列化,优点你提到了,缺点了解吗 你自定义的序列化方式偏向于 Json 还是 Protobuf?这俩序列化有啥区别?和你的自定义序列化性能差异对比?怎么解决分包粘包?怎么注册注销?讲一下你的 SPI 实现依赖倒置?动态桩讲一下?可以客户端指定调用 ip 吗 ### 接口设计 线上有个接口速度慢,但是本地测试环境和线上环境是一样的,数据量也是一样,接口速度却很快。怎么排查 对外接口怎么保证安全,光是md5签名加密不行,还有其他方法吗 怎么设计一个安全的对外接口 让你设计一个接口你怎么设计? 问项目:如何防止表单重复提交? #### RESTful 什么是 RESTful 风格 为什么要用 restful 风格? restful 具体是干什么的? RESTful 风格?jwt 的具体说说? #### 幂等性 幂等性怎么保证?保证幂等性的方案`【2次】` ### 安全性 项目中的网页有没有安全机制?防sql注入等等 再来问问网络安全吧,Sql注入… 你所了解的所有安全性问题以及解决思路 json数据裸奔 外网有一些攻击,除了阿里云的保护,你还要做哪些防御么 #### 加密 常见的加密算法有哪些? 加密方式 非对称传输秘钥,对称传输数据 常见的加密算法~~ 密码采用哪种加密方式(MD5),你为什么要用这种方法,这种方式又不安全的地方,你会怎么解决它。 你在工作中做的加密解密组件是用什么算法加密解密?了解 AES 和 DES 加密算法吗? 项目:对称加密和非对称加密 #### 监控 线上的服务器监控指标,你认为哪些指标是最需要关注的?为什么? 项目监控部分设计 ### 高并发 如果系统流量突然上升 10 倍,怎么处理?100 倍呢? 库存有 10 万,100 万个用户来抢购,系统的瓶颈在哪里、怎么优化系统; 广告推荐项目高并发时的机器负载情况?如何高并发?ThreadLocal 日志怎么设计的?硬编码如何优化? 如何设计高并发系统(我自己答的:NIO 优化请求 IO、多层缓存优化数据库瓶颈、边缘业余异步处理或者扔到消息队列) 假设你现在有一个高并发的服务,你要从那些地方去考虑。(楼主不咋会,又从高并发扯到了架构的学习。) 让你设计一个高性能的购物网站,你怎么设计,从前端到后台,到数据库 项目中的可用性,性能,扩展性 如何提升 如何设计出并发量更大的系统 如何去衡量这个系统的性能? #### 扩展性 项目中的有状态服务怎么做到可横向扩展?项目中redis和mongodb的作用,为啥不能只用mongodb? #### 压测 项目中 Jmeter 压测是怎么做的 压测的时候前几次值一般偏低,知道是什么原因吗?(懒加载) 压测达不到预期,如何检查及优化? 性能压测怎么做的,性能如何? #### 场景题 多个人给一个主播打赏怎么设计?我说是一个高并发写的操作,对一个记录频繁写,分批操作,比如 10 个记录 操作一次。他说这个方案可以 但是有 100 个记录 怎么去做一个一个操作呢?我说如果在一个进程可以 分多个线程分批。他说还是不够快 我们是用的 MQ 多个消费者 一个打赏就发一个消息 假设有一个 10W 的数据请求,你会有什么方法来实现这些数据的增删改查? ### 高可用 如何去提升系统的可用性,性能,扩展性,伸缩性,等等, LVS,反向代理,集群,异步,缓存等等 #### CPU CPU 利用率的含义及解释 如何保证某台机器上 CPU 利用率保持在 60% 死循环的 CPU 利用率为多少 有一个程序占用大量 cpu,并且一直运行,怎么排查? ### 大数据量 你的项目里存了多少数据?如果让你存1亿条数据你怎么办?(答:分库分表) 分库分表会遇到什么问题?怎么解决?(答:分布式id问题 用redis,雪花算法解决) #### 设计题 有1亿用户和1亿短视频,设计一个实时的日排行榜,展示top100个热门视频,热门视频的统计方法为统计视频的实时观看用户数,根据用户数排行。设计方案后还要求计算使用多少内存,没算出来,心态崩了。 有一个包含 100 亿个 URL 的大文件,假设每个 URL 占用 64B,请找出其中所有重复的 URL。 检查手机号是否存在于百万数据电话号中 1亿个手机号码,判断重复 10w的阶乘怎么算 100G文件,每行是一个长整数,总行数为N 主机内存1G 结果:输出最大的K个数 (K << N) 这道题千万别被100G迷惑,想着分文件之类的… 维护大小为k的最小堆,如果当前元素大于堆顶元素,入堆。这样,堆中始终存储的是到当前为止,最大的k个数。 大小为k的最小堆会一直存在内存中,因为K << N,所以不考虑内存不够的情况 找到两个存放了1亿多字符串的文件的相同的字符串 给定一个无序的大数组,如何找出中位数?如果有100亿个数,内存只有 4G 呢? 两个文件,分别存放50亿个URL,每个URL60个字节,内存4G,找两个文件并集。 一个文件,存放45亿已排好序的32位int整数,找出一个出现次数大于一次的整数,找出一个就行。 问了一个大数据判重的题,只有一台机器,数据是int范围,给了3个思路,一个是hash切分大文件为小文件,对小文件用hashset去做判重,还有用BitSet,单机大概500mb内存可以解决,最后一个是用布隆过滤器解决,内存利用更小。 然后问我布隆过滤器的误差怎么解决,我说可以加大hash数量或者hash的范围,还有可以用多个独立的不同的布隆过滤器来解决。 场景题:笔试题是统计 txt 文件每个单词的出现次数,这里限定条件,文件大小为 1T,但是内存只有 256MB,如何优化这个方案把数据统计出来?(怎么统计?中间数据存哪里?内存溢出?可以使用磁盘空间。) 场景题:亿级别黑名单、短链接,你考虑使用什么数据结构?布隆过滤器、前缀树。其中布隆过滤器问了基本的原理和实现方式 问场景题:几十G的数据都是URL,内存空间只有1G,磁盘空间无限,统计频率最高的Top 10; 100g 的文件,每行一个 url,机器 4g 的内存,统计出 top100 的 url 并输出为一个新的文件。 ### 灰度发布 看你项目中做了灰度发布?介绍一下你是怎么做的?这个要从实际项目场景出发了,灰度策略,灰度的范围、粒度,哪个层面实现的。 看你在灰度的时候还做了数据库双向同步?介绍一下?因为新功能和老功能都要用的啊, 并且 2 套系统都是要用的,数据如果不一致,就会造成问题。基于阿里云 DTS 做的。 ### 测试 功能性测试是怎么做的?(比如效率,结果) 代码的异常测试做了吗?做了大量的测试来测试异常吗? 集成测试怎么做的? ### 多级缓存 多级缓存是怎么做的?为什么还要再多加一层本地缓存呢?对性能提升大吗?QPS 提升多少? 分布式缓存设计 多级缓存如何实现一致性 ### 技术选型 项目中 Redis 和 RabbitMQ 的作用是什么 ### 开放题 比如估算一下北京有多少个ipad 开放题,服务器1上有40T的数据,服务器2上有一个任务需要这些数据,在网络带宽限制的情况下,怎么把数据快速传到服务器2上 # 分布式系统 ## 《分布式系统 : 概念与设计(原书第5版)》 7.3(77人评价) (英)George Coulouris / Jean Dollimore / Tim Kindberg / Gordon Blair / 金蓓弘 / 马应龙 / 机械工业出版社 / 2013-3 https://book.douban.com/subject/21624776/ ## 《数据密集型应用系统设计(中文版)》 9.7(1730人评价) Martin Kleppmann / 赵军平 / 李三平 / 吕云松 / 耿煜 / 中国电力出版社 / 2018-9-1 / 128 https://book.douban.com/subject/30329536/ ## 面试题 怎么理解分布式系统? 了解分布式系统吗?说说你的理解 分布式系统又了解吗,分布式的特点,你会怎么搭建分布式系统,集群了解吗,集群的优点讲讲,你会怎么用集群。 2PC 和 3PC、一致性 Hash 分布式就不多说了,什么 base 理论,raft 协议都需要知道。另外就是分布式锁、分布式事务相关的一些知识,大家用到过的可以讲讲,比较加分,没用到过的面试官一般也不会问到 了解过蚂蚁的 oceanbase 吗?(OceanBase 是蚂蚁集团自主研发的企业级分布式关系数据库,已连续 11 年稳定支撑双 11,刷新了 TPC-C 和 TPC-H 的世界纪录。OceanBase 致力于解决海量数据管理的核心 …) 分布式存储了解过吗?云计算的知识了解吗?容器用过吗?大数据套件了解过吗?ELK 了解过吗?看过开源架构系统的代码吗?(这全是知识盲区啊。。。) ### CAP 理论 分布式的cap理论 cap中的c和acid中的c有区别吗 CAP理论以及典型运用 CAP知道吗? 说一下。 网络分区了解吗,CAP 理论 #### 一致性 服务之间的数据一致性怎么做?业务上怎么保证? 分布式结构,怎么保证数据一致性?如果从服务器出问题了怎么办? 分布式一致性讲一讲 分布式数据一致性 怎么理解最终一致性,有哪些实现方案 分布式系统的一致性怎么保证的?(不会) 怎么保证集群的一致性? #### BASE 理论 CAP 和 BASE 理论,以及个人的理解 CAP 和 BASE BASE 特性以及实现方式 ### 协议 Paxos 算法了解吗?介绍 RAFT 和 ZAB,以及它们之间的区别?会有脑裂问题吗?为什么? 分布式协议PAXOS/zab/raft都说下原理和区别; 聊聊 paxo 和 raft 算法 #### RAFT 说下raft协议,有看过具体实现吗? 说说etcd的raft实现 raft协议,成员变更的流程,怎么解决脑裂? 说说raft协议? 说一下Raft和Paxos协议的区别 分布式协议有哪些,Raft协议 RAFT 脑裂、一致性 ### 微服务 单机和微服务的区别,微服务有什么问题?数据一致性问题怎么解决?幂等问题怎么解决? soa和微服务的区别? ### 分布式 session 分布式,session怎么解决 ### 分布式事务 分布式事务怎么做的 分布式事务?(不太了解、只记得阿里的seata,就开始胡说了)`【2次】` 分布式事务几种实现方式,讲讲本地消息表、尽最大努力通知、TCC。你们选用的是什么?AT 有什么问题? TCC?二阶段提交,三阶段提交? 事务,分布式事务, 如何实现分布式事务, 两阶段提交,(过程) 2PC 和 3PC 分布式事务 分布式事务 上个面试官问你分布式你说的不会,后来学习了吗?你怎么理解分布式事务和事务的区别? 分布式电商系统会遇到哪些分布式事务的问题? 分布式事务了解吗?说一下怎么实现的分布式事务?还有没有其他的解决方案? ### 分布式锁 分布式锁怎么实现,redis实现方式死锁怎么解决 我:数据库实现,redis实现,zookeeper实现。redis加上一个失效时间 分布式锁怎么实现? 分布式锁的实现(ZK、Redis)`【2次】` 分布式,分布式锁的实现 分布式锁的实现方式,zk实现和redis实现哪个比较好 有用过分布式锁吗? zk,db,redis 锁怎么选型 ### 分布式缓存 分布式缓存 #### 一致性哈希 一致性hash和普通hash的区别? 一致性hash解决了什么问题?遇到不均衡的场景要怎么做? 一致性哈希`【2次】` 一次性hash,大致是想说如何最小的代价,实现在hash分发请求到服务器时,出现该台服务器不能存放的情形(雪花算法) 讲一讲一致性哈希 一致性哈希 一致性哈希的原理,虚拟结点 一致性哈希算法详细介绍 ### 分布式 id 怎么设计分布式唯一键?(雪花算法,数据库id自增,分段缓存) 分布式系统需要一个唯一的 ID 生成器,怎么设计?(没了解过分布式的内容,答得也不好,自己想的。)又扯到了数据库的读写分离以及怎么实现。 雪花算法、分布式锁 # 架构 ## 《凤凰架构》开源 the-fenix-project 9.2(660人评价) 周志明 / 机械工业出版社 / 2021-6-30 / 99.00 https://book.douban.com/subject/35492898/ 3 探索起步 3.2 技术演示工程 3.2.1 前端工程 3.2.2 单体架构:Spring Boot 3.2.3 微服务:Spring Cloud 3.2.4 微服务:Kubernetes 3.2.5 服务网格:Istio 3.2.6 无服务:AWS Lambda 4 演进中的架构 4.1 服务架构演进史 4.1.1 原始分布式时代 4.1.2 单体系统时代 4.1.3 SOA 时代 4.1.4 微服务时代 4.1.5 后微服务时代 4.1.6 无服务时代 5 架构师的视角 5.1 访问远程服务 5.1.1 远程服务调用 5.1.2 REST 设计风格 5.2 事务处理 5.2.1 本地事务 5.2.2 全局事务 5.2.3 共享事务 5.2.4 分布式事务 5.3 透明多级分流系统 5.3.1 客户端缓存 5.3.2 域名解析 5.3.3 传输链路 5.3.4 内容分发网络 5.3.5 负载均衡 5.3.6 服务端缓存 5.4 架构安全性 5.4.1 认证 5.4.2 授权 5.4.3 凭证 5.4.4 保密 5.4.5 传输 5.4.6 验证 6 分布式的基石 6.1 分布式共识算法 6.1.1 Paxos 6.1.2 Multi Paxos 6.1.3 Gossip 协议 6.2 从类库到服务 6.2.1 服务发现 6.2.2 网关路由 6.2.3 客户端负载均衡 6.3 流量治理 6.3.1 服务容错 6.3.2 流量控制 6.4 可靠通讯 6.4.1 零信任网络 6.4.2 服务安全 6.5 可观测性 6.5.1 事件日志 6.5.2 链路追踪 6.5.3 聚合度量 7 不可变基础设施 7.1 从微服务到云原生 7.2 虚拟化容器 7.2.1 容器的崛起 7.2.2 以容器构建系统 7.2.3 以应用为中心的封装 7.3 容器间网络 7.3.1 Linux 网络虚拟化 7.3.2 容器网络与生态 7.4 持久化存储 7.4.1 Kubernetes 存储设计 7.4.2 容器存储与生态 7.5 资源与调度 7.6 服务网格 7.6.1 透明通信的涅槃 7.6.2 服务网格与生态 8 技术方法论 8.1 向微服务迈进 8.1.1 目的:微服务的驱动力 8.1.2 前提:微服务需要的条件 8.1.3 边界:微服务的粒度 8.1.4 治理:理解系统复杂性 9 随笔文章 9.1 2020年 9.1.1 Graal VM 9.1.2 QCon2020 主题演讲:云原生时代,Java 的危与机 9.2 2021年 9.2.1 OpenJDK with CLion 懒人包 9.2.2 程序员之路 9.2.3 Fenix-CLI:交互式云原生客户端 10 附录 10.1 部署环境 10.1.1 部署 Docker CE 容器环境 10.1.2 部署 Kubernetes 集群 10.2 部署 Istio 10.3 部署 Elastic Stack 10.4 部署 Prometheus ## 《大型分布式网站架构设计与实践》 6.2(185人评价) 陈康贤 / 电子工业出版社 / 2014-9-1 / 79.00元 https://book.douban.com/subject/25972633/ 第1章 面向服务的体系架构(SOA) 1.1 基于 TCP 协议的 RPC 1.2 基于 HTTP 协议的 RPC 1.3 服务的路由和负载均衡 1.4 HTTP 服务网关 第2章 分布式系统基础设施 2.1 分布式缓存 2.1.3 分布式 session 2.2 持久化存储 2.2.2 HBase 2.2.3 Redis 2.3 消息系统 2.4 垂直化搜索引擎 2.5 其他基础设施 第3章 互联网安全架构 3.1 常见的 Web 攻击手段 3.1.1 XSS 攻击 3.1.2 CRSF 攻击 3.1.3 SQL 注入攻击 3.1.4 文件上传漏洞 3.1.5 DDoS 攻击 3.1.6 其它攻击手段 3.2 常用的安全算法 3.2.1 数字摘要 3.2.2 对称加密算法 3.2.3 非对称加密算法 3.2.4 数字签名 3.2.5 数字证书 3.3 摘要认证 3.4 签名认证 3.5 HTTP 协议 3.6 OAuth 协议 第4章 系统稳定性 4.1 在线日志分析 4.2 集群监控 4.3 流量控制 4.4 性能优化 4.5 Java 应用故障的排查 第5章 数据分析 5.1 日志收集 5.2 离线数据分析 5.3 流式数据分析 5.4 数据同步 5.5 数据报表 ## 《大型网站技术架构:核心原理与案例分析》 7.9(1872人评价) 李智慧 / 电子工业出版社 / 2013-9-1 / 59.00元 https://book.douban.com/subject/25723064/ 第1篇 概述 1 大型网站架构演化 1.1 大型网站软件系统的特点 1.2 大型网站架构演化发展历程 1.2.1 初始阶段 1.2.2 应用服务和数据服务分离 1.2.3 使用缓存改善网站性能 1.2.4 使用应用服务器集群改善网站的并发处理能力 1.2.5 数据库读写分离 1.2.6 使用反向代理和 CDN 加速网站响应 1.2.7 使用分布式文件系统和分布式数据库系统 1.2.8 使用 NoSQL 和搜索引擎 1.2.9 业务拆分 1.2.10 分布式服务 1.3 大型网站架构演化的价值观 1.4 网站架构设计误区 2 大型网站架构模式 2.1 网站架构模式 2.1.1 分层 2.1.2 分割 2.1.3 分布式 2.1.4 集群 2.1.5 缓存 2.1.6 异步 2.1.7 冗余 2.1.8 自动化 2.1.9 安全 2.2 架构模式在新浪微博的应用 3 大型网站核心架构要素 3.1 性能 3.2 可用性 3.3 伸缩性 3.4 扩展性 3.5 安全性 第2篇 架构 4 瞬时响应:网站的高性能架构 4.1 网站性能测试 4.1.2 性能测试指标 4.1.3 性能测试方法 4.1.4 性能测试报告 4.1.5 性能优化策略 4.2 Web 前端性能优化 4.2.1 浏览器访问优化 4.2.2 CDN 加速 4.2.3 反向代理 4.3 应用服务器性能优化 4.3.1 分布式缓存 4.3.2 异步操作 4.3.3 使用集群 4.3.4 代码优化 4.4 存储性能优化 4.4.1 机械硬盘 vs 固态硬盘 4.4.2 B+树 vs LSM 树 4.4.3 RAID vs HDFS 5 万无一失:网站的高可用架构 5.1 网站可用性的度量与考核 5.1.1 网站可用性度量 5.1.2 网站可用性考核 5.2 高可用的网站架构 5.3 高可用的应用 5.3.1 通过负载均衡进行无状态服务的失效转移 5.3.2 应用服务器集群的 Session 管理 5.4 高可用的服务 5.5 高可用的数据 5.5.1 CAP 原理 5.5.2 数据备份 5.5.3 失效转移 5.6 高可用网站的软件质量保证 5.6.1 网站发布 5.6.2 自动化测试 5.6.3 预发布验证 5.6.4 代码控制 5.6.5 自动化发布 5.6.6 灰度发布 5.7 网站运行监控 5.7.1 监控数据采集 5.7.2 监控管理 6 永无止境:网站的伸缩性架构 6.1 网站架构的伸缩性设计 6.1.1 不同功能进行物理分离实现伸缩 6.1.2 单一功能通过集群规模实现伸缩 6.2 应用服务器集群的伸缩性设计 6.2.1 HTTP 重定向负载均衡 6.2.2 DNS 域名解析负载均衡 6.2.3 反向代理负载均衡 6.2.4 IP 负载均衡 6.2.5 数据链路层负载均衡 6.2.6 负载均衡算法 6.3 分布式缓存集群的伸缩性设计 6.3.3 分布式缓存的一致性 Hash 算法 6.4 数据存储服务器集群的伸缩性设计 6.4.1 关系数据库集群的伸缩性设计 6.4.2 NoSQL 数据库的伸缩性设计 7 随需应变:网站的可扩展架构 7.1 构建可扩展的网站架构 7.2 利用分布式消息队列降低系统耦合性 7.2.1 事件驱动架构 7.2.2 分布式消息队列 7.3 利用分布式服务打造可复用的业务平台 7.3.1 Web Service 与企业级分布式服务 7.3.2 大型网站分布式服务的需求与特点 7.3.3 分布式服务框架设计 7.4 可扩展的数据结构 7.5 利用开发平台建设网站生态圈 8 固若金汤:网站的安全架构 8.1 道高一尺魔高一丈的网站应用攻击与防御 8.1.1 XSS 攻击 8.1.2 注入攻击 8.1.3 CSRF 攻击 8.1.4 其它攻击和漏洞 8.1.5 Web 应用防火墙 8.1.6 网站安全漏洞扫描 8.2 信息加密技术及密钥安全管理 8.2.1 单向散列加密 8.2.2 对称加密 8.2.3 非对称加密 8.2.4 密钥安全管理 8.3 信息过滤与反垃圾 8.3.1 文本匹配 8.3.2 分类算法 8.3.3 黑名单 8.4 电子商务风险控制 8.4.1 风险 8.4.2 风控 第3篇 案例 9 淘宝网的架构演化案例分析 10 维基百科的高性能架构设计分析 11 海量分布式存储系统 Doris 的高可用架构设计分析 11.1 分布式存储系统的高可用架构 11.2 不同故障情况下的高可用解决方案 11.2.1 分布式存储系统的故障分类 11.2.2 正常情况下系统访问结构 11.2.3 瞬时故障的高可用解决方案 11.2.4 临时故障的高可用解决方案 11.2.5 永久故障的高可用解决方案 12 网购秒杀系统架构设计案例分析 12.1 秒杀活动的技术挑战 12.2 秒杀系统的应对策略 12.3 秒杀系统架构设计 13 大型网站典型故障案例分析 13.1 写日志也会引发故障 13.2 高并发访问数据库引发的故障 13.3 高并发情况下锁引发的故障 13.4 缓存引发的故障 13.5 应用启动不同步引发的故障 13.6 大文件读写独占磁盘引发的故障 13.7 滥用生成环境引发的故障 13.8 不规范的流程引发的故障 13.9 不好的编程习惯引发的故障 第4篇 架构师 14 架构师领导艺术 15 网站架构师职场攻略 16 漫话网站架构师 附录 A 大型网站架构技术一览 附录 B Web 开发技术发展历程 ## 《大型网站系统与 Java 中间件实践》 7.9(624人评价) 曾宪杰 / 电子工业出版社 / 2014-4-24 / 65.00 https://book.douban.com/subject/25867042/ 第1章 分布式系统介绍 1.1 初识分布式系统 1.1.1 分布式系统的定义 1.1.2 分布式系统的意义 1.2 分布式系统的基础知识 1.2.1 组成计算机的 5 要素 1.2.2 线程与进程的执行模式 1.2.3 网络通信基础知识 1.2.4 如何把应用从单机扩展到分布式 1.2.5 分布式系统的难点 第2章 大型网站及其架构演进过程 2.1 什么是大型网站 2.2 大型网站的架构演进 2.2.1 用 Java 技术和单机来构建网站 2.2.2 从一个单机的交易网站说起 2.2.3 单机负载告警,数据库与应用分离 2.2.4 应用服务器负载告警,如何让应用服务器走向集群 2.2.5 数据读压力变大,读写分离吧 2.2.6 弥补关系型数据库的不足,引入分布式存储系统 2.2.7 读写分离后,数据库又遇到瓶颈 2.2.8 数据库问题解决后,应用面对的新挑战 2.2.9 初识消息中间件 第3章 构建 Java 中间件 3.1 Java 中间件的定义 3.2 构建 Java 中间件的基础知识 3.2.1 跨平台的 Java 运行环境——JVM 3.2.2 垃圾回收与内存堆布局 3.2.3 Java 并发编程的类、接口和方法 3.2.4 动态代理 3.2.5 反射 3.2.6 网络通信实现选择 3.3 分布式系统中的 Java 中间件 第4章 服务框架 4.1 网络功能持续丰富后的困境与应对 4.2 服务框架的设计与实现 4.2.1 应用从集中式走向分布式所遇到的问题 4.2.2 透过示例看服务框架原型 4.2.3 服务调用端的设计与实现 4.2.4 服务提供端的设计与实现 4.2.5 服务升级 4.3 实战中的优化 4.4 为服务化护航的服务治理 4.5 服务框架与 ESB 的对比 第5章 数据访问层 5.1 数据库从单机到分布式的挑战和应对 5.1.1 从应用使用单机数据库开始 5.1.2 数据库垂直/水平拆分的困难 5.1.3 单机变为多机后,事务如何处理 5.1.4 多级的 Sequence 问题与处理 5.2 数据访问层的设计与实现 5.2.1 如何对外提供数据访问层的功能 5.2.2 按照数据层流程的顺序看数据层设计 5.2.3 独立部署的数据访问层实现方式 5.2.4 读写分离的挑战和应对 第6章 消息中间件 6.1 消息中间件的价值 6.1.1 消息中间件的定义 6.1.2 透过示例看消息中间件对应用的解耦 6.2 互联网时代的消息中间件 6.2.1 如何解决消息发送一致性 6.2.2 如何解决消息中间件与使用者的强依赖问题 6.2.3 消息模型对消息接收的影响 6.2.4 消息订阅者订阅消息的方式 6.2.5 保证消息可靠性的做法 6.2.6 订阅者视角的消息重复的产生和应对 6.2.7 消息投递的其它属性支持 6.2.8 保证顺序的消息队列的设计 6.2.9 Push 和 Pull 方式的对比 第7章 软负载中心与集中配置管理 7.1 初识软负载中心 7.2 软负载中心的结构 7.3 内容聚合功能的设计 7.4 解决服务上下线的感知 7.5 软负载中心的数据分发的特点的设计 7.5.1 数据分发与消息订阅的区别 7.5.2 提升数据分发性能需要注意的问题 7.6 针对服务化的特性支持 7.6.1 软负载数据分组 7.6.2 提供自我感知以外的上下线开关 7.6.3 维护管理路由规则 7.7 从单机到集群 7.7.1 数据统一管理方案 7.7.2 数据对等管理方案 7.8 集中配置管理中心 7.8.1 客户端实现和容灾策略 7.8.2 服务端实现和容灾策略 7.8.3 数据库策略 第8章 构建大型网站的其它要素 8.1 加速静态内容访问速度的 CDN 8.2 大型网站的存储支持 8.2.1 分布式文件系统 8.2.2 NoSQL 8.2.3 缓存系统 8.3 搜索系统 8.3.1 爬虫问题 8.3.2 倒排索引 8.3.3 查询预处理 8.3.4 相关度计算 8.4 数据计算支撑 8.5 发布系统 8.6 应用监控系统 8.7 依赖管理系统 8.8 多机房问题分析 8.9 系统容量规划 8.10 内部私有云 ## 《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》 8.0(1161人评价) 钟华 / 机械工业出版社 / 2017-4-1 / 79 https://book.douban.com/subject/27039508/ 第一部分 引子 第1章 阿里巴巴集团中台战略引发的思考 1.1 阿里巴巴共享业务事业部的发展史 1.2 企业信息中心发展的症结 第2章 构建业务中台的基础——共享服务体系 2.1 回归 SOA 的本质——服务重用 2.2 服务需要不断的业务滋养 2.3 共享服务体系是培育业务创新的土壤 2.4 赋予业务快速创新和试错能力 2.5 为真正发挥大数据威力做好准备 2.6 改变组织阵型会带来组织效能的提升 第二部分 共享服务体系搭建 第3章 分布式服务框架的选择 3.1 淘宝平台“服务化”历程 3.2 “中心化”与“去中心化”服务框架的对比 3.3 阿里巴巴分布式服务框架 HSF 3.4 关于微服务 第4章 共享服务中心建设原则 4.1 淘宝的共享服务中心概貌 4.2 什么是服务中心 4.3 服务中心的划分原则 第5章 数据拆分实现数据库能力线性扩展 5.1 数据库瓶颈阻碍业务的持续发展 5.2 数据库分库分表的实践 第6章 异步化与缓存原则 6.1 业务流程异步化 6.2 数据库事务异步化 6.3 事务与柔性事务 6.4 大促秒杀活动催生缓存技术的高度使用 第7章 打造数字化运营能力 7.1 业务服务化带来的问题 7.2 鹰眼平台的架构 7.3 埋点和输出日志 7.4 海量日志分布式处理平台 7.5 日志收集控制 7.6 典型业务场景 第8章 打造平台稳定性能力 8.1 限流和降级 8.2 流量调度 8.3 业务开关 8.4 容量压测及评估规划 8.5 全链路压测平台 8.6 业务一致性平台 第9章 共享服务中心对内和对外的协作共享 9.1 服务化建设野蛮发展带来的问题 9.2 共享服务平台的建设思路 9.3 共享服务平台与业务方协作 9.4 业务中心与前端应用协作 9.5 业务中心绩效考核 9.6 能力开放是构建生态的基础 第三部分 阿里巴巴能力输出与案例 第10章 大型央企互联网转型 10.1 项目背景 10.2 项目实施 10.3 客户收益 10.4 笔者感想 10.5 项目后记 第11章 时尚行业品牌公司互联网转型 11.1 项目背景 11.2 供应链的改造 11.3 基于 SCRM 的全渠道整合营销 11.4 小结 ## 《微服务架构设计模式》 9.0(657人评价) [美] 克里斯·理查森(Chris Richardson) / 喻勇 / 机械工业出版社 / 2019-5 / 139元 https://book.douban.com/subject/33425123/ ## 《从零开始学架构:照着做,你也能成为架构师》 8.2(319人评价) 李运华 / 电子工业出版社 / 2018-9-21 / 99 https://book.douban.com/subject/30335935/ 第1部分 概念和基础 第1章 架构基础 1.1 “架构”到底指什么 1.1.1 系统与子系统 1.1.2 模块与组件 1.1.3 框架与架构 1.1.4 重新定义架构 1.2 架构设计的目的 1.2.1 架构设计的误区 1.2.2 以史为鉴 1.2.3 架构设计的真正目的 1.3 复杂度来源 1.3.1 高性能 1.3.2 高可用 1.3.3 可扩展性 1.3.4 低成本 1.3.5 安全 1.3.6 规模 1.4 本章小结 第2章 架构设计原则 2.1 合适原则 2.2 简单原则 2.3 演化原则 2.4 本章小结 第3章 架构设计流程 3.1 有的放矢—识别复杂度 3.2 按图索骥—设计备选方案 3.3 深思熟虑—评估和选择备选方案 3.3.1 业务背景 3.3.2 备选方案设计 3.3.3 备选方案360度环评 3.4 精雕细琢—详细方案设计 3.5 本章小结 第2部分 高性能架构模式 第4章 存储高性能 4.1 关系数据库 4.1.1 读写分离 4.1.2 分库分表 4.1.3 实现方法 4.2 NoSQL 4.2.1 K-V存储 4.2.2 文档数据库 4.2.3 列式数据库 4.2.4 全文搜索引擎 4.3 缓存 4.3.1 缓存穿透 4.3.2 缓存雪崩 4.3.3 缓存热点 4.4 本章小结 第5章 计算高性能 5.1 单服务器高性能 5.1.1 PPC 5.1.2 prefork 5.1.3 TPC 5.1.4 prethread 5.1.5 Reactor 5.1.6 Proactor 5.2 集群高性能 5.2.1 负载均衡分类 5.2.2 负载均衡架构 5.2.3 负载均衡的算法 5.3 本章小结 第3部分 高可用架构模式 第6章 CAP 6.1 CAP理论 6.1.1 一致性(Consistency) 6.1.2 可用性 6.1.3 分区容忍性(Partition Tolerance) 6.2 CAP应用 6.2.1 CP—Consistency/Partition Tolerance 6.2.2 AP—Availability/Partition Tolerance 6.3 CAP细节 6.4 ACID、BASE 6.4.1 ACID 6.4.2 BASE 6.5 本章小结 第7章 FMEA 7.1 FMEA介绍 7.2 FMEA方法 7.3 FMEA实战 7.4 本章小结 第8章 存储高可用 8.1 主备复制 8.1.1 基本实现 8.1.2 优缺点分析 8.2 主从复制 8.2.1 基本实现 8.2.2 优缺点分析 8.3 主备倒换与主从倒换 8.3.1 设计关键 8.3.2 常见架构 8.4 主主复制 8.5 数据集群 8.5.1 数据集中集群 8.5.2 数据分散集群 8.5.3 分布式事务算法 8.5.4 分布式一致性算法 8.6 数据分区 8.6.1 数据量 8.6.2 分区规则 8.6.3 复制规则 8.7 本章小结 第9章 计算高可用 9.1 主备 9.2 主从 9.3 对称集群 9.4 非对称集群 9.5 本章小结 第10章 业务高可用 10.1 异地多活 10.1.1 异地多活架构 10.1.2 异地多活设计技巧 10.1.3 异地多活设计步骤 10.2 接口级的故障应对方案 10.2.1 降级 10.2.2 熔断 10.2.3 限流 10.2.4 排队 10.3 本章小结 第4部分 可扩展架构模式 第11章 可扩展模式 11.1 可扩展概述 11.2 可扩展的基本思想 11.3 可扩展方式 11.4 本章小结 第12章 分层架构 12.1 分层架构类型 12.2 分层架构详解 12.3 本章小结 第13章 SOA架构 13.1 SOA历史 13.2 SOA详解 13.3 本章小结 第14章 微服务 14.1 微服务历史 14.2 微服务与SOA的关系 14.3 微服务的陷阱 14.4 微服务佳实践 14.4.1 服务粒度 14.4.2 拆分方法 14.4.3 基础设施 14.5 本章小结 第15章 微内核架构 15.1 基本概念 15.2 设计关键点 15.3 OSGi架构简析 15.4 规则引擎架构简析 15.5 本章小结 第5部分 架构实战 第16章 消息队列设计实战 16.1 需求 16.2 设计流程 16.2.1 识别复杂度 16.2.2 设计备选方案 16.2.3 评估和选择备选方案 16.2.4 细化方案 16.3 本章小结 第17章 互联网架构演进 17.1 技术演进 17.1.1 技术演进的动力 17.1.2 淘宝 17.1.3 手机QQ 17.1.4 微信 17.2 技术演进的模式 17.3 互联网业务发展 17.3.1 业务复杂性 17.3.2 用户规模 17.3.3 量变到质变 17.4 本章小结 第18章 互联网架构模板 18.1 总体结构 18.2 存储层技术 18.2.1 SQL 18.2.2 NoSQL 18.2.3 小文件存储 18.2.4 大文件存储 18.3 开发层技术 18.3.1 开发框架 18.3.2 Web服务器 18.3.3 容器 18.4 服务层技术 18.4.1 配置中心 18.4.2 服务中心 18.4.3 消息队列 18.5 网络层技术 18.5.1 负载均衡 18.5.2 CDN 18.5.3 多机房 18.5.4 多中心 18.6 用户层技术 18.6.1 用户管理 18.6.2 消息推送 18.6.3 存储云与图片云 18.7 业务层技术 18.8 平台技术 18.8.1 运维平台 18.8.2 测试平台 18.8.3 数据平台 18.8.4 管理平台 18.9 本章小结 第19章 架构重构 19.1 有的放矢 19.2 合纵连横 19.2.1 合纵 19.2.2 连横 19.3 运筹帷幄 19.4 文武双全—项目管理+技术能力 19.5 本章小结 第20章 开源系统 20.1 选:如何选择一个开源项目 20.1.1 聚焦是否满足业务 20.1.2 聚焦是否成熟 20.1.3 聚焦运维能力 20.2 用:如何使用开源方案 20.2.1 深入研究,仔细测试 20.2.2 小心应用,灰度发布 20.2.3 做好应急,以防万一 20.3 改:如何基于开源项目做二次开发 20.3.1 保持纯洁,加以包装 20.3.2 发明你要的轮子 20.4 本章小结 ## 《架构整洁之道》 8.7(870人评价) 【美】Robert C. Martin(罗伯特 C. 马丁) / 电子工业出版社 / 2018-9 / 99.00元 https://book.douban.com/subject/30333919/ # 领域驱动设计 ## 《领域驱动设计:软件核心复杂性应对之道》 7.9(475人评价) [美] Eric Evans / 赵俐 / 盛海艳 / 刘霞 / 人民邮电出版社 / 2016-6-1 / 69 https://book.douban.com/subject/26819666/ ## 《领域驱动设计精粹》 7.8(147人评价) 【美】Vaughn Vernon(沃恩·弗农) / 覃宇 / 笪磊 / 电子工业出版社 / 2018-9 / 65.00元 https://book.douban.com/subject/30333944/ ## 《领域特定语言》 8.1(105人评价) Martin Fowler / ThoughtWorks中国 / 机械工业出版社 / 2013-3 / 89.00元 https://book.douban.com/subject/21964984/ ## 《函数响应式领域建模》 7.7(39人评价) 【美】Debasish Ghosh / 李源 / 电子工业出版社 / 2018-1 / 79 https://book.douban.com/subject/27605361/ ## 面试题 看你熟悉 DDD 架构模式,介绍一下?大致介绍一下领域驱动设计,概念,聚合,聚合根,领域,值对象等等 你认为在你做的项目场景中属于哪一个域?上下游分别会以什么状态进入你当前项目的领域?问的太抽象了,从要从领域职责进行划分来回答,什么职责对应什么域,上游域对象存在的状态当前领域对象职责,太抽象了问题。 你认为 DDD 的优势和劣势?主要从 MVC 架构模式对比,从面向对象角度出发,贫血模型与充血模型的优缺点。MVC 更容易理解,DDD 更难理解,学习成本较高。 报表 DSL 优化,享元模式优化过程,优化效果怎么样? # 反应式/响应式编程 ## 《反应式设计模式》 8.2(50人评价) Roland Kuhn / Brian Hanafee / Jamie Allen / 何品 / 邱嘉和 / 王石冲 / 林炜翔审校 / 清华大学出版社 / 2019-1-1 / 9 https://book.douban.com/subject/30417742/ ## 《反应式 Web 应用开发》 (评价人数不足) [奥] 曼努埃尔·伯恩哈特(Manuel Bernhardt) / 张卫滨 / 人民邮电出版社 / 2018-11 / 69.00 https://book.douban.com/subject/30354711/ # 数据结构和算法 ## 面试题 斐波拉契数列非递归实现 写了一道 LeetCode 原题,交换链表节点。 白板编程:顺时针打印矩阵 白板编程:二叉树两个节点的距离 最后算法题直接给了力扣第五题最大回文子串。我自己实现的时候还忘记要找偶数中心的回文串的逻辑了……马拉车也一时半会写不出来,就只能跟面试官说明一下。 几个算法(括号匹配、排序高考分数、身份证号码索引) 1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能在24小时后试出那瓶有毒。 二分查找 target 二分查找 最左边的target 、二分查找最右边的target 洗牌算法 最大子数组和 怎么判断链表有环?怎么找到环的入口?说思路 说说快排的思想 链表快排 如何实现稳定的快速排序 快排归并,区别,手撕时间复杂度推导 对一个省上百万考生的考试成绩排序 要求o(n) 首先输入一个二维数组 例如 [[1,2],[2,3],[2,4]],表示1和2、2和3、2和4有关系,关系可以传递,所以 1和3、1和4、2和4也有关系。输入两个数 比如 1、3,如果这两个数有关系则输出true、否则输出false 一个岛上有三种颜色的兔子,假设是a(红色)、b(蓝色)、c(黄色),两两碰撞会变成第三种颜色,比如 a、b碰撞就会变成c,问:a、b、c满足什么样的数量关系,在经过足够长的时间后,才能使得岛上的兔子只有一种颜色。给6分钟时间思考。 写一个哈希表,给10分钟时间。 输入一个字符串,至多删除一个字符,该字符串是否是回文串,输出true或者false。比如bab,输出true;babb,输出true 输入一个数组,找出A1 A2两个数,使得 A1-A2尽可能大,输出A1-A2的结果。例如 输入[0,2,3,8],输出 -1,即2-3。做完后面试官一直让优化,最后问我能不能用动态规划写这题?我说不会,让我说说对动态规划的理解。 最长回文字串 二叉搜索树遍历思路? 排序算法有什么?快排 归并 堆排序 桶排序 计数排序。区别? 字符串匹配算法有什么? 哈希 kmp 字典树。区别? 最短路算法有什么? 迪杰斯特拉 spfa 弗洛伊德。区别? 给定一个数n,如23121;给定一组数字A如{2,4,9},求由A中元素组成的、小于n的最大数。如小于23121的最大数为22999。(时间关系没有让写测试用例) 给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点。 思路:使用递归,从结束节点开始向上返回节点值,其余节点返回零值。左右子节点有非零返回值,则说明子节点处于路径中,返回子节点值+自己的节点值。到开始节点时,将值保存在全局变量res中。 两个人轮流扔硬币,谁先扔正面谁赢,求先抛的人赢得概率(淦,这里理解错题意了,就是简单的等比数列求和加极限就能做) 排列组合 交叉链表找交叉节点 数组峰值元素 两个有序数组找第k小元素要求时间复杂度o(logn) 二叉树从根节点到叶子结点和为k的所有路径 算法题 合并有序链表 自己写测试用例 如果要实现LRU算法,应该选择哪种数据结构?LRU算法要淘汰页面,就需要断链操作,而链表只能顺序查找,时间复杂度是O(n),怎么能更快实现淘汰 拓扑排序 最小栈怎么实现 N叉树每层求最大值 Rand7生成rand10和链表删除重复元素 跳表的原理和插入过程 假设有1,2,3,4,5,6,7,8,9,10 在B+树中存储,是什么样子 LRU 如何实现?在哪用过 LRU put get 时复 问一下数据结构,你了解哪些二叉树的种类和他们的具体使用场景(已经有点崩溃了,说了搜索和完全,其他就想不起来了,所以面试官开始引导我) AVL树了解吗(宕机了,想不起来应用场景了,就说不太记得了) 红黑树了解吗(简单说了一下) 红黑树的具体应用场景,举个例子(说了hashmap和1.8的concurrent hashmap) 为什么用红黑树不一直用链表 为什么用红黑树不用普通二叉树(说了普通二叉树会导致一侧树的深度太深) 普通二叉树深度太深会导致什么?(…) B树和B+树知道吗?区别是什么? B树和B+树的应用场景说一下(mysql的索引) B+树的叶子节点 树 根据遍历结果恢复树,递归 二叉搜索树第k大 树的和为k的路径 层次遍历 根据层次遍历和后序遍历恢复树 镜像树 树的深度 是不是平衡二叉树 链表 反转链表 链表环的入口 交叉链表的交点 复杂链表的复制 二叉搜索树变成双向链表 红黑树和跳表 红黑树的优缺点 栈用过吗?用栈实现二叉树非递归中序遍历 双向链表 优点 有哪些二叉树?搜索二叉树、平衡二叉树、红黑树,举个例子,什么时候用过 平衡二叉树和普通二叉树有什么区别,为什么要用平衡二叉树 各种hash区别,底层怎么实现的 问平衡二叉树,给了一些数据,让我讲出每一个插入后,树的状态。 堆栈的特点和应用场景 介绍下树,前缀树的应用场景,可以怎样优化 KMP 算法 将一个数字转任意进制(2-50进制) 写一段代码判断当前环境的字节序 实现单链表的有序插入,并思考如何在有序链表的基础上提高查找效率 给定一个数组,求 max(A[i] & A[j]),时间复杂度不高于O(N2N^{2}N2) 算法,排序算法,给场景考虑采用哪种 递归需要考虑一些什么,提到动态规划 算法题:156个元素数组,二分查找最少要多少次比较,最多多少次 敏感词过滤算法的过程 堆排序的实现过程,怎样调整堆;快排有没有稳定性,为什么 找到字符串中第一个出现次数只有一次的字母,比如abcdab,输出c,两种方法 写了个二分查找。面试官问我,你确定数组就是排序的么(我心里无语),数组非空判断不用(我服)? 随便写个排序 我写的快排 分析一下快速排序的时间复杂度和算法复杂度? 算法题:计算一个有环链表的节点数 归并排序? 归并排序的时间复杂度? topK问题 一个long类型的数,让他整个位倒转,能不能只迭代8次完成 一个数组一个数只有一个其他数两个,找到单独的那个数(LeetCode原题) 一个数组有一个数超过一半,找到这个数(LeetCode原题) 设计一个数据结构实现LRU 来,继续撸算法吧。给一个string类型数字字符串,比如“1026”,范围0000-9999,打印繁体读法string-----"壹仟零贰什陆” 数组最长递减子序列,写了个动态规划,比较简单。 非递减序列找到第一个大于x的位置,时间复杂度要求lgN(二分) 一个完全由数字组成的字符串,求字符序列子串可以被k整除的个数,要求O(N),有点难度,没A全 给定一个数组(全为0~9的数字),可能有重复,挑出数字自由组合,给定数k,找最小的大于k的数(回溯),没撸完,这个是败笔,撸了半个小时,跟面试官讨论了好久,面试官也提示我用回溯,可是我太菜不会呀。 排序算法 八大排序算法真的是面试宠儿 最常考 快速排序 和归并排序 哪些排序算法是稳定的 哪些是不稳定的 堆排 也应该掌握 回溯算法 走迷宫 游戏通关 递推算法 走台阶 断钢筋 背包问题 装最多的东西 贪心算法 覆盖问题 时间问题 动态规划算法,你写过吗?我说写过leetcode上的问题 两个链表判断是否相交,怎么找第一个相交点 堆排序、栈实现队列、反转链表 手撕算法,LeetCode原题 23. Merge k Sorted Lists,有一点点不一样就是要求后面没满k个的也转置。 手撕算法,链表快排,用快排的思想实现对链表的数据结构的数据做快排。 代码题1:输出一个单向链表的入环节点,如果没有则输出 null(先通过快慢指针得到 fast 和 slow 相遇的节点,再令 fast 从相遇点出发,slow 从链表首节点出发,一次一步,相遇的节点为入环首节点。面试官要求用数学公式推导为什么要这么做) 代码题2:合并两棵二叉树,对于两棵树都存在的节点,节点值相加,否则空的位置用另一棵树的节点来代替 实现36进制加法,中间不准转成10进制。 输入一组数字,长度为N,按照数字由小到大,输出前K个数字。 算法:链表反转 算法:正方形矩阵内实现最小路径。 在一个字符串中找到重复次数最多的子串,这个子串长度大于2。 一个数去掉k位使其最大/最小(贪心) 手写树的中序遍历的递归和非递归方法 手写一个算法对一个数组的数组排序其中里面一层的数组里的元素是排好序的 一开始写了个归并,后面面试官说时间复杂度太高,不如直接n个指针指向每一个里层数组直接排序 一道算法题,一个数组找连续子数组和为0的数组,并返回其中最大的长度 这道题一开始用了贪心,但说最坏情况下复杂度太高,后来经过面试官提醒实现了一个O(n)时间复杂度 数组和链表 快速排序算法 常用的数据结构有哪些? 数组和链表的区别,以及获取元素的时间复杂度 链表和队列的特点,查询和增删改的时间复杂度。 LeetCode 101 简单:对称二叉树(还是题刷的不够多,没写到这题也没多写二叉树,我居然用 BFS 写的) LeetCode 25 困难:K 个一组反转链表改版(最后 n 个不足也反转) 红黑树的特点, 为啥红黑树比较二叉树快 写一个快排 :快排是否稳定、什么情况下会退化、如何优化、时间复杂度 写一个二分查找:复杂度(代码题写的太快了, 然后他说时间还没到在问几个问题) 求二叉树深度的算法呢?说说看?时间和空间尽可能的小 有一个容量为 N 的数组,里面存放了 N 个数,每个数的取值范围是 1~N,有没有什么快速办法判断是否有重复元素,哪个元素重复了?空间复杂度要求是 O(1) 如果要设计一个快速插入和查找的数据结构,你会用什么结构?Hash 冲突的解决方法? 接着就是来俩算法题:题 1:统计一串字符中,重叠字符出现的次数。(如 AAABBBCC,输出 A_3_B_3_C_2)题 2:求两个字符的最长公共子串 算法题:手写代码实现单向链表的结构体,完成增删改查。 判断链表有环 算法题:合并有序数组 O(N)时间 O(1)空间。 算法题 跳跃游戏 leetcode 55。 算法题:给你一个整数数组 `nums` ,数组中的元素 **互不相同** 。返回该数组所有可能的子集(幂集)。 算法题:数组里每个数右边第一个比他大的数。 算法题:旋转图像(90度旋转矩阵) 智力题 1-N批次其中有一批次重量不合格 用最少称重次数找到。1) 刚开始说二分 面试官说不是最优;2) 提示可以从每批次拿不同数量:第 N 批拿 N 个 算重量差值就可以确定 常见的排序算法; 手写链表翻转; 已知链表的一个节点 p,删除其后一个节点的语句? 二叉树前序遍历的方法实现? 题目:括号匹配,输入:第一行一个整数T(1 <= T <= 100),表示有T组测试数据。对于每组测试数据:一行无序的括号,最长有3000个半括号。输出:一个整数,即最少要添加的括号数使之成为满足题意的括号序列。 LeetCode 112:给一个二叉树,判断是否存在一条从根节点到叶子节点的路径,路径上所有节点的值的和等于给点目标数,存在返回true,都不存在返回false。 数据结构有了解哪些? 怎么判断一个链表有没有成环?不一定是头尾相接,可能中间有成环。 常用的排序算法了解吗? 图的遍历了解吗? 三数之和(经典题 注意结果的去重) 回文链表(链表的题目都不难 热门的几个题目刷通就 ok 了) 数组中的第 k 个最大元素(借助快排思想来做 所以快排当然得熟练) 寻找旋转排序数组中的最小值(标准二分查找的变体) 二叉树(比较热门 遇到过层序遍历、最近公共祖先 、最长路径和等题型) 复原 ip 地址(经典回溯题目) 动态规划(这类型题目不会太难 基础的动态规划题型要会 比如背包、打家劫舍、股票买卖等 核心是推敲出状态转移方程) 算法题:手写快速排序,时间复杂度,稳定性 算法题:给定一个字符串,找到其中最长回文串 算法题:有一个 n * n 的棋盘,每个格子有 RB@ 三个状态,R 表示红色,B 表示蓝色,@ 表示此路不通。机器人从左上角走到右下角,每次只有上下左右四个方向选择,相同颜色之间没有代价,跨越不同颜色代价为 1,求解机器人从左上角走到右下角,最少的代价。 - 这里我用回溯求解的,很快就写出来了,思路也没问题。但是复杂度计算卡住了,在面试官多次且反复的提示下,算出来了。最后提问环节面试官跟我说后续优化可以加一些剪枝操作 算法题:K 个有序数组,输出最终排序后的数组 (K merge) 算法这块因为我做的是缓存项目,所以面试官让我写的 lru 。如果有人也做类似的项目,强烈建议把 lru 这个题做到会默写的程度,面试中碰到的概率非常大! 算法就是个回溯全排列。 Leetcode 199. 二叉树的右视图 Leetcode 32. 最长有效括号、Leetcode 110. 平衡二叉树 Leetcode 44.二叉树每层找最大值 【手撕】给定一个字符串,统计字符串中每个字符的出现次数,按照字母表顺序输出,a2b2c4 这种 删除链表的倒数第 n 个节点; 算法题:反转链表II 手撕:前序中序形成二叉树 手撕:双向链表反转 手撕:验证二叉搜索树 手撕:反转链表 手撕:LRU、二叉树层序遍历、单例模式 手撕算法:打印二叉树指定路径,青蛙跳台阶 有序数组,寻找目标元素的起始和结束下标(使用二分法,需要递归) 反转链表 旋转链表 比较常见的树以及应用场景 双向链表的缺点? 排序算法的稳定性 解释一下二分查找 排序算法,时间复杂度 # 其它(项目、人事、反问等) ## 面试题 面试官夸我长的很精神,我:???。然后,问我平时是怎么安排学习时间的,项目都是和谁一起做的。 有刷算法题吗?多不多? ### 自我介绍 万年不变的自我介绍,突出个人优势即可。 #### 自学 平时有什么自学方式? 平时怎么自学技术? #### 其他(考研、选择等) 为什么没有考研? 毕业之后为什么选择上家公司? ### 项目 #### 架构 项目架构的优化 画下项目的构成图 画一下项目的后端架构图 面试官往死里抠你的职责,项目上下游,项目架构,你如何做的服务拆分? 对架构师的理解? 你对项目整体设计的一个感受(面试官可能会让你画系统的架构图) ##### 职责/工作范围 你在上家公司主要负责什么类型的项目?上家公司开发团长规模 你在工作项目中设计过哪些功能?设计的功能第一版可能有缺陷或不足,你是怎么去改进的? 你在上家公司主要负责什么类型的项目?上家公司开发团队规模? 项目主要负责的东西和自己实现的组件? 你在工作中主要负责做了哪些东西?介绍一下主要做的业务? 开始疯狂问项目。讲讲项目的整体业务,技术架构,自己负责哪一块。 介绍一下你的项目以及你做了哪些? 你在这个项目中你负责了什么、做了什么、担任了什么角色。 ##### 规模 QPS 和 TPS 的区别是什么?你们系统的最大 QPS 是多少?QPS 大了会有什么问题,怎么解决? 在上家公司主要做什么类型的项目?公司规模多大? 毕业之后为什么去上家公司?上家公司规模?做什么业务?所在部门多少人? 上家公司规模?所在的项目组主要涉及什么类型项目? #### 功能实现 说说你项目的一些功能特点已经实现方式还有实现难点等。 问项目,聊怎么实现,从项目里学到什么。 一般遇到你理解不了的需求或不会的技术点,你会怎么去做? 你在这个项目中是否解决过什么问题?怎么解决的?收获了什么? ##### 难点、收获 项目中的难点,如何解决的,(GitHub 上找别人的代码、博客上找答案) 项目中遇到的最大的问题? 收获最大的一个项目, 着重介绍, 项目的演进过程, 从提高系统可用性的来进行演进,例如redis的可用性 挑一两个你的项目中的重点功能讲一下具体怎么做的?大致过程和最终效果? 讲一下你的项目中遇到的最困难的问题和解决方案? 哪个项目对你来说挑战性最大或者对技术成长最有帮助?项目架构是什么?单体还是微服务? 在上家公司最能体现你的能力的事情和让你最受挫的事情? 说一下在项目中你觉得有挑战(亮点、难点)的工作? 在这个项目中你学到了什么? 你在这个项目中犯过的错误,最后是怎么弥补的? 从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用。 ##### 安全 项目中数据安全性如何保证的? (我答对于请求使用 session+token+时间戳 校验,对于传输的数据进行非对称加密,使用HTTPS,面试官不是很满意) ##### 二次开发 开源二次开发时有什么注意点? ##### 工具类 用过哪些工具类?处理时间和 JSON 你是用的什么工具? #### 线上问题排查 线上的问题,如何去排查, 怎么去看到当前程序运行的状态。平时怎么调试的? 上线的代码有没有引起过重大事故? 生产环境遇到过哪些问题? ### HR 之前有了解过我们公司吗? 对公司的了解; 对于我们这个岗位,你觉得你的个人优势在哪里? #### 离职/空窗期 为什么从上家公司离职? 离职原因、空窗期原因? 离职原因?找工作多久了? 离职后的空窗期? ##### 之前评价 上家公司的领导如何评价你的工作表现?有没有说你还有要提升的地方? 你的直属领导是如何评价你的工作的? #### 加班 你对加班什么看法?期望薪资? 如果有一个紧急项目要你连续几个月加班,你怎么看待?之前工作的最晚加班多久? 过往工作经历的加班情况和对加班的看待?有和领导吵架过吗?有没有说领导强制压你说加班之类的? 公司这边加班比较多没有加班费和调休,大小周,能接受吗? 知道当前应聘的是 OD 岗位吗?之前的工作加班情况?了解 OD 岗位的加班情况吗? #### 出差 接受出差吗?为什么不接受? #### 职业规划 5 年内的职业规划? 职业规划? 职业规划? #### 期望薪资 期望薪资? 期望薪资?上一家多少? 上家公司的薪资情况? 期望薪资? 你在这一年的工作中是什么亮点或优势能支持你的这个薪资涨幅? 上家公司的薪资?现在的期望薪资? #### 期望工作/公司 期望做什么方面的工作? 接下来想进什么类型的公司? 你倾向于找什么样的工作? 求职过程中对公司比较看重哪方面? 对于工作的公司和行业有什么倾向和看重的? 选择工作的理由排序(薪资、加班情况之类的)。 #### 报到时间 什么时候能报道? #### Offer 数量 现在有多少个 Offer? 现在有 offer 吗? #### 更换语言 如果后面要你转 Python 或 Go 语言,你怎么看待? ### 反问 有什么技术方面的问题想问的? 反问部门、技术栈,是否可以自己选项目。 反问(个人表现、二面一般什么时候通知)。 反问(个人表现、后续的面试流程、部门的业务方向、技术栈)。 反问:试用期 6 个月,每个月有月度答辩,有转正答辩 # 简历编写 https://zhuanlan.zhihu.com/p/361891597 核心思想,想进大厂的简历,**要突出自己的特色,写得要生动**,能从简历看出你**实力不俗**。如果简历不过关,很大几率根本没有面试机会。**具体实践上,参照STAR法则。** 1. Situation情景,工作背景是什么? 2. Task任务,我负责做什么? 3. Action行动,我做了什么? 4. Result结果,工作取得了什么成果? **网上关于STAR法则有一堆介绍,不多赘述,这里只举一个例子。** 常见的简历会这么写,“负责订单系统开发,实现订单创建、查询、列表等功能,使用技术:Spring、Mybatis……”。**如果我是面试官,我的印象是你写过一些CRUD项目,这很难通过大厂的简历关。** **那该怎么写的呢?** 比如:“**负责订单系统核心模块开发(Task),主导设计订单系统数据库表结构,设计以会员为维度的分库方案,设计并开发订单列表及明细缓存方案(Action),支撑订单每日X万级查询请求(Result)**。”对比一下,明显这种写法更能体现出你的价值。 **这里不再多讲,网上搜下STAR法则,讲得很细致。**我的简历只有一页纸,**内容不在多,而在精,一两页纸就够**。希望大家如果想进大厂,先好好改改简历,顺利通过简历关。