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

Linux网络相关概念和重要知识(4)(序列化和反序列化、TCP协议、会话和守护进程)

目录

1.序列化和反序列化

(1)为什么需要序列化

(2)序列化方案

①json

②json序列化代码模板

③json反序列化代码模板

④将自定义方案和json结合

2.TCP协议(传输控制协议)

(1)为什么支持全双工

(2)管理报文

​编辑

(3)面向字节流

3.会话和守护进程

(1)前台进程和后台进程

(2)会话

(3)创建新会话和守护进程

①创建新会话

②Daemon实现

4.常见指令

(1)netstat

(2)telnet

(3)ulimit


1.序列化和反序列化

(1)为什么需要序列化

应用层:用于解决实际问题,满足日常需求的网络程序都在应用层。

在应用层,我们一般都以面向对象的方式管理数据(管理消息需要有名字、时间等属性),即用类管理数据。协议就是双方约定好的结构化的数据和方法(协议定制就是定制双方都能认识的满足通信和业务需求的结构化数据(class、struct)我们要传输一些结构化的数据怎么办?

一种方法是在recv里面直接传结构体指针,直接将结构体转为二进制,接收端直接接收并按照相应结构体的规则访问。OS的底层就是这样的,因为一台电脑上的OS设计有严格化规定,是统一的。

但在不同主机的应用层看来,大小端、对齐规则、语言版本、32位和64位、结构体里面有指针等都会导致通信出现问题,因此要考虑兼容性问题,在网络中,我们需要将这些数据转换成字符串形式传输,这就是序列化的由来。

序列化,即将信息多变一,以统一的规则发送,反序列化就是一变多,解析字符串为结构化数据。

(2)序列化方案

①json

json是现成的序列化方案(还有xml、protobuf等),我们可以直接用,会用即可。

我们发现json会将结构化数据转为KV字符串。同样我们也可以反序列化

 使用json需要包含的文件

②json序列化代码模板

	// 序列化模板代码Json::Value root;//输入每个想要序列化的对象的成员变量root["x"] = op._x;root["y"] = op._y;root["oper"] = op._oper;//将root接收的要序列化的对象转换为json格式的字符串Json::StreamWriterBuilder writer;std::string json_string = Json::writeString(writer, root);

③json反序列化代码模板

	// 反序列化模板代码Json::Value root;Json::Reader reader;bool ParsingSuccessful = reader.parse(json_string, root);if (!ParsingSuccessful)return 1;//进行错误处理// 接受反序列化结果的结构体对象operation info;info._x = root["x"].asInt(); // 对每个成员进行提取info._y = root["y"].asInt();info._oper = root["oper"].asInt(); // char类型也用asInt()来提取

④将自定义方案和json结合

json处理后的数据是有效载荷,我们还可以自己给这个有效载荷做一层包装。因为TCP是面向字节流的,有了这一层包装可以进一步保证资源传输完整性。

格式:head_length(有效载荷的长度)\r\n + 有效载荷(json处理后的数据)+ \r\n

到此为止,我们就实现了一个自己的协议。

对于客户端,它需要将发送的数据通过协议里面的包装函数转换成上述格式的字符串传出去,接收端再按照相应的解包函数逆向还原结构化数据,然后调用将这些数据作为参数调用服务,最后再将结果通过协议返回给客户端。

2.TCP协议(传输控制协议)

(1)为什么支持全双工

TCP会创建发送和接受缓冲区。send、write都是写到发送缓冲区,本质就是拷贝。recv和read同理,而最后何时刷新缓冲区这个决策由OS自主决定。

为什么TCP支持全双工?是因为有缓冲区,两台主机分别有一个发送和接受缓冲区,保证数据能从一方发送缓冲区发到另一方的接受缓冲区。这和系统的文件系统的处理类似,都是用空间换时间的做法。

(2)管理报文

OS内部可能会存在大量处于不同状态的报文,需要管理,管理方法依然是先描述、再组织

这里面的的receive_queue和write_queue就是我们说的发送和接受缓冲区。我们可以看到这两个缓冲区是socket单独开辟的,和OS层面的文件缓冲区、语言级缓冲区是没有关系的。我们可以理解为创建一个socket之后,对应的文件在file层面和其它文件没什么区别,但实际上是多开辟了缓冲区的。

(3)面向字节流

和面向数据报不同,UDP的数据必须完整打包发过去(快递不能收半个);相比而言,TCP就像自来水管,只负责发水,或多或少,发一个字节也是发数据了。至于数据怎么发,出错了怎么办等都由TCP自主决定,这就是面向字节流。

因此,TCP的完整性应由应用层保证,就是序列化中自定义协议的方案(head_length + json的包装)。

3.会话和守护进程

(1)前台进程和后台进程

使用命令可查看进程的属性

 ps ajx | head -1 ; ps ajx | grep sleep | grep -v grep

有个多余的sleep 180,我们不管它,只关注需要的部分

前台任务状态有+,S+就是前台的,这意味着可以Ctrl + C杀掉进程

sleep 1000 &直接放到后台,成为后台进程

可以用命令fg (任务号)由后台提到前台,我们可以看到状态又重新变为+了。

其它相关操作:

前台进程运行时^Z暂停,暂停时会获得一个任务号。

bg 1让它再次后台运行起来,这个时候就是后台的了

(2)会话

我们先来认识ps命令获取的属性

重点要理解会话,它是理解守护进程的必经之路。

这个会话在Windows里面就是图形化界面,将bash替换成GUI的shell即可,每个用户登录后得到的都是一个系统提供的会话,其下的进程都在同一会话下运行。由于继承了shell的文件描述符表,进程都指向同一个终端文件,因此我们同时只能有一个前台进程来获取用户的输入。

每个用户都有对应的session(会话),session实体也要通过数据结构管理起来,其中session有存储的地址和id等信息,将这些信息和bash的PID关联起来,此时进程就和会话相关了,其它进程同理。我们可以认为进程就是在会话里面运行的。

SID的值就是登录用户后bash的ID,其下子进程的SID理应都是该值。但用户一退出,会话下面的后台进程就会受到影响(不一定会被销毁,可能报错),因此要创建守护进程,就是想办法让后台进程在一个新的会话下面运行,而不是和用户的会话强关联。

(3)创建新会话和守护进程

①创建新会话

谁调用pid_t setsid()成功了,谁就创建了一个session并且自己成为了其中组长。调用的进程不能是进程组的组长,我们可以用孤儿进程来保证这一点。

daemon函数就是创建守护进程的函数,可以结合Daemon的实现来理解。

②Daemon实现

#pragma once#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>void myDaemon(bool ischdir, bool isclose)
{// 守护进程屏蔽特定的信号,这里可以按照自己的需要进行修改signal(SIGCHLD, SIG_IGN); // 忽略子进程结束信号,子进程结束后自动释放资源signal(SIGHUP, SIG_IGN);  // 忽略挂起信号signal(SIGTSTP, SIG_IGN); // 忽略停止信号signal(SIGPIPE, SIG_IGN); // 忽略管道破裂信号// 进程组的组长不能创建新会话,因此创建子进程,让子进程执行后面的代码if (fork() > 0)exit(0); // 父进程(进程组组长退出)// 从这里开始就是子进程在执行代码了,子进程一定保证不是进程组组长,组长已经销毁了,可以说这里开始子进程就是孤儿进程了// 这一步是必然的,因此我们也可以说守护进程就是孤儿进程setsid(); // 建立新会话,该孤儿进程自动成为新的会话组长,并与原来的会话分离// 每一个进程都有自己的CWDif (ischdir) // 选择是否将当前进程的CWD更改成为 / 根目录,这样守护进程就能独自在根目录运行,而不会受到任何外界的干扰,在守护进程中访问文件就相当于绝对路径了chdir("/");// 选择是否关闭文件描述符,这样守护进程就不需要和终端打交道了if (isclose){close(0);close(1);close(2);}else{// 重定向标准输入、输出、错误到/dev/nullint fd = open("/dev/null", O_WRONLY); // 根目录下的黑洞文件,写的直接丢弃,读也读不到数据if (fd > 0){dup2(fd, 0); // 将标准输入重定向到/dev/null,保证读不到任何输入dup2(fd, 1); // 将标准输出重定向到/dev/null,保证输出不显示在屏幕上dup2(fd, 2); // 将标准错误重定向到/dev/null,保证错误不显示在屏幕上close(fd);   // fd已经有3份拷贝了,关闭原来的fd}}
}

至此,只要程序调用这个函数,它就变成了一个守护进程,独立地运行,不受任何用户登录退出的影响。这个时候我们才可以说创建了一个真正的服务。

我们可以让一个网络服务的程序变成守护进程,一直运行在后台,不断处理用户发送的请求,这就是服务器正在干的事情。

4.常见指令

(1)netstat

-t代表TCP,-u代表UDP

netstat -t 或者 netstat -u

其他选项:

n表示数字显示,a表示所有匹配项,p显示进程,l表示只查看监听状态的TCP。

访问网站本质也是TCP(或UDP),我们可以在网站上用IP:Port访问TCP,获取提供服务的fd。

(2)telnet

telnet www.baidu.com 80(端口号)可以访问网站

这个可以配合HTTP使用。

(3)ulimit

fd要close,否则有fd(有限、有价值的资源)泄露问题。Linux支持对文件描述符个数进行扩展的,ulimit -a可看到open files个数


 

相关文章:

Linux网络相关概念和重要知识(4)(序列化和反序列化、TCP协议、会话和守护进程)

目录 1.序列化和反序列化 &#xff08;1&#xff09;为什么需要序列化 &#xff08;2&#xff09;序列化方案 ①json ②json序列化代码模板 ③json反序列化代码模板 ④将自定义方案和json结合 2.TCP协议&#xff08;传输控制协议&#xff09; &#xff08;1&#xff09…...

[MySQL初阶]MySQL数据库基础

MySQL数据库基础 1. 数据库基础1.1 什么是数据库1.2 主流数据库2. 数据库的基本使用2.1 连接服务器2.2 使用案例2.3 数据逻辑存储3. MySQL架构与分类3.1 MySQL架构3.2 SQL分类4. 存储引擎4.1 存储引擎基本概念4.2 存储引擎基本操作1. 数据库基础 1.1 什么是数据库 存储数据用…...

【mysql 的安装及使用】

MySQL 9.0 一、下载MySQL[MySQL 9.0 下载] [(https://dev.mysql.com/downloads/mysql/)选择自定义,选择合适安装路径二、检查安装情况配置环境变量打开命令行查看版本创建数据库在MySQL中,可以使用create database语句来创建数据库。以下是创建一个名为my_db的数据库的示例:…...

d202542

一、142.环形链表I 142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 用set统计一下 如果再次出现那么就环的第一个return返回就行 public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while(cur ! …...

vscode代码片段的设置与使用

在 Visual Studio Code (VS Code) 中&#xff0c;可以通过自定义**代码片段&#xff08;Snippets&#xff09;**快速插入常用代码模板。以下是详细设置步骤&#xff1a; 步骤 1&#xff1a;打开代码片段设置 按下快捷键 Ctrl Shift P&#xff08;Windows/Linux&#xff09;或…...

3D 地图渲染-区域纹理图添加

引入-初始化地图&#xff08;关键代码&#xff09; // 初始化页面引入高德 webapi -- index.html 文件 <script src https://webapi.amap.com/maps?v2.0&key您申请的key值></script>// 添加地图容器 <div idcontainer ></div>// 地图初始化应该…...

spring-security原理与应用系列:HttpSecurity.filters

目录 AnyRequestMatcher WebSecurityConfig HttpSecurity AbstractInterceptUrlConfigurer AbstractAuthenticationProcessingFilter 类图 在前面的文章《spring-security原理与应用系列&#xff1a;securityFilterChainBuilders》中&#xff0c;我们遗留了一个问题&…...

每日总结4.2

蓝桥杯刷题&#xff1a; 1. 方格分割&#xff08;dfs,选中心点&#xff0c;开始上下左右遍历&#xff0c;达到边界时数量加一&#xff09; #include <bits/stdc.h> using namespace std; bool vis[10][10]; int mp[10][10]; int ans0; int dx[4]{1,0,0,-1}; int dy[4]{…...

架构师面试(二十五):分布式存储 Leader 设计

问题 在非常多的分布式存储系统中&#xff0c;如&#xff1a;Zookeeper、Etcd、Kafka等&#xff0c;往往会存在一个 【Leader】 角色&#xff0c;并由该角色负责数据的写入&#xff0c;这样设计最主要的原因是什么呢&#xff1f; A. 唯一负责数据写入的 Leader 角色可以避免并…...

mycat --分片规则--

文章目录 MyCat分片规则详解1. rule1 (基于id的func1算法)2. sharding-by-date (按日期分片)3. rule2 (基于user_id的func1算法)4. sharding-by-intfile (基于枚举值分片)5. auto-sharding-long (长整型范围分片)6. mod-long (取模分片)7. sharding-by-murmur (MurmurHash分片)…...

系统分析师备考启动

以考促学&#xff1a;软件高级系统分析师。 一、考试目的&#xff1a; 1、练习三遍读书法、快速阅读、番茄工作法、第一性原理、思维导图等学习方法和学习工具的使用。 2、掌握知识、编织知识网、顺便拿证。 二、组织形式&#xff1a; 小组统一安排学习内容&#xff0c;每…...

轻量级搜索接口技术解析:快速实现关键词检索的Java/Python实践

Hi&#xff0c;你好&#xff01; 轻量级搜索接口技术解析&#xff1a;快速实现关键词检索的Java/Python实践 接口特性与适用场景 本接口适用于需要快速集成搜索能力的开发场景&#xff0c;支持通过关键词获取结构化搜索结果。典型应用场景包括&#xff1a; 垂直领域信息检索…...

防爆风扇选型指南:根据风量风压匹配应用场景​

在化工、石油、煤矿等存在易燃易爆气体或粉尘的危险环境中&#xff0c;通风设备的安全性能至关重要&#xff0c;防爆风扇成为保障生产环境安全与空气流通的关键装备。正确选型是确保其发挥最佳效能的前提&#xff0c;而根据风量风压匹配应用场景则是选型的核心要点。​ 风量&am…...

Laravel 中使用 JWT 作用户登录,身份认证

什么是JWT&#xff1a; JWT 全名 JSON Web Token&#xff0c;是一种开放标准 (RFC 7519)。 用于在网络应用环境间安全地传输信息作为 JSON 对象。 它是一种轻量级的认证和授权机制&#xff0c;特别适合分布式系统的身份验证。 核心特点 紧凑格式&#xff1a;体积小&#x…...

Git安装

1、 下载Git https://git-scm.com/ 2、 双击【Git-2.44.0-64-bit.exe】安装&#xff1a; 2-1、 选择自定义安装目录&#xff1a;F:\software\Git 2-2、 一直点击next&#xff0c;直到安装成功。 2-3、 在git项目文件夹&#xff0c;右键出现Git GUI Here和Git Bash Here就说明成…...

bit与byte的区别与联系?

李升伟 整理 byte 和 bit 是计算机中常用的数据单位&#xff0c;它们的主要区别和联系如下&#xff1a; 1. 定义 bit&#xff08;比特&#xff09;&#xff1a;计算机中最小的数据单位&#xff0c;表示一个二进制位&#xff0c;值为0或1。 byte&#xff08;字节&#xff09…...

程序化广告行业(51/89):Cookie映射与移动设备ID映射解析

程序化广告行业&#xff08;51/89&#xff09;&#xff1a;Cookie映射与移动设备ID映射解析 在当今数字化营销的浪潮中&#xff0c;程序化广告已经成为企业精准触达目标客户的重要手段。作为一名对程序化广告充满兴趣的学习者&#xff0c;我希望通过这篇博客和大家一起深入探索…...

从吉卜力漫画到艺术创造:GPT-4o多种风格绘图Prompt大全

在3月底&#xff0c;GPT-4o掀起了一阵吉卜力绘图浪潮&#xff0c;大家纷纷输入一张图片&#xff0c;让4o模型进行风格化迁移&#xff0c;其中吉卜力风格的漫画在社交媒体上最为火热。在大家争议4o的训练数据是否侵权和4o背后的技术原理的时候&#xff0c;我们先来玩一玩&#x…...

48. 旋转图像

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 先上下翻转再沿着对角线翻转 提示&#xff1a;小白个人理解&#xff0c;如有错误敬请谅解&#xff01; 二、外层配合操作 三、核心模式代码 代码如下&#xff1a; class S…...

【Linux篇】自主Shell命令行解释器

&#x1f4cc; 个人主页&#xff1a; 孙同学_ &#x1f527; 文章专栏&#xff1a;Liunx &#x1f4a1; 关注我&#xff0c;分享经验&#xff0c;助你少走弯路&#xff01; 文章目录 1. 获取用户名的接口2. 等待用户输入接口3. 将上述代码进行面向对象式的封装4. 命令行解析5.…...

leetcode 2873. 有序三元组中的最大值 I

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 文章目录 题目描述题目剖析&信息挖掘解题思路方法一 暴力枚举法思路注意复杂度代码实现 方法二 公式拆分动态规划思路注意复杂度代码实现 题目描述 [2873] 有序三元…...

深度学习 Deep Learning 第14章 自编码器

深度学习 Deep Learning 第14章 自编码器 内容概要 本章深入探讨了自编码器&#xff08;Autoencoders&#xff09;&#xff0c;这是一种用于特征学习和降维的神经网络架构。自编码器通过编码器和解码器两个部分&#xff0c;将输入数据映射到一个内部表示&#xff08;编码&…...

全国产传感器的可靠性、MTBF计算、极限测试与加速寿命测试

全国产传感器的可靠性是指传感器在规定条件下和规定时间内完成规定功能的能力。它是衡量传感器性能的重要指标之一&#xff0c;直接影响传感器的使用寿命和系统稳定性。武汉利又德的小编来和大家分享一下关于全国产传感器的可靠性以及MTBF计算、极限测试与加速寿命测试的小知识…...

【算法中的数学】裴蜀定理(Bézout’s Identity)总结

裴蜀定理&#xff08;Bzout’s Identity&#xff09;总结 裴蜀定理是数论中的一个重要定理&#xff0c;描述了整数线性组合与最大公约数&#xff08;GCD&#xff09;之间的关系。 1. 裴蜀定理的内容 对于任意两个整数 a a a 和 b b b&#xff0c;设它们的最大公约数为 d …...

unity点击button后不松开通过拖拽显示模型松开后模型实例化

using System.Collections; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;[RequireComponent(typeof(Button))] // 确保脚本挂在Button上 public class DragButtonSpawner : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandle…...

计算机网络复习 吉林大学

1、信息交换的三种方式&#xff1a;电路交换&#xff0c;分组交换&#xff0c;报文交换。 从通信资源的分配角度来看&#xff0c;交换就是按照某种方式动态地分配传输线路的资源。 电路交换&#xff1a;&#xff08;星形结构替代全连接&#xff09; 电话交换机接通电话的方式…...

超级好用的小软件,连接电脑和手机。

将手机变成电脑摄像头的高效工具Iriun Webcam是一款多平台软件&#xff0c;能够将手机摄像头变成电脑的摄像头&#xff0c;通过简单的设置即可实现视频会议、直播、录制等功能。它支持Windows、Mac和Linux系统&#xff0c;同时兼容iOS和Android手机&#xff0c;操作简单&#x…...

【JavaScript】十三、事件监听与事件类型

文章目录 1、事件监听1.1 案例&#xff1a;击关闭顶部广告1.2 案例&#xff1a;随机点名1.3 事件监听的版本 2、事件类型2.1 鼠标事件2.1.1 语法2.1.2 案例&#xff1a;轮播图主动切换 2.2 焦点事件2.2.1 语法2.2.2 案例&#xff1a;模拟小米搜索框 2.3 键盘事件2.3.1 语法2.3.…...

微服务架构技术栈选型避坑指南:10大核心要素深度拆解

微服务架构的技术栈选型直接影响系统的稳定性、扩展性和可维护性。以下从10大核心要素出发&#xff0c;结合主流技术方案对比、兼容性评估、失败案例及优化策略&#xff0c;提供系统性选型指南。 1. 服务框架与通信 关键考量点 扩展性&#xff1a;框架需支持定制化扩展&#x…...

虚拟试衣间微信小程序解决方案

目录 项目名称: 云尚衣橱 核心功能模块: 技术栈选型: 架构设计概览: 详细功能点实现思路: 数据库设计 (MongoDB 示例): 开发步骤建议: 关键注意事项和挑战: 项目名称: 云尚衣橱 核心功能模块: 用户系统 (User System) 我的衣柜 (My Wardrobe) 虚拟试衣间 (Vir…...

C++STL——容器-vector(含部分模拟实现,即地层实现原理)(含迭代器失效问题)

目录 容器——vector 1.构造 模拟实现 2.迭代器 模拟实现&#xff1a; ​编辑 3.容量 模拟实现&#xff1a; 4.元素的访问 模拟实现 5.元素的增删查改 迭代器失效问题&#xff1a; 思考问题 【注】&#xff1a;这里的模拟实现所写的参数以及返回值&#xff0c;都是…...

MoLe-VLA:通过混合层实现的动态跳层视觉-语言-动作模型实现高效机器人操作

25年3月来自南京大学、香港理工、北大和香港科技大学的论文“MoLe-VLA: Dynamic Layer-skipping Vision Language Action Model via Mixture-of-Layers for Efficient Robot Manipulation”。 多模态大语言模型 (MLLM) 在理解复杂语言和视觉数据方面表现出色&#xff0c;使通用…...

《数字图像处理》教材寻找合作者

Rafael Gonzalez和Richard Woods所著的《数字图像处理》关于滤波器的部分几乎全错&#xff0c;完全从零开始写&#xff0c;困难重重。关于他的问题已经描述在《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》。 现寻找能够共同讨论、切磋、…...

uni-app 框架 调用蓝牙,获取 iBeacon 定位信标的数据,实现室内定位场景

背景&#xff1a;最近需要对接了一个 叫 iBeacon 定位信标 硬件设备&#xff0c;这个设备主要的作用是&#xff0c;在信号不好的地方&#xff0c;或者室内实现定位&#xff0c;准确的找到某个东西。就比如 地下停车场&#xff0c;商城里&#xff0c;我们想知道这个停车场的某个…...

Java面试黄金宝典29

1. 什么是普通索引和唯一性索引 定义&#xff1a; 普通索引&#xff1a;是最基本的索引类型&#xff0c;它为数据表中的某一列或多列建立索引&#xff0c;以加快数据的查询速度。它不限制索引列的值重复&#xff0c;允许存在多个相同的值。唯一性索引&#xff1a;在普通索引的基…...

C语言常见3种排序

主要是三种排序方法&#xff1a;冒泡排序、选择排序、插入排序。 文章目录 一、冒泡排序 1.代码&#xff1a; 2.工作原理&#xff1a; 3.具体过程&#xff1a; 二、选择排序 1.代码 2. 工作原理 3.具体过程&#xff1a; 三、插入排序 1.代码 2.工作原理 3.具体过程 总结 一、…...

Nyquist插件基础:LISP语法-自定义函数

1 Nyquist插件基础&#xff1a;LISP语法-自定义函数 在 Nyquist 里&#xff0c;自定义函数能够让你把特定的操作封装起来&#xff0c;实现代码复用和逻辑模块化。下面详细介绍如何在 Nyquist 中定义和使用自定义函数。 1.1.1 1. 基本函数定义 在 Nyquist 中使用 defun 来定义…...

Visual-RFT:视觉强化微调

文章目录 速览摘要1. 引言2. 相关工作大型视觉语言模型&#xff08;LVLMs&#xff09;强化学习 3. 方法3.1. 初步带可验证奖励的强化学习DeepSeek R1-Zero和GRPO 3.2. Visual-RFT3.2.1. 视觉感知中的可验证奖励检测任务中的IoU奖励分类任务中的CLS奖励 3.2.2 数据准备 4. 实验4…...

快速入手-基于DRF的过滤、分页、查询配置(十五)

1、过滤需要安装插件 pip install django-filter 2、注册 INSTALLED_APPS [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages",…...

最新Spring Security实战教程(八)Remember-Me实现原理 - 持久化令牌与安全存储方案

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…...

gcc 链接顺序,静态库循环依赖问题

链接过程由链接器 ld 负责。通常 GCC 间接驱动之。 越底层的库&#xff0c;在链接命令行中的位置应越靠后。 文章目录 链接过程※ 但是对于静态库&#xff0c;链接器仅提取当前未解析符号所需的对象文件&#xff0c;未使用的对象文件会被丢弃。静态库&#xff08;.a&#xff09…...

linux内核漏洞检测利用exp提权

案例一dirtycow&#xff08;CVE-2016-5159&#xff09; 有个前置知识就是 获取liunx的内核 hostnamectl uname -a 然后这个内核漏洞进行提权的步骤也是和手工win进行提权差不多 也是需要使用辅助工具在本地进行辅助检测 然后去nomi-sec/PoC-in-GitHub&#xff1a; &#…...

【学Rust写CAD】21 2D 点(point.rs)

源码 //matrix/point.rs use std::ops::Mul; use super::algebraic_units::{Zero, One}; use super::generic::Matrix;/// 点坐标结构体 #[derive(Debug, Clone, Copy, PartialEq)] pub struct Point<X, Y>(Matrix<X, Y, One, Zero, Zero, One>);impl<X, Y>…...

Jmeter的压测使用

Jmeter基础功能回顾 一、创建Jmeter脚本 1、录制新建 &#xff08;1&#xff09;适用群体&#xff1a;初学者 2、手动创建 &#xff08;1&#xff09;需要了解Jmeter的常用组件 元件&#xff1a;多个类似功能组件的容器&#xff08;类似于类&#xff09; 各元件作用 组件…...

C语言--统计输入字符串中的单词个数

输入 输入&#xff1a;大小写字母以及空格&#xff0c;单词以空格分隔 输出&#xff1a;单词个数 代码 如果不是空格且inWord0说明是进入单词的第一个字母&#xff0c;则单词总数加一。 如果是空格&#xff0c;证明离开单词&#xff0c;inWord 0。 #include <stdio.h&g…...

《雷神之锤 III 竞技场》快速求平方根倒数的计算探究

1. 《雷神之锤 III 竞技场》快速求平方根导数源代码 此处先列出其源代码&#xff0c;这段代码的目标是计算一个浮点数平方根的导数&#xff0c;也就是如下形式&#xff1a; f ( x ) 1 x f(x) \frac{1}{\sqrt{x}} f(x)x ​1​这段代码可以说非常难以理解&#xff0c;尤其是 …...

深入解析 Java 8 Function 接口:函数式编程的核心工具

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Java 8 引入的 java.util.function.Function 接口是函数式编程范式的核心组件之一&#xff0c;本文将全面解析其使用方法&#xff0c;并通过丰富的代码示例演…...

软件重构与项目进度的矛盾如何解决

软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中&#xff0c;采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中&#xff0c;以小步骤持续进行重构&#xff0…...

redis的geo结构实现[附近商铺]功能

先上结论 geo地理位置算出来是不准的 实现思路 redis6.2支持了经纬度数据格式 支持经纬度检索 需要将redis升级 否则会报错不支持命令 pom文件如果spring-data-redis是2.7.9的boot版本则要改一下支持geo: <dependency><groupId>org.springframework.boot</g…...

W3C XML Schema 活动

W3C XML Schema 活动 概述 W3C XML Schema(XML Schema)是万维网联盟(W3C)定义的一种数据描述语言,用于定义XML文档的结构和约束。XML Schema为XML文档提供了一种结构化的方式,确保数据的一致性和有效性。本文将详细介绍W3C XML Schema的活动,包括其发展历程、主要特点…...