Spring Boot基础篇

news2024/11/15 23:03:25

快速上手

        SpringBoot是由Pivotal团队提高的全新框架,其设计目的是用来简化Spring应用的初始化搭建以及开发过程

入门案例

在Idea创建

        创建时要选择Spring Initializr。

        Server URL为要连接的网站,默认为官网start.spring.io(访问速度慢,可能会经常失败),可以使用阿里云的start/aliyun.com

        name为项目名,Language选择Java,Type选择Maven,JDK版本要与Java版本相对应(java >= JDK),打包方式选择jar包

        Spring Boot为使用的版本,创建后还可以更改,可以直接选择所要加入的依赖。现在创建一个最简单的案例,只需要勾选Spring Web即可

        创建后工程只需要创建一个Controller类,加上注解即可直接运行

@RestController
@RequestMapping("/hero")
public class HeroController {

    @RequestMapping("/index")
    public String index(){
        return "index";
    }

}

在网站创建

        工程除了可以在Idea创建,还可以在网站创建。访问Spring Boot官网https://start.spring.io(访问速度可能会比较慢)或访问阿里云的https://start.aliyun.com

         Java版本可以在高级选项里选择。获取代码后将其解压后即可使用Idea打开

 创建工程后导入

        导入坐标

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.GLATY</groupId>
    <artifactId>StudySpringBoot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

        写引导类

        类上要加@SpringBootApplication注解

@SpringBootApplication
public class StudySpringBootApplication {

    public static void main(String[] args) {
        SpringApplication.run(StudySpringBootApplication.class, args);
    }

}

入门案例解析

parent

        开发SpringBoot程序要继承spring-boot-starter-parent

        spring-boot-starter-parent中定义了若干个依赖管理

        继承parent模块可以避免多个依赖使用相同技术时出现依赖版本冲突

        继承parent的形式也可以采用引入依赖的形式实现效果

        parent是SpringBoot中常见项目名称,定义了当前项目使用的所有依赖坐标,以达到减少依赖配置的目的。也就是配置好版本,可以直接使用

        spring-boot-starter-parent各版本间存在着诸多坐标版本不同,如发生坐标错误,再指定Version(要小心版本冲突)

starter

        使用starter可以实现快速配置的效果,达到简化配置的目的

        starter是所有SpringBoot项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的。也就是在导入坐标时会帮你调用parent中的版本

        使用任意坐标时,仅书写GAV中的G和A,V由SpringBoot提供,除非SpringBoot未提供对应版本V

引导类

        SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目

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

内嵌Tomcat

        内嵌Tomcat服务器是SpringBoot辅助功能之一

        在Spring中内嵌了Tomcat,其运行原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理。同时也方便更改服务器。

        变更内嵌服务器思想是去除现有服务器,添加全新的服务 器
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <!--排除Tomcat服务器-->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!--添加Jetty起步依赖,版本由SpringBoot的starter控制-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
</dependencies>

        内置服务器除了tomcat还有jetty和undertow

tomcat:apache出品,应用面广,负载了若干较重的组件

jetty:更轻量级、负载性能远不及tomcat

undertow:undertow,负载性能勉强跑赢tomcat

基础配置

属性配置

        SpringBoot默认配置文件application.properties,通过键值对配置对应属性

修改服务器端口
server.port=80

 关闭运行日志图标(banner) 

spring.main.banner-mode=off

设置日志相关

logging.level.root=debug
        pringBoot内置属性查询,参考  官方文档

SpringBoot中导入对应starter后,提供对应配置属性

书写SpringBoot配置采用关键字+提示形式书写

配置文件分类

        SpringBoot提供了多种属性配置方式

        1.application.properties(传统格式/默认格式):

server.port=80

        2.application.yml(主流格式):

server:
  port: 81

        3.application.yaml:

server:
  port: 82

        配置文件间的加载优先级properties最高,yaml最低。不同配置文件中相同配置按照加载优先级相互覆盖,不同 配置文件中不同配置全部保留

