自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(81)
  • 资源 (1)
  • 收藏
  • 关注

原创 扫码登录到底是怎么实现的?

2、接着,APP 扫描这个二维码,把 APP 的 token 信息、二维码 ID 发送给 Server 端,4、于是,用户确认登录后,携带临时 token 给到 server,server 端修改二维码状态。3、此时,网页端展示的二维码状态会提示已扫码,待确认。不难发现,整个实现过程并不难,核心的设计就是一个特定的二维码,去连接了 APP。1、首先,在网页端打开登录页面,展示一个二维码,这个二维码有一个唯一编号是服。5、最后,网页端轮询到状态变化并获取到 token,从而完成扫码授权。提示确认授权的操作。

2024-03-27 11:20:51 254

原创 Mysql相关

B树相对于AVL(平衡二叉树)来说,AVL树每个节点只能有2个子树,而B树允许有多个子树,这样可以大大降低树的高度,树的层数越多,磁盘IO次数就越多,B树的高度低,层数少,所以磁盘IO次数少,适合作为硬盘存储的数据结构;B+树是B树的进一步拓展,B+树只有叶子节点才存储行数据,而每一层存储的数据量有限,这么设计可以进一步降低树的高度,减少磁盘IO次数,加快查找速度。索引的数据结构是B+树,为什么要用这个数据结构?

2024-03-25 16:35:23 183

原创 开发运维小技巧记录

1、查看服务器的内存大小命令是 free -m。2、查看服务器的任务管理器命令是 top,再按shift+M 按内存占用排序。按shift+P 按CPU占用排序。按shift+T 按耗时排序。

2024-03-22 16:47:57 103

原创 TopK问题

堆在Java中的实现是优先级队列:PriorityQueue。(找最大数用小顶堆,找最小数用大顶堆)比如从100万个整数中找出最大的100个整数,如果进行排序,时间复杂度是O(nlogn),代价高昂。可以看到,性能相差了三倍,并且数据量越大,性能差距也越大。来解决,时间复杂度是O(nlogK)TopK问题的解法是:用数据结构。

2023-12-28 10:50:01 394

原创 logback.xml文件例子

【代码】logback.xml文件例子。

2023-11-10 09:31:58 476

原创 线程池里对异常的处理方式

=方式:==重写afterExecute方法, 统一处理线程池里抛出的异常。但是要区分是execute方式提交的,还是submit方式提交的。

2023-10-29 09:11:09 249

原创 多任务并发执行,最终返回的例子

【代码】多任务并发执行,最终返回的例子。

2023-10-11 18:02:29 107

原创 烟花效果,H5+C3+JS实现

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>11

2023-10-09 12:33:00 327 2

原创 Mybatis中的一级缓存与二级缓存

二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。(2)缓存的查找顺序:二级缓存 => 一级缓存 => 数据库。(1)MyBatis的缓存分为一级缓存和 二级缓存。一级缓存是SqlSession级别的缓存,默认开启。

2023-09-13 08:53:35 43

原创 Redis相关知识

整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。更快,也更不安全的选择。

2023-09-13 08:49:39 185

原创 线上排查定位OOM问题的记录

1、分析快照文件的工具建议用eclipse analyzer,而不是jdk自带的jvisualvm。eclipse analyzer的下载地址:http://www.eclipse.org/mat/downloads.php。整体思路:把机器上的快照文件下载到本地电脑,用eclipse analyzer打开它,找到是哪一行导致oom。因为快照文件很大,eclipse analyzer设置的大小阈值也要调成足够大。把该文件下载到本地电脑,可以借助xftp等工具下载。2、解压缩后,先编辑下这个文件。

2023-08-30 15:18:38 128

原创 对HashMap的value做升序、降序

因为结果要求是有序的,所以返回的类型必须是LinkedHashMap。

2023-08-29 11:08:50 1068

原创 java-并发包中的倒计数闩锁、循环栅栏、信号量

【代码】java-并发包中的倒计数闩锁、循环栅栏、信号量。

2023-08-15 13:08:18 178

原创 用ThreadLocal做链路追踪(初版、升级版、最终版)

