自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指offer之统计二进制中的1的个数

问题的提出给出一个数,要求得到该数二进制中的1的个数问题分析要得到二进制中1的个数,就要通过按位与的方式来逐位进行运算,首先,我们可以想到,可以初始化一个变量值为1,将该变量通过左移,逐步和所给出的值进行比较,如果该位置为0,则得到的值为0,如果该位置为1,则通过与运算可以得到1,这样我们只需要统计出现1的个数即可。注意要点首先,Java中的整数最大位为32位,所以在循环中可以左移32次,当然,左移的符号为<<问题解决public class Solution { pub

2021-11-09 11:20:21 338

原创 剑指offer真题之二维数组的查找

题目描述在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。0 <= array.length <= 5000 <= array[0].le

2021-09-11 17:15:51 292

原创 剑指offer真题总结(一) 斐波那契类型算法

文章目录简单的斐波那契数列青蛙跳台阶问题简单的斐波那契数列斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……不难看出从第二项开始每一项是其前两项的和,这一算法我们可以直接使用递归公式进行运算。代码如下:public class Solution { public static int F

2021-09-08 20:58:09 233

原创 Redis基本数据类型

文章目录List数据类型简介常用命令注意数据结构set数据类型简介常用命令数据结构hash数据类型简介常用命令数据结构Zset数据类型简介常用命令数据结构跳跃表List数据类型简介单键多值组成Redis列表,Redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列表的左边或右边底层是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差常用命令lpush/rpush … 从左边/右边插入一个或多个值。lpop/rpop 从左边/右边吐出一个值。值在键

2021-09-08 14:52:52 154

原创 两个线程同时执行100次i++

前言在学习到Redis的数据类型时,接触到了Redis的原子性,从而引出了Redis单线程和Java多线程执行函数的区别,从而引出i++执行多次,最终取值范围的问题,该问题的核心在于线程互相打断的两种极端情况问题概述两个线程同时执行100次i++,最终的取值范围是多少代码如下:public class Test2 { private static int i = 0; public static void main(String[] args) { Runnabl

2021-09-07 21:32:18 1975 1

原创 Redis数据类型之String类型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录String数据类型常用命令原子性数据结构String数据类型String是Redis最基本的类型,一个key对应一个valueString类型是二进制安全的。意味着Redis的String可以包含任何数据,String类型是Redis最基本的数据类型,一个Redis中字符串的value最多可以是512M常用命令set 添加键值对.get 查询对应键值append 将给定的 追加到原值的末尾strlen

2021-09-07 21:18:37 402

原创 数据结构之二叉树

文章目录二叉树树的基本定义树的特点树的相关概念二叉树的基本定义满二叉树完全二叉树二叉树树的基本定义树是一种非常重要的数据结构,树是由n个有限结点组成一个具有层次关系的集合,把它叫做树是因为看起来像一颗倒挂的树,也就是说它是根朝上,叶朝下的。树的特点1.每个结点有0个或多个子结点2.没有父结点的结点称为根结点3.每个非根结点都只有一个父结点4.每个结点及其后代结点整体上可以看做一棵树,称为当前结点的父结点的一个子树树的相关概念结点的度:一个结点含有的子树的个数称为该节点的度叶结点:度为

2021-08-30 17:30:34 135

原创 数据结构之有序符号表

文章目录有序符号表添加元素分析测试有序符号表在符号表的基础上,对键的值进行排序,实现有序符号表添加元素分析1.首先,使key继承comparable接口2.通过链表的遍历,比较键的大小,知道该节点的键大于待插入键,则停止3.关键在于记录大于待插入键的上一个结点,来便于元素的插入4.当键相同时实现替换public void put(Key key,Value value){ Node curr = head.next; Node pre = null; while (

2021-08-29 23:54:25 135

原创 数据结构之队列

文章目录队列队列的API设计测试队列队列是一种基于先进先出的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据是先被读出来。队列的底层可以使用链表或数组进行实现队列的API设计构造方法:底层采用链表的构造方法一个记录首节点的变量,一个记录尾节点的变量,一个记录队列长度的变量构造方法中,首节点为一个空节点类,尾节点为null//记录首结点private Node head;//记录最后一个结点private Nod

2021-08-29 17:26:40 76

原创 数据结构之栈的实际应用

文章目录栈的实际应用问题描述解题思路代码实现逆波兰表达式求值问题逆波兰表达式问题描述思路分析代码实现栈的实际应用##括号匹配问题问题描述给定一个字符串,里面可能包含“()”小括号和其他字符,编写程序检查该字符串是否成对出现即有一个(,则有一个)进行匹配,每一个左括号都有一个右括号匹配,且不能有单独的括号出现。解题思路1.创建一个栈来存储左括号2.从左到右遍历字符串,拿到每一个字符3.判断该字符是不是左括号。如果是放入栈中存储4.判断该字符是不是右括号,如果不是继续下一次循环遍历5.如

2021-08-28 22:51:08 322

原创 数据结构之栈的实现

文章目录栈栈的实现入栈的实现出栈的实现遍历栈的实现初始化构造函数测试栈栈是一种数据结构,数据可以进入到栈中,又可以从栈中出去。是一种基于先进后出的数据结构,是一种只能在一段进行插入和删除操作的特殊线性表,它按照先进后出的原则存储数据,先进入的数据压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈的实现由于栈是一个逻辑实现的数据结构,所以我们在构建栈时需要引入物理存储结构来实现,即使用链表的形式来实现入栈的实现第一个元素进入栈让首节点指向第一个元素,第二个节点则放到第一个元素的前

2021-08-26 22:33:07 136

原创 JVM学习之JVM的整体架构

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录JVM与Java体系结构作用特点JVM所处的位置JVM整体结构Java代码执行流程JVM架构模型基于栈式架构的特点基于寄存器的指令集架构的特点总结JVM的生命周期虚拟机的启动虚拟机的执行虚拟机的退出JVM与Java体系结构JVM:Java虚拟机,即跨语言的平台,多种语言可以通用的编译平台。Java虚拟机不关心运行在其内部的程序到底是使用何种编程语言编写的,只关心“字节码”文件,也就是说Java虚拟机拥有语言无关性。虚拟机:就

2021-08-26 11:25:36 152

原创 数据结构之循环链表的应用

文章目录循环链表构建循环链表约瑟夫问题解题思路代码实现循环链表链表整体要形成一个圆环状,在单向链表中,最后一个节点的指针为null,不指向任何结点,因为没有下一个元素了,要实现循环链表,即最后一个结点指向头结点。构建循环链表public class ForLinkList { public static void main(String[] args) { Node<Integer> first = new comparable.link.No

2021-08-24 21:48:36 292

原创 数据结构之快慢指针的应用

文章目录快慢指针解决中间值问题原理代码单向链表是否有环问题原理代码实现有环链表入口问题原理代码实现快慢指针快慢指针就是定义两个指针,这两个指针 动一动速度是一快一慢的,一次来制造出自己想要的差值,这个差值可以让我们找到链表上响应的节点,一般情况下,快指针的移动步长为满指针的两倍。解决中间值问题原理定义两个指针指向链表的头结点处,slow一次移动一个,fast一次移动两个当fast走完后,slow刚好走了链表的一半代码public static String getMid(Node<St

2021-08-22 22:41:42 184

原创 数据结构之单链表的反转

文章目录链表反转原理分析代码实现测试链表反转单链表的反转,是面试中一个高频题目原理分析使用递归完成反转,递归反转其实就是从原链表的第一个存数据的结点开始,一次递归调用反转每一个结点,知道把最后一个结点反转完毕,整个链表就反转完毕。1.调用reverse(Node curr)方法反转每一个结点,从元素1结点开始2.如果发现curr还有下一个节点,则递归调用reverse(curr.next)对下一个节点进行反转3.最终递归的出口是,next为null,让head节点指向最后一个元素节点4.递

2021-08-22 18:20:18 214

原创 数据结构之双向链表

文章目录双向链表节点代码分析代码实现双向链表双向链表也叫双向表,是链表的一种,他由多个节点组成,每个结点都有一个数据域和两个指针域祖晨,数据域用来存储数据,其中一个指针域用来指向后继节点,两一个指针域用来指向前驱节点,链表的头结点的数据域不存储数据,指向前驱节点的指针域值为null,指向后继节点的指针域指向第一个真正存储数据的节点。节点代码分析class Node<T> { T item; Node next; Node pre; public No

2021-08-18 22:50:37 215

原创 数据结构之单向链表

文章目录链表结点API设计生成链表单向链表代码实现测试遍历链表顺序表的查询很快,但是增删的效率是比较低的,因为每一次增删操作都伴随着大量的数据元素的移动。链表是一种物理存储单元上非连续,非顺序的存储结构,其物理结构不能只管数据元素的逻辑顺序,数据元素的逻辑顺序是通过链表中 的指针链接实现的。链表由一系列的节点组成,节点可以在运行时动态产生。结点API设计构造方法:Node(T t,Node next);创建Node对象成员变量 :T item:存储数据 Node next:指向下一个结

2021-08-18 21:51:27 128

原创 数据结构线性表之顺序表

文章目录线性表特征分类顺序表API实现测试顺序表的容量可变顺序表的时间复杂度分析get:insert:remove:线性表线性表是最基本,最简单,也是最常用的一种数据结构。一个线性表是n个具有相同特性的数据元素的优先序列前驱元素: 若A元素在B元素的前面,则称A为B的前驱元素后继元素: 若B元素在A元素的后面,则称B为A元素的后继元素特征数据元素之间有一对一的逻辑关系第一个数据元素没有前驱,称为头结点最后一个元素没有后继,这个元素称为尾节点除了第一个和最后一个数据元素外,其他数

2021-08-15 22:26:35 74

原创 算法基本排序之基数排序

文章目录基数排序排序原理代码实现时间复杂度分析基数排序排序原理1.定义十个组,从0到9依次排序,然后将每个数字的个位数按照数值放到对应的组中2.将数字从左到右,从上到下依次取出3.重复上述操作,直到最大数的最高位被比较过。代码实现public class BaseSort { public static void main(String[] args) { int [] arr = {2,1,5,21,31,444,23,33,10,903,124,987,100};

2021-08-15 20:40:17 64

原创 算法基本排序之快速排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录排序原理切分原理代码实现快速排序和归并排序的区别快速排序时间复杂度分析# 快速排序快速排序是对冒泡排序的一种改进,基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,一次达到整个数据变成有序序列。排序原理1.首先设定一个分界值,通过该分界值将数组分成左右两部分。2.将大于或等于分界值的数据方法

2021-08-12 21:36:57 84

原创 算法基本排序之归并排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录归并排序排序原理细节拆分归并思想:代码实现划分排序归并排序测试时间复杂度分析缺点归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。排序原理1.尽可能的一组数据拆分成两个元素相等的子组,并对每个子组继续拆分,知道拆分后的每个子组的元素个数是1为止2.

2021-08-12 18:20:40 126

原创 算法排序之希尔排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录希尔排序排序原理增长量h值的确定代码实现时间复杂度分析希尔排序希尔排序是插入排序的一种,又称“缩小增量排序”,是插入排序算法的更高效的版本排序原理1.选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组2.对分好组的每一组数据完成插入排序3.减少增长量,最小减为1,重复第二步操作增长量h值的确定int h = 1;while(h < 5) { h = 2h + 1;}//h的减少规则

2021-08-10 20:58:15 66

原创 算法基本排序之插入排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录插入排序排序原理代码实现时间复杂度分析插入排序插入排序是一种简单直观且稳定的排序算法排序原理1.把所有的元素分为两组,已经排序的和未排序的2.找到未排序的组中的第一个元素,向已经排序的组中插入3.倒序遍历已经排序的元素,一次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待插入元素放到这个位置,其他元素向后移动一位。在一开始就将第一个元素视为已排序的元素,代码实现public class In

2021-08-10 20:21:46 57

原创 算法基本排序之选择排序

选择排序是一种更加简单直观的排序方法需求: 排序前:{4,6,8,7,9,2,10,1} 排序后:{1,2,4,5,7,8,9,10}排序原理1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当索引处的值大于其他某个索引处的值,则假定其他某个索引处的值为最小值,最后可以找到最小值所在的索引2.交换第一个索引处和最小值所在的索引的值即每次寻找剩余元素的最小值,和第一个元素进行交换代码实现public class Selection1 {

2021-08-09 21:57:07 49

原创 算法基本排序之冒泡排序

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录简单排序1.Comparable接口冒泡排序排序原理分析实现:时间复杂度分析简单排序1.Comparable接口排序就是在元素之间做比较,而Java提供了一个接口Comparable就是用来定义排序规则的首先在实体类中实现该接口,并实现compareTo方法:public class Student implements Comparable<Student>{ private int age;

2021-08-09 21:56:10 68

原创 Swagger的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录SwaggerSwagger的简介问题:解决方案Swagger1.导入jar包2.编写一个hello工程3.配置config4.访问5.配置SwaggerSwagger的bean实例DocketSwagger配置扫描接口配置API文档分组实体类配置测试功能总结SwaggerSwagger的简介前后端分离Vue+SpringBoot后端时代:前端进行管理静态页面,后端是模板引擎jsp是后端主力前后端分离:后端:后

2021-08-09 20:27:50 108

原创 算法的空间复杂度分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录空间复杂度分析Java中常见的内存占用1.基本数据类型占用2.计算机访问方式3.引用数据类型机器地址4.自创引用类型5.一般内存使用6.数组内存占用算法的空间复杂度分析空间复杂度分析计算机的软硬件都经历了一个比较漫长的演变史,作为为运算提供环境的内存,更是如此,从早些时候的512k经历了1M,2M,4M等,发展到现在的8,甚至16G和32G,用算法的空间复杂度来描述算法对内存的占用。Java中常见的内存占用1.基本数据类型

2021-08-07 18:15:22 410

原创 算法分析----时间复杂度分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录算法的时间复杂度分析事后分析估算方法事前分析法:第一种解法:第二种解法:函数渐近增长大O记法多个函数调用的时间复杂度分析算法的时间复杂度分析事后分析估算方法例如:public class Demo1 { public static void main(String[] args) { long start = System.currentTimeMillis(); int sum =

2021-08-07 15:31:12 276

原创 Mybatis-Plus的使用(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录逻辑删除和物理删除物理删除:即在数据库的物理层中永久的删除这条数据,通常直接调用UserMapper的deleteAPI即可删除基于上文的环境,该测试类如下:@Testpublic void TestDeleteById() { int i = userMapper.deleteById(1423562408009428993l); System.out.println(i);}逻辑删除:我们在数

2021-08-06 18:21:40 89

原创 Mybatis-Plus的使用(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录常用的特性搭建环境创建MySQL数据创建Springboot工程引入相关依赖创建配置文件创建实体类创建Mapper接口在启动类添加扫描注解编写测试类mybatis自带生成策略(常用)mybatis自动填充时间修改实体类增加数据库字段实现MetaObjectHandler分页查询简单语句练习配置分页插件测试# Mybatis-PlusMybatis-Plus简称MP,是一个MyBatis的增强工具,在Mybatis的基础上只做增

2021-08-06 18:03:06 160

原创 SpringBoot整合mybatis

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Springboot整合数据源自定义整合数据源1.导入jdbc场景2.修改mysql版本号1.修改方式一:在导入依赖的使用直接导入版本号2.修改方式二3.创建application.yaml添加数据库配置使用Druid数据源方式一导入依赖创建配置类方式二:使用官方starter引入druid-starter整合mybatis导入mybatis的场景创建实体类创建mapper接口@Mapper和@Repository注解的区别创建ma

2021-08-05 17:47:20 63

原创 Spring学习之文件上传

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录文件上传功能1.编写前端页面2.编写uploadcontroller层3.编写实际上传文件的大小限制,单文件大小限制在1MB,多文件限制在10MB文件上传功能1.编写前端页面<form role="form" th:action="@{/upload}" method="post" enctype="multipart/form-data"> <div class="form-group">

2021-08-04 09:50:53 43

原创 Springboot之拦截器的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录拦截器1.编写一个拦截器实现HandlerInterceptor接口2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)3.指定拦截规则拦截器HandlerInterceptor接口中设置了三个拦截位置的方法,今天的案例主要围绕登陆拦截来写拦截器。1.编写一个拦截器实现HandlerInterceptor接口逻辑是获取请求中的session,查看对应的loginUser是否为空,为

2021-08-03 20:30:30 195

原创 SpringBoot之Thymeleaf的简单使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Thymeleaf表达式:字面量文本操作数学运算布尔运算比较运算条件运算设置属性值Thymeleaf使用步骤1.导入starter2.自动配置好了thymeleaf常用抽取公共页面标签在页面中调用时有两种方式:但是在抽取时有三种不同情况:# 视图解析和模板渲染Thymeleaf视图解析和模板渲染,一个简单的单体应用可以使用该工具。该工具在框架中,由于有视图解析所以,在进行页面跳转时,只需写入页面名称即可识别。这就是模板引擎的

2021-08-03 16:19:26 242

原创 SpringBoot常用参数请求注解使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录常用参数注解使用@PathVariable@RequestHeader@RequesParam@CookieValue@RequestBodyRequestAttribute@MatrixVariable常用参数注解使用@PathVariable获取路径变量,可以获取路径中包含该名称的变量值示例如下:@RequestMapping("/car/{id}/owner/{username}") public Map<

2021-08-02 16:08:18 296 1

原创 SpringBoot静态资源访问

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录web开发1.静态资源访问1.静态资源目录2.静态资源访问前缀3.webjars4.欢迎页静态资源配置原理配置类只有一个有参构造器资源处理的默认规则静态资源的默认配置目录4.faviconweb开发1.静态资源访问1.静态资源目录只要静态资源放在static,public,resource,META-INF目录下,在地址栏输入静态资源名称就会自动访问。原理:静态映射/**,在接受请求时先去查看controller能不能处

2021-08-01 16:49:42 140

原创 SpringBoot开发方式和技巧

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录SpringBoot编写方法1.引入场景依赖2.查看自动配置了哪些3.是否需要修改Spring开发技巧1.在依赖中引入lombok2.安装lombok插件3.在程序中使用@Data作用1.自动生成getter,setter方法2.使用dev-toolsSpring Initializr项目初始化向导SpringBoot编写方法1.引入场景依赖2.查看自动配置了哪些自行分析,引入场景对应的自动配置一般都生效了在appli

2021-07-31 20:39:19 128

原创 Springboot常用的底层注解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录底层注解@Configuration@Bean@import@Conditional@ConfigurationProperties第一种方式:第二种方式:底层注解@Configuration该注解的作用是告诉springboot该类是一个配置类。配置类本身也是组件ProxyBeanMethod:代理bean的方法,如果该值为true,代表使用代理。在调用组件时,都回去容器中保存的组件中查询。保证注册的bean为单实例

2021-07-31 16:29:56 185

原创 springboot学习之入门

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录为什么使用springboot缺点微服务springboot入门之helloworld1.导入依赖jar包2.创建主程序,主运行类3.创建controller层,配置controller类4.运行主程序5.简化配置6.简化部署## Spring和SpringbootSpring是由许多框架构建的一个大生态,覆盖了web开发,数据访问,安全控制,分布式,消息服务,移动开发,批处理等等业务Spring即微服务开发,用来整合spr

2021-07-30 22:52:37 66

原创 SSM学习----SpringAOP的开发方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录基于xml的AOP开发1.导入AOP相关坐标2.创建目标类和目标接口3.创建切面类(内部有增强方法)4.将目标类和切面类的对象创建权交给Spring5.在applicationContext.xml中配置织入关系6.测试代码xml配置细节1.切点表达式的写法2.通知的类![在这里插入图片描述](https://img-blog.csdnimg.cn/eb336dfc472e40889db0766409043613.png?x-oss

2021-07-30 20:45:41 75

空空如也

空空如也

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

TA关注的人

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