yaml文件

        yaml

        YAML(YAML Ain't Markup Language),一种数据序列化格式
                优点:
                        容易阅读
                        容易与脚本语言交互
                        以数据为核心,重数据轻格式
        YAML文件扩展名
                .yml(主流)
                .yaml

        yaml语法规则

        大小写敏感

        属性层级关系使用多行描述,每行结尾使用冒号结束

        使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)

        属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)

        # 表示注释

        核心规则:数据前面要加空格与冒号隔开

         字面值表示方式

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连接,最后使用+代表时区

        数组表示方式:在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

subject:
  - Java
  - 前端
  - 大数据
enterprise:
  name: itcast
  age: 16
  subject:
    - Java
    - 前端
    - 大数据
# 数组书写缩略格式
likes: [ 永劫无间,植物大战僵尸 ]


# 对象数组格式
user1:
  - name: Tom
    age: 4
  - name: Jerry
    age: 5
# 对象数组格式二
user2:
  -
    name: Tom
    age: 4
  -
    name: Jerry
    age: 5
# 对象数组缩略格式
users: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]

 yaml数据读取

        使用@Value配合SpEL读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

@Value("${user1.name}")
int name;

@Value("${like[1]}")
String like;

        在配置文件中可以使用属性名引用方式引用属性

baseDir: /usr/local/fire
center:
  dataDir: ${baseDir}/data
  tmpDir: ${baseDir}/tmp
  logDir: ${baseDir}/log
  msgDir: ${baseDir}/msgDir

        属性值中如果出现转移字符,需要使用双引号包裹

lesson: "Spring\tboot\nlesson"
        将全部数据封装到Environment对象,使用时调用该对象的getProperty()方法
//作用自动装配将所有数据封装到一个对象中
@Autowired
Environment environment;

@RequestMapping("/index")
public String index(){
    System.out.println(environment.getProperty("server.port"));
    return "index";
}
        自定义对象封装指定数据
@Component  //将对象交给bean管理
@ConfigurationProperties(prefix = "datasource")  //指定加载的数据
public class UseDataSource {
    private String drive;
    private String url;
    private String username;
    private String password;
    // ......
}

整合第三方技术

        通用方式:先导入对应的starter,然后根据提供的配置格式配置非默认值对应的配置项

整合JUnit

        1.导入测试对应的starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

        2.测试类使用@SpringBootTest修饰

@SpringBootTest(classes = StudySpringBootApplication.class)
class StudySpringBootApplicationTests {

    @Test
    void contextLoads() {
    }

}

*创建项目时就将junit到入的话测试类会自动创建好

*如果测试类在SpringBoot启动类的包或子包中,可以省略启动类的设置,也就是省略classes的设定

整合MyBatis

        1.导坐标(如果在创建工程的时候勾选后SpringBoot会将坐标自动导入)

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

        2.配置application文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/secondtable?serverTimezone=UTC
    username: root
    password: 123456

        3.在mapper接口上加上@Mapper注解

@Mapper
public interface HeroMapper {

    public Hero selectById(@Param("id") Integer id);

}

整合MyBatis-Plus

        MyBatis-Plus简称mp,在中国人自己制造的技术。

        MyBatis-Plus与MyBatis的区别:导入坐标不同、数据层实现简化

        SpringBoot中未收录MyBatis-Plus的坐标版本,需要指定对应的Version

        1.导入坐标

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

       2. 定义数据层接口与映射配置,继承BaseMapper(源码注释是汉语)

@Mapper
public interface HeroMapper extends BaseMapper<Hero> {

}

        其他同SpringBoot整合MyBatis

        MyBatis-Plus相关配置可以在application设置

#设置MyBatis-Plus相关配置
mybatis-plus:
  global-config:
    db-config:
      table-prefix: 

整合Druid

        导入坐标

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>

        配置application文件

#数据源通用配法
#spring:
#  datasource:
#    driver-class-name: com.mysql.cj.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/secondtable?serverTimezone=UTC
#    username: root
#    password: 123456
#    type: com.alibaba.druid.pool.DruidDataSource

#专用配发,建议使用
spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/secondtable?serverTimezone=UTC
      username: root
      password: 123456

SSMP整合

实体类快速开发(lombok)

        使用lombok可以快速开发实体类

        导入lombok坐标(lombok版本由SpringBoot提供,无需指定版本)

<!--lombok坐标,用于快速创建实体类-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

        创建实体类,加注解

