自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL数据库——慢查询如何优化

如何优化慢查询:1、首先我们要定位慢查询,可以根据日志定位慢查询SQL语句,使用explain等工具分析SQL,在要执行的的SQL前加上explain指令直接模拟MySQL优化器,接着看explain的关键字段,如果发现type的值是最后两个中的其中一个时,就需要优化了。2、定位到慢查询SQL之后,如何进行优化呢?2.1创建索引, 遵循最左前缀匹配,即SQL查询where条件字段必须从索引的最左前列开始匹配,不能跳过索引中的列。2.2范围查询放最后,不要对索引字段进行计算,函数等逻辑操作,尽量全值匹

2021-09-16 23:04:13 1054 1

原创 MySQL数据库——数据的分页

一般情况下,通过传递页码和每页条数两个参数去分页查询数据库中的数据,在数据量较小(万级以下)时使用MySQL自带的limit来解决分页问题、在数据量较小的时候使用limit进行数据分页在性能上不会有明显的缓慢。但是当数据量达到了万级以上的时候性能将会降低,会造成深度分页的问题,这个时候可以利用主键或唯一索引进行数据分页优化。但是要注意主键必须是自增,而且该方式不支持随机跳页,智能上下翻页。还有一种解决方案是通过Elastic Search搜索引擎,比如淘宝基本上就是把所有商品放进ES搜索引擎,淘宝商品这

2021-09-14 22:00:35 400

原创 MySQL数据库——truncate和delete的区别

Truncate和delete的区别:1、delete属于数据操作语言,不仅可以删除表中的数据,还可以删除基于真实表创建的视图中的数据,也可以结合where条件精确地删除某一条数据,还有可能涉及触发器。Truncate属于数据定义语言,只能删除表中的数据,不能作用于视图,而且不支持where子句,如果作用于表会直接删除表中的所有数据,而且不会设计触发器。2、delete删除数据涉及到缓存,当数据非常大时可能缓存不够用,而且速度会很慢。Truncate不涉及缓存,所以涉及到大量数据时,用truncate删

2021-09-12 15:19:19 650

原创 MySQL数据库——char和varchar的区别

char和varchar的区别1、char类型的长度固定,如果char类型的内容后面还有空间时,MySQL会在他的右边用空格字符补足。而varchar是一种可变长度的类型,每个值只占用刚好够用的字节加上一个用来记录其长度的字节。2、char类型每次修改的数据长度相同,效率更高,但是占用内存更大;varchar类型每次修改的数据长度不同,效率更低,但是占用空间相对较小。 对于MyISAM表,尽量使用char;对于InnoDB表,因为他的数据内部存储格式对固定长度和可变长度的数据不加区分,但是从节省空间来

2021-09-12 08:04:56 304

原创 MySQL数据库——事物的隔离级别

SQL 标准定义了四个隔离级别:READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻⽌脏读,但是幻读或不可重复读仍有可能发⽣。REPEATABLE-READ(可重复读): 对同⼀字段的多次读取结果都是⼀致的,除⾮数据是被本身事务⾃⼰所修改,可以阻⽌脏读和不可重复读,但幻读仍有可能发⽣。SERIALIZABLE(可串⾏化): 最⾼的隔离

2021-09-12 08:02:14 47

原创 MySQL数据库——事物的隔离型和并发事物带来的问题

什么是事物的隔离型?隔离性(Isolation): 并发访问数据库时,⼀个⽤户的事务不被其他事务所⼲扰,各并发事务之间数据库是独⽴的,并发事物带来的问题?在典型的应⽤程序中,多个事务并发运⾏,经常会操作相同的数据来完成各⾃的任务(多个⽤户对同⼀数据进⾏操作)。并发虽然是必须的,但可能会导致以下的问题。脏读(Dirty read): 当⼀个事务正在访问数据并且对数据进⾏了修改,⽽这种修改还没有提交到数据库中,这时另外⼀个事务也访问了这个数据,然后使⽤了这个数据。因为这个数据是还没有提交的数

2021-09-11 16:54:24 82

原创 浅谈MySQL数据库中的存储引擎

一、什么是存储引擎?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。二、介绍3中MySQL中常见的存储引擎1、MyISAM存储引擎它管理的表具有以下特征:使用三个文件表示每个表:格式文件 — 存储表结构的定义(mytable.frm)数据文件 — 存储表行的内容(mytable.MYD)索引文件 — 存储表

2021-09-10 14:09:06 87

原创 详解JVM--类加载、类加载器和双亲委派机制

1、类加载定义:Java虚拟机把描述类的数据加载到内存里面,并且对数据进行校验、解析和初始化,最终变成可以被虚拟机直接使用的class对象。过程:1、通过全类名获得该类的二进制流。2、将该二进制流的静态存储结构转为方法区的运行时的数据结构。3、在堆中为该类生成一个class对象。2、类加载器定义:类加载器是指通过一个类的全类名获取该类的二进制字节流叫做类加载器。类加载器可以分为以下4种:1、启动类加载器(BootStrapClassLoader):用来加载Java核心类库,无法被Java程序

