数据库
文章平均质量分 63
2418ly
摆烂
展开
-
面试题07 mysql中事务的实现原理
我们在多并发一段数据的时候,但事务还没有提交,此时数据是可读的,所以我们有Read View控制那些数据时可读的和那些是不可读的,不同的事务隔离级别中,当有事物在执行过程中修改了数据(更新版本号),在并发事务时需要判断一下版本链中的哪个版本是当前事务可见的。lnnoDB使用回滚段中的信息来执行事务回滚所需的撤消操作,它还使用这些信息构建行的早期版本,以实现一致的读取。mysql通过mvcc来实现多版本的事务的控制,它主要通过Read View控制的就是有哪些数据是可以被用户访问到的。原创 2023-12-03 10:19:48 · 326 阅读 · 1 评论 -
面试题06 jvm原理
我们在new对象的时候会在新生代中产生很多垃圾,这里面垃圾可以使用我们之前讲过的复制清除算法,但老年代中的数据常年积攒,满的时候就触发g1操作,但是老年代的心理是非常慢的,在这个清理的过程会产生stw操作,产生这个操作会除了清理垃圾的线程之外的线程全部暂停,所以我们要尽量减少这段时间,g1就可以解决这些问题,通过可达性算法可知查找是非常缓慢的,所以我们将查找和用户线程并行,这样的时候我们就只用stw一段时间用来删除这些找到的垃圾。那么,虚拟机的运行过程是怎么样的呢?5.不同的垃圾回收器。原创 2023-12-01 11:24:34 · 326 阅读 · 1 评论 -
面试题04 数据库索引的原理?创建索引的缺点是什么,什么情况索引失效?优化数据库的方法有哪些?
以下图为例,上面为根节点,下面为叶子节点,在b+树中,每个节点大小是固定的,节点中会存放键值,键值又分为主键值和非主键值,主键值就是我们创建表的时候的ID,它会把这个ID存放到叶子中用于二分查找,如果是非主键值的话就不是用这个二分查找,而是类似于我们的字段username这种作为索引,将这里面的值写到叶子当中,接下来,我们已主键的索引为例,一个表可以建立多个索引,默认它一定会一个索引,就是主键索引,这个索引在创建表的时候就创建好了,在我们写入数据的时候,会将这个索引从根节点开始给它分配它需要存在哪里。原创 2023-11-30 18:09:51 · 410 阅读 · 0 评论 -
面试题01 mysql使用innodb引擎,请简述mysql索引的最左前缀如何优化orderby语句
如下图即为索引的左前缀,简单来说,我们创建的一个索引,这个索引中有多个字段,那么我们在使用这个索引时应遵循从左到右顺序使用,如上图的a,b,c字段,我们在使用是应为先a到b再到c的顺序,如果我们跳过了a,则整个索引将失效,如果我们想从a一步飞到c,那c将失效,因为我们跳过了b,并且在使用索引时应避免出现大于或小于等的范围,这会使后面的索引失效,在索引中也是可以使用like关键字的,但前提是%不能出现在查找字的前面,否则,此字段将变为范围,导致后面的索引失效。原创 2023-11-28 21:22:00 · 485 阅读 · 0 评论 -
面试题02 JVM 内存模型中,为什么要区分新生代和年老代,对于新生代,为什么又要区分eden 区survial区?
新生代中一般保存新出现的对象,所以每次垃圾收集时都发现大批对象死去,只有少量对象存活,便采用了复制算法,只需要付出少量存活对象的复制成本就可以完成收集。老年代中一般保存存活了很久的对象,他们存活率高、没有额外空间对它进行分配担保,就必须采用“标记-清理”或者“标记-整理”算法。简单来说,新生代占1/3堆空间,老年代占2/3堆空间,新生代的数据更新快,老年代的数据更新慢,一段时间后,将新生代中重要数据放入老年代中,新生代中剩下的数据被回收。原创 2023-11-29 09:39:00 · 416 阅读 · 1 评论