自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 JAVAEE常见面试题

equals 是Object 类中的方法,本质上和 == 一样,但是在重写后可以用于比较值,常见 String 类中就重写了 Equals 方法,可以直接比较值。对应的封装类:Integer、Short、Long、Byte、Float、Double、Boolean、Character。

2023-06-29 19:55:25 179 1

原创 JAVA锁机制常见面试题

实现原理:缓存一致性协议(MESI):当CPU写数据时,如果发现操作的变量时共享变量,即其他线程的工作内存也存在该变量,于是会发信号通知其他CPU该变量的内存地址无效。AQS 通过维护共享资源状态 和一个 先进先出的线程等待队列来实现一个多线程访问共享资源的同步队列,为每个共享资源都设置一个锁,线程在访问共享资源是会现货区锁,没有获取到放到线程等待队列。在进行读操作时,会在操作后加两个指令,一个防止前面的读指令重排,一个防止后面的写指令重排,在进行写操作时,会在操作前后各加一个内存屏障。

2023-06-23 17:55:58 270 1

原创 解锁并发编程中常见面试题

线程数小于核心线程数,创建线程直到达到指定的核心线程数,线程数大于等于核心线程数,且任务队列未满,将新任务放入任务队列,有新任务,但是任务队列放满, 查看线程数是否等于最大线程数,小于 创建新线程,等于,触发拒绝策略。run是线程内部的一个函数,调用start()是开启一个线程,此时主线程和子线程会依据时间片交替执行,但是直接调用run()则是在main主线程下直接调用一个普通方法,不存在多线程工作。:刚建立一个线程对象后,处于新建状态的,此时线程有自己的内存空间,通过调用start方法进入就绪状态。

2023-06-23 17:49:05 70

原创 Mysql事务与锁机制

MVCCRR级别下如何保证可重复读,RR级别下如何避免快照读时的幻读问题,同理可以推得在RC级别下MVCC无法解决幻读和不可重复读

2023-06-21 10:58:45 74

原创 浅谈Mysql索引

索引是一种特殊的数据结构,用来协助快速查询、更新数据库表中数据,索引实现通常采用B+树,此外索引需要在物理空间上进行存储,所以索引也是一种特殊的文件。提高数据检索速度在时间上,创建和维护索引需要消耗时间,在进行DML操作时需要对索引进行维护,降低DML操作的效率;在空间上,索引需要占用一部分物理空间。数据和索引存储在一起,找到索引就能找到数据数据和所以 分开存储,叶子结点存放数据对应的地址哈希表,红黑树,B树,B+树,多用B+树。

2023-06-19 18:21:38 59

原创 Mysql存储引擎、日志、二阶段提交

回滚日志(undo log):用于保持事务的原子性和一致性,InnoDB引擎在事务回滚时通过undo log实现,在进行DML操作时,会记录一条操作语句的快照,每条快照有一个指针指向上一条快照,这样一来undo log会形成一个链表,链首是最新的记录,链尾是最旧的记录,这个链不回无限增长,有个purge线程,定期删除无用的undolog数据。重做日志(redo log):物理日志,用于保持事务的持久性,每当操作时,在磁盘数据变更之前,将操作写入redo log,这样当系统奔溃重启后可以继续执行。

2023-06-19 09:47:34 43

原创 数据库基础

关系型数据库是将复杂的数据结构用较为简单的二维表来表示,由二维表及其之间的联系所组成的一个数据组。在该类型数据库中,对数据的操作基本上都建立在一张或多张表上,采用结构化查询语言(SQL)对数据库进行操作,关系型数据库是比较主流的数据库技术。易于维护:使用二维表的表结构,格式一致;使用方便:SQL语言通用,关系型数据库都可以使用SQL进行操作;复杂操作:可用于一个表以及多个表之间非常复杂的查询。读写性能比较差,尤其是海量数据的高效率读写;固定的表结构,灵活度稍欠;

2023-06-18 17:57:41 36 1

原创 浅谈虚拟机类加载机制

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终行程可以被匿迹直接使用的Java类型,这个过程被称作虚拟机的类加载机制。

2023-06-18 11:21:15 45 1

原创 浅谈JVM垃圾回收机制

G1将整个堆划分为多个独立区域 Region,Region是单次回收的最小单元,每个区域根据需要扮演新生代的Eden空间、Survivor空间或者老年代空间,回收前,G1根据回收锁的空间大小和所需时间,在后台维护一个价值优先级列表,最后根据设定的收集停顿时间(后续叫停顿参数)优先处理价值大的Region。半区复制:将内存划分为容量相等的两块,每次只是用一块,内存用完,将还活着的对象复制到另一块上,将已经使用的内存空间一次清理掉。在面对多数可回收的情况,只需要复制少数,而且分配内存时不需要考虑空间碎片。

2023-06-18 08:42:33 95

原创 浅谈深拷贝和浅拷贝

深拷贝是创建一个新的对象,在堆中重新申请一块内存,将被拷贝对象值复制到新的内存中,然后在栈中存放新地址的引用。基本数据类型:byte、short、int、long、double、float、boolean、char。通俗来讲,浅拷贝是增加了一个指向已经存在的内存地址的指针,拷贝前后的两个变量是有联系的。深拷贝和浅拷贝是对于引用数据类型,基本数据类型中没有此概念!引用数据类型:基本数据类型对应的封装类、类、数组、接口。引用数据类型:变量名指向堆空间中实际值在栈中的地址。

2023-06-17 11:30:58 29 1

原创 JVM面试题解析1

JVM的主要作用编译器把Java代码转换为字节码 类加载器把字节码文件加载到内存中,放在方法区中 命令解析器执行引擎将字节码指令翻译为底层系统指令,交给CPU执行什么情况下会发生栈内存溢出栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型。如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方法递归调用产生这种结果。 如

2023-06-17 10:38:31 40 1

原创 JVM内存结构

对JVM 四个区域进行了简要的总结

2023-06-17 08:41:15 45 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除