自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Innodb 引擎和 Myisam 引擎的实现

B+树非常适合做Mysql的索引的数据结构,但数据和索引到底怎么组织起来也是需要一番设计,设计理念不同也导致了Innodb和Myisam的出现,各自呈现独特的性能Myisam虽然查找性能极佳,但不支持事物,Innodb最大的特点就是支持ACID兼容事物功能,而且支持行级锁Innodb 创建表后生成的文件有:frm:创建表的语句idb:表里面的数据+索引文件Myisam 创建表后生成的文件有frm:创建表的语句MYD:表里面的数据文件(myisam data)MYI:表里面的索引文件(myi

2021-05-15 19:28:22 102 1

转载 Mysql索引的底层原理

索引的作用索引的作用是快速检索,而快速检索的实现本质是数据结构。通过不同数据结构的选择,实现各种数据的快速检索。Mysql索引底层数据结构选型1. hash表哈希表是做数据快速检索的有效利器。哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行具体数据的数据结构。从时间复杂度来讲,哈希算法是O(1),检索速度非常快,那为什么Mysql没有采取哈希作为其底层算法呢因为考虑到索引的一个常用手范围查找如果用哈希做范围查找,一个简单的思路就是一次

2021-05-15 17:58:56 104

原创 Mysql数据库的备份和还原

物理备份通过直接复制数据库的目录和文件实现,适用于大规模数据进行备份,并且要求实现快速还原生产环境。典型的物理复制就是复制MySQL数据库部分或全部目录逻辑备份保存数据库结构及数据内容的描述信息,如保存数据库结构及数据内容的sql语句,适用于少量数据的备份全备份备份某一时刻所有数据增量备份仅备份某一时段的发生改变的数据...

2021-05-14 21:01:30 92

原创 mysql主从复制

概念主从复制分为mater(主库)和slave(从库),主库负责增删改,因为查询操作一般较多,从库负责查询,实现读写分离。作用减轻数据库负载,优化数据库性能,读写操作分离,减轻单库CURD的压力,还有备份数据库的作用原理数据库复制默认为异步复制, 从主库负责到从库,复制操作由三个进程来完成,主库一个,从库两个要实现复制,首先打开主库的二进制日志(log-bin),log-bin存放着整个数据对的操作信息,所以从库从主库获取该更新日志,将其传输到本地,然后读取本地文件,执行日志里面的更新

2021-05-14 20:39:11 82

原创 面试专题-网络编程

TCP三次握手与四次挥手TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种表示:SYN(synchronous建立连接)ACK(acknowledgement 表示响应、确认)PSH(push表示有DATA数据传输)FIN(finish关闭连接)RST(reset表示连接重置)URG(urgent紧急指针字段值有效)第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:

2021-05-13 12:10:24 32

原创 浏览器回车事件后流程分析

大概流程查找域名对应的ip地址浏览器和服务器建立TCP连接浏览器通过http协议发送请求,请求数据包服务器接收请求并返回HTMl响应浏览器渲染页面浏览器发送嵌入html的其他内容(图片的URL)释放TCP连接解析域名的过程拿URL为www.baidu.com举例浏览器搜索DNS缓存,查看有没有和www.baidu.com一样的条目,而且没有过期,有则从缓存拿对于的ip地址浏览器如果从DNS缓存中没有找到,就会尝试读取hosts文件(位于C:WindowsSystem32dr

2021-05-12 21:16:50 45

原创 HTTP与HTTPS的理解

HTTPHTTP又叫超文本传输协议,用于从万维网服务器传输超文本内容到本地浏览器的传输协议,数据是以明文方式传输,如果有攻击者截取传输信息,可直接读懂里面的信息,因此,HTTP协议不适合传输一些敏感的信息。HTTPSHTTPS又叫超文本安全传输协议,在HTTP下加入SSL层,HTTPS的安全基础是SSL,加密详细内容需要SSL。主要作用是分两种:一种是建立一个安全信息通道,另一种是验证服务器的真实性。HTTP与HTPPS的区别HTTP是明文传输,数据都是未加密,安全性差,HTTPS数据传

2021-05-12 18:52:00 67 1

原创 快速排序的理解

快速排序采用分治策略思想选择一个基准数,通过一次排序把数组分割成2部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。自己的看法一次遍历的目的是把一个数作为中间值,假设这个数mid,把数组分为大于mid部分和小于mid部分,遍历的时候,先从后往前找比mid小的数,如果比mid小,就把这个值换到数组前面,然后从前面往后找,找比mid大的数换到后面…最后mid位于分区中间,再递归遍历两个分

2021-04-26 15:11:41 49

原创 代理

简介Proxy代理模式是一种结构型设计模式,作用是避免对象直接被访问java中代理技术主要用于扩展功能又修改源代码静态代理代理类和委托类都实现同一个接口,静态代理中在编译的时候就确定了代理类和接口实现类的区别委托类的方法必须和代理类的方法一致,调用代理类就像调用委托类一样静态代理的缺点一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率变低。动态代理可以很好解决动态代理依靠反射实现,在运行时才能动态创建成 动态代理涉及两个类java.lang.reflect.prox

2021-03-19 21:46:01 43

原创 IOC初步了解

IOC的推导假设我们用2个类实现同一个接口,当我们设计好实现2个类的方法后,如果我们要修改使用的类,就得到实现类里面修改new的对象,很繁琐,我们可以在实现类里面设置set,又set的对象去调用实现方法,而不是我们自己去设置这样我们要调用哪个类就用set方法set这个类;之前所有东西都是由程序去控制创建,而现在是由用户自行控制创建。把主动权交给了调用者,程序不用去管怎么创建它,而是只负责提供一个接口。IOC的本质控制反转IoC(Inversion of Control),是一种设计思想,DI

2021-03-19 09:59:48 41

原创 Tomcat与servlet

web服务器Web服务器是可以向发出请求的浏览器提供文档的程序。1、服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。2 、最常用的Web服务器是Apache和Microsoft的Internet信息服务器(Internet Information Services,IIS)。3、Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向Internet上的客户机提供WWW、Email和FTP等各种I

2021-03-18 00:29:27 288

原创 反射

什么是反射编译的时候不知道哪个类被加载,只有运行的时候才加载,并获得类完整的属性和方法反射的作用运行的时候,需要外部传入一个对象,然后在程序中运用这个对象,我们可以通过配置文件中的类路径,找到这个对象的所有消息,从而加以引用实现获取类的对象Class<?> clazz = Class.forName("com.Dan.Consumer");Object object = clazz.newInstance();获取类的方法public Method[] getDec

2021-03-13 00:45:58 53

原创 JUC初步理解(三)

线程池池化技术提前准备好资源,在需要用的时候,重复利用这些预选准备的资源提前创建,重复使用在java创建时一般有这几个步骤1 根据new标识后面的参数去产量池查找类的符号引用2 如果没有找到,再对类进行,加载,连接,初始化3 虚拟机在堆中为对象分配内存,针对对象头,建立起对应的数据结构(耗时操作,需要寻找空闲区域,修改内存分配状态)4 调用对象初始化方法(用户的复杂逻辑操作耗时)所以说创建一个类需要历经复杂繁琐的操作,然后池化技术可以提前创建类,并重复利用。线程 VS 线程池在

2021-03-12 20:27:32 56

原创 JUC初步理解(二)

CopyOnWriteArrayListWhenCopyOnWriteArrayList是jdk1.5以后并发包提供的一种并发容器,写操作通过创建底层的数组的新副本实现,是一种读写分离的并发策略,被我们称为“写时复制容器”,类似的还有CopyOnWriteArraySetWay集合框架ArrayList是线程不安全的,vector虽然是线程安全的,但处理方式简单粗暴synchronized,性能差,而CopyOnWriteArrayList提供了不同的的处理并发思路How很多时候,我们

2021-03-11 16:33:53 65

原创 JUC初步理解(一)

JUC是java.util.concurrent工具包的简称,是一个处理线的工具包进程与线程进程:程序的运行过程线程:操作系统进行运行调度的最小单位,被包含在进程中,是进程中运行的实际单位进程与线程的关系,比如电脑开了一个文档,文档运行就是进程,文档中打字,查找,等等操作就是线程。wait/sleep的区别来自不同的类:wait=>Object sleep=>Thread关于锁的释放:wait会释放,sleep抱着锁睡觉,不会释放使用范围不同:wait必须在同步代码块中,

2021-03-10 09:57:50 80

原创 jvm初步理解

jvm初步理解1.jvm的位置操作系统之上2.jvm的体系结构 类加载器负责class的加载,将class文件的字节码存入内存,并将这些内容转化成运行时方法区的数据结构,classloader只负责类的加载.class文件由.java编译而来,存在本地磁盘classLoader:加载本初始.class文件,得到真正的class类,就是模板Car Class:当前类模板,存在方法区中car1:实例对象,可以有多个,模板只有1个类加载器的种类根加载器:又c++编写,程序自

2021-03-08 15:56:43 49

原创 LeetCode解析---1117. H2O 生成

题目现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。这些线程应该三三成组突破屏障并能立即组合产生一个水分子。你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。换句话说:如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线程

2020-06-07 13:20:15 156

原创 LeetCode解析---1419. 数青蛙

题目给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 “croak” )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。注意:要想发出蛙鸣 “croak”,青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5个字母。如果没有输出全部五个字母,那么它就不会发出声音。如果字符串 croakOfFrogs 不是由若干有效的 “croak” 字

2020-06-05 13:10:37 356

原创 LeetCode解析---1306. 跳跃游戏 III

题目这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的 任意 下标处。注意,不管是什么情况下,你都无法跳到数组之外。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/jump-game-iii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:输入:arr

2020-06-03 22:02:29 152

原创 LeetCode解析---面试题49. 丑数

题目我们把只包含因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/chou-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解

2020-06-01 20:33:42 96

原创 LeetCode解析---435. 无重叠区间

题目给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/non-overlapping-intervals著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出:

2020-05-30 13:20:55 125

原创 LeetCode解析---347. 前 K 个高频元素

题目给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案

2020-05-28 12:46:31 76

原创 LeetCode解析---752. 打开转盘锁

题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的

2020-05-26 13:33:00 146

原创 LeetCode解析---1094. 拼车

题目假设你是一位顺风车司机,车上最初有 capacity 个空座位可以用来载客。由于道路的限制,车 只能向一个方向行驶(也就是说,不允许掉头或改变方向,你可以将其想象为一个向量)。这儿有一份乘客行程计划表 trips[][],其中 trips[i] = [num_passengers, start_location,end_location] 包含了第 i 组乘客的行程信息:必须接送的乘客数量;乘客的上车地点;以及乘客的下车地点。这些给出的地点位置是从你的 初始 出发位置向前行驶到这些地

2020-05-24 12:59:58 250

原创 LeetCode解析---442. 数组中重复的数据

题目给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-all-duplicates-in-an-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:输入: [4,3,2,7,8,2,3,1]输出

2020-05-22 11:11:13 60

原创 LeetCode解析---841. 钥匙和房间

题目有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,…,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,…,N-1]中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。最初,除 0 号房间外的其余所有房间都被锁住。你可以自由地在房间之间来回走动。如果能进入每个房间返回 true

