自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蓝天it(让亿万孩子在蓝天下共享优质教育)

让亿万孩子在蓝天下共享优质教育

  • 博客(677)
  • 收藏
  • 关注

原创 五子棋对战项目大总结【6万字】

亮点模块关键技术点websocket并发编程处理匹配用户模块一、MyBatis后端操作数据库1. 数据库创建用户数据库用户id用户名密码天梯积分总场数获胜场数create database if not exists java_gobang;use java_gobang;drop table if exists user;create table user ( userId int primary key auto_increm

2024-08-29 08:30:51 1179

原创 个人博客系统项目大全【6万字】

一、数据库设计1. 设计表(用户7,文章9,评论5)-- 创建⽤户表create table userinfo( uid bigint auto_increment primary key comment '主键', loginname varchar(50) not null unique comment '登录⽤户 名', nickname varchar(50) default '' comment '昵称', `password` varchar(65) not null commen

2024-08-28 19:43:48 1080

原创 Java模拟RabbitMQ实现消息队列【17万字总结】(下)

⼗⼀. ⽹络通信协议设计1. 定义 Request / Response属性:1、类型 2、长度 3、正文/* * 表示一个网络通信中的请求对象. 按照自定义协议的格式来展开的 */public class Request { private int type; private int length; private byte[] payload; public int getType() { return type; }

2024-08-27 18:45:18 741

原创 Java模拟RabbitMQ实现消息队列【17万字总结】(上)

Mq所有代码笔记⼀. 消息队列背景知识曾经我们学习过 阻塞队列 (BlockingQueue) , 我们说, 阻塞队列最⼤的⽤途, 就是⽤来实现 ⽣产者消费者模型.⽣产者消费者模型, 存在诸多好处, 是后端开发的常⽤编程⽅式.解耦合削峰填⾕在实际的后端开发中, 尤其是分布式系统⾥, 跨主机之间使⽤⽣产者消费者模型, 也是⾮常普遍的需求.因此, 我们通常会把阻塞队列, 封装成⼀个独⽴的服务器程序, 并且赋予其更丰富的功能.这样的程序我们就称为 消息队列 (Message Queue, MQ

2024-08-27 18:44:44 869

原创 Semaphore【acquire()、release()】CountDownLatch【countDown()、await()】CyclicBarrier【await()】

Semaphore、CountDownLatch和CyclicBarrier都是Java中用于多线程编程的同步工具,用于控制多个线程之间的执行顺序和协作。以上是对Semaphore、CountDownLatch和CyclicBarrier的简单介绍和使用示例,希望对你有所帮助。

2024-08-17 15:13:50 145

原创 RabbitMQ入门与进阶

RabbitMQ入门与进阶基础篇1. 为什么需要消息队列?2. 什么是消息队列?3. RabbitMQ体系结构介绍4. RabbitMQ安装5. HelloWorld6. RabbitMQ经典用法(工作模式)7. Work Queues8. Publish/Subscribe9. Routing10. Topics进阶篇1. RabbitMQ整合SpringBoot2. 消息可靠性投递故障情况1:消息没有发送到消息队列解决思路A:在生产者端进行确认,具体操作中我们会分别针对交换机和队列来确认如果没有成功发送

2024-08-13 13:13:44 389

原创 十一、Spring AOP

学习完Spring的统⼀功能之后, 我们进⼊到AOP的学习. AOP是Spring框架的第⼆⼤核⼼(第⼀⼤核⼼是IoC)什么是AOP?Aspect Oriented Programming(⾯向切⾯编程)什么是⾯向切⾯编程呢?切⾯就是指某⼀类特定问题, 所以AOP也可以理解为⾯向特定⽅法编程.什么是⾯向特定⽅法编程呢?

2024-08-12 15:05:04 888

原创 Redis五种数据结构【String:set get分布式锁+缓存、Hash:hset hmset电商购物车、List:lpush Blpop阻塞队列、Set:sadd关注列表、zset:zadd】

原因是:大规模集群,用hash存储,只能部署在一个机器上,那么所有访问都访问在一个机器上,效率底。

2024-07-31 11:45:56 343

原创 JavaSE语法系列——第十一节- 认识异常

Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构.例如, 我们实现一个用户登陆功能if (!throw new UserNameException("用户名错误: "+userName);if (!throw new PasswordException("密码错误: "+password);System.out.println("登陆成功");try {自定义异常类,然后继承 异常类型。

2024-07-26 09:49:16 385

原创 JavaSE语法系列——第十节- String类

由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的.String s, s+=“123”,会创建新的StringBuilderStringBuilder 解决这个产能问题(利用append)// 追加:即尾插-->字符、字符串、整形数字。

2024-07-26 09:48:42 267

原创 JavaSE语法系列——第九节- 抽象类和接口(1.4万字)(1.抽象类,2.接口,3.Object类)

继承只能继承一个类比较的两个接口 Comparable(在类里重写)Comparator(比较器)sort自己传比较器compare数组 自定义 sort。

2024-07-26 09:48:06 383

原创 JavaSE语法系列——第八节- 继承和多态(继承,子父类的访问,super关键字,this关键字,静态实例构造,proteced关键字,final关键字,多态重写,重载,上下转型,设计swap函数)

例如:若干年前的手机,只能打电话,发短信,来电显示只能显示号码,而今天的手机在来电显示的时候,不仅仅可以显示号码,还可以显示头像,地区等。在这个过程当中,我们不应该在原来老的类上进行修改,因为原来的类,可能还在有用户使用,正确做法是:新建一个新手机的类,对来电显示这个方法重写就好了,这样就达到了我们当今的需求了。

2024-07-26 09:47:25 309

原创 使用IO流实现消息在文件中的读取和写入

【代码】使用IO流实现消息在文件中的读取和写入。

2024-07-23 19:47:33 252

原创 五、接口测试 ★ ✔【接口测试理论、http协议、接口测试文档解析、Postman使用、接口测试用例设计、Request库、UnitTest框架、】

简介:超⽂本传输协议,基于请求与响应的 应⽤层协议。客户端、服务器模式简单快速灵活⽆连接⽆状态接口,是数据交互的通道。用来实现 系统 之间的数据交互。功能测试单接口功能测试:一个单独的业务,就对一个独立的接口。如:登录业务,对应登录接口。业务场景功能测试:多个接口被连续调用。(模拟用户的实际使用场景)性能测试响应时长:从发送请求到接收到服务器回发响应包所经历的时间。错误率:服务器运行出错的概率吞吐量:服务器单位时间内,处理请求的数量。

2024-07-21 19:40:35 1083

原创 JavaSE语法系列——第七节- 类和对象(1.8万字)(类的使用,实例化,this,对象的构造,封装,static,代码块,内部类,对象的打印)

Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好。(总结就是,写程序的时候,主要关注的是一个主体,而不把重点放在主体做了什么)告诉计算机什么是洗衣机,就是通过类来实现的。对洗衣机简单的描述,该过程称为对洗衣机对象(实体)进行抽象(对一个复杂事物的重新认知)

2024-07-21 10:15:43 778

原创 JavaSE语法系列——第六节-数组的定义与使用

总结: 所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大)数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素。【注意事项】(静态初始化时,数组的元素个数,就是数组的长度,且之后不能再变,除非这个数组名指向别的数组(之后会讲))通过该地址,引用变量便可以去操作对象。

2024-07-21 10:13:35 939

原创 十、SpringBoot 统⼀功能处理【拦截器、统一数据返回格式(ControllerAdvicd、ResponseAdviced)、统一异常处理(@ControllerAdvice + @Exc)】

Slf4j@Component@Overridelog.info("LoginInterceptor ⽬标⽅法执⾏前执⾏..");@Overridelog.info("LoginInterceptor ⽬标⽅法执⾏后执⾏");@Overridelog.info("LoginInterceptor 视图渲染完毕后执⾏,最后执⾏");• preHandle()⽅法:⽬标⽅法执⾏前执⾏. 返回true: 继续执⾏后续操作;返回false: 中断后续操作.

2024-07-21 10:04:58 872

原创 JavaSE语法系列——第五节-方法的使用(函数)

方法就是一个代码片段. 类似于 C 语言中的 “函数”。是能够模块化的组织代码(当代码规模比较复杂的时候).做到代码被重复使用, 一份代码可以在多个位置使用.让代码更好理解更简单.直接调用现有方法开发, 不必重复造轮子.System.out.println(year+"年是闰年");}else{System.out.println(year+"年不是闰年");那方法该如何来定义呢?方法语法格式。

2024-07-20 10:07:08 777

原创 JavaSE语法系列——第四节-逻辑控制

为 while 的语句体(这是一个空语句), 实际的 { } 部分和循环无关. 此时循环条件 num <= 10 恒成立, 导致代码死循环了.此处多写了一个 分号, 导致分号成为了 if 语句的语句体, 而 { } 中的代码已经成为了和一个 if 无关的代码块.这里我们发现, 当一个代码中带有多重循环的时候, 代码的复杂程度就大大提高了. 而比较复杂的代码就更容易出错.表达式1成立,执行语句1,否则表达式2成立,执行语句2,否则执行语句3。如果布尔表达式结果为true,执行if中的语句,否则不执行。

2024-07-20 10:01:41 896

原创 JavaSE语法系列——第三节--运算符

int a = 10;int b = 20;a + b;a < b;上述 + 和 < 等就是运算符,即:对操作数进行操作时的符号,不同运算符操作的含义不同。作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量。Java中运算符可分为以下:算术运算符(+ - */)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。

2024-07-19 12:41:20 539

原创 JavaSE语法系列——第二节-数据类型与变量 ★ ✔

布尔类型常用来表示真假,在现实生活中也是经常出现的,比如:听说xxx同学买彩票中了一个亿…,听到后估计大部分人第一反应就是:我x,真的假的?b = false;boolean 类型的变量只有两种取值, true 表示真, false 表示假.Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.// 代码编译会出现如下错误Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误。

2024-07-19 12:40:39 926

原创 JavaSE语法系列——第一节-初识Java

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。

2024-07-19 12:40:07 552

原创 八,九、 MyBatis 操作数据库 ★ ✔

八,九、 MyBatis 操作数据库JDBC 操作⽰例回顾1. 什么是MyBatis?2. MyBatis⼊⻔2.1 准备⼯作2.1.1 创建⼯程2.1.2 数据准备2.2 配置数据库连接字符串2.3 写持久层代码 ★2.4 单元测试 ★使⽤Idea ⾃动⽣成测试类3. MyBatis的基础操作3.1 打印⽇志 ★3.2 参数传递 ★3.3 增(Insert) ★返回主键 ★3.4 删(Delete) ★3.5 改(Update) ★3.6 查(Select) ★3.6.1 起别名 ★3.6.2 结果映射

2024-07-18 19:51:51 707

原创 十五、反射_注解(模块25)

1.概述:Junit是一个单元测试框架,可以代替main方法去执行其他的方法2.作用:可以单独执行一个方法,测试该方法是否能跑通3.注意:Junit是第三方工具,所以使用之前需要导入jar包1.反射概述:解剖class对象的一个技术2.问题:能解剖class对象的啥呢?a.解剖出成员变量 : 赋值b.解剖出成员方法: 调用c.解剖出构造方法: new对象3.用反射的好处:让代码变的更通用,更灵活4.怎么学反射:a.将反射看成是一套API来学。

2024-07-17 13:36:03 883

原创 十四、JDK新特性(模块24)

1.面向对象思想:是Java的核心编程思想强调的是找对象,帮我们做事儿比如:去北京 -> 强调的是怎么去,火车,高铁,飞机,汽车,自行车,腿儿2.jdk8开始又了个新的思想:函数式编程思想:强调的是结果,不强调过程比如:去北京 -> 只强调去了还是没去3.Lambda表达式:a.定义格式:()->{}b.各部分解释:() : 重写方法的参数位置-> : 将参数传递到方法体中{} : 重写方法的方法体@OverrideSystem.out.println("我执行了");

2024-07-17 13:32:36 862

原创 十三、网络编程&正则表达式&设计模式(模块23)

正则表达式-预定义字符语法示例:1. "." : 匹配任何字符。(重点) 不能加[]2. "\\d":任何数字[0-9]的简写;(重点)3. "\\D":任何非数字[^0-9]的简写;4. "\\s": 空白字符:[ \t\n\x0B\f\r] 的简写5. "\\S": 非空白字符:[^\s] 的简写6. "\\w":单词字符:[a-zA-Z_0-9]的简写(重点)7. "\\W":非单词字符:[^\w]//预定义字符//1.验证字符串是否是三位数字。

2024-07-17 13:29:53 638

原创 十二、IO流(模块21-22) ★ ✔

1.单词:Output:输出Input:输入write:写数据read:读数据2.IO流:将一个设备上的数据传输到另外一个设备上,称之为IO流技术3.为啥要学IO流呢?之前学了一个集合以及数组,可以保存数据,但是这两个都是临时存储(代码运行完毕,集合和数组会从内存中消失,从而数据就不存在了),所以集合和数组达不到永久保存的目的,我们希望咱们的数据永久保存起来,所以我们就可以将数据保存到硬盘上,此时我们就可以随时想拿到硬盘上的数据就随时拿。

2024-07-17 13:21:51 764

原创 十一、Java多线程(模块16-17) ★ ✔

死锁是一种少见的,而且难于调试的错误,在两个线程对两个同步锁对象具有循环依赖时,就会大概率的出现死锁。我们要避免死锁的产生。否则一旦死锁,除了重启没有其他办法的其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源。主线程 : CPU 和内存之间开辟的转门为main方法服务的线程指的是两个或者两个以上的线程在执行的过程中由于竞争同步锁而产生的一种阻塞现象;如果没有外力的作用,他们将无法继续执行下去,这种情况称之为死锁。

2024-07-17 13:11:46 329

原创 十、Java集合 ★ ✔(模块18-20)【泛型、通配符、List、Set、TreeSet、自然排序和比较器排序、Collections、可变参数、Map】

day05 泛型,数据结构,List,Set今日目标泛型使用数据结构ListSet1 泛型1.1 泛型的介绍 ★泛型是一种类型参数,专门用来保存类型用的最早接触泛型是在ArrayList,这个E就是所谓的泛型了。使用ArrayList时,只要给E指定某一个类型,里面所有用到泛型的地方都会被指定对应的类型1.2 使用泛型的好处 ★不用泛型带来的问题集合若不指定泛型,默认就是Object。存储的元素类型自动提升为Object类型。获取元素时得到的都是

2024-07-16 12:38:48 1003

原创 acwing基础算法(20道题)【java版本】✔ ★

[TOC](acwing基础算法(20道题)【java版本】✔ ★)

2024-07-16 10:56:18 1176

原创 九、java异常 ★ ✔【模块十三】(声明异常throws、抛出异常throw、捕获异常 try catch)

1.概述:代码出现了不正常的现象;在java中,异常都是一个一个的类//错误Error -> StackOverflowError//method();//运行时期异常 -> ArrayIndexOutOfBoundsException/*编译时期异常:注意看:编译时期异常是我们代码写错了嘛?不是,当我们调用方法的时候该方法底层给我们抛了一个编译时期异常,所以导致我们一调用此方法一编译,就爆红了当我们一旦触发了这个异常,jvm就会将异常信息打印到控制台上,给程序员们看*/

2024-07-14 16:28:30 782

原创 七、Spring Boot ⽇志 ★ ✔【FATAL、ERROR、WARN、INFO、DEBUG、TRACE】【lombok:self4j+log】

为什么要学习⽇志⽇志对我们来说并不陌⽣, 从JavaSE部分, 我们就在使⽤ System.out.print 来打印⽇志了. 通过打印⽇志来发现和定位问题, 或者根据⽇志来分析程序的运⾏过程. 在Spring的学习中, 也经常根据控制台的⽇志来分析和定位问题.随着项⽬的复杂度提升, 我们对⽇志的打印也有了更⾼的需求, ⽽不仅仅是定位排查问题.⽐如需要记录⼀些⽤⼾的操作记录(⼀些审计公司会要求), 也可能需要使⽤⽇志来记录⽤⼾的⼀些喜好,

2024-07-12 13:58:13 758

原创 六、 SpringBoot 配置⽂件 ★ ✔【value的引号注意事项、@ConfigurationProperties 、】

Kaptcha 是Google的⼀个⾼度可配置的实⽤验证码⽣成⼯具. 代码:⽹上有很多⼈甚⾄公司基于Google的kaptcha进⾏了⼆次开发. 我们选择⼀个直接适配SpringBoot的开源项⽬由于作者的⽂档写的不是很全, 下⾯简单介绍下插件的使⽤原理验证码可以客⼾端⽣成, 也可以服务器⽣成. 对于普通的字符验证码, 后端通常分两部分.⼀是⽣成验证码内容, 根据验证码内容和⼲扰项等, ⽣成图⽚, 返回给客⼾端。

2024-07-12 13:05:05 1062

原创 五、Spring IoC&DI ★ ✔(Spring 是什么?IoC的例子?DI的例子?IoC的注解、DI的方式?)

容器是⽤来容纳某种物品的(基本)装置。⸺来⾃:百度百科⽣活中的⽔杯, 垃圾桶, 冰箱等等这些都是容器.我们想想,之前课程我们接触的容器有哪些?List/Map -> 数据存储容器Tomcat -> Web 容器IoC 是Spring的核⼼思想, 也是常⻅的⾯试题, 那什么是IoC呢?其实IoC我们在前⾯已经使⽤了, 我们在前⾯讲到,

2024-06-28 20:38:06 876

原创 六、常用API ★ ✔(模块14-15 基础6、7 进阶4)【】

六、常用API模块14.基础API第一章.String1.String介绍2.String的实现原理 ★3.String的创建 (无参、字符串、字符数组、字节数组)4.String 面试题【String s = new String("abc")】5.字符串常见问题第二章.String的方法1.判断方法(equals equalsIgnoreCase)2.练习13.获取功能(length()、concat、charAt、indoxOf、subString)4.练习25.转换功能(toCharArray、ge

2024-06-28 18:43:17 1239

原创 七大软件设计原则 ★ ✔【开闭原则、依赖倒置原则、单一职责、接口隔离、迪米特法则、里氏替换原则、合成复用原则】

开闭原则是面向对象设计中的重要原则,它要求软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。// 抽象图形类// 圆形类@Override// 矩形类@Override// 计算图形面积的工具类// 测试类在上面的代码中,我们定义了一个抽象的Shape类作为基类,然后创建了Circle和Rectangle两个子类来实现具体的图形类。通过这种方式,我们可以轻松地扩展新的图形类,而不需要修改类中的计算逻辑,从而符合开闭原则。学习设计原则,学习设计模式的基础。

2024-06-28 09:12:20 1094

原创 五、面向对象 ★ ✔【模块七-十二】

1.面向过程:自己的事情自己干,代表语言C语言洗衣服:每一步自己要亲力亲为 -> 找个盆,放点水,找个搓衣板,搓搓搓2.面向对象:自己的事情别人帮忙去干,代表语言Java语言洗衣服:自己的事情别人干 -> 全自动洗衣机3.为啥要使用面向对象思想编程:懒很多功能别人都给我们实现好了,我们只需要直接拿过来使用即可,简化了我们自己的编写过程,减少了我们的代码量4.什么时候使用面向对象思想编程:调用别人的功能时在一个类中想使用别的类中的成员时,就使用面向对象思想编程。

2024-06-26 15:48:23 654

原创 四、方法【模块六】★ ✔

来,继续啊,下面我们来学习Java中很重要的一个知识,就是方法,那什么是方法呢?我们一起来说一下:**方法(method):**就是完成特定功能的代码块如何理解这句话呢?来,我们看一段代码,相信这个大家应该已经很熟悉了这就是我们的main方法,也就是我们说的主方法。它里面的代码的功能:是在控制台输出一个字符串数据:HelloWorld我们再来看另一段代码:这里出现了三个方法,主方法的作用,还是在控制台输出一个字符串数据:HelloWorld。

2024-06-26 14:33:20 730

原创 三、循环语句【模块四】 ★ ✔

这三种循环可以做相同的事情,当然它们也有小的区别,至于它们的应用及区别,我们后面会详细讲解。而在讲解for循环格式之前,我们先来看一下前面我们讲过的一个内容:这段代码的作用,是用来展示手机信息1000次。由于循环语句的区别,只是大家需要理解的知识点,故这里不需要练习,我们在后面的使用中,在慢慢体会即可。需求:小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天或者5的倍数的话,还提到了这里的几个部分,分别是定义变量,条件判断,控制变量的变化,展示手机信息(可能被多次执行)

2024-06-26 14:24:46 1015

原创 二、Java运算符和选择语句 ★ ✔【模块二、三】(算术运算符、赋值运算符、位运算符、关系运算符、逻辑运算符、三元运算符、)

很明显,这是不合理的,因为我们把三种状态都设置为true了,而实际生活中,只会有一种状态为true,怎么解决呢多种情况的判断呢?**注意:**在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇到break,或者整个switch语句结束。了解了交通信号灯的基本逻辑后,下面呢,我们通过if语句来实现过马路的信号灯判断,而if语句呢,有三种格式,这里我们首先来学习第一种格式。QQ界面的登录,填写账号和密码正确,展示好友列表界面。

2024-06-26 14:14:45 689

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除