@Data  //@Data注解为实体类在编译时期设置对应的get方法,set方法,toString方法,hashCode方法,equals方法等
@AllArgsConstructor
@NoArgsConstructor
public class Hero {
    private String name;
    private Integer id;
    private String codeName;
    private Integer ability;
}

数据层标准开发(基于CRUD)

搭建环境

        导入MyBatisPlus与Druid对应的starter

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.6</version>
</dependency>

        配置数据源与MyBatisPlus对应的基础配置(id生成策略使用数据库自增策略)

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/secondtable?serverTimezone=UTC
      username: root
      password: 123456

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

        mapper接口继承BaseMapper并指定泛型

@Mapper
public interface HeroMapper extends BaseMapper<Hero> {

}

*开启MP日志

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

分页查询

        分页操作是在MyBatisPlus的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现

        创建类编辑连接器

@Configuration
public class MPConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor() {
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}

        测试分页

@Test
void Testpage() {
    IPage page = new Page(1, 5);
    heroMapper.selectPage(page, null);
    System.out.println(page.getRecords());
    page.setCurrent(2);
    heroMapper.selectPage(page, null);
    System.out.println(page.getRecords());
}

条件查询

        使用QueryWrapper对象封装查询条件,推荐使用LambdaQueryWrapper对象,所有查询操作封装成方法调用

@Test
void Test2() {
    String name = "天";
    QueryWrapper<Hero> queryWrapper = new QueryWrapper<>();
    queryWrapper.like(name != null,"name", name);
    System.out.println(heroMapper.selectList(queryWrapper));
}
@Test
void Test3() {
    String name = "天";
    LambdaQueryWrapper<Hero> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.like(name != null,Hero::getName, name);
    System.out.println(heroMapper.selectList(queryWrapper));
}

业务层标准开发

基础CRUD

        Service层接口定义与数据层接口定义具有较大区别,不要混用

        定义接口

public interface HeroService {

    public boolean save(Hero hero);
    public boolean update(Hero hero);
    public boolean deleteById(Integer id);
    public Hero searchById(Integer id);
    public List<Hero> searchAllHero();
    public IPage<Hero> searchByPage(int currentPage, int pageSide);
}

        实现类定义

import java.util.List;

@Service
public class HeroServiceImpl implements HeroService {
    @Autowired
    private HeroMapper mapper;

    @Override
    public boolean save(Hero hero) {
        return mapper.insert(hero) > 0;
    }

    @Override
    public boolean update(Hero hero) {
        return mapper.updateById(hero) > 0;
    }

    @Override
    public boolean deleteById(Integer id) {
        return mapper.deleteById(id) > 0;
    }

    @Override
    public Hero searchById(Integer id) {
        return mapper.selectById(id);
    }

    @Override
    public List<Hero> searchAllHero() {
        return mapper.selectList(null);
    }

    @Override
    public IPage<Hero> searchByPage(int currentPage, int pageSide) {
        return mapper.selectPage(new Page<>(currentPage, pageSide), null);
    }


}

基于MyBatisPuls构建

        使用MyBatisPlus提供有业务层通用接口(ISerivce<T>)与业务层通用实现类(ServiceImpl<M,T>)

        在通用类基础上做功能重载或功能追加

        注意重载时不要覆盖原始操作,避免原始提供的功能丢失

        定义接口

public interface IHeroService extends IService<Hero> {

}

        定义实现类

public class HeroServiceImplMp extends ServiceImpl<HeroMapper, Hero> implements IHeroService {

}

表现层标准开发

表现层接口开发

@RestController
@RequestMapping("/hero")
public class HeroController {

    @Autowired
    HeroServiceImpl heroServiceImpl;

    @GetMapping("/{id}")
    public Hero getById(@PathVariable Integer id) {
        return heroServiceImpl.searchById(id);
    }

    @GetMapping("/")
    public List<Hero> getAllHero() {
        return heroServiceImpl.searchAllHero();
    }

    @PostMapping("/")
    public void saveHero(@RequestBody Hero hero) {
        heroServiceImpl.save(hero);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable Integer id) {
        heroServiceImpl.deleteById(id);
    }

    @PutMapping("/")
    public void update(@RequestBody Hero hero) {
        heroServiceImpl.update(hero);
    }

