深度解析相对路径、绝对路径与URL映射策略、MVC架构
一、相对路径与绝对路径的概念与应用
路径管理是Web开发中的核心概念之一。理解不同类型的路径如何影响文件和资源的访问对于确保代码的灵活性、可维护性和可移植性至关重要。
1. 相对路径
相对路径是指相对于当前文件或目录的位置来指定目标资源的路径。它不依赖于绝对的服务器根目录或URL,而是根据文件所在的目录进行计算。相对路径适用于多个文件和页面之间的引用,特别是在本地开发和部署环境中,可以避免路径错误或不一致问题。
应用场景:
- 内部页面链接:例如,在同一网站内部,页面之间的跳转通常使用相对路径。这样可以简化链接的管理,不必依赖绝对路径。
- 开发与生产环境:在开发环境中使用相对路径可以避免部署时路径变化带来的问题。将应用迁移到不同的服务器或目录结构时,无需调整路径,减少了维护工作。
优点:
- 灵活性:相对路径不依赖于具体的域名或根目录,可以在不同的环境中无需更改路径。
- 简洁性:相对于绝对路径,开发者无需关心完整的URL或文件系统位置,代码更简洁。
缺点:
- 路径错误排查困难:如果路径层级较为复杂,可能出现路径错误,特别是在涉及子目录时。
- 跨域问题:相对路径仅适用于同一域或文件系统下的资源,不能用于跨域的资源访问。
示例:
- 访问当前文件同级目录下的图片
logo.png
,路径为:logo.png
。 - 如果图片存放在父级目录下,则需要使用:
../logo.png
,表示上一级目录。
2. 绝对路径
绝对路径从根目录或从域名开始,通常是指向目标资源的完整路径。无论当前文件所在位置如何,绝对路径始终指向固定的资源位置。
应用场景:
- 外部资源引用:例如,使用CDN(内容分发网络)时,引用的资源(如CSS文件、图片或JavaScript文件)需要使用绝对路径来确保准确定位。
- 生产环境中的资源管理:例如,静态资源(如图片、JavaScript、样式表)的引用通常使用绝对路径,以避免因路径变化导致的引用错误。
优点:
- 准确性:绝对路径无论在何处访问,始终能准确找到资源。
- 适用于跨环境引用:适用于跨服务器和跨域的资源引用,特别是在大型应用和分布式架构中。
缺点:
- 缺乏灵活性:当迁移到不同的根目录或域名时,路径可能需要修改,导致维护困难。
- 冗长:相比相对路径,绝对路径更长,可能会增加代码的复杂性和可读性问题。
示例:
- 使用
https://example.com/images/logo.png
,确保无论当前文件在哪里,始终能够准确加载图片。
二、URL 路由分析:源码结构与框架结构的差异
URL路由不仅仅是一个路径问题,它决定了用户请求如何映射到具体的资源或功能模块中。随着Web开发的演进,从简单的文件路径映射到复杂的MVC框架的路由机制,URL路由的设计变得更加灵活和强大。我们可以通过两种不同的结构来分析:源码结构中的URL路由和框架结构中的URL路由。
1. 源码结构中的URL路由
在传统的Web开发中,URL路径通常直接与文件系统中的物理路径一一对应。这种方式简单直观,但随着项目规模的增加,难以维护和扩展。
应用场景:
- 小型项目或静态网站:在没有复杂功能或框架的情况下,URL路径直接与文件路径对应,适用于快速开发和部署。
- PHP或ASP.NET等传统开发方式:例如,访问
http://example.com/admin/login.php
时,直接加载admin/login.php
文件。
优点:
- 简单直观:URL与文件系统路径的直接映射,开发人员可以快速理解和调试,便于小规模应用的开发。
- 开发速度快:不依赖复杂的框架或配置,开发者可以快速搭建项目并进行调试。
- 低耦合性:在没有框架的支持下,开发者对项目结构有完全的控制权,不需要依赖于任何外部组件或配置。
缺点:
- 可维护性差:随着项目的增长,路由和文件结构会变得难以管理,特别是需要支持动态内容和多功能模块时。
- 缺乏扩展性:修改URL结构或路径映射时,可能需要修改大量代码或文件,增加了项目的维护成本。
- 路径冲突和混乱:在大型项目中,不同功能模块可能会有相同的路径(如
/login.php
),导致路径冲突或混乱。 - 不支持动态路由:传统的源码结构难以支持带参数的动态路由或复杂的请求处理,限制了应用的扩展性。
2. 框架结构中的URL路由:MVC模式
现代Web开发采用MVC(Model-View-Controller)架构,通过框架的路由系统来管理URL与控制器之间的映射。框架中的路由机制不仅提高了应用的可扩展性和灵活性,还促进了代码模块化和可维护性。
应用场景:
- 大型Web应用或复杂项目:框架的路由机制适用于大型项目,能够清晰地管理请求的处理和资源的分发,尤其是当项目涉及多个功能模块和复杂的业务逻辑时。
- RESTful API设计:框架结构中的路由系统非常适合设计RESTful API,它可以灵活处理动态参数、请求方法的区分以及URL的分层设计。
- MVC架构:框架中的URL路由通常与物理文件路径无关,而是通过配置文件或注解来定义URL与控制器方法的映射。
优点:
- 高灵活性:开发者可以自定义URL路径和控制器方法之间的映射关系,满足业务需求。
- 模块化管理:通过MVC模式将数据、逻辑和视图分离,使得代码更易维护、扩展和测试。
- 动态功能支持:框架支持动态路由,例如通过带参数的URL(如
/user/{id}
)来处理不同的请求,支持RESTful API和动态功能模块的设计。 - 可扩展性强:框架的路由机制能够随着项目的发展进行扩展,支持多层路由、子路由、路由分组等功能,帮助开发者管理复杂的URL结构。
缺点:
- 学习曲线:框架的路由机制通常比传统的源码结构复杂,开发者需要学习框架的配置和路由解析规则,尤其是对于初学者来说有一定的难度。
- 性能开销:由于框架路由需要进行路径解析和控制器调用,相比于直接映射到物理文件,框架的路由机制可能带来一定的性能开销,尤其是在高并发情况下。
- 配置复杂性:框架中复杂的路由配置和大量的映射规则可能导致代码的复杂性,增加了开发和维护的成本,特别是在大型项目中。
三、MVC架构介绍
MVC(Model-View-Controller)是一种经典的软件设计模式,广泛应用于Web应用程序的开发中,特别是在开发大型、复杂的系统时。MVC模式将应用程序的功能分成三个主要的部分:Model(模型)、View(视图)和Controller(控制器),通过这种方式实现了应用程序的解耦,使得代码更加模块化、易于维护和扩展。
1. Model(模型)
模型是MVC架构中的核心部分,负责应用程序的核心数据和业务逻辑。它代表了应用程序中的数据和与数据相关的操作,例如数据库的访问、数据验证、计算和更新等。模型并不直接处理用户界面,而是专注于数据的存储、处理和修改。
主要功能:
- 数据管理:模型负责数据的获取、存储和更新,通常与数据库进行交互。
- 业务逻辑:模型包含与数据相关的业务规则和逻辑,例如计算、验证等。
- 状态保持:模型通常负责维护应用程序的状态,保存用户数据,更新状态。
示例:
在一个博客应用中,模型可能包含博客文章的数据结构、数据库查询方法(如获取、删除、更新文章)等。
class BlogPost(models.Model):title = models.CharField(max_length=100)content = models.TextField()created_at = models.DateTimeField(auto_now_add=True)
2. View(视图)
视图是用户与应用程序交互的界面部分,负责展示数据给用户并接收用户的输入。视图通常是用户界面的设计部分,可以是HTML页面、动态生成的网页内容或其他可视化界面。视图的职责是根据模型的数据生成最终用户可以看到的内容,但不包含任何业务逻辑。
主要功能:
- 数据展示:视图从模型中获取数据并将其展示给用户。
- 用户交互:视图通过表单、按钮等元素接收用户的输入,但这些输入会传递给控制器进行处理。
示例:
在博客应用中,视图负责呈现博客文章列表、单篇文章的内容以及输入框等。
<!-- 展示博客文章的HTML视图 -->
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
3. Controller(控制器)
控制器充当模型和视图之间的中介,接收用户输入(通过视图),处理这些输入(通过调用模型中的方法),并最终更新视图。控制器的主要任务是处理用户的请求,决定使用哪个模型来处理数据,并将数据传递给视图以进行展示。
主要功能:
- 接收请求:控制器接收用户的输入请求,如点击按钮、提交表单等。
- 调用模型:控制器根据用户的请求调用模型中的方法,操作数据。
- 更新视图:控制器将模型的输出数据传递给视图,以便用户看到更新后的内容。
示例:
在博客应用中,控制器接收用户请求的URL(例如显示某篇文章),然后从数据库中获取文章数据,并将数据传递给视图进行渲染。
def show_post(request, post_id):post = get_object_or_404(BlogPost, id=post_id)return render(request, 'post_detail.html', {'post': post})
四、MVC的实际应用
现代Web开发框架大多基于MVC模式进行设计。例如:
- Laravel(PHP):采用MVC架构,模型处理数据库,控制器负责业务逻辑,视图负责渲染HTML页面。
- Django(Python):尽管Django的框架中有些不同的术语(例如,它使用“视图”代替控制器),但它仍然遵循MVC设计模式,视图负责渲染数据,模型处理数据,控制器(在Django中是视图函数)处理请求。
- Ruby on Rails(Ruby):严格遵循MVC架构,强调模型、视图和控制器的分离和协作。
- ASP.NET MVC(C#):基于MVC模式构建Web应用程序,通过控制器处理用户请求,模型操作数据,视图渲染UI。
下面我将为你提供具体的框架路由案例,涵盖一些流行的Web开发框架,如 Laravel (PHP)、Django (Python)、Express.js (Node.js) 和 Spring Boot (Java),通过具体的代码示例来展示如何配置和使用框架中的路由。
1. Laravel (PHP) 框架路由示例
Laravel是一个非常流行的PHP框架,它采用了非常简洁的路由配置方式。
简单路由
在Laravel中,路由通常在 routes/web.php
文件中定义。例如:
// 访问 /home 会调用 HomeController 的 index 方法
Route::get('/home', [HomeController::class, 'index']);
带参数的路由
Laravel也支持路由参数,允许从URL中提取参数:
// 访问 /user/123,会将 123 传递给 UserController 的 show 方法
Route::get('/user/{id}', [UserController::class, 'show']);
如果你访问 /user/123
,Laravel 会将 123
作为参数传递给 UserController
的 show
方法。
路由约束
Laravel允许你为路由参数设置约束,确保参数符合一定的规则。例如,限制 id
必须是数字:
Route::get('/user/{id}', [UserController::class, 'show'])->where('id', '[0-9]+');
路由分组
Laravel还允许你为路由分组并应用公共属性(如中间件、命名空间等):
Route::middleware(['auth'])->group(function () {Route::get('/dashboard', [DashboardController::class, 'index']);Route::get('/settings', [SettingsController::class, 'index']);
});
这里,/dashboard
和 /settings
路由都要求用户认证通过才能访问。
2. Django (Python) 框架路由示例
Django是Python中的一个高效的Web框架,采用了与Laravel类似的路由系统。
简单路由
在Django中,路由定义通常在 urls.py
文件中。例如:
from django.urls import path
from . import viewsurlpatterns = [path('home/', views.home, name='home'),
]
带参数的路由
Django也支持在URL中传递参数,类似于Laravel的路由参数。示例:
from django.urls import path
from . import viewsurlpatterns = [path('user/<int:id>/', views.user_profile, name='user_profile'),
]
访问 /user/123/
会将 123
传递给 user_profile
视图函数作为参数。
命名路由
Django允许给每个路由命名,方便在模板中或其他视图函数中引用:
urlpatterns = [path('home/', views.home, name='home'),
]
在模板中引用:
<a href="{% url 'home' %}">Home</a>
3. Express.js (Node.js) 框架路由示例
Express.js是Node.js中的一个简洁、灵活的Web框架,它提供了强大的路由功能。
简单路由
在Express中,路由通常在 app.js
或 routes.js
中定义。例如:
const express = require('express');
const app = express();app.get('/home', (req, res) => {res.send('Home Page');
});
带参数的路由
Express也支持URL路径中的动态参数。例如:
app.get('/user/:id', (req, res) => {const userId = req.params.id;res.send(`User ID: ${userId}`);
});
访问 /user/123
会返回 User ID: 123
。
路由分组
在Express中,可以通过 express.Router()
来分组路由。例如:
const adminRouter = express.Router();adminRouter.get('/dashboard', (req, res) => {res.send('Admin Dashboard');
});app.use('/admin', adminRouter);
现在,访问 /admin/dashboard
会由 adminRouter
处理。
4. Spring Boot (Java) 框架路由示例
Spring Boot是Java中的一个流行框架,它使用了Spring MVC的路由机制。
简单路由
在Spring Boot中,路由通常通过控制器类中的注解来定义。例如:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HomeController {@GetMapping("/home")public String home() {return "Home Page";}
}
带参数的路由
Spring Boot也支持路径参数:
import org.springframework.web.bind.annotation.PathVariable;@RestController
public class UserController {@GetMapping("/user/{id}")public String userProfile(@PathVariable String id) {return "User ID: " + id;}
}
访问 /user/123
会返回 User ID: 123
。
路由分组与请求方法
Spring Boot通过注解来定义不同的请求方法,如 @GetMapping
、@PostMapping
等。你可以为同一个URL定义不同的请求方式:
@RestController
public class AdminController {@GetMapping("/admin/dashboard")public String dashboard() {return "Admin Dashboard - GET";}@PostMapping("/admin/dashboard")public String updateDashboard() {return "Admin Dashboard - POST";}
}
总结
在Web开发中,理解相对路径、绝对路径以及URL路由的不同应用是非常重要的。每种路径和路由机制都有其适用场景和优缺点。通过对源码结构和框架结构中URL路由的深入分析,我们可以更加清晰地了解它们如何影响代码的组织和管理:
- 相对路径 提供灵活性,适用于较小或简易项目,但在跨目录和跨域引用时存在一定的局限性。
- 绝对路径 提供精确的资源定位,但不够灵活,可能导致路径管理上的问题。
- 源码结构中的URL路由 适用于简单的项目,但随着规模扩大时,可能会遇到维护上的挑战。
- 框架结构中的URL路由 提供了极大的灵活性和可维护性,适合现代复杂应用的开发,尤其在MVC架构下,它能有效地组织和管理不同模块的请求。
通过合理选择路径和路由机制,可以提高项目的可维护性、可扩展性,并促进高效的Web开发。
相关文章:
深度解析相对路径、绝对路径与URL映射策略、MVC架构
一、相对路径与绝对路径的概念与应用 路径管理是Web开发中的核心概念之一。理解不同类型的路径如何影响文件和资源的访问对于确保代码的灵活性、可维护性和可移植性至关重要。 1. 相对路径 相对路径是指相对于当前文件或目录的位置来指定目标资源的路径。它不依赖于绝对的服…...
clipboard----封装复制组件
Clipboard.js 是一个轻量级的 JavaScript 库,旨在帮助开发者轻松地实现将文本复制到剪贴板的功能。它不依赖 Flash 或其他外部库,并且提供了一种简单的方式来响应用户的复制行为。Clipboard.js 支持绑定到任何元素(如按钮、图片等)…...
vue 中数据改变后,组件不更新
vue 中数据改变后,组件不更新 1.1. 确认响应式 1.2. 使用计算属性或侦听器 1.3. 检查异步更新队列 1.4. 手动触发更新 1.5. 检查数据绑定 1.6. 避免直接修改数组 1.7. 使用 Vue.set 或 this.$set 1.8. 检查作用域问题 1.9. 使用 Vue DevTools vue 中数据改变后&…...
使用C#和OPenCV实现圆形检测
文章目录 霍夫变换使用 OpenCV 和 C# 实现圆形检测 霍夫变换 在计算机视觉中,圆形检测是一个常见且有用的任务,特别是在物体识别、图像分析和图形处理等领域。OpenCV 是一个强大的开源计算机视觉库,它提供了许多工具来实现不同的图像处理功能…...
C++ 给定字符串,然后给出开始要取的位置,返回取到的信息
3 happy new year 7 year 1 new 4 new year year error input #include <stdio.h> #include <string.h> void strmcpy(char* s, char* t, int m); int main() {int repeat, m;char t[1000], s[1000];scanf("%d", &repeat);getchar(); //吸收换行符in…...
异步持久化策略对比
1.背景 游戏服务器其中一项重点工作,就是对游戏玩家的数据进行持久化,保证下次登录可以再续前缘。如果游戏服务器架构里没有缓存,每次操作都需要读写数据库,无疑对数据库带来非常大的压力。一旦使用缓存,就伴随异常持…...
手机租赁系统开发全流程解析与实用指南
内容概要 在如今快速发展的科技时代,手机租赁系统已经成为一种新兴的商业模式,非常符合当下市场需求。那么,在开发这样一个系统的时候,首先要从需求分析和市场调研开始。在这一阶段,你需要了解用户需要什么࿰…...
apache-dubbo
dubbo 文档地址 dubbo 官方文档地址 https://dubbo.apache.org/zh-cn/docs/user/references/api.html nacos 官方文档地址 https://nacos.io/zh-cn/docs/quick-start.html nacos下载地址 https://github.com/alibaba/nacos/releases/download/2.3.0/nacos-server-2.3.0.…...
【JavaEE】网络(1)
🐵本篇文章开始讲解计算机网络相关的知识 一、基础概念 1.1 局域网和广域网 局域网→Local Area Network→简称LAN,局域网是局部组建的一种私有网络,局域网内的主机之间可以进行网络通信,局域网和局域网之间在没有连接的情况不能…...
系统思考—决策
今年在为不同公司交付培训与项目时,常常听到“降本增效”的提法,但关键是:“降”的到底是什么成本?裁员无疑是最快的成本削减方式,但也可能带来人心惶惶。人力是资本,不是成本。除非企业到了生死存亡的关头…...
nVisual 前端集成SDK使用说明
目前客户需要搭建自己的可视化产品,但需要使用nVisual的可视化视图功能,根据目前项目实施需求,决定做了一款简单版的SDK视图插件,这个小插件的主要功能是嵌入到客户项目里给客户提供 ‘详细视图’‘拓扑视图’或者是‘主视图’的展示功能.目前已经开发完毕,这里做一下简单介绍.…...
上传文件时获取音视频文件时长和文本文件字数
获取音视频文件时长和文本文件字数 一、获取音视频文件时长二、计算文本文件字数 最近有个需求,要求上传文件时获取音视频文件时长和文本文件字数🐶。 发现这样的冷门资料不多,特做个记录。本文忽略文件上传功能,只封装核心的工具…...
[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners
本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...
【C++】string的主要功能模拟复现
经常调用的短小函数直接定义在头文件中,可以节省时间开销 #include<iostream> #include<assert.h> using namespace std; namespace mumu {class string{friend ostream& operator<<(ostream& _cout, const mumu::string& s);friend…...
Linux环境安装Jenkins
Linux环境安装Jenkins Jenkins和JDK的版本 Jenkins和JDK的版本需要对应,不然无法正常启动。 Jenkins稳定版下载地址 Jenkins服务 手动使用命令启动和关闭Jenkins比较麻烦,所以可以把Jenkins设置成开机启动。 创建Jenkins.sh文件 JAVA_HOME和jenk…...
Elasticsearch:ES|QL 中的全文搜索 - 8.17
细心的开发者如果已经阅读我前两天发布的文章 “Elastic 8.17:Elasticsearch logsdb 索引模式、Elastic Rerank 等”,你就会发现在 8.17 的发布版中,有一个重要的功能发布。那就是 ES|QL 开始支持全文搜索了。在今天的文章中我们来尝试一下。…...
Leetcode 3387. Maximize Amount After Two Days of Conversions
Leetcode 3387. Maximize Amount After Two Days of Conversions 1. 解题思路2. 代码实现 题目链接:3387. Maximize Amount After Two Days of Conversions 1. 解题思路 这一题思路上其实就是要分别求出day 1以及day 2中原始货币与其他各个货币之间的成交价&…...
Lumos学习王佩丰Excel第二十一讲:经典Excel动态图表实现原理
一、动态图表实现原理 1、理解图表中的数据系列 在Excel图表中,系列指的是图表中的数据集合,它通常代表着一个数据源。每个系列都可以包含多个数据点,这些数据点在图表中以特定的形式展现,如柱状图中的柱子,折线图中…...
静态路由、RIP、OSPF、BGP的区别
静态路由:是管理员手动将路由写入到路由器中,配置简单开销小,但不能适应网络变化,只用于小型的网络 RIP,路由信息协议,属于距离矢量路由协议的一种,根据跳数来判断最优路由,如果跳数…...
解决 Flutter 在 Mac 上的编译错误
解决 Flutter 在 Mac 上的编译错误 在使用 Flutter 进行项目开发并尝试在 Mac 设备上进行编译时,遇到了一系列的错误信息,这些错误信息给项目的构建与部署带来了阻碍。 一、错误详情 在编译过程中,Xcode 输出了大量的信息,其中…...
ECharts实现数据可视化入门详解
文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...
LRM-典型 Transformer 在视觉领域的应用,单个图像生成3D图像
https://yiconghong.me/LRM. 一、Abstract 第一个大型重建模型(LRM),它可以在5秒内从单个输入图像预测物体的3D模型。LRM采用了高度可扩展的基于transformer的架构,具有5亿个可学习参数,可以直接从输入图像中预测神经…...
Stream– ESP8266物联网应用,(客户端向服务器发送数据信息 客户端向服务器请求数据信息)
Stream– ESP8266物联网应用 Stream对于ESP8266-Arduino语言来说指的是数据序列。请留意:在C编程中Stream常被翻译作“流”。我们认为将Stream称为数据序列更加直观。因为数据序列这一概念有两个很关键特点。 第一个特点是“序”,即数据序列不能是杂乱…...
win10系统右下角没有显示网络图标 , 打开或关闭系统图标网络灰色
win10系统右下角没有显示网络图标 / 打开或关闭系统图标网络灰色 win10系统右下角没有显示网络图标, 并且打开或关闭系统图标网络灰色 解决方案: 首先,按【Ctrl Alt Del】组合键,然后点击【任务管理器】。任务管理器窗口,找到并选择【Wind…...
Python使用Selenium库获取 网页节点元素、名称、内容的方法
我们要用到一些网页源码信息,例如获取一些节点的class内容, 除了使用Beautifulsoup来解析,还可以直接用Selenium库打印节点(元素)名称,用来获取元素的文本内容或者标签名。 例如获取下面的class的内容&am…...
onnx文件转pytorch pt模型文件
onnx文件转pytorch pt模型文件 1.onnx2torch转换及测试2.存在问题参考文献 从pytorch格式转onnx格式,官方有成熟的API;那么假如只有onnx格式的模型文件,该怎样转回pytorch格式? https://github.com/ENOT-AutoDL/onnx2torch提供了…...
计算机网络中的SIP协议是什么?
SIP(Session Initiation Protocol,会话初始化协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议。以下是对SIP的详细简述: 一、SIP的基本概念 SIP是一个…...
Apache Kylin最简单的解析、了解
官网:Overview | Apache Kylin 一、Apache Kylin是什么? 由中国团队研发具有浓厚的中国韵味,使用神兽麒麟(kylin)为名 的一个OLAP多维数据分析引擎:(据官方给出的数据) 亚秒级响应ÿ…...
axfbinhexelf文件区别
0 Preface/Foreword axf,bin,hex,elf四个都能存在于嵌入式软件领域。 1 文件介绍 嵌入式软件中常见的文件包含: axf,包含调试信息,文件最大。调试信息放在机器码前面。elfhex,包含地址信息,文件内容较大。bin&#x…...
MySQL表自增id溢出的故障复盘,你是如何解决与监控的
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
03、SpirngMVC核心(下)
一、关于RESTful编程风格 什么是RESTful RESTful的英文全称是:Representational State Transfer(表述性状态转移) RESTful是Web服务接口的一种设计风格。它定了一组约束和规范,可以让Web服务接口更加简洁、易于理解、易于扩展、安全可靠。 RESTful对于请求的约束如下:…...
【游戏设计原理】10 - 科斯特的游戏理论
科斯特的游戏理论强调了游戏与学习之间的关系,认为“玩得开心”与“学习”是紧密相连的。换句话说,游戏的核心魅力在于通过适当的挑战和不断的学习进程激发玩家的内啡肽循环,这让玩家在不断的探索和进步中找到乐趣。 科斯特的理论通过游戏是…...
【JAVA】Java项目实战—Java EE项目:客户关系管理(CRM)系统
Java EE项目:客户关系管理(CRM)系统 一、背景介绍 1.1 Java语言的重要性 Java是一种广泛使用的编程语言,因其跨平台性、面向对象特性以及丰富的生态系统而受到开发者的青睐。Java EE(Enterprise Edition)…...
JAVA 零拷贝技术和主流中间件零拷贝技术应用
目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云,测试运行代码看耗时为啥带buffer的IO比普通IO性能高?BufferedInputStream为啥性能高点…...
STM32软件IIC驱动TCA9548A多路测量AHT10
STM32软件IIC驱动TCA9548多路测量AHT10 TCA9548AAHT10代码逻辑代码展示现象总结 TCA9548A TCA9548A 有八个可通过 I2C 总线控制的双向转换开关,SCL/SDA 上行对扩展到八个下行对,或者通道,适用于系统中存在I2C目标地址冲突的情况。8路双向转换…...
博弈论3:图游戏SG函数(Graph Games)
目录 一、图游戏是什么 1.游戏特征 2.游戏实例 二、图游戏的必胜策略 1.SG 函数(Sprague-Grundy Function) 2.必胜策略(利用SG函数) 3.拿走游戏转化成图游戏(Take-away Game -> Graph Game) 一、图…...
音视频入门基础:MPEG2-TS专题(17)——FFmpeg源码中,解析TS program map section的实现
一、引言 由《音视频入门基础:MPEG2-TS专题(16)——PMT简介》可以知道,PMT表(Program map table)由一个或多个段(Transport stream program map section,简称TS program map sectio…...
SQL server学习05-查询数据表中的数据(上)
目录 一,基本格式 1,简单的SQL查询语句 2,关键字TOP 3,关键字DISTINCT 二,模糊查询 1,通配符 三,对结果集排序 1,不含关键字DISTINCT 2,含关键字DISTINCT 3&…...
Transformer记录Attention is all you need
视频: Transformer 原理详解_哔哩哔哩_bilibili 代码: harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper....
JAVA入门:使用IDE开发
JAVA入门:使用IDE开发 什么是IDE IDE(Integrated Development Environment,集成开发环境)是一种软件应用程序,它为程序开发、软件设计、项目管理等提供全面的设施。 简单来说就是简化开发过程,让编程更加…...
汽车嵌入式软件构建高效技术团队的全面思考
在汽车嵌入式软件开发领域,构建一支高效的通用技术团队至关重要。这类团队负责为各种项目提供可复用、标准化的技术基石,从而提高开发效率、降低成本并确保产品质量。构建这样的团队需要从技术能力、角色分工、标准化与复用、流程管理与质量保证、工具和…...
Debezium源码分析: TopicSelector实现原理与应用
Debezium源码分析: TopicSelector实现原理与应用 Debezium源码分析: TopicSelector实现原理与应用文章目录背景介绍主要功能应用场景实现原理DataCollectionId 接口核心设计工作流程源码分析基础实现默认选择器创建应用示例1. 分库分表场景2. 多租户场景3. 业务领域分组总结设计…...
SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布
目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…...
【恶意软件检测论文】通过提取 API 语义来实现的一个新颖的安卓恶意软件检测方法
目录 摘要1. 引言2. 相关工作2.1. 基于重新训练的恶意软件检测2.2. 基于应用关系图的恶意软件检测2.3. 基于异常样本识别的恶意软件检测2.4. 基于API聚类的恶意软件检测 3. AMDASE概述4. 基于语义距离的API聚类4.1. API特征提取4.2. API句子生成4.3. API句子编码4.4.聚类中心生…...
大模型系列4--开源大模型本地部署到微调(WIP)
背景 一直想真正了解大模型对硬件资源的需求,于是准备详细看一篇视频,将核心要点总结记录下。本文内容参考视频:保姆级教程:6小时掌握开源大模型本地部署到微调,感谢up主 训练成本 训练 > 微调 > 推理训练GPT…...
Linux 磁盘满了怎么办?快速排查和清理方法
当 Linux 磁盘满了,会导致系统无法正常运行,比如无法写入文件、服务停止、甚至系统崩溃。因此,快速排查并清理磁盘空间是非常重要的。以下是详细的排查和解决步骤: 一、快速定位磁盘占用原因 1. 检查磁盘使用情况 使用 df 命令查…...
go 协程练习例题
go 协程练习例题 例1:统计 1-200000 的数字中,哪些是素数例2:使用单通道、2个协程交替读取字符串例3:使用1个管道,2个协程写数据、1个协程读例4:完成一个并发任务调度器,按照指定顺序执行一系列…...
JAVA:访问者模式(Visitor Pattern)的技术指南
1、简述 访问者模式(Visitor Pattern)是一种行为型设计模式,允许你将操作分离到不同的对象中,而无需修改对象本身的结构。这种模式特别适合复杂对象结构中对其元素进行操作的场景。 本文将介绍访问者模式的核心概念、优缺点,并通过详细代码示例展示如何在实际应用中实现…...
如何实现邮箱+验证码登录功能(express+vue+MySQL版)
目录 1. 初始化项目2. 配置环境变量3. 更新数据库4. 编写路由函数5. 前端调用接口 1. 初始化项目 前端根目录:/web 后端根目录:/api_server 安装依赖: npm install express mysql nodemailer randomstring dotenv其中,nodemaile…...
Pycharm访问MySQL数据库·上
1.MySQL驱动模块Connector #导入数据库的驱动工具 import mysql.connector #连接数据库必备的条件 config {"host": "localhost","port": 3306,"user": "root","password": "888888","database&…...