自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Optional类方法

【代码】Optional类方法。

2024-07-01 20:15:00 462

原创 【排序算法】排序算法-桶排序(Bucket Sort)

排序算法-桶排序概述例子桶排序 - 实现复杂度概述执行流程创建一定数量的桶(比如用数组、链表作为桶)按照一定的规则(不同类型的数据,规则不同),将序列中的元素均匀分配到对应的桶分别对每个桶进行单独排序将所有非空桶的元素合并成有序序列例子需要对下图中的元素进行排序,采用元素值*元素数量的规则寻找元素在桶中的索引,将其放入到对应的桶中分别对每个桶进行单独排序将所有非空桶的元素合并成有序序列桶排序 - 实现复杂度...

2022-01-19 21:41:20 432

原创 仿牛客论坛项目(6)

仿牛客论坛项目一、任务执行和调度1.1 添加依赖1.2 数据库新增表1.3 新增quartz配置QuartzConfig二、热帖排行一、任务执行和调度1.1 添加依赖 <!--整合quartz--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> &

2022-01-07 00:03:46 767

原创 仿牛客论坛项目(5)

仿牛客论坛项目一、SpringSecurity入门案例1.1 添加依赖1.2 配置文件1.3 工具类CommunityUtil1.4 配置类SecurityConfig1.5 实体类1.6 dao1.7 service1.8 controller1.9 测试一、SpringSecurity入门案例1.1 添加依赖 <dependencies> <dependency> <groupId>org.springframework.boot</group

2022-01-07 00:03:31 860

原创 仿牛客论坛项目(4)

仿牛客论坛项目一、Elasticsearch入门1.1 elasticsearch安装1.2 修改config目录下的elasticsearch.yml配置文件1.3 配置环境变量1.4 下载ik中文分词器1.5 下载postman1.6 启动es1.7 测试是否正确启动1.8 操作ES的RESTful语法1.9 es弹性搜索指南1.10 es中的数据类型二、 Spring整合Elasticsearch2.1 导入依赖2.2 修改配置文件2.3 修改主启动类2.4 实体类添加es注解2.5 数据操作Disc

2022-01-07 00:03:16 641

原创 仿牛客论坛项目(3)

仿牛客论坛项目

2022-01-07 00:03:01 601

原创 仿牛客论坛项目(2)

仿牛客论坛项目一、私信功能1.1 业务层MessageServiceUserService1.2 控制层MessageController1.3 静态资源letter.htmlletter-detail.html1.4 测试二、 统一处理异常2.1 异常处理类2.2 错误页面404.html500.html2.3 controller2.3 测试三、统一记录日志3.1 测试一、私信功能1.1 业务层MessageService@Servicepublic class MessageService

2022-01-07 00:02:45 1026

原创 仿牛客论坛项目(1)

仿牛客论坛项目一、总体架构二、技术栈及模块三、整合邮件发送3.1 新增依赖3.2 配置文件3.3 配置工具类MailClient3.4 测试四、开发注册功能4.1 新增依赖4.2 配置文件4.3 配置工具类CommunityConstantCommunityUtil4.4 业务层4.5 控制层4.6 静态页面index.html(首页中的导航栏,底部栏在其他页面复用)register.htmloperate-result.html4.7 实体类4.8 测试注册五、生成验证码5.1 添加依赖5.2 编写Kap

2022-01-07 00:02:16 4189 5

转载 【数据结构】基环树(环套树)

基环树概念基环树相关问题转载自https://www.codetd.com/article/7620085概念具有N个点N条边的连通图,如果不保证连通,它就会称为基环树森林在有向图中,我们也有类似的概念。N个点、N条边、每个节点有且仅有一条入边的有向图就好像以“基环”为中心,有向外扩展的趋势,故称为“外向树”。N个点、N条边、每个节点有且仅有一条出边的有向连通图就好像以“基环”为中心,有向内收缩的趋势,故称为“内向树”。外向树和内向树也经常统称为“基环树”。如果不保证连通,那么N个点、N条边、每

2022-01-03 15:35:32 749

原创 【数据结构】并查集(Union Find)

并查集需求分析概述如何存储数据接口定义初始化为Quick Find和Quick Union定义抽象类Quick Find示例查找方法合并方法具体实现测试Quick Union示例需求分析假设有n个村庄,有些村庄之间有连接的路,有些村庄之间并没有连接的路设计一个数据结构,能够快速执行两个操作查询2个村庄之间是否有连接的路连接2个村庄数组、链表、平衡二叉树、集合(Set)?查询、连接的时间复杂度都是: O(n)并查集能够办到查询、连接的均摊复杂度都是O(α(n)), α

