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

Spring Boot框架的原理及应用详解(六)

本系列文章简介:

        在当今的软件开发世界中,快速迭代、高效开发以及易于维护成为了开发者们不断追求的目标。Spring Boot作为Spring框架的一个子项目,自其诞生以来就凭借其“约定大于配置”的理念和自动配置的特性,迅速在Java开发社区中获得了广泛的关注和认可。它简化了Spring应用的初始搭建和开发过程,通过集成大量常用的第三方库配置,开发者可以更快地“上手”并专注于业务逻辑的实现。

        本系列文章旨在深入解析Spring Boot框架的原理及应用,带领大家了解这一强大工具背后的设计理念和技术细节。我们将从Spring Boot的核心组件、自动配置机制、内嵌服务器、监控与管理等方面出发,逐步揭示其工作原理,并通过实际案例展示其在实际开发中的应用。

        首先,我们将探讨Spring Boot的核心组件,包括自动配置器(AutoConfiguration)、起步依赖(Starters)、Spring Boot CLI等工具,它们共同构成了Spring Boot快速开发的基石。随后,我们将详细分析自动配置机制是如何工作的,以及它是如何帮助开发者减少手动配置的。

        接着,我们将介绍Spring Boot如何通过内嵌服务器(如Tomcat、Jetty等)实现应用的快速部署和运行。这一特性使得开发者无需担心服务器的配置和管理,从而大大简化了开发流程。

        此外,我们还将讨论Spring Boot在监控和管理方面的功能,包括健康检查、度量指标收集、外部配置等。这些功能为开发者提供了丰富的工具来监控应用的运行状态,并对其进行灵活的配置和管理。

        最后,我们将通过几个实际案例来展示Spring Boot在Web开发、微服务架构等领域的应用。这些案例将涵盖从项目搭建到功能实现的整个过程,帮助读者更好地理解Spring Boot在实际开发中的使用方法和技巧。

        希望通过本系列文章的介绍,大家能够对Spring Boot有一个全面而深入的了解,并在自己的项目中灵活运用这一强大工具,提高开发效率和质量。同时,我们也期待更多的开发者加入到Spring Boot的大家庭中来,共同推动Java开发技术的进步和发展。

        欢迎大家订阅《Java技术栈高级攻略》专栏(PS:近期会涨价),一起学习,一起涨分!

目录

一、引言

二、Spring Boot在生产环境中的应用

2.1 应用程序打包与部署

2.2 Spring Boot的性能调优

2.3 Spring Boot的日志与异常处理

2.4 Spring Boot的集群与扩展性

三、Spring Boot案例分析与实践

四、总结与展望

五、结语


一、引言

        Spring Boot是一个基于Spring框架的开源项目,旨在通过约定大于配置的原则来简化Spring应用的初始搭建以及开发过程。它通过使用特定的方式来进行配置,减少了样板化的配置,使开发人员能够更专注于业务逻辑的实现。        

        本文将跟随《Spring Boot框架的原理及应用详解(五)》的进度,继续介绍Spring Boot框架。希望通过本系列文章的学习,您将能够更好地理解Spring Boot框架的内部工作原理,掌握Spring Boot框架的使用技巧,以及通过合理的设计完成最佳实践,充分发挥优化Spring Boot框架的潜力,为系统的高效运行提供有力保障。

二、Spring Boot在生产环境中的应用

2.1 应用程序打包与部署

Spring Boot在生产环境中的应用主要涉及到应用程序的打包与部署。以下是一个清晰、详细的步骤说明,并参考了相关文章中提到的信息:

1. 打包方式

Spring Boot支持两种主要的打包方式:Jar包和War包。

1.1 Jar包方式

  • 默认方式:Spring Boot默认以Jar包形式进行打包部署。这是因为Spring Boot内置了一个嵌入式的Tomcat服务器,使得应用能够作为一个独立的可执行Jar文件运行。
  • 步骤
    1. 确保pom.xml(Maven)或build.gradle(Gradle)文件中已经包含了Spring Boot的Maven/Gradle插件。
    2. 在命令行或IDE中执行打包命令,如mvn clean package(Maven)或./gradlew clean build(Gradle)。
    3. 生成的Jar文件将位于target(Maven)或build/libs(Gradle)目录下,文件名格式为your-project-name-<version>.jar

