自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL学习 基础篇(一)

基础篇01讲 一条SQL查询语句是如何执行的MySql的逻辑框架图(1)server层: 连接器、查询缓存、分析器、优化器、执行器(2)存储引擎层:数据的存储和提取语句执行过程连接器 : 建立客户端与服务端的连接(TCP三次握手)、获取权限、维护和管理连接-- 创建连接命令 -p直接姐密码容易泄漏,不建议mysql -h$ip -P$port -u$user -p-- 查看连接情况show processlist查询缓存: 查询语句和查询结果以(k,v)的形式

2022-01-09 23:27:02 647

原创 构造平衡二叉搜索树(AVL)(Java实现)

构造平衡二叉搜索树(AVL)(Java实现)定义在之前的博客中提到过,二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,引入了平衡二叉搜索树。当向二叉搜索树中插入新结点后,保证每个结点的左右子树高度之差的绝对值不超过1。特性一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)如果一棵二叉搜索树是高度平衡的,它就是AVL树

2021-03-18 10:21:59 227

原创 Linux—权限管理

Linux—权限管理1.角色在Linux中将访问一个文件的人分成三种类别。文件和文件目录的所有者:u—User文件和文件目录的所有者所在的组的用户:g—Group其它用户:o—Others2.基本权限读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限 。写(w):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限 。注意一个文件具有写权限,不代表可以删除该文件,删除一个文件的前提是对文件所在的目录具有写权限。执

2021-03-08 23:48:42 184

原创 Linux—用户管理

Linux—用户管理Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制。普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。添加用户语法 : useradd [选项] 用户名useradd XiaoMingcd /homell需要说明的是在/home/ 目录下有各个创建的用户对应的家目录,当用户登陆时,会自动的进入自己的家目录。而且Linux的用户至少属于一个组,创建用户时,当

2021-03-07 22:37:07 191

原创 Java基础知识总结(二) ——泛型

