- 博客(16)
- 收藏
- 关注
原创 mybatis的一级缓存和二级缓存
前引 mybatis一级缓存和二级缓存是经常出现在面试中的一道题目,想要区分一级缓存和二级缓存首先要了解mybtis中比较重要的几个类的生命周期。SqlSessionFactory SqlSessionFactory是mybatis启动时读取所有配置文件后创建的一个全局的对象。它在mybatis启动时开始创建,直到mybatis关闭时销毁。存在于整个生命周期中...
2020-04-13 22:48:07 178
原创 mysql优化
count操作在MySQL InnoDB存储引擎中,COUNT(*)和COUNT(1)都是对的所有结果进行的COUNT。如果有WHERE子句,则是对所有符合筛选条件的数据行进行统计。如果没有WHERE子句,则是对数据表的数据行数进行统计。因此COUNT(*)和COUNT(1)本质上没有区别,执行的复杂度都是O(N),也就是采用全表扫描,进行循环+计数的方式进行统计。如果是MySQL MyI...
2019-07-01 10:21:25 140
原创 dubbo简单理解
什么是rpc?rpc远程过程调用。通过网络通信来实现远程的调用。原理图步骤:1.服务提供者定义接口和服务实现并提交到注册中心2.客户端从注册中心订阅服务3.客户端通过代理对象调用服务。代理类主要是对客户端网络进行增强。4.客户端代理把需要调用的对象、方法、参数序列化成数据5.客户端与服务端通过socket通讯传输数据6.服务端从网络中拿到调用信息反序列化成对...
2019-06-24 13:00:29 281
原创 Mysql架构之Mysql复制
Mysql集群架构好处(1)提高高可用。如果某个数据库实例出现问题,这时候可由其他的数据库实例提供服务,或者可以快速的切换到其他数据库实例,对于业务来说基本上无感知,也不会导致业务的中断。同时过多的数据在多个数据库实例之间的复制,提高了数据的安全性和可用性。(2)提高性能。业务对数据的访问可以分散到不同的数据库实例上,可以根据数据访问类型不用,将不同性质的访问操作,进行分离,都可以降低...
2019-02-27 17:14:09 827
原创 浅谈索引(一)
什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。简单来说索引的出现就是为了提高数据的查询效率,就像书的目录一样。索引的常见模型1.哈希表哈希表是一种以键-值(key-value)存储数据的结构。哈希的思路就是,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置上。不可避免的,多个ke...
2019-02-25 16:40:54 304
转载 Redis的AOF和RDB原理及优缺点
持久化意义redis持久化的意义主要在于故障恢复,比如部署了一个redis服务器,作为缓存里面可能有些重要数据,如果没有持久化,redis遇到灾难性故障时就会丢失所有的数据。所以持久化是必不可少的。RDB和AOF两种持久化机制介绍RDB持久化机制是对redis中数据进行周期性的持久化。AOF持久化机制对每条写入命令作为日志,以append-only(追加)模式写入到一个日志文件中,...
2019-02-23 12:00:35 2192 1
转载 Redis过期策略以及内存淘汰机制
过期建删除策略:删除键的目的就是为了释放内存。定时删除: 1.设置键的过期时间时,创建一个Timer,当过期时间到临时,立刻删除键。 2.内存友好策略。一旦键过期,就会被删除,并释放所占的内存。CPU不友好,当一批数量较多的key过期时,正好遇上CPU紧张的时段,这时候需要的是CPU处理能力,而不是内存,显然Cpu时间用在删除键上,会对服务器的吞吐量和响应时间造成影...
2019-02-22 11:15:37 236
转载 面试问题汇总缓存击穿、缓存失效、热点Key解决方案
缓存击穿、缓存失效、热点Key解决方案缓存击穿: 查询一个数据库中不存在的数据,比如商品详情,查询一个不存在的ID,每次都会访问DB,如果有人恶意破坏,很可能直接对DB造成过大的压力。解决方案:1.增加二级缓存。查询时,如果key不存在,且DB中无数据,对这个不存的key设置一个标识key,进行缓存。以后再查询key时,先查询标识缓存,如果标识缓存存在则返回一个false或者NULL值...
2019-02-22 10:05:48 223
转载 缓存一致性
缓存一致性 将数据不一致分为三种情况: 1.数据库有数据,缓存没有数据; 2.数据库有数据,缓存有数据,数据不相等; 3.数据库没有数据,缓存有数据。 缓存策略:Cache Aside Pattern1.首先尝试从缓存读取,读到数据则直接返回;如果读不到,就读数据库,并将数据写到缓存,并返回。2.需要更新数...
2019-02-21 16:38:41 482
原创 谈谈final、finally、finalize有什么不同?
Q:谈谈final、finally、finalize有什么不同?典型回答final可以用来修饰类、方法、变量,分别有不同的意义,final修饰的class代表不能继承和扩展,final修饰的变量是不可以修改的,而final的方法也是不可以被重写的。finally则是java保证重点代码一定要被执行的一种机制。我们可以使用try-catch-finally或者try-finally来进行...
2018-12-04 16:25:14 231
原创 Exception和Error有什么区别?
Q:请对比Exception和Error,另外,运行时异常与一般异常有什么区别?典型回答Exception和Error都是继承了Throwable类,在java中类型的实力才可以被抛出或者捕获,它是异常处理的基本组成类型。Exception和Error体现了java平台设计者对不同异常情况的分类。Exception是程序正常运行时,可以预料的意外情况,可能并且应该被捕获,进行相应的处理...
2018-12-04 11:11:03 167
原创 谈谈java平台的理解
Q:谈谈你对java平台的理解?“java是解释执行”,这句话正确吗?典型回答java本身就是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次到处运行”(Compile once, run anywhere),能够非常容易的获得跨平台的能力;另外一个就是垃圾收集(GC),java通过垃圾收集器回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。对于“jav...
2018-12-03 22:04:52 326
原创 一条SQL更新语句是如何执行的?
针对链接中文章的读后思考:https://time.geekbang.org/column/article/68633redo log概念 redo log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态。 ...
2018-11-28 17:02:19 539
转载 一条SQL查询语句是如何执行的?
引言:一条简单的查询SQL是如何执行的?比如,有一个最简单的表,表里只有一个ID字段,执行如下的这个查询语句:select * from T where ID = 10;首先我们先看看Mysql的基本架构示意图:大体来说,Mysql可以分为Server层和存储引擎层两部分。Server层包括连接器、查询换成、分析器、优化器、执行器等,涵盖了Mysql的大多数核心服务功能,...
2018-11-26 16:32:46 720
转载 Java内存溢出异常
Java堆溢出Java堆用于存储对象实例,只要不断的创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,那么在对象数量到达最大对的容量限制后就会产生内存溢出异常。package com.xrq.test;import java.util.ArrayList;import java.util.List;/** * 测试内容:堆溢出 * * ...
2018-09-17 21:08:53 168
转载 java内存区域与内存溢出异常
运行是内存区域java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。1.线程独有的内存区域(1)程序计数器(Program Counter Register)这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过改变这个计数器的值来选取下一条需要执行的字节码指令。Java方法这个计数器才有值,如果执行的是一个Native方法,...
2018-09-17 16:13:34 119
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人