Java面试
眼里只有码
学海无涯
并未停止学习的脚步
展开
-
Java常见面试题一
1. Java面向对象4个特征及理解封装、继承、抽象、多态。封装:2. &和&&的区别3. Int/Interger/AtomicInterger的区别4. equals()和==的区别5. String/StringBuffer/StringBuilder的区别6. Heap和Stack的区别7. 抽象类和接口区别8. 方法重写(Override)和重载(Overload)9. Java死锁的原因是什么?如何避免?10. 对泛型和注解(annotation)理原创 2022-01-18 21:35:22 · 228 阅读 · 0 评论 -
Java常见面试题 -- 并发、并行、串行与并发的三大特性
串行 :在时间上不可能发生重叠,前一个任务没搞完,下一个任务就只能等着并行: 在时间上是重叠的,两个任务在同一个时刻互不干扰的同行执行并发: 允许两个任务彼此干扰,统一时间点、只有一个任务运行,交替执行并发的三大特性原子性、可见性、有序性...原创 2021-09-13 14:33:09 · 233 阅读 · 0 评论 -
Java常见面试题 -- 线程池的秘密
为什么使用线程池?降低资源消耗;提高线程利用率,降低创建和销毁线程的消耗、提高响应速度;任务来了,直接有线程可用可执行,而不是先创建线程,再执行提高线程的可管理性;线程时稀缺资源,使用线程池可以统一分配调优监控线程池参数corePollSize : 代表核心线程数,也就是正常情况下创建工作的线程数,这些线程创建后并不会消除,而是一种常驻线程maxinumPoolSize : 代表的是最大线程数,它与核心线程数相对应,表示最大允许被创建的线程数。比如当前任务较多,将核心线程数都原创 2021-07-04 20:57:49 · 124 阅读 · 4 评论 -
Java常见面试题 -- ThreadLocal的原理、使用场景、内存泄露
原理每一个Thread对象均含有一个ThreadMap类型的成员变量threadLoacls,它存储本线程中所有ThreadLocal对象及其对应的值。ThreadLocalMap由一个个Entry对象构成Entry 继承自 WeakReference <ThreadLoacl<?>>,一个 Entry 由 ThreadLoacl 对象和 object 构成。由此可见, Entry 的key是ThreadLocal对象,并且是一个弱引用。当没指向key的强引用后,该key就会原创 2021-07-04 14:14:15 · 378 阅读 · 2 评论 -
Java常见面试题 -- 对线程安全的理解
不是线程安全,应该是内存安全,堆是共享内存,可以被所有线程访问当多个线程时,如果不用进行额外的同步控制或其他的协调操作,调用这个对象的行为都可以获得正确的结果,我们就说这个对象是线程安全的堆 是进程和线程共有的空间。分 全局堆 和 局部堆 。全局堆就是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统对进程初始化的时候分配。运行过程中也可以向系统要额外的堆。但是用完了要还给操作系统,要不纵然就是内存泄露。...原创 2021-07-03 15:34:41 · 281 阅读 · 0 评论 -
Java常见面试题 --sleep、wait、yield、join用法
锁池所有需要竞争同步的线程都会放在锁池中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。等待池当我们调用wait( )方法后,线程会放到等待池当中,等待池的线程是不会去竞争同步锁。只有调用了notify( )或notifyAll( )后等待线程的线程才会开始竞争锁。notify( )是随机从等待池选出一个线程放到锁池,而notifyAll( )是将等待池的所有线程..原创 2021-07-01 17:45:09 · 360 阅读 · 0 评论 -
Java常见面试题 -- 如何实现一个IOC容器
配置文件配置包路径递归包扫描获取. class 文件反射、确定需要交给IOC管理的类对需要注入的类进行依赖注入配置文件中指定需要扫描的包路径定义一些注解,分别表示访问控制层,业务服务层,数据持久层,依赖注入注解,获取配置文件注解从配置文件中获取需要扫描的包路径,获取到当前路径下的文件内信息及文件夹信息,我们将当前路径下所有以 .class 结尾的文件添加到一个 set 集合中进行存储遍历这个set集合,获取在类上有指定注解的类,并将其交给IOC容器,定义一个安全的Map用来存储这些对象.原创 2021-07-01 16:58:35 · 261 阅读 · 0 评论 -
Java常见面试题 -- Java类加载器
Java类加载器有哪些?启动类加载器、扩展类加载器、应用类加载器、加载先提交给父类加载JDK自带有三个类加载器:bootstrap ClassLoader、ExClassLoader、AppClassLoader。bootstrap ClassLoader:是ExClassLoader的父类加载器,默认负责加载 %JAVA_HOME%lib的jar包和class文件ExClassLoader:是 AppClassLoader的父类加载器,负责加载文件夹中 %JAVA_HOME%/lib/ext文件夹原创 2021-07-01 16:57:45 · 167 阅读 · 0 评论 -
Java常见面试题 -- 什么是字节码?采用字节码的好处是什么?
Java中的编译器和解释器:Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟机的机器,这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口 。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解析器来将虚拟机代码转换位特定系统的机器码执行。在Java中,这种虚拟机理解的代码叫字节码(即扩展名为.class的文件,它不面向任何特定的处理器,只面向虚拟机)每一种平台的解析器都是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器后变成字节码,字节码由虚拟机解释执行原创 2021-06-30 12:20:00 · 410 阅读 · 0 评论 -
Java常见面试题 -- 双亲委托模型
双亲委托模型的好处:主要是为了安全性,避免用户自己编写的类动态替换Java的一些核心类,比如String同时也避免了类的重复加载,因为JVM中区分不同类,不仅仅是根据类名,相同的class文件被不同的ClassLoader加载就是不同的两个类...原创 2021-06-30 00:17:58 · 92 阅读 · 0 评论 -
Java常见面试题 -- ConcurrentHashMap原理,jdk7和jdk8版本的区别
jdk7:数据结构:ReentrantLock原创 2021-06-29 14:10:13 · 320 阅读 · 0 评论 -
Java常见面试题 -- HashMap 和HashTable
区别HashMap方法没有 synchronized修饰,线程非安全,HashTable 线程安全HashMap允许 key 和 value为 null,而HashTable不允许底层实现:数组+链表实现jdk8开始链表高度到8、数组长度超过64.链表转变为红黑树,元素以内部类 Node节点存在计算 key 的 hash 值,二次hash然后对数组长度取模,对应到数组下标如果没有产生 hash 冲突,先进行 equal 比较,相同则取代该元素。不同,则判断链表高度插入链表,链表高度达到8,原创 2021-06-27 17:28:50 · 262 阅读 · 0 评论 -
Java常见面试题 -- ArrayList 和 LinkedList
ArrayList : 基于动态数组,连续内存存储,适合小标访问(随机访问),扩容机制:因为数组长度固定,超出长度存数据时需要新建新数组,然后将老数组的数据拷贝到新数组,如果不是尾部插入数据还会涉及到元素的移动(往后复制一份,插入新元素),使用尾插法并指定初始容量可以极大提示性能,甚至超过 linkedList (需要创建大量的node对象)LinkedList:基于链表,可以存储在分散的内存中,适合做数据插入及删除操作,不适合查询:需要逐一遍历。遍历 LinkedList必须使用 iterator 不能原创 2021-06-27 16:03:15 · 169 阅读 · 0 评论 -
Java常见面试题 -- 对象相等
== 和 equals 的区别== 解读对于基本类型来说:比较的是值是否相同String s1="abc";String s2="abc";char [] biu={'a','b','c'};String s3=new String(biu);System.out.println(s1==s2);//输出结果 trueSystem.out.println(s1==s3);//输出结果 falseSystem.out.println(s3==s2);//输出结果 false对于引用类型来原创 2021-06-27 11:18:05 · 294 阅读 · 0 评论 -
Java常见面试题 -- List 与 Set区别
List:有序,按对象进入的顺序保存对象,可重复,允许多个Null元素对象,可以使用Iterator取出元素,在逐一遍历,还可以使用get(int index)获取指定定下标的元素Set:无序,不可重复,最多允许有一个Null 元素对象,取元素只能有Iterator接口取得所有元素,在逐一遍历各个元素...原创 2021-06-24 09:02:25 · 198 阅读 · 0 评论 -
Java常见面试题 -- 接口和抽象类区别
默认方法实现:抽象类可以有默认的方法实现;接口不能有默认的方法实现。实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。构造函数:抽象类可以有构造函数;接口不能有。main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。实现数量:类可以实现很多个接口;但是只能继承一个抽象类。访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。抽象类可以存在普通成员函数,而接口中只能存在publ原创 2021-06-23 23:30:36 · 156 阅读 · 0 评论 -
Java常见面试题 -- 重载与重写的区别
重载:发生在同一个类中,方法名必须相同、参数类型不同、个数不同、顺序不同、方法返回值和访问修饰可以不同,发生在编译时。重写: 发生在父类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类不能重写该方法...原创 2021-06-23 22:33:10 · 103 阅读 · 0 评论 -
Java常见面试题 -- String、StringBuffer、StringBuilder的区别
操作字符串的类有:String、StringBuffer、StringBuilder。String 是 final 修饰的,不可变、每次操作都会产生新的String对象StringBuffer 和 StringBuilder 都是在原对象上操作StringBuffer 是线程安全的,StringBuilder 线程不安全的StringBuffer 方法都是 synchroized 修饰的性能 :StringBuilder > StringBuffer > Strin原创 2021-06-23 22:16:15 · 164 阅读 · 0 评论 -
Java常见面试题 -- 关于 final
final 在 Java 中有什么作用?final 修饰的类叫最终类,该类不能被继承。final 修饰的方法不能被重写。final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。(1) 修饰成员变量成员变量涉及到初始化的问题,只能二选一。(显示初始化、构造方法初始化)。由于成员变量具有默认值,用final之后必须手动赋值,不会再给默认值了;对于final的成员变量,要么直接赋值,要么通过构造方法赋值)public class YuYio { private fina原创 2021-06-23 00:43:33 · 383 阅读 · 0 评论 -
Java常见面试题 -- JDK、JRE、JVM之间的区别
JDK : Java开发工具(Java Develpment Kit java)JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API )。JRE: Java运行环境(Java Runtime Environment java)包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(J原创 2021-06-22 11:51:43 · 966 阅读 · 0 评论