2020-05-19 21:43:05 75

原创 LeetCode解析---1375. 灯泡开关 III

题目房间中有 n 枚灯泡,编号从 1 到 n,自左向右排成一排。最初,所有的灯都是关着的。在 k 时刻( k 的取值范围是 0 到 n - 1),我们打开 light[k] 这个灯。灯的颜色要想 变成蓝色 就必须同时满足下面两个条件:灯处于打开状态。排在它之前(左侧)的所有灯也都处于打开状态。请返回能够让 所有开着的 灯都 变成蓝色 的时刻 数目 。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/bulb-switcher-ii

2020-05-18 21:42:50 213

原创 LeetCode解析---213. 打家劫舍 II

题目你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]输出: 3解释: 你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),因为他们是相邻的。示

2020-05-16 23:24:48 61

原创 LeetCode解析---89. 格雷编码

题目格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/gray-code著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例 1:输入: 2输出: [0,1,3,2]解释: 00 - 001 - 111

2020-05-14 12:44:57 105

原创 LeetCode解析---面试题51. 数组中的逆序对

题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。示例 1:输入: [7,5,6,4]输出: 5分析:我们这里用归并排序算法,有的「逆序对」来源于 3 个部分: 左边区间的逆序对;右边区间的逆序对;横跨两个区间的逆序对。public class Solution { public int reversePairs(int[] nums) { int len = nums.len

2020-05-12 12:57:47 188

原创 LeetCode解析---739. 每日温度

题目根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。举例给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。解析我们先从计算右边,那么我们计算过的位置就不需要重复计算public int[] dailyTemperatures(int[] T) { int le

2020-05-10 11:39:06 60

原创 LeetCode解析---514. 自由之路

题目视频游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。旋转 ring 拼出 k

2020-05-08 22:09:04 158

原创 LeetCode解析---162. 寻找峰值

题目:峰值元素是指其值大于左右相邻值的元素。给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设 nums[-1] = nums[n] = -∞。示例 1:输入: nums = [1,2,3,1]输出: 2解释: 3 是峰值元素,你的函数应该返回其索引 ...

2020-05-06 18:59:12 72

原创 LeetCode解析---152. 乘积最大子数组

题目给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0 解释:结果不能为 2, 因为 [-2,-1] 不是子数组。来源:力扣(LeetCode)链接:https://leetcode-...

2020-05-04 09:53:50 130

原创 LeetCode解析---151. 翻转字符串里的单词

题目给定一个字符串,逐个翻转字符串中的每个单词。说明:无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。示例 1:输入: “the sky is blue”输出: “blue is sky the”示例 2:输入: " hello world! "输...

2020-05-02 10:41:55 70

原创 LeetCode解析---150. 逆波兰表达式求值

题目根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/evaluate-reverse...

2020-04-30 21:11:48 74

原创 LeetCode解析---149. 直线上最多的点数

题目:给定一个二维平面,平面上有 n 个点,求最多有多少个点在同一条直线上。示例 1:输入: [[1,1],[2,2],[3,3]]输出: 3解释:^|| o| o| o±------------>0 1 2 3 4示例 2:输入: [[1,1],[3,2],[5,3],[4,1],[2,3],[1,4]]输出: 4解释:...

2020-04-28 10:34:17 93

原创 LeetCode解析---138. 复制带随机指针的链表

题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,...

2020-04-26 21:27:39 72

原创 LeetCode解析---135. 分发糖果

题目:老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/cand...

2020-04-24 12:34:11 144

原创 LeetCode解析---134. 加油站

题目:在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i]升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。来源:力扣(LeetCode) 链接:https://leetcode-cn.com/pro...

2020-04-22 21:58:58 336

空空如也

空空如也

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

TA关注的人

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