1.2 War包方式

  • 配置:如果需要将Spring Boot应用打包成War包并部署到外部的Servlet容器中,需要进行一些额外的配置。包括声明打包方式为War包、声明使用外部Tomcat服务器以及提供Spring Boot的Servlet初始化器。
  • 注意事项:War包部署后,访问项目时必须加上“项目名称”,否则会访问不到。

2. 部署

2.1 Jar包部署

  • 命令:在生成Jar包后,可以通过java -jar your-project-name-<version>.jar命令直接运行项目。
  • 优点:部署简单方便,无需依赖外部Servlet容器。

2.2 War包部署

  • 步骤:将生成的War包部署到Tomcat等Servlet容器的webapps目录下。
  • 注意事项:确保Tomcat等Servlet容器已经正确安装和配置,且端口没有冲突。

3. 打包与部署过程中的细节

  • spring-boot-maven-plugin的repackage:这个插件可以将Maven的mvn package命令生成的软件包再次打包为可执行的软件包,并生成两个jar文件。一个是包含业务代码的普通jar包(后缀为-original),另一个是包含应用依赖和Spring Boot相关class的可执行jar包。
  • 选择生产环境配置文件:在打包之前,确保选择了正确的生产环境配置文件,以便应用能够按照生产环境的要求运行。

总结

Spring Boot的打包与部署过程相对简单,主要依赖于Maven或Gradle等构建工具以及Spring Boot的内置功能。通过选择合适的打包方式并进行正确的配置,可以方便地将Spring Boot应用部署到生产环境中。

2.2 Spring Boot的性能调优

Spring Boot在生产环境中的应用需要进行性能调优,以确保系统能够高效、稳定地运行。以下是一些关于Spring Boot性能调优的建议,结合参考文章中的相关数字和信息进行分点表示和归纳:

1、数据库优化

  1. SQL优化:确保SQL语句高效,避免复杂的关联查询和不必要的子查询。通过索引优化,合理创建索引,提高查询效率。
  2. 连接池配置:使用高性能的数据库连接池,如HikariCP,合理配置连接池大小。通常建议将连接池大小设置为系统最大并发数的两倍,以避免因连接池太小导致无法获取数据库连接,或连接池太大浪费系统资源。
  3. 避免频繁创建连接:通过连接池提高连接的复用性,减少频繁创建和关闭连接的开销。

2、缓存应用

  1. 本地缓存:使用如Caffeine等本地缓存技术,减少数据库访问,提高数据读取速度。
  2. 分布式缓存:在分布式环境中使用Redis等作为缓存中间件,进一步提高缓存的效率和可靠性。

3、JVM优化

  1. 内存设置:调整JVM堆内存大小(如-Xms和-Xmx),确保内存分配合理,避免频繁的垃圾回收(GC)。同时,合理设置新生代与老年代比例(-XX:NewRatio)、新生代中Eden与Survivor区比例(-XX:SurvivorRatio)等参数。
  2. 元空间大小:设置Metaspace的初始和最大大小(-XX:MetaspaceSize和-XX:MaxMetaspaceSize),以适应应用的元数据需求。
  3. 垃圾收集器选择:根据应用特性选择合适的垃圾收集器,如G1、ZGC、Shenandoah等,并相应调整相关参数,以提高GC效率和减少停顿时间。

4、并发处理

  1. 线程池配置:根据应用的负载情况调整线程池大小,避免线程过多导致系统资源耗尽,或线程过少导致处理效率低下。
  2. 避免线程竞争:减少同步代码块的使用,使用并发工具类(如CountDownLatch、CyclicBarrier等)来减少线程间的竞争和等待。

