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

浅谈Java Spring Boot 框架分析和理解

Spring Boot是一个简化Spring开发的框架,它遵循“约定优于配置”的原则,通过内嵌的Tomcat、Jetty或Undertow等容器,使得开发者能够快速构建独立运行的、生产级别的基于Spring框架的应用程序。Spring Boot包含了大量的自动配置功能,可智能识别已存在的库并配置相应组件,从而减少手动配置的工作量。


Java Spring Boot 是一个基于 Spring 框架的开源 Java 框架,由Pivotal Software开发,旨在简化 Spring 应用的初始搭建和开发过程。它通过提供默认配置和自动化配置,减少了开发者的配置工作量,同时保持了 Spring 框架的强大功能。以下是对 Spring Boot 的深入解析和分析:

一. Spring Boot 的核心特点

  1. 约定优于配置

    • Spring Boot 提供了大量默认配置,开发者无需手动配置 XML 或注解即可快速启动项目。
    • 例如,内嵌的 Tomcat 服务器、默认的数据库连接池(HikariCP)等。
  2. 内嵌服务器支持

    • Spring Boot 支持内嵌的 Tomcat、Jetty 或 Undertow 服务器,无需额外部署 WAR 文件。
    • 通过 spring-boot-starter-web 依赖即可快速启动 Web 应用。
  3. 自动化配置(Auto-Configuration)

    • Spring Boot 根据项目的依赖自动配置应用程序。例如,添加 spring-boot-starter-data-jpa 依赖后,Spring Boot 会自动配置数据源和 JPA 相关 Bean。
  4. 起步依赖(Starters)

    • Spring Boot 提供了大量预定义的依赖模块(如 spring-boot-starter-webspring-boot-starter-data-jpa),简化了 Maven/Gradle 配置。
  5. Actuator 监控与管理

    • Spring Boot Actuator 提供了对应用程序的监控和管理功能,如健康检查、指标收集、环境信息等。
  6. 外部化配置

    • 支持通过 application.propertiesapplication.yml 文件配置应用程序,同时支持多环境配置(如 application-dev.properties)。
  7. 无代码生成与 XML 配置

    • Spring Boot 完全基于注解和 Java 配置,避免了繁琐的 XML 配置。

二. Spring Boot 的核心组件

  1. Spring Boot Starter

    • 起步依赖是 Spring Boot 的核心组件之一,它通过聚合常用依赖简化了项目的依赖管理。
    • 例如:
      • spring-boot-starter-web:用于构建 Web 应用。
      • spring-boot-starter-data-jpa:用于集成 JPA 和数据库操作。
  2. Spring Boot Auto-Configuration

    • 自动化配置基于条件注解(如 @ConditionalOnClass@ConditionalOnMissingBean)实现,根据类路径中的依赖自动配置 Bean。
  3. Spring Boot Actuator

    • Actuator 提供了对应用程序的运行时监控和管理功能,支持通过 HTTP 或 JMX 访问端点(如 /health/metrics)。
  4. Spring Boot CLI

    • Spring Boot 提供了一个命令行工具,支持快速编写和运行 Groovy 脚本。
  5. Spring Boot DevTools

    • 开发工具模块提供了热部署、自动重启等功能,提升了开发效率。

三. Spring Boot 的工作机制

  1. 启动流程

    • Spring Boot 应用通过 SpringApplication.run() 方法启动,主要流程包括:
      • 加载 application.propertiesapplication.yml 配置文件。
      • 根据类路径中的依赖进行自动化配置。
      • 启动内嵌的 Web 服务器并部署应用。
  2. 自动化配置原理

    • Spring Boot 的自动化配置基于 spring-boot-autoconfigure 模块实现。
    • 通过 META-INF/spring.factories 文件加载配置类,并根据条件注解决定是否启用配置。
  3. 外部化配置加载顺序

    • Spring Boot 支持多种配置源,加载顺序如下:
      1. 命令行参数。
      2. application-{profile}.propertiesapplication-{profile}.yml
      3. application.propertiesapplication.yml
      4. 默认配置(通过 @PropertySource 注解加载)。

四. Spring Boot 的优缺点分析

优点
  1. 快速开发

    • 通过起步依赖和自动化配置,开发者可以快速搭建项目并专注于业务逻辑。
  2. 生态丰富

    • Spring Boot 集成了 Spring 生态中的大量组件(如 Spring Data、Spring Security),同时支持第三方库(如 MyBatis、Redis)。
  3. 易于测试

    • 提供了 spring-boot-starter-test 模块,支持单元测试和集成测试。
  4. 微服务友好

    • Spring Boot 是构建微服务的理想选择,支持与 Spring Cloud 无缝集成。
