自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

.

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

原创 [TG开发]播报机bot

3、输⼊机器人的名称(以后可以更改, 可以有中文)和 ⽤户名(Telegram 机器⼈的唯⼀标识符,以后⽆法更改, 必须英文)。【用户名记得以 “Bot” 结尾,或者最简单的直接用户名+Bot作为机器人的名称】BotFather是 Telegram 平台上的官方机器人,用于创建和管理其他机器人(Bot)。用户需要通过它与 Bot API 进行交互,完成机器人的创建、配置及管理。使用网页版TG登录,打开频道&群组,在地址栏可以看到 频道ID。可以启动多个node脚本,一起使用Pm2管理,输入。

2025-08-11 09:53:32 392

原创 [尚庭公寓]18-阿里云部署

在生产环境中是不建议关闭防火墙的, 所以阿里云使用安全组管理防火墙默认开放一些端口, 比如22端口用于linux远程连接, 3389端口用于windows远程连接开放其他端口, 点击手动添加源对象的写法是 IP地址 + 限制符限制符是 / 拼上 0-32的数字, 表示限制IP的位数, 0表示不限制, 32表示全限制如果只是自己使用, 源直接配置本机的IP就行, 比如 223.104.212.219/0本机IP查询。

2025-08-07 19:04:27 1057

原创 [尚庭公寓]17-项目部署

配置文件结构`nginx.conf`文件层次分明,整个文件分为多个区块(block),每个区块下可配置各种参数,也可包含其子级区块,具体结构如下图所示`nginx.conf`通过` include /etc/nginx/conf.d/*.conf`引入了`/etc/nginx/conf.d`目录下的所有`.conf`文件,该目录下的配置文件结构如下图所示重要配置说明下面分块介绍重要的配置参数main block。

2025-08-04 09:16:06 525

原创 [尚庭公寓]16-缓存优化

缓存优化是一个性价比很高的优化手段,多数情况下,缓存优化可以通过一些简单的操作,换来性能的大幅提升。缓存优化的核心思想就是将一些原本保存在磁盘(例如MySQL)中的、经常访问并且查询开销比较大的数据,临时保存到内存(例如Redis)中。后序再访问相同数据时,就可直接从内存中获取结果,而无需再访问磁盘,由于内存的读写速度远高于磁盘,因此就能极大的提高程序的性能。

2025-07-30 10:06:11 1124

原创 [尚庭公寓]15-个人中心

修改项目根目录下的`.env.development`文件中的`VITE_APP_BASE_URL`变量的值为后端接口的地址,此处改为`http://localhost:8081`即可,如下。浏览历史指的是浏览房间详情的历史,关于浏览历史,有两项工作需要完成,一是提供一个查询浏览历史列表的接口,二是在浏览完房间详情后,增加保存浏览历史的逻辑,下面分别实现。保存浏览历史的动作应该在浏览房间详情时触发,所以在`RoomInfoServiceImpl`中的`getDetailById`方法的最后增加如下内容。

2025-07-28 14:25:28 792

原创 [尚庭公寓]14-找房模块

首先,Mybatis会执行主查询来获取`room_info`列表,然后对于每个`room_info`,Mybatis都会执行一次子查询来获取其对应的`graph_info`。对于找房模块,地区信息共需三个接口,分别是**查询省份列表**、**根据省份ID查询城市列表**、**根据城市ID查询区县列表**,具体实现如下。公寓信息只需一个接口,即**根据ID查询公寓详细信息**,具体实现如下。由于xml文件中的`<`和`>`是特殊符号,需要转义处理。xml文件`<`和`>`的转义。

2025-07-25 16:01:21 902

原创 [尚庭公寓]13-移动端登录模块

根据上述登录流程,可分析出,登录管理共需三个接口,分别是**获取短信验证码**、**登录**、**查询登录用户的个人信息**。在**web-app模块**创建`com.atguigu.lease.web.app.custom.interceptor.AuthenticationInterceptor`在**web-app模块**创建`com.atguigu.lease.web.app.custom.config.WebMvcConfiguration`在`application.yml`中增加如下内容。

2025-07-23 14:48:00 1381

原创 [尚庭公寓]12-登录管理

有两种常见的认证方案,分别是基于**Session**的认证和基于**Token**的认证,下面逐一进行介绍基于Session基于Session的认证流程如下图所示该方案的特点- 登录用户信息保存在服务端内存中,若访问量增加,单台节点压力会较大- 随用户规模增大,若后台升级为集群,则需要解决集群中各服务器登录状态共享的问题(redis)。基于Token基于Token的认证流程如下图所示该方案的特点- 登录状态保存在客户端,服务器没有存储开销。