5、服务拆分与限流降级

  1. 微服务化:将单体应用拆分成微服务,分散压力,提高系统的可扩展性和容错性。
  2. 服务限流与降级:使用如Hystrix、Sentinel等工具进行服务限流和降级处理,防止因某个服务异常导致整个系统崩溃。

6、API优化

  1. 减少不必要的API调用:优化API设计,减少冗余调用,提高API的响应速度和可靠性。
  2. 接口响应时间优化:监控关键接口的响应时间,并进行优化,确保系统能够快速响应外部请求。

7、异步处理

启用异步处理,通过@Async注解开启异步任务执行,避免同步处理阻塞主线程,提高系统吞吐量。同时,配置合适的异步请求超时时间(如spring.mvc.async.request-timeout),防止因异步任务超时导致系统资源耗尽。

8、资源文件处理

  1. 静态资源优化:压缩、合并静态资源,减少请求次数和传输时间。
  2. 资源按需加载:实现资源的懒加载,减少系统启动时的资源加载时间。

综上所述,Spring Boot的性能调优需要从多个方面进行综合考虑和优化,包括数据库、缓存、JVM、并发处理、服务拆分与限流降级、API优化、异步处理以及资源文件处理等方面。通过合理的配置和调优,可以显著提高Spring Boot应用的性能和稳定性。

2.3 Spring Boot的日志与异常处理

Spring Boot在生产环境中的应用,特别是在日志与异常处理方面,具有一套完整且强大的机制。以下是关于Spring Boot日志与异常处理的详细说明:

日志处理

  1. 日志级别
    • Spring Boot使用SLF4J(Simple Logging Facade for Java)作为日志门面,并允许使用如Logback、Log4j2等日志框架。
    • 日志级别从高到低包括:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。通过配置不同的日志级别,可以控制日志的详细程度。
  2. 日志配置
    • 可以通过application.ymlapplication.properties文件进行日志配置,包括日志级别、日志格式、日志输出位置等。
    • 也可以通过logback-spring.xml进行更复杂的自定义配置。
  3. 日志的作用
    • 记录程序运行时的详细信息,有助于调试和监控。
    • 记录用户行为,用于分析用户习惯和行为模式。
    • 记录系统关键操作,有助于数据恢复和故障定位。
  4. 日志输出与持久化
    • 日志可以输出到控制台、文件、数据库等多种目的地。
    • 对于生产环境,推荐将日志持久化到文件或数据库,以便长期保存和查询。
  5. 日志工具
    • Spring Boot推荐使用Lombok库简化日志对象的创建和使用。
    • 使用MDC(Mapped Diagnostic Context)可以在日志中输出一个唯一标识(如UUID),以便将同一次业务调用链上的日志串起来。

异常处理

  1. 基本异常处理
    • 使用try-catch语句捕获并处理异常。
    • 可以在catch块中记录异常信息到日志,或者返回友好的错误消息给前端用户。
  2. 全局异常处理
    • 使用@ControllerAdvice注解定义全局的异常处理逻辑。
    • @ControllerAdvice注解的类中,可以使用@ExceptionHandler注解指定要处理的异常类型,并定义相应的处理方法。
    • 全局异常处理可以统一处理所有的异常,避免在每个Controller中都编写相同的异常处理代码。
  3. 自定义异常类
    • 在处理异常时,可以自定义异常类来表示特定类型的异常。
    • 自定义异常类可以让程序更加清晰易懂,同时也方便在全局异常处理器中进行针对性的异常处理。
  4. 错误页面
    • Spring Boot提供了一个默认的/error路径来处理未捕获的异常,并展示一个默认的错误页面。
    • 可以自定义错误页面,并在src/main/resources/templates目录下创建error.html文件。
    • 还可以根据状态码创建特定的错误页面,如404.html500.html等。
  5. HTTP状态码
    • 在处理异常时,可以根据异常类型返回不同的HTTP状态码,以便前端用户或调用方根据状态码进行相应的处理。

