- 博客(125)
- 收藏
- 关注
原创 【JavaEE】-- 网络编程套接字
网络编程是指网络上的主机通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,只需要满足进程不同就行,即便是在同一个主机,只要是不同进程基于网络来传输数据也属于网络编程。操作系统为用用提供了一组实现传输协议的接口–Socket API。JDK为系统API进行了封装,Java程序员使用JDK提供的API。ServerSocket是创建TCP服务端Socket的API.主要用于服务器端,创建一个TCP服务。方法签名方法说明创建⼀个服务端流套接字Socket,并绑定到指定端⼝方法签名。
2025-11-24 08:43:30
653
原创 【JavaEE】-- Spring Web MVC入门
该注解是用来注册接口的的。路由映射:当用户访问一个URL时,将用户的请求对应到程序中的某个类的某个方法的过程。
2025-11-17 08:32:21
518
原创 【JavaEE】-- IoC & DI
Spring MVC 和 Spring Boot 都属于Spring ,Spring MVC是基于Spring的一个MVC框架,而Spring Boot 是基于Spring 的一套快速开发整合包。这三者专注的领域不同,解决的问题也不一样。总的来说,Spring就像一个大家族,有众多衍生产品,但他们的基础都是Spring。@Bean@Bean定义多个对象的时候我们就不能通过类型来获取对象了,需要使用Bean的名称来获取。IoC: 控制反转。也就是说Spring是一个“控制反转”的容器。
2025-11-13 19:56:54
948
1
原创 为什么封装第三方组件
有可能多个第三方的工具提供相似的功能,但是它的API和用法都是各不相同的,这个时候,我们对其封装,为我们当前项目提供一个统一的接口,这对于我们后续业务代码的开发是大有益处的,我们无需关心底层的具体实现的差异,直接调用我们封装的统一service.项目中使用第三方组件实现一些功能时,有时直接就能满足我们项目中的功能需求,但是有时我们需要使用第三方组件通过一个比较复杂的过程才能打到我们的需要,这个时候我们可以把这个复杂的过程封装成一个方法的,在项目的使用中将会更加简便。代码可读性与可维护性。
2025-11-13 12:57:37
198
原创 【JavaEE进阶】-- 加密算法
在数据库中通常存放一些用户的隐私信息,这些隐私信息通常不可以将其明文存放:1. 代码角度:代码bug漏洞可能会导致数据泄漏。2. 管理角度:管理员有权限查看数据表的数据,有可能会直接泄漏表数据。
2025-11-11 21:39:40
369
原创 【Spring Cloud 微服务】-- 服务拆分原则
以上面的电商系统为例,每一个微服务应该有自己的存储,配置,在进行开发,构建,部署,运行和测试时,并不需要过多关注其他微服务的状态和数据。在微服务架构中,一个微服务也应该只负责一个功能或业务领域,每个服务应该有清晰的定义和边界,只关注自己的特定业务领域。服务自治是指每个微服务都应该具备高度自治的能力,即每个服务要能做到独立开发,独立测试,独立构建,独立部署,独立运行.如果一些场景确实无法避免循环依赖或者双向依赖,可以考虑使用消息队列等其他方式实现。微服务之间需要做到单向依赖,严禁循环依赖,双向依赖。
2025-11-07 14:09:02
232
原创 【Spring Cloud微服务】-- DependencyManagement 和 Dependencies
如果子项目中没有对依赖指定版本,会从父项目中读取版本;如果子项目中指定了版本,就会使用子项目中指定的版本。只是对依赖进了声明,并没有实现jar包的引入,如果子项目需要用到相关依赖,需要进行显式声明。将所依赖的jar直接加到项目中,子项目也会继承该依赖。父工程的打包方式应该是pom,不是jar。
2025-11-07 12:29:50
262
原创 【JavaEE】-- Cookie &&Session
HTTP协议自身是属于“无状态”协议。无状态:默认情况下HTTP协议的客户端与服务器之间的这次通信,和下次通信之间没有直接关系。但是在实际开发中,我们很多时候是需要知道请求之间的关联关系的,比如:保存登陆状态。上图中的“令牌”,通常就存储在Cookie字段中。
2025-11-04 21:04:19
566
原创 【JavaEE】-- B/S && C/S 架构
1. 必须要安装客户端程序。不同的应用需要安装不同的客户端程序。2. 大部分业务都可以在客户端完成,包括客户端可以直接操作数据库等服务。充分利用本地的计算机资源。3. 由于客户端承担了更多的业务,所以其响应速度快。
2025-11-04 16:38:34
107
原创 【Redis】-- 分布式锁
在一个分布式系统中,也会涉及到多个节点访问统一公共资源的情况。此时就需要通过锁来做互斥控制,避免出现类似于“线程安全”的问题。而Java的synchronized或者C++的std::mutex,这样的锁都是只能在当前进程中生效,在分布式锁的这种多个进程多个主机之间就很难产生制约,分布式系统中多个进程之间的执行顺序也是不确定的。此时就需要分布式锁。
2025-09-17 17:45:46
1000
1
原创 【Redis】-- 缓存
缓存是一个相对的概念,访问速度快的设备可以作为访问速度慢的设备的缓存。CPU寄存器 > 内存 > 硬盘 > 网络。缓存速度虽然快,但是空间小,缓存之所以有意义,是由于二八定律(20%的数据能够应对80%的请求)。
2025-09-17 16:07:44
790
原创 【Redis】--集群
节点之间通过心跳包通信,心跳包中包含了该节点持有哪些slots.这个是使⽤位图这样的数据结构表示的. 表示 16384 (16k) 个 slots, 需要的位图大小是 2KB. 如果给定的 slots 数更多了, 比如 65536 个了, 此时就需要消耗更多的空间, 8 KB 位图表示了. 8 KB, 对于内存来说不算什么, 但是在频繁的网络心跳包中, 还是⼀个不小的开销的.
2025-09-16 19:49:44
901
原创 【Redis】-- 哨兵
再控制其他节点,执行slave of,让这些其他节点,作为新的主节点的从节点。多个哨兵进行投票,一个哨兵节点一票,多个Redis都认为这个Redis服务节点挂了(达到了法定票数)就认为这个Redis服务节点挂了。哨兵节点通过心跳包,判断Redis服务器是否正在正常工作,如果心跳包没有如期而至,就认为该Redis节点主观下线了。哨兵节点会自动的通知客户端程序,告知新的主节点是谁,并且后续客户端再进行写操作,就会针对新的主节点来进行操作。哨兵节点不负责存储数据,只是对其他的redis服务节点起到监控的作用。
2025-09-16 12:44:13
322
原创 【Redis】-- 主从复制
主节点将从生成RDB到接收完成期间主节点执行的写命令,写入到复制缓冲区中,等从节点保存完RDB文件之后,主节点再将缓冲区中的数据不发给从节点,不发的文件仍按以rdb的二进制格式追加写入到收到的rdb文件中,保持主从一致性。主节点可以进行读操作和写操作。本来在主节点上保存一堆数据,引入从节点之后,就是要把主节点上的数据复制到从节点上,后续如果主节点的数据有修改,也会同步到从节点上。主节点只需要同步部分从节点,剩下的节点交给从节点慢慢的去向从节点的从节点进行同步,这样主节点就不需要那么高的网络带宽了。
2025-09-15 20:16:51
1128
原创 【Redis】-- 事务
Redis的事务是否保证了原子性,这件事是存在争议的。原子性原本的含义:把多个操作打包在一起,要么 全部执行,要么全都不执行。Redis是做到了上述的原子性的含义的,但是Redis事务中的若干个操作,如果存在有操作失败,不会有回滚操作,错就错了。
2025-09-14 10:09:07
639
原创 【Redis】-- 持久化
所以子进程中的数据状态时父进程fork之间的数据状态,那fork之后父进程依旧在处理请求,这期间对内存的修改,子进程是不知道的。子进程并不需要读取 硬盘上哪个庞大的旧的AOF文件,而是遍历当前内存数据库中的所有数据,为每个键值对生成一条最精简的命令,并将其写入一个新的临时的AOF文件。在两次生成快照的中间,redis接收接收到了大量的key变化的请求,生成下一次快照之前,redis服务器挂了,那么中间这些key的变化就全丢了。写硬盘的时候,写入硬盘的数据的多少,对性能没有很大的影响。
2025-09-13 16:31:32
664
原创 【JavaEE初阶】-- JVM
当我们创建一个类时,先从应用程序加载器开始向上转发,一直转发到启动类加载器。类启动加载器在自己的路径下找,看有没有要创建的这个类,有则加载,没有就继续向下转发到扩展加载器。扩展加载器在自己的路径下找,看有没有要创建的这个类,有则加载,没有就继续向下转发到应用程序加载器。应用程序加载器在自己的路径中找到类并加载。
2025-09-12 20:54:39
1125
原创 【Spring Cloud】-- Nacos
如果设置了权重时候,发现该权重配置并没有生效,原因时我们当前使用的应用框架(Spring Cloud LoadBalancer)有自身的负载均衡配置方法,并没有使用nacos的权重属性进行负载均衡。由于成本和跨区访问是通过网络进行传输的,会出现延迟的现象,所以当微服务进行访问时,是尽量访问同机房的实例的,如果同机房的实例不可用时,才会去访问其他机房的实例。环境隔离就是这几个环境之间是不能相互通信的,Nacos提供了namespace来实现环境的隔离,不同的namespace的服务之间是不可见的。
2025-08-07 00:27:23
1308
原创 【Spring Cloud】-- 注册中心
服务提供者会在启动时向注册中心注册服务,并且会定时向注册中心发送心跳汇报存活状态。服务消费者会从注册中心中获取服务提供者提供的地址,并通过获取的地址调用服务提供者的接口。服务发现就是给服务消费者提供一个可用的服务列表。
2025-08-05 23:56:52
357
原创 【Spring Cloud】-- RestTeplate实现远程调用
但是这种风格的接口,只能从接口上定义其资源,但是无法通过接口了解具体对资源进行了什么操作。定义bean可以使用五大注解或者@Bean的方式来定义,但是RestTemplate是第三方的类,五大注解只能修饰自己的类,所以我们使用@Bean来进行修饰。: 是Spring提供的,用来封装HTTP调用,并强制使用RESTful风格,它会处理HTTP连接和关闭,只需要使用者童工资源的地址和参数即可。:表现层资源状态转移(资源在网络中以某种表现形式进行状态转移),是一种软件架构风格,表现层:资源的表现形式。
2025-08-05 22:06:16
278
原创 Linux基本命令
对于目录,该命令列出该目录下的所有子目录与文件。:用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。:将文件重命名(第二个参数是文件)或 将其移至一个新的目录中(第二个参数是目录)。将当前工作目录改变到指定的目录下。:cp 源文件或目录 目标文件或目录。:mv 源文件或目录 目标文件或目录。:tail [参数] [文件]。:grep [参数] [文件]:ls[选项][目录或文件]:cat [选项] [文件]:用于查看系统上运行的进程。:查看系统上的网络状态。:查看目标文件的内容。
2025-08-05 00:17:38
253
原创 Redis基本介绍
如果在分布式系统中采用定义变量来存储数据的话是不能满足我们的需求的,定义的变量是只能在当前的服务器的进程的内部可以进行通信的。硬盘相当于对内存的数据备份了一下,如果redis重启了,就会在重启时加载硬盘中的备份数据,使Redis的内存恢复到重启前的状态。一个Redis能存储的数据是有限的,如果想存储更多的数据,就可以引入多个主机,部署多个Redis节点,每个Redis存储数据的一部分。Redis是在分布式系统中,才能发挥威力的,如果只是单机程序,直接通过变量存储数据的方式是比使用Redis更优的选择。
2025-06-23 20:53:55
749
原创 分布式系统
此时就可能会导致某个硬件资源不够用,无论是哪方面的资源不够用了,都可能会导致服务器处理请求的时间变长,甚至会处理出错,这极大的降低了用户的体验感。数据库服务器,就需要更大的硬盘空间,更快的数据访问速度,,就可以配置更大硬盘的服务器,甚至可以使用SSD硬盘。为了更方便代码的维护,就可以把一个复杂的服务器拆分成多个的,功能更单一,但是更小的服务器。通过增加应用服务器的方式,解决了处理更高请求量的问题,但是随着请求量的增加,对应的存储服务器要承担的请求量也会更多,此时就引入了读写分离,这种方式会比较麻烦。
2025-06-13 16:13:27
1084
原创 【JavaEE】-- HTTP
HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上的应用程序进程之间如何相互通信的规则和标准。简单来说,应用层协议就是应用程序用来”对话”的语言和约定。
2025-06-10 17:00:39
930
原创 【JavaEE初阶】-- 网络原理
我们在使用QQ时都是需要登录的,登陆的时候等于向QQ服务器发送了一个请求,然后QQ服务器给了有一个响应,此时QQ服务器就会记录登陆方的信息类似于key value的形式,比如:(key:QQ123456, value:IP:端口号)。发送方通过某种算法(CRC–对每个byte进行累加操作,最终得一个值)对载荷进行运算,得到一个值并保存起来,接收方在收到数据之后,取出载荷以相同的算法进行计算,如果得到的结果与校验和相同,就表示接收到的载荷与发送的载荷一致,中途没有被篡改,否则载荷就是无效的。
2025-05-28 16:06:38
1049
原创 【JavaEE】-- 文件操作和IO
文件是操作系统中的概念,Java为不同的操作系统做了封装,提供了一个File类,来让Java程序员操作文件。修饰符及返回值类型方法签名说明intread()一次读取一个字节的数据,返回-1代表已经完全读完了int最多读取b.length字节的数据到b中,返回实际读到的数量;-1代表已经读完了int最多读取len-off字节的数据到b中,放在从off开始,返回实际读到的数量;-1代表以及读完了voidclose()关闭字节流签名说明利用File构造文件输入流。
2025-05-27 16:31:24
945
原创 【MySQL】-- 事务
事务把一组SQL语句打包成为一个整体,在这组SQL的执行过程中,要么全部成功,要么全部失败。这组SQL语句可以是一条也可以是多条。来看一个转账的例子,如图:转账之前和转账之后张三和李四的总额都是2000-> );mysql> insert into bank_account(name, balance) values ('张三', 1000), ('李四', 1000);
2025-05-09 19:55:54
1311
原创 【MySQL】-- 索引(面试必问)
MySQL的索引是⼀种数据结构,它可以帮助数据库⾼效地查询、更新数据表中的数据。索引通过⼀定的规则排列数据表中的记录,使得对表的查询可以通过对索引的搜索来加快速度。不同的数据结构有自己的实现规则,不同的规则导致不同的数据结构的效率不同,最终时间复杂度和空间复杂度也不同。数据库最重要的功能是存储数据,在保证数据安全的基础上尽可能的提升效率。
2025-05-08 21:19:17
1771
原创 【MySQL】-- 视图
视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样使用视图进行查询、更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。
2025-05-08 09:31:40
1423
原创 【MySQL】-- 联合查询
在数据库设计时由于范式的要求,数据被拆分到多个表中,那么要查询一个条数据的完整信息,就要从多个表中获取数据,如下图所示:要获取学生的基本信息和班级信息就要从学生表和班级表中获取,这时就需要使用联合查询,这里的联合指的是多个表的组合。参与查询的所有表取笛卡尔积(全排列),结果集存放在临时表中。观察哪些记录是有效数据,根据两个表的关联关系过滤掉无效数据。通过指定列查询,精简查询结果通过给表起别名的方式来精简查询sql语句2. 内连接2.1 语法简写:规范写法:
2025-05-07 17:37:50
1209
原创 【MySQL】-- 数据库设计
数据库的每一列都是不可分割的原子数据项,而不是集合、数组、对象等非原子数据。在关系型数据库的设计中,满足第一范式是对关系模式的基本要求。不满足第一范式的数据库就不能被称为关系型数据库。在满足第一范式的基础上,不存在*非关键字段(可以理解为非主键字段)对任意候选键(可以理解为主键、唯一键用来标识数据行)的部分函数依赖。存在于表中定义了复合主键(主键中包含多个列)*的情况下。在满足第二范式的基础上,不存在非关键字段,对任一候选键的传递依赖。
2025-05-07 08:08:03
938
原创 【MySQL】-- 数据库约束
数据库约束是指对数据库表中的数据所施加的规则或条件,用于确保数据的准确性和可靠性。这些约束可以是基于数据类型、值范围、唯一性、非空等规则,以确保数据的正确性和相容性。数据库约束时关系型数据库的一个重要功能,主要的作用是保证数据的有效性,也可以理解为数据的正确性(数据本身是否正确,关联关系是否正确)。人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些校验。约束一般是在指定的列上创建的。
2025-05-06 15:29:24
1095
原创 【MySQL】-- 增删改查操作(2)
MySQL服务如果开启了二进制日志,每次的insert、update、delete操作都会记录在二进制日志里,如果需要恢复数据,可以读取日志中的记录,再进行反操作即可。每个字符都会按照ascii码表中对应的值,然后所有字符对应的ascii码值相加得到的就是结果中的值,也并不会考虑溢出的情况。分组后,如果查询列表中包含了没有在group by子句中的列,会提示错误,因为显示分组中的哪一行数据都不合适。表结构相同的表,把去重的记录写入到新表中,以后查询都从新表中查,这样真实的数据不丢失,同时又能保证查询效率。
2025-04-29 18:10:08
977
原创 【MySQL】-- 增删改查操作(1)
CURD是对数据库中的记录进⾏基本的增删改查操作:• Create (创建)• Retrieve (读取)• Update (更新)• Delete (删除)
2025-04-28 11:44:28
931
原创 【JavaEE】-- MyBatis操作数据库(1)
MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。持久层:指的就是持久化操作的层,通常指数据访问层(dao),用来操作数据库的。MyBatis中文网数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。每次执行SQL语句,要先创建一个新的连接对象,然后执行SQL语句,SQL语句执行完,再关闭连接对象释放资源,,这种重复的创建连接,销毁连接比较消耗资源。
2025-04-22 16:27:27
1261
原创 【SpringBoot】-- 日志
通过打印日志来发现和定位问题,或者根据日志日志来分析程序的运行过程。随着项目的复杂度提升,我们对日志的打印也有了更高的需求,不仅仅是定位排查问题。随着项目的复杂度提升,我们对日志的打印也有了更高的需求,而不仅仅是定位排查问题,比如需要记录一些用户的操作记录(一些审计公司会要求),也可能需要使用日志来记录用户的一些喜好,把日志持久化,后续进行数据分析等.但是System.out.print不能很好的满足我们的需求,我们就需要使用一些专门日志框架(专业的事情交给专业的人去做).
2025-04-16 13:03:45
990
原创 【测试】-- 测试分类
简言之,测试人员需要测试软件在不同语言和地区是否能正常工作。国际化测试需要关注软件的哪些特性:布局、时间、日期、数字、格式、货币、机器型号…
2025-04-13 01:07:58
1062
原创 【测试】-- 测试用例
正交试验设计(Orthogonalexperimentaldesign)是研究多因素多水平的一种设计方法,它是根据正交性,由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,通过对这部分试验结果的分析了解全面试验的情况,找出最优的水平组合。依据需求将输⼊(特殊情况下会考虑输出)划分为若⼲个等价类,从等价类中选出⼀个测试⽤例,如果这个测试⽤例测试通过,则认为所代表的等价类测试通过,这样就可以⽤较少的测试⽤例达到尽量多的功能覆盖,解决了不能穷举测试的问题。(是上⼀条原则的必然结果)
2025-04-12 21:09:20
1663
1
空空如也
在VS上运行代码时,出现这个,是什么意思,应该怎么解决?
2023-12-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