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

“会话技术”——Cookie_(2/2)原理与使用细节

经过Cookie的快速入门与代码使用。如果想深入理解Cookie的技术实现,就得去理解它的原理。
且有些时候使用Cookie,还要根据需求设置存活期限以及确定Cookie获取范围等其他细节。最后,我们会总结Cookie这门客户端会话技术的作用。


一、原理

注:我们还是使用简易图画进行辅助理解

注:这是上一节写的代码(两个Servlet),这里将这个例子使用一下分析Cookie的原理

所谓分析Cookie原理,正是分析: 服务器端如何响应时发送Cookie,以至于浏览器端识别了还自动保存;并且CookieDemo2怎么获取到的Cookie,即浏览器怎么就携带了Cookie信息进行了下一次请求。

1.1 分析:

 其实不管发送数据也好,还是获取数据(站在服务器端看)也好,它们在客户端与我端(服务端)中间都是以HTTP协议进行交互——响应和请求一定是遵循HTTP协议的

首先,客户端发送了第一次请求,请求访问了服务器端的资源——CookieDemo1。

CookieDemo1收到了请求,于是以“发送Cookie”进行处理数据并响应了(确实向浏览器发送了Cookie),刚刚说“所有的客户与服务器端的响应请求都遵循HTTP协议”。所以那实际上,“发送Cookie”时,怎么发送呢? 服务器(response端)会在响应报文中设置一个名为“Set-Cookie”的响应头,该响应头的值以键值对的形式呈现,恰好可用于存储Cookie

于是浏览器端会收到来自服务器端的响应报文,发现响应报文的响应头有“set-Cookie”。浏览器因为熟读HTTP协议,所以遵循协议:如果浏览器收到了set-Cookie响应头,它应该将这个头里携带的数据(“name=Bear”)保存到自己本地中。

而在第二次请求时,HTTP协议又规定了:浏览器应该在下一次请求中将保存的数据(“name=Bear”)放进一个Cookie的请求头中(作为值)。浏览器端会在请求报文中设置一个Cookie请求头,其值类型也为键值对,恰好也用来放Cookie数据。

 于是CookieDemo2能从请求头中获取到Cookie信息。但是,在咱们使用Cookie代码获取请求里的Cookie,并不是操作所谓的“Cookie这个请求头”,而是怎么? 

Cookie[] cookies = request.getCookies();
//这样一个名叫getCookies()的方法

 这也得多亏了JAVA EE 内部实现的API,封装的库方法(函数)。让我们调用里的方法就能发送和获取Cookie,而方法便是去和请求头或者响应头打交道,我们放心调用就行。

1.2 看看:

初见"set-Cookie"响应头和“Cookie”请求头,不熟悉很正常,多看几眼。我们在浏览器抓包

1.2.1抓包

(浏览器端)按F12键 ,接着如图操作:

我们现在运行,访问CookieDemo1—— :抓抓它的响应包: 

是吧,这发送Cookie响应时会真的有一个响应标头Set-Cookie。

那如果我们继续请求CookieDemo2:抓抓它的请求报文,是不是在存储Cookie后下一次请求就会在请求头里捎带上Cookie数据。

确实是。 

 二、Cookie的细节

2.1 一次可不可以发送多个cookie呢?

了解了原理这个问题== 响应报文set-Cookie的值可以是多个键值对吗? 

我们修改修改CookieDemo1:

// 原
@WebServlet("/CookieServlet01")
public class CookieServlet01 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1. 创建Cookie,绑定数据Cookie cookie = new Cookie("name","Bear");// 2. 发送Cookie对象response.addCookie(cookie);}}

我们再创建一个Cookie,让response调用两次addCookie();

protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1. 创建Cookie,绑定数据Cookie cookie = new Cookie("name","Bear");Cookie cookie2 = new Cookie("place","Toilet");//新建// 2. 发送Cookie对象response.addCookie(cookie);response.addCookie(cookie2);//连着发送}

运行这段代码,即重新请求CookieDemo1,抓抓它的请求包:

答案:一次可以发送多个Cookie。

