Cookie与Session详解
Cookie简介
Cookie 是浏览器提供的持久化存储数据的一种机制。是指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据(通常经过加密)。以下是关于 Cookie 的详细介绍:
Cookie工作原理
当你访问一个网站时,该网站的服务器会向你的浏览器发送一个小的文本文件,即 Cookie。浏览器会将这个 Cookie 存储在你的设备上。在你下次访问同一网站时,浏览器会将存储的 Cookie 发送回该网站的服务器,服务器可以通过 Cookie 中的信息来识别你的身份、记录你的偏好设置或跟踪你的浏览行为等。
具体的工作流程:
1.设置 Cookie:当用户第一次访问某个网站时,在服务器端,可以通过在 HTTP 响应头中设置 “Set-Cookie” 字段来设置 Cookie。并发送给浏览器。浏览器将 Cookie 存储在本地。
2.读取 Cookie:在后续对该网站的请求中,浏览器会自动在请求头中携带该网站的 Cookie,服务器可以通过读取 Cookie 来获取用户的相关信息。
举例说明:如用户登录后,服务器设置一个包含用户身份信息的 Cookie,这样用户在访问其他页面时,服务器可以通过这个 Cookie 识别用户已登录状态,无需再次登录。
如图所示:
解释说明:
第一步:当我通过浏览器向淘宝这个网站发起请求时,淘宝服务器就会给我返回一个淘宝页面 。
第二步:在第一步返回的淘宝页面中,浏览器发起登录请求,此时服务器响应,服务器会去查询数据库,去校验用户名和密码是否正确,如果正确,登录成功,并且通过SetCookie字段设置身份序号。浏览器收到服务器响应之后,把身份序号保存到Cookie中。
第三步:服务器会把当前用户的身份信息在内存中也保存一份,同时给当前用户分配一个表示身份序号,这个序号是唯一的。这个就叫SessionID。服务器使用像hash表这样的数据结构把序号作为key,身份信息作为value存储起来,服务器生成的这些键值对称为Session(会话)。在后续请求中服务器收到Cookie中的身份序号,就会查询hash表,判定用户是谁,如果查询到了就知道用户是谁了,避免了重复输入账号和密码。如果没有查询到,就会要求用户重新进行登录操作。
Cookie作用
1.用户登录状态:当你登录一个网站后,网站可以通过 Cookie 记住你的登录状态,这样你在浏览该网站的其他页面时无需再次输入用户名和密码。
2.个性化体验:网站可以利用 Cookie 记住你的偏好设置,如语言选择、字体大小、页面布局等,为你提供更加个性化的浏览体验。
3.购物车功能:在电子商务网站中,Cookie 用于跟踪你添加到购物车中的商品,确保在你浏览不同页面或离开网站后再次返回时,购物车中的商品仍然存在。
4广告定向:广告商可以利用 Cookie 跟踪你的浏览行为,以便向你展示更加相关的广告。例如,如果你最近浏览了一些体育用品网站,你可能会在其他网站上看到与体育用品相关的广告。
Cookie安全问题
Cookie 可能被窃取,例如通过网络监听、跨站脚本攻击等;Cookie 可能被篡改,导致用户信息被伪造。
防范措施:
1.使用 HTTPS 加密连接,防止 Cookie 在传输过程中被窃取。设置 HttpOnly 属性,防止 JavaScript 脚本访问 Cookie。
2.对 Cookie 的值进行加密,增加安全性;定期清理过期的 Cookie,减少安全风险。
Session简介
session(会话)是一种用于跟踪用户与服务器之间交互状态的机制。
Session的作用
-
状态保持:HTTP 协议是无状态的,这意味着每个请求都是独立的,服务器无法直接知道不同请求是否来自同一个用户。Session 机制允许服务器在多个请求之间识别和跟踪特定的用户,从而实现状态保持。例如:当用户登录到一个网站后,服务器可以创建一个 session,并在后续的请求中通过 session ID 识别该用户,确保用户在不同页面浏览或进行操作时仍然保持登录状态。
-
存储用户相关信息:Session 可以存储特定于用户的信息,如用户的登录状态、权限级别、购物车内容等。例如:在一个电子商务网站中,用户将商品添加到购物车后,购物车的信息可以存储在 session 中,以便在用户浏览不同页面时仍然可以访问购物车中的商品。
Session工作原理
-
Session ID 的生成和传递
- 当用户首次访问服务器时,服务器会创建一个唯一的 session ID。这个 ID 可以通过多种方式传递给客户端,最常见的方式是使用 cookie。服务器将 session ID 存储在一个名为 '' JSESSIONID ''的 cookie 中,并发送给客户端。
- 客户端在后续的请求中会自动将这个 cookie 发送回服务器,服务器通过读取 session ID 来识别对应的 session。
-
Session 的存储和管理
- 服务器通常将 session 数据存储在内存中,或者使用数据库、文件系统等外部存储来持久化 session 数据。不同的 Web 应用服务器和框架有不同的 session 管理方式。
- 例如: Servlet 规范中,服务器可以使用
HttpSession
接口来管理 session。开发人员可以通过request.getSession()方法获取当前用户的 session 对象,并在其中存储和读取数据。
优势和注意事项
-
优势
- 提供了一种方便的方式来管理用户状态,使得开发人员可以更轻松地构建复杂的 Web 应用。
- 相对于将用户状态存储在客户端(如使用 cookie 存储大量数据),session 更加安全,因为用户无法直接修改服务器端存储的 session 数据。
-
注意事项
- 由于 session 数据存储在服务器端,因此如果有大量的用户同时访问,可能会占用较多的服务器内存。需要合理管理 session 的大小和生命周期,及时清理过期的 session。
- 如果服务器集群部署,需要考虑 session 的共享和同步问题,以确保用户在不同服务器之间的请求能够正确地识别和使用同一个 session。
实现登录功能来理解Cookie和Session
流程:
1.点击一个登录按钮,触发一个登录请求。
2.验证用户名,密码是否正确,如果正确(登录成功)跳转到主页面,如果不正确(登录失败)跳转到登录页面。
前端登录页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body><form action="login" method="post"><input type="text" name="username"><br><input type="password" name="password"><br><input type="submit" value="提交"></form>
</body>
</html>
登录校验
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/login")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String username = req.getParameter("username");String password = req.getParameter("password");// 验证用户名密码是否正确.// 正常情况下, 用户名密码会使用数据库来保存.// 此处直接写死.// 此处约定, 用户名合法的是 zhangsan 和 lisi// 密码合法的都是 123if (!username.equals("zhangsan") && !username.equals("lisi")) {// 登陆失败!!// 重定向到 登陆页面System.out.println("登陆失败, 用户名错误!");resp.sendRedirect("login.html");return;}if (!password.equals("123")) {// 登陆失败!!System.out.println("登陆失败, 密码错误!");resp.sendRedirect("login.html");return;}// 登陆成功// 1. 创建一个会话.HttpSession session = req.getSession(true);// 2. 把当前的用户名保存到会话中. 此处 HttpSession 又可以当成一个 map 使用.session.setAttribute("username", username);// 3. 重定向到主页resp.sendRedirect("index");}
}
主页面
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;@WebServlet("/index")
public class IndexServlet extends HttpServlet {// 通过 重定向, 浏览器发起的是 GET .@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 先判定用户的登陆状态.// 如果用户还没登陆, 要求先登陆.// 已经登陆了, 则根据 会话 中的用户名, 来显示到页面上.// 这个操作不会触发会话的创建.HttpSession session = req.getSession(false);if (session == null) {// 未登录状态System.out.println("用户未登录!");resp.sendRedirect("login.html");return;}// 已经登陆String username = (String) session.getAttribute("username");// 构造页面.resp.setContentType("text/html;charset=utf8");resp.getWriter().write("欢迎 " + username + "回来!");}
}
运行结果:
// 1. 创建一个会话.HttpSession session = req.getSession(true);
解释说明:
会话是一个键值对,key是sessionId,value是一个HttpSession对象,每个客户端进行登录的时候都有一个这样的会话(键值对),服务器要管理多个这样的键值对(会话),服务器采用像哈希表这样的数据结构,把这些键值对(会话)存储起来。
创建会话的过程:
1.构造一个HttpSession对象。
2.构造唯一的sessionId。
3. 把这个键值对插入哈希表中。
4.把sessionId设置到响应报文,Set-Cookie中。
req.getSession(true)的意思:判定当前请求是否已经有对应的会话了,(拿着请求中Cookie里的SessionId查一下哈希表),如果sessionId不存在,或者没有查到,就会创建新会话,并插入到哈希表当中,如果查到了,直接返回查到的结果。
// 1. 创建一个会话.HttpSession session = req.getSession(true);// 2. 把当前的用户名保存到会话中. 此处 HttpSession 又可以当成一个 map 使用.session.setAttribute("username", username);
用一个简图来说明服务器是如何组织会话的,如下图所示:
注意:HttpSession对象自己也是一个键值对,用setAttribute,getAttribute 来存取键值对,这里的键值对是开发者自定义的数据。
抓包工具查看交互过程
Cookie 和Session的关联和区别
关联:在网站的登录功能中,需要配合使用。
区别:
1.Cookie是客户端的存储机制,Session是服务器的存储机制。
2.Cookie里面可以存放各种键值对,Session专门用来保存用户的身份信息。
3.Cookie可以单独使用,不搭配Session(实现非登录场景下)。
4.Session也可以单独使用,不搭配Cookie(比如:手机app登录服务器,,服务器需要Session,此时没有Cookie的概念了,Cookie是跟浏览器强相关的)。
5.Cookie是HTTP协议中的一部分,Session则可以和HTTP无关,(比如TCP,websocket也可以使用Session)。
一、存储位置
- Session:数据存储在服务器端。服务器为每个会话创建一个唯一的 Session ID,并将相关数据与这个 ID 关联起来存储在服务器的内存或其他存储介质中。
- Cookie:数据存储在客户端,即在用户的浏览器中。Cookie 是一小段文本信息,由服务器发送给客户端并由客户端保存。
二、安全性
- Session:相对更安全,因为用户无法直接访问和修改服务器端存储的 Session 数据。服务器可以对 Session 数据进行加密和严格的访问控制。
- Cookie:存储在客户端,容易被用户篡改或窃取。虽然可以对 Cookie 进行加密,但仍然存在一定的安全风险。
三、存储容量
- Session:通常没有严格的容量限制,因为存储在服务器端,可以根据服务器的资源进行调整。但如果存储过多数据可能会占用较多服务器内存。
- Cookie:有大小限制,不同浏览器对 Cookie 的大小限制略有不同,一般在 4KB 左右。
四、生命周期
- Session:其生命周期通常由服务器控制。可以通过设置超时时间来决定 Session 的有效期。当用户长时间没有活动时,服务器可能会自动销毁 Session。
- Cookie:可以设置不同的生命周期。可以是会话级别的(在浏览器关闭时自动删除),也可以设置一个特定的过期时间,在过期时间到达之前,Cookie 会一直存在于客户端。
五、跨域访问
- Session:一般情况下,Session 在同一应用服务器内的不同页面之间共享比较容易,但在跨域场景下需要进行额外的配置和处理。
- Cookie:可以通过设置
domain
和path
属性来控制在不同域和路径下的访问权限,相对来说在一些跨域场景下更容易进行配置。
六、对性能的影响
- Session:由于数据存储在服务器端,大量的 Session 可能会占用服务器内存,影响服务器性能。特别是在高并发场景下,需要合理管理 Session 的数量和大小。
- Cookie:存储在客户端,对服务器性能影响较小。但如果存储过多或过大的 Cookie,可能会影响客户端的性能,尤其是在每次请求都需要发送 Cookie 的情况下。
相关文章:
Cookie与Session详解
Cookie简介 Cookie 是浏览器提供的持久化存储数据的一种机制。是指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据(通常经过加密)。以下是关于 Cookie 的详细介绍: Cookie工作原理 当你访问一个网站时,该网…...
OpenBMC:BmcWeb 处理http请求
OpenBMC:BmcWeb 读取http请求头-CSDN博客 介绍了,在读取完http头后,将调用Connection::handle处理http请求 1.Connection::handle void handle() {...req = std::make_shared<crow::Request>(parser->release(), reqEc);...req->session = userSession;accept …...
【算法题解答·六】栈队列堆
【算法题解答六】栈队列堆 接上文【算法方法总结六】栈队列堆的一些技巧和注意事项 栈队列堆相关题目如下: 232.用栈实现队列 简单 准备两个栈,一个负责入队的栈A,一个负责出队的栈B出队和返回队列开头元素,都要先进行以下操作…...
计算机视觉算法实战——手势识别(主页有源码)
✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ 1. 领域简介:手势识别的价值与挑战 手势识别是连接人类自然行为与数字世界的核心交互技术,在智能设备控制、…...
JobScheduler省电机制
1.前言 JobScheduler(任务调度器)是 Android 提供的一种任务调度机制,可以替代传统的 WakeLock 和 Alarm 来执行后台任务。那么,它们之间的区别是什么?JobScheduler 又有哪些特别之处呢? 1.1 WakeLock 和 …...
设计模式学习笔记——命令模式
2025年3月13日,周四下午 相同的保存逻辑在各个组件中重复出现。 且需要修改保存逻辑时,各个组件的保存逻辑都需要进行相应修改。 使用了命令模式把保存逻辑从三个组件中独立出来后,减少了代码冗余。 可以通过“保存命令”来使用保存逻辑&am…...
[TPCTF 2025] crypto 复现两题
周末很忙。比赛都没怎么看。晚上把密码复现两个。 randomized random 这题在小鸡块博客里见过,稍有区别。 # FROM python:3 import random with open("flag.txt","rb") as f:flagf.read() for i in range(2**64):print(random.getrandbits(3…...
电子元器件选型与实战应用—16 怎么选一个合适的MCU芯片?
文章目录 1. 选型要素1.1 价格1.2 技术支持1.3 厂家优势1.4 功耗1.5 特殊功能1.6 统计外设1.7 确定外设占用的内存和flash大小1.8 确定外设通信接口1.9 确定外设通信接口的电平1.10 确定外设的GPIO数量1.11 确定外设的供电和功耗1.12 确定外设GPIO的种类1.13 确定ADC的数量1.14…...
第6关:牛牛鱼缸-附加题
任务描述 本关任务:问题描述:牛牛有一个鱼缸,鱼缸里面已经有n条鱼,每条鱼的大小为fishSizei,牛牛现在想把新捕捉的鱼放入鱼缸。鱼缸里存在着大鱼吃小鱼的定律。经过观察,牛牛发现一条鱼A的大小为另外一条鱼…...
go中间件学习
本博文源于笔者正在学习go中间件,罗列了较为常用的中间件,例如日志记录、认证授权、跨域资源共享、请求体解析、静态文件处理、错误处理、性能分析、速率限制、session 1、日志记录中间件 可以追加打印用,例如,将请求进行打印 …...
若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署
一.目标 在浏览器上成功登录进入 二.源码下载 后端源码:前往Gitee下载页面(https://gitee.com/dromara/RuoYi-Cloud-Plus)下载解压到工作目录。 前端源码: 前往Gitee下载页面(https://gitee.com/JavaLionLi/plus-ui)下载解压到工作目录。 文档地址&a…...
航空电动力系统适航标准要点手册
航空电动力系统适航标准要点手册 1.标准制定背景与必要性1.1 为什么需要制定和遵循标准?1.2 标准制定依据与发布机构 2.关键核心标准概述2.1 电动航空与电推进系统2.2 混合动力系统2.3 硬件与通用要求 3.标准详细解读与应用场景3.1 DO-160G:环境适应性测…...
深入理解JavaScript构造函数与原型链:从原理到最佳实践
一、开篇:为什么需要理解原型链? 在JavaScript开发中,90%以上的"诡异"bug都与原型链机制相关。理解构造函数与原型链的运行原理,不仅能帮助我们写出更优雅的代码,还能在框架源码阅读、性能优化等场景中游刃…...
java每日精进 3.12 【WebSocket进阶】
基于 SpringWebSocket 进行二次封装,实现了更加简单的使用方式。例如说,WebSocket 的认证、Session 的管理、WebSocket 集群的消息广播等等。 1. 用户认证与登录用户信息传递 1.1 Token 过滤器 (TokenAuthenticationFilter) ① 在 WebSocket 连接建立…...
国家网络安全事件应急预案
目 录 1 总则 1.1 编制目的 1.2 编制依据 1.3 适用范围 1.4 事件分级 1.5 工作原则 2 组织机构与职责 2.1 领导机构与职责 2.2 办事机构与职责 2.3 各部门职责 2.4 各省(区、市)职责 3 监测与预警 3.1 预警分级 3.2 预警监测 3.3 预警研判…...
Markdown:Mermaid 画图
目录 安装基本语法流程图时序图甘特图总结 Mermaid 是一款用于生成流程图、时序图、甘特图等图表的 JavaScript 库。它可以将简单的文本描述转化为美观的图表,方便开发者进行可视化展示。 安装 Mermaid 可以直接在浏览器中使用,也可以在 Node.js 环境中…...
【视频】ffmpeg、Nginx搭建RTMP、HLS服务器
1、源码安装Nginx 1)源码下载 因为要使用Nginx的模块nginx-rtmp-module,所以要下载 nginx 和 nginx-rtmp-module 的源码。 下载地址: http://nginx.org/en/download.html https://github.com/arut/nginx-rtmp-module/tags2)解压、配置 在同一个目录中解压 nginx 和 nginx…...
时间有限,如何精确设计测试用例?5种关键方法
精确设计测试用例能够迅速识别并修复主要缺陷,确保产品质量,降低后期维护成本,并通过专注于核心功能来提升用户体验,为项目的成功奠定坚实基础。若未能精确设计测试用例,可能会导致关键功能测试不充分,使得…...
【算法】图论
⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 持续更新中...1、DFS2、BFSN 叉树的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度 3、多源BFS腐烂的苹果 4、拓扑排序 持续更新中…...
ADQ32 5G采集卡
ADQ32是一款高端12位双通道数据采集板,针对高通量科学应用进行了优化。ADQ32具有以下特性: 一个和两个模拟输入通道包括每通道5和2.5 GSPS7GB/s的持续数据传输速率至GPU7GB/秒的持续数据传输速率两个外部触发器通用输入/输出(GPIO)开放式FPG…...
机器人领域专业名词汇总
1. 电机与驱动 电机类型 DC Motor(直流电机):通过直流电源驱动的电机。Stepper Motor(步进电机):通过脉冲信号控制旋转角度的电机。Servo Motor(伺服电机):带有反馈控制的…...
拆解 “ES 已死“ 伪命题:Agentic RAG 时代搜索引擎的终极形态
作者:来自 Elastic 李捷 xxx:“ES已死,#%#……” 我:??? 最近,某厂商发了一堆公关文章,翻来覆去地炒作 “ES 已死”,“放弃 ES”。这哪是什么正经的技术文章&…...
eNSP中路由器的CON/AUX接口、GE Combo接口、Mini USB接口、USB接口、WAN侧uplink接口、FE接口、GE接口介绍
路由器常见接口的详细介绍及其应用示例: 1. CON/AUX 接口 全称:Console/Auxiliary(控制台/辅助接口)作用: CON(Console):通过命令行界面(CLI)直接配置路由器…...
平面的四种方程及一些应用
平面的四种方程及一些应用 点法式方程一般式方程三点式方程截距式方程一些应用已知平面方程,找出平面上不共线的三个点 点法式方程 平面经过点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)且法向量为 ( a , b , c ) (a,b,c) (a,b,c),则平面的点…...
记录一个SQL自动执行的html页面
在实际工作场景中,需要运用到大量SQL语句更新业务逻辑,对程序员本身,写好的sql语句执行没有多大问题(图1),但是对于普通用户来说还是有操作难度的。因此我们需要构建一个HTML页面(图2࿰…...
SpringBoot——Maven篇
Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的工具。它具有许多特性,其中一些重要的特性包括: 1. 自动配置:Spring Boot 提供了自动配置的机制,可以根据应用程序的依赖和环境自动配置应用程序的各种组件ÿ…...
数据批处理(队列方式)
数据批处理(队列方式) public class DataProcessor {private static final int THREAD_COUNT 4;private static final int QUEUE_SIZE 10;private LinkedBlockingQueue<Data> queue new LinkedBlockingQueue<>(QUEUE_SIZE);public DataP…...
从零开始搭建搜索推荐系统(五十四)多路召回之万剑归宗
聊的不止技术。跟着小帅写代码,还原和技术大牛一对一真实对话,剖析真实项目筑成的一砖一瓦,了解最新最及时的资讯信息,还可以学到日常撩妹小技巧哦,让我们开始探索主人公小帅的职场生涯吧! (PS…...
c++介绍函数指针 十
指针代表内存中地址标识符,变量,数组都是存储内存中的数据。所以可以获得它们的地址,用指针来表示这块内存。 如图输出内存中的地址。 对于一个函数来说,也是内存中存储这段数据,所以我们也可以获取函数的地址。 函数…...
redis数据库
一、redis数据库介绍 NoSQL Not Only SQL 非关系型数据库 1、关系型数据库与非关系型数据库的区别 非关系型数据库性能高、速度快、支持高并发连接 1、非关系型数据库基于内存存储数据 2、摒弃了关系型数据的约束限制 3、采用o1算法进行设计开发 2、作用 关系型数…...
关于 NoC 中数据安全传输的设计与实现的详细介绍
片上网络(Network-on-Chip,NoC)作为一种新兴的片上通信架构,解决了传统总线架构在大规模集成电路设计中面临的诸多问题。然而,随着芯片系统的复杂性和应用场景的多样化,NoC 中数据安全传输变得至关重要。以…...
OpenGL(4)着色器
文章目录 一、着色器1、什么是着色器?2、着色器类型2.1、顶点着色器(Vertex Shader)2.2、片段着色器(Fragment Shader) 3、着色器属性3.1、layout 属性3.2、in 属性3.3、out 属性3.4、总结 4、示例 前言: 在…...
PHP批量去除Bom头的方法
检查的代码: <?php$dir __DIR__; $files new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));foreach ($files as $file) {if ($file->isFile() && pathinfo($file, PATHINFO_EXTENSION) php) {$content file_get_contents(…...
51单片机的keil c51软件安装教程
Keil(C51)介绍、下载、安装与注册_keil c51-CSDN博客 参考 安装 不一定是这个大小,也可以下载别的版本KEID C51 注册 加入芯片型号 …...
JavaScript基本知识
文章目录 一、JavaScript基础1.变量(重点)1-1 定义变量及赋值1-2 变量的命名规则和命名规范判断数据类型: 2.数据类型转换2-1 其他数据类型转成数值2-2 其他数据类型转成字符串2-3 其他数据类型转成布尔 3.函数3-1函数定义阶段3-2函数调用阶段…...
导数,积分及常用公式
导数定义: 求导是数学计算中的一个计算方法,它的定义就是,当自变量的增量趋于零时,因变量的增量与自变量的增量之商的极限。在一个函数存在导数时,称这个函数可导或者可微分。可导的函数一定连续。不连续的函数一定…...
鸿蒙应用开发—ZDbUtil高效使用数据库
文章目录 介绍下载安装基本使用注解TableIdColumnOneToOne 使用方法定义实体类初始化数据库并根据被Table注解的类创建表创建表查数据插入数据删除数据清空数据 参考 介绍 ZDbUtil是一款基于SQLite的鸿蒙数据库框架,通过注解标注实体类与属性,让数据更能…...
强化学习(赵世钰版)-学习笔记(7.时序差分学习)
本章是课程算法与方法中的第四章,介绍的时序差分学习算法是基于随机近似方法设计的强化学习方法,也是model-free的方法。 时序差分算法是一种近似估计策略状态值的算法,具体的形式如下: 本质上是在当前t时刻,被访问到的…...
正则表达式入门及常用的正则表达式
正则表达式(Regular Expression,简称 Regex)是一种强大的文本处理工具,用于匹配、查找和替换字符串中的特定模式。以下是入门指南和常用正则表达式示例: 一、正则表达式入门 1. 基本语法 符号说明示例.匹配任意单个字…...
大白话如何在 Vue 项目中进行路由懒加载?
大白话如何在 Vue 项目中进行路由懒加载? 在 Vue 项目里,路由懒加载是种很实用的技术,它能让你在需要的时候再去加载对应的路由组件,而不是在项目启动时就把所有组件都加载进来,这样能加快项目的启动速度。下面就详细…...
手动实现一个RTTI系统
在 C 中,RTTI(Runtime Type Information,运行时类型信息)是一组允许程序在运行时获取对象类型信息的机制 。虽然C通过虚接口的方式提供了良好的抽象,但是对于一个复杂的系统,过于依赖抽象而忽略业务的复杂性…...
智能化水利监管:无人机视频在违章行为识别中的应用
随着我国经济社会的快速发展,水利工程建设规模不断扩大,但随之而来的违章建设行为也日益增多。传统的人工巡查方式效率低下,难以满足当前监管需求。无人机技术以其灵活性和高效性,为水利工程建设监管提供了新的解决方案。本文将探…...
力扣练习之确定两个字符串是否接近
目录 题目: 题解: 详细题解 题目: 如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 : 操作 1:交换任意两个 现有 字符。 例如,abcde -> aecdb 操作 2࿱…...
Word 小黑第21套
对应大猫22 设置表格为页面的80%:表布局 -属性 -表格 指定宽度80% 度量单位改成百分比 段落组 -中文版式 在表格上下方留一行空段(如果表格太大改一下样式)插入横线 边框线 (右击横线 -图片 修改样式) 段落 -取消对于…...
mingw32编译ffmpeg
ffmpeg https://gitee.com/mirrors/ffmpeg.git 使用msys2的mingw32 pacman -S mingw-w64-x86_64-toolchain compile ./confiure --enable-static --disable-shared --enable-gpl --target-oswin32 mingw32-make -j4 提示编译错误,msys2里面的路径是/d/tools/msys2…...
设计模式C++
针对一些经典的常见的场景, 给定了一些对应的解决方案,这个就叫设计模式。 设计模式的作用:使代码的可重用性高,可读性强,灵活性好,可维护性强。 设计原则: 单一职责原则:一个类只做一方面的…...
使用 Excel 实现绩效看板的自动化
引言 在日常工作中,团队的绩效监控和管理是确保项目顺利进行的重要环节。然而,面临着以下问题: 数据分散:系统中的数据难以汇总,缺乏一个宏观的团队执行情况视图。看板缺失:系统本身可能无法提供合适…...
ngx_openssl_conf_t
ngx_openssl_conf_t 定义在 src\event\ngx_event_openssl.c typedef struct {ngx_uint_t engine; /* unsigned engine:1; */ } ngx_openssl_conf_t; 1. 这个结构体的目的是存储与 OpenSSL 引擎相关的配置信息。 2. engine 字段用于标识是否启用 OpenSSL 的硬件加速引擎…...
深度学习环境配置指令大全
文章目录 环境配置官网/博客合集清华镜像站anaconda官网pytorch官网pytorch历史库官网pytorch与cuda对应版本下载博客torch与torchvision与python对应关系python与pytorch对应关系 环境相关创建环境激活环境退出环境删除环境检查环境冲突 安装相关安装requirementsconda安装con…...
Netty启动源码NioEventLoop剖析accept剖析read剖析write剖析
学习链接 NIO&Netty - 专栏 Netty核心技术十–Netty 核心源码剖析Netty核心技术九–TCP 粘包和拆包及解决方案Netty核心技术七–Google ProtobufNetty核心技术六–Netty核心模块组件Netty核心技术五–Netty高性能架构设计 聊聊Netty那些事儿 - 专栏 一文搞懂Netty发送数…...