2025-07-21 09:42:09 817

原创 [尚庭公寓]11-用户与系统管理

password`字段属于敏感信息,因此在查询时应过滤掉,可在`UserInfo`实体的`password`字段的`@TableField`注解中增加一个参数`select=false`来实现。上述`<strategy>`可选值有:`ignore`、`not_null`、`not_empty`、`never`,默认值为`not_null`用户管理共包含两个接口,分别是**根据条件分页查询用户列表**和**根据ID更新用户状态**,下面逐一实现。后台用户岗位管理共有六个接口,下面逐一实现。

2025-07-18 14:15:36 889

原创 [尚庭公寓]10-租赁管理

ViewAppointment`实体类中的`appointmentTime`字段为`Date`类型,`Date`类型的字段在序列化成JSON字符串时,需要考虑两个点,分别是**格式**和**时区**。在**web-admin模块**下创建`com.atguigu.lease.web.admin.schedule.ScheduledTasks`类,内容如下。看房预约管理共有两个接口,分别是**根据条件分页查询预约信息**、**根据ID更新预约状态**,下面逐一实现。

2025-07-14 14:06:07 488

原创 [尚庭公寓]09-公寓信息管理

房间基本属性管理共有五个接口,分别是**保存或更新属性名称**、**保存或更新属性值**、**查询全部属性名称和属性值列表**、**根据ID删除属性名称**、**根据ID删除属性值**。房间基本属性管理共有五个接口,分别是**保存或更新杂费名称**、**保存或更新杂费值**、**查询全部杂费名称和杂费值列表**、**根据ID删除杂费名称**、**根据ID删除杂费值**。**标签管理**共有三个接口,分别是**[根据类型]查询标签列表**、**保存或更新标签信息**和**根据ID删除标签**,下面逐一实现。

2025-07-12 10:54:28 989

原创 [尚庭公寓]08-项目初始化

资料中提供了所有的Controller代码,并且Controller中定义好了每个接口(只有定义,没有实现),大家可直接导入接口定义相关的代码,然后只专注于接口逻辑的实现。导入完成后,便可启动SpringBoot项目,并访问接口文档了,Knife4j文档的url为:http://localhost:8080/doc.html。知识点vo(View Object):用于封装或定义接口接收及返回的数据的结构。统一接口返回数据结构:为方便前端对接口数据进行处理,统一接口返回数据结构是一个良好的习惯。

2025-07-09 10:01:10 1057

原创 [尚庭公寓]07-Knife快速入门

Knife4j有多个版本,最新版的Knife4j基于开源项目`springdoc-openapi`,这个开源项目的核心功能就是根据SpringBoot项目中的代码自动生成符合OpenAPI规范的接口信息。创建`com.atguigu.helloknife4j.config.Knife4jConfiguration`,内容如下。将资料中的`lease.sql`脚本导入`lease`数据库,其中包含了建表语句和少量的原始数据。`@Tag`注解用于对接口进行分类,相同`Tag`的接口会放在同一个菜单。

2025-07-07 09:25:23 581

原创 [尚庭公寓]06-Redis快速入门

Redis(Remote Dictionary Server)是一个**基于内存**的键值对存储系统,常用作缓存服务。由于Reids将数据都保存在内存中,因此其读写性能十分惊人,同时,为保证数据的可靠性,Redis会将数据备份到硬盘上,用于故障发生时的数据恢复。Redis特点高性能Redis主要将数据存储在内存中,因此读写速度非常快,适合对速度有较高要求的场景。支持多种数据结构Redis中键值对的值(Value)支持多种数据结构,如字符串、哈希表、列表、集合等,这使得它可以应用于多种不同的场景。

2025-07-04 15:22:41 1290

原创 [尚庭公寓]05-MinIO快速入门

对象URL为MinIO的`Endpoint`+`对象的存储路径`,例如下图中的图片对象的URL为[http:192.168.10.101:9000/test/公寓-外观.jpg](http:192.168.10.101:9000/test/公寓-外观.jpg)。重新访问[http:192.168.10.101:9000/test/公寓-外观.jpg](http:192.168.10.101:9000/test/公寓-外观.jpg),观察是否正常。运行上述代码,然后查看MinIO管理页面,观察是否上传成功。

2025-06-30 10:23:20 1284

原创 [尚庭公寓]04-MyBatis Plus快速入门

MyBatis-Plus(简称 MP)是一个MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑强大的 CRUD 操作:内置通用 Mapper、通用 Service,提供了大量的通用的CRUD方法,因此可以省去大量手写sql的语句的工作。条件构造器:提供了强大的条件构造器,可以构造各种复杂的查询条件,以应对各种复杂查询。