2021-12-31 13:58:05 706

原创 【数据结构】Trie

Trie需求简介接口设计实现类测试类总结需求如何判断一堆不重复的字符串是否以某个前缀开头?用Set\Map存储字符串遍历所有字符串进行判断时间复杂度: O(n)有没有更优的数据结构实现前缀搜索Trie简介Trie 也叫做字典树、前缀树(Prefix Tree)、单词查找树Trie搜索字符串的效率主要跟字符串的长度有关假设使用Trie存储cat、dog、doggy、does、cast、add六个单词接口设计或者实现类public class Trie<

2021-12-28 14:58:28 302

原创 【排序算法】排序算法-计数排序(Counting Sort)

计数排序概述核心思想执行流程示例代码(版本1)测试存在问题代码(版本2)(解决上面的问题)复杂度测试执行流程(图解)使用场景概述冒泡、选择、插入、归并、快速、希尔、堆排序,都是基于比较的排序平均复杂度最低是O(nlog(n))计数、桶、基数排序,都不是基于比较的排序是典型的空间换时间,在某些时候,平均时间复杂度可以比O(nlog(n))更低核心思想统计每个整数在序列中出现的次数,进而推导出每个整数在有序序列中的索引执行流程首先需要找出需要排序的数组或者集合arr中的

2021-12-28 00:24:43 329

转载 SPI机制

SPI机制SPI机制详解什么是SPI机制SPI机制的简单示例SPI机制的广泛应用SPI机制 - JDBC DriverMangerJDBC接口定义mysql实现使用方法著作权归https://pdai.tech所有。源码实现SPI机制 - 插件体系SPI机制 - SpringBoot中SPI机制SPI机制深入理解SPI机制通常怎么使用定义标准具体厂商或者框架开发者实现程序员使用SPI和API的区别是什么?SPI机制实现原理SPI机制的缺陷参考文章转载自https://pdai.tech/md/java/

2021-12-24 01:51:20 476

原创 负载均衡算法