缺点
  1. 学习曲线较陡

    • 对于初学者来说,Spring Boot 的自动化配置和依赖管理机制可能需要一定时间掌握。
  2. 启动时间较长

    • 由于自动化配置和依赖加载机制,Spring Boot 应用的启动时间可能较长。
  3. 灵活性受限

    • 自动化配置虽然方便,但在某些复杂场景下可能需要手动覆盖默认配置。

五. Spring Boot 的应用场景

  1. Web 应用开发

    • 通过 spring-boot-starter-web 快速构建 RESTful API 或 MVC 应用。
  2. 微服务架构

    • 结合 Spring Cloud 构建分布式微服务系统。
  3. 批处理任务

    • 使用 spring-boot-starter-batch 开发批处理任务。
  4. 数据访问

    • 通过 spring-boot-starter-data-jpaspring-boot-starter-data-mongodb 集成数据库。
  5. 消息队列集成

    • 支持与 RabbitMQ、Kafka 等消息队列集成。

六. Spring Boot 的最佳实践

  1. 使用多环境配置

    • 通过 application-{profile}.propertiesapplication-{profile}.yml 管理不同环境的配置。
  2. 合理使用 Actuator

    • 在生产环境中启用 Actuator 端点时,注意保护敏感信息(如 /env/heapdump)。
  3. 优化启动性能

    • 使用 Spring Boot 2.4+ 的懒加载机制(spring.main.lazy-initialization=true)减少启动时间。
  4. 日志管理

    • 使用 Logback 或 Log4j2 记录日志,并通过 application.properties 配置日志级别。
  5. 异常处理

    • 使用 @ControllerAdvice@ExceptionHandler 统一处理全局异常。

七. Spring Boot 的未来趋势

  1. 云原生支持

    • Spring Boot 正在加强与 Kubernetes、Docker 等云原生技术的集成。
  2. 响应式编程

    • 随着 Spring WebFlux 的普及,Spring Boot 对响应式编程的支持将更加完善。
  3. Serverless 架构

    • Spring Boot 正在探索与 Serverless 平台(如 AWS Lambda)的集成。
  4. 持续优化性能

    • Spring Boot 团队致力于减少启动时间和内存占用,以提升应用性能。

八.总结

Spring Boot 通过简化配置、提供丰富的起步依赖和自动化配置,极大地提升了 Java 应用的开发效率。它适用于从单体应用到微服务架构的多种场景,是现代化 Java 开发的首选框架之一。然而,开发者仍需深入理解其内部机制,以充分发挥其潜力并应对复杂场景的挑战。

相关文章:

浅谈Java Spring Boot 框架分析和理解

Spring Boot是一个简化Spring开发的框架,它遵循“约定优于配置”的原则,通过内嵌的Tomcat、Jetty或Undertow等容器,使得开发者能够快速构建独立运行的、生产级别的基于Spring框架的应用程序。Spring Boot包含了大量的自动配置功能&#xff0c…...

【系统架构设计师】操作系统 ③ ( 存储管理 | 页式存储弊端 - 段式存储引入 | 段式存储 | 段表 | 段表结构 | 逻辑地址 的 合法段地址判断 )

文章目录 一、页式存储弊端 - 段式存储引入1、页式存储弊端 - 内存碎片2、页式存储弊端 - 逻辑结构不匹配3、段式存储引入 二、段式存储 简介1、段式存储2、段表3、段表 结构4、段内地址 / 段内偏移5、段式存储 优缺点6、段式存储 与 页式存储 对比 三、逻辑地址 的 合法段地址…...

网络编程-day4-TPC之文件传输

服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> #includ…...

定制化APP:开启企业数字化转型新未来

在当今快速发展的数字时代,企业的生存与发展不仅依赖于其传统的运营模式,更需要借助创新的技术手段来提升效率、优化服务并创造价值。而定制化的移动应用程序(简称“定制化APP”)正是实现这一目标的重要工具之一。通过量身定制的应用程序,企业能够更好地满足自身独特的业务…...

JS宏进阶:XMLHttpRequest对象