2021-09-06 07:09:04 133

原创 秋招——欢聚集团笔试题分享

岗位:DBA工程师试卷:运维工程师试题形式:12道不定项选择题,8道简答题选择题范围比较广,主要是考察计算机基础知识。笔试题记录如下:1、LVS、nginx、NHaproxy的区别2、数据库中char和varchar的区别3、对称加密算法和非对称加密算法的原理。4、简述用户通过浏览器访问www.baidu.com过程中DNS解析的详细过程。5、简述用户通过浏览器输入www.abc.com到页面显示的全过程。6、文件open和close操作、7、XAS和CRSF漏洞的原理和预防措施。8

2021-09-05 19:20:27 175

原创 为什么说Java是半编译半解释型的语言?

Java程序的编译执行过程Java程序首先会由编译器编译成字节码文件(.class文件),然后字节码文件经过Java虚拟机解释成各平台可以执行的二进制机器码文件。这样看来,Java程序经过了编译和解释执行这两个过程,所以说他是半编译半解释型语言。我们再来理解一下这个过程中JVM即Java虚拟机的作用。在这个过程中,各个平台的JVM将相同的字节码文件解释成对应平台可以执行的二进制机器码文件,这样就实现了Java的跨平台运行。如果这样还不好理解,那么我们可以举一个简单的例子,假如有两只笔头不同的笔,两个相

2021-09-02 16:57:27 699 1

原创 反转链表的思路分析和Java实现

题目描述:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。例1、输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]例2、输入:head = [ ] 输出:[ ]思路分析:假设链表为 1→2→3→∅,我们想要把它改成 ∅←1←2←3。我们采用双指针的迭代的方法,第一个指针prev指向头结点的前一个节点,即null,第二个指针curr指向头结点。我们要实现反向,首先指针curr需要指向前一个节点,由于节点没有引用其前一个节点,因此必须事先存储其前一个

2021-08-31 17:26:15 100

原创 从JVM的角度理解进程和线程

先看这张Java内存区域图一个进程可以有多个线程,但一个线程只能属于一个进程。多个线程可以共享进程中的堆和方法区的资源,但是每个线程又可以有自己的程序计数器、虚拟机栈和本地方法栈。总结一下:线程是进程划分的更小的运行单位,一个进程在其执行过程中可以产生多个线程。区别1、进程的线程最大的区别是基本每个进程都是相互独立的,但是线程则不一定,因为一个进程中的线程很可能会相互影响。2、线程执行开销小,但是不利于资源的管理和保护;进程则相反。...

2021-08-30 17:30:07 433

原创 详解:如何判断链表中是否有环?

如何判断链表中是否有环是一道非常经典的题目,下面用3种方法实现。方法一:暴力双重循环直接使用双重循环,没什么好讲的。方法二:使用HashSet在方法一的基础上进行优化降低复杂度,使用hashSet作为额外缓存,可以减少一层循环,具体思路如下:首先创建一个以节点ID为Key的HashSet集合,用来存储曾经遍历过的节点。然后同样从头节点开始,依次遍历单链表中的每一个节点。每遍历一个新节点,都用新节点和HashSet集合中存储的节点进行比较,如果发现HashSet中存在与之相同的节点ID,则说明链表

2021-08-30 16:17:46 9616

原创 详解Java中重载和覆盖的区别

重载(overload)和覆盖(overide)是 Java 多态性的不同表现方式。重载是在一个类中多态性的一种表现,是指在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型。在使用重载时,需要注意以下几点:1)重载是通过不同的方法参数来区分的,例如不同的参数个数、不同的参数类型或不同的参数顺序。2)不能通过方法的访问权限、返回值类型和抛出的异常类型来进行重载。3)对于继承来说,如果基类方法的访问权限为 privae,那么就不能在派生类对其重载;如果派生类也定义了一个同名的函数

2021-08-27 09:07:43 6827

原创 详解Java中的多态实现机制

多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作作用在不同对象时,会有不同的语义,从而会产生不同的结果例如,同样是执行“+”操作,“3+4”用来实现整数相加,而“3”+”4”却实现了字符串的连接。在 Java 语言中,多态主要有以下两种表现方式:1)方法的重载(overload)。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。2)方法的覆盖(overide)。子类可以覆盖

2021-08-26 16:51:06 1258

原创 关于Java中参数传递的几种说法

在Java中,所有方法的参数传递都是值传递一、在方法中,修改一个基础类型的参数不会影响原始参数值(错误)在方法中,修改一个基础类型的参数不会影响原始参数值public static void main(String []args){ int i = 5; func(i); System.out.println(i);}static void func(int j){ j = 10;}//输出结果5在主方法调用func(int j) 时 , 参数i是

