01——springboot2基础知识

news2024/11/15 11:32:24

一、springboot的快速入门

  1. springboot的作用:用来简化Spring应用的初始搭建以及开发过程

一、idea创建springboot工程——运行的步骤

  1. 选择Spring Initializr进行创建(现在基本上没有jdk1.8选了,都是jdk17了,需要的话,可以先选jdk17初始化然后再手动修改回jdk1.8)
    在这里插入图片描述

  2. 选择该springboot工程需要的依赖(也可以后面再在maven的pom.xml文件中添加依赖)
    在这里插入图片描述

  3. 点击create创建工程后,然后可以先写一个控制器类(controller)

//Rest模式
@RestController
@RequestMapping("/hello")
public class HelloController {
    @GetMapping
    public String getById(){
        System.out.println("springboot is running...");
        return "springboot is running...";
    }
}
  1. 运行自动生成的Application类
  2. 然后访问(默认的端口是8080):http://localhost:8080/hello
  3. 可以访问成功就说明创建的springboot工程没有问题

一、1、 springboot工程的创建方式

  1. 上面的创建步骤是(idea基于SpringBoot官网创建项目,地址:https://start.spring.io/)
  2. 可以修改网址,基于不同的官网进行创建项目,比如阿里云的:(基于阿里云创建项目,地址:https://start.aliyun.com)
  3. 也可以直接在spring官网下创建springboot项目:(这方法会下载一个压缩包给你)
    在这里插入图片描述
  4. 也可以直接创建一个maven工程然后再把它改造成一个springboot工程
      1. 手工创建一个maven项目(然后手工导入springboot需要的坐标)
        在这里插入图片描述
      1. 手工创建项目(手工制作引导类)
        在这里插入图片描述

一、2、 idea隐藏指定文件

  1. Idea中隐藏指定文件或指定类型文件(就是我们一般打开一个项目会有很多的
    • Setting → File Types → Ignored Files and Folders
    • 输入要隐藏的文件名,支持*号通配符
    • 回车确认添加

在这里插入图片描述

一、3、 springboot相对于spring的优点

  1. SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。
  2. Spring程序缺点
    • 依赖设置繁琐
    • 配置繁琐
  3. SpringBoot程序优点
    • 起步依赖(简化依赖配置)
    • 自动配置(简化常用工程相关配置)
    • 辅助功能(内置服务器,……)
  4. 四个方面:
      1. parent
      1. starter
      1. 引导类
      1. 辅助功能(内嵌tomcat:只是辅助功能的其中之一)

一、3.1、 springboot相对于spring的优点-parent(parent只是定义,并未使用)

  1. 结论:

      1. 开发SpringBoot程序要继承spring-boot-starter-parent
      1. spring-boot-starter-parent中定义了若干个依赖管理
      1. 继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突
      1. 继承parent的形式也可以采用引入依赖的形式实现效果
  2. 使用:我们直接使用对应的依赖就行,无需写版本(底层会为你自动调用版本了)。依赖的版本会根据你使用的springboot版本的不同而不同。

    • 在spring-boot-dependencies里面:
        1. 定义一系列的常用坐标版本
        1. 定义一系列的常用坐标组合
        1. 直接使用组合(底层实现的)

只需写成下图这样即可:
在这里插入图片描述

一、3.1.1、 springboot相对于spring的优点-parent与starter
  1. starter

      1. 是一个坐标中定了若干个坐标,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的
  2. parent

    • 所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理dependencyManagement,而非依赖),以达到减少依赖冲突的目的
    • spring-boot-starter-parent各版本间存在着诸多坐标版本不同
  3. 实际开发

    • 如果有对应的starter,使用任意坐标时,仅书写GAV(G:groupId,A:atifactId,V:version)中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V
    • 如发生坐标错误,再指定Version(要小心版本冲突)
    • 如果没有对应的starter,则直接手写坐标
  4. parent与starter都是解决配置问题的

一、3.2、 springboot相对于spring的优点-starter

  1. 总结
      1. 开发SpringBoot程序需要导入坐标时通常导入对应的starter
      1. 每个不同的starter根据功能不同,通常包含多个依赖坐标
      1. 使用starter可以实现快速配置的效果,达到简化配置的目的
  2. 一个starter里面包含了若干个坐标定义的pom管理文件
    在这里插入图片描述
    在这里插入图片描述

一、3.3、 springboot相对于spring的优点-引导类

  • SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(IoC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。
  • 换了SpringBoot加速开发Spring程序后,这个引导类运行后就会产生一个Spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。
  • 引导类最典型的特征就是当前类上方声明了一个注解@SpringBootApplication
  1. 引导类:
    在这里插入图片描述
  2. SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目(但未启动web服务器
    • Spring Boot的引导类(通常带有@SpringBootApplication注解的类)的main方法确实会启动Spring Boot应用,但默认情况下,它不会启动嵌入式Web服务器。
    • 在Spring Boot中,@SpringBootApplication注解是一个组合注解,它包含了@Configuration@EnableAutoConfiguration@ComponentScan三个注解。当Spring Boot应用启动时,它会根据这些注解来初始化Spring应用上下文(ApplicationContext)。
    • 然而,要启动嵌入式Web服务器(如Tomcat),还需要一些额外的配置。默认情况下,Spring Boot会尝试自动配置一个嵌入式Web服务器,但只有在检测到某些条件满足时(例如,存在@RestController@Controller注解的类)才会启动。
    • 如果你希望在没有Web控制器的情况下启动Spring Boot应用,你可以通过以下方式配置嵌入式Web服务器:
  • 显式配置嵌入式Web服务器:在application.propertiesapplication.yml文件中添加以下配置:

    server.port=8080
    

    这将启动嵌入式Web服务器并监听8080端口。

  • 使用@EnableAutoConfiguration排除Web服务器:如果你不希望启动嵌入式Web服务器,可以在@SpringBootApplication注解中排除WebServerFactoryAutoConfiguration类:

    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
    import org.springframework.boot.autoconfigure.web.servlet.WebServerFactoryAutoConfiguration;
    
    @SpringBootApplication(exclude = {WebServerFactoryAutoConfiguration.class, WebMvcAutoConfiguration.class})
    public class MySpringBootApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MySpringBootApplication.class, args);
        }
    }
    

    Spring Boot将不会尝试启动嵌入式Web服务器。

  • Spring Boot的引导类会启动Spring应用上下文,但默认情况下不会启动嵌入式Web服务器。要启动Web服务器,需要额外的配置。

  1. SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

  2. 结论:

      1. SpringBoot工程提供引导类用来启动程序
      1. SpringBoot工程启动后创建并初始化Spring容器

一、3.4、 springboot相对于spring的优点-辅助功能(内嵌tomcat)

  1. tomcat是拿java代码写的,它里面有好多的jar包。java语言是靠什么运行的(靠对象运行的),那么就可以把对象交给spring管理了。它将一个tomcat容器的执行过程抽取出来,变成一个对象,然后把这个对象交给spring管理。(即spring容器中有一个tomcat对象,你现在要运行的东西,需要在tomcat对象里面去运行)。这就是为什么我们的程序中没有装tomcat服务器还能启动起来tomcat的原因

在这里插入图片描述
在这里插入图片描述

  1. springboot三款内置服务器:

    • tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件
    • jetty:更轻量级,负载性能远不及tomcat
    • undertow:undertow,负载性能勉强跑赢tomcat
  2. 总结:

      1. 内嵌Tomcat服务器是SpringBoot辅助功能之一
      1. 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理
      1. 变更内嵌服务器思想是去除现有服务器,添加全新的服务器

一、4、springboot的基础配置(配置文件)

  1. SpringBoot默认配置文件application.properties,通过键值对配置对应属性
  2. SpringBoot中导入对应starter(依赖坐标)后,提供对应配置属性
  3. 书写SpringBoot配置采用关键字+提示形式书写
  4. SpringBoot提供了多种属性配置方式
    • properties(传统格式/默认格式)
    • yml(主流格式)
    • yaml
      在这里插入图片描述
  5. SpringBoot配置文件加载顺序:
    • application.properties > application.yml > application.yaml
    • 不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

一、4.1、springboot的基础配置(配置文件)—yaml

  1. YAML(YAML Ain’t Markup Language),一种数据序列化格式。

    • 优点:
      • 容易阅读
      • 容易与脚本语言交互
      • 以数据为核心,重数据轻格式
    • YAML文件扩展名
      • .yml(主流
      • .yaml
  2. yaml语法规则

    • 大小写敏感
    • 属性层级关系使用多行描述,每行结尾使用冒号结束
    • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
    • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
    • #表示注释
    • 数据前面要加空格与冒号隔开
  3. 字面值表示方式

boolean: TRUE #TRUE,true,True,FALSE,false,False均可
float: 3.14 #6.8523015e+5 #支持科学计数法
int: 123 #0b1010_0111_0100_1010_1110 #支持二进制、八进制、十六进制
null: ~ #使用~表示null
string: HelloWorld #字符串可以直接书写
string2: "Hello World" #可以使用双引号包裹特殊字符
date: 2018-02-17 #日期必须使用yyyy-MM-dd格式
datetime: 2018-02-17T15:02:31+08:00 #时间和日期之间使用T连接,最后使用+代表时区
  1. 数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔
subject:
 - Java
 - 前端
 - 大数据
enterprise:
 name: itcast
 age: 16
subject:
 - Java
 - 前端
 - 大数据
 - 
likes: [王者荣耀,刺激战场] #数组书写缩略格式
users: #对象数组格式
 - name: Tom
   age: 4
 - name: Jerry
   age: 5
users: #对象数组格式二
-
 name: Tom
 age: 4
-
 name: Jerry
 age: 5 

#对象数组缩略格式
users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]
一、4.1.1、springboot的基础配置(配置文件)—yaml多环境配置多文件版

在这里插入图片描述

  1. 对于开发环境、测试环境、生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配置,将环境的配置改为线上环境的。
    在这里插入图片描述
  2. 来回的修改配置会很麻烦,而 SpringBoot 给开发者提供了多环境的快捷配置,需要切换环境时只需要改一个配置即可。不同类型的配置文件多环境开发的配置都不相同。
  • 文件的命名规则为:application-环境名.yml。
    • 主配置文件中设置公共配置(全局)
    • 境分类配置文件中常用于设置冲突属性(局部)
  • application.yml(主配置文件)
# 主配置文件,决定使用下面三种环境的哪一个
#设置启用的环境
spring:
	profiles:
		active: dev #表示使用的是开发环境的配置
  • application-dev.yml(开发环境)
#开发
server:
	port: 80
  • application-prod.yml(生产环境)
#生产
server:
	port: 81
  • application-test.yml(测试环境)
#测试
server:
	port: 82
一、4.1.2、配置文件分类
  1. SpringBoot提供的4级配置文件分别是:

    • 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件):服务于开发人员本机开发与测试
    • 类路径下config目录下配置文件:服务于项目经理整体调控
    • 程序包(打包好的工程)所在目录中配置文件:服务于运维人员配置涉密线上环境
    • 程序包(打包好的工程)所在目录中config目录下配置文件:服务于运维经理整体调控
  2. 4种配置文件如果都存在的话,有一个优先级的问题,4个文件的加载优先顺序为:

      1. file :config/application.yml 【最高】
      1. file :application.yml
      1. classpath:config/application.yml
      1. classpath:application.yml 【最低】
  3. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序