一、概述 XMLHttpRequest简称XHR&#xff0c;它是一个可以在JavaScript中使用的对象&#xff0c;用于在后台与服务器交换数据&#xff0c;实现页面的局部更新&#xff0c;而无需重新加载整个页面&#xff0c;也是Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;…...

点大商城V2-2.6.6源码全开源uniapp +搭建教程

一.介绍 点大商城V2独立开源版本&#xff0c;版本更新至2.6.6&#xff0c;系统支持多端&#xff0c;前端为UNiapp&#xff0c;多端编译。 二.搭建环境&#xff1a; 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.21 MySQL 5.…...

Docker的深入浅出

目录 Docker引擎 Docker镜像 (镜像由多个层组成&#xff0c;每层叠加之后&#xff0c;从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统&#xff08;OS&#xff09;&#xff0c;同时还包含应用运行所必须的文件和依赖包) Docker容器 应用容器化--Docker化 最佳…...

导航守卫router.beforeEach

router.beforeEach 是一个全局前置守卫&#xff0c;在每次路由跳转之前都会触发。 //index.jsrouter.beforeEach((to, from, next) > {// 打印即将要进入的目标路由信息console.log(即将要进入的目标路由信息:, to)// 打印当前正要离开的路由信息console.log(当前正要离开的…...

Perl语言的软件开发工具

Perl语言的软件开发工具 引言 在当今软件开发的世界中&#xff0c;随着互联网的快速发展和信息技术的不断进步&#xff0c;编程语言和开发工具的选择变得尤为重要。特别是在处理大量数据、实现快速原型以及网络编程等领域&#xff0c;Perl语言凭借其独特的优势而受到广泛青睐…...

在 Linux 系统下,解压 `.tar.gz`

在 Linux 系统下,解压 .tar.gz 文件通常使用 tar 命令。.tar.gz 文件是一种压缩归档文件,它首先使用 tar 命令将多个文件打包为一个 .tar 文件,然后再使用 gzip 压缩生成 .tar.gz 文件。 解压 .tar.gz 文件的命令 要解压 .tar.gz 文件,可以使用以下命令: tar -xzvf fil…...

Deepseek

1.Deepseek是什么&#xff1f; deepseek是一家人工智能科技公司所开发的能够进行人工智能对话的一个应用&#xff0c;它的主要目标是大规模的研发与应用。deepseek-R1是它的开源推理模型,主要负责处理复杂任务并且可以免费使用。 2.Deepseek可以做什么&#xff1f; Deepseek…...

oracle如何查询历史最大进程数?

oracle如何查询历史最大进程数&#xff1f; SQL> desc dba_hist_resource_limitName Null? Type---------------------------------------------------- -------- ------------------------------------SNAP_ID …...

强一致性算法:Raft

目录 什么是 Raft 算法&#xff1f; Leader的选举 投票分裂后的选举过程 Raft算法日志复制过程 修复不一样的日志 数据安全性的保证 什么是 Raft 算法&#xff1f; Raft 算法是一种是一种用于管理复制日志的强一致性算法&#xff0c;用于保证分布式系统中节点数据的一致…...

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…...

是德科技 | PCIe 7.0 互连— PCIe的尽头会是光吗?

伴随大语言模型和相关训练系统迅猛增长、对非结构化数据处理的需求急剧上升&#xff0c;市场对算力的需求也是呈指数级增加。PCIe作为计算机和服务器中使用广泛的高速数据传输技术发展迅猛&#xff0c;今年4月份PCI-SIG已经批准 Draft 0.5版基础规范&#xff0c;目前0.7版本基础…...

Aitken 逐次线性插值

Aitken 逐次线性插值 用 Lagrange 插值多项式 L n ( x ) L_n(x) Ln​(x)计算函数近似值时&#xff0c;如需增加插值节点&#xff0c;那么原来算出的数据均不能利用&#xff0c;必须重新计算。为克服这个缺点&#xff0c;可用逐次线性插值方法求得高次插值。 令 I i 1 , i 2…...

Orange 开源项目介绍

Orange 开源项目 项目兼容单体架构与微服务架构两种模式&#xff0c;集成了包括部门管理、用户管理、菜单配置、角色分配、字典维护以及日志记录在内的多种系统管理功能。 项目体验 Orange 官网: http://hengzq.cn在线体验: http://tiny.hengzq.cn项目文档: http://hengzq.cn/…...

【高级架构师】多线程和高并发编程(三):锁(下)深入ReentrantReadWriteLock

文章目录 4、深入ReentrantReadWriteLock4.1 为什么要出现读写锁4.2 读写锁的实现原理4.3 写锁分析4.3.1 写锁加锁流程概述4.3.2 写锁加锁源码分析4.3.3 写锁释放锁流程概述&释放锁源码 4.4 读锁分析4.4.1 读锁加锁流程概述4.4.1.1 基础读锁流程4.4.1.2 读锁重入流程4.4.1.…...

如何在Node.js中使用中间件处理请求

Node.js作为一种基于事件驱动、非阻塞I/O模型的运行环境&#xff0c;广泛用于构建高性能的Web应用。在Node.js中&#xff0c;处理中间件是处理HTTP请求和响应的一个常见方式&#xff0c;特别是在使用Express框架时&#xff0c;中间件扮演着至关重要的角色。本文将介绍如何在Nod…...

Kotlin 2.1.0 入门教程(十三)异常、Nothing

创建自定义异常 可以通过创建继承内置 Exception 类来定义自定义异常。这允许你创建更符合应用程序需求的特定错误类型。 要创建一个自定义异常&#xff0c;可以定义一个继承 Exception 的类&#xff1a; class MyException : Exception("My message")在这个例子中…...

Unity 打造游戏资源加密解密系统详解

在游戏开发中&#xff0c;保护游戏资源不被轻易破解和盗用至关重要。本文将详细介绍如何在 Unity 中打造一个游戏资源加密解密系统&#xff0c;并提供技术详解和代码实现。 一、加密方案选择 1.1 对称加密 优点: 加密解密速度快&#xff0c;适合加密大量数据。 缺点: 密钥管…...

HarmonyOS Next 方舟字节码文件格式介绍

在开发中&#xff0c;可读的编程语言要编译成二进制的字节码格式才能被机器识别。在HarmonyOS Next开发中&#xff0c;arkts会编译成方舟字节码。方舟字节码长什么样呢&#xff1f;我们以一个demo编译出的abc文件&#xff1a; 二进制就是长这样&#xff0c;怎么去理解呢&…...

二层、三层小总结

一、网络隔离 1、物理隔离。搭建两套完全独立的网络&#xff0c;这也是最土豪最安全的做法。 2、二层隔离。使用Vlan隔离&#xff0c;使用不同Vlan或者Pvlan等。 3、三层隔离。路由隔离。 4、设备特性隔离。比如端口隔离swichport protected&#xff0c;或者ACL等。 5、安全…...

Window系统通过Docker本地安装ollama和deepseek

在 Windows 系统上安装 Ollama 和 DeepSeek 的步骤如下&#xff1a; 安装 Ollama 安装 WSL&#xff08;Windows Subsystem for Linux&#xff09;&#xff1a; 如果还没有安装 过WSL的&#xff08;安装过的你直接跳过就行了&#xff09;&#xff0c;可以按照以下步骤进行安装&…...

云原生后端|实践?

云原生&#xff08;Cloud Native&#xff09;是一种构建和运行应用程序的方法&#xff0c;它充分利用云计算的优势&#xff0c;包括弹性、可扩展性、高可用性和自动化运维。云原生后端开发通常涉及微服务架构、容器化、持续集成/持续部署&#xff08;CI/CD&#xff09;、服务网…...

1.1 Spring生态全景解读

1.1 Spring生态全景解读 1.1.1 Spring Framework发展历程与技术演进&#xff08;深度解析版&#xff09; 技术演进路线图与里程碑事件&#xff1a; 2003.10 - Spring 1.0 发布→ 核心特性&#xff1a;XML Bean配置、AOP基础支持→ 企业痛点&#xff1a;解决EJB复杂性问题&am…...

跨境商家系统搭建||反向海淘系统的搭建

反向海淘系统的搭建主要涉及以下几个方面的工作&#xff1a; 一、需求分析 在搭建反向海淘系统之前&#xff0c;首先需要进行需求分析。这包括明确系统的目标用户群体&#xff0c;了解他们的购物习惯、需求和期望。同时&#xff0c;还需要分析市场上的竞争对手&#xff0c;了…...

LeetCode数学相关算法题(1)【C语言版】

2520. 统计能整除数字的位数 给你一个整数 num &#xff0c;返回 num 中能整除 num 的数位的数目。 如果满足 nums % val 0 &#xff0c;则认为整数 val 可以整除 nums 。 示例 1&#xff1a; 输入&#xff1a;num 7 输出&#xff1a;1 解释&#xff1a;7 被自己整除&…...

云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维

如今&#xff0c;消息队列已成为分布式架构中不可或缺的关键服务&#xff0c;为电商、物联网、游戏和教育等行业&#xff0c;提供了异步解耦、集成、高性能和高可靠的核心价值。 过去一年&#xff0c;我们发布了云消息队列 ApsaraMQ 全系列产品 Serverless 化&#xff0c;面向…...

github - 使用

注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。 Git…...

cmos晶体管

CMOS晶体管 一、PMOS和NMOS介绍 PN结&#xff1a; P-type和N-type组合在一起&#xff0c;变成一个PN结&#xff08;二极管&#xff09;。在P端给高电压&#xff0c;N端给低电压时&#xff0c;可以导通。否则不导通。 NMOS&#xff1a;有四个端口&#xff1a;gate、source、…...

pip3命令全解析:Python3包管理工具的详细使用指南

pip3命令全解析:Python3包管理工具的详细使用指南 一、基本使用二、升级和更新三、其他常用命令四、换源操作五、注意事项六、帮助信息pip3命令使用说明 pip3 是 Python 3 的包管理工具,用于安装、升级和卸载 Python 3 的包。以下是 pip3 的常用命令及详细说明: 一、基本使…...

统计 product 表中 detail 字段包含 xxx 的产品数量

您可以使用以下 SQL 查询语句来统计 product 表中 detail 字段包含 oss.kxlist.com 的产品数量&#xff1a; SELECT COUNT(*) FROM product WHERE INSTR(detail, oss.kxlist.com) > 0;mysql> SELECT COUNT(*)-> FROM product-> WHERE INSTR(detail, oss.kxlist.co…...

Kafka 集群原来是使用ZK管理,现在新版本是怎么管理的?

目录 基于 ZooKeeper 的管理模式 基于 KRaft 的管理模式 迁移到 KRaft 模式的优势 迁移步骤 Kafka 早期依赖 ZooKeeper(ZK)进行元数据管理、集群协调等工作,但在新版本(Kafka 2.8.0 及之后)引入了 KRaft 模式来替代 ZooKeeper 进行管理。下面详细介绍这两种管理模式以…...

【Java并发编程之什么是指令重排序?如何避免指令重排序?】

Java并发编程之什么是指令重排序? 1.1 指令重排序的原因1.2 指令重排序的示例1.3 指令重排序的影响1.4 如何避免指令重排序带来的问题?1.5 使用原子类1.6 使用 final 关键字1.7 内存屏障(Memory Barrier)1.8 总结在Java中,指令重排序是指编译器和处理器为了提高程序执行效…...

渲影医析Lab学术版

渲影医析 Lab 是武汉渲影软件研发的框架式、模块化、流程化的影像组学分析设计软件&#xff0c;尤其适合处理多模态脑影像数据。通过将影像分析流程细分为可视化节点&#xff0c;并以节点连接的方式构建数据流程&#xff0c;赋予了临床医学研究者、生物医药科研工作者自主设计多…...

利用Minio实现大文件分片上传、断点续传、秒传

利用Minio实现大文件分片上传、断点续传、秒传 demo来自B站蜗牛哥&#xff0c;gitee仓库&#xff1a;minio-upload: 使用vue3 elementplus minio springboot 实现大文件的分片上传、断点续传、秒传的功能demo - Gitee.com 后端暴露端口方法 获取上传进度&#xff0c;identifier…...

查出 product 表中所有 detail 字段包含 xxx 的完整记录

您可以使用以下 SQL 查询语句来查出 product 表中所有 detail 字段包含 oss.kxlist.com 的完整记录&#xff1a; SELECT * FROM product WHERE INSTR(detail, oss.kxlist.com) > 0;下面是detail字段包含的完整内容 <p><img style"max-width:100%;" src…...

Linux系统编程之信号基础知识

概述 信号是Linux系统中用于进程间通信的一种机制&#xff0c;允许一个进程通知另一个进程发生了某些特定事件。信号可以来自硬件中断、用户输入&#xff0c;也可以来自其他进程或者内核本身。信号是一种异步通知机制&#xff0c;当某个事件发生时&#xff0c;操作系统会向目标…...

【C语言标准库函数】标准输入输出函数详解[4]:二进制文件读写函数

目录 一、fread() 函数 1.1. 函数简介 1.2. fread 使用场景 1.3. 注意事项 1.4. 示例 二、fwrite() 函数 2.1. 函数简介 2.2. fwrite 使用场景 2.3. 注意事项 2.4. 示例 三、总结 在 C 语言中&#xff0c;二进制文件读写函数允许以二进制形式对文件进行读写操作&…...

图像锐化(QT)

如果不使用OpenCV&#xff0c;我们可以直接使用Qt的QImage类对图像进行像素级操作来实现锐化。锐化算法的核心是通过卷积核&#xff08;如拉普拉斯核&#xff09;对图像进行处理&#xff0c;增强图像的边缘和细节。 以下是一个完整的Qt应用程序示例&#xff0c;展示如何使用Qt…...

Apache Kafka 消息清理之道

前言 消息的清理是 MQ 中间件的基本能力&#xff0c;可以避免 MQ 的存储占用空间无序增长。与其他消息产品不同&#xff0c;Apache Kafka(以下简称 Kafka) 中 topic 上的消息被消费后不会被马上清除&#xff0c;而是由 topic 级别的清理策略来控制。本文将简要介绍 Kafka 中的…...

JVM ①-类加载 || 内存区域

这里是Themberfue 终于结束了网络层的学习&#xff0c;当然&#xff0c;我们学习的知识也只是冰山一角&#xff0c;想要了解更多的知识&#xff0c;还请大家养成主动探索的习惯~~~接下来我们将对 JVM 的一些机制进行简单的讲解&#xff0c;对于 Java程序员来说&#xff0c;本身…...

物理信息机器学习(PIML)的基础探讨及技术实现

在传统机器学习方法迅速发展并在图像识别、语音处理、自然语言处理等领域取得显著突破的同时,科学计算、工程设计以及自然系统建模等领域常常面临数据不足、噪声干扰以及模型泛化能力弱的问题。单纯依赖数据驱动的“黑箱”模型在处理物理问题时,往往难以兼顾数据拟合与物理解…...

【浏览器多开】Google Chrome 谷歌浏览器分身术

谷歌浏览器分身术&#xff08;多开&#xff09;&#xff1a; 复制已有谷歌浏览器图标—>右键–>属性的目标栏中&#xff0c;添加 --user-data-dir自定义文件夹路径 参数。 例如&#xff1a; C:\MySpace\02Installed\Chrome\Chrome-bin\99.0.4844.51\chrome.exe –user-d…...

《量化绿皮书》Chapter 3 Calculus and Linear Algebra 微积分与线性代数(二)

《A Practical Guide To Quantitative Finance Interviews》&#xff0c;被称为量化绿皮书&#xff0c;是经典的量化求职刷题书籍之一&#xff0c;包含以下七章&#xff1a; Chapter 1 General Principles 通用技巧 Chapter 2 Brain Teasers 脑筋急转弯 Chapter 3 Calculus and…...

单片机成长之路(51基础篇) - 008 C51 的标示符和关键字

标准 C 语言定义了 32 个关键字&#xff0c;如下表(ANSI C的32个关键字)&#xff1a; C51在此基础上针对单片机功能进行了扩展&#xff0c;详情见下表(C51编译器扩充关键字)&#xff1a; C 51的数据类型 51单片机使用的C语言的存储器类型分为以下几种&#xff1a;...

嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?

2025年&#xff0c;全球AI领域最震撼的突破并非来自算力堆叠的超级模型&#xff0c;而是中国团队DeepSeek通过开源策略&#xff0c;推动大模型向微型化、低功耗场景的跨越。相对于当人们还在讨论千亿参数模型的训练成本被压缩到600万美金而言&#xff0c;被称作“核弹级别”的操…...

Deno vs Node.js:性能对比深度解析

1. 引言 Deno 和 Node.js 都是基于 V8 引擎的 JavaScript 运行时环境&#xff0c;然而它们在架构、模块管理、安全性和性能方面存在显著差异。Deno 由 Node.js 的原始作者 Ryan Dahl 开发&#xff0c;旨在解决 Node.js 设计上的一些问题&#xff0c;比如包管理、安全模型和 Ty…...

【R】Dijkstra算法求最短路径

使用R语言实现Dijkstra算法求最短路径 求点2、3、4、5、6、7到点1的最短距离和路径 1.设置data&#xff0c;存放有向图信息 data中每个点所在的行序号为起始点序号&#xff0c;列为终点序号。 比如&#xff1a;值4的坐标为(1,2)即点1到点2距离为4&#xff1b;值8的坐标为(6,7)…...