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

【Gin】2:快速上手Gin框架(模版、cookie、session)

在这里插入图片描述

本文目录

  • 一、模版渲染
  • 二、自定义模版函数
  • 三、cookie
  • 四、Session
  • 五、cookie、session区别
  • 六、会话攻击

一、模版渲染

在 Gin 框架中,模板主要用于动态生成 HTML 页面,结合 Go 语言的模板引擎功能,实现数据与视图的分离。

模板渲染是一种动态生成 HTML 页面的技术,通过模板文件和动态数据的结合,Web 应用可以为每个用户生成不同的内容。Gin 使用 Go 标准库 html/template 提供模板功能,该模板引擎基于 HTML,能够避免常见的跨站脚本攻击 (XSS)。

创建一个template模版文件,其中body中的.title就是动态的数据,需要后端请求后显示。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>gin_templates</title>
</head>
<body>
{{.title}}
</body>
</html>

写一个简单的请求demo来看看模版返回。

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {r := gin.Default()// 模板解析r.LoadHTMLFiles("./templates/index.tmpl")r.GET("/index", func(ctx *gin.Context) {// 模板的渲染ctx.HTML(http.StatusOK, "index.tmpl", gin.H{"title": "hello,我是模板",})})r.Run(":9090") // 启动server
}

通过Post请求工具可以看到已经正确加载了模版内容。

在这里插入图片描述
如果有多个模版,可以统一进行对应的渲染:

	r.LoadHTMLGlob("templates/**")

如果目录为templates/post/index.tmpltemplates/user/index.tmpl这种,可以

	// **/* 代表所有子目录下的所有文件router.LoadHTMLGlob("templates/**/*")

二、自定义模版函数

那么是否可以实现下面的效果呢,答案是可以的,通过自定义模版函数进行处理即可。

在这里插入图片描述
在模板渲染中,默认情况下,Go 的模板引擎会对所有输出的内容进行 HTML 转义,以防止跨站脚本攻击(XSS)。例如,如果模板中输出的内容是

Hello
,模板引擎会将其渲染为 <div>Hello</div>,这样浏览器会将其视为普通文本,而不是 HTML 标签。

