java面试题
文章平均质量分 71
wang_yi_l
每天进步一点
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Mysql索引原理、聚簇索引和非聚簇索引、回表
我们都知道索引的作用是增加查询速度,大部分系统都是读多写少,索引对应查询的帮助是非常大的。特别是数据流越大的时候,索引对应查询性能的影响非常关键。就好比一本字典,如果没有目录,想要找一个字的话就要一页一页的查找,非常耗时,通过字典里面的目录就可以直接定位到数据在哪一页,这样查找效率就非常高。索引就类似字典里面的目录。一、索引的底层数据结构1、Hash(哈希表)哈希算法也叫散列算法,就是把任意的key通过哈希函数转变为固定长度的地址。2、B+树Mysql默认使用的就是B+树,B+树是一种平衡查找树。原创 2022-03-08 14:52:59 · 2090 阅读 · 0 评论 -
JVM垃圾回收理解,垃圾回收算法、JVM堆内存分代模型
我们写java代码的时候,业务逻辑处理里面会产生很多对象,这些对象在调用结束后jvm的垃圾回收器GC就帮我们回收处理了,但是具体的逻辑是如何处理的,如何如优化。1、什么是垃圾?简单来说就是:没有任何引用指向这个对象,那这个对象对jvm来说就是垃圾,需要回收。2、jvm如何定位到这些垃圾?使用的什么算法jvm定位垃圾的算法有两种:1:引用计数器顾名思义,就是通过计数来判断这个对象是否被引用。当一个对象有引用时计数器+1,引用消失时计数器-1,当计数器为0的时候,对象不在被引用,也就标记为垃圾。原创 2020-08-18 11:41:31 · 1081 阅读 · 0 评论 -
synchronized和Lock锁原理理解,CAS原理,锁升级策略
synchronized的原理synchronized底层是通过对象内部的一个监视器锁(monitor)来实现的,是由一对monitorenter/monitorexit指令实现的。什么是监视器锁?参考JVM对监视器锁的描述:monitorenter :Each object is associated with a monitor. A monitor is locked if and only if it has an owner. The thread that executes monit原创 2020-08-14 10:47:30 · 1417 阅读 · 0 评论 -
Java中==和equals的区别,原理,Integer超出-128和127使用==返回false
==和equals有什么区别?1、比较基本数据类型== 是比较两个基本数据类型的值是否相等equals 也是比较两个基本数据类型的值是否相等,因为这些基本数量类型的对象都重写了equals方法。 public static void main(String args[]){ int a = 12; int b = 12; System.out.println("基本数据类型比较:a==b-->" + (a== b));原创 2020-09-26 15:17:02 · 1485 阅读 · 0 评论 -
Mysql事务隔离级别、事务的ACID、事务的传播行为
一、事务的ACID特性1、原子性(Atomicity):事务开始后的所有操作要么全部成功,要么全部失败,不能停在某一个环节,如果执行过程中出错,要回滚到操作之前。2、一致性(Consistency):事务开始前和结束后,数据库的的完整性没有被破坏,比如A向B转账,不能A账号钱扣了,而B没有收到转账。3、隔离性(Lsolation):同一个数据在同一时间只允许一个事务处理,不同事务直接的操作彼此直接没有干扰,比如A正在给B转账,A给B转账结束前C不能给A转账。4、持久性(Durability):原创 2021-01-20 14:28:43 · 692 阅读 · 0 评论 -
@Transactional注解失效的场景,为何会失效
@Transactional是我们项目中很常用的一个注解了,@Transactional可以为我们控制事务,可以保证事务内的操作要么全部成功,要么全部失败,@Transactional也是基于AOP切面实现事务的功能的。下面列举一下使用@Transactional会导致事务失效的场景:1、@Transactional应用在了非publice的方法上,事务将会失效:原因是SpringAOP对事务进行代理增强的时候会调用到computeTransactionAttribute方法,这个方法里面进行了判断,原创 2021-12-18 14:36:25 · 3881 阅读 · 0 评论 -
理解MVC架构模式,SpringMVC原理、执行流程图解
1、MVC架构模式说起SpringMVC就不得不说MVC,MVC是一种经典架构模式。MVC架构模式的重点是为了解耦,将软件用户界面和业务逻辑分离以使代码可扩展性、可复用性、可维护性、灵活性加强,很多应用程序的问题在于处理业务数据和显示业务数据的视图的对象之间存在紧密耦合。有一句很有名的话:一个层次的重定向几乎可以解决计算机业务中的所有问题。在模型(Model)和视图层(View)之间引入重定向层可以解决解耦问题,这个重定向层就是控制层(Controller)。这样模型和视图就实现了代码分离,解耦了,由控原创 2021-12-15 12:08:49 · 5076 阅读 · 0 评论 -
请求转发和重定向的区别
1、什么是请求转发和重定向?请求转发:request.getRequestDispatcher(String path).forward(requst,response);重定向response.sendRedirect(String path);简单来说,请求转发是服务端内部做的事情,和客户端无关,客户端也无感知;而重定向是客户端请求服务端,服务端重定向,客户端在发起二次请求才能拿到结果。2、请求转发和重定向的区别1、重定向是response发起,请求转发是request发原创 2021-12-14 10:49:23 · 696 阅读 · 0 评论 -
IO简介、IO流的体系结构
什么是IO?IO就是Input,OutPut的简称,即输入输出。对计算机来说,计算机的核心CPU和内存,于其他设备之间的数据转移就是IO,比如数据从磁盘读到内存,数据从内存写入到磁盘都是IO操作。Java中输入输出是相对于Java程序而言,常见的上传图片,图片上传到程序接口中,对于程序来说是输入;下载文件,对于程序来说是输出。Java中常见IO体系java中分为字节流和字符流,字节流是以字节为单位,字符流是以字符为单位。1、字节流a、字节输入流InpuptStream– FileInputS原创 2021-07-07 10:29:38 · 1506 阅读 · 0 评论 -
java多线程、生命周期、start和run的区别、wait和sleep的区别
1、经常说多线程,那什么是线程,什么是多线程?线程是操作系统能够进行调度的最小单位,线程包含在进程中,是进程的实际运作单位。一个进程至少包含一个线程,可以有多个线程,每个线程可以执行不同的任务。一个进程可以理解为系统中运行的一个应用程序。2、多线程的好处采用多线程可以更好的利用系统资源,可以充分利用CPU的空闲时间,可以更快的提高程序的响应速度,可以设置不同任务的优先级顺序。3、java如何实现多线程继承Thread类,重写run方法;实现Runnable接口,重写run方法;使用线程池;原创 2021-07-21 16:42:15 · 662 阅读 · 3 评论 -
finally里面的代码return后会不会执行,什么时候执行?final,finally,finalize的区别
1、这是一个经常面试到的面试题:在finally代码前执行了return,那么finally里面的代码还会执行吗?是return前执行还是return后执行?finally一般都是配合try catch一起使用,一般用作资源释放等,无论程序释放异常或者其他方式返回,只要虚拟机不退出(一般也不会发生)finally里面的代码始终都会执行。会在return前执行。public static void main(String[] args){ int c = testReturn();原创 2021-07-02 09:52:06 · 1114 阅读 · 0 评论
分享