通过合理地配置和使用Spring Boot的日志与异常处理机制,可以大大提高生产环境中应用程序的稳定性和可维护性。

2.4 Spring Boot的集群与扩展性

在Spring Boot的生产环境应用中,集群和扩展性是确保系统高可用性和灵活性的关键要素。以下是对Spring Boot集群与扩展性的详细讨论,结合参考文章中的相关数字和信息进行分点表示和归纳:

1、集群配置

  1. 单节点与多节点集群
    • 初始阶段,可以使用单节点Redis集群进行模拟,但随着业务增长,需要过渡到多节点集群以提供更高的可用性和容错性。
    • 多节点集群允许数据在多个节点之间复制和分布,从而提高性能和扩展性。
  2. 负载均衡
    • 在多节点集群中,负载均衡是确保请求均匀分布到各个节点的关键。
    • 可以采用如Nginx或HAProxy等负载均衡器,或者使用Spring Cloud中的Ribbon和Eureka进行服务发现和负载均衡。
  3. 容灾备份
    • 集群配置应考虑容灾备份,以防止数据丢失或服务中断。
    • 使用Redis等缓存中间件时,可以配置主从复制或集群模式,确保数据在多个节点之间备份。

2、扩展性

  1. 微服务化
    • 将单体应用拆分成微服务,每个微服务负责一个独立的业务功能。
    • 微服务化可以提高系统的可扩展性,因为每个微服务都可以独立扩展、部署和更新。
  2. 服务拆分
    • 根据业务逻辑和功能将应用拆分成多个服务,每个服务独立运行并与其他服务通信。
    • 服务拆分可以降低系统复杂度,提高可维护性和可扩展性。
  3. 容器化
    • 使用Docker等容器技术将应用打包成可移植的容器镜像。
    • 容器化可以简化应用的部署和管理,提高系统的可扩展性和灵活性。
  4. 自动扩展
    • 使用Kubernetes等容器编排工具实现应用的自动扩展。
    • 根据系统负载和资源使用情况,自动增加或减少容器的数量,以满足业务需求。
  5. 分布式缓存
    • 使用Redis等分布式缓存中间件缓存热点数据,减少对数据库的访问压力。
    • 分布式缓存可以提高系统的响应速度和可扩展性。
  6. 数据库扩展
    • 对于数据库扩展,可以采用读写分离、分库分表等技术来减轻单一数据库的压力。
    • 读写分离可以提高查询性能,分库分表可以支持更大的数据量并提高扩展性。
  7. API网关
    • 使用Spring Cloud Gateway等API网关对请求进行路由、限流、熔断、负载均衡等处理。
    • API网关可以提高系统的可用性和响应速度,同时支持服务的灵活扩展和调整。

在Spring Boot的生产环境应用中,集群和扩展性是确保系统高可用性和灵活性的重要手段。通过合理的集群配置、微服务化、服务拆分、容器化、自动扩展、分布式缓存、数据库扩展以及API网关等技术,可以显著提高系统的可扩展性和灵活性,满足不断变化的业务需求。

三、Spring Boot案例分析与实践

        详见《Spring Boot框架的原理及应用详解(七)》

四、总结与展望

        详见《Spring Boot框架的原理及应用详解(七)》

五、结语

        文章至此,已接近尾声!希望此文能够对大家有所启发和帮助。同时,感谢大家的耐心阅读和对本文档的信任。在未来的技术学习和工作中,期待与各位大佬共同进步,共同探索新的技术前沿。最后,再次感谢各位的支持和关注。您的支持是作者创作的最大动力,如果您觉得这篇文章对您有所帮助,请分享给身边的朋友和同事!

相关文章:

Spring Boot框架的原理及应用详解(六)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;快速迭代、高效开发以及易于维护成为了开发者们不断追求的目标。Spring Boot作为Spring框架的一个子项目&#xff0c;自其诞生以来就凭借其“约定大于配置”的理念和自动配置的特性&#xff0c;迅速在Java开发社…...

密码学与信息安全面试题及参考答案(2万字长文)

