自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 问答 (1)
  • 收藏
  • 关注

原创 Java Runnable和Callable的区别

Java Runnable和Callable的区别

2024-01-29 10:25:15 345

原创 Java线程创建和启动方式

Java线程创建和启动方式

2024-01-29 10:17:25 355

原创 SQL case when then else end

SQL case when then else end

2024-01-29 10:06:07 400

原创 springboot集成elasticsearch全文搜索高亮显示实践

本文案例,在英文文章索引下中搜索包含指定单词的文章,对包含指定单词的句子高亮显示。主要介绍在springboot中如何集成elasticsearch,以及常用api。配置连接添加数据(添加索引的文档)索引相当于是数据库,一个文档相当于是具体一条数据,表对应的概念是类型(type)但是在elasticsearch最新版以及取消type了。添加index以及document的代码如下:把字段排除的注解也有,在实体类影时可以操作的地方很多,大家可以补充。除了映射实体类也可以通过api加入单独的字段。

2022-05-31 23:46:13 1217 2

原创 传参收参与调试

传参 收参

2022-04-30 10:29:59 237

原创 数据库优化之中间表

数据库优化之使用中间表

2022-04-29 11:23:41 1704

原创 并发幂等性问题与解决

并发幂等性问题与解决幂等性概念幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。在HTTP/1.1中,对幂等性进行了定义。他描述了一次和多次请求某一个资源对于资源本身应该具有同样的后果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或产生不解预料的结果。也就是说,其任意多次的执行对资源本身所产生的的影响均与一次执行的影响相同。

2022-04-15 23:05:18 332 1

原创 下单一致性问题的解决与讨论

下单报错了,但是积分还是扣掉了,正常的话没有下单成功,积分不能扣,如何解决呢?已执行的远程请求,不能回滚如果单纯的使用数据库,事务,回滚!但是这里不行,我但是第一反应也是不行,远程调用回滚不了。还能怎么办?如果都是我负责的我可以修改下单方法也可以修改积分方法,可以使用分布式事务!很复杂,如果原有代码没有任何分布式事务处理,从零开始做一时半会完不成,更何况现在只能改本地服务,积分服务不能改。

2022-03-28 23:05:37 926

原创 01背包问题复习