    @GetMapping("/{currentPage}/{pageSide}")
    public List<Hero> searchByPage(@PathVariable Integer currentPage,
                                   @PathVariable Integer pageSide) {
        return heroServiceImpl.searchByPage(currentPage, pageSide).getRecords();
    }
}

消息一致性处理

        设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为前后端数据协议。表现层接口统一返回值类型结果

@Data
@Component
public class Res {

    private int code;
    //类似于状态码
    private Object data;
    //储存前端所需要的数据
    private String msg;
    //信息说明

    public Res() {
    }

    public Res(int code, Object data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }
}

异常消息处理

        如果服务器出现异常,返回给前端的数据将时默认的,需要添加异常处理器来处理异常。

//作为SpringMVC的异常处理器
//@ControllerAdvice
@RestControllerAdvice
public class ProjectExceptionAdvice {
    @ExceptionHandler
    public Res doException1(Exception e) {
        // 记录日志
        // 通知运维
        // 通知开发
        e.printStackTrace();
        return new Res(500, null, "error");
    }

    // 还可以处理指定异常类型
    @ExceptionHandler(Exception.class)
    public Res doException2(Exception e) {
        // 记录日志
        // 通知运维
        // 通知开发
        e.printStackTrace();
        return new Res(500, null, "error");
    }
}

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

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

相关文章

为什么建议 MySQL 数据库字段一定要设置 NOT NULL

1. 前言 建议 MySQL 数据库字段一定要设置 NOT NULL 这句建议你可能听好多人讲过&#xff0c;但是有没有仔细想过为什么别人这么说 &#xff1f; 在实际开发中&#xff0c;对使不使用 not null 很多人并没有一个明确的标准&#xff0c;要知道某个字段需不需要添加 not null&a…

【MYSQL】事务隔离级别以及InnerDB底层实现

事务隔离级别 读未提交&#xff08;Read Uncommitted&#xff09; 允许事务读取其他事务未提交的数据&#xff0c;可能会导致脏读。 读已提交&#xff08;Read Committed&#xff09; 一个事务只能看见已经提交的事务所做的更改&#xff0c;可以避免脏读&#xff0c;但可能…

基于CLIP特征的多模态大模型中的视觉短板问题

【论文极速读】 基于CLIP特征的多模态大模型中的视觉短板问题 FesianXu 20240706 at Tencent WeChat search team 前言 今天读到篇CVPR 24’的论文 [1]&#xff0c;讨论了常见的多模态大模型&#xff08;大多都基于CLIP语义特征&#xff0c;以下简称为MLLM&#xff09;中的视觉…

阿里云服务器配置、搭建(针对Spring boot和MySQL项目)

这是一篇极其详细且痛苦的文章&#xff0c;还是在两位后端的大佬手把手教导下、以及我找遍全网所有资料、问了N遍AI、甚至直接申请阿里云工单一对一询问客服一整天、连续清空再上传反复30多次整个项目jar包......总结出来的终极要人命踩坑的问题总结 一、首先购买服务器 其实不…

Apache Seata分布式事务及其三种模式详解

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 Apache Seata分布式事务及其三种模式详解 分布式事务 Seata 及其三种模式详解 | Meetup#3 回顾…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

【深度学习】图形模型基础(5):线性回归模型第四部分:预测与贝叶斯推断

1.引言 贝叶斯推断超越了传统估计方法&#xff0c;它包含三个关键步骤&#xff1a;结合数据和模型形成后验分布&#xff0c;通过模拟传播不确定性&#xff0c;以及利用先验分布整合额外信息。本文将通过实际案例阐释这些步骤&#xff0c;展示它们在预测和推断中的挑战和应用。…

编程上下文Context及其实现原理

编程上下文Context及其实现原理 author:shengfq date:2024-07-06 title:编程上下文Context及其实现原理 category:编程思想1.编程中的上下文Context是指什么? 在编程和软件工程领域&#xff0c;“上下文”&#xff08;Context&#xff09;是一个多义词&#xff0c;其含义可以…

产品经理-​合作的6类干系人(8)

在一个项目中&#xff0c;产品经理并不是一个人在战斗&#xff0c;而是在很多同事的配合下共同完成项目。那产品经理到底要和哪些角色配合&#xff0c;一起完成项目呢 中间的产品经理是一个项目的驱动者。而产品经理的前方是“Boss/Leader”&#xff0c;也就是创业团队中公司的…

