- 博客(112)
- 收藏
- 关注

原创 Java基础编程500题
本专栏整理了《Java基础编程题500题》,涵盖的知识点包括顺序结构、分支结构、循环结构、数组、方法、字符串、面向对象、集合、正则表达式、Stream API、反射、多线程等知识点。本专栏非常适合Java初学者。
2024-07-19 00:12:52
3708
3
原创 JDK扩展机制——SPI
SPI指的是服务提供者接口(Service Provider Interface),是JDK内置的一种动态扩展机制,它是面向接口实现者的。Java中可以定义一种标准接口,让第三方去实现这个接口。然后再把第三方的SPI实现类,根据配置信息,动态加载进来。
2025-03-11 22:39:50
336
原创 Java网络编程
(2)客户端创建一个Socket对象,指定服务器的IP和端口。连接建立后,从Socket中获取输入流和输出流,然后发送数据到服务器,并读取服务器的响应。(1)服务器首先要指定监听哪个端口,然后把端口参数传入到ServerSocket的构造方法,然后通过。连接建立后,从Socket中获取输入流和输出流,循环读取客户端数据,并处理并回复。Java中进行网络编程,需要编写两个类,一个是服务器类,一个是客户端类。
2025-03-11 21:52:14
183
原创 AQS及派生类
AQS名字为一个抽象队列同步器,是一个抽象类。它提供了一个框架,都是基于AQS实现的。首先,AQS中提供了一个由volatile修饰的int类型的共享资源,就是state变量。在ReentrantLock的实现类中,state用来表示锁的占有情况,包括可重入计数,当state的值为0的时候,标识该锁不被任何线程所占有。其次,AQS还要维护一个FIFO队列,是一个双向链表,用来存放等待的线程。
2025-03-10 15:01:52
838
原创 从0开始在linux服务器上部署SpringBoot和Vue
Hospital-1.0-SNAPSHOT.jar上传到/root/hosptal/hospital-backend/例如申请的IP为8.146.208.150(已失效,仅为演示),服务器是ubuntu的linux服务器。然后Hospital-1.0-SNAPSHOT-encrypted.jar移入服务器。移动到/root/hosptal/hospital-nginx/html/目录。这些都是不要紧的,属于vue的动态代理,但是打包后的dist是静态项目。密码是xxxx,用户是root。
2024-12-26 15:04:58
1449
1
原创 TCP为什么需要三次握手?两次握手或四次握手可以吗?
旧的SYN报文引起的第二次握手到达客户端,客户端会比较确认应答号字段是否是新的SYN报文的序列号+1,如果是旧的SYN报文发起的,那么会给服务器发送RST报文中止连接。四次握手其实也能够可靠的同步双方的初始化序号,可以把ACK和SYN报文合并在一起进行优化,所以就成了三次握手,这样减少了一次通信。因此,通过三次握手能确认客户端和服务器的收发能力,防止历史连接的建立,能减少不必要的资源开销,能帮助双方同步初始化序列号。可以确认客户端和服务端的收发能力是正常的,但是服务端无法确认客户端的接收能力是正常的;
2024-11-24 15:14:22
728
原创 TCP三次握手的过程是怎样的?
客户端收到服务端的SYN和ACK报文后,还要向服务端回应最后一个应答报文,首先该应答报文TCP首部 ACK 标志位置为 1 ,其次在32位确认应答号字段填入server_isn+1,最后把报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于 ESTABLISHED 状态。服务端收到客户端的应答报文后,也进入 ESTABLISHED 状态。客户端会随机初始化序号(client_isn),将此序号填入TCP首部的32位序号字段中,同时把 SYN 标志位置为 1,表示希望建立连接。
2024-11-24 15:03:21
309
原创 基于Python和OSS的大文件上传助手
现在遇到微信无法发送大文件的难题已经得到解决,无需再依赖微信、QQ或是云盘来分享大型文件。通过OSS服务器进行下载,下载速度将取决于你的网络带宽,通常情况下,从服务器下载文件的速度会非常快。3️⃣ IDE:Pycharm或vscode。1️⃣ 操作系统:Windows 7以上。注册阿里云OSS,创建你的bucket。4️⃣ 依赖:最新版的PyQt。申请一个AccessKey。
2024-11-24 01:19:16
809
原创 HTTP有哪些风险?是怎么解决的?
将证书发送给客户端后,客户端内置了一些可信任的认证机构的公钥,然后使用认证机构的公钥对证书进行解密,若验证通过才可以拿到服务端的公钥。证书的申请需要服务方主动去认证机构注册才能生效,而黑客伪造的证书通常没有被认证机构认证,因此解决了公钥被冒充的问题。假如有个黑客拦截了服务端向客户端发送的公钥,并用黑客的公钥向客户端发送消息,而后客户端发送了用黑客公钥加密的消息,黑客就可以用自己的私钥解密这个信息,从而导致了数据的窃听。加密,得到消息的签名。公钥加密的消息可以用私钥解密,私钥加密的消息可以用公钥解密。
2024-11-23 14:11:53
791
原创 一条sql语句是怎么执行的?
随后将更新的记录写到Redo日志中,Redo日志会写到Redo Log Buffer,此时Redo日志处于prepare状态,事务提交之前会将Redo Log Buffer的Redo日志刷盘到Redo Log File,随后告诉执行器事务“可以提交”,存储引擎会根据操作写Bin Log到磁盘。首先客户端与MySQL连接器进行连接,然后分析器经过词法分析和语法分析,然后到达优化器,优化器生成执行计划,选择索引,这里选择主键索引id,然后就到达了执行器,执行器调用存储引擎,存储引擎返回结果。
2024-11-04 00:15:51
352
原创 设计模式篇
在Spring框架中,适配器模式的一个典型应用是Spring AOP,其中AdvisorAdapter接口及其实现类就是适配器模式的体现,它们将不同类型的Advice(通知)适配成统一的拦截器调用链,这样无论使用哪种Advice,都可以通过统一的拦截器机制来执行。不过,观察者模式的缺点在于,如果观察者和被观察者的关系较为复杂,系统可能会变得难以维护。在这种模式中,被观察者维护一组观察者,当被观察者的状态发生变化时,它会自动通知所有注册的观察者对象,这样观察者可以及时更新自己的状态或执行相应的操作。
2024-10-25 17:25:51
1212
原创 Java基础篇
String类被设计为final的主要原因是保证字符串的不可变性,这样做的目的是为了确保字符串常量池的正常工作以及提升性能。不可变字符串可以缓存其hash值,确保在字符串常量池中共享时不被意外修改,这对于字符串比较操作尤其重要。此外,不可变字符串在多线程环境下是安全的,因为它不会因为一个线程的操作而影响其他线程。另一个原因是防止子类化可能带来的问题。如果String类可以被继承,子类可能会破坏字符串的不可变性,这会导致安全性问题和代码的不可预测行为。
2024-10-25 17:11:17
1390
原创 设计模式:类与类之间关系的表示方式(聚合,组合,依赖,继承,实现)
聚合是一种较弱的“拥有”关系,表示整体与部分的关系,但部分可以独立于整体存在。例如,部门和员工之间的关系,一个部门可以包含多个员工,但员工可以离开这个部门。
2024-10-19 00:36:52
565
原创 MySQL篇
MySQL数据库的索引原理是基于数据结构中的B+树实现的。索引能够提高查询效率,其核心思想是通过快速定位来减少磁盘I/O次数。当执行查询操作时,MySQL会使用索引来快速找到数据行,而不是遍历整个数据表。B+树结构使得索引在查找、插入和删除操作中都能保持较高的效率,因为它的中间节点不存储数据,只有叶子节点才存储数据,并且叶子节点之间是通过指针连接的,便于范围查询。(1)B树索引是一种自平衡的树结构,它允许搜索、顺序访问和插入/删除操作,但相比于B+树,它的磁盘I/O操作较多。
2024-10-16 12:00:17
1079
原创 Java虚拟机篇
(1)JVM指的是Java虚拟机,本质上是一个运行在计算机上的程序,它的职责是运行Java字节码文件,作用是为了支持跨平台特性。(2)JVM的功能有三项:第一是解释执行字节码指令(解释运行);第二是管理内存中对象的分配,完成自动的垃圾回收(内存管理);第三是优化热点代码提升执行效率(即时编译)。(3)JVM组成分为类加载子系统、运行时数据区、执行引擎、本地接口这四部分。JVM是运行所有Java应用程序的核心引擎,整体结构主要包括类加载器、运行时数据区、执行引擎、本地库接口和本地方法库。(1)类加载器。
2024-10-16 11:28:21
882
原创 基于SpringBoot框架和Flask的图片差异检测与展示系统
如上图所示,左侧展示的是检测结果(result),而右侧展示的是模板图片(template)。在检测结果中,sample图片与template图片之间的不同之处已经被红色圆圈精确标注出来,从而清晰地指出了两者之间的差异。数据库需记录以下信息:id、用户id、sample和template图片的URL、result图片的URL以及图片上传时间。将用户上传的图片和Python生成的检测结果保存到阿里云服务器,并返回URL给前端展示。用户上传图片并按下检测按钮后,系统显示正在检测提示,提高用户体验。
2024-09-08 13:12:23
1106
原创 Redis基本类型常用命令练习
目录一、String类型1. 使用Redis的String命令,如何设置一个键为"username",值为"Tom"的键值对?2. 如何使用Redis的String命令获取键为"username"的值?3. 使用Redis的String命令,如何设置一个键为"age",值为23的键值对,然后让age+1。4. 如何使用Redis的String命令同时设置多个键值对,例如:“key1"的值为"value1”,“key2"的值为"value2”?5. 使用Redis的String命令,如何获取键为"userna
2024-09-04 00:45:32
1528
SpringBoot的登录校验demo
2024-07-31
计算机专业保研/考研面试题(完整版)
2024-07-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人