自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 常用的git命令

git clone xxx:克隆项目git status:查看当前仓库状态git add .:添加到暂存区git commit -m"xxx":添加到本地仓库git pull:同步远程仓库到本地,检查远程仓库是否比本地版本更高一些git push:将项目从本地仓库提交到远程仓库git branch xxx:创建分支git checkout xxx:切换分支git branch:查看本地分支git branch -a:查看所有分支git merge xxx:合并分支git branch

2021-09-03 21:52:28 264

原创 链表反转。

举个例子来分析一下如何实现链表的反转。链表示例:9—>6—>8—>7—>1—>null。1)首先定义两个指针cur、pre分别指向链表头和链表尾。2)定义一个临时指针,指向cur.next。3)修改cur指针的指向,让其指向pre4)pre指向cur。5)cur指向t。具体实现如下图:class Solution5 { public ListNode reverseList(ListNode head) { ListNod

2021-08-24 00:35:04 245

原创 链表求和。

分析:定义三个链表,两个链表负责两组数据的存储,第三个链表负责存储结果,前两个链表每个对应位置上的数据相加,注意进位处理,以及如果两个链表不等长的情况。代码实现:class Solution3 { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { if(l1 == null) return l2; if(l2 == null) return l1;.

2021-08-23 23:01:32 200

原创 JVM架构图

JVM架构图如下:1、线程安全区域1)程序计数器1、程序计数器的定义程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在Java虚拟机的概念模型里[1],字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。2、为什么每条线程都需要有一个独立的程序计数器?确定的时刻,一个处理器(对于多核

2021-08-23 00:43:19 1101

原创 垃圾收集器

1、Serial收集器1、Serial收集器定义​ Serial收集器是最基础、历史最悠久的收集器,这个收集器是一个单线程工作的收集器,更重要的是强调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。2、Serial收集器运行示意图3、Serial收集器应用场景​ 对于单核处理 器或处理器核心数较少的环境来说,Serial收集器由于没有线程交互的开销,专心做垃圾收集自然可以 获得最高的单线程收集效率。在用户桌面的应用场景以及近年来流行的部分微服务应用中,分配给虚 拟机管理的内存一

2021-08-22 21:04:44 95

原创 垃圾回收算法

1、标记-清除算法1、标记—清除算法定义​ 标记—清除算法是最基础(其它的收集算法大多以标记—清除算法为基础)的垃圾收集算法。算法分为标记和清除两部分。​ 标记:标记出所有需要回收的对象/或标记存活的对象。​ 清除:在标记完之后,统一回收掉所有被标记的对象/或统一回收所有未被标记的对象。​ 标记过程:对象是否属于垃圾的判定过程(垃圾对象标记判定算法)。2、标记—清除算法缺点​ 执行效率不稳定;内存空间碎片化问题;​ 1)执行效率不稳定:如果Java堆中包含大量对 象,而且其中大部

2021-08-22 20:51:03 131

原创 双亲委派模型

1、类加载器(Class Loader)类加载器虽然只用于实现类的加载动作。比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等。2、双亲委派模型启动类加载器:这个类加载器负责加载存放在<JAVA_HOME>\lib目录,或者被-Xbootclasspath参数所指定的路径中存放的,而且是Java虚拟机能够识别的类库加载到虚拟机的内存中。

2021-08-22 19:54:11 101

原创 类的加载过程

一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,经历了七个阶段,类的生命周期如下图。1、加载1)通过一个类的全限定名来获取定义此类的二进制字节流。2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。3)在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。2、连接-验证验证的目的:确保Class文件的字节流中包含的信息符合《Java虚拟机规范》的全部约束要求,保证这些信息被当作代码运行后不会危害虚拟机自身的安全。验证的内容包含

2021-08-22 18:44:47 86

原创 Java中String、StringBuilder和StringBuffer区别

1、String的值是不变的,因为String的底层是一个final类型的char[]。由String源码前三行得出此条结论。每次对String的操作都会生成新的String对象,会造成内存浪费而且String的拼接速度慢。2、StringBuilder:底层是char[],线程不安全,速度变快;public class Main { public static void main(String[] args) { StringBuilder stringBui

2021-08-21 19:44:37 105

原创 Java字符串常用8个函数

1、String str = str1 + str2 + str3;2、返回一个新字符串。这个字符串包含原始字符串中从 beginlndex 到串尾或 endlndex-l的所有代码单元3、char charAt (int index)返回给定位置的代码单元。除非对底层的代码单元感兴趣, 否则不需要调用这个方法。4、boolean equals(0bject other)如果字符串与 other 相等, 返回 true。5、int indexOf(int cp, int fromlndex )

2021-08-21 19:03:17 2642

原创 Java面向对象的三个特点

Java面向对象的三个特性:封装、继承、多态1、封装封装定义:尽可能地隐藏对象的内部实现细节,控制用户对类的修改和访问的程度以及权限。封装优点:减少重复代码;提高安全性(隐藏内部实现);解耦(降低了耦合);2、继承继承定义:在一组相同或类似的对象中,抽取出共性的特征(属性)和行为(方法),实现重用性。继承优点:重用父类的大部分代码;在此基础上完成自己的逻辑;3、多态多态的定义:父类引用指向子类对象,从而形成多种形态;多态生成的条件:继承,重写,父类的引用指向子类对象。多态的优点:父类的引

2021-08-21 17:57:08 321

原创 Java中final、finally和finalize的区别

final:修饰类、变量、方法final的四个特点:1)final修饰的类不能被继承2)final修饰的变量不能被第二次赋值3)final修饰的方法不可以被重写4)final修饰的变量能够防止指令重排序(修饰的变量执行顺序不能被调换)finally:在异常处理中和try-catch搭配使用,不管有没有执行异常,finally一定会执行:public class TestTryCatchFinally { public static void main(String[] args) {

2021-08-21 17:36:50 165

原创 接口和抽象类的异同点

一、先来看一下接口和抽象类的定义接口:接口的目的是对类的行为具有约束,更像是一个标准。要求类实现方法的有无,而不要求怎么实现。提供一种机制,强制让不同的类有相同的行为。抽象类:抽象类的目的是代码复用。让类派生于抽象类。抽象类更像是一个模板。部分行为一致时,让抽象类A来做,而不需要每个类B都做。二、接口和抽象类的异同相同点:1)都不能被实例化。2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中方法后才能实例化。不同点:1)在成员变量上,抽象类可以有变量、常量、构造方法、有抽象方法也可以有