目录 什么是密码学?它的主要目标是什么? 请解释明文、密文、加密和解密的概念。 密码系统的安全性通常基于哪三种假设? 什么是Kerckhoffs原则?它对现代密码学设计有何意义? 简述密码学中的“混淆”和“扩散”概念。 什么是AES(高级加密标准)?AES有几种常见的密钥…...

C++语法19 循环嵌套结构(for/while循环)

语法阶段已经更新到第18章了&#xff0c;前面的知识你都学会了吗&#xff1f;如果还没有学习前面的知识&#xff0c;请点击&#x1f449;语法专栏进行学习哦&#xff01; 目录 循环嵌套 训练&#xff1a;数字矩形 解析 参考代码 训练&#xff1a;星号三角形 解析 参考代码 …...

AtomicInteger原理和CAS与Synchronized(juc编程)

AtomicInteger原理 4.6.1 原理介绍 AtomicInteger的本质&#xff1a;自旋锁 CAS算法 CAS的全成是&#xff1a; Compare And Swap(比较再交换); 是现代CPU广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。CAS可以将read-modify-write转换为原子操作&#xff0c;这…...

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版

抖音a_bogus,mstoken全参数爬虫逆向补环境2024-06-15最新版 接口及参数 打开网页版抖音&#xff0c;右键视频进入详情页。F12打开控制台筛选detail&#xff0c;然后刷新网页&#xff0c;找到请求。可以发现我们本次的参数目标a_bogus。a_bogus有时长度为168有时为172&#xf…...

【机器学习】机器学习重要方法—— 半监督学习:理论、算法与实践

文章目录 引言第一章 半监督学习的基本概念1.1 什么是半监督学习1.2 半监督学习的优势 第二章 半监督学习的核心算法2.1 自训练&#xff08;Self-Training&#xff09;2.2 协同训练&#xff08;Co-Training&#xff09;2.3 图半监督学习&#xff08;Graph-Based Semi-Supervise…...

leetcode70 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2&#x…...

ENVI实战—一文搞定非监督分类

实验1&#xff1a;使用isodata法分类 目的&#xff1a;学会使用isodata法开展非监督分类 过程&#xff1a; ①导入影像&#xff1a;打开ENVI&#xff0c;按照“文件→打开为→光学传感器→ESA→Sentinel-2”的顺序&#xff0c;打开实验1下载的哨兵2号数据。 图1 ②区域裁剪…...

【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt系统相关 | Qt事件 | 事件的介绍及基本概念 文章编号&#xff1a;Qt…...

具身智能特点及实现路线

多模态——多功能的“小脑” 人类具有眼耳鼻舌身意&#xff0c;说明对于物理世界的充分感知和理解&#xff0c;是意识和智慧的来源。而传统AI更多的是被动观测&#xff0c;主要是“看”&#xff08;计算机视觉&#xff09;和“读”&#xff08;文本NLP&#xff09;&#xff0c…...

重温react-04