2025-06-26 09:52:00 1104

原创 [尚庭公寓]03-开发环境

系统自带的防火墙服务`firewalld`,我们自己安装的`mysqld`和`redis`均是由`Systemd`进行管理的,此处将MinIO服务也交给Systemd管理。在`server01`部署MinIO,安装方式采用rpm离线安装,具体步骤可参考[官方文档](https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html#minio-snsd)。

2025-06-23 13:45:17 897

原创 [尚庭公寓]02-Linux速通

Linux是一种开源操作系统,与Windows或macO6等操作系统不同,Linux允许用户自由地查看、修改和分发其源代码。以下是Linux系统的一些显著的优势。稳定性和可靠性:Linux内核以其稳定性而闻名,能够持续运行数月甚至数年而不需要重新启动。这对于服务器来说至关重要,因为它们需要保持长时间的稳定运行,以提供持续的服务。安全性:Linux系统的安全性得到了广泛认可。开源的自然属性使得漏洞可以很快被发现和修复,从而降低了受到安全威胁的风险。

2025-06-16 09:19:54 1668

原创 [尚庭公寓]01-项目概述

尚庭公寓是一个公寓租赁平台项目,包含移动端和后台管理系统其中移动端面向广大用户,提供找房、看房预约、租约管理等功能,后台管理系统面向管理员,提供公寓(房源)管理、租赁管理、用户管理等功能。下面分别介绍两端的具体业务功能移动端的线上体验地址为: http://39.99.159.121:8002其主要业务功能如下图所示各功能模块具体内容如下房源检索用户可以使用这个功能来搜索和检索符合其需求的房源。他们可以根据不同的条件,如地理位置、租金范围、支付方式等,快速找到适合的房源。看房预约管理。

2025-06-09 11:38:05 1737

原创 [Spring]-AOP

1、Spring会为每个被切面切入的组件创建代理对象(Spring CGLIB 创建的代理对象,无视接口)。3、目标方法执行时,会先去执行增强器链中拿到需要提前执行的通知方法去执行。2、代理对象中保存了切面类里面所有通知方法构成的增强器链。默认情况下, 切面方法的执行顺序受切面类的首字母排序影响。通过 JoinPoint 包装了当前目标方法的所有信息。通过 throwing 属性可以接收当前方法的异常信息。编码时介入: 包装真实对象,对外提供静态代理对象。运行时介入: 创建真实对象运行时代理对象。

2025-06-06 11:11:11 1135

原创 [HTML5]快速掌握canvas

canvas>是一个HTML元素,我们可以将它简单理解为一个画板,通过Canvas提供的绘制api我们就可以绘制出各种图形。canvas 是 html5 标准中提供的一个标签, 顾名思义是定义在浏览器上的画布。将一个canvas对象绘制到另一个canvas对象上 (离开用户可视范围内进行染)平移(translate)、旋转(rotate)、缩放(scale)语法: transform(a, b, c, d, e, f);canvas中的坐标系和html中的坐标系一样。画布的状态是可以保存和恢复的。

2025-06-02 13:52:29 1288

原创 [CSS3]响应式布局

复制技巧: 如果代码多, 拖拽复制就不方便, 左键点击开始位置, 按住shift再右键点击结束位置, 快速选择。bootStrap默认的导航条组件, 是屏幕小于768时才折叠为图标, 项目需求是小于992时就堆叠排列。使用bootstrap栅格系统布局时, 栅格盒子只做布局, 内容的排版或者盒子的间距全部交给子级盒子。响应式就是一套代码, 兼容大中小不同的屏幕, 即网页内容不变, 网页布局随屏幕切换而改变。体验一下: 引入框架, 通过类名, 就可以快速实现响应式布局, 非常方便。

2025-05-30 13:50:55 1746

原创 [CSS3]vw/vh移动适配

vw单位换算: 设计稿中的单位一定是px单位, 写代码要写vw单位, 怎么换算呢?新建index.html文件, 新建index.less文件。素材获取: 图片直接右键另存为, 字体图标的下载如下。目标: 能够使用vw单位设置网页元素的尺寸。

2025-05-28 10:53:38 888

原创 [CSS3]rem移动适配

什么是移动端适配?让页面的元素在屏幕尺寸变化时, 同比放大或缩小移动适配的方案rem:目前多数企业在用的解决方案vw/vh:未来的解决方案。

2025-05-26 10:48:05 1520

原创 [CSS3]Flex布局

新建orders.html作为页面, 引入字体图标文件, base.css用于清除默认样式。使用像素大厨, 打开移动端设计稿, 调整到2倍图模式, 用于测量尺寸。使用justify-content调节元素在主轴的对齐方式。使用align-items调节元素在侧轴的对齐方式。使用flex-direction改变元素排列方向。使用flex-wrap实现弹性盒子多行排列效果。能够使用Flex布局模型灵活、快速的开发网页。主体内容从上往下, 支付按钮固定在页面底部。使用flex属性修改弹性盒子伸缩比。

2025-05-24 10:51:44 1558

原创 [CSS3]百分比布局

设计师的设计图一般都是750px的图(也就是苹果6/7/8的物理分辨率), 称为二倍图。使用适口标签, 使移动端网页的宽度和设备宽度(逻辑分辨率)相同。默认情况下,手机网页的宽度固定是980, 和逻辑分辨率无关。屏幕尺寸: 指的是屏幕对角线的长度,一般用英寸来度量。随着技术发展,行业要求也越高,现在也要求高度自适应.默认情况下,PC网页的宽度和逻辑分辨率是相同的。制作网页参考物理分辨率还是逻辑分辨率?PC端网页和移动端网页的有什么不同?PC端主流设备的分辨率。移动端主流设备的分辨率。

2025-05-21 10:22:24 819

原创 [CSS3]属性增强2

过度效果与动画效果思考: 过渡可以实现什么效果?答: 实现2个状态间的变化过程动画效果: 实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)动画的本质是快速切换大量图片时在人脑中形成的具有连续性的画面构成动画的最小单元: 帧或动画帧。

