![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试内容
sheng_xinjun
这个作者很懒,什么都没留下…
展开
-
reentrantlock公平锁与非公平锁对比
先说结论:非公平锁加锁时先参与锁竞争,如果state为0,则获取到锁。如果不为0,分三种情况。第一种情况,state为0(距离刚刚判断已经过去一会儿了,刚刚不为零,现在可能为零),获取到锁。第二种情况,state不为0,但是持有锁的线程是自己,也就是二次加锁,此时state会加一。第三种情况,state不为0并且持有锁的线程也不是自身,则将当前线程加入到一个双向链表队列中。公平锁加锁时,分三种情况。第一如果state为0,判断队列中是否有线程比自己先来,如果有,则将自己加入队尾,如果没有则获取到锁。第二原创 2021-09-15 18:53:09 · 286 阅读 · 0 评论 -
抽象类和接口的区别
1.抽象类和接口都不能实例化,如果要实例化,抽象类变量必须指向继承该抽象类的非抽象类对象,接口变量必须指向实现该接口的类对象(否则抽象类和接口只能以匿名内部类的形式实例化)。2.抽象类中可以有声明(抽象方法),也可以有实现(非抽象方法)。接口中只能有方法声明(JDK1.8中允许接口实现默认方法)。3.接口里定义的变量默认时public static final 常量。抽象类中的变量和普通类中的变量没有区别。4.抽象类中的抽象方法必须全部被子类实现,如果子类不能全部实现,子类只能是抽象类。同样一个原创 2021-09-13 18:04:38 · 83 阅读 · 0 评论 -
线程的五种状态及状态的切换
线程状态示意图首先看下这张图,这张图标注了线程的五种状态,以及进程间的切换。简述线程状态新建状态:新建了一个线程对象,该对象就处于新建状态。就绪状态:线程对象创建后,其他线程调用了该对象的start方法。该状态的线程位于可运行线程池中,变得可以运行,只等待获取cpu的使用权。运行状态:就绪状态的线程获取了CPU,执行程序代码。阻塞状态:阻塞状态时线程因为某种原因放弃CPU使用权,暂时停止运行,直到线程进入就绪状态,才有机会转为运行状态。阻塞的情况分三种:等待阻塞...原创 2021-09-06 15:53:17 · 7190 阅读 · 1 评论 -
索引失效的情况
1. like以%开头,索引失效。2.or语句前后没有同时使用索引。3.组合索引,不是使用第一列索引。(个人使用经验,有特殊情况,如下)创建索引:create index i on test(a,b,c);执行查询:select b from test where c='p';此时索引是生效的4.数据类型出现隐式转换。5.索引字段使用not,<>,!=6.where 部分用索引字段进行计算操作,或索引字段使用函数。...原创 2021-09-02 12:19:27 · 112 阅读 · 0 评论 -
InnoDB引擎和MyISAM引擎
先说一下InnoDB引擎InnoDB主索引下图为InnoDB主索引示意图,可以通过主键找到行数据辅索引辅索引的查找时通过字段查询到主键,再通过主键查询行数据MYiSAM主索引先通过主键查询到地址,再通过地址查询行数据辅索引跟主索引的逻辑时一样的,通过索引字段查到地址,再通过地址查询行数据InnoDB与MYiSAM的区别InnoDB1.聚集索引2.支持行锁表锁3.count会遍历整个表4.不支持全文索引(新版本支持...原创 2021-08-27 16:02:53 · 87 阅读 · 0 评论 -
数据库隔离级别
如果没有数据库隔离级别会出现什么问题?1.脏读:一个事务在处理事务时,查询到了另一个事务未提交的数据。2.不可重复读:一个事务的多次查询结果不同。因为另一个事务提交了数据。3.幻读:脏读和不可重复读时针对行数据的,幻读时针对表数据的,指多次查询的行数不同。言归正传,数据库隔离级别有哪些:1.读未提交此时select语句没有加锁,可能出现脏读,不可重复读,幻读的问题。2.读已提交可以避免脏读,不能避免不可重复读,幻读。3.可重复读为mysql默认的隔离级别,可以避免原创 2021-08-27 15:37:37 · 79 阅读 · 0 评论 -
Java设计模式
设计模式太多了,先看几个吧单例模式这是问得最多的模式,这种模式在内存中只有一个实例,节约了内存空间。//饿汉式class SingleTon1{ private static SingleTon1 s = new SingleTon1(); public static SingleTon1 getInstance(){ return s; }}//懒汉式class SingleTon2{ private static SingleTon2 s; public static原创 2021-08-27 15:32:12 · 74 阅读 · 0 评论 -
Dubbo简介
dubbo是一个分布式服务框架,用于提供RPC(remote procedure call)远程服务调用。简单地说,dubbo就是一个服务框架。分布式才用得上,单机就用不上了。dubbo的作用1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需要简单配置。2.软负载均衡及容错机制,可以代替硬负载均衡,即消除了单点又降低了成本。3.服务自助注册于发现,不需要写死服务提供方的地址。注册中心基于接口名查询服务提供者的IP地址,并能平滑添加或删除服务提供者。...原创 2021-08-25 17:16:55 · 71 阅读 · 0 评论 -
UDP和TCP的区别
UDP(user data protocol)用户数据包协议:是传输层的协议,不提供数据包分组、组装并且不能对数据排序。数据发送后无法得知其是否安全完整地到达。TCP(transmission control protocol)传输控制协议:传输前建立连接,按顺序传说,不丢失数据。UDP的特点1.面向无连接的(不需要三次握手,四次挥手)2.有单播、多播、广播的功能3.面向报文的4.不可靠传输(首先因为是无连接的,其次是因为没有拥塞控制)5.头部开销小,传输效率高TCP原创 2021-08-25 17:11:05 · 65 阅读 · 0 评论 -
死锁面试题
死锁就是所有两个或多个线程都在请求被对方占用的资源,而陷入的一种僵局。产生死锁的四个必要条件:1.互斥条件(在某一个时刻,某一个资源仅能被一个线程占有)2.请求和保持条件(某一进程占据部分资源不释放,同时请求其他资源)3.不可剥夺条件(被占据的资源被释放前,不能被其他线程获取)4.循环等待条件(两个或多个线程都在等待对方占据的资源)预防死锁的方法1.资源一次性分配(破坏了请求和保持条件)2.当一个资源得不到的时候,释放占用的资源(破坏不可剥夺条件)3.为资源编号,按编原创 2021-08-25 17:03:33 · 229 阅读 · 0 评论 -
ThreadLocal实现原理
ThreadLocal有这样几个作用:代替参数的显示传递、全局存储用户信息、解决线程安全问题。https://cloud.tencent.com/developer/article/1636025那它具体是怎么样实现的呢?我们看一下源码Thread类中有一个threadLocals对象。public class Thread implements Runnable { ThreadLocal.ThreadLocalMap threadLocals = null;}原创 2021-08-20 10:16:41 · 89 阅读 · 0 评论 -
JZ46孩子们的游戏、约瑟夫环
题目:https://www.nowcoder.com/practice/f78a359491e64a50bce2d89cff857eb6?tpId=13&tqId=11198&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking下面是我的代码,效率比较低,看别人的答案,总结自己的经验。public class Solution { public原创 2021-08-17 15:02:26 · 55 阅读 · 0 评论 -
Java垃圾收集算法
一共有4中垃圾收集算法:标记清除算法、复制算法、标记整理算法、分代收集算法。标记清除算法:这是最基础的收集算法。分为标记和清除两个阶段。首先需要标记出需要回收的对象,标记完成后统一回收。不足:1.标记和清除两个阶段效率都不高。2.会产生大量不连续的内存碎片。复制算法:为了解决效率问题,复制算法将内存划分为大小相等的两块,每次只使用其中的一块,这块用完后将活着的对象复制到另一块上,再把使用过的内存空间一次清除掉。不足:老年代存活率高,大批量地复制效率就低了,而且将老年代分成两块,实际使原创 2021-08-14 14:22:03 · 135 阅读 · 0 评论 -
jvm内存区域划分
jvm的内存主要分为:程序计数器、虚拟机栈、本地方法栈、、方法区、堆。程序计数器:字节码解释器负责执行class文件中的指令。程序计数器就是用来指向所执行指令地址的。每个线程都有一个独立的程序计数器,当CPU时间片轮转调度算法切换线程时,线程可以快速恢复到上次执行的位置。虚拟机栈:对应java方法执行的内存模型,方法执行的同时会创建一个栈帧用于存储方法中的局部变量表、操作数栈、返回地址等信息。栈是每个线程私有的内存空间。每个方法从调用到完成就对应着一个栈帧在虚拟机中入栈到出栈的过程。.原创 2021-08-14 14:11:41 · 265 阅读 · 0 评论 -
get和post的区别
1.get一般用于请求获取数据,post一般用作给后台发送数据。2.get请求也可以给后端传参,单数在url栏可见,所以不安全,参数长度有限制。post请求传递的参数放在request body中,不会再url中展示,比get安全。3.get请求刷新浏览器或者回退时没有影响的,post请求回退时会重写提交请求。4.get请求可以被缓存,post请求不会被缓存。5.get请求可以被收藏为书签,post请求不能。6.get请求只能进行url编码(application/a-www-form-原创 2021-08-13 20:13:40 · 102 阅读 · 0 评论 -
http返回值状态详解
分类2开头:成功3开头:重定向4开头:客户机中出现的错误5开头:服务器中出现的错误常见的返回值200:成功访问,网站可以正常访问时的状态。301:当网站更换域名时可将原域名作301永久重定向到新域名。302:临时重定向,比如response.redirect()跳转、js跳转、或静态http跳转400:域名绑定错误。一般是服务器上域名未绑定成功、未备案等情况。403:没有权限访问此网站。你的ip被列入黑名单,连接的用户过多。404:文件或目录不存在。500:服原创 2021-08-13 19:58:09 · 102 阅读 · 0 评论 -
java中重写和重载
重写重写:子类对父类允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。规则1.参数列表与被重写方法的参数列表必须完全相同。2.返回值类型可以不同,但必须是被重写方法返回类型的子类。3.访问权限不能比父类中被重写方法的返回权限低。4.声明为final的方法不能被重写。5.声明为static的方法不能被重写,但是可以被再次声明。6.子类和父类在同一个包下,子类不能重写父类的private方法。7.子类和父类不在同一个包下,只能重写public和protected方原创 2021-08-13 19:51:59 · 709 阅读 · 0 评论 -
继承、封装、多态
java的三大特性:继承、封装和多态。继承继承就是子类继承父类的特性和行为,使得子类对象具有父类的属性和方法,使得子类具有父类相同的行为,java是单继承多实现。java中最能体现继承的就是子类继承父类封装封装可以被认为是一种保护屏障,必须通过严格的接口控制。封装最主要的功能在于我们能修改自己的实现代码而不用修改那些调用我们代码的程序。适当的封装可以让代码更容易理解与维护,也加强了安全性。java中最能体现封装的就是类中封装了属性和方法。多态多态是同一个行为具有不同表现形式或原创 2021-08-13 19:44:17 · 44 阅读 · 0 评论