兄弟组件之间通信 兄弟1 import React, { Component } from react import pubsub from ./pubsub export default class learnReact01 extends Component {render() {return (<div>我是兄弟1<button onClick{this.clickMessage}>向兄弟2发信息</button><…...

lock-锁的概念

锁的简介 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff08;避免发生资源争抢&#xff09; 在并发环境下&#xff0c;多个线程会对同一个资源进行争抢&#xff0c;可能会导致数据不一致的问题。为了解决这一问题&#xff0c;需要通过一种抽象的锁来对资源进行…...

Docker 可用镜像源

当使用 docker 发现拉取不到镜像时&#xff0c;可以编辑 /etc/docker/daemon.json 文件&#xff0c;添加如下内容&#xff1a; 这文章不涉及政治&#xff0c;不涉及敏感信息&#xff0c;三番五次的审核不通过&#xff0c;一删再删&#xff0c;只好换图片了。 重新加载服务配置…...

MySQL 搭建主从报错 1236

错误信息&#xff1a; Last_IO_Error: Got fatal error 1236 from source when reading data from binary log: Could not find first log file name in binary log index file 大致内容&#xff1a; MySQL 在尝试从二进制日志&#xff08;binary log&#xff09;中读取数据…...

华为OD机试真题2024版-求幸存数之和

题目描述\n给一个正整数列 nums,一个跳数 jump,及幸存数量 left。运算过程为:从索引为 0 的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存 left 个数为止。然后返回幸存数之和。\n约束: 1、0 是第一个起跳点。…...

Python - 各种计算器合集【附源码】

计算器合集 一&#xff1a;极简版计算器二&#xff1a;简易版计算器三&#xff1a;不简易的计算器四&#xff1a;还可以计算器 一&#xff1a;极简版计算器 运行效果&#xff1a; import tkinter as tk import tkinter.messagebox win tk.Tk() win.title("计算器")…...

【已解决】better-scroll在PC端如何开启鼠标滚动以及如何始终显示滚动条

总结 需要安装插件 mouse-wheel 和 scrollbar 在PC端如何开启鼠标滚动? 需要安装官方提供的滚动插件&#xff1a;mouse-wheel https://better-scroll.github.io/docs/zh-CN/plugins/mouse-wheel.html 为了开启鼠标滚动功能&#xff0c;你需要首先引入 mouseWheel 插件&…...

AJAX 综合案例-day2

Bootstrap 弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 1. 引入 bootstrap.css 和 bootstrap.js 2. 准备 弹框标签 &#xff0c;确认结构 3. 通过 自定义属性 &#xff0c;控制弹框的 显示 和 隐藏 1. 通过属性…...

【Esp32连接微信小程序蓝牙】附Arduino源码《 返回10007 相同特征id冲突问题》

前言 最近接了一个外包&#xff0c;发现了esp32连接小程序会有很多bug&#xff0c;所以接下来会慢慢更新解决方案&#xff0c;还是需要多接触项目才能进步呀兄弟们&#xff01; 附上uuid的生成链接&#xff1a; // See the following for generating UUIDs: // https://www.uu…...

并发控制技术

事物的隔离性实现主要依赖于多种并发控制技术,这些技术确保在并发执行的事物中,一个事物的操作不会被其他事物干扰。并发控制技术按照其对可能冲突的操作采取的不同策略可以分为乐观并发控制和悲观并发控制两大类。 基于封锁的并发控制 对于并发可能冲突的操作,比如读-写,…...

什么是网段

一、A类地址的网段&#xff1a; 情况1&#xff1a;最小的网段就是xxx.0.0.0&#xff0c;直接使用第一段的网络地址做网段。 情况2&#xff1a;如果希望网段允许的主机数量的范围缩小&#xff0c;扩大网段值即可&#xff0c;xxx.xxz.zzz.zzz&#xff0c;比如xxx.xxx.xzz.zzz&…...

PHP和Mysql前后端交互效果实现

一、连接数据库基本函数 mysqli_connect(); 作用&#xff1a;创建数据库连接&#xff0c;打开一个新的mysql的连接。传参顺序&#xff1a;数据库地址、数据库账号、数据库密码 <?phpecho mysqli_connect("localhost",root,root) ?> /*结果&#xff1a;F…...

vue小总结

知识总结 【 1 】es6 语法总结 # let 定义变量 # const定义常量 ------块级作用域---- # var 以后尽量少用&#xff0c;函数作用域var 在 JavaScript 中是函数作用域或全局作用域。而 let 和 const 是块级作用域。 // 使用 var 声明全局变量 var globalVar "Im a globa…...

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后&#xff0c;我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中&#xff0c;便于大家快速使用。 不曾想到&#xff0c;我这整理工作越做越多了&#xff0c;好在整体都是往更好方向走。 起初&#xff0c;rapid_layout项目是在RapidStru…...

postman 工具下载安装使用教程_postman安装

本文讲解的是postman工具下载、Postman安装步骤、postman下载、postman安装教程。Postman是一款流行的API测试工具&#xff0c;它提供了一个用户友好的界面&#xff0c;用于发送和测试API请求&#xff0c;并且可以轻松地按需管理和组织请求。 这使得开发人员和测试人员能够更高…...

【数学建模】——【新手小白到国奖选手】——【学习路线】

专栏&#xff1a;数学建模学习笔记 目录 ​编辑 第一阶段&#xff1a;基础知识和工具 1.Python基础 1.学习内容 1.基本语法 2.函数和模块 3.面向对象编程 4.文件操作 2.推荐资源 书籍&#xff1a; 在线课程&#xff1a; 在线教程&#xff1a; 2.数学基础 1.学习内…...

CSS文本超限后使用省略号代替

方案一&#xff1a; 只显示一行&#xff0c;超限后使用省略号代替 .detail {overflow: hidden;text-overflow: ellipsis;white-space: nowrap; }方案二&#xff1a; 显示多行&#xff0c;到最后一行还没有显示完&#xff0c;则最后一行多出来的部分使用省略号代替。 .detai…...

多线程下JVM内存模型 和 volatile关键字

1、线程的概念 线程&#xff08;thread&#xff09;是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务…...

Uniapp实现页面滚动Tab吸顶,点击tab内容滚动到对应tab内容位置

思路&#xff1a;运用uniapp原生提供方法uni.createSelectorQuery()获取滚动对应节点的信息&#xff0c;即节点距离页面顶部的距离&#xff0c;再通过uniapp原生监听页面滚动事件onPageScroll&#xff0c;获取页面内容滚动的高度&#xff0c;二者相加即定位到对应节点的滚动距离…...

在Elasticsearch中-SpaceJam一个全文搜索的实例

在Elasticsearch中进行全文搜索通常涉及几个步骤&#xff1a;创建索引、定义映射、索引文档、执行搜索查询。下面我将通过一个名为"SpaceJam"的虚构实例来演示如何进行全文搜索。 ### 步骤 1: 创建索引 首先&#xff0c;我们需要创建一个索引。在这个例子中&#x…...

wordpress密码查看/北京网站托管

2018年1月8日&#xff0c;笔墨由此刻开始......转载于:https://www.cnblogs.com/liangwh520/p/8241917.html...

做整合营销的网站/网络销售哪个平台最好

最近温故了一下 python 基础知识&#xff0c;有新的理解&#xff0c;整理在此&#xff0c;以便以后查阅或纠正。 本文描述一下静态方法和类方法&#xff0c;引出装饰器的概念&#xff0c;在下一篇博文中记录。 先举例&#xff0c;看效果&#xff1a; 1 class MyClass:2 def…...

php企业网站demo/2024年新闻摘抄十条

酷派5891Q的usb驱动有没有人需要的&#xff0c;和其它的酷派手机是一样的&#xff0c;因为手机在用数据线连接电脑的时候都是需要驱动的&#xff0c;说的这个驱动是安装在电脑上&#xff0c;很多人下载下来驱动之后不知道怎么进行安装&#xff0c;如果没有驱动的话&#xff0c;…...

设计公司网站官网/一键优化大师

千呼万唤始出来&#xff0c;Eclipse总算出3.0版了...

什么网站可以做线上小游戏/如何用模板建站

[sizexx-large][colororange][b]Rose框架[/b][/color][/size]官网&#xff1a;[url]https://code.google.com/p/paoding-rose/[/url]1 .对rose框架的整体认识1.1B/S web开发 我们所做的web开发是基于HTTP的应用服务开发&#xff0c;主要由两部分组成&#xff1a;浏览器服务端 大…...

宜昌公司做网站/网络营销广告名词解释

一、安装问题1)高级安装新建分区sda1必须是/boot分区&#xff0c;sda2是根分区&#xff1f;A&#xff1a;如在飞腾平台&#xff0c;高级安装新建分区sda1必须是/boot分区&#xff0c;sda2是根分区&#xff0c;且这两个分区类型必须是主分区&#xff0c;除这两个分区外其他分区类…...