2025-05-19 10:12:26 1059

原创 [CSS3]属性增强1

使用字体图标可以实现简洁的图标效果, 字体图标展示的是图标, 本质是字体, 适合简单, 颜色单一的图标。如果图标库中找不到需要的图标. iconFont网站支持上传矢量图生成字体图标。语法: transform: translate(水平移动距离,垂直移动距离)示例: 使用translate快速实现绝对定位的元素居中效果。使用transform属性实现元素的位移、旋转、缩放等效果。使用transform复合属性实现多形态转换。使用rotate实现元素旋转效果。使用skew实现元素倾斜效果。

2025-05-16 14:07:26 1382

原创 [Spring]-组件的生命周期

理解后置处理器机制: 前面的周期都是本质都是通知, 处理机制本质是拦截, 可以直接修改bean。了解 InitializingBean接口 和 DisposableBean接口的 调用时机。了解 @PostConstruct 和 @PreDestroy 的执行时机。通过@Bean指定组件的生命周期。查看单元测试方法的结果。使用单元测试测试容器。

2025-05-14 14:05:01 597

原创 [Spring]-组件注入

最佳实践: 强烈建议组件注册的名字 和 组件注入的名字符合规范, 这样可以避免不必要的麻烦。如果容器中同一类型的bean存在多个, 如果注入失败, 可以使用以下注解解决。使用@QualiFier注解, 具名注入组件。使用@Primary注解 指定默认组件。使用@Value注解获取配置文件的数据。运行项目, 容器启动, 注册正常注册。使用原生spring的方式启动容器。了解 @Resource注解。通过setter方法注入组件。通过构造器注入bean。指定属性注入的数据源。

2025-05-12 10:43:33 521

原创 [Spring]-组件注册

默认情况下, 容器的组件都是单例模式, 并且是饿汉式单例, 使用@Lazy注解改为懒汉单例, 实现组件懒加载。单例模式下, 组件全局只会创建一个, 多次获取拿到是同一个, 单例组件在容器初始化的时候就会提前创建。对于一些常见的按需加载条件, spring官方已经提供了很多接口实现, 也就是衍生注解, 解放生产力。这些注解本质上是没有区别的, 都是注册组件而已, 只是分类使用提高代码可读性。第三方依赖的代码都是只读的, 不能通过添加注解的方式注册到容器。非单例模式下, 每次获取, 都会创建一个新的组件。

2025-05-10 10:59:30 1544

原创 [Spring]-认识Spring

Spring是一个 IOC(DI) 和 AOP 框架。官网: spring.io。Spring有很多优良特性。框架 framework。

2025-05-08 10:03:51 482

原创 [学成在线]23-面试题总结

