![](https://img-blog.csdnimg.cn/20210410150428864.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java技术栈
文章平均质量分 60
Java技术栈
后端码匠
道阻且長,行則將至
展开
-
【Java】DigestHttpClientUtil
DigestHttpClientUtil原创 2024-06-18 10:19:53 · 387 阅读 · 0 评论 -
【EasyExcel】多sheet、追加列
最近接到一个导出Excel的业务,需求就是多sheet。原本使用的 pig4cloud 架子,使用 @ResponseExcel注解方式组装返回数据即可,但是实现过程中发现并不是所想要的效果。组件地址:https://github.com/pig-mesh/excel-spring-boot-starter这样写能够实现多 sheet 导出,但是动态的移除列然后在追加列我尝试了并没有好的方案,有可能也是我没有找到,我找到的是下面面动态的修改列名称。多 sheet导出,只需要返List即可。原创 2024-03-31 21:28:33 · 1700 阅读 · 0 评论 -
【Java】线程池八股文一
作为 JUC 包下的门面担当,线程池是名副其实的 JUC 一哥,不了解线程池,那说明你对 JUC 包其他工具也了解的不咋样吧,对 JUC 没深入研究过,那就是没掌握到 Java 的精髓,给面试官这样一个印象,那结果可想而知了。可以这样说:计算机发展到现在,摩尔定律在现有工艺水平下已经遇到难易突破的物理瓶颈,通过多核 CPU 并行计算来提升服务器的性能已经成为主流,随之出现了多线程技术。原创 2023-09-12 13:35:12 · 273 阅读 · 0 评论 -
【Spring Boot】实现接口幂等性的 4 种方案
在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。幂等性是开发当中很常见也很重要的一个需求,尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。对于下单等存在唯一主键的,可以使用“唯一主键方案”的方式实现;转载 2023-07-04 09:03:07 · 503 阅读 · 1 评论 -
【MySQL】count()查询性能梳理
使用的数据库是MySQL8,使用的存储引擎是Innodb。通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。它没有性能问题。却存在性能差的问题。为什么会出现这种情况呢?原创 2023-07-03 11:26:49 · 1187 阅读 · 2 评论 -
【Redis】数据被删除,内存占用还这么大?
内存碎片会造成明明有内存空间空闲,可是却无法存储数据。举个例子,你跟漂亮小姐姐去电影院看电影,肯定想连在一块。假设现在有 8 个座位,已经卖出了 4 张票,还有 4 张可以买。可是好巧不巧,买票的人很奇葩,分别间隔一个座位买票。即使还有 4 个座位空闲,可是你却买不到两个座位连在一块的票,厚礼蟹!如果你发现明明 Redis 存储数据的内存占用远小于操作系统分配给 Redis 的内存,而又无法保存数据,那可能出现大量内存碎片了。原创 2023-07-03 11:12:05 · 199 阅读 · 0 评论 -
【Java】Spring Boot配置动态数据源
通过实现Spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可以实现数据源的动态切换。1.2 创建动态数据源配置类跟配置静态多数据源一样,需要手动配置下面的三个 Bean,只不过DynamicDataSource类的targetDataSources是空的。1.3 创建动态数据源服务类这是一个比较核心的工具类,提供了一些静态方法从而可以实现一些功能,包括:、、、。在 DynamicDataSource 类中,就是调用了 DynamicData原创 2023-06-30 09:50:51 · 2520 阅读 · 1 评论 -
【CentOS】VirtualBox yum 无法使用
执行修改命令,ifcfg-xxx 后面的xxx就是上面的网卡信息。修改文件,把ONBOOT=no,改为ONBOOT=yes。进入系统,修改网卡信息。然后就可以正常的联网了。原创 2023-06-30 09:39:59 · 742 阅读 · 0 评论 -
【Java】文本数据的Gzip压缩
在Java中,可以使用Gzip压缩算法对数据进行压缩和解压缩。Gzip算法是一种常见的无损压缩算法,可以将数据压缩为较小的字节数,从而节省网络带宽和存储空间等资源。原创 2023-05-31 11:56:56 · 2414 阅读 · 1 评论 -
【Android】NDK开发Crash分析
如上所示,通过addr2line工具,可以看到libndkpractice.so文件中地址000000000000f1f0对应的源码是什么了,它对应的是源码中app/src/main/cpp/native-lib.cpp:7处代码,查看上下文后,确定为空指针问题。等表示的都是函数调用栈中栈帧的编号,其中编号越小的栈帧表示着当前最近调用的函数信息,所以栈帧标号#00表示的就是当前正在执行并导致程序崩溃函数的信息。则表示的是当前执行指令是在哪个文件当中,后面的小括号则是注明对应的是哪个函数。原创 2022-11-21 18:09:57 · 4978 阅读 · 1 评论 -
【Android】NDK封装日志库
Created by 后端码匠 on 2022/11/30.原创 2022-11-30 16:45:26 · 782 阅读 · 0 评论 -
【Android】JNI静态与动态注册介绍
JNI(Java Native Interface),即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互.方式静态注册动态注册:需要提供Java中Native方法的方法签名和Native层中对应的实现函数。原创 2022-12-01 12:10:41 · 1816 阅读 · 0 评论 -
【LeetCode】字符串变形
请返回变形后的字符串。题目保证给定的字符串均由大小写字母和空格构成。原创 2023-01-31 17:39:49 · 206 阅读 · 0 评论 -
【Java】Mybatis Plus LambdaQueryWrapper梳理
为了更方便的实现动态 SQL,Mybatis Plus 在其基础上扩展了 LambdaQueryWrapper,LambdaQueryWrapper 提供了更加简便的查询语法,同时也避免了 SQL 注入的风险。LambdaQueryWrapper 实现了的全部功能,并提供了基于Lambda表达式的查询方式,使得查询语法更加优雅。使用 LambdaQueryWrapper,可以方便的实现各种查询条件的拼接,如whereandorinlikebetween等条件。原创 2023-03-17 09:52:31 · 6673 阅读 · 0 评论 -
【Java】@EnableAsync@Async使用总结
在使用多线程的时候,往往需要继承Thread类,或者,如果要使用到线程池,还需要来创建Executors,在Spring中已经做了很好的支持。只要要就可以使用多线程。使用@Async就可以定义一个线程任务。通过Spring提供的就可以使用线程池。默认情况下,Spring将搜索相关的线程池定义:要么在上下文中搜索唯一的,要么搜索名为“”的。如果两者都无法解析,则将使用来处理异步方法调用。原创 2023-03-13 12:49:01 · 1909 阅读 · 1 评论 -
【Java】Spring Boot整合WebSocket
WebSocket是一种协议,用于实现客户端和服务器之间的双向通信。它可以在单个TCP连接上提供全双工通信,避免了HTTP协议中的请求-响应模式,从而实现更高效的数据交换。WebSocket协议最初由HTML5规范提出,现在已成为一种通用的网络协议,被广泛用于Web应用程序中。WebSocket协议在Web应用程序中广泛使用,例如实现实时通信、在线游戏、即时消息等功能。原创 2023-03-05 17:48:09 · 3351 阅读 · 4 评论 -
【Java】Spring Boot 2 集成 Nacos
采用自定义的命名空间进行测试,新建命名空间。这里我们已经创建完了,就截一张编辑图片.,nacos-discovery版本。,nacos-config 版本。本次Springboot版本。测试可以实现动态的配置变更.测试可以实现动态的配置变更.原创 2023-02-26 11:00:38 · 1279 阅读 · 0 评论 -
【Java】“com.alibaba.fastjson.JSONObject cannot be cast to“报错问题
通过 debug 断点可以看到,这里拿到虽然是 List,但是里面的对象还是一个 JSONObject,并不是我们需要的 DTO 类,所有导致了后面的报错。查到问题根源,只要把这里的对象转化为我们的 DTO 类就行了,就可以避免报错。原创 2023-02-24 09:33:43 · 9869 阅读 · 0 评论 -
【设计模式】单例模式
单例模式(Singleton Pattern):确保一个类有且只有一个实例,并提供一个全局访问点。在开发中,很多时候有一些对象其实我们缓存(cache)默认设置日志对象等等,这个时候把它设计为单例模式是最好的选择。Java中单例模式是一种广泛使用的设计模式,单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间(比如spring管理的无状态bean);还由于操作多个实例导致的逻辑错误。原创 2023-01-20 10:42:18 · 1625 阅读 · 1 评论 -
【Java】阻塞队列
阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这2个附加的操作支持阻塞的插入和移除方法。阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里取元素的线程。阻塞队列就是生产者用来存放元素、消费者用来获取元素的容器。原创 2023-01-09 10:51:01 · 425 阅读 · 0 评论 -
【Kafka】八股文梳理
可以通过实现 org.apache.kafka.clients.consumer.internals.PartitionAssignor 接口来实现。原创 2023-01-08 21:48:36 · 4963 阅读 · 4 评论 -
【MySQL】为什么使用B+树做索引
本篇文从二叉查找树,详细说明了为什么MySQL用B+树作为数据的索引,以及在innodb中数据库如何通过B+树索引来存储数据以及查找数据。一定要记住这句话:数据即索引,索引即数据。原创 2023-01-08 21:47:00 · 909 阅读 · 2 评论 -
【Java】生产者消费者模型
生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞。原创 2023-01-08 20:56:39 · 511 阅读 · 0 评论 -
【Java】包装类型与引用类型的使用场景
Java的基本数据类型总共有种,包括3类:,,,其中数值型:字符型:布尔型:又有种包装类型:从上面可以看到除了 char 和i nt 其它的包装类型名称和对应的基本类型一样只是首字母大写了。另外假设我们要定义一个变量表示分数,如果用基本类型表示的话:int score;默认值为零,如果想表示分数为空也就是没有参加考试就没法表现了因为值类型是无法赋空值的,如果使用包装类型Integer score,就可以表示这种情况,因为Integer的默认值为空。假设有这样一个场景,接收到一个String型的数据想把它原创 2023-01-07 21:17:27 · 1162 阅读 · 0 评论 -
【Kafka】Java实现数据的生产和消费
Kafka 是由Linkedin公司开发的,它是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的。原创 2023-01-05 20:40:17 · 4870 阅读 · 0 评论 -
【Java】原子类
保证线程安全是 Java 并发编程必须要解决的重要问题。Java 从原子性、可见性、有序性这三大特性入手,确保多线程的数据一致性。原创 2023-01-04 15:16:03 · 465 阅读 · 0 评论 -
【Java】JMM梳理
在开发时会经常遇到这样的场景,开发完成的代码在自己的运行环境上表现良好,但是当把它放在其它硬件平台上时,就会出现各种各样的错误,这是因为在不同的硬件生产商和不同的操作系统下,,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。为了解决这个问题,Java 内存模型(JMM)的概念就被提出来了,它的出现,让一套代码在不同平台下能到达相同的访问结果,,使得 Java 程序能够。原创 2023-01-04 12:59:43 · 273 阅读 · 0 评论 -
【Java】线程池梳理
线程池:本质上是一种对象池,用于管理线程资源。在任务执行前,需要从线程池中拿出线程来执行。在任务执行完成之后,需要把线程放回线程池。通过线程的这种反复利用机制,可以有效地避免直接创建线程所带来的坏处。优点:1、降低资源的消耗。线程本身是一种资源,创建和销毁线程会有CPU开销;创建的线程也会占用一定的内存;2、提高任务执行的响应速度。任务执行时,可以不必等到线程创建完之后再执行;3、提高线程的可管理性。线程不能无限制地创建,需要进行统一的分配、调优和监控。原创 2023-01-02 12:55:45 · 1023 阅读 · 0 评论 -
【Java】PriorityQueue梳理
PriorityQueue是优先队列的意思。优先队列的作用是能保证每次取出的元素都是队列中权值最小的。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器。PriorityQueue实现了Queue接口,最大的特点是存取具有优先级,就是根据元素的顺序来决定;PriorityQueue是一个无界的容器;PriorityQueue底层是基于堆实现的;不允许放入null元素;PriorityQueue不是线程安全的;原创 2023-01-01 17:44:35 · 631 阅读 · 0 评论 -
【Java】多叉树的遍历
- 递归。- 广度优先,需要借助队列。- 深度优先,需要借助栈。原创 2022-12-20 14:08:40 · 1284 阅读 · 0 评论 -
【Java】finalize()方法的使用
finalize()方法是Object类提供的方法,在GC(垃圾回收器)准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。原创 2022-10-20 18:43:03 · 145 阅读 · 0 评论 -
【Java】MyBatis-Plus梳理
Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。原创 2020-10-19 23:17:15 · 936 阅读 · 1 评论 -
【Java】CopyOnWriteArrayList详解
【Java】CopyOnWriteArrayList详解原创 2022-07-24 22:02:45 · 588 阅读 · 0 评论 -
【Java】byte2String、string2Byte
byte2String、string2Byte原创 2022-07-05 11:22:11 · 745 阅读 · 0 评论 -
平滑加权轮询算法(Smooth Weight Round Robin)
平滑加权轮询算法原创 2022-06-30 07:58:14 · 481 阅读 · 0 评论 -
【Hadoop】用户订单分析
用户订单分析数据库数据pid card_pid product_pid(主要, 商品pid) quanity(主要, 数量)0c5c9749350e6dfca15848a3ce47f190 b7551a9d650ea9e00d2b9e088c2564c5 b843b1e84d307397821e5063176af551 1 1 25.00 2022-04-11 01:36:07.0 2022-04-11 01:36:07.00ddfa96998022bd88388fede0cb72a3原创 2022-05-03 00:17:40 · 1590 阅读 · 0 评论 -
【Java】MyBatis框架中的queryWrapper的or查询,联想到MySQL中and 和or的关系
于是,就违背了我们最初的SQL语句,自然查询出来的有可能不对,导致统计的结果不对,因为这样的SQL语句表明:查询出设备Id等于‘679135XXXXXXX1212’且状态等于1,或者所有未移除的设备的状态等于2。这是一个很细节的语法,一旦不注意,就陷入了mybatis的陷阱中。mybatis本身没有问题,本身是个优秀的框架。正如我们所知道的那样,MySQL中的。这样的SQL才是我们想要的查询语句。,因而,上面的SQL语句可以转化为。这种方式生成的SQL语句如下。但是生成出来的SQL语句是。原创 2021-07-27 07:22:10 · 3159 阅读 · 0 评论 -
【Java】Hbase之protobuf的使用
开发环境的配置见前几篇文章, 软件下载可自行百度,或者关注。解压 protobuf-2.5.0。进入protobuf-2.5.0。如有问题欢迎评论区讨论。原创 2021-05-17 17:24:12 · 945 阅读 · 0 评论 -
【Java】Nginx实现负载均衡(整合SpringBoot小demo)
要理解负载均衡,必须先搞清楚正向代理和反向代理。注:正向代理,代理的是用户。反向代理,代理的是服务器。当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。原创 2021-05-13 15:39:33 · 1022 阅读 · 10 评论 -
图解排序算法(四)之归并排序
图解排序算法(四)之归并排序基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列再来转载 2021-04-28 20:12:15 · 132 阅读 · 0 评论