
The Interview Questions
面试题
dingwen_blog
这个作者很懒,什么都没留下…
展开
-
第21题-对守护线程的理解
文章目录第21题-对守护线程的理解1.定义2.生命周期3.总结第21题-对守护线程的理解1.定义[!NOTE]线程分为用户线程和守护线程,守护线程为所有非守护线程(用户线程)提供服务的线程。例如:GC线程。2.生命周期[!NOTE]当所有用户线程都退出时,守护线程会退出。3.总结[!NOTE]由于守护线程的终止是自身无法控制的,因此千万不要把IO、File等重要操作逻辑分配给它;因为它不靠谱。thread.setDaemon(true)必须在thread.start()之前设置原创 2021-09-11 17:17:01 · 188 阅读 · 0 评论 -
第20题-对线程安全的理解
文章目录第20题-对线程安全的理解1.诱因2.堆3.栈4.总结第20题-对线程安全的理解1.诱因[!NOTE]操作系统都是多任务的,即多个进程同时运行。为了保证安全,每个进程只能访问分配给自己的内存空间,而不能访问别的进程的,这是由操作系统保障的。在每个进程的内存空间中都会有一块特殊的公共区域,通常称为堆(内存)。进程内的所有线程都可以访问到该区域,就造成了线程安全问题。2.堆![DOTE]堆是进程和线程共有的空间,分全局堆和局部堆。全局堆就是所有没有分配的空间,局部堆就是用户分 配原创 2021-09-11 16:28:09 · 190 阅读 · 0 评论 -
第19题- sleep&wait&join&yield区别
文章目录第19题- sleep&wait&join&yield区别1.两个概念1.1 锁池1.2 等待池2.比较第19题- sleep&wait&join&yield区别1.两个概念1.1 锁池[!NOTE]所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。1.2 等待池[原创 2021-09-11 16:15:59 · 124 阅读 · 0 评论 -
第18题-线程生命周期
文章目录第18题-线程生命周期1.线程状态2.创建(New)3.就绪(Runnable)4.运行(Running)5.阻塞(Blocked)5.1 等待阻塞5.2 同步阻塞5.3 其他阻塞第18题-线程生命周期1.线程状态创建就绪运行阻塞死亡2.创建(New)[!NOTE]新创建了一个线程对象。3.就绪(Runnable)[!NOTE]线程对象创建之后,其他对象调用了该对象的start()方法,该线程处于可以运行的线程池中,等待CPU调度。4.运行(Running)原创 2021-09-11 15:43:04 · 245 阅读 · 0 评论 -
第17题- GC如何判断对象是否可以回收
文章目录第17题- GC如何判断对象是否可以回收1. 可达性分析2.`GC Roos`对象3.回收流程第17题- GC如何判断对象是否可以回收1. 可达性分析[!NOTE]从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连时,则证明此对象是不可用的,那么虚拟机就判断是可回收对象。2.GC Roos对象虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中JNI(即一般说的Na原创 2021-09-11 15:27:05 · 207 阅读 · 0 评论 -
第17题-类加载器
文章目录`BootStrapClassLoader``ExtClassLoader``AppClassLoader`双亲委派好处JDK自带三个类加载器:BootStrapClassLoader ExtClassLoader AppClassLoaderBootStrapClassLoader是顶层类加载器,是ExtClassLoader的父加载器(通过parent属性指定,不是继承关系)。负责加载%JAVA_HOME%lib下的class文件。ExtClassLoader是AppClas原创 2021-08-30 21:32:15 · 83 阅读 · 0 评论 -
第16题-Java中的异常体系
Java中的所有异常都来自顶级父类Throwable。 Throwable下有两个子类Exception和Error。 Error是程序无法处理的错误,一旦出现这个错误,则程序将被迫停止运行。 Exception不会导致程序停止,又分为两个部分RunTimeException运行时异常和CheckedException检 查异常。 RunTimeException常常发生在程序运行过程中,会导致程序当前线程执行失败。CheckedException常 常发生在程序编译过程中,会导致程序编译不通过。..原创 2021-08-30 21:31:49 · 92 阅读 · 0 评论 -
第15题-什么是字节码?采用字节码的好处是什么?
文章目录Java中的编译器和解释器采用字节码的好处Java中的编译器和解释器Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器 在任何平台上都提供给编译程序一个的共同的接口。 编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为 .class的文件),它不 面向任何特定的处理器,只面向虚拟机。 每一种平台的解释器是不同的,但是实现的虚拟机是相同的。原创 2021-08-30 21:31:27 · 132 阅读 · 0 评论 -
第14题-ConcurrentHashMap
数组 + 链表 + 红黑树,synchronized + CAS。Node的val和next都用volatile修饰,保证可见性。查找,替换,赋值操作都使用CAS。锁链表的head节点,不影响其他元素的读写,锁粒度更细,效率更高,扩容时,阻塞所有的读写 操作、并发扩容。读操作无锁,写操作使用乐观锁,乐观锁不能保证数据安全的情况下如数组扩容时使用synchronized。...原创 2021-08-30 21:30:34 · 88 阅读 · 0 评论 -
第13题-HashMap和HashTable的区别
文章目录区别原理底层实现都是数组+链表+红黑树。区别HashMap线程不安全HashTable的方法都被synchronized修饰,线程安全(全局锁)HashMap允许key value为空,HasTable不允许原理jdk8开始链表高度到8、数组长度超过64,链表转变为红黑树,元素以内部类Node节点存在。计算key的hash值,二次hash然后对数组长度取模,对应到数组下标, 如果没有产生hash冲突(下标位置没有元素),则直接创建Node存入数组, 如果产生hash冲突,先进原创 2021-08-28 16:19:45 · 123 阅读 · 0 评论 -
第12题-ArrayList和LinkedList的区别
文章目录`ArrayList`扩容插入`LinkedList`总结ArrayList基于动态数组实现。在内存中是连续的内存空间,适合下标访问(随机访问)(数组中存储的是同一类型的数据,长度固定,方便实现下标访问)。扩容因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组。插入如果不是尾部插入数据还会 涉及到元素的移动(往后复制一份,插入新元素),使用尾插法并指定初始容量可以极大提升性能。LinkedList基于链表实现。在内存中是不连续的内存空间,维护原创 2021-08-28 15:50:27 · 182 阅读 · 0 评论 -
第11题- List和Set的区别
文章目录`List``Set`List基于数组实现,有序,安装对象进入的顺序保存对象,可重复,允许多个null对象。可以使用Interator和for遍历。Set基于散列算法和数组实现(参考:HashMap)。无序,不可重复,只能有一个null对象,只能使用Interator遍历。...原创 2021-08-28 15:23:56 · 89 阅读 · 0 评论 -
第10题-接口与抽象类的区别
文章目录异同设计目的抽象类接口总结异同抽象类可以存在普通成员函数,而接口中只能存在抽象方法抽象类中的成员变量可以是多种类型的,二接口中成员变量只能是public static final类型只能继承一个抽象类,而接口可以有多个实现设计目的抽象类抽象类等设计目的是代码复用。当不同的类具有相同的行为切实现方式一致时,可以让这些类派生出一个抽象类,通用的行为交由抽象类实现,子类无需实现。抽象类本质是对类的抽象,表达的是是的关系。抽象类包含并实现子类的通用属性。将子类存在的差异化的特性 进行抽象原创 2021-08-28 15:05:41 · 234 阅读 · 0 评论 -
第9题- hashCode() 与 equals().md
文章目录`hash``hashCode()`分析`HashSet`检查重复hashhash哈希,也称为散列。基本原理是把任意长度的输入通过一定的映射规则转换为固定长度的输出。映射规则就是对应的哈希算法。由于输出空间值小于输入空间值,根据“抽屉原理”一定会存在不同的输入转换为相同的输出的情况。作为一个好的哈希算法需要做到让这种冲突发生的几率尽可能小。hashCode()hashCode()方法来自Object,Java中的任何类都有该方法。作用是获取哈希码(散列码)。返回值哈希码是一个int整数原创 2021-08-28 14:37:08 · 90 阅读 · 0 评论 -
第8题-重载和重写的区别
文章目录重载重写重载发生在同一个类中,方法名相同,参数类型、个数、顺序不同构成方法重载(发生在编译时)。注意:方法返回值和访问修饰符不构成重载。重写发生在父子类中,方法名、参数列表必须相同,返回值的范围小于等于父类,抛出异常的范围小于等于父类,访问修饰符大于等于父类。如果父类方法是private修饰则子类不能重写该方法。...原创 2021-08-28 12:28:50 · 122 阅读 · 0 评论 -
第6题-为什么局部内部类和匿名内部类只能访问局部final变量
内部类和外部类是处于同一个级别的,内部类不会因为定义在方法中就会随着方法的执行完毕就被销毁。这里就会产生问题:当外部类的方法结束时,局部变量就会被销毁了,但是内部类对象可能还存在(只有没有人再引用它时,才会死亡)。这里就出现了一个矛盾:内部类对象访问了一个不存在的变量。为了解决这个问题,就将局部变量复制了一份作为内部类的成员变量,这样当局部变量死亡后,内部类仍可以访问它,实际访问的是局部变量的"copy"。这样就好像延长了局部变量的生命周期将局部变量复制为内部类的成员变量时,必须保证这两个变量是一样的.原创 2021-08-28 11:50:02 · 96 阅读 · 0 评论 -
第5题- final
文章目录修饰类修饰方法修饰变量修饰成员变量修饰局部变量最终的。修饰类表示该类不可以被继承。修饰方法表示该方法不能被重写,但是可以重载。修饰变量一旦初始化赋值之后就不能改变。基本数据类型,数值不可变引用数据类型,存储在栈内存中的引用地址不可变,引用的值是可以改变的public class FinalReferenceTest{ public static void main(){ final int[] iArr={1,2,3,4}; iArr[2]原创 2021-08-28 11:25:12 · 172 阅读 · 0 评论 -
第4题-算法-查找三数相加为零的三元组
文章目录package algorithm;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组 * <p> * 注意:答案中不可以包含重复的三元组。 * 例如, 给定数组 nums = [-1, 0, 1, 2原创 2021-08-28 10:39:27 · 115 阅读 · 0 评论 -
第3题-==&equals
文章目录`==``equals``String`中的`equals`==比较的是栈中的值,基本数据类型比较的是变量值,引用数据类型比较的是堆中内存对象的地址。(栈中存储地址)。equals基类Object类的方法,默认就是==,通常会进行重写。// Objectpublic boolean equals(Object obj) { return (this == obj);}String中的equals相等情况栈中存储的堆内存对象地址信息一致(同一个对象)不论地址原创 2021-08-23 23:27:34 · 164 阅读 · 0 评论 -
第2题- JDK&JRE&JVM
文章目录JDK & JRE & JVMJDKJREJVM关系JDK & JRE & JVMJDKJava Development Kit,Java开发工具包。JREJava Runtime Environment,Java运行之环境。JVMJava. Virtual Machine,Java虚拟机。关系原创 2021-08-19 22:58:26 · 165 阅读 · 0 评论 -
第1题-面向对象
文章目录面向对象三大特征封装继承多态发生多态的必要条件面向对象面向对象与比面向过程是处理问题的两种不同的角度,面向过程注重完成一件事情的步骤以及顺序,而面向对象则注重完成这件事情需要有哪些对象参与,每个对象各自需要完成的工作是什么。面向过程简单高效,面向对象则更利于复用、拓展和维护。三大特征封装明确标识出该对象允许外部使用的成员函数以及数据项,屏蔽实现细节,外部调用无需关心内部实现。继承可直接用户继承自基类的方法,从而提高代码复用,也可继承自基类的方法做出自己的改变与拓展。多态原创 2021-08-19 22:56:31 · 83 阅读 · 0 评论 -
算法—查找三数相加为零的三元组
package algorithm;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组 * <p> * 注意:答案中不可以包含重复的三元组。 * 例如, 给定数组 nums = [-1, 0, 1, 2, -1,原创 2021-06-18 10:58:39 · 282 阅读 · 0 评论 -
为什么消息中间件不直接使用HTTP协议
因为 http请求报文头和响应报文头是比较复杂的,包含了Cookie,数据的加密解密,窗台吗,响应码等附加的功能,但是对于一个消息而言,我们并不需要这么复杂,也没有这个必要性,它其实就是负责数据传递,存储,分发就行,一定要追求的是高性能。尽量简洁,快速大部分情况下 http大部分都是短链接,在实际的交互过程中,一个请求到响应都很有可能会中断,中断以后就不会执行持久化,就会造成请求的丢失。这样就不利于消息中间件的业务场景,因为消息中间件可能是一个长期的获取信息的过程,出现问题和故障要对数据或消息执行持久..原创 2021-06-17 09:00:24 · 539 阅读 · 1 评论 -
关于group by的用法
文章目录准备`sql`执行分析执行过程用了很久的gorup by一道面试题让我突然觉得自己不会用了。原题是这样的:表A有三个列分别为a、b、c。语句select a,b,c from A group by 【a、b、c任意一个字段】会出现什么情况。答案是这样的,不管你是以a、b、c哪一个字段来分组,第一条件:分组的依据要么包含在select后面要么就是聚合函数包含(必须保证分组之后显示的字段是唯一的,含有多个的情况就必须进行聚合)。还有一种情况就是查询结果集只有分组的依据(没有意义)。# 伪代原创 2021-06-04 16:48:59 · 793 阅读 · 0 评论 -
面试题记录-sql-01
面试题记录系列文章目录1:sql-01文章目录面试题记录系列文章目录一、问题二、解决一、问题表A有个字段A1,A2,表B也有两个字段B1,B2,当A1和B1相等时将B2更新到A2。二、解决update A,B set A.A2 = B.B2 where A.A1 = B.B1...原创 2021-05-23 10:24:04 · 83 阅读 · 0 评论