maven依赖版本冲突一般是由于间接依赖导致一个jar包即有多个不同的版本,比如:A依赖了B的1.0版本,C依赖了B的2.0版本,项目依赖A和C从而间接依赖了B的1.0和2.0版本,此时B有两个版本引入到了项目中,当存在版本冲突时可能会出现 ClassNotFoundException、NoSuchMethodError等错误。3)唯一序列号,请求前生成唯一的序列号,携带序列号去请求,执行时在redis记录该序列号表示以该序列号的请求执行过了,如果相同的序列号再次来执行说明是重复执行。

2025-05-05 13:56:51 1493

原创 [学成在线]22-自动部署项目

在pom.xml添加docker-maven-plugin插件实现将springboot工程创建镜像,此pom.xml添加docker-maven-plugin插件用于生成镜像。分别修改system-api、content-api、media-api、gateway、auth、checkcode服务的pom.xml文件。将此目录的内容拷贝到虚拟机的/data/soft/nginx/xuecheng_portal_static/dist。将本机的nginx服务停掉,访问www.51xuecheng.cn。

2025-05-02 10:56:07 1717

原创 [学成在线]21-人工部署项目

DevOps兴起于2009年,近年来由于云计算、互联网的发展,促进了DevOps的基础设施及工具链的发展,涌现了一大批优秀的工具,这些工具包括开发、测试、运维的各各领域,例如:GitHub、Docker、Jenkins、Hudson、K8S、Ant/Maven/Gradle、Selenium、QUnit、JMeter等。所以,在整体生命周期中比较核心的两个阶段是:开发阶段、维护阶段,开发阶段的成果是软件开发完成并成功上线,运维阶段则负责对软件进行维护和升级,而运维阶段通常在一个软件的生命周期中占比最多。

2025-04-30 10:15:49 1128

原创 [学成在线]20-在线学习

在视频点播页面需要查询课程信息,课程上线后也需要访问/api/content/course/whole/{courseId}课程预览时请求获取课程的接口为:/open/content/course/whole/{courseId}下边实现/api/content/course/whole/{courseId} 获取课程发布信息接口。登录网站,点击“我的学习”进入个人中心,查看我的课程表中课程是否是当前用户所选课程。没有选课的免费课程、收费课程各一门,其中收费课程具有试学课程。

2025-04-28 10:10:02 825

原创 [学成在线]19-支付通知

订单服务完成支付后将支付结果发给每一个与订单服务对接的微服务,订单服务将消息发给交换机,由交换机广播消息,每个订阅消息的微服务都可以接收到支付结果.订单服务通过消息队列将支付结果发给学习中心服务,消息队列采用发布订阅模式。订单服务作为通用服务在订单支付成功后需要将支付结果异步通知给其它微服务。学习资源服务:对收费的学习资料需要购买后下载,与订单服务对接完成支付。学习中心服务:对收费课程选课需要支付,与订单服务对接完成支付。2、支付完成点击“支付完成”,观察订单服务控制台是否发送消息。

2025-04-25 10:39:34 1130

原创 [学成在线]18-支付宝支付

支付完成后第三方支付系统会主动通知支付结果,要实现主动通知需要在请求支付系统下单时传入NotifyUrl,这里有两个url:NotifyUrl和ReturnUrl,ReturnUrl是支付完成后支付系统携带支付结果重定向到ReturnUrl地址,NotifyUrl是支付完成后支付系统在后台定时去通知,使用NotifyUrl比使用ReturnUrl有保证。具体的使用方法是在调用下单接口的 API 中传入的异步通知地址 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商户系统。

2025-04-23 10:18:09 1777

原创 [学成在线]17-添加选课

本模块实现了学生选课、下单支付、学习的整体流程。网站的课程有免费和收费两种,对于免费课程学生选课后可直接学习,对于收费课程学生需要下单且支付成功方可选课、学习。选课:是将课程加入我的课程表的过程。我的课程表:记录我在网站学习的课程,我的课程表中有免费课程和收费课程两种,对于免费课程可直接添加到我的课程表,对于收费课程需要下单、支付成功后自动加入我的课程表。

2025-04-21 10:44:35 1009

原创 [学成在线]16-用户授权

本项目是基于角色分配权限,如果要删除用户的权限可以给用户换角色,那么新角色下的权限就是用户的权限;如果不换用户的角色可以删除角色下的权限即删除角色权限关系表相应记录,这样操作是将角色下的权限删除,属于该角色的用户都将删除此权限。一个例子:用户A和用户B都是教学机构,他们都拥有“我的课程”权限,但是两个用户所查询到的数据是不一样的。细粒度授权涉及到不同的业务逻辑,通常在service层实现,根据不同的用户进行校验,根据不同的参数查询不同的数据或操作不同的数据。

2025-04-19 05:19:05 964

空空如也

空空如也

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

TA关注的人

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