于是出现了升级版(InheritableThreadLocal):解决了初版的问题,但是当线程池中开辟线程时,线程复用会残留上一次的trace-id,导致混乱不准。初版(ThreadLocal)的缺点:当new新线程时,子线程获取不到父线程的变量,导致trace-id丢失。2、当我们写的接口接收到其它地方(可能是前端、也可能是其它服务)发来的请求时,此刻,我们的接口所在的服务称作。服务端的日志打印很好做,用过滤器Filter即可,每次请求打过来,记录下请求路径、请求头、参数。

2023-08-14 10:19:50 212

原创 读书之《被讨厌的勇气》

在理解了学习是孩子的课题这个基础上再去考虑能做的事情,具体就是不去居高临下地命令其学习,而是努力地帮助他本人建立“自己能够学习”的自信以及提高其独立应对课题的能力。3、既不可以批评,也不可以表扬。表扬这种行为含有“有能力者对没能力者所做的评价”。人表扬他人的目的就在于“操纵比自己能力低的对方”。“因为不想与父亲和好,所以才搬出被打的记忆”。那么“关系修复之卡”就我在我手里,只要我改变“目的”,事情就能解决。5、“因为被打所以才与父亲不和”,那么只能束手无策了。2、“可以把马带到水边,但不能强迫其喝水” –

2023-07-16 21:31:54 101

原创 Java后端解决跨域的相关配置

跨域、Java

2022-12-28 09:24:45 706 1

原创 Linux命令卸载JDK并装新JDK

Linux命令方式卸载、安装JDK

2022-08-19 13:55:16 1381

原创 检测死锁的两种办法

Java死锁的检测方式

2022-06-16 12:35:40 2790

原创 八锁现象彻底理解锁

Java JUC 多线程 锁现象

2022-06-16 09:12:55 138

原创 CompletableFuture之线程池运行选择

java的CompletableFuture执行任务时用的什么线程池

2022-06-12 14:43:37 1879

原创 匿名内部类.getClass()结果