负载均衡算法概述算法随机测试轮询测试加权随机实现方式一测试实现方式二测试加权轮询实现方式一测试实现方式二测试平滑加权轮询测试一致性hash总结自b站up主IT老哥视频概述常见的负载均衡算法有随机、加权随机、轮询、加权轮询、平滑加权轮询、一致性哈希算法服务器IPpublic class ServerIps { public static final List<String> LIST = Arrays.asList( "A",

2021-12-18 22:51:48 331

原创 Arrays.sort底层原理

Arrays.sort源码剖析概述案例运行结果1 进入Arrays.sort()方法方法上的注释2 进入DualPivotQuicksort类内部的静态方法sort方法上的注释3. 走sort的流程1. 排序范围小于286的数组使用快速排序2. 进入sort方法,判断数组长度是否小于47,小于则直接采用插入排序,否则执行3。3. 用公式length/8+length/64+1近似计算出数组长度的1/7。4. 取5个根据经验得出的等距点。5.将这5个元素进行插入排序6. 选取a[e2],a[e4]分别作为pi

2021-12-17 22:16:11 1947

转载 限流(漏桶,令牌桶)

限流为什么要限流限流思路熔断**服务降级**延迟处理特权处理缓存、降级、限流区别限流的算法计数器算法漏桶算法令牌桶算法并发限流接口限流接口总数接口时间窗口限流实现添加依赖核心代码令牌桶实现稳定模式(SmoothBursty:令牌生成速度恒定)渐进模式(SmoothWarmingUp: 令牌生成速度缓慢提升直到维持在一个稳定值)分布式系统限流Nginx + Lua实现转载自:https://www.cnblogs.com/Courage129/p/14423707.html为什么要限流日常生活中,有

2021-12-16 23:44:47 591

原创 图的入门学习

图数据结构物回顾相关概念图有向图出度、入度无向图混合图简单图、多重图无向完全图有向完全图有权图连通图连通分量强连通图强连通分量图的实现方案邻接矩阵邻接矩阵 - 有权图邻接表邻接表 - 有权图实现图Graph接口ListGraph类测试类测试生成图测试删除边测试删除顶点数据结构物回顾线性结构: 数组、链表、栈、队列、哈希表树形结构: 二叉树、B树、堆、Trie(字典树)、哈夫曼树、并查集图形结构相关概念图图由顶点(vertex)和边(edge)组成,通常表示为G=(V,E)G表示一个图,

2021-12-15 23:10:07 951

原创 【排序算法】排序算法-拓扑排序

拓扑排序相关概念AOV网拓扑排序实现思路实现过程代码测试测试类测试样例相关概念AOV网一项大的工程常被分为多个小的子工程子工程之间可能存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始在现代化管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,子工程被称为活动(Activity)以顶点表示活动、有向边表示活动之间的先后关系,这样的图简称为AOV网标准的AOV网必须是一个有向无环图(Directed Acyclic Graph, 简称 DAG)拓扑排

2021-12-15 22:31:27 1435

原创 【排序算法】排序算法-堆排序(Heap Sort)

堆排序概述执行流程代码概述堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。执行流程将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前

2021-12-11 01:15:04 847

原创 axios

axios一、概述简介特性二、基本使用发送异步请求getpost请求配置三、axios-拦截器一、概述简介Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。axios前端异步请求库 类似jQuery ajax技术ajax用来在页面发起异步请求到后端服务,并将后端服务响应数据渲染到页面上axios总结用来在前端页面发起一个异步请求,请求之后页面不动,响应回来刷新页面局部官方定义:axios异步请求库 并不是vue官方库 第三方异步库 在vue中推

2021-12-08 21:03:12 2261

原创 【Redis】高性能设计之epoll和IO多路复用深度解析

文章目录一、Redis为什么快?高性能设计之epoll和IO多路复用深度解析1.1 Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快?1.2 《Redis设计与实现》1.3 是什么?1.4 重要概念article同步异步同步与异步的理解阻塞非阻塞阻塞与非阻塞的理解总结1.5 Unix网络编程中的五种IO模型1.6 BIOjava验证演示acceptcode演示read案例1存在的问题案例2存在的问题1.7 NIO总结回答code案例存在问题和优缺点1.8 IO Multiplexing(

2021-12-07 22:13:23 1479

原创 【Redis】分布式存储极致性能Redis(5)

文章目录一、Redis的三大删除策略1.1 定时删除1.2 惰性删除1.3 定期删除二、Redis缓存淘汰策略三、Redis内存相关配置3.1 查看Redis最大占用内存3.2 redis默认内存多少可以用?3.3 生产环境配置3.4 如何修改redis内存设置3.5 如何查看redis内存使用情况?四、redis经典五种数据类型及底层实现4.1 redis源码4.2 github官网说明4.3 从set hello world说起4.4 redisObject结构的作用案例 set age 174.5 数

2021-12-07 00:58:26 1217

原创 JUC并发编程与源码分析(6)

JUC并发编程与源码分析一、AQS(AbstractQueuedSynchronizer) 抽象队列同步器1.1 是什么?1.2 AQS为什么是JUC内容中最重要的基石1.2.1 和AQS有关的1.2.2 进一步理解锁和同步器的关系锁,面向锁的使用者同步器,面向锁的实现者1.3 能干嘛?1.4 AQS初步1.4.1 AQS初识官网解释有阻塞就需要排队,实现排队必然需要队列1.4.2 AQS内部体系架构1.4.2.1 AQS的int变量1.4.2.2 AQS的CLH队列1.4.2.3 小总结1.4.2.4 内

2021-12-01 00:15:46 498

原创 JUC并发编程与源码分析(5)

JUC并发编程与源码分析一、ThreadLocal1.1 是什么?1.2 能干嘛?1.3 api介绍1.4 入门案例1.5 ThreadLocal源码分析Thread,ThreadLocal,ThreadLocalMap 关系Thread和ThreadLocalThreadLocal和ThreadLocalMap三者总概括小总结1.6 ThreadLocal内存泄漏问题什么是内存泄漏?回顾ThreadLocalMap强软弱虚四大引用整体架构强引用软引用弱引用虚引用GCRoots和四大引用小总结为什么要用弱引

2021-11-28 21:38:23 561

原创 JUC并发编程与源码分析(4)

JUC并发编程与源码分析一、CAS1.1 没有CAS之前多线程环境不使用原子类保证线程安全多线程环境使用原子类保证线程安全(基本数据类型)1.2 是什么?原理硬件级别保证CASDemo代码源码分析compareAndSet(int expect,int update)1.3 CAS底层原理(对Unsafe的理解)Unsafei++是线程不安全的,那atomicInteger.getAndIncrement()总结底层汇编cmpxchg总结1.4 自旋锁,借鉴CAS思想手写一个自旋锁1.5 CAS缺点ABAd

2021-11-27 20:42:27 589

原创 【JUC】CountDownLatch

CountDownLatch一、概述1.1 案例代码解决方案一、概述CountDownLatch允许一个或多个线程等待其他线程完成操作。1.1 案例假设由50个线程,有一个原子类AtomicInteger,50个线程都对该类进行自增1000次代码public class AtomicDemo { static AtomicInteger atomicInteger = new AtomicInteger(); public static void main(String[] a

2021-11-26 21:19:03 260

原创 JVM第7篇-性能监控 & JVM性能调优案例

性能监控一、JVM监控及诊断工具-命令行篇1.1 基础故障处理工具1.1.1 jps: 虚拟机进程状况工具命令格式使用1.1.2 jstat: 虚拟机统计信息监视工具命令格式使用1.1.3 jinfo: Java配置信息工具命令格式使用1.1.4 jmap: Java内存映像分析工具命令格式1.1.5 jstack: Java堆栈跟踪工具命令格式使用二、JVM监控及诊断工具-GUI篇三、JVM运行时参数四、调优概述4.1 生产环境中的问题4.2 调优基本问题为什么要调优?调优的大方向不同阶段的考虑总结4.3

2021-11-25 13:37:08 1645

原创 JVM第6篇-垃圾回收

垃圾回收一、概述1.1 什么是垃圾?1.2 为什么需要GC?1.3 GC的重点区域?二、垃圾回收算法2.1 垃圾判定算法2.1.1 引用计数算法优缺点测试2.1.2 可达性分析算法原理与基本思路优点GC Roots注意点2.2 垃圾清除算法2.2.1 标记-清除算法缺点2.2.2 标记-复制算法优缺点应用场景2.2.3 标记-整理算法指针碰撞优缺点2.2.4 三种垃圾回收算法对比2.2.5 分代收集算法分析2.2.6 增量收集算法缺点三、相关概念3.1 System.gc()测试3.2 finalize方法

2021-11-23 16:29:57 256

原创 JVM第5篇-执行引擎

执行引擎一、执行引擎是做什么的?二、执行引擎是怎么工作的?三、代码编译和执行的过程3.1 解释器3.1.1 工作机制分类3.2 为什么说Java是半编译半解释型语言?3.3 JIT编译器为什么还保留解释器执行方式?HotSpot JVM执行方式一、执行引擎是做什么的?执行引擎是Java虚拟机核心的组成部分之一。JVM的主要任务是负责装载字节码到其内部,单字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他

2021-11-21 21:18:38 260

原创 JVM第四篇-对象内存布局

对象内存布局一、 对象的实例化1.1 你有几种方式创建对象?1.2 创建对象的步骤二、对象的内存布局2.1 对象头(Header)2.2 实例数据(Instace Data)2.3 对齐填充(Padding)三、对象的访问定位3.1 直接指针访问3.2 句柄访问一、 对象的实例化1.1 你有几种方式创建对象?new反射实现clonable接口,重写clone方法反序列化第三方库Objenesis,利用了asm字节码技术,动态生成Constructor对象1.2 创建对象的步骤判断对象

2021-11-21 14:50:18 245

原创 JVM第三篇-内存结构

内存结构一、程序计数器(线程私有)二、虚拟机栈(线程私有)2.1 设置栈大小(-Xsssize | -XX:ThreadStackSize)测试代码无参时-Xss1024k-Xss512k-Xss256k2.2 方法和栈帧之间存在怎样的关系?2.3 栈帧内部结构局部变量表关于Slot的理解与GC Roots的关系操作数栈举例操作数栈的测试方法1栈顶缓存技术?动态链接(或指向运行时常量池的方法引用)方法出口三、本地方法栈3.1 什么是本地方法?3.2 为什么要使用Native Method?3.3 本地方法现

2021-11-21 00:45:50 520

原创 JVM第二篇-类的加载

类的加载一、类的加载过程(生命周期)1.1 说说类加载分几步?1.1.1 谁需要加载?1.2 过程一: Loading(装载)阶段1.2.1 做了什么事?1.2.2 什么是类模板对象1.2.3 Class实例的位置在哪1.2.4 数组类的加载有什么不同?一、类的加载过程(生命周期)1.1 说说类加载分几步?1.1.1 谁需要加载?在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。1.2 过程一: Loading(装载)阶段1.2.

2021-11-18 00:50:17 599

原创 分布式存储极致性能Redis(4)

分布式存储极致性能Redis一、Redis分布式锁1.1 锁的分类1.2 分布式锁需要具备的条件和刚需1.3 分布式锁1.4 案例(springboot+redis)1.4.1 使用场景1.4.2 建Module(两个module内容相同,除端口号不同)1.4.3 pom.xml1.4.4 写yml1.4.5 编写主启动类1.4.6 config包和controller包1.4.7 测试1.5 分析上面案例的问题并完善代码(下面每一个案例都是对前一个案例的问题修复)1.5.1 案例1(解决单机版的高并发的超

2021-11-13 22:30:05 1489

转载 认识MySQL和Redis的数据一致性问题

认识MySQL和Redis的数据一致性问题1. 什么是数据的一致性2. 数据不一致情况及应对策略2.1 针对只读缓存(更新数据库+删除缓存)A. 无并发情况(1) 先删除缓存,再更新数据库(2) 先更新数据库,再删除缓存解决策略a. 消息队列+异步重试b.订阅 Binlog 变更日志B. 高并发情况(1)先删除缓存,再更新数据库解决策略a.设置缓存过期时间 + 延时双删(2) 先更新数据库,再删除缓存解决方案:a. 延迟消息b.订阅 binlog,异步删除c.删除消息写入数据库d. 加锁2.2 针对读写缓存

2021-11-12 22:57:45 195

原创 editor.md使用以及图片复制粘贴

editor.md使用以及图片复制粘贴editor.md使用教程1.1 下载官方资源1.2 查看实例代码1.3 打开example中full.html查看全部功能配置1.4 开启图片上传并且实现拖拽剪切复制粘贴上传图片1.4.1 编写uploadImg.js1.4.2 使用方法参考文章editor.md使用教程1.1 下载官方资源官网地址1.2 查看实例代码初始化加载js文件和css样式文件<link rel="stylesheet" href="editormd/css/editor

2021-11-10 22:57:50 1547 1

原创 thymeleaf访问springboot静态资源被dispatcherservlet拦截

thymeleaf访问springboot静态资源被dispatcherservlet拦截解决方案解决方案@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { /** * 解决resources下面静态资源无法访问 * @param registry */ @Override public void addResourceHandlers(

2021-11-09 13:48:03 516

原创 JUC并发编程与源码分析(3)

JUC并发编程与源码分析一、Java内存模型之JMM1.1 计算机硬件存储体系1.2 Java内存模型Java Memory Model1.3 JMM规范下,三大特性1.3.1 可见性1.3.2 原子性1.3.3 有序性案例1.4 JMM规范下, 多线程对变量的读写过程1.4.1 读取过程1.4.2 小总结1.5 JMM规范下,多线程先行发生原则之happens-before1.5.1 x,y案例说明1.5.2 先行发生原则说明1.5.3 happens-before总原则1.5.4 happens-bef

2021-11-07 22:02:26 249

原创 JUC并发编程与源码分析(2)

JUC并发编程与源码分析一、Java的锁1.1 乐观锁和悲观锁1.1.1 悲观锁1.1.2 乐观锁1.2 通过8种情况演示锁运行案例,看看我们到底锁的是什么1.2.1 JVM中对应的锁在哪里?1.2.2 synchronized有三种应用方式1.2.2.1 JDK源码(notify方法)说明举例1.2.2.2 8种锁的案例实际体现在3个地方1.2.3 从字节码角度分析synchronized实现synchronized同步代码块一定是一个enter两个exit吗?synchronized普通同步方法sync

2021-11-05 23:55:45 393

原创 【排序算法】排序算法-快速排序(QuickSort)

排序算法-快速排序代码时间复杂度代码public class QuickSort { public static void main(String[] args) { int[] arrays = {49,38,65,97,76,13,27,49}; System.out.println("快速排序之挖坑排序前的数组:" + Arrays.toString(arrays)); QuickSort.quickSort(arrays);

2021-11-05 21:23:39 183

原创 分布式存储极致性能Redis(3)

分布式存储极致性能Redis一、布隆过滤器BloomFilter1.1 面试题1.2 是什么?1.3 特点考点1.4 布隆过滤器的使用场景1.5 布隆过滤器原理1.5.1 Java中的传统hash1.5.2 布隆过滤器实现原理和数据结构1.5.3 进一步1.5.4 再说一次(三步骤)1.5.4.1 初始化1.5.4.2 添加1.5.4.3 判断是否存在1.5.4.4 布隆过滤器误判率,为什么不要删除1.5.5 小总结1.6 布隆过滤器优缺点1.7 布谷鸟过滤器(了解)二、缓存预热+缓存雪崩+缓存击穿+缓存穿

2021-11-02 22:01:47 470

空空如也

空空如也

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

TA关注的人

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