01背包问题复习518. 零钱兑换 II easyclass Solution { //amount = 5, coins = [1, 2, 5] 问有多少种方法用coins凑成amount public int change(int amount, int[] coins) { int[] dp=new int[amount+1]; dp[0]=1; for(int val:coins){ for(int i=va

2021-10-01 19:54:53 105

原创 IP地址&子网划分

网络层还是比较重要的,笔试的时候选择题经常出,考研更是重点,简单写一下笔试中经常考的IP地址问题。内容来源《王道考研计算机网络》传统IP地址IP地址={网络号,主机号},32bit(4个8bit),并且传统IP地址是分类的。A类:1-126.xxx.xxx.xxx,最大可用网络数2^7-1 (1~126-0.0.0.0-127.0.0.0),每个网络中最大主机数2^24-2B类:128.1.xxx.xxx~191.255.xxx.xxxC类:192.0.1.xxx~223.255.255.xxx

2021-09-10 22:55:29 157

原创 TCP可靠传输、滑动窗口、流量控制、拥塞控制

TCP的重点内容中的TCP连接已经完成了,现在介绍可靠传输、滑动窗口、流量控制、拥塞控制。1、TCP是如何保证可靠传输的序号TCP是基于字节流的,UDP是基于报文段,TCP为每个字节都边上序号,ACK和Seq也是这么来的,序号就是Seq。确认ACK和Seq配对使用重传超时重传冗余ACK(快速重传):重复的ACK达到三个意味着有丢包的情况,重传。在超时重传之前往往会发生冗余ACK这时就会触发快速重传。2、滑动窗口滑动窗口是TCP在重传的时候用到的,与之相关的是回退N步

2021-08-17 13:25:55 197

原创 MySQL(3)主键索引、非主键索引以及SQL语句中如何利用索引的

MySQL(3)主键索引、非主键索引以及SQL语句中如何利用索引的在之前写的MySQL(1)里面介绍了mysql的数据是以B+Tree的数据结构存储的,存在ibd文件里面,那篇说实话写的不好,这篇再细说一下索引。主键索引——》MySQL中数据是怎么存的MySQL在5.5以后使用InnoDB为默认存储引擎,在InnoDB中主键索引为聚簇索引,什么是聚簇索引呢?就是索引和数据存在一起,在InnoDB中主键索引和数据构成B+Tree。在叶子结点是存的这一行数据,非叶子节点存的是主键的值。然后说一下MyI

2021-07-12 11:03:00 657

原创 前端HTTP发POST请求携带参数与后端接口接收参数

前端HTTP请求携带参数与后端接口接收参数HTTP的GET请求与POST请求HTTP请求方式有GET、POST、PUT、DELETE等八种,最常见的就是GET、POST,下面说一下GET请求,很简单。GET是按照规定参数只能写在URL里面(虽然可以有请求体但是不符合规定),没有请求体也就是data,那传就非常简单了,前端就是字符串拼接,后端如果是RESTful风格就占位符+@PathValue,传统方式就直接写就行了,当然参数就需要比较简单自定义对象当然是不行的,list参数也是非常不方便,GET请求

2021-07-10 19:06:33 31614 3

转载 Mybatis-Plus使用PageHelp无效

转载自:同时使用mybatis和mybatis-plus时,pageHelper失效问题解决感谢大佬一、问题由来最近刚拿到一个别人的项目,该项目中使用mybatis和mybatis-plus来操作数据库,我们需要在此基础上添加新功能。做功能开发时一切都很顺利,我也很快完成了自己负责的模块,然后和前端开始对接。可是在测试时发现一个问题,那就是后台返回的数据中,没有分页信息,而我们做的功能又需要分页信息。我立马去进行排查,发现果然如此,确实没有分页信息。可是为什么会没有呢?之前另外一个子系统中都用得

2021-06-21 08:45:36 1506

原创 MySQL(2):要水平分表 吗?

MySQL(2):要水平分表 吗?前言昨天困扰了我一阵,要做一个背单词app,其中单词表有10w+数据,对于我这个每见识的可是兴奋了一会,想要不要水平分表啊这可是“大数据量啊”。答案当然是不用,但是其他表确实在日后需要水平分表!什么情况下水平分表水平分表就是一个表装的数据太多了,查起来非常慢,即使是弄好所以还是非常慢!那就水平分表吧!但是注意水平分表不要轻易的分!可以算是重型武器了,别干杀鸡用牛刀的事!数据量在1000w以上再考虑水平分表!!!而且一定是索引啥的都不管用了再分表,你问为啥,那你说

2021-06-13 10:38:44 18967 3

原创 MySQL(1):索引、B+树和数据是啥关系?

MySQL(1):索引、B+树和数据是啥关系?索引和数据的关系就是目录和具体的书页的关系,只是在搜索的时候起作用;这句话没有任何问题,但是看下一句话:每个索引在InnoDB里面对应一棵B+树,数据库的数据是存在B+树里面的?这就糊涂了,一个索引对应一棵B+树,数据又存在B+树里面,那多建几个索引就要多建几棵树,那数据岂不是也要复制几份?并不会!!!直接用大佬的图了,数据是在磁盘里面的可以说是死的,不会因为多几个索引就复制几份!!!mysql是怎么存储数据的?数据存在磁盘的一个文件里面——》ibd

2021-06-13 09:07:34 347

原创 SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存

SpringBoot多模块项目ApplicationContext无法getBean,MybatisPlus二级缓存与放弃Mybatis(Plus)的二级缓存事情是这样发生的我想用redis实现mybatis-plus的二级缓存,用mybatis的方法(准备好cahce类,在mapper文件里面标记上cahce标签)发现不起作用!!!气愤,查了一下,下面是文档原文:mapper 层二级缓存问题我们建议缓存放到 service 层,你可以自定义自己的 BaseServiceImpl 重写注解父类方法

2021-06-11 22:46:22 679

原创 算法笔记:背包问题(下)

算法笔记:背包问题(下)前言终于独立做出来背包的题了,之前的总结非常有效,这篇文章就是先做道每日一题回顾一下,然后把上篇文章后面留的两道题做一下。做背包问题的思路(模板)还是先回顾(总结)一下,背包算法,就是一堆数要凑成一个target,然后转换成普通dp——》都多少种凑法、能不能凑成等。核心代码如下:for(int c:coins){ for(int i=c;i<=amount;i++){ //如果是背包里的物品有限就倒序,防重复,

2021-06-10 09:17:09 115

原创 算法笔记:动态规划——背包问题(上)

算法笔记:动态规划——背包问题前言今天是6.8,连续几天的每日一题都是背包问题我受不了了,必须解决了它,说实话有一些复杂,但是有不是完全复杂,这篇文章打算用几个例题来尽量解决掉背包算法。什么是背包问题直接看一道题:1049. 最后一块石头的重量 II有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x ==

2021-06-08 16:26:40 173

原创 多表查询用resultType还是resultMap&Invalid bound statement (not found)解决

多表查询用resultType还是resultMap&Invalid bound statement (not found)解决多表查询用resultType还是resultMap如果在对应的entity里面又有自定义的类,必须用resultMap,resultMap绝对的强大,可以体现一对一( association )、一对多( collection )的关系。比如public class Student{ private String id; private Cla

2021-06-06 19:25:48 325

原创 Java 多线程(1): 基础知识概述与synchronized关键字

Java 多线程(1): 基础知识概述与synchronized关键字前言本篇介绍一些多线程的基本知识,主要学习、参考资料《Java并发编程实战》,视频:千锋2020新版_Java多线程详解(Java基础课程)。多线程必知必会1、多线程程序运行的特点随机运行直接上代码public class MyThread extends Thread { @Override public void run() { for(int i=1;i<=10;i++){

2021-06-05 20:31:28 66

原创 操作系统(2):进程管理

操作系统(2):进程管理前言上一篇写了操作系统的基本概念,但是没有概述,先把概述补上。操作系统的学习分为五部分概述进程管理内存管理文件管理IO管理目前是学完了内存管理,感受是太简单了,核心就是进程管理(从页数上就能看出来),面试考的多的也是进程管理,内存管理就是内存、地址、分页简单的很,文件管理是讲的文件、目录、磁盘,IO更不用说,后三个加起来才顶一个进程管理进程。说了不少那么就开始吧。进程什么是进程?进程和程序的区别进程是程序的一次执行,进程是动态的程序是静态的,可以说进

2021-06-03 17:50:27 98 1

原创 快速开发平台 fast_security_admin(三):登录验证与动态权限管理

快速开发平台 fast_security_admin(三):登录验证与动态权限管理前言原本是计划5.25完成,中间因为学习遇到了困境加上去做了一个微信小程序,这个项目就搁置到现在了,当然现在是确实有了重大突破,但是很惭愧这些突破只能算是学习的突破不能算是我自己的成果。几乎完全是参考的 mall项目 的权限管理部分,可以说mall的权限管理部分非常好,讲解与非常细。mall的动态权限管理mall-learning这篇博客介绍一下遇到的问题,以及思路。库表设计现在是完全更新了数据库。详情访问下面

2021-06-02 09:29:26 214

原创 操作系统(1):操作系统中的基本概念

批处理一系列的命令连续执行——》批处理脚本操作系统的发展手工操作——》批处理阶段(单道——》多道(多进程,并行、并发))——》分时操作系统(并发,时间片)——》实时操作系统——》网络操作系统&分布式操作系统——》个人操作系统操作环境运行机制(大量基础概念)时钟管理——》时钟就是我们平时所说的时钟,作用是1、提供标准系统时间(向用户)2、时间片轮转!中断机制——》中断我的理解就是程序里面调用别的函数(程序)。运行着当前程序呢,但是现在需要外部资源了或者去运行别的程序,就先停下手里的

2021-05-28 13:49:36 208

原创 JVM(六):堆概述

JVM(六):堆概述堆是线程共享的——》堆相对进程是唯一的。一个进程对应一个JVM实例,一个JVM实例只有一个运行时数据区,一个运行时数据区只有一个堆。堆空间虽然是线程共享的但里面的缓冲区是线程私有的,因为线程共享如果用同步来解决多线程问题效率很差,所以用一个区域每个线程私有,TLAB。几乎所有的对象实例都在堆上。堆的内存结构堆在逻辑上按“代”来划分java7之前逻辑上分为:新生区、养老区、永久区java8逻辑上分为:新生区、养老区、元空间新生区=新生代=年轻代 养老区=老年区=老年代 永

2021-05-21 23:27:55 136

原创 JVM(五):Java虚拟机栈完结与面试题

JVM(五):Java虚拟机栈完结与面试题栈真的是很重一块,但是后面没多少了,一鼓作气!方法返回地址作用:存放该方法的pc寄存器的值(pc寄存器存的是下一条指令的值)。它的作用是获得下一条指令的值交给执行引擎,继续操作。如果是遇到异常并且没有处理,那就方法退出。正常完成和异常完成的区别是:异常完成出口退出的不会给它的上层调用者产生任何的返回值。一些附加信息保存与Java虚拟机实现相关的附加信息,可以没有。面试题先复习一下,看看剩下了什么。栈是管方法的,是线程私有的,基本单位是栈帧,执行

2021-05-19 23:01:23 86

原创 JVM(四):栈帧动态连接与方法调用详解

JVM(四):栈帧动态连接与方法调用详解学习JVM的一些分享,希望看到的人学起JVM更快我写的这个JVM系列算是笔记,学习的是:视频:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)书籍:《深入理解Java虚拟机》说一下学习过程中遇到的问题,按照一二三章这个顺序看这本书我看不懂,第二章简单说了一下JVM运行时内存数据区,很多名词,第三章直接GC,根本不知道各个区是干嘛的怎么运行,然后就去看视频了。视频讲解顺序是概述、类加载(对应书第七章)、详细介绍JVM运行时内存数据区各个部

2021-05-19 21:43:59 530

原创 JVM(三):Java虚拟机栈概述、栈帧、栈帧中的局部变量表

虚拟机栈这一部分真的很重要,内容也比较多,一起来看一下吧。Java虚拟机栈概述栈是管方法的,基本单位是栈帧,一个栈帧就是一个方法,栈只有两个操作:入栈和出栈,执行一个方法,这个代表这个方法的栈帧入栈,作为栈顶,这个方法是当前方法,执行结束,栈帧出栈。栈是线程私有的,生命周期与线程一致。栈中是没有垃圾回收的,但是有OOM(内存溢出)。这是因为栈的大小可以是固定的,也可以是动态的,这个是程序员可以设置的。关于栈的异常StackOverflowError:当设置JVM栈大小固定时栈溢出报错OutO

2021-05-18 18:23:13 318

原创 JVM(二):运行时数据区概览与程序计数器

JVM(二):运行时数据区概览与程序计数器线程私有的是程序计数器、本地方法栈、虚拟机栈,线程共享的是堆和方法区。而垃圾回收95%集中在堆5%在方法区。各区作用堆:存放对象实例。方法区:存放加载的类信息,包括类型信息、常量、静态变量、代码缓存等。本地方法栈:使用本地方法。虚拟机栈:线程私有生命周期与线程同步程序计数器:程序历程控制器。...

2021-05-15 23:15:15 70

原创 JVM(一):类加载与类加载机制(双亲委派等)

JVM(一):类加载与类加载机制(双亲委派等)首先看jvm的整体结构类加载器的作用将.class文件中描述类的数据加载到内存,并且对数据进行校验、转换、解析和初始化。类加载的三个步骤加载加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象。java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运

2021-05-14 23:18:44 99 4

原创 快速开发平台 fast_security_admin(二):动态Menu与Entity

快速开发平台 fast_security_admin(二):动态Menu与Entity做了一点简单的更新,有通用接口确实好一点,但是用mybatis-plus也是很简单,所以到后期就把方法补齐不再用通用接口。fast_security_admin在gitee地址需求提出动态的menu。因为是后台系统,前端免不了有大量list,表数据可以用v-for渲染但是表头还要自己写,不方便,有大量重复工作!菜单绑定entity的id,通过entity_id查entity。解决方案数据库建menu表和

2021-05-09 23:17:50 104

原创 快速开发平台 fast_security_admin(一):SpringBoot+Mybatis-Plus+反射 通用开发接口

快速开发平台 fast_security_admin(一):SpringBoot+Mybatis-Plus+反射 通用开发接口fast_security_admin在gitee地址需求提出之前使用mybatis每个实体类都要写getAll()、getById()、update()、save()、remove(),有大量重复代码,那么用了mybatis-plus好一些不用写重复的sql了,但是还要写重复的service、controller以及前端页面。解决方案(思路)第一步就是写通用接口,也就是本

2021-05-08 22:34:42 362

原创 前后端分离 github登录(Oauth2)

前后端分离 github登录(Oauth2)第三方登录在前后端不分离的情况下实现比较简单,在前后端分离情况下思路相同但是实现相对复杂。复杂点:生成token把token和用户数据给前端页面第一点如果熟悉token、JWT并不算复杂,主要是第二点容易卡住,需要应用前端知识。将token和用户数据给前端可能没有试过的同学不知道难在哪里,看一下登录逻辑图就知道难在哪了。后端想返回数据可是前端没有监听后端的响应,前端只能获取GitHubAPP的响应,但是没有。那如何做呢?具体实现:前端前

2021-04-28 23:05:25 849

原创 Springboot在拦截器中无法调用Service层(注入Bean失效)

Springboot在拦截器中无法调用Service层(注入Bean失效)困扰了一周,一度放弃,只能用的伪造数据,终于找到问题所在!拦截器中注入ServiceBean失效!报错信息空指针!无法使用注入的Service,因为根本没用注入进来!!!不光是无法注入,new也不行,哭。原因原因: 拦截器加载是在springcontext创建之前完成解决自己用工厂或者使用@Bean在拦截器初始化之前让类加载参考:https://blog.csdn.net/wmh13262227870/article/

2021-04-23 09:00:48 2103 1

原创 初识RabbitMq(3)发布/订阅模式和路由模式

发布——订阅(Publish/Subscribe)工作队列背后的假设是,每个任务都恰好交付给一个工人。在这一部分中,我们将做一些完全不同的事情-我们将相同消息传达给多个消费者。这种模式称为“发布/订阅”。通过交换机完成此模式,生产者——》交换机——》多个队列!!!——》不同的消费者。达成不同消费者接收同一台消息。利用广播类型的交换机,交换机自动生成排他队列 ,消费者与交换机绑定,交换机与生成的队列绑定,消费者监听绑定交换机生成的一个队列!达到将一条消息发给多个消费者的目的。生产者/** 发

2021-04-22 12:13:45 751

原创 初始RabbitMq(2)7个案例前两个

初识RabbitMq(2)7个案例前两个Hello World(简单队列)生产者------》消息队列-------》消费者生产者package org.example.simple.send;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.ConnectionFactory;import java.nio.charset.Standar

2021-04-21 22:56:57 50

原创 RabbitMq管理界面

RabbitMq管理界面系统概览Overview流失统计端口导入导出连接[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDD1mFBX-1618991358279)信道交换机每添加一个虚拟路由( Virtual host )有7个交换机队列角色(权限)rabbitmq管理界面介绍...

2021-04-21 15:54:27 186

原创 算法笔记:自定义排序 Comparator

算法笔记:自定义排序 Comparator在做算法题时经常需要排序,java提供Arrays.sort(),但是默认只能从小到大排序一维数组,如果想排序二维数组,或者自定义排序规则:从小到大、字符串排序规则等,需要传入Comparator接口并实现里面的compare方法。compare方法返回值int参数:T o1,T o2返回正数则正序,否则逆序。例1:从大到小排序import org.junit.Test;import java.util.Arrays;import java.ut

2021-04-14 20:21:00 350

转载 TCP为什么是四次挥手不是三次

TCP为什么是四次挥手不是三次因为断开需要两边都断!!!由于 TCP 的半关闭(half-close)特性,TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接通俗的来说,两次握手就可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次握手。举个例子:A 和 B 打电话,通话即将结束后,A 说 “我

2021-04-14 10:41:34 1900 2

原创 TCP三次握手四次挥手

TCP三次握手四次挥手一、从TCP报文段内容上序号seq:32bit,4字节, 用来标记数据段的顺序 ,TCP把数据看成无结构、有顺序的字节流。TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号。序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:32bit,4字节, 期待收到对方下一个报文段的第一个数据字节的序号 。序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编

2021-04-13 20:31:52 133

空空如也

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

TA关注的人

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