![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java面试题
文章平均质量分 62
我是方小磊
这个作者很懒,什么都没留下…
展开
-
java面试题:讲一讲了解的的设计模式
文章目录spring常用的设计模式一. 单例模式1.1 单例模式概述1.2 单例模式的五种基本实现1.3 Spring中的单例模式实现二.代理模式二.工厂模式二.装饰器模式二.观察者模式二.责任链模式二.模块方法模式二.策略模式spring常用的设计模式一. 单例模式1.1 单例模式概述单例模式保证整个应用中某个实例有且只有一个,即类似于一个全局的静态变量,所有线程获取的都是一个实例。1.2 单例模式的五种基本实现单例模式的五种基本实现:饱汉模式,饿汉模式,DCL双锁检查,静态内部类,枚举原创 2021-04-10 18:01:03 · 218 阅读 · 0 评论 -
HashMap扩容机制(1.7和1.8的区别)
1. HashMap触发扩容条件hashMap默认的负载因子是0.75,即如果hashmap中的元素个数超过了总容量75%,则会触发扩容如果某个桶中的链表长度大于等于8了,则会判断当前的hashmap的容量是否大于64,如果小于64,则会进行扩容;如果大于64,则将链表转为红黑树。2. HashMap求桶的位置HashMap求桶的位置一共分为三个过程:1)求key的hashcode2)将hashcode的高16位和低16位进行异或操作。至此我们完成了hash方法,求得了该元素的hash值。原创 2021-06-01 22:10:52 · 3473 阅读 · 0 评论 -
永久代和元空间的区别及存储的是什么?
文章目录1. 永久代和元空间的存储2. 永久代和元空间的区别3. 永久代和元空间和方法区的关系4. 为什么要废除永久代5. 使用元空间的优势1. 永久代和元空间的存储永久代和元空间的作用都是存储类的元数据,用来存储class相关信息,包括class对象的Method,Field等。当然了,我这里仅仅是简单介绍,说的肯定不完整,具体存储了什么还是需要查阅资料。2. 永久代和元空间的区别永久代和元空间的区别本质只有一个,那就是永久代使用的是jvm内存存储,而元空间使用的是本地内存存储。元空间与永久代转载 2021-06-01 20:49:05 · 5954 阅读 · 1 评论 -
JDK7和JDK8的区别
面试总是遇到这个问题,做一个小总结,可能总结的不全1. 接口中的default方法一般来说接口中的方法都是不实现的,基本通过实现类来实现方法。但是jdk8中提供了一种被default修饰的方法,可以直接在接口中进行实现。2. lambda表达式jdk8引入了lambda表达式,也可称为closure(闭包),通常是在需要一个函数,但又不想费神去命名一个函数的场合下使用,也就是指匿名函数。lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。由于其几乎被所有主流开发语言支持。是ja原创 2021-06-01 19:57:01 · 5592 阅读 · 1 评论 -
java面试题:常见的排序算法及其复杂度
常见的排序算法时间复杂度冒泡排序直接插入排序直接选择排序快速排序堆排序归并排序希尔排序基数排序转载 2021-04-25 21:21:22 · 197 阅读 · 0 评论 -
java面试题:如何进行死锁检测
https://blog.csdn.net/wolfcode_cn/article/details/80728473转载 2021-04-23 20:14:54 · 158 阅读 · 0 评论 -
java面试题:ConcurrentHashMap的扩容机制
一. 扩容jdk8中,采用多线程扩容。整个扩容过程,通过CAS设置sizeCtl,transferIndex等变量协调多个线程进行并发扩容。多线程无锁扩容的关键就是通过CAS设置sizeCtl与transferIndex变量,协调多个线程对table数组中的node进行迁移。二. 何时扩容触发当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作:1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前转载 2021-04-22 19:58:29 · 2782 阅读 · 0 评论 -
java面试题:分布式锁的三种实现方式
分布式锁需要解决的问题互斥性:任意时刻只能有一个客户端拥有锁,不能同时多个客户端获取安全性:锁只能被持有该锁的用户删除,而不能被其他用户删除死锁:获取锁的客户端因为某些原因而宕机,而未能释放锁,其他客户端无法获取此锁,需要有机制来避免该类问题的发生容错:当部分节点宕机,客户端仍能获取锁或者释放锁一.基于数据库实现分布式锁悲观锁利用select … where … for update 排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,nam转载 2021-04-22 17:48:46 · 2560 阅读 · 0 评论 -
java面试题:java是值传递还是引用传递
值传递 VS 引用传递首先,我们必须要搞清楚,到底什么是值传递,什么是引用传递,否则,讨论 Java 到底是值传递还是引用传递就显得毫无意义。值传递:当一个参数按照值的方式在两个方法之间传递时,调用者和被调用者其实是用的两个不同的变量——被调用者中的变量(原始值)是调用者中变量的一份拷贝,对它们当中的任何一个变量修改都不会影响到另外一个变量。引用传递:而当一个参数按照引用传递的方式在两个方法之间传递时,调用者和被调用者其实用的是同一个变量,当该变量被修改时,双方都是可见的。Java 程序员之所以转载 2021-04-22 16:42:30 · 324 阅读 · 0 评论 -
java面试题:JVM方法区
https://www.jianshu.com/p/59f98076b382转载 2021-04-22 16:24:49 · 106 阅读 · 0 评论 -
java面试题:接口和抽象类的区别
抽象类Java中接口和抽象类的定义语法分别为interface与abstract关键字。抽象类:在Java中被abstract关键字修饰的类称为抽象类,被abstract关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:a、抽象类不能被实例化只能被继承;b、包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法;c、抽象类中的抽象方法的修饰符只能为public或者protected,默认为public;d、一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子转载 2021-04-21 10:54:02 · 580 阅读 · 0 评论 -
java面试题:内存泄漏的常见情况及如何排查
什么是内存泄漏在java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点:1.对象是可达的2.对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为java中的内存泄漏,这些对象不会被GC所回收,然而它们却占用内存。简单来说,内存泄漏的原因就是:保留下来却永远不再使用的对象引用。什么是内存溢出指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时转载 2021-04-20 20:07:25 · 968 阅读 · 0 评论 -
java面试题:什么是僵尸进程和孤儿进程
孤儿进程父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init 进程(进程号为1)所收养,并由init 进程对他们完成状态收集工作。init进程是领养父进程僵尸进程僵死状态(Zombies)是一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程。僵尸进程会以终止状态保持在进程表中,并且会一直在等待父进程读取退出状态代码。总的来说,就是只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入僵尸状态(Z状态)。僵尸进程进转载 2021-04-20 14:11:57 · 240 阅读 · 0 评论 -
java面试题:服务器的线程设置多少合适
线程数设多少合适??提问:工作线程数是不是设置的越大越好?回答:肯定不是的1)一来服务器CPU核数有限,同时并发的线程数是有限的,1核CPU设置10000个工作线程没有意义2)线程切换是有开销的,如果线程切换过于频繁,反而会使性能降低提问:如果CPU是单核,设置多线程有意义么,能提高并发性能么?回答:即使是单核,使用多线程也是有意义的1)多线程编码可以让我们的服务/代码更加清晰,有些IO线程收发包,有些Worker线程进行任务处理,有些Timeout线程进行超时检测2)如果有一个任务一直占用转载 2021-04-20 12:50:23 · 479 阅读 · 0 评论 -
java面试题:CMS垃圾回收过程
CMS垃圾回收过程1.总体介绍:CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上-XX:+UseConcMarkSweepGC ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。2.CMS过程:初始标记(STW initial mark)并发标记(Concurrent marking)并发预清理(Concurrent preclea转载 2021-04-20 11:59:16 · 849 阅读 · 0 评论 -
java面试题:线程池参数
文章目录线程池七大参数1. 一、corePoolSize 线程池核心线程大小二、maximumPoolSize 线程池最大线程数量三、keepAliveTime 空闲线程存活时间四、unit 空闲线程存活时间单位五、workQueue 工作队列六、threadFactory 线程工厂七、handler 拒绝策略总结线程池流程线程池七大参数从源码中可以看出,线程池的构造函数有7个参数,分别是corePoolSize、maximumPoolSize、keepAliveTime、unit、workQueue转载 2021-04-20 11:44:28 · 1630 阅读 · 0 评论 -
java面试题:服务器IO延时如何定位
首先是top查看一下系统状况发现两个参数异常,一是平均负载高,一是cpu %wa一直在50%以上。查了一下%wa参数的意义:就是等待IO的时间wa -- iowait Amount of time the CPU has been waiting for I/O to complete.查看磁盘使用情况> PROCESS STATE CODES > D uninterruptible sleep (usually IO) > R running or runn.转载 2021-04-20 10:46:41 · 245 阅读 · 0 评论 -
java面试题:DFS和BFS的优缺点及应用场景
DFS和BFS的区别BFS是围绕某个点一层一层的进行遍历,借助队列的数据结构实现。DFS是从一个点出发一直往深处遍历,条件不符就折返,通过栈的数据结构实现。在正常情况下二者的时间复杂度都是相同的O(v+e),但是在内存的使用上BFS由于要使用队列存储所有的外层节点,所以内存消耗相对较大。从宏观上来看:如果你已经知道解离根节点比较近,那么BFS更好如果整体上每个节点的边很多,那么BFS消耗的内存会很大如果一棵树很深而解很少,那么DFS可能会很慢(相反如果解很多并且都比较深的话,那么BFS就转载 2021-04-20 09:17:05 · 4001 阅读 · 4 评论 -
java面试题:如何避免快速排序的最坏情况
最坏的情况原因在分解时每次选取的主元素为最小元素在分解时每次选取的主元素为最大元素如何避免主元素的选取随机化:这样就会导致每次分解一直找到的是最小元素和最大元素作为主元素 的概率很小,但还是可能发生求序列的中值,然后选取序列的中值作为主元素。(求中值和找到中值的位置的时间复杂度为O(n))如果没有中值就找离中值最近的元素...转载 2021-04-20 09:10:36 · 1498 阅读 · 1 评论 -
java面试题:Minor GC和Full GC触发条件,如何减少Full GC
文章目录Minor GC 和Full GC的区别Minor GC 触发条件Full GC 触发条件如何减少FULL GCMinor GC 和Full GC的区别**新生代GC(Minor GC):**指发生在新生代(包括 Eden 和 Survivor 区域)的垃圾收集动作,因为Java对象大多都具有朝生夕死的特性,所以Minor GC非常频繁,一般回收速度也比较快。**老年代GC(Major GC/Full GC):**指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor G转载 2021-04-19 21:58:08 · 357 阅读 · 0 评论 -
java面试题:java中断,synchronized和ReentrantLock能否中断
文章目录java中断中断的意义为什么synchronized不能中断ReentrantLock能中断java中断概念:Java中断机制是一种协作机制,中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。如何中断:java.lang.Thread类提供了几个方法来操作这个中断状态,这些方法包括: //中断线程 public static boolean interrupted() //测试当前线程是否已经中断。线程的中断状态由该方法清除。 public boolea转载 2021-04-19 21:41:57 · 1087 阅读 · 0 评论 -
java面试题:java内存模型
搬砖:这篇博客讲的特别好JAVA内存模型详解(JMM)转载 2021-04-19 17:34:15 · 211 阅读 · 0 评论 -
java面试题:强引用,软引用,弱引用,虚引用
前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。1.强引用强引用转载 2021-04-19 16:42:27 · 193 阅读 · 0 评论 -
java面试题:常见的查找算法
本文只是记录个人学习总结,写的很简单,不喜勿喷。常见的查找算法顺序查找二分查找插值查找斐波那契查找树表查找分块查找哈希查找1. 顺序查找一个个往后查,没什么好说的2. 二分查找针对有序数组,进行折半查找每次查找数组中间的数,比较目标target和nums【mid】的大小如 target = nums【mid】 ,则代表找到如 target > nums【mid】 ,则放弃左半边数组,往右继续找mid如 target < nums【mid】 ,则放弃转载 2021-04-15 17:58:31 · 280 阅读 · 0 评论 -
java面试题:Get和Post的区别
Get和Post的区别1. Get和Post的区别下面给一些标准的答案:GET参数通过URL传递,POST放在Request body中。——最主要区别GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会转载 2021-04-14 21:35:04 · 358 阅读 · 0 评论 -
java面试题:session和cookie的区别
一. 概念理解当我们每次登陆一个界面的时候,如果意外关闭了这个界面,当我们立即重新打开这个界面的时候,发现我们并不需要重新登录,这是为什么呢?原来,当我们浏览某个页面的时候,Cookie 会记录我们的一些用户信息。当我们下一次打开相同网址的时候,服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者。网站,都是利用 Cookie来辨认使用者,以方便送出使用者量身定做的内容。然而,cookie是什么呢?session又是什么?先来了解几个概念。转载 2021-04-14 21:02:33 · 473 阅读 · 0 评论 -
java面试题:一致性哈希原理
我是搬运工:https://www.jianshu.com/p/528ce5cd7e8f文章目录一.前言二.Redis集群的使用三.使用Hash的Redis集群四.使用Hash时遇到的问题五. 一致性Hash原理六.一致性哈希的容错性和可扩展性七.数据倾斜问题八.总结一.前言互联网公司中,绝大部分都没有马爸爸系列的公司那样财大气粗,他们即没有强劲的服务器、也没有钱去购买昂贵的海量数据库。那他们是怎么应对大数据量高并发的业务场景的呢?这个和当前的开源技术、海量数据架构都有着不可分割的关系。比如通过my转载 2021-04-13 14:51:14 · 249 阅读 · 0 评论 -
java面试题:AVL和红黑树的区别
AVL和红黑树的区别AVL:平衡二叉查找树红黑树:1.红黑树并不追求“完全的平衡”,它只要求达到部分的平衡,降低了对旋转的要求,从而提高了性能。2.红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作,由于它的设计,任何不平衡都会在三次旋转之内解决。3.还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高4.红黑树的插入效率更高5.红黑树的平衡要求转载 2021-04-12 21:01:31 · 496 阅读 · 1 评论 -
java面试题:JVM虚拟机内存模型
目录JVM虚拟机内存模型1.JVM体系架构2.堆内存2.1 堆内存体系架构2.2 新生代2.3 老年代2.4 永久代3. java虚拟机栈3.1 java虚拟机栈概述3.2 栈帧3.2.1 局部变量表3.2.2 操作数栈3.2.3 动态连接3.2.4 方法返回地址4. 程序计数器5. 方法区6.本地方法栈7.解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。JVM虚拟机内存模型1.JVM体系架构根据下图我们就可以知道JVM的内存区域一共分为五个部分:1)堆2)原创 2020-05-09 14:50:22 · 405 阅读 · 0 评论 -
java面试题:StringUtils类中的isEmpty和isBlank的区别
StringUtils类中的isEmpty和isBlank的区别org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String str)。1. StringUtils.isEmpty()StringUtils.isEmpty()判断str为空的条件是:str==nullstr.length() == 0所以如果str为多个空格的话,是不会判断为空的S原创 2021-04-08 20:48:22 · 158 阅读 · 0 评论 -
java面试题:ReentrantLock底层原理
ReentrantLock底层原理一. 相关知识在了解ReentrantLock之前先了解一些相关知识1.1 公平锁和非公平锁1)公平锁: 多个线程按照申请锁的顺序去获得锁,线程会直接进入队列去排队,永远都是队列的第一位才能得到锁。优点:所有的线程都能得到资源,不会饿死在队列中。缺点:吞吐量会下降很多,队列里面除了第一个线程,其他的线程都会阻塞,cpu唤醒阻塞线程的开销会很大。2) 非公平锁: 多个线程不会按照申请顺序获取锁,多线程会直接去尝试获取,获取不到,再去进入等待队列,如果能获取到原创 2021-04-08 20:33:10 · 731 阅读 · 0 评论 -
java面试题:synchronized底层原理
文章目录synchronized底层原理一. synchronized的使用1.1 synchronized修饰实例方法1.2 synchronized修饰静态方法1.3 synchronized修饰代码块二. synchronized底层语义原理2.1 对象头和Monitor2.2 synchronized修饰代码块原理2.3 synchronized修饰同步方法原理三. synchronized锁升级策略3.1 偏向锁3.2 轻量级锁3.3 自旋锁3.4 重量级锁3.5 消除锁3.6 锁升级策略概述四.原创 2021-04-07 18:56:11 · 2017 阅读 · 1 评论 -
java面试题:Linux常用命令
Linux常用命令简单列举面试可以回答的常见命令:我觉得cd ls ll啥的就可以不用说了。。。1)mkdir 创建目录2)ls 查看当前文件夹的文件3)cd 进入目录4)find 查找文件5)chmod -R 777 加权限6)cp 复制7)mv 移动8)ps -ef|grep java 查看java进程9)kill 杀死进程10)unzip 解压11)pwd 命令用于查看当前工作目录路径12)rm -rf 删除...原创 2021-04-06 21:39:42 · 2082 阅读 · 0 评论 -
java面试题:java常见的集合类
常见的集合类java一般主要的集合类分为四类,每一类下又有不同的实现类:List列表(有序,可重复):ArrayList,LinkedList,Vector,StackQueue队列(有序,可重复):LinkedList,ArrayDeque,PriorityQueueSet(集合,不可重复):HashSet,LinkedHashset,TreeSet,EnumSetMap(映射,无序):HashMap,TreeMap,LinkedHashMap一. List列表1.1 ArrayList原创 2021-04-06 20:07:16 · 299 阅读 · 0 评论 -
java面试题:voliate底层原理——详解
1. voliate底层原理1.1 voliate变量的特点可见性: 当一个线程修改了声明为volatile变量的值,新值对于其他要读该变量的线程来说是立即可见的。有序性: volatile变量的所谓有序性也就是被声明为volatile的变量的临界区代码的执行是有顺序的,即禁止指令重排序。受限原子性: volatile变量不可保证原子性1.2 voliate如何实现变量多线程安全?实际上,voliate实现多线程情况下的变量安全其实就是通过以下两个方式:1)实现变量可见性2)禁止指令重原创 2021-04-06 17:21:51 · 2888 阅读 · 4 评论 -
java面试题:hashMap为什么要重写equals,hashcode方法
重写equals,hashcode原理详解个人认为已经讲得很清楚了!希望大家有问题多多指教,评论即可!Object中的原生方法:Object中:hashcode():返回的是对象的地址,所以这种情况下不同对象的hashcode肯定不同equals():比较的是对象的地址问题 hashmap,String,hashset中的hashcode和equals方法到底是怎么重写的!知识扩...原创 2019-12-24 13:24:49 · 2224 阅读 · 2 评论 -
java面试题:JVM线程的用户态和内核态
JVM线程用户态和内核态一. 线程用户态和内核态概念1.1 为什么会有用户态和内核态由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 :用户态 和 内核态1.2 用户态和内核态的区别内核态:CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序用户态:只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程原创 2020-09-01 17:31:00 · 2728 阅读 · 0 评论 -
java面试题:JVM的GC(垃圾回收)机制——详解
看了很多面试关于GC的回答,还是想写一个比较详细的答案,以便以后复习!1.面试可答答案:请你讲一讲GC答:虚拟机堆中的内存分配:虚拟机的垃圾收集采用“分代收集算法”,虚拟机中将堆的内存分为新生代和老年代新生代又分为Eden区和Survive区(生存区),生存区又分为S0区和S1区。内存大小比例为8:1:1老年代则只有一块内存区域新生代主要存放生存周期较短的对象,而老年代存放的对象生存周期则一般较长GC的触发机制以及过程: 后面会讲GC的实现大多数的对象在新生代被创建, 准确的来说是在原创 2020-05-15 19:19:20 · 1151 阅读 · 0 评论 -
java面试题:LinkedHashmap基本原理及实现LRU
1.图解LinkedHashmap图解LinkedHashmap请看此文章,写的非常详细!:图解LinkedHashMap原理2.常见面试题:2.1 LinkedHashMap基本原理答:LinkedHashMap继承HashMap,基于HashMap+双向链表实现。(HashMap是数组+链表+红黑树实现的)LinkedHashMap是有序的,有两种顺序:插入顺序和访问顺序。默认为插入顺序,如果为访问顺序,那么put和get已存在的节点时,会将该节点移动到双向链表的尾部(实际上是先删后插)原创 2020-05-13 17:18:05 · 946 阅读 · 0 评论 -
java面试题:JVM加载类(class文件)原理机制
JVM加载类(class文件)原理机制1.面试答案答:JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。类加载器一共有三个:1)Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);2)Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;3)System:又叫应用类加载器,其父类是Ex原创 2020-05-11 11:35:13 · 294 阅读 · 0 评论