Java基础知识总结(二) ——泛型1. 为什么要有泛型?先来看一下在没有引入泛型之前的场景:假设我们要用list来存储学生的成绩。public static void main(String[] args) { ArrayList list = new ArrayList(); // 存放学生成绩 list.add(78); list.add(88); list.add(98); list.add(88)

2021-03-07 17:11:04 204 2

原创 Java基础知识总结(一)

Java基础知识总结(一)1. 关于 JVM 、JDK 和 JRE 的关系JDK: Java Development Kit的缩写,Java开发工具包,提供给Java程序员使用,包含了JRE,还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译程序。JRE: Java Runtime Environment 的缩写,Java运行时环境,包含了JVM,Java基础类库。是使用Java语言编写程序运行的所需环境 ,但是,它不能用于创建新程序。JVM:Jav

2021-03-06 17:22:14 131 1

原创 Linux—vim编辑器基本用法

Linux—vim编辑器基本用法vim 是一个非常古老的命令行下的开发工具。可以理解成一个更高端的记事本。很多 Linux 都会内置 vim , 作为默认编辑器。我们后续在服务器上直接修改一些配置文件的时候经常会用到。vim 的操作风格非常有特点, 分成多种 “模式”。普通模式: 启动 vim 默认是普通模式。此时键盘按键不是直接输入文本, 而是各种功能的快捷键。下面打开a.txt文件演示普通模式和常用的快捷键。vim a.txt // 回车后直接进入普通模式,显

2021-03-04 22:33:42 535 1

原创 二分查找模板及习题练习

二分查找模板及习题练习二分查找:二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法,前提是数据结构必须先排好序,可以在数据规模的对数时间复杂度内完成查找。但是,二分查找要求线性表具有有随机访问的特点,也要求线性表能够根据中间元素的特点推测它两侧元素的性质,以达到缩减问题规模的效果。二分查找的本质并不是单调性,而是区间内存在某个性质,使左边满足而右边不满足。模板一:查找符合区间的最左边的值(从右往左逼近)public int binarySearch(int l, int

2021-03-03 21:05:55 299 1

原创 构造前缀树(Java实现)

构造前缀树(Java实现)前缀树(TrieTree)定义前缀树:称又Trie树,是一种存储大量字符串的树形数据结构。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,提高查询效率。从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。代码实现class Trie { public static class TrieNode { private boolean isEnd; private TrieNode[

2021-02-28 23:00:59 282

原创 构造队列及循环队列(Java实现)

构造队列及循环队列(Java实现)队列定义队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)代码实现链表实现public class Queue { public static class Node{ int val; Node next;

2021-02-27 20:15:12 131

原创 构造栈(Java实现)

构造栈(Java实现)定义栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。代码实现顺序表实现public class Stack { private int[] array; private int size; public Stack(int n){ array = new int[n];

2021-02-26 17:20:27 164

原创 构造二叉搜索树(Java实现)

构造二叉搜索树定义二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树特性二叉搜索树中最左侧的节点是树中最小的节点,最右侧节点一定是树中最大的节点采用中序遍历遍历二叉搜索树,可以得到一个有序的序列代码实现public class BSTree { //定义Node类 public s

2021-02-25 22:10:52 1519 1

原创 图解TCP三次握手四次挥手

图解TCP三次握手四次挥手三次握手以上就是三次握手的具体过程,下面再来从状态,以及每一次握手发送双方的状态转变来看一看。三次握手是为了确认发送双方的通信正常,也就是保证双方的接受、发送能力都没有问题。第一次握手:客户端向服务器发送带有 SYN 标志的数据包,请求建立客户端与服务器间的通信,客户端的状态由CLOSED转换为SYN_SENT,服务器接收到数据后,可以明确自己的接受能力正常,客户端的发送能力正常。状态由LISTEN转换为SYN_RCVD。第二次握手:服务器发送带有 SYN/ACK

2020-08-31 21:39:53 173

原创 位运算解决“只出现一次的数字”

位运算解决“只出现一次的数字”只出现一次的数字题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。示例输入: [2,2,1]输出: 1题解相同的数异或为0 :1^1=0任何数与0异或等于其本身 : 1^0=1 public int singleNumber(int[] nums) { int ret=0; for(int num:nums){ ret^=num;

2020-08-06 22:26:38 362

原创 Java:String、StringBuffer和StringBuilder的异同

Java:String、StringBuffer和StringBuilder的异同Java中与字符串相关的类主要有String、StringBuffer和StringBuilder,他们主要有什么区别,又为什么会这样呢?结合源码来分析一下。概述String:不可变的字符序列,底层使用char[]存储StringBuffer:可变的字符序列,线程安全,效率低,底层使用char[]存储StringBuilder:可变的字符序列,线程不安全,效率高,底层使用char[]存储Why?String

2020-08-02 22:01:19 122

原创 java线程池知识总结(附上思维导图)

java线程池知识总结(附上思维导图)线程池的优点线程池最大的好处就是减少每次启动、销毁线程的损耗 。构造方法及参数意义public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue workQueue,RejectedExecutionHandler handler)corePoolSize:允许核心线程的最大值maximumP

2020-07-10 16:46:20 346

原创 java多线程案例——生产者消费者模型

java多线程案例——生产者消费者模型什么是生产者消费者模型?生产者消费者模型就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的 。通信机制对于Java中的每一个个对象,对象上关联着一个monitor lock (监视器锁),还关联

2020-06-14 23:30:46 169

原创 Java多线程安全

Java多线程安全1. 什么是线程安全在解释什么是线程安全之前,我们先来看一个线程不安全的场景:public class Test { private static long n=0; private static long count=1_000_000_000L; static class Add extends Thread{ @Override public void run() { for(int

2020-06-09 23:41:46 205

原创 Java多线程基础知识总结

Java多线程基础知识总结1. 进程 VS 线程进程:是操作系统分配资源的最小单位;是程序的一次动态执行。线程:是操作系统调度的最小单位。2. 创建线程继承Thread类public class ThreadTest { public static void main(String[] args) { Thread t1=new MyThread(); t1.start(); } }class MyTh

2020-06-07 00:06:01 191 1

原创 Linux文件目录基本操作(2)

Linux文件/目录基本操作(1)1.cp指令语法:cp [选项] 源文件或目录 目标文件或目录功能:复制文件或目录 ,相当于windows中的复制粘贴常用选项:-f 强行复制文件或目录,不论文件或目录是否存在-r 递归处理,将指定目录下的文件和子目录一块处理复制到同一目录下复制到不同目录下2.mv指令语法:mv [选项] 源文件或目录 目标文件或目录功能:相当于windows中的剪切粘贴、文件重命名常用选项:-f 如果目标文件已经存在,不会询问而直

2020-05-25 22:10:04 258

原创 Linux文件目录基本操作(1)

Linux文件/目录基本操作(1)1.ls指令语法:ls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息常用选项:-a 列出目录下所有文件 ,包括以 .a开头的隐含文件-l 列出文件的详细信息2.pwd指令语法:pwd功能:显示用户当前所在的目录常用选项:3.cd指令语法:cd 目录名功能:改变工作目录。将当前工作目录改变到指定的目录下。常用选项:cd … 返回上级目录

2020-05-25 11:46:50 440

原创 LeetCode-面试题 17.06. 2出现的次数

LeetCode-面试题 17.06. 2出现的次数题目描述编写一个方法,计算从 0 到 n (含 n) 中数字 2 出现的次数。示例输入: 25输出: 9解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)题解一看到这道题,可能很多人的想法和我一样,去遍历 0 到 n中的每一个数,依次计算2出现的次数。public int numberOf2sInRange(int n) { int count=0; for(int

2020-05-18 20:41:40 956 1

原创 人民币转换解析

人民币转换解析题目描述1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个...

2020-04-27 23:30:42 370

原创 Java中自定义类型如何进行比较

Java中自定义类型如何进行比较假设我们定义了一个Person类,那么如何实现Person类对象的比较呢?class Person{ public String name; public String gender; public int age; public String ID; Person(String name, String gender...

2020-04-06 14:49:37 403

原创 神奇的口袋解析

神奇的口袋题目描述有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。输入描述输入的第一行是正整数n (1 &l...

2020-04-03 19:59:05 506

原创 常见的排序算法之:冒泡排序和选择排序

常见的排序算法之:冒泡排序和选择排序1.冒泡排序1.1原理在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序 。1.2实现 public static void bubbleSort(int[] array) { //i代表需要比较的趟数 for(int i=0;i<array.length-1;i++){...

2020-03-30 17:52:22 183

原创 常见的排序算法之:直接插入排序和希尔排序

常见的排序算法之:直接插入排序和希尔排序1.直接插入排序1.1原理整个区间被分为有序区间和无序区间,每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。1.2实现 public static void insertSort(int[] array) { for(int i=0;i<array.length-1;i++){ //va...

2020-03-27 14:51:44 203

原创 常见的排序算法之:堆排序

常见的排序算法之:堆排序1.原理排升序要建大堆;排降序要建小堆 。接下来以升序为例进行堆排序。假设堆有n个元素,由于堆的第一个元素一定是最大的元素,因此可以让第一个元素和第n个元素互换,然后对第一个元素执行向下调整。接着,对n-1个元素执行相同的操作,让第一个元素与第n-1个元素互换,然后对第一个元素执行向下调整,依次类推,最后的堆就是从小到大排序好的堆。2.实现 //向下调整 pu...

2020-03-18 22:16:01 143

原创 常见的排序算法之:归并排序

常见的排序算法之:归并排序1.原理归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。2.实现1)递归实现 public static void mergeSo...

2020-03-14 17:22:51 161

原创 常见的排序算法之:快速排序

常见的排序算法之:快速排序1.原理​ 1)从待排序区间选择一个数,作为基准值(pivot);​ 2)Partition: 遍历整个待排序区间,将比基准值小的(可以包含相等的)放到基准值的左边,将比基准值大的(可以包含相等的)放到基准值的右边;3)采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间的长度 == 0,代表没有数据...

2020-03-12 20:39:08 129

原创 Java实现建堆

堆(heap)概念:堆逻辑上是一棵完全二叉树堆物理上是保存在数组中满足任意结点的值都大于其子树中结点的值,叫做大堆,或者大根堆,或者最大堆下标关系:已知双亲(parent)的下标,则:左孩子(left)下标 = 2 * parent + 1;右孩子(right)下标 = 2 * parent + 2;已知孩子(不区分左右)(child)下标,则:双亲(parent)下标 =...

2020-02-29 21:26:27 1334

原创 迭代实现二叉树的前中后序遍历

前序遍历public List<Integer> preorderTraversal(TreeNode root) { List<Integer>list=new LinkedList<>(); Stack<TreeNode>stack=new Stack<>(); if(root==nu...

2020-02-23 21:25:18 94

原创 二叉树的遍历方法

二叉树的概念:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。二叉树的特点:每个结点最多有两棵子树,即二叉树不存在度大于 2 的结点。二叉树的子树有左右之分,其子树的次序不能颠倒。二叉树的遍历方法NLR:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点的操作发生在遍历其左右子树之前。LNR:...

2020-02-21 14:59:14 76

原创 Java中String类主要方法的介绍

Java中String类主要方法的介绍字符串比较1.public boolean equals(Object anObject) 区分大小写 的比较2.public boolean equalsIgnoreCase(String anotherString) 不区分大小写 的比较String str2...

2020-01-09 21:23:18 135

原创 合并两个有序链表

合并两个有序链表即将两个有序链表合并为一个新的有序链表并返回。public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * }我们需要做得是创建一个新链表将原来的两个链表连接起来。怎么连接呢?原来的两个链表逐个比较,...

2019-12-25 12:56:24 94

原创 链表的逆置

链表的逆置链表是我们常见的一种数据结构,其中链表的逆置用处广泛,今天和大家分享一下。逆置后原本的头结点变为尾结点,next指向空。具体代码操作如下public static Node reserveList(Node head){ Node cur=head; Node nHead=null; while(cur!=null){ ...

2019-11-29 23:37:19 290

原创 整形数组的旋转

数组的旋转包括左旋与右旋先来介绍左旋:1.首先得到要旋出的元素,这里我们可以借助Arrays.copyOfRange方法得到由旋出元素组成的数组;2.将其余元素前移;3.将旋出元素数组复制到原数组后方(2,3步需要借助System.arrayCopy方法)public static int[] leftTurnArray(int[]dest,int turn){ turn=turn...

2019-11-13 23:00:26 130

原创 在Java中输入常用类型数据

在Java中输入常用类型数据在输入数据之前我们需要加入Scanner,创建Scanner类对象import java.util.Scanner;Scanner scanner=new Scanner(System.in);1.intint a=scanner .nextInt();2.floatfloat b=scanner.nextFloat();3.double...

2019-11-05 11:38:33 268

原创 各进制间的转换

1.十进制转换为N进制十进制整数转换为 N 进制整数采用“**除 N 取余,逆序排列”**法。具体做法是:将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;保留余数,用商继续除以 N,又得到一个新的商和余数;仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;……如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。把先得到的余数作为 N 进制数的低...

2019-10-29 19:04:07 1772

原创 Java运算符

Java运算符1.算数运算符1.1二元算数运算符+ - * / %(不仅仅可以对int求模,也能对double求模)int a=1;int b=2;System.out.println(a/b);// 结果为0double c=11.5;double d=2.0;System.out.println(c/d);//结果为1.51.2一元运算符+ - ++ --...

2019-10-28 12:28:53 104

空空如也

空空如也

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

TA关注的人

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