2021-08-25 10:33:03 583

原创 详解Java中 == 与 equals 区别

==和equals的区别1、= =比较的是值对于基本数据类型的变量来说,直接比较其存储的值是否相等。对于引用类型的变量,比较的是其所指对象的地址是否相等。因为Java中只有值传递,所以对于==来说,不管是比较基本数据类型变量,还是引用数据类型变量,本质上比较的都是值,只不过引用数据类型变量中存储的值是其对象的地址。2、对于equals方法,比较的是是否是同一个对象首先,equals()方法不能作用于基本数据类型的变量。另外,equals()方法存在于Object类中,而Object类是所有类的

2021-08-24 17:11:14 329

原创 详解:数组和链表的区别

1、数组的大小固定,不能动态改变,数组中的元素在内存地址中连续存储,所以在查找数据的时候效率比较高。缺点:数组在存储之前,需要先申请一块连续的内存地址,并且在编译的时候 就需要确定空间大小,在运行的时候其空间大小无法改变,有可能出现数组下标越界或者内存浪费的情况。在改变数组中元素个数的时候,效率比较低。2、而链表的大小可以动态改变,其内存地址也不是连续的,可以根据需要动态地删除或者增加内存地址,所以他的删除和增加操作比较灵活。缺点:因为链表检索元素时需要从第一个元素开始检索,所以他的查找效率比较低。

2021-08-23 20:43:53 172

原创 ep005_希尔排序的思路和Java实现

一、思路和图解上一节中我们讲到了简单插入排序,在最后提出了这样一个问题,如果最后的几个元素比较小,插入交换的次数会增多,那么我们排序的效率会比较低,所以我们需要找到一种提高效率的方法,便有了希尔排序。基本思路:希尔排序是在排序之前将元素分组,分组按下标的增量,然后对分组后的元素进行插入排序,随着增量的减小,每组包含的元素越来越多,数组也接近有序,当增量为一时,正好是一组,排序结束。二、图解三、Java实现代码 public static void shellSort(int[] arr) {

2021-08-13 16:59:35 72

原创 ep003_选择排序的图解和分析实现

一、算法实现的思路选择排序的基本思想是第一次假定第一个元素为最小值,然后将这个元素与剩下的元素进行对比,如果发现有比第一个小的元素,则将这个元素置为最小值,并且重置最小值的索引,然后继续和剩下的元素进行对比,这样第一趟遍历下来可以找到最小的元素,并且与第一个元素进行交换,如果没有找到,则不用交换。第二趟则将第二个元素当做最小值,重复第一步的步骤,第三步也是,直到最后一个元素。二、图解三、详细代码实现for (int i = 0; i < arr.length - 1; i++) { i

2021-08-12 17:17:48 46

原创 ep004_插入排序的实现和改进

一、基本思路插入排序的基本思路是把n个待排序的元素看成一个有序列表和一个无序列表,一开始有序列表只有一个元素,无序列表有n-1个元素,排序过程每次从无序列表中拿出第一个数与前面的有序表中的元素进行大小比较,并且将这个元素插入到有序列表中的适当位置,使之成为新的有序列表。顾名思义简而言之就是把前面已经排好序的元素看成一个列表,再把剩下的元素看成一个新的列表,每次把剩下元素的第一个元素插入到有序列表中合适的位置,知道第n个元素。二、图解下面给出一个图解事例,帮助大家理解。三、代码实现理解了上面的思

2021-08-11 22:26:00 72

原创 ep002_冒泡排序的实现和改进

一、冒泡排序的思路和代码实现冒泡排序是八大排序算法中比较简单也是比较基础的,排序的思路比较简单,思路如下:下面演示一个冒泡排序的例子(图解)如此一来冒泡的思路就很清楚了,代码实现自然也水到渠成。for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { // 如果前面的数比后面的数大,则交换 if (arr[j] > arr[j + 1]

2021-08-10 20:56:52 100 1

原创 ep001_我为什么开始写博客了?

一、初识博客学习计算机之后,接触到了博客这个东西,一开始以为这只是一个回答问题的地方。在开始学习的初期,碰到了不少问题,便通过打开浏览器百度解决,从那之后我发现搜索结果前面的那几个总是CSDN,博客园的回答,不过也确实能够解决当时我的大部分问题。自此我便认识了博客这个东西,在我的初印象里这就是一个解决问题还有学习的地方。二、爱上博客随着使用博客的次数增多,我发现这并不仅仅是一个可以解决我普通问题的地方,在这里有很多技术大佬分享自己的经验、项目和技术等等,最重要的是在博客里可以看到对同一个问题的不同解决

2021-08-09 21:46:19 82 1

空空如也

空空如也

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

TA关注的人

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