- 博客(86)
- 资源 (1)
- 收藏
- 关注
原创 Java把文件链接转成流,返回给前端下载
背景:已知Java拿到了一个PDF链接(http://xxx.xxx.pdf),直接把链接返给前端的话,前端是不能点击直接下载的,需要后端先。这样前端一点击,就能。
2024-08-26 16:17:52 344
原创 干货!完全体设计模式!工作中最常用
用于挪去臃肿的业务代码,还可以进一步升级加上模板模式,以及抽取成Starter。首先,抽象的处理业务的Handler,也就是 “模板”用于干掉大量的if-else。其次,模板的一种具体实现。然后,工厂的注册和生产。
2024-05-14 20:08:53 276
原创 批处理任务的通用工具类
1、只要是批处理任务(比如下发几万张优惠券,发京豆),就必定用到线程池、不丢包。2、业务场景:下发五万张优惠券,要求一张都不能少。
2024-05-04 11:08:29 211
原创 扫码登录到底是怎么实现的?
2、接着,APP 扫描这个二维码,把 APP 的 token 信息、二维码 ID 发送给 Server 端,4、于是,用户确认登录后,携带临时 token 给到 server,server 端修改二维码状态。3、此时,网页端展示的二维码状态会提示已扫码,待确认。不难发现,整个实现过程并不难,核心的设计就是一个特定的二维码,去连接了 APP。1、首先,在网页端打开登录页面,展示一个二维码,这个二维码有一个唯一编号是服。5、最后,网页端轮询到状态变化并获取到 token,从而完成扫码授权。提示确认授权的操作。
2024-03-27 11:20:51 374
原创 Mysql相关
B树相对于AVL(平衡二叉树)来说,AVL树每个节点只能有2个子树,而B树允许有多个子树,这样可以大大降低树的高度,树的层数越多,磁盘IO次数就越多,B树的高度低,层数少,所以磁盘IO次数少,适合作为硬盘存储的数据结构;B+树是B树的进一步拓展,B+树只有叶子节点才存储行数据,而每一层存储的数据量有限,这么设计可以进一步降低树的高度,减少磁盘IO次数,加快查找速度。索引的数据结构是B+树,为什么要用这个数据结构?
2024-03-25 16:35:23 209
原创 开发运维小技巧记录
1、查看服务器的内存大小命令是 free -m。2、查看服务器的任务管理器命令是 top,再按shift+M 按内存占用排序。按shift+P 按CPU占用排序。按shift+T 按耗时排序。
2024-03-22 16:47:57 123
原创 TopK问题
堆在Java中的实现是优先级队列:PriorityQueue。(找最大数用小顶堆,找最小数用大顶堆)比如从100万个整数中找出最大的100个整数,如果进行排序,时间复杂度是O(nlogn),代价高昂。可以看到,性能相差了三倍,并且数据量越大,性能差距也越大。来解决,时间复杂度是O(nlogK)TopK问题的解法是:用数据结构。
2023-12-28 10:50:01 420
原创 线程池里对异常的处理方式
=方式:==重写afterExecute方法, 统一处理线程池里抛出的异常。但是要区分是execute方式提交的,还是submit方式提交的。
2023-10-29 09:11:09 276
原创 烟花效果,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 351 2
原创 Mybatis中的一级缓存与二级缓存
二级缓存是NameSpace级别(Mapper)的缓存,多个SqlSession可以共享,使用时需要进行配置开启。(2)缓存的查找顺序:二级缓存 => 一级缓存 => 数据库。(1)MyBatis的缓存分为一级缓存和 二级缓存。一级缓存是SqlSession级别的缓存,默认开启。
2023-09-13 08:53:35 70
原创 Redis相关知识
整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。3)采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗。更快,也更不安全的选择。
2023-09-13 08:49:39 224
原创 线上排查定位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 175
原创 用ThreadLocal做链路追踪(初版、升级版、最终版)
于是出现了升级版(InheritableThreadLocal):解决了初版的问题,但是当线程池中开辟线程时,线程复用会残留上一次的trace-id,导致混乱不准。初版(ThreadLocal)的缺点:当new新线程时,子线程获取不到父线程的变量,导致trace-id丢失。2、当我们写的接口接收到其它地方(可能是前端、也可能是其它服务)发来的请求时,此刻,我们的接口所在的服务称作。服务端的日志打印很好做,用过滤器Filter即可,每次请求打过来,记录下请求路径、请求头、参数。
2023-08-14 10:19:50 336
原创 读书之《被讨厌的勇气》
在理解了学习是孩子的课题这个基础上再去考虑能做的事情,具体就是不去居高临下地命令其学习,而是努力地帮助他本人建立“自己能够学习”的自信以及提高其独立应对课题的能力。3、既不可以批评,也不可以表扬。表扬这种行为含有“有能力者对没能力者所做的评价”。人表扬他人的目的就在于“操纵比自己能力低的对方”。“因为不想与父亲和好,所以才搬出被打的记忆”。那么“关系修复之卡”就我在我手里,只要我改变“目的”,事情就能解决。5、“因为被打所以才与父亲不和”,那么只能束手无策了。2、“可以把马带到水边,但不能强迫其喝水” –
2023-07-16 21:31:54 114
原创 匿名内部类.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 450 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 1710
原创 线程池中7种阻塞队列的介绍、区别与选择
1. ArrayBlockingQueue(常用)基于数组的阻塞队列实现,在 ArrayBlockingQueue 内部,维护了一个定长数组,以便缓存队列中的数据对象,这是一个常用的阻塞队列,除了一个定长数组外,ArrayBlockingQueue 内部还保存着两个整形变量,分别标识着队列的头部和尾部在数组中的位置。ArrayBlockingQueue 在生产者放入数据和消费者获取数据,都是共用同一个锁对象,由此也意味着两者无法真正并行运行,这点尤其不同于LinkedBlockingQueue
2021-08-15 20:05:12 7641
原创 Postman创建ElasticSearch索引一直在sending状态
解决办法:首次启动elasticsearch.bat需要管理员身份运行。
2021-06-20 23:11:35 1404 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 108
原创 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 1072 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 987
原创 基于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 207 2
原创 面试前看一下快速排序(Quick Sort)
算法描述:使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:⚫ 从数列中挑出一个元素,称为 “基准”(pivot);⚫ 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;⚫ 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。排序方法时间复杂度(平均)时间复杂度(最坏)时
2020-07-10 17:27:49 117
原创 算法之冒泡排序(Bubble Sort)
算法描述:⚫ 比较相邻的元素。如果第一个比第二个大,就交换它们两个;⚫ 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;⚫ 针对所有的元素重复以上的步骤,除了最后一个;⚫ 重复步骤 1~3,直到排序完成。排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性冒泡排序O(n²)O(n²)O(n)O(1)稳定如果两个元素相等,不会再交换位置,所以冒泡排序是一种稳定排序算法。代码实现im
2020-07-10 16:20:20 171
原创 生日快乐(荣耀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 183
原创 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 107
原创 layui搜索单条记录,表格重载时网页一直在转圈圈没反应
原因就是layui内部的严格语法, 从后台传来的数据必须写成数组形式, 哪怕是单条记录也要封装成数组的形式
2020-05-23 15:06:58 2308 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 3925 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 881
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人