2021-08-21 17:02:20 4195

原创 Java集合框架中常用的有哪些类

一、Java集合框架中常用的有哪些类?Collection接口:List接口(ArrayList类、LinkedList类)、Set接口(HashSet类、TreeSet类)。Map接口:HashMap类、TreeMap类、HashTable类List和Set的区别:ListSetList及实现类是可变大小的列表,适用于按数值索引访问元素。Set集合存储顺序无序,不可以保存重复数据。二、ArrayList和LinkedList的区别ArrayListLinke

2021-08-21 16:25:28 485

原创 Java异常体系

先来看一下Java中的异常层次结构图:一、Java异常层次结构所有的异常都是由 Throwable 继承而来,Throwable分解为两个分支:Error 和 Exception分支。Error 类层次结构描述了 Java 运行时系统的内部错误和资源耗尽错误。 应用程序不应该抛出这种类型的对象。 如果出现了这样的内部错误, 除了通告给用户,并尽力使程序安全地终止之外, 再也无能为力了。这种情况很少出现。Exception分解为两个分支:一个分支派生于 RuntimeException ; 另一个分

2021-08-21 14:53:11 121

原创 单链表成环

单链表成环问题思路:定义两个快慢指针,快指针每次移动2步,慢指针每次移动1步。如果链表成环,快慢指针迟早会相遇;如果链表不成环,快指针->next会指向null;具体代码实现如下:class Solution2{ public boolean hasCycle(LinkNode head) { LinkNode fast = head;//快慢指针 LinkNode slow = head; while(fast!=null&&amp

2021-08-20 23:43:45 242

原创 堆排序算法

完全二叉树可以用数组的方式进行存储(使用场景:堆排),且满足如下关系:左孩子下标=2父结点下标+1;右孩子下标=2父结点下标+2;堆排的步骤:1、构建初始堆(升序构建大顶堆;降序构造小顶堆)2、构建大顶堆(从最后一个非叶子节点开始)3、将堆顶元素与末尾元素进行交换,然后并调整大顶堆(从最后一个非叶子节点开始)下面以升序排序为例:有一个数组arr={6,8,4,1,3,2},将数组用堆排的方式按升序排序。1)下图中最左侧的图为构建的初始堆,前三个图的步骤为构建大顶堆的过程,最右侧的图为堆顶元素与

2021-08-20 23:31:04 96

原创 快速排序算法

快速排序是从冒泡排序演变出来的,冒泡排序每一轮只把一个元素冒泡到一侧,而快速排序是在每一轮挑选一个基准元素,并让其它比它大的元素移动到数列右侧,比它小的元素移动到左侧,从而把数列分为了两部分。下面详细介绍:将下图数列按照快排进行排序1)以数列最左侧的数为基数,最左侧和最右侧定义两个指针。2)指针的移动顺序先从右侧开始,右侧指针指向的数<基数,指针停止移动。左侧指针指向的数>基数,指针停止移动。3)当i<j且两个指针都停止移动的时候,交换两个指针指向的数据。4)右侧指针先向左

