自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 B树系列原理

特征1. B树是一棵 多叉 && 平衡 && 搜索 树(B树中每个节点可以有多个Key,也有多个孩子)2. B树的每个节点在实现时都要人为规定Key的上限(KEY_LIMIT = ?)3. B树每一个节点中的Key都是按照Key的大小顺序保存的(线性结构)4. B树中所有路径(从根到叶子)的长度完全一样5. B树的高度增长是由分裂导致的,是朝上生长的,一旦高度变化所有子树的高度同一变化6. 节点中Key的个数记为size,则child的个数一定是s..

2021-09-04 19:16:39 402

原创 红黑树原理

特征红黑树是 “平衡” && 搜索 && 二叉树“平衡”:相较于AVL树来说,红黑树是一种“弱平衡” 定义:红黑树中,任意根到叶子结点的路径中,LEN(max) <= 2 * LEN(min)红黑树5条规则:①红黑树中的节点:或红或黑②根节点一定是黑色的③“叶子结点”一定是黑色的(红黑树的叶子为null)④红黑树中,任意路径(根到节点)中,红色和红色不能相邻⑤红黑树中,任意路径(根到节点)中,黑色节点的数量...

2021-09-04 16:28:55 431

原创 AVL树原理

特征AVL树是 平衡 && 搜索 && 二叉树1. 搜索树中序遍历一定是有序的,并且按照key的大小顺序排列任取节点,left.key < root.key < right.key2. AVL树中平衡的定义任取节点,要求 节点左子树的高度 和 节点右子树的高度 的高度差的绝对值不能超过 1平衡因子(Balance Factor / BF):bf就是节点的左右子树高度差,node.BF= H(node.left) - H(..

2021-09-04 15:45:55 342

原创 项目的模糊查找和分页

模糊查找1. 通配符模糊查询:LIKElike操作符:LIKE作用是指示mysql后面的搜索模式是利用通配符而不是直接相等匹配进行比较;但如果like后面没出现通配符,则在SQL执行优化时将 like 默认为 “=”执行通配符的分类:"%" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)"_" 下划线通配符:表示只能匹配单个字符,不能多也不能少,就是一个字符。当然,也可以like "陈____",数量不限如果在使用like操作符时,后面没有使用通用匹配符(%或_),那么效果

2021-08-27 15:20:01 297

原创 Linux常见命令

