- 博客(501)
- 资源 (10)
- 收藏
- 关注
原创 【Java】线程池八股文一
作为 JUC 包下的门面担当,线程池是名副其实的 JUC 一哥,不了解线程池,那说明你对 JUC 包其他工具也了解的不咋样吧,对 JUC 没深入研究过,那就是没掌握到 Java 的精髓,给面试官这样一个印象,那结果可想而知了。可以这样说:计算机发展到现在,摩尔定律在现有工艺水平下已经遇到难易突破的物理瓶颈,通过多核 CPU 并行计算来提升服务器的性能已经成为主流,随之出现了多线程技术。
2023-09-12 13:35:12
68
转载 【Spring Boot】实现接口幂等性的 4 种方案
在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。幂等性是开发当中很常见也很重要的一个需求,尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。对于下单等存在唯一主键的,可以使用“唯一主键方案”的方式实现;
2023-07-04 09:03:07
166
原创 【MySQL】count()查询性能梳理
使用的数据库是MySQL8,使用的存储引擎是Innodb。通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。它没有性能问题。却存在性能差的问题。为什么会出现这种情况呢?
2023-07-03 11:26:49
493
2
原创 【Redis】数据被删除,内存占用还这么大?
内存碎片会造成明明有内存空间空闲,可是却无法存储数据。举个例子,你跟漂亮小姐姐去电影院看电影,肯定想连在一块。假设现在有 8 个座位,已经卖出了 4 张票,还有 4 张可以买。可是好巧不巧,买票的人很奇葩,分别间隔一个座位买票。即使还有 4 个座位空闲,可是你却买不到两个座位连在一块的票,厚礼蟹!如果你发现明明 Redis 存储数据的内存占用远小于操作系统分配给 Redis 的内存,而又无法保存数据,那可能出现大量内存碎片了。
2023-07-03 11:12:05
122
原创 【Java】Spring Boot配置动态数据源
通过实现Spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可以实现数据源的动态切换。1.2 创建动态数据源配置类跟配置静态多数据源一样,需要手动配置下面的三个 Bean,只不过DynamicDataSource类的targetDataSources是空的。1.3 创建动态数据源服务类这是一个比较核心的工具类,提供了一些静态方法从而可以实现一些功能,包括:、、、。在 DynamicDataSource 类中,就是调用了 DynamicData
2023-06-30 09:50:51
1403
1
原创 【CentOS】VirtualBox yum 无法使用
执行修改命令,ifcfg-xxx 后面的xxx就是上面的网卡信息。修改文件,把ONBOOT=no,改为ONBOOT=yes。进入系统,修改网卡信息。然后就可以正常的联网了。
2023-06-30 09:39:59
584
原创 【Java】文本数据的Gzip压缩
在Java中,可以使用Gzip压缩算法对数据进行压缩和解压缩。Gzip算法是一种常见的无损压缩算法,可以将数据压缩为较小的字节数,从而节省网络带宽和存储空间等资源。
2023-05-31 11:56:56
1028
1
原创 Redis性能瓶颈:如何优化大key问题?
Redis大key问题是指在Redis中出现了一个或多个非常大的key,这些key的大小超过了Redis所能处理的最大值,从而导致Redis性能下降甚至宕机的现象。通常情况下,Redis的key大小应该尽量保持在较小的范围内,因为Redis是一个基于内存的数据结构存储系统,大key会占用大量内存资源,导致Redis的性能受到严重影响。多大的数据量才算是大key,具体取决于Redis服务器的内存大小、可用内存空间、系统负载等因素。
2023-05-24 10:18:57
460
原创 【Java】Mybatis Plus LambdaQueryWrapper梳理
为了更方便的实现动态 SQL,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了 SQL 注入的风险。LambdaQueryWrapper 实现了的全部功能,并提供了基于Lambda表达式的查询方式,使得查询语法更加优雅。使用 LambdaQueryWrapper,可以方便的实现各种查询条件的拼接,如whereandorinlikebetween等条件。
2023-03-17 09:52:31
2363
原创 【MySQL】substring_index 函数详解
截取字符串第个分隔符之前的字符串。如果为正,则从左边开始截取。如果为负,则从右边开始截取。此函数为MaxCompute 2.0扩展函数。返回STRING类型。如果任一输入参数值为NULL,返回NULL。假设有三个 IP:127.0.0.1、192.128.0.15、255.255.255.255,要分别取每一个号段的值并返回。可以说是一个面试题,解法有多种,那么如果用要如何编写呢?
2023-03-14 09:30:03
903
原创 【Java】@EnableAsync@Async使用总结
在使用多线程的时候,往往需要继承Thread类,或者,如果要使用到线程池,还需要来创建Executors,在Spring中已经做了很好的支持。只要要就可以使用多线程。使用@Async就可以定义一个线程任务。通过Spring提供的就可以使用线程池。默认情况下,Spring将搜索相关的线程池定义:要么在上下文中搜索唯一的,要么搜索名为“”的。如果两者都无法解析,则将使用来处理异步方法调用。
2023-03-13 12:49:01
665
1
原创 【Java】Spring Boot整合WebSocket
WebSocket是一种协议,用于实现客户端和服务器之间的双向通信。它可以在单个TCP连接上提供全双工通信,避免了HTTP协议中的请求-响应模式,从而实现更高效的数据交换。WebSocket协议最初由HTML5规范提出,现在已成为一种通用的网络协议,被广泛用于Web应用程序中。WebSocket协议在Web应用程序中广泛使用,例如实现实时通信、在线游戏、即时消息等功能。
2023-03-05 17:48:09
1754
4
原创 【Docker】Hyper-V VirtualBox冲突
Windows 操作系统中的 Hyper-V 技术与其他虚拟化技术(如 VirtualBox、VMware Workstation)有冲突,无法同时运行。这是由于这些虚拟化技术需要使用 CPU 的虚拟化扩展功能,而 Hyper-V 技术也需要使用相同的扩展功能。在 Windows 10 中,如果启用了 Hyper-V,那么其他虚拟化技术就不能使用 CPU 的虚拟化扩展功能。
2023-03-02 13:19:07
959
原创 【Java】Spring Boot 2 集成 Nacos
采用自定义的命名空间进行测试,新建命名空间。这里我们已经创建完了,就截一张编辑图片.,nacos-discovery版本。,nacos-config 版本。本次Springboot版本。测试可以实现动态的配置变更.测试可以实现动态的配置变更.
2023-02-26 11:00:38
831
原创 【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题
通过 debug 断点可以看到,这里拿到虽然是 List,但是里面的对象还是一个 JSONObject,并不是我们需要的 DTO 类,所有导致了后面的报错。查到问题根源,只要把这里的对象转化为我们的 DTO 类就行了,就可以避免报错。
2023-02-24 09:33:43
3600
原创 【设计模式】单例模式
单例模式(Singleton Pattern):确保一个类有且只有一个实例,并提供一个全局访问点。在开发中,很多时候有一些对象其实我们缓存(cache)默认设置日志对象等等,这个时候把它设计为单例模式是最好的选择。Java中单例模式是一种广泛使用的设计模式,单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间(比如spring管理的无状态bean);还由于操作多个实例导致的逻辑错误。
2023-01-20 10:42:18
1568
1
原创 【Java】阻塞队列
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这2个附加的操作支持阻塞的插入和移除方法。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。
2023-01-09 10:51:01
375
原创 【Kafka】八股文梳理
可以通过实现 org.apache.kafka.clients.consumer.internals.PartitionAssignor 接口来实现。
2023-01-08 21:48:36
4720
4
原创 【MySQL】为什么使用B+树做索引
本篇文从二叉查找树,详细说明了为什么MySQL用B+树作为数据的索引,以及在innodb中数据库如何通过B+树索引来存储数据以及查找数据。一定要记住这句话:数据即索引,索引即数据。
2023-01-08 21:47:00
826
2
原创 【Java】生产者消费者模型
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。
2023-01-08 20:56:39
420
原创 【Java】包装类型与引用类型的使用场景
Java的基本数据类型总共有种,包括3类:,,,其中数值型:字符型:布尔型:又有种包装类型:从上面可以看到除了 char 和i nt 其它的包装类型名称和对应的基本类型一样只是首字母大写了。另外假设我们要定义一个变量表示分数,如果用基本类型表示的话:int score;默认值为零,如果想表示分数为空也就是没有参加考试就没法表现了因为值类型是无法赋空值的,如果使用包装类型Integer score,就可以表示这种情况,因为Integer的默认值为空。假设有这样一个场景,接收到一个String型的数据想把它
2023-01-07 21:17:27
899
原创 【Kafka】Java实现数据的生产和消费
Kafka 是由Linkedin公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的。
2023-01-05 20:40:17
2502
原创 【Docker】搭建Zookeeper集群
默认端口是8080。ZOO_MY_ID 和 ZOO_SERVERS 是搭建 Zookeeper 集群需要设置的两个环境变量, 其中 ZOO_MY_ID 表示 Zookeeper 服务的 id, 它是1-255 之间的整数, 必须在集群中唯一。默认是 no,表示不重启。上述配置将以副本模式启动 Zookeeper 3.5.8,同时会告诉 Docker 运行三个 Zookeeper 容器:zoo1、zoo2、zoo3,并分别将本地的 2181, 2182, 2183 端口绑定到对应的容器的 2181 端口上。
2023-01-05 14:11:27
1273
原创 【Java】原子类
保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多线程的数据一致性。
2023-01-04 15:16:03
263
原创 【Java】JMM梳理
在开发时会经常遇到这样的场景,开发完成的代码在自己的运行环境上表现良好,但是当把它放在其它硬件平台上时,就会出现各种各样的错误,这是因为在不同的硬件生产商和不同的操作系统下,,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。为了解决这个问题,Java 内存模型(JMM)的概念就被提出来了,它的出现,让一套代码在不同平台下能到达相同的访问结果,,使得 Java 程序能够。
2023-01-04 12:59:43
226
原创 【Java】线程池梳理
线程池:本质上是一种对象池,用于管理线程资源。在任务执行前,需要从线程池中拿出线程来执行。在任务执行完成之后,需要把线程放回线程池。通过线程的这种反复利用机制,可以有效地避免直接创建线程所带来的坏处。优点:1、降低资源的消耗。线程本身是一种资源,创建和销毁线程会有CPU开销;创建的线程也会占用一定的内存;2、提高任务执行的响应速度。任务执行时,可以不必等到线程创建完之后再执行;3、提高线程的可管理性。线程不能无限制地创建,需要进行统一的分配、调优和监控。
2023-01-02 12:55:45
689
原创 【Java】PriorityQueue梳理
PriorityQueue是优先队列的意思。优先队列的作用是能保证每次取出的元素都是队列中权值最小的。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器。PriorityQueue实现了Queue接口,最大的特点是存取具有优先级,就是根据元素的顺序来决定;PriorityQueue是一个无界的容器;PriorityQueue底层是基于堆实现的;不允许放入null元素;PriorityQueue不是线程安全的;
2023-01-01 17:44:35
565
原创 【C++】初级面试整理
宏定义没有类型检查和安全检查,所以会导致边际效应,出现不可预知的错误;enum在编译阶段进行类型检查,但是只能进行整型的定义;宏定义仅仅是替换和展开,并不进行内存的分配;enum常量存储在内存数据段的静态存储区;define是在预处理阶段对所定义的常量进行替换展开;enum是程序运行时起作用;枚举常量具有类型,但宏没有类型;动态分配内存所开辟的空间,在使用完毕后未释放,导致一直占据该内存,即为内存泄漏。谁开辟谁释放;使用智能指针;指针指向新地址时参考规则;
2022-12-29 17:08:03
434
1
原创 【LeetCode】2099. 找到和最大的长度为 K 的子序列
给你一个整数数组 nums 和一个整数 k。你需要找到 nums 中长度为 k 的 子序列 ,且这个子序列的 和最大。请你返回 任意 一个长度为 k 的整数子序列。子序列 定义为从一个数组里删除一些元素后,不改变剩下元素的顺序得到的数组。
2022-12-24 22:37:47
307
原创 【Redis】简单梳理
官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。1、这里一直在强调的单线程,只是在处理网络请求的时候只有一个线程来处理,一个正式的Redis Server运行的时候肯定是不止一个线程的,这里需要大家明确的注意一下!例如Redis进行持久化的时候会以子进程或者子线程的方式执行(具体是子线程还是子进程待读者深入研究)
2022-12-24 19:55:19
77
原创 【LeetCode】119. 杨辉三角 II
给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
2022-12-21 16:39:27
108
原创 【LeetCode】118. 杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
2022-12-21 15:44:52
139
1
原创 【C++】unordered_map梳理
unordered_map 容器,直译过来就是"无序 map 容器"的意思。所谓“无序”,指的是 unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有一点不同,即 map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。头文件。
2022-12-17 17:12:21
412
原创 【LeetCode】645. 错误的集合
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
2022-12-16 13:41:37
63
计算机-职业规划方案
2020-12-05
JavaSE期末复习知识点
2020-08-03
网络规划师-复习资料
2020-08-02
cmder_mini.zip
2020-08-02
Postman-win64-7.0.5
2019-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人