当我们把代码改为下面时,会发现进行了HTML转义,并不是我们想要的状态。

	r.GET("/index", func(c *gin.Context) {// HTML请求// 模板的渲染c.HTML(http.StatusOK, "index.tmpl", gin.H{"title": "<a href='http://baidu.com'>跳转到其他地方</a>",})})

在这里插入图片描述

在这里插入图片描述
所以现在我们可以添加一个函数,让这个模版原样输出,不再进行html转义了。(放在加载模版之前即可),并且将index中的代码改为如下:{{.title | safe }}

	r.SetFuncMap(template.FuncMap{"safe": func(str string) template.HTML {return template.HTML(str)},})

三、cookie

http是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出。

Cookie就是解决HTTP协议无状态的方案之一。

实际上就是服务器保存在浏览器上的一段信息,浏览器有了Cookie之后,每次向服务器发送请求时都会将信息发送刚给服务器,服务器就可以根据该信息处理请求。

Cookie由服务器创建,发送给浏览器,浏览器保存。

cookie的函数签名如下:

func (c *Context) SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
参数名类型说明
namestringcookie名字
valuestringcookie值
maxAgeint有效时间,单位是秒,MaxAge=0 忽略MaxAge属性,MaxAge<0 相当于删除cookie, 通常可以设置-1代表删除,MaxAge>0 多少秒后cookie失效
pathstringcookie路径
domainstringcookie作用域
secureboolSecure=true,那么这个cookie只能用https协议发送给服务器
httpOnlybool设置HttpOnly=true的cookie不能被js获取到
	r.GET("/cookie", func(c *gin.Context) {// 设置cookiec.SetCookie("site_cookie", "cookievalue", 3600, "/", "localhost", false, true)})

通过post工具可以查到对应的cookie。
在这里插入图片描述
通过浏览器进入开发者模式也可以查看到对应的cookie。

在这里插入图片描述
也可以进行cookie读取,通过下面代码。

func main() {r := gin.Default()r.GET("/read", func(c *gin.Context) {// 根据cookie名字读取cookie值data, err := c.Cookie("site_cookie")if err != nil {// 直接返回cookie值c.String(200, "not found!")return}c.String(200, data)})r.Run(":9090") // 启动server
}

在这里插入图片描述
删除cookie比较简单,通过将将cookie的MaxAge设置为-1, 达到删除cookie的目的。

r.GET("/del", func(c *gin.Context) {// 设置cookie  MaxAge设置为-1,表示删除cookiec.SetCookie("site_cookie", "cookievalue", -1, "/", "localhost", false, true)c.String(200,"删除cookie")})

四、Session

会话(Session) 是一种用于在 Web 应用中跟踪用户状态的技术。它允许服务器在多个 HTTP 请求之间保持用户的状态信息,从而实现诸如用户登录、购物车等功能。

当用户第一次访问 Web 应用时,服务器会创建一个唯一的会话标识符(Session ID),并将其存储在服务器端的会话存储中。

Gin框架中,可以依赖gin-contrib/sessions中间件处理session。

引入session的依赖。

 go install github.com/gin-contrib/sessions@latest
package mainimport ("fmt""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie""github.com/gin-gonic/gin"
)func main() {r := gin.Default()// 创建基于cookie的存储引擎,secret 参数是用于加密的密钥,用于对存储在 Cookie 中的会话数据进行加密store := cookie.NewStore([]byte("secret"))// sessions.Sessions:注册会话中间件。这个中间件会自动处理会话的创建、读取和更新,并将会话数据存储在客户端的 Cookie 中。// 设置session中间件,参数mysession,指的是session的名字,也是cookie的名字// store是前面创建的存储引擎,我们可以替换成其他存储引擎r.Use(sessions.Sessions("mysession", store))r.GET("/hello", func(c *gin.Context) {// 初始化session对象session := sessions.Default(c)// 通过session.Get读取session值// session是键值对格式数据,因此需要通过key查询数据if session.Get("hello") != "world" {fmt.Println("没读到")// 设置session数据session.Set("hello", "world")session.Save()}c.JSON(200, gin.H{"hello": session.Get("hello")})})r.Run(":8080")
}

在这里插入图片描述
通过上面代码,我们可以验证session。这里我们是使用cookie进行存储的,也可以通过redis进行存储。

通过cookie进行存储的session是这样的:当用户第一次访问服务器时,服务器会为用户创建一个唯一的会话标识符(Session ID),并将与该会话相关的数据存储在服务器端(如内存、数据库或文件系统中)。

服务器将 Session ID 发送给客户端(通常是通过设置一个 Cookie)。客户端(浏览器)会在后续的请求中自动将这个 Cookie(包含 Session ID)发送回服务器。

服务器通过客户端发送的 Session ID,从服务器端的存储中找到对应的会话数据,从而恢复用户的会话状态。

五、cookie、session区别

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的会话还是用户B的会话了。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie 的工作原理。

Cookie是存储在客户端(用户浏览器)的小块数据,可以用来记住用户的相关信息,例如登录凭证或偏好设置。它们随每个HTTP请求发送给服务器,并且可以被服务器读取以维持会话或个性化用户体验。

再比如想象用户登录银行网站。服务器创建一个包含会话标识符的Cookie,并通过Set-Cookie头部发送回用户的浏览器。浏览器存储此Cookie,并在随后的请求中将其发送回服务器,允许服务器识别用户并在多个页面加载中保持他们的登录状态。

若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。

若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在浏览器的不同进程间共享。这种称为持久Cookie。


客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。每个用户访问服务器都会建立一个session并自动分配一个SessionId,用于标识用户的唯一身份。

也就是会话用于跟踪用户在多个页面请求期间的状态。它们通常存储在服务器端,并且与唯一的会话标识符(通常是会话ID)相关联,会话ID作为Cookie发送给客户端。会话允许服务器在用户访问期间记住有关用户的信息。

用户在电子商务网站上购物。服务器为用户创建一个会话,存储他们的购物车项目和其他相关信息。会话ID作为Cookie发送给用户的浏览器。随着用户在网站上导航,Cookie中的会话ID允许服务器访问用户会话数据,使用户能够无缝购物体验。

服务器通过SessionId作为key,读写对应的value,这就达到了保持会话信息的目的。


所以,为什么有了cookie还要有session?

  • 存储位置和安全性

cookie 数据存储在客户端(用户的浏览器中)。由于 Cookie 数据存储在客户端,用户可以轻松查看和修改 Cookie 内容。即使通过加密和签名增强安全性,也无法完全防止用户篡改。Cookie 的大小有限制,通常不超过 4KB,且浏览器对每个域名的 Cookie 数量也有限制。

Session 数据存储在服务器端,客户端只保存一个 Session ID(通常通过 Cookie 传递)。由于数据存储在服务器端,用户无法直接访问或修改 Session 数据,安全性更高。服务器端的存储容量通常比客户端大得多,可以存储更复杂的数据结构。

  • 数据隐私和敏感信息

Cookie 数据存储在客户端,即使是加密的,也存在被窃取或篡改的风险。因此,不适合存储敏感信息(如密码、用户身份信息等)。Session 数据存储在服务器端,可以安全地存储敏感信息。例如,用户登录后,服务器可以将用户的认证状态和权限信息存储在 Session 中,而无需暴露给客户端。

  • 分布式和可扩展性

Cookie 数据存储在客户端,不依赖于服务器的存储。但如果需要在多个服务器之间共享会话数据(如分布式应用),Cookie 无法直接实现。

Session 数据存储在服务器端,可以通过多种方式实现分布式存储(如 Redis、数据库等),从而支持分布式应用和负载均衡。在分布式环境中,Session ID 可以通过 Cookie 传递给客户端,而实际的会话数据存储在共享的存储系统中,从而实现会话的共享和同步。

Session 数据存储在服务器端,客户端只需要发送一个轻量级的 Session ID(通常是一个短字符串),从而减轻客户端的负担,提高性能。

六、会话攻击

如果客户端存储的 SessionID 被劫持,攻击者确实可能通过获取 SessionID 冒充用户身份,从而对服务器进行非法操作。然而,虽然无法完全杜绝 SessionID 被窃取的风险,但可以通过多种防御措施来降低这种风险,并防止攻击者利用窃取的 SessionID 进行有效攻击。

  • 使用 HTTPS 协议

通过 HTTPS 加密客户端与服务器之间的通信,可以防止 SessionID 在传输过程中被中间人攻击窃取。

  • 设置 Cookie 的 HttpOnly 和 Secure 属性

HttpOnly:设置 HttpOnly 属性后,Cookie 无法被客户端脚本(如 JavaScript)访问,从而防止通过 XSS 攻击窃取 SessionID。

Secure:设置 Secure 属性后,Cookie 只会在 HTTPS 协议下传输,进一步防止 SessionID 被窃取。

  • 定期更新 SessionID

在用户登录、权限变更或定期时间间隔内更新 SessionID,可以减少攻击者利用旧 SessionID 的机会。同时通过检测客户端的 User-Agent、IP 地址或其他标识信息是否发生变化,可以判断是否为合法用户。如果检测到异常,可以要求用户重新登录。

相关文章:

【Gin】2:快速上手Gin框架(模版、cookie、session)

本文目录 一、模版渲染二、自定义模版函数三、cookie四、Session五、cookie、session区别六、会话攻击 一、模版渲染 在 Gin 框架中&#xff0c;模板主要用于动态生成 HTML 页面&#xff0c;结合 Go 语言的模板引擎功能&#xff0c;实现数据与视图的分离。 模板渲染是一种动态…...

Linux修改主机名称

hostnamectl set-hostname 主机名称 exit 退出登录重新进入即可...

亲测Windows部署Ollama+WebUI可视化

一. Ollama下载 登录Ollama官网(Ollama)点击Download进行下载 如果下载很慢可用以下地址下载&#xff1a; https://github.com/ollama/ollama/releases/download/v0.5.7/OllamaSetup.exe 在DeepSeek官网上&#xff0c;你可以直接点击【model】 到达这个界面之后&#xff0c;…...

Java四大框架深度剖析:MyBatis、Spring、SpringMVC与SpringBoot

目录 前言&#xff1a; 一、MyBatis框架 1. 概述 2. 核心特性 3. 应用场景 4. 示例代码 二、Spring框架 1. 概述 2. 核心模块 3. 应用场景 4. 示例代码 三、SpringMVC框架 1. 概述 2. 核心特性 3. 应用场景 4. 示例代码 四、SpringBoot框架 1. 概述 2. 核心…...

ubuntu部署小笔记-采坑

ubuntu部署小笔记 搭建前端控制端后端前端nginx反向代理使用ubuntu部署nextjs项目问题一 如何访问端口号配置后台运行该进程pm2 问题二 包体过大生产环境下所需文件 问题三 部署在vercel时出现的问题需要魔法访问后端api时&#xff0c;必须使用https协议电脑端访问正常&#xf…...

23. AI-大语言模型-DeepSeek简介

文章目录 前言一、DeepSeek是什么1. 简介2. 产品版本1. 类型2. 版本3. 参数规模与模型能力 3. 特征4. 三种访问方式1. 网页端和APP2. DeepSeek API 二、DeepSeek可以做什么1. 应用场景2. 文本生成1. 文本创作2. 摘要与改写3. 结构化生成 3. 自然语言理解与分析1. 语义分析2. 文…...

基于SpringBoot的智慧家政服务平台系统设计与实现的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Java NIO与传统IO性能对比分析

Java NIO与传统IO性能对比分析 在Java中&#xff0c;I/O&#xff08;输入输出&#xff09;操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型&#xff0c;而Java NIO&#xff08;New I/O&#xff09;引入了非阻塞和基于通道&#xff08;Channel&#xff09;和缓冲区&a…...

基于YOLO11深度学习的果园苹果检测与计数系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

基于SpringBoot畅购行汽车购票系统

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...

基于 Spring Boot + 微信小程序的短文写作竞赛管理系统设计与实现(源码+文档)

大家好&#xff0c;今天要和大家聊的是一款基于 Spring Boot 微信小程序的“短文写作竞赛管理系统”的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于 Spring Boot 微信小程序的“短文写作竞赛管理系统”设计与实现的主要使用…...

pytest运行用例的常见方式及参数

标题pytest运行用例方式及参数 用例结构目录 “”" 在最外层目录下执行所有的用例 参数说明&#xff1a; -s:显示用例的打印信息 -v:显示用例执行的详细信息 –alluredir:指定allure报告的路径 –clean-alluredir:清除allure报告的路径 -n:指定并发的进程数 -x:出现一条用…...

Miniconda + VSCode 的Python环境搭建

目录&#xff1a; 安装 VScode 安装 miniconda 在VScode 使用conda虚拟环境 运行Python程序 1.安装 vscode 编辑器 官网链接&#xff1a;Visual Studio Code - Code Editing. Redefined 下载得到&#xff1a;&#xff0c;双击安装。 安装成功…...

图解MySQL【日志】——Redo Log

Redo Log&#xff08;重做日志&#xff09; 为什么需要 Redo Log&#xff1f; 1. 崩溃恢复 数据库崩溃时&#xff0c;系统通过 Redo Log 来恢复尚未写入磁盘的数据。Redo Log 记录了所有已提交事务的操作&#xff0c;系统在重启后会重做这些操作&#xff0c;以保证数据不会丢…...

Trae AI驱动开发实战:30分钟从0到1实现Django REST天气服务

目录 一、Trae 安装 1、Trae 介绍 2、Trae 安装 二、项目构建 1、项目背景与技术选型 2、开发环境准备 三、需求分析 1、功能模块设计 2、数据库设计 四、功能实现 1、用户系统开发 2、天气服务实现 3、测试用例编写 五、Trae 体验总结 随着人工智能技术的迅猛发…...

【Linux网络编程】IP协议格式,解包步骤

目录 解析步骤 1.版本字段&#xff08;大小&#xff1a;4比特位&#xff09; 2.首部长度&#xff08;大小&#xff1a;4比特位&#xff09;&#xff08;单位&#xff1a;4字节&#xff09; &#x1f35c;细节解释&#xff1a; 3.服务类型&#xff08;大小&#xff1a;8比特…...

中诺CHINO-E G076大容量录音电话产品使用注意事项

•本机需插上随机配置的电源适配器才能正常工作&#xff0c;切勿插入其它的适配器&#xff0c;以免损坏话机&#xff1b; •当本机出现异常时&#xff0c;请按“Δ/上查”键3秒&#xff0c;屏幕弹出确定恢复&#xff0c;按“设置”键恢复出厂设置&#xff1b; 注&#xff1a;…...

2025最新智能优化算法:改进型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23个经典函数测试集,MATLAB

一、改进型雪雁算法 雪雁算法&#xff08;Snow Geese Algorithm&#xff0c;SGA&#xff09;是2024年提出的一种新型元启发式算法&#xff0c;其灵感来源于雪雁的迁徙行为&#xff0c;特别是它们在迁徙过程中形成的独特“人字形”和“直线”飞行模式。该算法通过模拟雪雁的飞行…...

✨ 索引有哪些缺点以及具体有哪些索引类型

索引的定义与原理 索引是数据库中用于提高数据检索效率的数据结构。它就像是书籍的目录&#xff0c;通过目录可以快速定位到所需内容的页码&#xff0c;而在数据库中&#xff0c;索引可以帮助数据库系统快速找到符合查询条件的数据行&#xff0c;而不必对整个表进行扫描。 其…...

Promptic:Python 中的 LLM 应用开发利器

Promptic 是一个基于 Python 的轻量级库,旨在简化与大型语言模型(LLMs)的交互。它通过提供简洁的装饰器 API 和强大的功能,帮助开发者高效地构建 LLM 应用程序。Promptic 的设计理念是提供 90% 的 LLM 应用开发所需功能,同时保持代码的简洁和易用性。 1. Promptic 的核心…...

本地部署DeepSeek R1大模型

一、安装软件 1.1 安装Ollama 你可以访问Ollama的官方网站https://ollama.com/download&#xff0c;选择适合你操作系统的安装包进行下载。老周这里是Mac系统&#xff0c;所以选择下载macOS系统。 1.2 安装cherry studio 前往官网https://cherry-ai.com/download下载对应操…...

搅局外卖,京东连出三张牌

明牌暗牌&#xff0c;都不如民牌。 作者|古廿 编辑|杨舟 “京东来整顿外卖了”&#xff0c;这一网络热梗正在成为外界对京东近期一系列动作的高度概括。 0佣金、五险一金、品质外卖&#xff0c;京东连出三张牌打破外卖市场的旧秩序。此前这三项分别对应着长期被社会所诟病的…...

【ELK】【Elasticsearch】数据查询方式

1. 简单查询&#xff08;URI Search&#xff09; 通过 URL 参数直接进行查询&#xff0c;适合简单的搜索场景。 示例&#xff1a; bash 复制 GET /index_name/_search?qfield_name:search_value 说明&#xff1a; index_name&#xff1a;索引名称。 field_name&#xf…...

基于 JavaWeb 的 Spring Boot 网上商城系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

C++17中的std::scoped_lock:简化多锁管理的利器

文章目录 1. 为什么需要std::scoped_lock1.1 死锁问题1.2 异常安全性1.3 锁的管理复杂性 2. std::scoped_lock的使用方法2.1 基本语法2.2 支持多种互斥锁类型2.3 自动处理异常 3. std::scoped_lock的优势3.1 避免死锁3.2 简化代码3.3 提供异常安全保证 4. 实际应用场景4.1 数据…...

Linux内核实时机制7 - 实时改造机理 - 软中断优化下

Linux内核实时机制7 - 实时改造机理 - 软中断优化下 https://blog.csdn.net/u010971180/article/details/145722641以下分别以Linux4.19、Linux5.4、Linux5.10、Linux5.15 展开分析,深入社区实时改造机理的软中断优化过程。https://blog.csdn.net/weixin_41028621/article/det…...

计算机网络:应用层 —— 文件传送协议 FTP

文章目录 FTP 是什么&#xff1f;FTP 的应用FTP 的基本工作原理主动模式被动模式 总结 FTP 是什么&#xff1f; 将某台计算机中的文件通过网络传送到可能相很远的另一台计算机中&#xff0c;是一项基本的网络应用&#xff0c;即文件传送。 文件传送协议FTP&#xff08;File T…...

[笔记.AI]如何判断模型是否通过剪枝、量化、蒸馏生成?

以下摘自与DeepSeek-R1在线联网版的对话 一、基础判断维度 技术类型核心特征验证方法剪枝模型参数减少、结构稀疏化1. 检查模型参数量是否显著小于同类标准模型1 2. 分析权重矩阵稀疏性&#xff08;如非零参数占比<30%&#xff09;4量化权重/激活值精度降低、推理速度提升1…...

python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04

mysql sql script: create table School 表 (SchoolId char(5) NOT NULL comment主鍵primary key&#xff0c;學校編號,SchoolName nvarchar(500) NOT NULL DEFAULT comment 學校名稱,SchoolTelNo varchar(8) NULL DEFAULT comment電話號碼,PRIMARY KEY (SchoolId) #主…...

【前端】【nuxt】nuxt优势(MVP开发),转换SSR与SPA模式

Nuxt.js 核心优势 自动化路由系统 无需手动配置路由&#xff1a;在 pages/ 目录下创建 .vue 文件即可自动生成路由&#xff0c;支持动态路由&#xff08;如 pages/user/[id].vue → /user/:id&#xff09;。嵌套路由&#xff1a;通过 parent.vue parent/child.vue 目录结构自动…...

洛谷B3619(B3620)

B3619 10 进制转 x 进制 - 洛谷 B3620 x 进制转 10 进制 - 洛谷 代码区&#xff1a; #include<algorithm> #include<iostream> #include<vector> using namespace std;int main(){int n,x;cin >> n >> x;vector<char> arry;while(n){if(…...

基于springboot+vue的酒店管理系统的设计与实现

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…...

android调用ffmpeg解析rtsp协议的视频流

文章目录 一、背景二、解析rtsp数据1、C层功能代码2、jni层的定义3、app层的调用 三、源码下载 一、背景 本demo主要介绍android调用ffmpeg中的接口解析rtsp协议的视频流&#xff08;不解析音频&#xff09;&#xff0c;得到yuv数据&#xff0c;把yuv转bitmap在android设备上显…...

cursor使用记录

一、如何查看自己登录的是哪个账号 操作路径&#xff1a;Cursor -- 首选项 -- Cursor Setting &#xff08;有快捷键&#xff09; 二、状态修改为竖排&#xff08;默认是横排&#xff09; 默认如图展示&#xff0c;想要像vscode、idea等等在左侧竖着展示 操作路径&#xff1…...

Java 使用websocket

添加依赖 <!-- WebSocket 支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>添加配置类 Configuration public class WebSocketConfig {B…...

蓝桥杯 Java B 组之背包问题、最长递增子序列(LIS)

Day 4&#xff1a;背包问题、最长递增子序列&#xff08;LIS&#xff09; &#x1f4d6; 一、动态规划&#xff08;Dynamic Programming&#xff09;简介 动态规划是一种通过将复杂问题分解成更小的子问题来解决问题的算法设计思想。它主要用于解决具有最优子结构和重叠子问题…...

在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源

插值法其实就是在已知数据点之间估计未知点的值。通过已知的离散数据点,构造一个连续的曲线函数,预测数据点之间的空缺值是什么并且自动填补上去。 适用场景: 在卷积神经网络(CNN)中的应用场景中,经常遇到计算资源有限,比如显存不够或者处理速度慢,需要用插值来降低计…...

seacmsv9 SQL注入漏洞(报错注入)

一、海洋CMS简介 海洋cms是为解决站长核心需求而设计的视频内容管理系统&#xff0c;一套程序自适应电脑、手机、平板、APP多个终端入口&#xff0c;无任何加密代码、安全有保障&#xff0c;是您最佳的建站工具。——来自seacms官网&#xff08;简而言之就是专门搭建看片网站的…...

Java 中的内存泄漏问题及解决方案

在 Java 中&#xff0c;内存泄漏&#xff08;Memory Leak&#xff09;是指在程序运行过程中&#xff0c;某些对象已经不再使用&#xff0c;但由于引用仍然存在&#xff0c;这些对象无法被垃圾回收器回收&#xff0c;从而导致内存无法释放&#xff0c;最终可能导致系统性能下降甚…...

解决 ERROR: Failed building wheel for vllm Failed to build vllm

1. 完整报错 copying build\lib\vllm\model_executor\layers\fused_moe\configs\E256,N128,device_nameNVIDIA_H100_80GB_HBM3,dtypefp8_w8a8,block_shape[128,128].json -> build\bdist.win-amd64\wheel.\vllm\model_executor\layers\fused_moe\configs error: could not …...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践&#xff08;遥感图像场景分类&#xff09;专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

ecovadis社会企业责任认证

EcoVadis 是一家全球性的企业社会责任 (CSR) 评级机构&#xff0c;旨在通过评估企业在环境、劳工与人权、商业道德和可持续采购等方面的表现&#xff0c;帮助提升其可持续性和社会责任实践。 EcoVadis 认证的核心内容 环境 评估企业在能源消耗、碳排放、废物管理等方面的表现。…...

使用 Docker 部署 Flask 应用

使用 Docker 部署 Flask 应用 一、引言 在现代软件开发中,应用的部署和环境管理是至关重要的环节。传统的部署方式常常会遇到 “在我机器上能运行,在你机器上不行” 的问题,而 Docker 的出现很好地解决了这个痛点。Docker 是一个用于开发、部署和运行应用程序的开放平台,…...

istio介绍补充以及使用篇

istio介绍补充以及使用篇 前言 介绍istio各个组件创建istio的方式手动注入自动注入side car 使用istio做流量灰度如有需要收藏的看官&#xff0c;顺便也用发财的小手点点赞哈&#xff0c;如有错漏&#xff0c;也欢迎各位在评论区评论&#xff01; 前言 前篇istio介绍了引入ist…...

DeepSeek 助力 Vue 开发:打造丝滑的 键盘快捷键(Keyboard Shortcuts)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…...

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本

十九、表单脚本 表单脚本 JavaScript 较早的一个用途是承担一部分服务器端表单处理的责任。虽然 Web 和 JavaScript 都已经发展了很多年&#xff0c;但 Web 表单的变化不是很大。由于不能直接使用表单解决问题&#xff0c;因此开发者不得不使用JavaScript 既做表单验证&#xf…...

如何使用深度学习进行手写数字识别(MNIST)

目录 手写数字识别(MNIST)1. 导入必要的库2. 加载和预处理数据3. 构建模型4. 编译模型5. 训练模型6. 评估模型7. 可视化训练过程(可选)代码说明运行环境总结当然可以!下面是一个使用Python和Keras(TensorFlow后端)实现的简单深度学习案例——手写数字识别(MNIST数据集)…...

【UCB CS 61B SP24】Lecture 5 - Lists 3: DLLists and Arrays学习笔记

本文内容为构建双向循环链表、使用 Java 的泛型将其优化为通用类型的链表以及数组的基本语法介绍。 1. 双向链表 回顾上一节课写的代码&#xff0c;当执行 addLast() 与 getLast() 方法时需要遍历链表&#xff0c;效率不高&#xff0c;因此可以添加一个指向链表末尾的索引&am…...

Unity Excel导表工具转Lua文件

思路介绍 借助EPPlus读取Excel文件中的配置数据&#xff0c;根据指定的不同类型的数据配置规则来解析成对应的代码文本&#xff0c;将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…...

kafka消费能力压测:使用官方工具

背景 在之前的业务场景中&#xff0c;我们发现Kafka的实际消费能力远低于预期。尽管我们使用了kafka-go组件并进行了相关测试&#xff0c;测试情况见《kafka-go:性能测试》这篇文章。但并未能准确找出消费能力低下的原因。 我们曾怀疑这可能是由我的电脑网络带宽问题或Kafka部…...