1 打开文件 vim [文件名]2 退出文件 先按冒号:在输入q 然后回车3 编辑文件 vim打开文件后默认进入 normal mode,此时输入的按键都是特殊功能快捷键,而不是 文本编辑 要想编辑文件,需要进入 insert mode(编辑模式) 进入插入模式方式有很多 输入小写i 就能进入编辑模式(底层显示--INSERT--),光标移动到顶层此时可输入内容编辑完需要保存退出,而编辑模式不能直接退出;需要先回到normal mode(普通模式...

2021-08-24 21:59:42 168

原创 MAP哈希表

Map接口1. 说一下 HashMap 的实现原理?HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变HashMap的数据结构:HashMap是一个“散列表”的数据结构,即数组和链表的结合体HashMap 基于 Hash 算法实现的:①当我们往Hashmap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标②存

2021-08-23 18:44:06 1111

原创 JAVA集合框架

集合的特点集合的特点主要有如下两点:①对象封装数据,对象多了也需要存储。集合用于存储对象②对象的个数确定可以使用数组,对象的个数不确定的可以用集合。因为集合是可变长度的集合和数组的区别①数组是固定长度的,集合可变长度的②数组可以存储基本数据类型,也可以存储引用数据类型,集合只能存储引用数据类型③数组存储的元素必须是同一个数据类型,集合存储的对象可以是不同数据类型Iterator接口Iterator接口,用于遍历集合元素的接口。在Iterator接口中定义了三个方法

2021-08-23 17:26:06 226

原创 删除链表中的节点,存在重复元素

删除链表中的节点描述:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为要被删除的节点。思路:没有头结点,所以无法通过前驱指向后继来删除,转化为删除node后继节点的方式,不改变地址只改变值(1)把node后继的值赋给node(2)把node后继设为node.next = node.next.next代码:class Solution { public void deleteNode(ListNode node) { n..

2021-08-23 12:12:17 145

原创 剑指40最小的k个数,回文数

最小的k个数描述:输入整数数组arr,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。思路:topK问题,最小k个数:维护一个容量为k的大堆(1)特殊值处理(2)创建一个堆(优先级队列PriorityQueue),默认是小堆,所以要重写比较器,lambda表达式((v1,v2) -> v2-v1)(3)循环遍历数组,判断若堆未满就直接入队,或者当前值小于堆顶元素,堆顶出队,然后该值入队,循环完毕后堆里就是k个最小...

2021-08-23 11:13:45 161 1

原创 JVM内存模型、垃圾回收、类加载

JVM内存模型堆(线程共享):是整个JVM中占据空间最大的区域,new的对象,都是在堆区方法区(线程共享):保存类对象,类加载的时候.class二进制字节码就是加载到内存中的方法区里,①包括类的基本属性②方法的具体指令也保存在方法区中,调用方法的时候就是在方法区里读取指令并执行③静态成员栈(线程私有):JVM栈和本地方法栈(jdk1.8以后不区分)JVM栈:java代码的调用栈本地方法栈:JVM内部的C++代码的调用栈程序计数器(线程私有):里面存放的就是一个地址

2021-08-22 23:11:06 251 1

原创 反转字符串,局部反转链表

反转字符串描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符思路:给定的是字符数组,特殊判断,若s为空,或长度小于2,直接返回(1)双指针指向首尾元素left,right(2)若l<r,就交换两个元素,然后都往中间移,l++,r--(3)直到l=r,只剩中间一个元

2021-08-22 18:43:50 197 1

原创 将有序数组转化为二叉搜索树,剑指54二叉搜索树的第k大节点

将有序数组转化为二叉搜索树描述:给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。思路:递归中写一个方法(1)利用中序遍历保证稳定性,若l>r,代表没有节点,返回null(为什么不是l>=r , 若r在l后一位,递归返回到这一层执行右边,l+1=r直接返回不能打印这个节点)(2)找到中间节点作为根节点,递归左右子树,返回root

2021-08-22 12:23:12 120 1

原创 剑指61扑克牌中的顺子,合并两个有序数组

扑克牌中的顺子描述:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。思路:若为5连顺子,5张牌一不能重复,2是最大牌-最小牌<5(1)考虑不能重复,使用HashSet(2)定义最大牌为0,最小牌14(0~13)(3)遍历数组,若值为0,是joker跳过continue若值大于max,赋给max若值小于min,赋给min判断set中是否包

2021-08-22 11:12:57 141

原创 剑指58翻转单词顺序,整数反转

翻转单词顺序描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。思路:(1)先把边上的空格都去掉,string.trim()方法(2)定义一个字符串数组StringBuilder来接收返回的字符串数组(3)定义两个指针都指向字符串尾部(4)循环开始找完整的单词,为了防止数组越界,循环总是在i>=0的情况下进行循环进行判断,若

2021-08-21 18:12:09 137

原创 项目中操作数据库

拿我写的个人博客项目来举例:数据库设计:两张表:①用户表user编号userId,用户名username,密码password②博客表blog编号blogId,标题title,正文content,发布时间postTime,作者名userId使用JDBC操作数据库(1)创建一个数据源dataSource(标识着数据库服务器在哪),使用单例模式创建数据源的实例保证只存在一个数据源(2)和数据库建立连接,通过数据源对象 .getConnection()方法就可以和数据库建立连接

2021-08-21 12:47:01 319

原创 使用模板来实现页面

模板其实就是一个(缺失了一些关键信息)的html页面,我使用的是Thymeleaf模板使用模板的步骤:(1)先去编写html页面,使用thymeleaf中的一些(特殊标记符号,也就是占位符,比如th:each,th:text="${}",把这个html页面中的关键数据进行占位(2)在Servlet代码中获取到这些关键数据,再通过thymeleaf把这些关键性数据替换到Html页面中的特殊标记符号,也就是占位符中(3)而在对关键性数据进行替换之前,要先对thymeleaf模板进行初始化初始

2021-08-21 11:47:12 194

原创 单例模式两种方法

饿汉式:class singleton{private singleton(){};private static final singleton single = new singleton();public static singleton getInstance(){return single;}}懒汉式:class singleton{private singleton(){};private volatile static final singleton single

2021-08-20 12:10:11 143

原创 杨辉三角,剑指21调整数组把奇数放在偶数前面

1. 杨辉三角描述:思路:主要是用list集合(1)先判断numRows为空的情况,若为空直接返回null(2)第一行只有一个1,用list.add(1),在放到ret第一个中(ret里存的都是ArrayList)(3)从第二行开始,循环定义当前行curRow是一个list集合,当前行第列的数总是1,从第二列开始到倒数第二列,循环定义上一行prevRow=ret.get(i-1),把上一行的当前列和前一列得数相加,得到的结果就是当前行curRow的当前列的数,再把最后一列curRow.a

2021-08-19 12:20:00 270 1

原创 连续子数组的最大和(两种方法)

连续子数组的最大和描述:输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。思路1:一维动规特殊情况处理:数组长度为0,返回0,数组长度为1,返回1动规4步:(1)确定状态:最后一步,dp[i]代表以元素nums[i] 为结尾的连续子数组最大和(2)转移方程:若dp[i-1]>0,说明之前的结果会让子数组更大F[i]=F[i-1]+nums[i],否则不会更大就不加了F[i]=nums[i],定义变量max保存每一轮结果的最大值(因为nums[i]

2021-08-18 23:59:41 2089 1

原创 剑指10斐波那契数列,青蛙跳台阶

斐波那契数列描述:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项(即F(N))。思路:动规4步(1)确定状态:最后一步,对于第n的数来说,就是前两个数之和(2)转移方程:从2开始每个数都是前两个数之和F[n]=F[n-1] + F[n-2](3)初始条件:0个数就是0,1是1(0和1没有前两个数)(4)计算顺序:每一步用前一步的值,所以从前往后代码:class Solution { public int fib(int n) { ...

2021-08-18 22:18:48 123

原创 简单的一个自动化测试脚本

自动化测试工具使用selenium语言选择python(1)导包,需要驱动包和时间包(2)获取测试使用浏览器的驱动,首字母大写(3)驱动get()方法,获取浏览器中输入网址的页面(4)驱动的find_element_by_id()方法,通过该url前端页面组成元素的属性id来定位到该元素,并对该元素执行某条命令(取决于.某个方法)(5)time调用sleep()休眠一定时间(6)驱动quit()方法,关闭浏览器并清除缓存(驱动close()方法,仅关闭浏览器)...

2021-08-18 10:00:31 3974

原创 剑指27二叉树的镜像,剑指26树的子结构

二叉树的镜像描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像思路:递归:(1)若根节点为空直接返回(2)先把左孩子节点保存到tmp(防止右孩子节点覆盖左孩子节点后没有左孩子节点了)(3)递归调用该方法,参数填右孩子,返回值赋给左孩子(4)递归调用该方法,参数填tmp,返回值赋给右孩子(5)每层递归完毕后返回当前层根节点代码:class Solution { public TreeNode mirrorTree(TreeNode root) {

2021-08-17 23:53:49 86

原创 剑指18删除链表的节点,剑指22链表中倒数第k个节点

删除链表的节点描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。思路:(1)若头结点的值就等于删除值,返回头结点下一个节点即可(2)删除需要前驱结点辅助,定义cur指向头结点下一个,prev指向头结点(3)循环进行判断若cur不为空并且cur的值也不是删除值的时候,双指针分别向后移,前驱先动(4)while结束,两种情况,若cur不为空则是找到删除节点了,前驱节点的后继直接指向cue的后继(5)无论是cur为空了还是删除了,链表的

2021-08-17 21:13:06 68

原创 实现基于白名单方式的防盗链

通过 HTTP 中的 refer 字段判定是否是指定网站请求图片在展示页面中加入属性private static HashSet<String> whiteList = new HashSet<>(); static { //把可以访问的路径放入集合 whiteList.add("http://localhost:8080/java_image_server/index.html"); }并在DoGet方法中加入以下逻辑// 校验 refer 是否在白名单

2021-08-15 18:19:43 319 1

原创 在排序数组中查找数字1(2种方法),0~n-1中缺失的数字(2种方法)

在排序数组中查找数字1描述:统计一个数字在排序数组中出现的次数。思路:利用哈希表,key为元素值(和target比较),value为出现次数(1)初始化一个HashMap(2)循环遍历数组,判断若map中存在Key为nums[i],则put(nums[i], map.get(nums[i]) + 1)否则put键为num[i],值为1(3)判断map中若没有ket为target,返回0(4)返回map中以target为键的值就是出现次数代码:class Solution

2021-08-12 19:12:39 1096 1

原创 计算机网络原理(重要应用层协议DNS)

1. DNS背景DNS(Domain Name System)TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系DNS是应用层协议DNS底层使用UDP进行解析浏览器会缓存DNS结果本质上还是需要把域名转换成IP地址~记录了域名- IP之间的映射关系测试某个程序的时候,要求通过某个域名来访问服务器但是域名可能还没申请好呢

2021-08-12 16:44:42 266

原创 计算机网络原理(数据链路层)

目录数据链路层1. 认识以太网​1.1 以太网帧格式1.2认识MAC地址2. 对比理解MAC地址和IP地址3. 认识MTU3.1MTU对IP协议的影响3.2MTU对UDP协议的影响3.3MTU对于TCP协议的影响4.ARP协议4.1 ARP协议的作用4.2ARP协议的工作流程数据链路层假设老湿要回老家1. 规划总路线2. 每个相邻节点之间如何传输数据1. 认识以太网"以太网" 不是一种具体的网络...

2021-08-12 16:44:26 1553 4

原创 计算机网络原理(网络层)

目录网络层1. IP协议2.网段划分2.1 划分方式2.2 特殊的IP地址2.3IP地址的数量限制3.路由网络层在复杂的网络环境中确定一个合适的路径1. IP协议基本概念主机: 配有IP地址, 但是不进行路由控制的设备路由器: 即配有IP地址, 又能进行路由控制节点: 主机和路由器的统称协议头格式8位服务类型(TOS)16位标识 +3位标志字段 +13位分片偏移8位生存时间8位...

2021-08-12 16:44:14 381

原创 从尾到头打印链表,左旋转字符串,包含min函数的栈

从尾到头打印链表描述:输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。思路:输入正向输出反向符合栈的特性(1)定义一个栈保存节点,循环把所有节点入栈(2)定义一个数组,长度就是栈长,依次把栈顶元素放进数组就好了(3)返回数组代码:class Solution { public int[] reversePrint(ListNode head) { Stack<ListNode> s = new Stack<&g

2021-08-12 16:43:07 86

原创 数组中重复的数字,替换空格

剑指offer03数组中重复的数字描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。思路:找重复的值用Set集合很好(1)定义出一个HashSet(2)遍历数组,若set包含当前i的值就返回i,否则把i放入set(3)循环结束若还没有返回就是没有,返回-1代码:class Solution { p

2021-08-12 00:37:43 187 1

原创 计算机网络原理(TCP/IP协议)

1. 应用层2. 传输层(传输层和网络层是操作系统内核实现好的.普通程序猿不能修改)核心功能:完成"端对端"的数据传输传输层协议有很多~~最常用的有两个:UDP/TCP2.1 UDP协议UDP协议端格式:16位UDP长度, 表示整个数据报(UDP首部+UDP数据)的最大长度如果校验和出错, 就会直接丢弃2.1.1 UDP的特点a)无连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接b)不可靠: 没有确...

2021-08-11 22:21:41 795

原创 MySQL数据库(JDBC编程)

1.Java的数据库编程:JDBCJDBC,即Java Database Connectivity,java数据库连接是一种用于执行SQL语句的Java API,它是 Java中的数据库连接规范这个API由 java.sql.*,javax.sql.* 包中的一些类和接口组成,它为Java 开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问2. JDBC工作原理JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要..

2021-08-10 12:33:01 1093 5

原创 MySQL数据库(基础索引)

1. 索引1.1 概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现1.2 作用a) 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系b) 索引所起的作用类似书籍目录,可用于快速定位、检索数据c) 索引对于提高数据库的性能有很大的帮助1.3 索引底层结构(基础介绍)1.4使用场景要考虑对数据库表的某列或某几列创建索引,需要考虑...

2021-08-09 22:23:06 410 2

原创 MySQL数据库(查询操作)

1. 聚合查询聚合函数:函数 说明 COUNT([DISTINCT] expr) 返回查询到的数据的 数量 SUM([DISTINCT] expr) 返回查询到的数据的 总和,不是数字没有意义 AVG([DISTINCT] expr) 返回查询到的数据的 平均值,不是数字没有意义 MAX([DISTINCT] expr) 返回查询到的数据的 最大值,不是数字没有意义 MIN([DISTINCT] expr) 返回查询到的数据的 最小值,不是数字

2021-08-09 22:06:08 569

原创 MySQL数据库(表的约束与设计)

目录1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE:唯一约束1.4 DEFAULT:默认值约束1.5 PRIMARY KEY:主键约束1.6 FOREIGN KEY:外键约束1.7 约束的作用2. 数据库设计2.1 一对多2.2 多对多1. 数据库约束1.1 约束类型NOT NULL - 指示某列不能存储 NULL 值UNIQUE - 保证某列的每行必须有唯一的值DEFAULT - 规定没有给列赋值时的默..

2021-08-09 16:22:07 762 2

原创 SQL数据库(表的基础操作)

1. MySQL中的表1.1 创建表命令为:create table +表名 +表的参数[参数名 参数类型 不同参数用,分隔开](id int, name varchar(20));1.2 查看当前有哪些表命令为:show tables;1.3 查看表的结构命令为:desc + 表名;1.4 删除表命令:drop table + 表名;如何避免删库/删表?1. 监控报警2.备份3. 权限2.MySQL表的增...

2021-08-09 14:50:28 1953 4

原创 初见LeetCode:两数之和

思路:采用哈希表的方法(1)定义一个 HashMap<Integer, Integer>,key为元素的值(因为nums[i] + nums[j] = target),val为下标(2)遍历数组,遍历到i时判断若哈希表包含key为target - nums[i],则此时两key相加的值就是target,而val就是下标,返回两个下标即可,否则就把当前i位置的元素值作key存入哈希表中(3)循环结束也没返回代表没找到,返回null代码:class Solution {

2021-08-08 23:02:38 115 3

原创 MySQL数据库(基础)

目录1. 数据库概念1.1 数据库是干嘛的?1.2 数据库和数据结构是啥关系?​1.3 两种类型的数据库2. MySQL数据库2.1 MySQL数据库概念2.2 MySQL基本操作2.2.1 建立数据库2.2.2 查看数据库2.2.3 选中数据库2.2.4 删除数据库2.3 MySQL数据类型1. 数据库概念1.1 数据库是干嘛的?数据库的功能就是用来组织数据,组织很多很多的数据。这些数据通常都是存储在外存(磁盘)数据库提供的核...

2021-08-08 21:08:11 88980 54

原创 字符串中的第一个唯一字符(两种思路:1 用系统给的HashMap,2 自己定义哈希表)

描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。思路1:用系统给的HashMap思路:(1) 定义一个HashMap<Character, Integer>,键为字符,值为出现次数(2)循环遍历字符串,取出i下标的字符,判断若该键的值为空,值改为1,否则改为值+1,循环完毕后map存的就是所有字符以及出现次数(3)再次循环遍历字符串,判断若下标为i的键值为1,改下标对应的就是第一次出现的唯一字符,返回i,若循环完毕还没有返回值..

2021-08-07 21:35:35 179 1

原创 复制带随机指针的链表(结合HashMap与链表)图解详细

描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> Y ..

2021-08-07 21:35:05 143

空空如也

空空如也

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

TA关注的人

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