09 Java面试总结
文章
28.你知道哪些设计模式?分别对应的应用场景有哪些?
你知道哪些设计模式?分别对应的应用场景有哪些?上一课时我们讲了单例模式的 8 种实现方式以及它的优缺点,可见设计模式的内容是非常丰富且非常有趣。我们在一些优秀的框架中都能找到设计模式的具体使用,比如前面 MyBatis 中(第 13 课时)讲的那些设计模式以及具体的使用场景,但由于设计模式的内容比较多,有些常用的设计模式在 MyBatis 课时中并没有讲到。因此本课时我们就以全局的视角,来重点学习一下这些常用设计模式。 我们本课时的面试题是,你知道哪些设计模式?它的使用场景有哪些?它们有哪些优缺点? 典型回答设计模式从大的维度来说,可以分为三大类:创建型模式、结构型模式及行为型模式,这三大类下又有很多小分类。 创建型模式是指提供了一种对象创建的功能,并把对象创建的过程进行封装隐藏,让使用者只关注具体的使用而并非对象的创建过程。它包含的设计模式有单例模式、工厂模式、抽象工厂模式、建造者模式及原型模式。 结构型模式关注的是对象的结构,它是使用组合的方式将类结合起来,从而可以用它来实现新的功能。它包含的设计模式是代理模式、组合模式、装饰模式及外观模式。 行为型模式关注的是对象的行为,它...
29.红黑树和平衡二叉树有什么区别
红黑树和平衡二叉树有什么区别?数据结构属于理解一些源码和技术所必备的知识,比如要读懂 Java 语言中 TreeMap 和 TreeSet 的源码就要懂红黑树的数据结构,不然是无法理解源码中关于红黑树数据的操作代码的,比如左旋、右旋、添加和删除操作等。因此本课时我们就来学习一下数据结构的基础知识,方便看懂源码或者是防止面试中被问到。 我们本课时的面试题是,红黑树和二叉树有什么区别? 典型回答要回答这个问题之前,我们先要弄清什么是二叉树?什么是红黑树? 二叉树(Binary Tree)二叉树(Binary Tree)是指每个节点最多只有两个分支的树结构,即不存在分支大于 2 的节点,二叉树的数据结构如下图所示: 这是一棵拥有 6 个节点深度为 2(深度从 0 开始),并且根节点为 3 的二叉树。 二叉树有两个分支通常被称作“左子树”和“右子树”,而且这些分支具有左右次序不能随意地颠倒。 二叉查找树一棵空树或者满足以下性质的二叉树被称之为二叉查找树: 若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不为空,则右子树上所有节点的值均大于或等...
30.如何保证接口的幂等性常见的实现方案有哪些
如何保证接口的幂等性?常见的实现方案有哪些?幂等性问题是面试中常见的面试问题,也是分布式系统最常遇到的问题之一。在说幂等性之前,我们先来看一种情况,假如老王在某电商平台进行购物,付款的时候不小心手抖了一下,连续点击了两次支付,但此时服务器没做任何验证,于是老王账户里面的钱被扣了两次,这显然对当事人造成了一定的经济损失,并且还会让用户丧失对平台的信任。而幂等性问题说的就是如何防止接口的重复无效请求。 我们本课时的面试题是,什么是幂等性?如何保证接口的幂等性? 典型回答幂等性最早是数学里面的一个概念,后来被用于计算机领域,用于表示任意多次请求均与一次请求执行的结果相同,也就是说对于一个接口而言,无论调用了多少次,最终得到的结果都是一样的。比如以下代码: 12345678910111213141516public class IdempotentExample { // 变量 private static int count = 0; /** * 非幂等性方法 */ public static void addCount() {...
31.TCP 为什么需要三次握手
TCP 为什么需要三次握手?TCP 协议是我们每天都在使用的一个网络通讯协议,因为绝大部分的网络连接都是建立在 TCP 协议上的,比如你此刻正在看的这篇文章是建立在 HTTP(Hypertext Transfer Protocol,超文本传送协议) 应用层协议的基础上的,而 HTTP 协议的“底层”则是建立在 TCP 的传输层协议上的。因此可以理解为,你之所以能看到本篇文章就是得益于 TCP 协议的功劳。 我们本课时的面试题是,说一下 TCP 三次握手的执行流程,以及为什么需要三次握手? 典型回答在回答这个问题之前,首先我们需要搞清楚两个概念,第一,什么是 TCP?第二,什么是 TCP 连接?只有搞明白了这两个问题,我们才能彻底搞懂为什么 TCP 需要三次握手? 什么是 TCP?首先来说 TCP(Transmission Control Protocol,传输控制协议)是一个面向连接的、可靠的、基于字节流的传输层协议。从它的概念中我们可以看出 TCP 的三个特点:面向连接、可靠性和面向字节流。 TCP 的特点面向连接:是指 TCP 是面向客户端和服务器端连接的通讯协议,使用它可...
自引用泛型概述
自引用泛型(Self-referential generics / F-bounded polymorphism,很多人也叫 CRTP 风格)指:类型参数的上界本身又引用了这个类型参数,典型形态是: 1class Base<T extends Base<T>> { ... } 含义:T 必须是“某个继承自 Base<T> 的类型”,从而让 Base 在编译期“知道”子类的精确类型。 1 要解决什么问题:父类方法想返回“子类类型”没用自引用泛型时的问题12345678class Base { Base withName(String n) { return this; }}class UserBuilder extends Base { }UserBuilder b = new UserBuilder();b.withName("a") // 返回 Base .withName("b"); // 链式调...
总结文档
总结文档 总结文档 普通集合 并发集合 字节流与字符流 static、final、super、this 关键字(this、super 不能用在 static 方法中)以及泛型 异常体系 ava 的 IO java 对象如何判断是否可以回收(注意,此处仅仅为判断对象是否可达,不一定判断对象是否可以回收) java 中的 SPI Java 虚拟机 Java 锁机制 java 多线程 Spring Mybatis Apache HttpClient 普通集合 Arrays.asList()返回的是视图(ArrayList 内部类对象,只提供了替换数据的方法,其底层依旧是原数组数据) subList:返回的 List 是 ArrayList 中某段数据的一个视图,不可在使用时对原对 象进行操作,否则会出现 CME 异常 HashMap 对于容量的初始化分配,在首次 put 操作时执行(lazy load)ii. 并发下出现的死链问题:https://www.jianshu.com/p/619a8efcf589、https://juejin.im/post/5a255bbd6fb...
java开发人员最常犯的10中错误
[TOC] 一、把数组转成ArrayList为了将数组转换为ArrayList,开发者经常会这样做: 1List<String> list = Arrays.asList(arr); 使用Arrays.asList()方法可以得到一个ArrayList,但是得到这个ArrayList其实是定义在Arrays类中的一个私有的静态内部类。这个类虽然和java.util.ArrayList同名,但是并不是同一个类。java.util.Arrays.ArrayList类中实现了set(), get(), contains()等方法,但是并没有定义向其中增加元素的方法。也就是说通过Arrays.asList()得到的ArrayList的大小是固定的。 如果在开发过程中,想得到一个真正的ArrayList对象(java.util.ArrayList的实例),可以通过以下方式: 1ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr)); java.util.Array...









