- 博客(96)
- 资源 (3)
- 收藏
- 关注

原创 2024java开发学习路线
别问,问就是Java已死!这是在2023年疫情解封后,市场经济低迷的情况下,有人对Java开发领域的质疑。然而,正是在这样的背景下,小伟按照以下的学习路线成功地获得了十几K的校招offer(小伟普本哈,985的学霸们当然不屑啦)。从零基础入门到可以找到工作的程度,至少需要准备一年半!科班出身,已经学习过java、数据库等一些课程,根据个人情况,时间适当减少。如果你正处于大三,那么现在正是你迎接挑战、开启职业生涯的最佳时机!如果你已经大四,正面临着找工作的焦虑,我建议你选择别的学科或者直接参加培训班!
2024-01-15 15:50:23
1494

原创 SpringSecurity + JWT(前后端分离)
想必大四的小伙伴们陆陆续续开始写毕业设计了,对于网络安全框架SpringSecurity在网上的资源都是前后端不分离的,这里记录一下小伟的前后端分离版。
2022-09-30 10:09:09
5912
5

原创 Java中的volatile
volatile是Java提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile更轻量级,相比使用synchronized所带来的庞大开销,倘若能恰当的合理的使用volatile,自然是美事一桩。为了能比较清晰彻底的理解volatile,我们一步一步来分析。首先来看看如下代码上面这个例子,模拟在多线程环境里,t1线程对flag共享变量修改的值能否被t2可见,即是否输出 “-----flag被设置为
2022-06-28 00:31:25
25599
12