一、4.2、springboot的基础配置(配置文件)—yaml数据读取

  1. 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}
    在这里插入图片描述
  2. 配置文件中可以使用属性名引用方式引用属性
    在这里插入图片描述
  3. 属性值中如果出现转移字符,需要使用双引号包裹,特殊字符才能生效。
lesson: "Spring\tboot\tlesson"

# \t表示制表符
# 注入lesson的值后,lesson = Spring boot lesson
  1. 读取yml的全部属性:封装全部数据到Environment对象

    • 数据封装到了Environment对象中,获取属性时,通过Environment的接口操作进行,具体方法是getProperty(String),参数填写属性名即可
      在这里插入图片描述
  2. 读取yml的部分属性:(最实用)

      1. 在yml配置文件中提供数据
      1. 然后提供一个封装数据的模型类(用来封装我们定义的数据,注意:封装类的属性名应该和yml文件配置的属性名一致
      1. 这个封装类必须受spring控制(封装类需要定义为Spring管理的bean,否则无法进行属性注入)
      1. 通过springboot的@ConfigurationProperties注解绑定配置信息到封装类中
        在这里插入图片描述

二、springboot整合junit

  1. 导入测试对应的starter(使用idea创建springboot工程默认会导入的)
  2. 测试类使用@SpringBootTest修饰(使用idea创建springboot工程默认会创建的)
  3. 使用自动装配的形式添加要测试的对象(使用@Autowire注解)
    在这里插入图片描述
    在这里插入图片描述

二、1、springboot整合junit——classes

  1. 测试类如果存在于引导类所在包或子包中无需指定引导类
  2. 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类
    在这里插入图片描述

三、springboot整合mybatis

  1. 整合MyBatis
    • 核心配置:数据库连接相关信息(连什么?连谁?什么权限)
    • 映射配置:SQL映射(XML/注解)
大概要干嘛:
1. 勾选MyBatis技术,也就是导入MyBatis对应的starter
2. 数据库连接相关信息转换成配置文件的配置信息
3. 数据库SQL映射需要添加@Mapper被容器识别到

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 步骤:
    • ①:创建新模块,选择Spring初始化,并配置模块相关基础信息
    • ②: 选择当前模块需要使用的技术集(MyBatis、MySQL)
    • ③:设置数据源参数
    • ④:定义数据层接口与映射配置
    • ⑤:测试类中注入dao接口,测试功能

①:创建新模块,选择Spring初始化,并配置模块相关基础信息
在这里插入图片描述
②: 选择当前模块需要使用的技术集(MyBatis、MySQL)
在这里插入图片描述
③:设置数据源参数
在这里插入图片描述

④:定义数据层接口与映射配置
在这里插入图片描述

⑤:测试类中注入dao接口,测试功能
在这里插入图片描述

三、1、@Mapper注解

  1. @Mapper: 这个注解一般使用在Dao层接口上,相当于一个mapper.xml文件,它的作用就是将接口生成一个动态代理类。加入了@Mapper注解,目的就是为了不再写mapper映射文件。这个注解就是用来映射mapper.xml文件的。

  2. 使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入ServiceImpl中.

注意:
在Dao层不要存在相同名字的接口,也就是在Dao不要写重载。
因为mapper文件是通过id与接口进行对应的,如果写了两个同名的接口,就会导致mapper文件映射出错。
  • @Mapper注解是MyBatis框架中的注解之一,它的作用是将一个Java接口标记为一个Mapper接口,使得MyBatis可以自动地为这个接口生成代理对象。在MyBatis 3.4.0版本之前,我们需要手动编写Mapper接口的实现类,而在3.4.0版本之后,只需要在Mapper接口上添加@Mapper注解,MyBatis就会自动为我们生成实现类。
    • 需要注意的是,@Mapper注解只能用于接口上,不能用于类上。

三、2、@mysql8.x版本注意

  1. MySQL 8.X驱动强制要求设置时区
    • 修改url,添加serverTimezone设定
    • 修改MySQL数据库配置(略)
  2. 数据库驱动过时的警告,根据提示修改配置即可,弃用com.mysql.jdbc.Driver,换用com.mysql.cj.jdbc.Driver

四、springboot整合mybatis-Plus

在这里插入图片描述

  1. 步骤:(需要使用的第三方技术无法通过勾选确定时,需要手工添加坐标

      1. 手工添加MyBatis-Plus对应的starter
      1. 数据层接口使用BaseMapper简化开发
      1. 写测试类
  2. 具体操作:
    ①手工添加MyBatis-Plus对应的starter
    在这里插入图片描述

② yml的配置
在这里插入图片描述
③数据层接口使用BaseMapper简化开发
在这里插入图片描述
④测试类:
在这里插入图片描述

五、springboot整合druid

  1. 整合第三方技术通用方式
    - 1. 导入对应的starter(即对应的依赖)
    - 2. 根据提供的配置格式,配置非默认值对应的配置项(yml配置文件)

在这里插入图片描述

  1. 整合druid步骤:
      1. 整合Druid需要导入Druid对应的starter
      1. 根据Druid提供的配置方式进行配置
      1. 编写测试类

①整合Druid需要导入Druid对应的starter
在这里插入图片描述
②根据Druid提供的配置方式进行配置

在这里插入图片描述

③测试
在这里插入图片描述

总结

  • 上面整合的几个模块,其实都是类似的步骤:
      1. 添加依赖
      1. 编写配置文件
      1. 编写业务代码
  • 可以发现使用springboot整合技术相比spring真的简化了很多了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2159424.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用四叉树碰撞的游戏 显微镜RPG

实现四叉树碰撞检测 //author bilibili 民用级脑的研发记录 // 开发环境 小熊猫c 2.25.1 raylib 版本 4.5 // 2024-7-14 // AABB 碰撞检测 在拖拽,绘制,放大缩小中 // 2024-7-20 // 直线改每帧打印一个点,生长的直线,直线炮弹 /…

Matplotlib-数据可视化详解

1. 数据可视化简介 可视化介绍 数据可视化是指直观展现数据,它是数据处理过程的一部分。 把数值绘制出来更方便比较。借助数据可视化,能更直观地理解数据,这是直接查看数据表做不到的 数据可视化有助于揭示数据中隐藏的模式,数据…

HDFS分布式文件系统01-HDFS架构与SHELL操作

HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…

三篇文章速通JavaSE到SpringBoot框架 上 JavaSE基础语法

文章目录 前置环境变量基本数据类型引用数据类型标识符运算符 流程控制三种基本流程结构 方法方法声明格式方法的调用方式方法的重载方法的重写重载和重写的区别 数组数组的特点 面向对象基本概念类的编写和对象的创建与使用类的编写对象的创建和使用 构造器构造器特点 封装以属…

55 循环神经网络RNN的实现_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络的从零开始实现[**独热编码**]初始化模型参数循环神经网络模型预测[**梯度裁剪**]训练小结练习 循环神经网络的从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l i…

玄机靶场--蚁剑流量

木马的连接密码是多少 黑客执行的第一个命令是什么 id 黑客读取了哪个文件的内容,提交文件绝对路径 /etc/passwd 黑客上传了什么文件到服务器,提交文件名 黑客上传的文件内容是什么 黑客下载了哪个文件,提交文件绝对路径 蚁剑流量特征总结 …

proteus仿真(2)

一,配置编译器 可以在proteus中写stm32的代码,需要先检查是否配置了keil的编译器 选择调试,编译器配置 stm32为ARM版本 51为8051版本 如果已经配置了keil—arm,但是打开没有,可以选择检查当前,刷新一下。 …

【有啥问啥】多臂老虎机(Multi-Armed Bandit,MAB)算法详解

多臂老虎机(Multi-Armed Bandit,MAB)算法详解 1. 引言 多臂老虎机(Multi-Armed Bandit,MAB)问题源自概率论和决策论,是一个经典的决策优化问题。最早提出的形式是赌场中的老虎机问题&#xff…

若依vue3.0表格的增删改查文件封装

一、因若依生成的文件没进行封装,维护起来比较麻烦。所以自己简单的进行封装了一下 gitee代码(文件)地址:https://gitee.com/liu_yu_ting09/ruo_yi.git 二、封装的方法(下面绿色按钮进行全局封装一个JeecgListMixin.js…

【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)

导读大纲 1.1.1 从 Java 调用扩展函数1.1.2 扩展函数无法重载 1.1.1 从 Java 调用扩展函数 在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数 调用它不涉及创建适配器对象或任何其他运行时开销这使得从 Java 使用扩展函数变得非常简单 调用静态方法并传…

《深度学习》卷积神经网络CNN 实现手写数字识别

目录 一、卷积神经网络CNN 1、什么是CNN 2、核心 3、构造 二、案例实现 1、下载训练集、测试集 代码实现如下: 2、展示部分图片 运行结果: 3、图片打包 运行结果: 4、判断当前使用的CPU还是GPU 5、定义卷积神经网络 运行结果&a…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.3-2.4

目录 第四门课 卷积神经网络(Convolutional Neural Networks)第二周 深度卷积网络:实例探究(Deep convolutional models: case studies)2.3 残差网络(ResNets)(Residual Networks (ResNets))2.4 残差网络为什么有用&am…

武汉正向科技 格雷母线检测方式 :车检,地检

正向科技|格雷母线原理运用-车检,地检 地上检测方式 地址编码器和天线箱安装在移动站上,通过天线箱发射地址信号,地址解码器安装在固定站(地面)上,在固定站完成地址检测。 车上检测方式 地址编码器安装在…

【OpenCV】场景中人的识别与前端计数

1.OpenCV代码设计讲解 突发奇想,搞个摄像头,识别一下实验室里面有几个人,计数一下(最终代码是累加计数,没有优化),拿OpenCV来玩一玩 首先,还是优先启动电脑摄像头,本项…

react hooks--useCallback

概述 useCallback缓存的是一个函数,主要用于性能优化!!! 基本用法 如何进行性能的优化呢? useCallback会返回一个函数的 memoized(记忆的) 值;在依赖不变的情况下,多次定义的时候,返回的值是…

MySQL record 07 part

索引 注意,是排序,有序就会加快查找的速度。 优势: 劣势 索引会单独占用存储空间索引虽然可以提高排序和查找的速度,但同时也会降低更新、删除、新增数据的速度,因为MySQL此时既要更改表,也要维护更改表后…

ubuntu安装无线网卡驱动(非虚拟机版)

本文不是基于虚拟机,是双系统 太夸张了 实验室居然没网线 只有一个师兄留下来的无线网卡 装完了ubuntu结果没网 make都用不了 然后搜了下大概发现是没有预装gcc和make 参考如下 https://zhuanlan.zhihu.com/p/466440088 https://wwsk.lanzouj.com/iAj4t2ao46zc…

电脑配置不够,想玩老头环可以上ToDesk云电脑体验一下

最近,《艾尔登法环》游戏更新了好多新东西,让玩家特别兴奋。比如说,FromSoftware工作室一直在改进游戏,让游戏运行得更稳、更流畅。而且,《艾尔登法环:黄金树幽影》这个扩展包一出,游戏世界变得…

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘attribute‘

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

调用JS惰性函数问题

第一次调用这个函数时 console.log(a) 会被执行,打印出 a,全局变量 a 被重定义并被赋予了新的函数,当再一次调用时,console.log(b) 被执行。 用处:因为各浏览器之间的行为差异,经常会在函数中包含了大量的…