地级市数字经济指数、互联网用户数、数字金融普惠指数

2000-2022年地级市数字经济指数&#xff08;含控制变量&#xff09; 目录 数字经济如何改善环境污染 一、引言 二、文献综述 三、实证模型 四、数据来源 五、程序代码 六、运行结果 数字经济如何改善环境污染 摘要&#xff1a; 本论文旨在探讨数字经济对环境污染的改善作…

三级_网络技术_04_中小型网络系统总体规划与设计

1.下列关于路由器技术特征的描述中&#xff0c;正确的是()。 吞吐量是指路由器的路由表容量 背板能力决定了路由器的吞吐量 语音、视频业务对延时抖动要求较低 突发处理能力是以最小帧间隔值来衡量的 2.下列关于路由器技术特征的描述中&#xff0c;正确的是()。 路由器的…

Matlab中collectPlaneWave函数的应用

查看文档如下&#xff1a; 可以看出最多5个参数&#xff0c;分别是阵列对象&#xff0c;信号幅度&#xff0c;入射角度&#xff0c;信号频率&#xff0c;光速。 在下面的代码中&#xff0c;我们先创建一个3阵元的阵列&#xff0c;位置为&#xff1a;&#xff08;-1,0,0&#x…

JavaWeb----JSPJSTL

目录 JSP显隐注释在JSP中写java程序JSP的指令标签JSP中的四大域对象简易版用户登录EL表达式 JSTL条件动作标签if标签 choose\when\otherwise标签迭代标签格式化动作标签 用户登录实例查看是否安装了mysql用户登录界面后台实现 JSP JSP全名是Java Server Pages&#xff0c;它是建…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)

拆分大文档 很常见的一种优化手段&#xff0c;在一些特定的业务场景中&#xff0c;会有一些很大的文档&#xff0c;这些文档有很多字段&#xff0c;而且有一些特定的字段还特别的大。可以考虑拆分这些文档 大文档对MongoDB的性能影响还是很大的&#xff0c;就我个人经验而言&…

常见算法和Lambda

常见算法和Lambda 文章目录 常见算法和Lambda常见算法查找算法基本查找&#xff08;顺序查找&#xff09;二分查找/折半查找插值查找斐波那契查找分块查找扩展的分块查找&#xff08;无规律的数据&#xff09; 常见排序算法冒泡排序选择排序插入排序快速排序递归快速排序 Array…

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

Pycharm远程连接GPU(内容:下载安装Pycharm、GPU租借、配置SSH、将代码同步到镜像、命令行操控远程镜像、配置远程GPU解释器)

目录 windows下载安装pycharmGPU租借网站AutoDlfeaturize好易智算 GPU租借GPU选择选择镜像充值 然后创建镜像创建成功 复制SSH登录信息 远程进入镜像 在Pycharm中进行ssh连接新建SFTP配置SSH复制ssh根据复制的信息填写ssh配置测试连接 将代码同步到远程镜像上设置mappings将本地…

React 省市查询组件完整代码

目录 一、地区文件 二、Antd配合使用 三、实现效果 一、地区文件 下载地址&#xff1a;全国省市区数据_JSON格式_SQL格式 export const chinaArea {0: {1: 北京,2: 天津,3: 河北省,4: 山西省,5: 内蒙古自治区,6: 辽宁省,7: 吉林省,8: 黑龙江省,9: 上海,10: 江苏省,11: 浙…

计算机出现找不到msvcp140.dll无法继续执行代码怎么办?推荐7个有效解决方法

在日常使用电脑过程中会经常遇到各式各样的问题&#xff0c;比如msvcp140.dll丢失或找不到msvcp140.dll文件是最常见的问题之一&#xff0c;那么遇到这个问题要怎么解决呢&#xff1f;msvcp140.dll到底是什么&#xff1f;为什么会出现msvcp140.dll丢失问题&#xff1f;今天给大…

原生事件监听及组件内置事件处理

监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件&#xff0c;并在事件触发时执行对应的 JavaScript。用法&#xff1a;v-on:click“handler” 或 click“handler”。 事件处理器 (handler) 的值可以是&#xff1a; 内联事件处理器&#xff1a;事件被触发时执行的…