匿名内部类是继承了指定的类或实现了指定接口的类,我猜想它的class类型应该和该类(接口)相同,但实际发现不同。public class M15 { public static void main(String[] args) { Runnable runnable = () -> { }; System.out.println(runnable.getClass()); System.out.println(Runnab

2022-05-22 14:49:01 369 1

原创 Rabbit基于插件实现一个延迟队列

前言:基于死信的延迟队列存在漏洞问题,所以要使用基于插件的延迟队列。前者延迟的时机发生在队列,后者则在交换机。插件在官网上下载:https://www.rabbitmq.com/commuinty-plugins.html配置类:@Configurationpublic class DelayedQueueConfig { // 队列 public static final String DELAYED_QUEUE_NAME = "delayed.queue"; //

2022-03-27 17:14:58 1698

原创 线程池中7种阻塞队列的介绍、区别与选择

1. ArrayBlockingQueue(常用)基于数组的阻塞队列实现,在 ArrayBlockingQueue 内部,维护了一个定长数组,以便缓存队列中的数据对象,这是一个常用的阻塞队列,除了一个定长数组外,ArrayBlockingQueue 内部还保存着两个整形变量,分别标识着队列的头部和尾部在数组中的位置。ArrayBlockingQueue 在生产者放入数据和消费者获取数据,都是共用同一个锁对象,由此也意味着两者无法真正并行运行,这点尤其不同于LinkedBlockingQueue

2021-08-15 20:05:12 6297

原创 Postman创建ElasticSearch索引一直在sending状态

解决办法:首次启动elasticsearch.bat需要管理员身份运行。

2021-06-20 23:11:35 1275 11

原创 vi和vim快捷键

拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴(输入p)。删除当前行 dd,删除当前行向下的5行 5dd在文件中查找某个单词[命令模式下/关键字,回车 查找,输入n就是查找下一个]设置文件的行号,取消文件的行号。[命令模式下:set nu和 set nonu]一般模式下,定位到文件的最末行[G]和最首行[gg]撤销操作:修改后回到一般模式,按u一般模式快速定位到某行:20+shift+g老韩视频链接:https://www.bilibili.com/video/BV1Sv411r.

2021-05-05 16:15:43 94

原创 EasyExcel的简单使用,包括读取和写入

1.dependency<dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.6</version></dependency>2.Excel表格内容3.封装的实体类@Datapublic class ExcelData { @Excel

2021-02-11 15:06:11 991 3

原创 Spring高级--单例Bean依赖多例Bean的正确解决方案

问题描述: 单例Bean(取名A)依赖多例Bean(取名B),当我每次去拿A时,本希望B时多例的,可是B每次也是单例的。原因分析: Spring中的Bean默认是饿汉式单例。早在Spring启动过程中,所有的单例Bean都已经创建并实例化好了,也就是A一开始就完成了实例化,那么它所依赖的B也永远写死在A中了。解决方案: 在A中对于B的get方法上贴上注解@Lookup即可解决。...

2020-09-01 14:18:38 870

原创 基于Spring Boot和阿里云的短信验证码

pom.xml必备依赖<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.3</version></dependency><dependency> <groupId>com.alibaba</g

2020-07-12 22:18:36 195 2

原创 面试前看一下快速排序(Quick Sort)

算法描述:使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:⚫ 从数列中挑出一个元素,称为 “基准”(pivot);⚫ 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;⚫ 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。排序方法时间复杂度(平均)时间复杂度(最坏)时

2020-07-10 17:27:49 107

原创 算法之冒泡排序(Bubble Sort)

算法描述:⚫ 比较相邻的元素。如果第一个比第二个大,就交换它们两个;⚫ 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;⚫ 针对所有的元素重复以上的步骤,除了最后一个;⚫ 重复步骤 1~3,直到排序完成。排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性冒泡排序O(n²)O(n²)O(n)O(1)稳定如果两个元素相等,不会再交换位置,所以冒泡排序是一种稳定排序算法。代码实现im

2020-07-10 16:20:20 154

原创 生日快乐(荣耀V20)

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <!-- <meta name="viewport" content="width=device-width,initial-scale=1.0">--> <meta name=”viewport” content=”width=width, initial-scale=1,

2020-06-25 19:15:48 159

原创 SpringBoot文件上传

前端:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>文件上传</title></head><body><form action="/upload" method="post" enctype="multipart/form-data"> <input type="file

2020-06-10 14:46:55 98

原创 layui搜索单条记录,表格重载时网页一直在转圈圈没反应

原因就是layui内部的严格语法, 从后台传来的数据必须写成数组形式, 哪怕是单条记录也要封装成数组的形式

2020-05-23 15:06:58 2213 1

原创 layui数据表格分页失败

主要错误是表格直接在第一页上就把所有数据显示了,分页不起作用<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>table模块快速使用</title> <link rel="stylesheet" href="http://localhost:8001/layui/css/layui.css"> <script src

2020-05-23 11:11:12 3805 10

原创 KMP算法,next数组,Java实现

package com;import java.util.Arrays;public class Main1 { private static int[] getNext(String s) { //传过来的是模式串,返回的是next数组 int len = s.length(); //获取模式串的长度 char[] p = s.toCharArray(); //把模式串转换成char数组 int[] ne

2020-05-23 00:22:59 817

原创 jQuery获取被选中的radio的值

<input type="radio" name="sexName" value="男" title="男"><input type="radio" name="sexName" value="女" title="女" checked><input type="radio" name="sexName" value="中性" title="中性" disabled>jQuery代码$("input[name='sexName']:checked").val().

2020-05-16 20:56:49 193

原创 图形验证码

<!DOCTYPE html><html><!-- head --><head> <meta charset="utf-8"> <title>图片登录验证</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1

2020-05-15 19:45:23 183

原创 利用栈Stack解决汉诺塔问题

package stack;import java.util.Stack;public class MyStack { //StackA是源柱,StackB是借助柱,StackC是目的柱 //move()方法表示把n个在A柱上的移动到C柱 private static int move(int n, Stack stackA, Stack stackB, Stack stackC) { if (n == 1) { stackC.pus

2020-05-15 14:03:59 357

原创 下载的项目运行报错:java...程序包...不存在,找不到符号解决方案

在该模块的pom.xml中添加如下:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration>

2020-05-09 18:58:43 836

原创 二维数组和稀疏数组的互相转化

稀疏数组是一种数据结构,可以节省存储空间稀疏数组和二维数组的关系图:以棋盘为例,代码实现:package com.company;public class Main { public static void main(String[] args) { //原始的二维数组 int[][] chessArr1 = new int[11][11];...

2020-05-08 10:30:18 120

SpringBoot报错.docx

初学SpringBoot遇到报错,反复检查后,反复查阅资料后,才知道是缺少依赖和tomcat版本不对

2019-09-14

空空如也

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

TA关注的人

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