原创 后端掌握Vue知识
Vue框架想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走,其中前端是绕不开的一门必修课。1、简介概述Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用(SPA)提供驱动。1.1、前端分析Soc原
2021-11-01 20:36:23
4102
原创 如何选择合适的主键id?
在数据库设计中,选择合适的主键对于数据表的性能和数据完整性都非常重要。接下来,让我们探讨一下自增id、uuid和雪花算法,以便更好地理解哪种适合作为主键。
2024-11-30 09:23:13
877
原创 MySQL行格式
首先我们知道在MySQL中是数据读写的最小单元,默认是16KB。页内的记录会组成一个单链表,每条记录就是一行数据,决定了一行数据是如何进行物理存储的,进而影响查询和DML操作的性能。
2024-10-17 17:19:56
1055
原创 ElasticsearchRestTemplate DSL日志打印
SpringBoot打印ElasticsearchRestTemplateDML日志
2024-09-20 13:44:32
1103
2
原创 Arthas线上诊断神器-如何安装?
Arthas是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。那么我们该如何安装它呢?
2024-08-27 16:13:45
335
原创 AQS的同步队列和条件队列原理
AQS中的 同步队列 和 条件队列 是两种不同队列,同步队列主要用于实现锁机制(也就是锁的获取和释放),而条件队列用于实现条件变量,条件变量是并发编程中一种用于线程间通信的机制,它允许一个或多个线程在特定条件成立之前等待并释放相关的锁,直到其他线程改变了条件并显式的唤醒等待在该条件中的线程。比较典型的一个条件队列使用场景就是 ReentrantLock 的 Condition。
2024-08-10 16:26:48
938
2
原创 为什么不用浮点数表示金额?
在二进制中,1/2、1/4、1/8 都可以清晰地表示为小数,而 1/5 或 1/10 则是循环小数。因此,0.1 和 0.2(1/10 和 1/5)在以 10 为基数的系统中是清晰的小数,但在计算机使用的以 2 为基数的系统中则是循环小数。10 的素因数是 2 和 5。因此 1/2、1/4、1/5、1/8 和 1/10 都可以清晰地表示出来,因为分母都使用 10 的素因数。相比之下,1/3、1/6、1/7 和 1/9 都是循环小数,因为它们的分母使用素因数 3 或 7。这就是我们所熟知的浮点数。
2024-07-27 18:11:44
294
原创 IDEA新版本创建Spring项目只能勾选17和21却无法使用Java8的完美解决方案
我们知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。我们可以通过阿里云国服间接创建Spring项目,将。想创建一个springboot的项目,使用Spring Initializr创建项目时,发现版本只有17~21,无法选择Java8。
2024-04-28 20:53:01
790
原创 MySQL索引剖析【了解背后的数据结构】
MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。即索引是数据结构,可以简单的理解为“排好序的快速查找数据结构”,满足特定查找算法,这些数据结构以某种方式指向数据。索引的作用相当于图书的目录,可以根据目录中的页码快速查找到所需的内容。
2024-03-24 12:34:13
2020
2
原创 5分钟搞懂MySQL存储引擎
存储引擎就是存储数据、处理和保护数据等技术的实现方式。(在物理上如何表示记录,怎么从表中读取数据,以及怎么把数据写入具体的物理存储器上,都是存储引擎负责的事情)
2024-03-14 14:03:54
1230
原创 连接服务器的脚本
expect 是处理交互的一种脚本语言,spawn启动指定进程 -> expect获取指定关键字 -> send想指定进程发送指定指令 -> 执行完成后退出spawnexpectsendinteractsetputs。
2023-11-22 19:27:37
1192
原创 Cannot read JPEG2000 image: Java Advanced Imaging (JAI) Image I/O Tools are not installed解决
我们发现pdf中包含JPEG2000格式的图片时,图片将渲染不出来。原因是不能读取JPEG2000格式的图片,需要引入以下工具。通过查看日志发现以下报错。
2023-10-12 15:50:27
1490
1
原创 基于wechatpay-java实现微信支付JSAPI
相较于 v2 版本,v3 版本的接口文档在阅读上可能显得相对凌乱。它的组织结构可能不太清晰,难以快速理解整个流程。但是,一旦我们对基本流程有了大致了解,我们可以利用 wechatpay-java 来简化开发过程(一把梭哈)。
2023-10-06 21:44:54
4775
8
原创 手撸RPC【gw-rpc】
在之前的博文中,我们学习了Netty的基础知识,了解了其原理和组件。在本篇博文中,我们将结合实际案例,分享一个基于Netty的简化版RPC(远程过程调用)实现。通过这个案例,我们不仅可以学习Netty的使用和原理,还能够对RPC的设计有一个整体的学习。
2023-09-26 21:21:46
1345
原创 使用Java将PPT、PDF和html转换图片并上传OSS
最近小雨遇到了一个需求,需要在前端小程序中嵌入展示Office文件的功能。然而,前端使用开源组件进行在线预览会导致性能消耗较大的问题(转半天圈圈)。产品理想的效果是用户上传Office文件后,浏览起来与页面一样流畅。没错,作为服务端的老铁,可以提供更强大的计算资源和处理能力来支持前端小伙伴实现需求(We are a team🏠)!这种情况下,可以在服务端使用开源插件对文件进行预览切片,将文件的预览效果保持为一张一张的图片,用户预览时直接夹在图片即可。
2023-09-21 20:05:21
1675
1
原创 使用Netty进行协议开发:多协议支持与自定义协议的实现
在TCP/IP中,数据传输是通过流的方式进行的,这意味着数据被分割成一系列的数据包,并通过网络传输。这样的流式传输方式虽然高效,但没有明确的消息边界,因此在接收端需要一种机制来确定消息的开始和结束位置。协议的目的就是划定消息的边界,制定通信双方要共同遵守的通信规则。
2023-09-20 21:52:23
1564
原创 从源码角度解读xxl-job的工作流程
当涉及到理解和解读开源项目的源代码时,我们总是能够从中获得宝贵的知识和经验。本篇博客将带领大家深入探索xxl-job的源码,这是一个功能强大且广泛使用的分布式任务调度平台。通过深入研究xxl-job的源码,我们将揭开其内部的工作机制和设计原理。
2023-09-20 11:22:04
321
原创 快速学习Netty
Netty在Java网络应用框架中的地位就好比——Spring框架在JavaEE开发中的地位。哪些框架使用了Netty?Dubbo、gRPC、Spring5、Zookeeper、RocketMQ、ElasticSearch、Hadoop、Spark、Cassandra等,因为它们都有网络通信需求
2023-09-16 15:31:03
218
原创 探索Netty的EventLoop
EventLoopGroup,即“事件循环组”,是一组 EventLoop,channel 一般会调用 EventLoopGroup 的 `register` 方法来绑定其中一个 EventLoop,后续这个 channel 上的io事件都由此 EventLoop 来处理(保证了 io 事件处理时的线程安全)。EventLoopGroup继承 netty 自己的 EventExecutorGroup,实现了 `Iterable` 接口提供遍历 EventLoop 的能力,另有 `next()` 方法获取…
2023-09-07 20:10:30
376
原创 探索Netty的Channel
Netty 中的 Channel 可以看成网络编程中的 Socket,其提供了一系列 IO 操作的 API,比如 read、write、bind、connect 等,大大降低了直接使用 Socket 类的复杂性。同时也包含了 Netty 框架相关的一些功能,包括获取 Channel 的 EventLoop,获取缓冲区分配器 ByteBufAllocator 和 pipeline 等。
2023-09-06 15:36:56
260
原创 探索Netty的ByteBuf
ByteBuf 是 Netty 中的字节容器,它类似于 Java 中的 ByteBuffer,但是提供了更强大、更灵活的功能。ByteBuf 是一个可扩展的、可读写的字节容器,可以动态地分配和释放内存,支持零拷贝技术,同时具备高效的读写操作和内存管理能力。
2023-09-05 20:32:58
258
原创 探索Netty的Future&Promise
在异步处理时,经常用到这两个接口首先要说明 netty 中的 Future 与 jdk 中的 Future 同名,但是两个接口,netty 的 Future 继承自 jdk 的 Future,而 Promise 又对 netty Future 进行了扩展。
2023-09-05 15:35:43
593
原创 探索Netty的ChannelHandler
ChannelHandler 基于责任链模式实现,负责对IO事件进行拦截和处理, 也可以终止事件的传递。ChannelHandler 有两个重要的子接口:ChannelInboundHandler和ChannelOutboundHandler,分别拦截入站和出站的各种 I/O 事件。
2023-09-04 17:45:19
323
原创 探索Netty的ChannelPipeline
EventLoop可以说是 Netty 的调度中心,负责监听多种事件类型:I/O 事件、信号事件、定时事件等,然而实际的业务处理逻辑则是由 ChannelPipeline 中所定义的 ChannelHandler 完成的,ChannelPipeline 和 ChannelHandler应用开发的过程中打交道最多的组件,为用户提供了 I/O 事件的全部控制权。
2023-09-02 22:03:33
486
原创 快速掌握Java NIO
NIO,全拼是 non-blocking io,即 非阻塞IO。(网络上也有很多将NIO的N翻译成New,这是因为NIO是在Java 1.4版本中新增加的一种I/O模型。)与传统的I/O模型不同,NIO提供了一种基于缓冲区(Buffer)和通道(Channel)的I/O操作方式。NIO的主要优势在于它可以实现非阻塞式I/O操作,从而提高了系统的并发处理能力。在传统的I/O模型中,当一个线程在进行I/O操作时,其他线程会被阻塞,直到I/O操作完成。而在NIO模型中,线程可以继续执行其他的任务,而不必等待I
2023-08-25 18:05:25
794
原创 「实战教程」如何使用POI读取模板PPT填充数据并拼接至目标文件
在本篇博客中,我们将分享如何使用POI库读取模板PPT并填充数据,最终生成目标文件。我们参考了优快云上的其他博客,结合具体代码进行演示,展示使用POI库操作PPT文件的方法和技巧。在使用POI库读取模板PPT并填充数据的过程中,我们需要先导入POI的相关jar包,然后通过SlideShow类读取模板文件,使用Slide类对PPT中的幻灯片进行操作,例如获取文本框、图片等元素,并使用TextRun类对文本框进行文本替换样式调整。在数据填充完成后,我们可以通过SlideShow类将填充好的幻灯片拼接至目标文件
2023-04-12 16:12:07
5473
12
原创 企业微信回调接口验签
企业微信提供了回调接口,允许企业服务商和企业应用接收到企业微信的事件通知和用户操作通知。在接收到回调通知时,需要进行验签操作,以确保通知的安全性和有效性。企业微信回调接口验签是保证回调通知安全性和有效性的重要步骤。在实际开发中,需要根据具体业务需求,进行验签操作的扩展和优化,以确保企业微信API的安全使用。
2023-03-30 20:29:40
809
2
原创 Maven生命周期、mvn命令、Maven插件
我们开发一个项目的时候,通常有这些环节:创建项目、编写代码、清理已编译的代码、编译代码、执行单元测试、打包、集成测试、验证、部署、生成站点等,这些环节组成了项目的生命周期,这些过程也叫项目的构建过程。 maven将项目的生命周期抽象成了3套生命周期,每套生命周期又包含多个阶段,每套中具体包含哪些阶段是maven已经约定好的,但是每个阶段具体需要做什么,是用户可以自己指定的。
2023-03-30 17:53:28
569
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人