当前位置: 首页 > news >正文

Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<一>---Spring Boot项目搭建

前言:

接下来又得被迫开启新的一门课程的学习了,上半年末尾淘汰又即将拉开序幕【已经记不清经历过多少次考试了】,需要去学习其它领域的技术作为考试内容,我选了spring boot相关技术,所以。。总之作为男人,不能轻易言败,尽力而为,抱怨解决不了任何问题,逆境使人进步,我坚信这点,

效果:

在正式学习之前,需要让自己有动力坚持把它学完,所以提前知道一下最终做出来的产品效果会比较好,这块可以点击此链接进行体验:web,项目比较“简单”,当然你要将它做出来也不是那么简单的,对于一个纯小白来说,用业务简单一点的项目进行学习反倒更好,因为让你坚持的动力更足,其实springboot这块的入门在之前android架构中接触过:

这也是为啥我选择用它进行考试的原因,压力小点,多少有一点点小基础,不过,一年过去了,基本上又忘得差不多了,因为我平常的工作是移动开发。。所以正好也可以利用这次公司考试的机会再对它进行一个巩固扩展,先简单贴几张效果图:

1、首页:

2、用户管理:

3、电子书管理:

对于纯小白的我来说,要真的前后端都自己搞,有点难~~所以接下来准备攻克它。

新建SpringBoot项目:

接下来就直接开始创建项目了,没有啥好说的,打开IntelliJ IDEA:

接下来SpringBoot工程就创建好了,其中为了保证跟课程的版本一致,这里先来将springboot的版本号改一下:

其中它有一个启动类,直接点击运行就可以了:

接下来在浏览器访问一下:

如果能看到它说明SpringBoot的工程就创建成功了,由于目前还木有写相关的接口,所以报404了。

想当初学习“SSH”来搭建后台项目时是多么的麻烦,现在用Spring Boot来搭建,真是秒秒钟,其中连tomcat服务器都给内嵌好了,真是方便:

项目初始配置:

在正式进行Spring boot开发之前,先有一些项目配置相关的工作需要做一下,下面一一来看一下。

编码配置:

需要将所有的编码都改成utf-8,具体改的地方如下:

Maven配置:

对于Maven来说,我们可以配置阿里云的镜像,下载jar则会更加快速,就像Android中的gradle通常我们也会引入一些国内的资源镜像,这里需要准备一个settings.xml文件,文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0     http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>/Users/你自己的用户名/.m2/repository</localRepository><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central</url></mirror><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public</url><mirrorOf>central</mirrorOf></mirror><mirror><id>central</id><name>Maven Repository Switchboard</name><url>http://repo1.maven.org/maven2</url><mirrorOf>central</mirrorOf></mirror><mirror><id>repo2</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo2.maven.org/maven2</url></mirror><mirror><id>ibiblio</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://mirrors.ibiblio.org/pub/mirrors/maven2</url></mirror><mirror><id>jboss-public-repository-group</id><mirrorOf>central</mirrorOf><name>JBoss Public Repository Group</name><url>http://repository.jboss.org/nexus/content/groups/public</url></mirror><mirror><id>google-maven-central</id><name>Google Maven Central</name><url>https://maven-central.storage.googleapis.com</url><mirrorOf>central</mirrorOf></mirror><!-- 中央仓库在中国的镜像 --><mirror><id>maven.net.cn</id><name>one of the central mirrors in china</name><url>http://maven.net.cn/content/groups/public</url><mirrorOf>central</mirrorOf></mirror></mirrors><profiles><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile><profile><id>repository_set</id><repositories><repository><snapshots><enabled>false</enabled></snapshots><id>public</id><name>Public Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository></repositories><pluginRepositories><pluginRepository><releases><updatePolicy>never</updatePolicy></releases><snapshots><enabled>false</enabled></snapshots><id>public</id><name>Public Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></pluginRepository></pluginRepositories></profile></profiles></settings>