2021-08-20 22:42:11 254

原创 最小路径和

最小路径和给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12分析:这是一个动态规划题,可以通过递归来解决。因为每次走一步,所以这一步所走的路径=上一步走的路径+这一步走的。由于每

2021-08-20 21:52:28 92

原创 初始化语句、初始化块和构造函数执行的先后顺序

Java中静态和非静态初始化语句、静态和非静态初始化块、构造函数之间执行的先后顺序是怎样的,一起来探究一下吧。在这里呢需要记住以下规则:1、类的加载优先于对象的创建。2、类的加载:从上往下,执行一次静态的初始化块语句和初始化块。3、类对象的创建:从上往下,执行一次非静态的初始化语句和初始化块,然后执行构造函数。4、对象第一次创建的时候需要执行类加载,类加载只执行一次(即静态的初始化语句和初始化块只执行一次)。下面呢我们用一段具体的代码来解释上面这一段抽象的文字。public class Tes

2021-08-13 23:30:04 504

原创 java中值传递

在java中是按照值传递的,准确的说,值传递就是传递堆中的地址。通过三个例子来了解一下值传递例子一:public class Apple { public double height; private String color; public double getHeight() { return height; } public void setHeight(double height) { this.height = he

2021-08-13 11:59:09 281

原创 spring boot项目实现两张关联表同时修改和删除数据到Mysql数据库

一、还是以教师发布上课信息和学生签到为例:教师上课发布一条签到信息,这个教师的所有学生都会收到一条待签到的信息。教师发布上课信息表如下:表一学生签到表如下:表二二、同步修改实现步骤:1)controller层只需要写教师修改上课信息的接口即可。@RequestMapping(value = "update", method = RequestMethod.POST)public ResultJson update(TeacherCourseVo teacherCourseVo,HttpSe

2021-08-08 18:32:43 2982

原创 spring boot项目实现向两张关联表同时插入数据到Mysql数据库

一、举个例子来了解一下:教师上课发布一条签到信息,这个教师的所有学生都会收到一条待签到的信息。教师发布上课信息表如下:表一学生签到表如下:表二表一中的id和表二中的course_id作为关联条件将两张表关联起来:二、实现思路与步骤:1)controller层只需要写教师发布上课信息的接口即可。@RequestMapping(value = "add", method = RequestMethod.POST)public ResultJson add(TeacherCourseVo te

2021-08-08 18:15:07 4608 1

原创 vue第一次导入项目报错webpack-dev-server

报错截图:分析:没有安装sass-loader,安装一下对应的版本就好,如果程序崩了把sass-loader先卸载在重装解决:在控制台输入如下对应的命令即可npm uninstall sass-loader node-sass //卸载npm install sass-loader@7.3.1 node-sass@4.14.1 --save-dev //安装对应的版本...

2021-08-08 16:58:29 105

原创 vue+spring boot前后端分离项目CORS跨域问题

问题:在前后端分离项目的时候经常出现如下错误:has been blocked by CORS policy: Response to preflight request doesn‘t pass access control check。打开浏览器的Console:分析:在前后端分离项目的时候,我们总会面临一个跨域问题:CORS跨域时,会出现一次动作,两次请求。打开浏览器的Network,点击了一次登录,出现了两次账号登录的后台接口调用方法,下图验证了CORS跨域问题。前台在登录的时候,调用了两次

2021-08-08 14:53:17 524 1

原创 vue+spring boot项目实现easyexcel批量导出

一、EasyExcel导出使用的场景:同级信息归档二、vue前端代码实现以通知公告为例,进行excel批量导出:Notice.vue中:<template> <el-form-item> <kt-button label="通知导出" type="primary" v-on:click="exportExcel()" /> </el-form-item></<template><script&gt

2021-08-08 11:19:21 731

原创 vue+spring boot项目实现EasyExcel批量导入

一、先来了解一下EasyExcel:1、Poi和EasyExcel框架都能生成excel,但是poi框架非常耗内存,因此推荐使用easyexcel生成excel。EasyExcel是阿里巴巴开源的一个excel处理框架,easyexcel能够减少内存的消耗的主要原因是,在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。2、EasyExcel导入使用的场景:减轻录入工作量二、vue前端代码实现调用vue element-ui官网(https://elemen

2021-08-08 11:14:31 1716 2

原创 vue+spring boot项目实现PC端微信登录

一、实现微信登录在编码前需要在微信开放平台注册开发者账号和安装NatApp获取域名。微信开放平台注册开发者账号可参考:https://blog.csdn.net/weixin_45001200/article/details/119495080?spm=1001.2014.3001.5502安装NatApp获取域名可参考:https://blog.csdn.net/weixin_45001200/article/details/119495198?spm=1001.2014.3001.5502二、微信

2021-08-08 01:04:59 1647

原创 NatApp的注册与使用

一、NatApp的注册与使用,注册地址:https://natapp.cn/register二、在帐户信息中进行实名认证,完成支付宝授权认证。三、购买免费隧道,填写相应的信息。四、在我的隧道中找到authtoken。五、下载生成公网域名的客户端,在此链接下载https://natapp.cn/#download六、在NatApp目录下新建一个config.ini配置文件:config.ini中的内容(配置config.ini是为了每次运行natapp.exe的时候能够直接生成域名)#将

2021-08-08 00:11:05 1258 1

原创 注册微信公众平台测试账号

一、注册微信公众平台测试账号。https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login二、扫码关注获取测试号信息appId和appsecret三、修改接口配置信息,url为签名认证方法的路径,token随意设置,但是要保持和签名认证方法中的如下位置保持一致。四、修改JS接口安全域名,将域名修改成正在使用的域名。五、修改网页服务中网页账号的授权回调页面的域名。...

2021-08-07 23:57:37 1313

原创 vue+spring boot项目实现腾讯云短信登录功能

一、在正式编码之前,需要先在腾讯云设置一下短信签名的模板,选择签名类型时,如果是企业选择企业,如果是个人需要选择公众号,如果没有公众号需要申请一个,腾讯云设置签名模板的教程可以参考:https://blog.csdn.net/weixin_45001200/article/details/118878336?spm=1001.2014.3001.5501二:前端代码实现,效果图如下,账号密码登录和手机号验证码登录调用了element-ui中的Tabs标签页。<template> &lt

2021-08-07 23:32:54 956

原创 远程服务器上安装redis

1、检查并安装gcc环境检查gcc环境:rpm -qa|grep gcc*安装gcc环境:yum install gcc-c++2、创建并进入到redis目录下,进入到目录中下载并解压源码创建redis目录:mkdir /usr/lib/redis进入到redis目录:cd /usr/lib/redis/在redis目录下下载源码:wget https://mirrors.huaweicloud.com/redis/redis-5.0.5.tar.gz在redis目录下解压源码:tar -zx

2021-07-26 08:24:58 266

原创 Consider defining a bean of type ‘com.XXX‘ in your configuration.

Consider defining a bean of type 'com.XXX‘ in your configuration.1、错误截图:2、原因分析:在配置中找不到“COM.XXX”类型的bean@Component在默认情况下只能扫描与控制器在同一个包下以及其子包下的@Component注解,而扫描不到jwtUtil类的原因是缺少了@Component注解3、问题解决:在jwtUtil类中添加@Component注解...

2021-07-26 08:24:36 2136

原创 No serializer found for class com.xxx and no properties discovered to create BeanSerializer

1、错误截图:2、原因分析:找不到get、set方法,由于在使用lombok插件的时候类中没有引入@Data3、问题解决:CodeLoginKey中引入@Data

2021-07-26 08:24:21 1704

原创 在腾讯云开通短信验证服务如何设置正确格式的签名和正文模板并完成群发消息测试

1、登录腾讯云后先实名认证,之后打开云产品中的短信业务2、在国内短信中选择签名管理,创建签名。由于个人使用短信服务,因此签名类型选择了公众号,注册微信公众号的教程参考:https://blog.csdn.net/weixin_45001200/article/details/118864912?spm=1001.2014.3001.5501注1:签名内容应遵循如下格式(否则申请后会被驳回):公众号的名字+个人公众号注2:证明上传中正确的截图,需要在网页登录公众号,找到设置中的账号详情,上传这

2021-07-18 15:56:00 2892 1

原创 如何开通一个微信公众号

1、在微信公众平台(https://mp.weixin.qq.com/)点击立即注册2、由于个人需要,这里选择的是订阅号3、填写基本信息4、选择类型,我这里选择的是订阅号5、信息登记,一个身份证号只能注册一个订阅号6、输入公众号信息7、点开公众号信息就可以看到啦。...

2021-07-18 00:23:01 1840

原创 Some problems were encountered while building the effective model for com.qc

在idea中spring boot项目中,打war包的时候有时会产生如下报错信息:Some problems were encountered while building the effective model for com.qcby.teaching:msgmanage:war:0.0.1-SNAPSHOT1、点开maven后,双击package打war包2、出现如下报错信息:查看左侧控制台全部信息:查看右侧控制台报错信息:第一个红框指出了依赖不唯一,第二个红框指出了aop依赖有问题,

2021-07-18 00:22:26 12952

原创 本地Navicat如何连接远程数据库

1、在Navicat中新建连接一个mysql远程数据库2、设置常规中的连接3、设置SSH中的连接4、进行测试:在常规中点击连接测试,出现如下弹框即证明连接成功。5、在配置中正确连接数据库的语句:...

2021-07-17 23:55:33 3247

原创 如何在远程服务器上建Mysql数据库

1、在xshell连接远程服务器的新建连接中,输入命令在如下进行操作。2、下载并安装MySQL官方的 Yum Repository 输入三条命令命令一:wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm;命令二:yum -y install mysql57-community-release-el7-10.noarch.rpm;命令三:yum -y install mysql-com

2021-07-17 23:55:24 1350

原创 SQL7 查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t

这是牛客中第7道sql题。一、题目如下:SQL7 查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t算法知识视频讲解简单 通过率:39.61% 时间限制:1秒 空间限制:32M题目题解(14)讨论(407)排行描述有一个薪水表,salaries简况如下:请你查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t,以上例子输出如下:示例1输入:drop table if exists salaries ;CREATE TABLE salarie

2021-06-30 16:24:15 716

空空如也

空空如也

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

TA关注的人

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