从 Spring Boot 到 Django —— 后端开发技术类比学习
从 Spring Boot 到 Django —— 后端开发技术类比学习
引言(从javaweb到pythonweb)
Django,一个成熟而简洁的 Web 框架时,我们在学习这个框架的过程中不仅可以体验 Python 的便捷生态,更能发现 Django 与 Spring Boot 在思想上存在许多相似之处。本文将帮助你从熟悉的 Spring Boot 框架出发,通过逐步对比、深入剖析 Django 的核心目录结构和工作原理,实现无缝上手。
1. 框架设计的异同
Spring Boot 的设计理念
- 约定优于配置:Spring Boot 自动配置减少了大量样板代码,项目初始化与执行依赖约定的默认配置。
- 注解驱动与依赖注入(DI) :大量使用注解来描述 Bean、自动扫描依赖和管理容器中的对象。
- 分层架构:标准化的 Controller-Service-Repository 模式,对象之间职责清晰。
Django 的设计理念
- 明确的 MVT 架构:Django 采用 Model-View-Template 架构,将业务逻辑(Model)、业务处理(View)与界面展示(Template)分离。
- 内置工具与自动化管理:包括 ORM、管理后台、认证授权等,开发者只需关注业务实现。
- “电池齐全”的哲学:Django 标榜一套完整解决方案,即使是初学者也能快速搭建一个稳定的 Web 应用。
类比:Spring Boot 的 DI 与自动配置可看作 Django 内部多处隐式实现的约定配置机制,而 Spring Boot 的 Controller 对应 Django 的 View,Repository 则可以与 Django Model 中的 ORM 调用相联系。
2. 具体项目结构对比 —— Spring Boot 与 Django 目录架构解析
Spring Boot 项目的典型目录
在 Spring Boot 中,一个典型的项目可能包含以下目录和文件:
-
src/main/java
:存放 Java 源代码,包括各层的实现(Controller、Service、Repository 等)。 -
src/main/resources
:配置文件(如application.properties
)、静态资源及模板文件(通常使用 Thymeleaf、Freemarker)。 -
pom.xml
或build.gradle
:项目构建与依赖管理文件。
Django 项目的核心目录结构
Django 项目的默认目录结构与 Spring Boot 有很多相似之处,但风格更为简洁:
-
根目录:执行
django-admin startproject myproject
后生成,包含整体项目配置。-
manage.py
:项目命令行工具,类似于 Spring Boot 中通过 Maven/Gradle 执行各类任务的入口。 -
项目配置包(通常与项目同名):包含以下关键文件:
-
__init__.py
:包初始化文件。 -
settings.py
:项目全局配置,相当于 Spring Boot 的application.properties
或application.yml
文件,但更偏向代码化配置。 -
urls.py
:路由配置,类似于 Spring Boot Controller 层中映射路径的定义,但集中管理。 -
wsgi.py
或asgi.py
:项目部署的入口,类似于 Spring Boot 的 Servlet 容器入口。
-
-
-
应用目录:通过
python manage.py startapp myapp
生成,每个应用负责项目中某个业务模块,体现出 Django 的模块化设计。-
models.py
:定义数据模型,对应于 Spring Boot 中的 Entity 类。 -
views.py
:定义业务逻辑及请求处理,相当于 Spring Boot 中的 Controller 层。 -
urls.py
(可选):如果模块化路由需要独立管理,可在应用内定义路由,并在项目主路由中引用。 -
admin.py
:注册模型到 Django Admin 后台管理,类似于 Spring Boot 中为数据模型开发的一些后台管理工具,但 Django 已内置成熟解决方案。 -
apps.py
:应用配置,类似于 Spring Boot 中的配置 Bean,定义应用的一些元数据。 -
tests.py
:单元测试编写,类似于 Spring Boot 中对各层功能的测试代码。 - 静态文件 & 模板目录:有时独立管理(例如
static/
与templates/
),与 Spring Boot 的资源目录概念类似。
-
核心对比:Spring Boot 通过多层次分离明确职责,而 Django 则通过“项目—应用”的层级组织实现模块化,二者都强调“约定优于配置”,但 Django 的目录与文件更多地采用代码化方式来定义整体配置。
在 Spring Boot 中,常见的分层包括以下几个部分:
- Controller 层:负责接收 HTTP 请求,对接前端数据。
- Service 层:封装业务逻辑,进行数据处理和校验。
- Mapper/Repository 层:与数据库交互,实现数据的增删改查。
而 Django 的项目组织通常没有传统意义上的“分层”划分,而是通过应用(app)将业务模块化。主要组成部分有:
Views(视图) :负责请求处理与响应生成,相当于 Controller 层。
Models(模型) :负责数据结构定义和数据库操作,相当于 Mapper/Repository 层。
Forms/Serializers(可选) :在数据校验或接口序列化时起到类似 Service 的作用(有时业务逻辑会分布到 View 或引入其它组件)。
3. Django 核心逻辑解析 —— 请求流程与内部工作机制
3.1 请求生命周期
Django 的请求处理流程可以分为以下几个关键步骤,与 Spring Boot 的 DispatcherServlet 模式有相似之处:
- 请求进入:用户请求首先经过 WSGI/ASGI 网关,被传入 Django 框架。
- 中间件处理:类似 Spring Boot 的过滤器或拦截器,Django 的中间件(Middleware)在请求处理之前和响应返回后执行,可以实现请求预处理、日志记录、安全验证等功能。
- URL 路由匹配:Django 根据
urls.py
中的定义将请求匹配到相应的 View。与 Spring Boot 中通过注解映射 URL 处理器类似,但 Django 路由配置更为集中和灵活。 - 视图处理:View 接收到请求后调用 Model 完成数据操作,并渲染模板生成响应结果。在这里,Django 的 ORM 与 Spring Boot 的 JPA/Repository 模式有异曲同工之妙。
- 响应返回:生成 HttpResponse 对象传递给中间件,最终返回给客户端。
3.2 ORM 与数据模型
- Spring Boot:通常使用 JPA/Hibernate 进行 ORM 映射,通过注解定义实体与数据库表的关系。
- Django:通过内置 ORM,在
models.py
中定义数据模型,并自动生成对应的数据库表结构。模型字段类型、约束条件等均由类属性定义,并支持查询集(QuerySet)高效查询。
类比说明:Django ORM 的 QuerySet 机制与 Spring Boot 中通过 Repository 提供的查询方法类似,两者都侧重于降低 SQL 直接编写的复杂性,同时支持链式查询、延迟加载等高级功能。
3.3 模板引擎与视图渲染
- Spring Boot:整合多种模板引擎(如 Thymeleaf),利用模板解析器将数据渲染到静态页面中。
- Django:内置模板引擎,其模板语言简洁直观,支持变量插值、控制流程(如 for、if)等。虽然模板语法较为简单,但足以胜任大部分场景,而对于复杂页面需求,也可以使用第三方扩展模板引擎如 Jinja2。
类比说明:Django 的模板与 Spring Boot 中 Thymeleaf 等模板引擎类似,二者都专注于将后端数据转换为最终的 HTML 展示。区别在于 Django 模板侧重“逻辑少、表现纯”的设计哲学。
3.4 内置管理后台
Django 内置一个功能强大的管理后台,通过简单的模型注册(admin.py 文件)即可生成一个针对后台数据管理的 Web 界面。这相当于 Spring Boot 中通过集成各种后台管理框架的解决方案,但 Django 将其作为核心特性一并提供,极大地提高了开发效率。
4. 代码对比示例(一个简单的用户(User)接口代码实战)
4.1 Spring Boot 示例
假设我们需要实现一个简单的用户接口,用于查询用户信息。
4.1.1 Controller 层
// UserController.java
package com.example.demo.controller;import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {private final UserService userService;// 构造器注入public UserController(UserService userService) {this.userService = userService;}// 通过 GET 请求查询用户信息@GetMapping("/api/users/{id}")public User getUserById(@PathVariable Long id) {return userService.findUserById(id);}
}
4.1.2 Service 层
// UserService.java
package com.example.demo.service;import com.example.demo.model.User;public interface UserService {User findUserById(Long id);
}
// UserServiceImpl.java
package com.example.demo.service;import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {private final UserMapper userMapper;public UserServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}@Overridepublic User findUserById(Long id) {// 调用 Mapper 层查询用户return userMapper.selectUserById(id);}
}
4.1.3 Mapper 层
这里假设使用 MyBatis 进行数据访问。
// UserMapper.java
package com.example.demo.mapper;import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {@Select("SELECT id, username, email FROM users WHERE id = #{id}")User selectUserById(Long id);
}
4.2 Django 示例
Django 中通常把业务相关代码都放在对应的应用中,下面我们用同样的“用户”需求做对比。
4.2.1 Models 层(数据访问)
# myapp/models.py
from django.db import modelsclass User(models.Model):username = models.CharField(max_length=100)email = models.EmailField()def __str__(self):return self.username
4.2.2 Views 层(请求处理)
在 Django 中,视图承担了 Controller 的职责。以函数视图为例:
# myapp/views.py
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from .models import Userdef get_user(request, user_id):# 根据 ID 获取用户数据,如果不存在则返回 404 错误user = get_object_or_404(User, pk=user_id)# 构造返回的 JSON 数据data = {'id': user.id,'username': user.username,'email': user.email,}return JsonResponse(data)
当然,你也可以使用 Django 的类视图(Class-Based Views),例如使用 Django REST framework 来实现 RESTful API,但为了与 Spring Boot 代码的直接对比,这里采用简单的函数视图。
4.2.3 URL 路由配置
类似于 Spring Boot 中通过注解映射请求,Django 使用集中式的 URL 配置。
# myapp/urls.py
from django.urls import path
from . import viewsurlpatterns = [path('api/users/<int:user_id>/', views.get_user, name='get_user'),
]
在项目的主 URL 配置中,需要包含应用的路由:
# myproject/urls.py
from django.contrib import admin
from django.urls import include, pathurlpatterns = [path('admin/', admin.site.urls),path('', include('myapp.urls')),
]
类比说明:
路由与请求处理
- Spring Boot:通过
@RestController
与@GetMapping
直接在类和方法上标明 URL 路由,分布在各个控制器中。- Django:使用
urls.py
集中配置路由,视图函数内处理请求。虽然配置方式不同,但两者本质上都是将 HTTP 请求映射到特定的业务处理逻辑上。业务逻辑与数据访问
- Spring Boot:Service 层明确解耦 Controller 与数据访问,Mapper(或 Repository)层处理数据库交互。
- Django:数据模型在
models.py
中定义,ORM 提供了直接操作数据库的方法。业务逻辑可以直接放在视图中,也可以抽象成独立的服务模块(例如在 Django 项目中也能使用 Service 层设计,但这不是框架强制的)。接口与实用性
在实际项目中,保持代码结构清晰、分层明确有助于维护和扩展,Spring Boot 与 Django 都有各自的最佳实践:
- Spring Boot 倾向于通过注解与依赖注入构建松耦合的分层架构。
- Django 借助“电池齐全”的设计提供了快速构建原型的便利,同时也允许根据业务需求进行代码分层和模块化处理。
建议在使用 Django 时,可以根据项目规模和团队习惯选择是否抽象出 Service 层。如果项目复杂度较高,将部分业务逻辑从视图中分离出来,可以借鉴 Spring Boot 的设计思想,保持代码清晰可维护。
5. 深入 Django 内部 —— 中间件、信号与扩展机制
5.1 中间件机制
Django 的中间件(Middleware)类似于 Spring Boot 的过滤器(Filter)和拦截器(Interceptor),允许开发者在请求和响应之间进行预处理或后处理。你可以在 settings.py
的 MIDDLEWARE
列表中插入自定义中间件,完成日志记录、权限校验、请求限流等操作。
5.2 信号机制
Django 的信号(Signals)提供了一种解耦事件驱动编程的方式,允许在特定动作(如模型保存、删除)发生时触发回调函数。这与 Spring Boot 中通过事件监听器(ApplicationListener)实现的机制有异曲同工之处,实现模块间低耦合的数据同步和触发操作。
5.3 应用扩展与第三方生态
与 Spring Boot 丰富的 Starter 模块类似,Django 社区提供了大量成熟的第三方插件与扩展包(如 Django REST framework、Django Channels 等),扩展了其在 API 开发、实时通信等领域的能力。掌握了 Django 的内核机制之后,便能更加灵活地引用和定制这些组件。
6.优劣对比
对比维度 | Spring Boot(Java) | Django(Python) |
---|---|---|
编程语言 | Java(强类型,静态语言) | Python(弱类型,动态语言) |
开发效率 | 中等:编码规范强,IDE 支持好,但写法相对繁琐 | 高:语法简洁、代码量少,开发速度快 |
框架定位 | 企业级开发框架,适合构建大型、复杂、稳定的服务 | 快速开发框架,适合敏捷开发、中小型项目 |
生态系统 | 庞大:配套齐全(SpringCloud、SpringSecurity、MyBatis 等) | 成熟:电池齐全(内建 ORM、Admin、Auth 等) |
性能表现 | 高性能:JVM 支持并发处理、线程池等机制 | 一般:Python 单线程运行为主,适合 I/O 密集型场景 |
学习曲线 | 稍陡:涉及注解、IOC、AOP 等概念,配置相对复杂 | 平缓:文档完善,理念简单,快速上手 |
数据库支持 | 广泛支持,结合 JPA/MyBatis 灵活使用 | 内建 ORM,支持 PostgreSQL/MySQL/SQLite 等 |
RESTful 支持 | 强:使用@RestController 、SpringMVC、Swagger 构建接口完整规范 | 强:结合 Django REST Framework 实现高效接口 |
部署方式 | 独立打包为 Jar,结合 Docker/K8s 易于部署 | WSGI/ASGI 服务部署(如 gunicorn + nginx 或 uvicorn + nginx) |
调试体验 | IDEA 等工具提供强大调试功能,类型安全 | Python 调试方便、重启快,适合调试频繁的开发 |
测试支持 | JUnit、MockMVC 等生态健全 | unittest、pytest,语法简洁,上手快 |
官方管理后台 | 无,需要手动开发 | 自带强大的 Admin 管理后台,开箱即用 |
适合人群 | 注重性能、稳定性、架构设计的后端工程师 | 注重效率、追求快速上线的全栈或中小型团队 |
典型应用场景 | 金融、电商、ERP、微服务、大型分布式系统 | 教育平台、内容管理系统(CMS)、数据接口服务、原型开发等 |
相关文章:
从 Spring Boot 到 Django —— 后端开发技术类比学习
从 Spring Boot 到 Django —— 后端开发技术类比学习 引言(从javaweb到pythonweb) Django,一个成熟而简洁的 Web 框架时,我们在学习这个框架的过程中不仅可以体验 Python 的便捷生态,更能发现 Django 与 Spring Boo…...
外接键盘与笔记本命令键键位不同解决方案(MacOS)
文章目录 修改键位第一步:打开设置第二步:进入键盘快捷键第三步:修改修饰键设置第四步:调整键位第五步:保存设置tips ikbc c87键盘win键盘没反应的解决亲测的方法这是百度的答案标题常规组合键尝试:型号差…...
测试基础笔记第四天(html)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 html介绍1. 介绍2.骨架标签3.常用标签标题标签段落标签超链接标签图片标签换行和空格标签布局标签input标签(变形金刚)form标签列表标签 htm…...
爱普生SG2520VGN差分晶振5G基站的时钟解决方案
在 5G 通信时代,数据流量呈爆发式增长,5G 基站作为信号的核心中转枢纽,承载着前所未有的数据传输与处理重任。从海量的物联网设备连接,到高速移动用户的数据交互,每一个环节都对基站的性能提出了严苛要求。而精准稳定的…...
广汽滴滴Robotaxi首次亮相,中国自动驾驶加速领跑新赛道
作者 |张马也 编辑 |德新 4月12日,在广汽科技日上,广汽与滴滴合作的前装量产Robotaxi首次正式亮相。 这款车基于广汽埃安的纯电平台打造,搭载了滴滴自动驾驶的全套软硬件方案。滴滴自动驾驶全新一代的硬件平台, 包含激光雷达、…...
从拥堵到畅行,智慧城市如何实现交通魔法?
实时交通监控与数据分析 在智慧城市的建设中,实时交通监控是基础。它依赖于广泛部署的传感器网络,如摄像头、雷达、地磁感应器等,用于收集道路交通信息。这些设备将数据传输至中央管理系统,利用大数据处理技术进行分析࿰…...
边缘计算场景下的模型轻量化:TensorRT部署YOLOv7的端到端优化指南
一、边缘计算场景下的技术挑战与优化路径 在边缘设备(如Jetson系列)部署YOLOv7需兼顾模型精度、推理速度与功耗限制三重约束。TensorRT作为NVIDIA官方推理加速库,通过算子融合、量化压缩和内存复用等优化技术,可将模型推理速度提…...
flutter json解析增强
依赖:xxf_json 反序列化兼容特征一览表 类型\是否兼容 int double num string bool int yes yes yes yes yes double yes yes yes yes yes num yes yes yes yes yes string yes yes yes yes yes bool yes yes yes yes yes 专业词语 .g…...
职坐标解码互联网行业转型发展新动能
当前,互联网行业正以前所未有的速度重塑全球产业格局。工信部最新数据显示,我国互联网企业营收连续三年保持双位数增长,其中百强企业在人工智能、物联网等领域的投入强度同比提升40%,展现出强劲的技术引领力。与此同时,…...
【软考-架构】13.4、质量属性-架构评估
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 质量属性软件架构评估✨质量属性质量属性场景敏感点&权衡点三种常用的评估方式基于场景的架构分析方式SAAM✨架构权衡分析法ATAM成本效益收益法CBAM 考试真题其他评估…...
Gitlab SSH Jenkins Pipeline Supervisor部署
Gitlab SSH Jenkins Pipeline方式部署 准备搞一搞简单部署SpringBoot项目的一种方式,通过Gitlabssh Jenkins Pipeline的方式,简单学习下。 环境准备 本地域名ip地址安装软件作用server01192.168.110.110Gitlab代码托管server02192.168.110.111Jenkins…...
Python Pandas实现导出两个Excel数据集的分组记录数分析
编写Python Pandas代码实现从一个Excel文件中的一个Sheet中的表格里取两个维度字段,根据这两个维度字段的数据分组统计,计算记录数的分组总计值,得到一个包含两个维度字段和记录数字段的分组总计值字段的dataframe,再从另一个Exce…...
维港首秀!沃飞长空AE200亮相香港特别行政区
4月13日-16日,第三届香港国际创科展在香港会议展览中心盛大举办。 作为国内领先、国际一流的eVTOL主机厂,沃飞长空携旗下AE200批产构型登陆国际舞台,以前瞻性的创新技术与商业化应用潜力,吸引了来自全球17个国家及地区的行业领袖…...
PyTorch 根据官网命令行无法安装 GPU 版本 解决办法
最近遇到一个问题,PyTorch 官网给出了 GPU 版本的安装命令,但安装成功后查看版本,仍然是 torch 2.6.0cpu 1. 清理现有 PyTorch 安装 经过探索发现,需要同时卸载 conda 和 pip 安装的 torch。 conda remove pytorch torchvision …...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——USB测试 #USB HOST #USB 鼠标
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——USB…...
Java基础-超全总结
1.Java中的基本数据类型 Java中有四类八种基本的数据类型,四类数据类型包括整型、浮点型、字符型、布尔型。 整型包括:byte、short、int和long浮点型包括:float和double字符型是char布尔型是boolean。 2.Java中的包装类型和基本类型的区别…...
区块链技术在数据隐私保护中的应用:从去中心化到零知识证明
区块链技术在数据隐私保护中的应用:从去中心化到零知识证明 在数字化时代,数据隐私已成为全球关注的焦点。无论是个人身份信息、医疗数据还是企业的敏感业务数据,都面临着泄露、篡改和滥用的风险。传统的安全方案依赖中心化服务器进行加密和…...
【大模型实战篇】--阿里云百炼搭建MCP Agent
MCP协议(Model Communication Protocol,模型通信协议)是大语言模型(LLM)与外部系统或其他模型交互时的一种标准化通信框架,旨在提升交互效率、安全性和可扩展性。 目录 1.阿里云百炼--MCP 1.1.MCP 服务接…...
Android ExifInterface rotationDegrees图旋转角度,Kotlin
Android ExifInterface rotationDegrees图旋转角度,Kotlin import android.media.ThumbnailUtils import android.os.Bundle import android.util.Log import android.util.Size import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity …...
linux 内核 ida机制分析
在描述ida之前,需要读者对linux 内核的radix-tree有一定的了解。关于radix-tree(基数树)的描述,作者在之前有专门的文章对其进行描述,这里不再赘述。 IDA是什么?内核文档中解释如下: /*** IDA description** The IDA is an ID allocator which does not provide the ab…...
linux-定时任务清理buffer、cache
在清理 buffer 和 cache 之前,调用 sync 命令是一个好习惯。sync 会将文件系统缓冲区中的数据强制写入磁盘,确保数据的一致性,避免数据丢失的风险。以下是改进后的脚本,增加了多个 sync 语句: 1、脚本内容:…...
Linux常用命令整理
Linux 系统提供了大量常用命令行工具,涵盖文件操作、权限管理、网络诊断、软件安装、系统监控、脚本编程等各个方面。下面按照不同功能类别,整理常用的 Linux 命令及其中文说明和使用示例。 文件与目录操作 ● ls:列出目录内容,用于显示指定目录下的文件和子目录。常用参数…...
Python爬虫第14节-如何爬取Ajax的数据
目录 前言 一、什么是Ajax 1.1 具体举例 1.2 基本原理 二、Ajax的分析 2.1 查看请求 2.2 过滤请求 三、解析提取Ajax 结果 3.1 分析请求 3.2 分析响应 四、Ajax抓取实战 前言 咱们在使用requests抓取网页的时候,常常会发现,得到的结果和在浏览…...
mac上面使用zip命令压缩一劳永逸
问题 需要将当前目录的文件和目录(包含隐藏目录)都要压缩近一个zip包,但同时部分目录我不想压缩进去例如:.idea这个种idea的配置目录就不想压缩进zip包。 命令 zip -r flask-dev.zip . -x "*.idea*"-r:递归目录.:当前…...
错误地使用了 app.use() 来注册全局组件
我是import globalComponent from "/components"; /* eslint-disable */ // ts-nocheck // Generated by unplugin-vue-components // Read more: https://github.com/vuejs/core/pull/3399 export {}; /* prettier-ignore */ declare module vue { export interface…...
Python Django基于协同过滤算法的招聘信息推荐系统【附源码、文档说明】
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
鹰角:EMR Serverless Spark 在《明日方舟》游戏业务的应用
作者:鹰角网络高级大数据研发 茅旭辉 背景介绍 鹰角网络是一家年轻且富有创新的游戏公司,致力于开发充满挑战性和艺术价值的游戏产品。公司目前涵盖了游戏开发、运营和发行的全生命周期业务。随着业务的扩展,鹰角网络从单一爆款游戏发展到多…...
C语言学习之两个数值交换的算法
前言:本篇文章仅仅是作为作者复习使用 在C语言中,交换两个两个变量的数值是很常见的应用。在学习到指针的时候,我们已经掌握了几种交换的算法了。今天我来做一个小汇总 1创建第三个变量 缺点:需要创造第三个变量 2加减交换 缺点…...
CExercise_13_1排序算法_2归并排序
题目:CExercise_ 请手动实现归并排序算法: void merge_sort(int arr[], int len) 如果学有余力,不妨尝试一下多种临时数组的方式: 1.局部变量数组 2.全局变量数组 3.堆数组 关键点 分析: : 代码 代码块解决…...
富斯i6遥控器,无法切换通道解决办法
开机后长按【OK】键,进入设置 按【DOWN】选择【setup】 点击【ok】进入设置 再点击【OK】进入Reverse 将2设置为下,长按【cancel】保存,返回到设置 进入【Aux.channels】 将第二行【Source】设置为【Source SwC】,长按【CANCEL】保存并返回。…...
Maven 编译指定模版
背景 基于SpringCloud 做的微服务项目,很多都是依赖公共模块下的包,并且多模板都是在一个项目下的。 问题 每次打包都很编译整个项目下的所有模块。这样太耗时间了,把流水线的时间拖的太长了。 解决方案 在maven打包时,我们选…...
solr安装及ik中文分词器配置
提示:solr9.x版本需要jdk17,solr8.x版本需要jdk8 1、Solr 简介 Solr 是Apache 下的一个顶级开源项目,采用 Java 开发,它是基于 Lucene 的全文搜索服务器。Solr 提供了比 Lucene 更为丰富的查询语句,同时实现了可配置、…...
详解LeetCode中用字符串实现整数相加,字符串转整数及其溢出处理详解
目录 题目背景 代码整体逻辑 变量初始化 逐位相加过程 处理最后进位 结果反转 示例演示 总结 在LeetCode中,有一道经典的算法题是实现两个字符串形式的非负整数相加,今天我们就来深入分析一段用C实现该功能的代码,探究其背后的逻辑与…...
vue学习笔记06
学习的课程地址:老杜Vue视频教程,Vue2,Vue3实战精讲,一套通关vue_哔哩哔哩_bilibili 1、vue程序初体验 2、vue核心技术(基础) 3、Vue组件化 前面参见: vue学习笔记01 vue学习笔记02 vue学习笔记03 vue学习笔记…...
如何查看自己抖音的IP属地?详细教程及如何修改
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。以下是关于如何查看抖音IP属地的详细教程及常见问题解答,帮助您快速了解相关信息: 一、如何查看抖音账号的IP属…...
熟悉Linux下的编程
可能 目录 熟悉Linux下Python编程的含义及与非Linux环境编程的区别 一、核心含义解析 二、与非Linux环境的关键区别 三、典型应用场景对比 四、能力培养建议 openfoem的下载之路: 方法一:使用cd命令 方法二:使用快捷方式 方法三&am…...
Uniapp:获取当前定位坐标
目录 一、出现场景二、具体使用 一、出现场景 在项目的开发中,会出现打卡、定位当前位置的功能,那我们如何获取当前位置呢?这就需要使用getLocation来获取当前位置坐标 二、具体使用 uni.getLocation({type: wgs84, // 返回可以用于uni.op…...
GitHub实用手册
文章目录 一、GitHub 的定义二、GitHub 的主要功能三、GitHub 的优势四、GitHub 的使用相关工具GitSourcetreeGithub-Desktop 一、GitHub 的定义 GitHub 是一个基于 Git 的分布式版本控制系统,它允许开发者在本地和远程仓库中管理代码版本,支持多人协作…...
【从零实现高并发内存池】Central Cache从理解设计到全面实现
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Dijkstra算法求解最短路径—— 从零开始的图论讲解(2)
前言 在本系列第一期:从零开始的图论讲解(1)——图的概念,图的存储,图的遍历与图的拓扑排序-CSDN博客 笔者给大家介绍了 图的概念,如何存图,如何简单遍历图,已经什么是图的拓扑排序 按照之前的学习规划,今天笔者将继续带大家深入了解图论中的一个核心问题&#x…...
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7)
Spring AI 发布了它的 1.0.0 版本的第七个里程碑(M7),下个月就是 RC1,紧接着就是 GA!,对于我们 Java 开发者来说,这绝对是个值得关注的好消息! 但是对于 Java 学习者来说,…...
如何从 GitHub 镜像仓库到极狐GitLab?
最近 GitHub 封禁中国用户的事情闹得沸沸扬扬,虽然官方发布的报道说中国用户被限制登录是因为配置错误导致,已经撤回了更新,中国用户已经可以正常使用。但是这就像横在国内开发者和企业头上的“达摩克利斯之剑”。为了避免 GitHub 不可用而带…...
大象机器人推出myCobot 280 RDK X5,携手地瓜机器人共建智能教育机
摘要 大象机器人全新推出轻量级高性能教育机械臂 myCobot 280 RDK X5,该产品集成地瓜机器人 RDK X5 开发者套件,深度整合双方在硬件研发与智能计算领域的技术优势,实现芯片架构、软件算法、硬件结构的全栈自主研发。作为国内教育机器人生态合…...
在Android Studio中,`Settings`里的Gradle路径、环境变量以及`gradle - wrapper.properties`文件关联
在Android Studio中,Settings里的Gradle路径、环境变量以及gradle - wrapper.properties文件关联 Android Studio中Settings里的Gradle路径 在Android Studio的Settings(Preferences ) -> Build, Execution, Deployment -> Build Tools -> Gradle 中: Use defau…...
用react 写一个可左右滑动的柱状图
效果图 目录 效果图 ✅ 项目结构 🚀 创建项目步骤 1️⃣ 打开终端或命令行,创建新项目: 2️⃣ 安装 recharts 图表库: 3️⃣ 替换默认代码: 4️⃣ 启动项目: ✅ 项目结构 scrollable-bar-chart/ ├…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——MIPI LCD测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——MIPI LCD测试4.3 MIPI LCD测试4.3.1 使…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——RS485串口测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:www.alientek.com 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——RS485串口测试 第四章 ATK-DLMP257B功能…...
Sui 的工具生态简化了游戏开发者的 Web3 集成流程
希望利用 Web3 独特协同效应的游戏开发者,常常在强大的区块链功能与流畅的游戏体验之间难以权衡。许多区块链方案要求大幅重构游戏基础架构,增加了开发难度,甚至需要学习全新的智能合约语言。而 Sui 通过直观的工具消除这一阻力,使…...
Vue 3 的组合式 API-hooks
Vue 3 的组合式 API 组合式 API 是 Vue 3 的核心特性之一,它允许开发者将组件的逻辑拆分为可复用的函数。组合式 API 的主要特点是 逻辑复用:将逻辑提取到独立的函数中,方便在多个组件中复用。组织清晰:将相关的逻辑分组&#x…...
AOSP Android14 Launcher3——底部任务栏Taskbar详解
前言:Launcher3中底部Taskbar和Navbar,或者说中文里面的术语导航栏,这几个词是很容易让人混淆的地方。本文要介绍的是Taskbar。从字面上意思来看,Taskbar就是任务栏,任务栏是Launcher3中一个重要的组件,尤其…...