其中注意,需要将这个改成你自己的用户名:

接下来则需要到这块进行设置:

这样配置之后,以后下载jar包就可以走国内的阿里云的镜像,会比较快。 

启动日志优化:

对于Spring Boot控制台的日志,可以加一些人性化的修改。

logback日志样式修改:

这里先准备一个“logback-spring.xml”,放到这个位置:

其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 修改一下路径--><property name="PATH" value="./log"></property><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder>
<!--            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern>--><Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern></encoder></appender><appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/trace.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern></layout></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern></layout><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><root level="ERROR"><appender-ref ref="ERROR_FILE" /></root><root level="TRACE"><appender-ref ref="TRACE_FILE" /></root><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

它主要是干了这么几下事:

1、将日志输出风格做了精简:

很明显就跟默认创建SpringBoot的日志输出不一样了,更加精简。

2、error级别的日志会生成本地log文件:

输出的位置在工程的这个目录:

此时运行就可以看到这工程的这块多了相关的文件了:

3、日志的堆栈信息也写入文件:

这个文件其实在上面就已经看到了,就是它:

也就是把控制台上看到的信息原封不动的写到日志文件里了。 

增加启动成功日志:

对于SpringBoot的启动在控制台上没有相关访问地址的提示,看一下:

所以,接下来修改一下启动类,加入如下代码行:

package com.cexo.wiki;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;@SpringBootApplication
public class Application {private static final Logger LOG = LoggerFactory.getLogger(Application.class);public static void main(String[] args) {SpringApplication app = new SpringApplication(Application.class);Environment env = app.run(args).getEnvironment();LOG.info("启动成功!!");LOG.info("地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}

然后在这块配置一下服务器的端口号:

此时再启动,就变得人性一些了:

修改启动图案:

最后,修改一下图案,经常看到后端的开发人员在IDE启动时看到默认启动的提示文案不是目前看到的这个:

而是那个阿弥陀佛,永远bug那个,其实这块是可以改的,接下来就是改一个比较人性化一点的图案,做法也比较简单,就是在这个位置新建一个文件:

其中这个图案的内容如下:

   ___ _____  ___  _    _  ___|_  |_   _|/ _ \| |  | |/ _ \| | | | / /_\ \ |  | / /_\ \| | | | |  _  | |/\| |  _  |
/\__/ /_| |_| | | \  /\  / | | |
\____/ \___/\_| |_/\/  \/\_| |_/_ooOoo_o8888888o88" . "88(| -_- |)O\  =  /O____/`---'\____.'  \\|     |//  `./  \\|||  :  |||//  \/  _||||| -:- |||||-  \|   | \\\  -  /// |   || \_|  ''\---/''  |   |\  .-\__  `-`  ___/-. /___`. .'  /--.--\  `. . __."" '<  `.___\_<|>_/___.'  >'"".| | :  `- \`.;`\ _ /`;.`/ - ` : | |\  \ `-.   \_ __\ /__ _/   .-` /  /======`-.____`-.___\_____/___.-`____.-'======`=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^Buddha Bless, No Bug !

而这个图案可以上Text to ASCII Art Generator (TAAG)网站动态生成,比如:

关于这个图案网上可以找,下面运行看一下效果:

注意:如果发现没有生效,记得重新编译一下工程既可。

开发Hello World接口:

前面完成了一些项目的基本配置之后,接下来就可以开发了,由于是纯小白,所以从写一个Hello World接口开始。

1、Application更换一个名称:

也就是它准备改一个名称:

改成带项目前缀的见名之义一点:

2、新建Controller:

对于Spring Boot中接口的实现都是放到Controller中对吧,所以:

里面定义一个简单的测试方法:

而要想让此方法变成一个接口,则需要加注解@RequestMapping,如下:

有了这个注解还不够,还需要在类上加个注解@RestController声明它是一个Controller:

其中还有另一个类似的注解:@Controller:

它其实是返回一个页面,而不是一个字符串,由于现在的前后端都是分离的,所以这个注解通常用不到,基本都是用@RestController来返回接口请求的结果字符串,这里做个了解。

3、运行:

接下来运行看一下:

4、底层探究:

在这个controller编写中用到了两个注解,下面来进一步了解它们。

@RestController:

点开查看一下,发现可以发现它跟@Controller注解是有关系的:

也就是其实我们也可以用标红的这俩注解来代替它,而其中@RequestBody它表示的是用来返回字符串或者JSON对象,所以这也是为啥@RestController它返回的是字符串类型了。

@RequestMapping:

对于一个请求通常来说是分为这四种:GET、POST、PUT、DELETE对吧,那这个注解表示的是所有方式都支持,如果说只想支持GET请求,则需要这样来写:

而其它的方式改下method既可,另外还有一种写法,就是不同的注解对应不同的方式,如下:

这里如果我们改成post请求,在浏览器访问就会报405错了,如下:

这里还是将其还原成GET方式。

@ComponentScan:

有木有想过这么一个问题,就是我们自己写的Controller是如何被Spring给扫描到的呢?其实是这个注解内部有相关的扫码注解:

接下来做一个实验,来体会一下该注解的用处,就是将Appliation的这个类放到一个新的包名中,如下:

也就是controller不是在WikiApplication所在层级的子包中了,运行再来访问咱们的这个接口,报错了。。

原因就是由于默认只会扫码Application同一级的类及子包的类,而要想解决此问题,就需要用到这个注解了,如下:

而如果有多个包名需要加入扫描,可以这样写:

这里还是将其还原一下,其中还有一个细节,就是这块报警告了:

这是因为IDE识别不了这个“cexo”的单词,为了不报警告,咱们可以将其加到字典库中,如下:

这样警告就消除了。

使用HTTP Client测试接口:

概述:

目前我们在测试接口时是需要切到浏览器进行访问,另外也可能使用PostMan进行模拟请求,而且浏览器测试只支持get方式,对于post就无法用浏览器来访问了,那有木有一种直接在IDEA中进行接口测试而不用切到其它工具呢?有的,那就是使用它:

如果你熟悉Android,一看到这个HttpClient,就非常的面熟对吧,因为对于Android的网络如果不使用三方框架来写的话也是用的HttpClient。

测试Get请求:

接下来咱们来使用它来测试一下咱们写的Get请求,这里其实可以不用上述的菜单来打开Http Client,其实直接可以这样:

也就是在工程中创建一个http结尾的文件IDE就可以自动识别它是一个http client测试文件,咱们来在里面发起一个GET请求,如下:

测试Post请求:

好,接下来再来模拟一下post请求,先来改一下测试接口:

然后此时重启一下服务器,再来编写测试代码:

输出日志及断言:

其实还有一种用法,就是可以进行日志输出及断言,具体测试代码是如下编写的:

运行貌似报错了:

其实原因是:

所以,这里将Accept给去掉再执行一下:

整个测试成功,是不是非常之方便。

Live Template效率加快利器:

对于这样的测试用例编写,是不是你不一定记得住,而且比较麻烦,其实有一种高效输入测试用例的办法,就是使用IDE的Live Template,也就是将常见的测试代码给弄成一个快捷键:

这里新建一个:

试试效果:

是不是非常方便,下面再来把POST请求也弄成一个快捷方式:

POST http://$HOST$/$PATH$
Content-Type:$HEADER_VALUE$$BODY$###

效果:

另外对于post请求还有个传参的,这个用得会比较多,所以也将其加入:

POST http://$HOST$/$PATH$
Content-Type:application/x-www-form-urlencoded$PARAM1$=$VALUE1$&$PARAM2$=$VALUE2$###

效果:

也就是如果未来对于经常要用的代码,就可以利用这功能将其定义成快捷键,可以大大增加开发效率,这个就看个人的爱好了。

SpringBoot配置文件【自定义配置项】:

默认支持的配置文件:

对于咱们新建的SpringBoot工程中有这么一个配置文件:

接下来就来对这种配置文件进行一个全面的了解,其实不止这么一种配置。

SpringBoot:

application.properties/yml:

除了application.preperties这个配置文件之外,其实还支持yml格式的,也就是:

而它里面的配置内容格式就不是之前preperties的那种了,需要改成它:

为了测试效果,我们将application.perperties中的配置内容给注掉,然后启动看一下这个yml配置文件配置的内容有木有生效:

生效了,那问题来了,对于properties目前只有一个简单的端口配置改成yml格式的比较简单,那如果配置非常复杂,转成yml的工作量就很大了,有木有一种能相互转换的工具呢?有的:在线yaml转properties-在线properties转yaml-ToYaml.com,

这样,对于两种风格的配置那就写起来无压力的~~

config/application.properties/yml:

此外,还支持另外两种路径下的配置,也就是将其放到config下:

其优先级,自己可以尝试,这里就做个了解。

SpringCloud:

另外对于SpringCloud架构下的SpringBoot应用,还可以读以下四种配置:

bootstrap.properties/yml:

config/bootstrap.properties/yml:

由于SpringCloud目前还没学,所以这里就做一个扩展,bootstrap一般用于动态配置,线上可以实时修改实时生效的配置,一般可配合上nanos使用。这里还是将这些不相关的配置项给删除掉,仅作为一个了解。

自定义配置项:

对于目前的配置项只配了一个服务器的端口属性对吧:

它是SpringBoot内置的配置项,那我如果定义一个自定义的配置项呢,比如:

那在程序中如何能读到该配置内容呢?其实可以这样用:

下面咱们来测试一下看是否真的能读到?启动一下服务器,发现我本机8880端口已经被其它程序占用了:

所以,咱们将端口号改一下,改为8881,再重启貌似就好了,咱们来访问一下:

另外,对于配置项如果没有读到,在启动时则会报错,比如我们将刚才咱们定义的自定义项给注释掉:

启动服务器时就会报:

所以,为了解决自定义配置木有读到时报错的问题,这里其实可以加个默认值,如下:

集成热部署:

目前有一个问题,就是我们只要改动一点小代码,都需要重启服务器才能够生效对吧,很明显这种方式很影响效果,有木有一种方式能不用重启代码也能生效呢?答案就是集成热部署,下面来看一下如何集成。

引入依赖包:

先添加依赖,在这:

同步一下,此时你会发现这里的依赖库木有指定版本对吧?其实它是依赖于parent的版本的,也就是:

点击它跟进去看一下:

又有一个parent,再跟进去:

开启静态自动编译:

接下来需要到这进行开启:

开启动态自动编译:

这个开启是通过双击Shift键,打开下面这个窗口找它

注意是找Registry,而不是Register哟,然后点击就会到这个界面:

由于我是使用的IntelliJ IDEA是2021版的,而如果比它要老的版本关于这块设置可能是在这块:

这块可以根据自己IDE的情况来选择。

测试效果:

至此,热部署就已经配置好了,接下来咱们重启一下程序,然后看一下效果:

可以看到在启动服务器之后,再修改代码时,只需要重启点击它就可以触发重新编译而不用重启服务器:

或者按保存也可以触发热部署,具体喜欢哪个可以根据自己的喜爱,这样就可以大大的加快开发测试的效率了。 

总结:

这次Springboot的入门篇主要是在搞环境配置了,具体接口的编写就放到下次继续了。 

 关注个人公众号,获得实时推送

相关文章:

Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<一>---Spring Boot项目搭建

前言&#xff1a; 接下来又得被迫开启新的一门课程的学习了&#xff0c;上半年末尾淘汰又即将拉开序幕【已经记不清经历过多少次考试了】&#xff0c;需要去学习其它领域的技术作为考试内容&#xff0c;我选了spring boot相关技术&#xff0c;所以。。总之作为男人&#xff0c…...

leetcode 11~20 学习经历

LeetCode 习题 11 - 2011. 盛最多水的容器12. 整数转罗马数字13. 罗马数字转整数14. 最长公共前缀15. 三数之和16. 最接近的三数之和17. 电话号码的字母组合18. 四数之和19. 删除链表的倒数第 N 个结点20. 有效的括号小结11. 盛最多水的容器 给定一个长度为 n 的整数数组 heigh…...

LeetCode 双周赛 98,脑筋急转弯转不过来!

本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 提问。 大家好&#xff0c;我是小彭。 昨晚是 LeetCode 第 98 场双周赛&#xff0c;你参加了吗&#xff1f;这场周赛需要脑筋急转弯&#xff0c;转不过来 Medium 就会变成 Hard&#…...

函数的栈帧的创建和销毁

文章目录本章主题&#xff1a;一.什么是函数栈帧1.什么是栈2.什么是函数栈帧二.理解函数栈帧能解决什么问题呢&#xff1f;三.函数栈帧的创建和销毁解析1.预备知识&#xff08;1&#xff09; 认识相关寄存器和汇编指令&#xff08;2&#xff09;栈帧空间的维护2.解析函数栈帧的…...

python filtermapreducezip

一、filter 过滤 filter 过滤&#xff0c; 从可迭代对象中&#xff0c;筛选出满足条件的元素&#xff0c;再将这些满足条件的元素&#xff0c;组成一个新的可迭代对象。 方式一&#xff1a;filter(过滤方法&#xff0c;可迭代对象&#xff09; 举例&#xff1a;将一个list中…...

Centos7搭建hadoop3.3.4分布式集群

文章目录1、背景2、集群规划2.1 hdfs集群规划2.2 yarn集群规划3、集群搭建步骤3.1 安装JDK3.2 修改主机名和host映射3.3 配置时间同步3.4 关闭防火墙3.5 配置ssh免密登录3.5.1 新建hadoop部署用户3.5.2 配置hadoopdeploy用户到任意一台机器都免密登录3.7 配置hadoop3.7.1 创建目…...

骨传导耳机工作原理,骨传导耳机优缺点

骨传导耳机虽说最近是十分火爆的一款单品&#xff0c;但还是有很多人对骨传导耳机不是很了解&#xff0c;骨传导耳机更多使用场景还是在户外运动使用&#xff0c;骨传导耳机对于长时间使用耳机的人来说十分友好&#xff0c;这主要还是得益于骨传导耳机传输声音的特殊性。 下面我…...

IDEA高效插件和设置

安装好Intellij idea之后&#xff0c;进行如下的初始化操作&#xff0c;工作效率提升十倍。 一. 安装插件 1. Codota 代码智能提示插件 只要打出首字母就能联想出一整条语句&#xff0c;这也太智能了&#xff0c;还显示了每条语句使用频率。 原因是它学习了我的项目代码&…...

Linux之网络流量监控工具ntopng YUM安装

一、ntopng简介 Ntop是一种监控网络流量工具&#xff0c;用ntop显示网络的使用情况比其他一些网络管理软件更加直观、详细。Ntop甚至可以列出每个节点计算机的网络带宽利用率。他是一个灵活的、功能齐全的&#xff0c;用来监控和解决局域网问题的工具&#xff1b;尤其当ntop与n…...

创建虚拟机,安装CentOS

在VMware上面创建虚拟机 文件->新建虚拟机 选定 自定义的高级&#xff0c;下一步 下一步 检查选定稍后安装操作系统 下一步 选择Linux&#xff0c;CentOS 7 64位 创建虚拟机名称&#xff0c;以及在存放该虚拟机的位置 选择处理器的数量和每个处理器的内核数量 …...

ilasm 和 ildasm编译和反编译工具介绍使用教程

目录前言一、使用 ildasm 反编译 dll 文件二、使用 ilasm 将il文件编译成 dll 或 exe 文件前言 文本讲述怎么通过 ildasm 工具将 dll 文件进行反编译为 il 文件&#xff0c;修改 il 文件后再如何通过 ilasm 工具将 il 文件反编译成 dll 或 exe 文件。 ildasm工具&#xff1a;…...

代码随想录【Day20】| 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树

654. 最大二叉树 题目链接 题目描述&#xff1a; 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最…...

C++空指针和野指针

空指针&#xff1a;指针被赋值为空 例如&#xff1a; int* p nullptr;int* p NULL; 空指针指向的地址是00000000&#xff0c;但空指针不可以解引用 野指针&#xff1a;指针指向了不可控的位置 例如&#xff1a; 未初始化 int* p; //野指针 越界访问 int intArr[5]{0, 1, …...

LinkedList正确的遍历方式-附源码分析

1.引子 记得之前面试过一个同学&#xff0c;有这么一个题目&#xff1a; LinkedList<String> list new LinkedList<>();for (int i 0; i < 1000; i) {list.add(i "");}请根据上面的代码&#xff0c;请选择比较恰当的方式遍历这个集合&#xff0c;并…...

【蓦然回首忆Java·基础卷Ⅱ】

文章目录对象内存解析方法的参数传递机制关键字&#xff1a;package、importpackage(包)JDK中主要的包介绍import(导入)JavaBeanUML类图继承的一些细节封装性中的4种权限修饰关键字&#xff1a;supersuper的理解super的使用场景子类中调用父类被重写的方法子类中调用父类中同名…...

Mybatis源码分析系列之第二篇:Mybatis的数据存储对象

前言&#xff1a;SQLSession是对JDBC的封装 一&#xff1a;SQLSession和JDBC的对照说明 左边是我们的客户端程序&#xff0c;右边是我们的MySQL数据仓&#xff0c;或者叫MySQL实例 Mybatis是对JDBC的封装&#xff0c;将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…...

防护设备检测实验室建设完整方案SICOLAB

防护设备检测实验室建造布局方案SICOLAB一、防护设备检测实验室通常需要划分为几个功能区域&#xff0c;包括&#xff1a;1、样品准备区&#xff1a;用于样品的接收、处理、准备等工作&#xff0c;通常包括样品接收台、洗手池、样品切割机等设备。2、实验操作区&#xff1a;用于…...

Linux知识之主机状态

1、查看系统资源占用 •可以通过top命令查看CPU、内存使用情况&#xff0c;类似Windows的任务管理器默认每5秒刷新一次&#xff0c;语法&#xff1a;直接输入top即可&#xff0c;按q或ctrl c退出 2、 top命令内容详解 •第一行&#xff1a;top&#xff1a;命令名称&#xff0…...

是时候为您的银行机构选择构建一个知识库了!

知识管理和自助服务客户支持在银行业至关重要。选择正确的知识库对于帮助客户和在内部共享信息同样重要。繁重的法规和合规性需求意味着银行必须在他们选择的知识库类型上投入大量思考。许多银行知识库已经过时&#xff0c;无法为客户提供成功使用您的产品和服务所需的信息。在…...

「TCG 规范解读」第7章 TPM工作组 TPM 总结

可信计算组织&#xff08;Ttrusted Computing Group,TCG&#xff09;是一个非盈利的工业标准组织&#xff0c;它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立&#xff0c;并采纳了由可信计算平台联盟&#xff08;the Trusted Computing Platform Alli…...

VR视角下,浙西南革命的热血重生​

VR 浙西南革命项目依托先进的 VR 技术&#xff0c;为浙西南革命历史的展示开辟了一条全新的道路 &#xff0c;打破了时间与空间的限制&#xff0c;使革命历史变得触手可及。​ &#xff08;一&#xff09;沉浸式体验革命场景​ 借助 VR 技术&#xff0c;在 VR 浙西南革命的展示…...

OpenGL Chan视频学习-9 Index Buffers inOpenGL

bilibili视频链接&#xff1a; 【最好的OpenGL教程之一】https://www.bilibili.com/video/BV1MJ411u7Bc?p5&vd_source44b77bde056381262ee55e448b9b1973 函数网站&#xff1a; docs.gl 说明&#xff1a; 1.之后就不再单独整理网站具体函数了&#xff0c;网站直接翻译会…...

大模型深度学习之双塔模型

前言 双塔模型&#xff08;Two-Tower Model&#xff09;是一种在推荐系统、信息检索和自然语言处理等领域广泛应用的深度学习架构。其核心思想是通过两个独立的神经网络&#xff08;用户塔和物品塔&#xff09;分别处理用户和物品的特征&#xff0c;并在共享的语义空间中通过相…...

鸿蒙OSUniApp 制作倒计时与提醒功能#三方框架 #Uniapp

使用 UniApp 制作倒计时与提醒功能 前言 倒计时与提醒功能在移动应用中应用广泛&#xff0c;如活动秒杀、任务提醒、考试倒计时等。一个实用的倒计时组件不仅要精准计时&#xff0c;还要兼容多端&#xff0c;尤其是在鸿蒙&#xff08;HarmonyOS&#xff09;等新兴平台上保证流…...

BPE、WordPiece 与 Unigram:三种主流子词分词算法对比

BPE、WordPiece 与 Unigram&#xff1a;三种主流子词分词算法对比 在构建现代自然语言处理模型时&#xff0c;Tokenizer 是连接文本与模型之间的桥梁。而在 tokenizer 的设计中&#xff0c;BPE&#xff08;Byte Pair Encoding&#xff09;、WordPiece 和 Unigram 三种子词&…...

C#面向对象核心:类继承详解

类继承是什么&#xff1f; 继承是面向对象编程的三大特性之一&#xff0c;允许新类&#xff08;派生类&#xff09;基于已有类&#xff08;基类&#xff09;进行扩展。通过继承&#xff0c;派生类可以“免费”获得基类的字段、方法等成员&#xff0c;并添加自身独有的功能。 …...

宫格导航--纯血鸿蒙组件库AUI

摘要&#xff1a; 宫格导航(A_GirdNav)&#xff1a;可设置导航数据&#xff0c;建议导航项超过16个&#xff0c;可设置“更多”图标指向的页面路由。最多显示两行&#xff0c;手机每行最多显示4个图标&#xff0c;折叠屏每行最多6个图标&#xff0c;平板每行最多8个图标。多余图…...

SOC-ESP32S3部分:18-串口

飞书文档https://x509p6c8to.feishu.cn/wiki/NqrMw6X8Si6sSqkyPbxcFRxGnid UART全称是通用异步接收器/发送器&#xff0c;ESP32-S3 芯片有 3 个 UART 控制器。每个 UART 控制器可以独立配置波特率、数据位长度、位顺序、停止位位数、奇偶校验位等参数。 串口文档参考&#xf…...

湖北理元理律师事务所观察:债务优化如何成为民生安全网

据央行2023年报告&#xff0c;中国家庭债务收入比达137.8%。面对债务高压&#xff0c;湖北理元理律师事务所的实践揭示&#xff1a;专业债务规划的价值不仅是减负数字&#xff0c;更是构建社会稳定的微观防线。 一、从“催收恐惧”到“主动管理”的转变 该所服务数据显示&…...

STM32中,如何理解看门狗

在STM32微控制器中&#xff0c;看门狗&#xff08;Watchdog&#xff09;是一种硬件计时器&#xff0c;用于监控系统运行状态&#xff0c;防止软件死锁或跑飞。其核心机制是&#xff1a;系统需定期“喂狗”&#xff08;复位看门狗计数器&#xff09;&#xff0c;若未及时喂狗&am…...