为了完整,我们再访问打印Cookie的那个Servlet,抓抓这回的请求包:

都存了,是的,刚刚响应发来的Cookie都存进浏览器了;这会儿,也全部放进请求头Cookie了。

2.2 Cookie在浏览器中能保存多长时间?

默认情况下,当浏览器关闭后,Cookie数据被销毁;因为默认存到浏览器内存里,程序结束,内存就会删除数据。

如果想设置持久化存储,我们这里再学习一个Cookie的方法:

cookie.setMaxAge(int seconds)
//参数是int类型,单位为秒数。
// int 是有符号整型,于是根据取值的不同,该方法会实现不同的效果

 若seconds 为 正数 :意味着 a. 将Cookie数据写到硬盘的文件中、持久化存储。

b. 规定了该Cookie存活的时间

若seconds 为 0 : 意味着删除该Cookie。设置完cookie的MaxAge,需要将这个Cookie发送给客户端。

为什么秒数为0,就意味着删除? 这句话看似只有1个问,其实有2个答案。
1. Cookie 最大存活期限为0,那么就意味着“不存在”。
2. Cookie是存在用户端的数据,服务器端不能直接操作客户端的数据,所以服务器想要删除Cookie就用这种方式:设MaxAge=0,再响应发送。

若seconds为 负数:意味着默认设置(所以设为负数,跟不设置MaxAge效果一样:一旦关闭浏览器,存在内存里的Cookie就会被释放,失效)

代码实践timing :

我们新建一个CookieServlet03来创建和发送Cookie。

/** CookieDemo03 用来创建和发送Cookie* 分别设置存活期限:*  ^ 正数*  ^ 负数*  ^ 0* */
@WebServlet("/CookieServlet03")
public class CookieServlet03 extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{// 1. 创建Cookie,绑定数据// 2. 设置Cookie的存活期限// 3. 发送Cookie对象}
}

 写入核心代码:

        // 1. 创建Cookie,绑定数据Cookie cookie = new Cookie("name","bear");// 2. 设置Cookie的存活期限cookie.setMaxAge(30);//设置正数的存活期限,代表了:1.将Cookie数据写到硬盘的文件中。持久化存储。2.Cookie存活时间// 3. 发送Cookie对象response.addCookie(cookie);

 验证逻辑:我们重新打开浏览器,先访问CookieServlet03(客户端收到cookie会存起来),再请求访问CookieDemo02(这时可在Eclipse控制台打印出Cookie信息)。

如果在30秒之内,我们关闭浏览器又访问CookieServlet02,按理可以获取并打印这个Cookie:

如果超过30秒后,我们再次访问CookieServlet02,我们再看控制台:

负数和0的取值,也是同样验证步骤。

 2.3 cookie能不能存中文?

在tomcat 8之前,不能存中文。

那怎么办? 需要将中文数据转码 —— 一般采用URL编码(如:%E3)

在tomcat 8之后 ,cookie支持中文数据,但还是不支持特殊字符。

我们现在使用的是tomcat 9,故tomcat8之前的不做演示。

运行服务器,访问CookieServlet03,再访问CookieServlet02打印:

以上验证,tomcat8以上,Cookie能存中文。

2.4 cookie获取范围多大?

假设在一个服务器(也就是一个tomcat)中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

图:工程目录下的项目们

经过作者的超绝不经意安排,有以下两个项目: 

 它们的cookieDemo2和cookieServlet02都是获取request的Cookies并打印。

这时我们验证的问题:项目1下的cookieServlet01发送给客户端的Cookie,会被项目2下的cookieDemo2获取到吗(即跨项目的cookie能获得吗)

项目1下的CookieServlet01

我们接下来就访问这个Servlet:

接着我们访问项目2下的cookieDemo2: 

 最后得到验证:

假设在一个服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?
默认情况下cookie不能共享

假如就有这个需求,需要一个服务器上多个项目共享Cookie,该如何呢?

2.4.2 多个项目共享Cookie

之所以Cookie多个项目不能共享,是因为默认情况下,客户端存储的Cookie目录是以项目名为目录的:

项目不同,项目名就不同。自然该目录下就不会出现其他项目名的Cookie。

这里引入Cookie的另一个方法:

Cookie.setPath(String Path);
//参数为字符串类型,表示该cookie的存储路径。

 运行:

 此时若我们再访问另一个项目下的打印Servlet:

 

再看控制台,成功打印了项目1刚刚存的Cookie。

所以,想要实现一个服务器下多个项目下的Cookie共享:就setPath()。

2.4.3 多个服务器Cookie共享

其实还是同样的道理,调用cookie方法,但是是不同的方法:

setDomain(String path)
// 参数:字符串类型,设置域名

如果设置一级域名相同,那么多个服务器之间的cookie可以共享
如果SetDomain(“.baidu.com”),那么tieba.baidu.com和news.baidu.com中cookie可以共享
因为这两个服务器都是baidu管辖下的,那何必要设置两个服务器呢?是因为如果一个服务器承受不了大量的用户请求访问。

比较浅显的解释,但这里简单提出,仅为知识体系的完整。后面再次接触的时候就会深入应用。

三、Cookie的特点和作用:

特点:

1.    cookie存储数据在客户端浏览器
2.    浏览器对于单个cookie的大小有限制(4kb左右) 以及 对于同一个域名下的总cookie数量也有限制(20个)
这Cookie的名字也暗示了存不了多少数据。Cookie——“小甜点”,饭后甜食或者下午茶小点心,不能当主食。

 作用:

1.    Cookie一般用于存储少量的不太敏感的数据
2.    在不登录的情况下,完成服务器对客户端的身份识别;而登录的话,就是在数据库里获取数据

“不太敏感”,存在客户端,咱们一抓包或者在“开发者工具”里就能看到,服务器这边还能删除……无不昭示着客户端安全性不太高,尽量不存敏感数据。

 第二点还挺重要,需要好好理解:

我们来到baidu的主页面:

我们在输入框输入问题:

 如果我们既不登录,又想实现输入问题的时候没有自动联想:

我们再次来到主页面,此时还是未登录状态:

若我关闭浏览器,再次进入baidu,输入问题也没有自动联想。为什么呢?是因为刚刚的“保存设置”时发出请求,baidu响应了这些设置,数据以set-Cookie标头响应过来。

浏览器保存这些信息(Cookie),而我们再次来到baidu主页面:我们的请求会自动携带Cookie。而baidu服务器则会获取请求里的Cookie,再将我们的需求响应给我们。

这就是Cookie:在未登录的状态下 ,服务器完成对客户端身份的识别。如果登录的话,服务器就直接在它的数据库里提取数据了。


下一节:Cookie的实战应用

相关文章:

“会话技术”——Cookie_(2/2)原理与使用细节

经过Cookie的快速入门与代码使用。如果想深入理解Cookie的技术实现,就得去理解它的原理。 且有些时候使用Cookie,还要根据需求设置存活期限以及确定Cookie获取范围等其他细节。最后,我们会总结Cookie这门客户端会话技术的作用。 一、原理 注…...

Linux操作系统--进程间通信(中)(命名管道)

目录 1.命名管道: 1.1创建一个命名管道 1.2匿名管道与命名管道的区别 1.3命名管道的打开规则 1.4例子1-用命名管道实现文件拷贝 1.5例子2-用命名管道实现server&client通信 1.命名管道: 毫不相关的进程进行进程间通信管道应用的一个限制就是只能…...

数据结构6 · BinaryTree二叉树模板

代码函数功能顺序如下: 1:destroy:递归删除树 2:copy:复制二叉树 3:preOrder:递归前序遍历 4:inOrder:递归中序遍历 5:postOrder:递归后续遍…...

ubuntu的libc 库被我 sudo apt-get --reinstall install libc6搞没了

我系统的libc 没了 今天为了运行一个开源的yuv 播放器,在运行的时候提醒 Inconsistency detected by ld.so: dl-call-libc-early-init.c: 37: _dl_call_libc_early_init: Assertion sym ! NULL failed!然后听从AI 的建议 当我去执行ls 时,系统提示 就这…...

cat file.tar.gz | tar -xzf - -C /target/dir两个减号之间为什么有个空格?是写错了吗?(管道命令后续)

在 tar 命令的参数 -xzf - -C 中,两个减号(-)之间的空格是故意保留的语法,没有写错。具体原因如下: 1. -xzf - 的语法解析 -xzf 是 tar 命令的组合参数: x:表示解压(extract&#x…...

手机的数据楚门世界是如何推送的

手机推送,也叫茧影算法,手机的数据“楚门世界”:信息推送机制的深度剖析与社会影响 在数字化时代,手机已然成为人们生活中不可或缺的伴侣。当我们沉醉于手机带来的便捷与娱乐时,或许未曾察觉,自己正置身于…...

体系结构论文(八十二):A Comprehensive Analysis of Transient Errors on Systolic Arrays

研究背景与动机 TPU架构(Tensor Processing Unit)广泛应用于DNN推理,其核心是脉动阵列,由大量的乘加单元(MAC)组成。 由于使用了纳米级CMOS技术,TPU对辐射引发的瞬态错误(SET&#…...

综合案例:使用vuex对购物车的商品数量和价格等公共数据进行状态管理

文章目录 0.实现需求1.新建购物车模块cart2.使用json-server模拟向后端请求数据3.在vuex请求获取并存入数据,并映射到组件中,在组件中渲染【重点】3.1.安装axios3.2.准备actions和mutations,获取和存入数据到vuex中3.3.动态渲染:用mapState映射 其他1.为什么在axios在项目中要局…...

二叉搜索树的判断(双指针解决)

98. 验证二叉搜索树 - 力扣(LeetCode) class Solution { public:TreeNode*preNULL;bool isValidBST(TreeNode* root) {if(rootNULL){return true;}bool leftisValidBST(root->left);if(pre!NULL&&pre->val>root->val){return fals…...

关于CSDN创作的常用模板内容

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 好文评论新文推送 📃文章前言 &…...

不小心误删了文件,找Windows数据恢复工具来帮忙

相信很多人都遇到过这样的情况:不小心在电脑上删除了一些重要的文件,等到想要找回来时,却感觉特别棘手。 今天我要给大家推荐一款超棒的Windows数据恢复工具,它能轻松帮你找回那些被误删的文件。 (文末附下载链接&…...

[Verilog]跨时钟域数据传输解决方案

跨时钟域数据传输解决方案 摘要:跨时钟域数据传输 (Clock Domain Crossing, CDC) 是 SoC 设计中常见且关键的问题,因为现代 SoC 通常包含多个时钟域,不同模块可能运行在不同频率或相位的时钟下。跨时钟域传输数据时,如果处理不当,可能会导致亚稳态 (Metastability)…...

Linux——进程终止/等待/替换

前言 本章主要对进程终止,进程等待,进程替换的详细认识,根据实验去理解其中的原理,干货满满! 1.进程终止 概念:进程终止就是释放进程申请的内核数据结构和对应的代码和数据 进程退出的三种状态 代码运行…...

数据结构与算法:图论——最短路径

最短路径 先给出一些leetcode算法题,以后遇见了相关题目再往上增加 最短路径的4个常用算法是Floyd、Bellman-Ford、SPFA、Dijkstra。不同应用场景下,应有选择地使用它们: 图的规模小,用Floyd。若边的权值有负数,需要…...

双指针(5)——有效三角形个数

题目: 这道题我们首先可能会想到暴力解法,三个for循环然后进行check()。时间复杂度肯定是不允许的。 同时,验证可以组成三角形的条件是任意两边之和大于第三边,这就意味着我们每组要进行三次比较。但也有捷…...

Qt QGraphicsScene 的用法

背景,为什么要写这篇博客 今天学习 model - view 模式的时候还看到有 scene - view 模式。不知道还有这个模式,所以学习了下。 学习后总体的感觉是:其实没有也是可以的,但有了方便许多。 从两种画图的方法开始说 以前有个项目也…...

使用 Tesseract 实现藏文OCR

要识别藏文,最常用且有效的方法是使用Tesseract OCR(谷歌开源的OCR工具),因为它拥有针对藏文的预训练模型支持。 🚀 一、安装 Tesseract OCR 软件: 下载链接:Tesseract OCR 下载页面 Windows用…...

数字智慧方案5873丨智慧交通设计方案(57页PPT)(文末有下载方式)

资料解读:智慧交通设计方案 详细资料请看本解读文章的最后内容。 智慧交通设计方案是一份详尽的交通规划文件,旨在通过科学的交通设计方法,优化交通系统,提升交通效率,确保交通安全,并促进可持续发展。该…...

【quantity】6 温度单位实现(temperature.rs)

一源码 以下代码实现了一个温度单位系统,支持开尔文(Kelvin)和摄氏度(Celsius)之间的转换和运算。 /// Temperature (kelvin) / 温度 (开尔文) use super::{Quantity, prefix::*}; use crate::unit::Kelvin; use derive_more::{Add, Sub, AddAssign, SubAssign};/…...

ARConv的复现流程

使用环境 Python 3.10.16 torch 2.1.1cu118 torchvision 0.16.1cu118 其它按照官方提供代码的requirements.txt安装 GitHub - WangXueyang-uestc/ARConv: Official repo for Adaptive Rectangular Convolution 数据准备 从官方主页下载pancollection数据集PanCollection…...

安卓游戏APK文件解密与编辑的完整攻略

在移动游戏开发中,保护游戏数据不被篡改是开发者的重要任务。然而,随着逆向工程技术的发展,破解游戏数据也变得可能。本文将详细介绍如何分析、解密和编辑APK安装包中的加密JSON文件,特别关注assets/task目录下的文件,并提供一种绕过checkfile.json中MD5校验的有效方法。通…...

JVM——JVM 是如何执行方法调用的?

JVM 是如何执行方法调用的? 在 Java 世界的底层运作中,方法调用机制是理解 Java 虚拟机(JVM)行为的关键之一。JVM 作为 Java 程序运行的核心,承担着执行字节码、管理内存、调度线程等多项职责。而方法调用作为程序逻辑…...

一天学完JDBC!!(万字总结)

文章目录 JDBC是什么 1、环境搭建 && 入门案例2、核心API理解①、注册驱动(Driver类)②、Connection③、statement(sql注入)④、PreparedStatement⑤、ResultSet 3、jdbc扩展(ORM、批量操作)①、实体类和ORM②、批量操作 4. 连接池①、常用连接池②、Durid连接池③、Hi…...

【愚公系列】《Manus极简入门》011-习惯养成教练:“习惯塑造师”

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…...

精益数据分析(38/126):SaaS模式的流失率计算优化与定价策略案例

精益数据分析(38/126):SaaS模式的流失率计算优化与定价策略案例 在创业和数据分析的领域中,我们不断探索如何更精准地把握业务发展的关键要素。今天,带着与大家共同进步的想法,深入研读《精益数据分析》&a…...

50.【必备】二分答案法与相关题目

本文的网课内容学习自B站左程云老师的算法详解课程,旨在对其中的知识进行整理和分享~ 网课链接:算法讲解051【必备】二分答案法与相关题目_哔哩哔哩_bilibili 一.爱吃香蕉的珂珂 题目:爱吃香蕉的珂珂 算法原理 整体思路 这是一个二分查找算法…...

C# 方法(局部变量和局部常量)

本章内容: 方法的结构 方法体内部的代码执行 局部变量 局部常量 控制流 方法调用 返回值 返回语句和void方法 局部函数 参数 值参数 引用参数 引用类型作为值参数和引用参数 输出参数 参数数组 参数类型总结 方法重载 命名参数 可选参数 栈帧 递归 局部变量 和第5章介绍的字段…...

MQTT 协议与 HTTP 协议的区别

在现代的网络通信中,MQTT 协议和 HTTP 协议都扮演着重要的角色,但它们有着不同的特点和适用场景。下面我们就从多个方面来详细探讨它们之间的区别。 一.协议设计理念 1. MQTT 协议 MQTT(Message Queuing Telemetry Transport)即…...

博弈论思维——AI与思维模型【90】

一、定义 博弈论思维模型是一种研究在相互影响的决策情境中,参与者如何通过策略选择来实现自身利益最大化的理论框架。它分析参与者之间的相互作用、策略组合以及由此产生的结果,帮助人们理解在竞争或合作环境下的决策逻辑和行为模式。 二、由来 博弈…...

【Bootstrap V4系列】学习入门教程之 表格(Tables)和画像(Figure)

Bootstrap V4系列 学习入门教程之 表格(Tables)和画像(Figure) 表格(Tables)一、Examples二、Table head options 表格头选项三、Striped rows 条纹行四、Bordered table 带边框的表格五、Borderless table…...

第 3 篇:有序的世界:有序表 (TreeMap/TreeSet) 的概念与优势

上一篇我们探讨了哈希表如何以牺牲顺序为代价换取极致的平均速度。然而,在现实世界的许多应用中,数据的有序性不仅是锦上添花,甚至是核心需求。想象一下: 你需要显示一个按价格排序的商品列表。你需要找到某个时间点之前或之后的…...

VulnHub-DC-2靶机

主机发现 sudo arp-scan -l 以sudo管理员权限扫描本地活动ip地址 Interface: eth0, type: EN10MB, MAC: 08:00:27:22:46:4f, IPv4: 192.168.252.230 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.252.6 4c:5f:70:74:3c:3b …...

论文笔记(八十三)STACKGEN: Generating Stable Structures from Silhouettes via Diffusion

STACKGEN: Generating Stable Structures from Silhouettes via Diffusion 文章概括摘要I. INTRODUCTIONII. 相关工作A. 从直觉物理学学习稳定性B. 用于姿态生成的扩散模型C. 自动化顺序装配 III. 方法A. 用于 S E ( 3 ) SE(3) SE(3)积木姿态生成的扩散模型B. 模型架构C. 数据生…...

论文阅读笔记——TesserAct: Learning 4D Embodied World Models

TesserAct 论文 采用RGB-DN(RGB深度法线) 作为 4D 场景中间表示,由此建模 4D 场景,比纯 2D 视频更准确地建模 3D 几何结构。相比现有的 4D 视频生成,优化速度快,收敛好,且首次从当前帧和文本描述…...

变转速振动信号分析处理与故障诊断算法模块

变转速振动信号分析处理与故障诊断算法模块,作为信号处理算法工具箱的主要功能模块,形成了以变转速振动信号分析处理与故障诊断算法模块的经典算法模型,可应用于各类关键机械部件(轴承、齿轮、转子等)的信号分析、故障…...

每日算法-250502

每日算法 - 2025.05.02 记录一下今天刷的几道 LeetCode 算法题。 3191. 使二进制数组全部等于 1 的最少操作次数 I 题目 思路 贪心 解题过程 遍历数组 nums。当我们遇到 nums[i] 时: 如果 nums[i] 是 1,我们不需要进行操作,因为目标是全 …...

如何在纯C中实现类、继承和多态(小白友好版)

基本实现原理 /* 通过结构体函数指针模拟类 */ typedef struct {// 成员变量int x; // 成员方法(函数指针) void (*print)(void* self); } MyClass;/* 成员函数实现 */ void my_print(void* self) {MyClass* obj (MyClass*)self;p…...

AE/PR插件 转场创建大师专业版 Transition Master Pro v2.0.2 Win+使用教程

Transition Master Pro v2.0.2是一款原生转场插件,专为Adobe Premiere Pro和After Effects设计。它提供了创建、导出和销售自己的转场效果,或从一个庞大的转场预设库中选择。使用Transition Master Pro v2.0.2,您可以快速轻松地创建令人惊叹的…...

[Linux]从零开始的STM32MP157 Buildroot根文件系统构建

一、前言 在前面的教程中,教了大家如何移植一个LInux的内核并且正确启动,我们发现Linux内核在启动后会出现一个错误,提示我们没有找到根文件系统。那么什么是根文件系统呢?之前我们使用Ubuntu编译了STM32MP157的TF-A,UBOOT,LINUX内…...

阿里云服务器 篇五(加更):短链服务网站:添加反垃圾邮件功能

文章目录 系列文章(可选)更新YOURLS版本安装 Compliance 插件安装 Phishtank-2.0 插件(可选)安装 httpBL 插件样例网站(不推荐)使用谷歌解决方案更多系列文章 阿里云服务器 篇一:申请和初始化 阿里云服务器 篇二:搭建静态网站 阿里云服务器 篇三:提交搜索引擎收录 阿…...

状压 DP 详解

文章目录 简介做法洛谷 P1171 简介 状压 DP 其实约等于一个 DP 的小技巧,一般应用在处理一个或多个集合的问题中(因为状压 DP 的下标就是一个集合),而且在 n n n 太大的时候建议不要使用这种方法。(如果你不懂&#…...

多模态大模型轻量化探索-视觉大模型SAM(Segment Anything Model)

往期,笔者基于LLava的数据对齐训练,搞了一个Reyes多模态大模型,并且看了些多模态大模型,相关开源的多模态大模型如:KimiVL、Internvl、QwenVL等,其视觉编码器的尺寸都比较大,如:Moon…...

数据分析_问题/优化

1 报表开发 1.1 数据问题 (1) 数据易错 问题描述 ①数据整合困难:数据来源多样、格式差异大,整合时处理不当易丢错数据. ②计算逻辑复杂:开发人员对复杂计算逻辑的理解产生偏差,会导致计算结果不准. 解决方案 ①建立数据标准,统一修正字段命名、数据类型、日期格式等 ②加强…...

我的stm32驱动电机驱动着突然就卡死程序死机了是为什么

电源不稳定或干扰 电机启动电流冲击:电机运行时可能导致电源电压跌落,影响STM32稳定性。需检查电源滤波电容、使用独立电源或增加稳压模块 地线干扰:电机与MCU共地时,高频噪声可能通过地线耦合,需采用隔离电路或磁耦芯…...

使用 Java 实现一个简单且高效的任务调度框架

目录 一、任务调度系统概述 (一)任务调度的目标 (二)任务调度框架的关键组成 二、任务状态设计 (一)任务状态流转设计 (二)任务表设计(SQL) 三、单机任…...

Git 完整教程:初学者分步指南

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! Git 是一个分布式版本控制系统,可以帮助开发人员跟踪代码更改、与他人协作以及高效管理软件项目。无论您是初学者还是正在提升…...

数字智慧方案5856丨智慧环保综合解决方案(50页PPT)(文末有下载方式)

资料解读:智慧环保综合解决方案 详细资料请看本解读文章的最后内容。 随着城市化进程的加速和环境问题的日益严峻,智慧环保成为提升城市环境管理水平的重要手段。本文将对智慧环保综合解决方案进行详细解读,探讨其在实际应用中的需求、解决…...

VBA快速合并多列单元格

实例需求:工作表中第3行到第5行有如下图所示的数据表,为了方便展示,隐藏了部分列,实际数据为从C列到DO列。 现需要合并第3行和第4行相同内容的单元格,如第10行到第12行所示。 示例代码如下。 Sub MergeDemo()Dim dicM…...

区块链+IoT:创新场景落地背后的技术攻坚战

物联网(IoT)与区块链技术作为两大颠覆性技术,正通过深度融合推动各行各业的数字化转型。物联网通过连接海量设备实现数据互通与智能化管理,而区块链凭借去中心化、不可篡改和可追溯的特性,为物联网的安全性、隐私保护和…...

自动化测试项目2 --- 比特纵横 [软件测试实战 Java 篇]

目录 项目介绍 项目源码 库地址 项目功能测试 1. 自动化实施步骤 1.1 编写测试用例 1.2 自动化测试脚本开发 1.2.1 配置相关环境, 添加依赖 1.2.2 代码编写 2. 编写自动化脚本过程问题总结 2.1 Actons 方法的使用 2.2 等待的使用 2.3 页面操作 项目性能测试 1. 进…...