爬虫的精准识别:基于 User-Agent 的正则实现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea
------
爬虫的精准识别:基于 User-Agent 的正则实现
引言
在当今实时交互场景中,WebSocket 技术已成为在线客服、即时通讯、实时数据推送等服务的核心支柱。然而,一个看似简单的技术细节却可能让企业付出高昂的代价:当爬虫机器人伪装成“用户”接入 WebSocket 时,客服系统可能误将其识别为真实客户,导致客服资源被无意义消耗,甚至因“无响应对话”而影响用户体验。
场景痛点:当技术便利遭遇“无效流量”
想象一个典型的在线客服场景:用户访问网站后,通过 WebSocket
与客服实时沟通。然而,大量爬虫(如搜索引擎索引、SEO
工具、恶意扫描程序)的请求也会触发 WebSocket
连接。这些爬虫不会主动发送消息,却会长期占用连接资源。客服人员看到“在线用户”列表中的爬虫会话,尝试对话却得不到任何回应,最终导致:
- 资源浪费:服务器带宽、连接数被无效占用。
- 效率下降:客服需要手动排查“沉默用户”,增加工作负担。
- 数据污染:统计报表中的“用户活跃数”被虚假流量污染。
更糟糕的是,部分攻击者会利用 WebSocket
的长连接特性,发起高频请求或注入攻击,进一步威胁系统安全。
传统方案的局限性
许多开发者试图通过简单的 IP 封禁 或 请求频率限制 解决问题,但爬虫的 IP 池和访问策略日益动态化,传统方案往往力不从心。而直接依赖 User-Agent 字符串过滤 看似直接,却常因正则表达式设计不当(如漏判新爬虫、误伤正常用户)导致效果大打折扣。
本文目标
本文将聚焦 “如何在 WebSocket 握手阶段精准识别爬虫”,通过以下实践方案实现高效拦截:
- 多维度 User-Agent 检测:基于正则表达式覆盖 95% 的已知爬虫标识,确保关键词精准匹配。
- 轻量化浏览器端拦截:提供 JavaScript 正则方案,避免爬虫触发前端资源加载。
- 服务端兜底逻辑:结合 IP 黑名单与行为分析,应对伪造 User-Agent 的高级爬虫。
文章将深入解析正则表达式设计技巧、跨语言(Java/JavaScript)实现方案,并探讨如何在开源数据集(如 crawler-user-agents)基础上动态更新策略。无论您是构建客服系统的开发者,还是需优化实时服务性能的架构师,均可通过本文获得可直接复用的代码与实践经验。
以下是基于常见爬虫和机器人的 User-Agent
关键词整理的正则表达式实现方案:
1. 常见爬虫 User-Agent 关键词
以下关键词覆盖了主流搜索引擎、SEO 工具、社交媒体、监控服务等类型的爬虫机器人:
关键词(不区分大小写) | 示例爬虫名称 |
---|---|
bot | Googlebot, Bingbot |
spider | YandexSpider, Baiduspider |
crawler | AhrefsBot, SemrushBot |
slurp | Yahoo! Slurp |
facebookexternalhit | Facebook 链接预览机器人 |
duckduckbot | DuckDuckGo 爬虫 |
facebot | Facebook 爬虫 |
alexa | Amazon 的 Alexa 爬虫 |
applebot | Apple 的搜索引擎爬虫 |
pinterest | Pinterest 爬虫 |
twitterbot | Twitter 爬虫 |
linkedinbot | LinkedIn 爬虫 |
telegrambot | Telegram 爬虫 |
uptimerobot | UptimeRobot 监控服务 |
exabot | Exalead 搜索引擎 |
msnbot | MSN 搜索引擎爬虫 |
yahoo | Yahoo 爬虫 |
2. 正则表达式实现
以下正则表达式会匹配包含上述关键词的 User-Agent(不区分大小写):
String pattern = "(?i).*\\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\\b.*";
3. 正则关键表达式说明
3.1 (?i)
:忽略大小写的标记
- 作用:表示后续的正则匹配不区分大小写。
- 原理:
(?i)
是正则表达式的 模式修饰符(Pattern Modifier),它会从当前位置开始,对整个表达式生效。 - 示例:
(?i)bot → 可以匹配 "Bot", "BOT", "bOt" 等任意大小写组合
3.2 \\b
: 单词边界
- 作用:表示 单词边界(Word Boundary),确保匹配的是一个完整的单词(而不是单词的一部分)。
- 原理:
\\b
会匹配一个位置,该位置的一侧是单词字符(字母、数字、下划线),另一侧是非单词字符(如空格、标点或字符串边界)。 - 示例:
\\bbot\\b → 匹配 "bot" 但不会匹配 "robot" 或 "bots"
3.3 组合后的效果:(?i).*\\b(bot|spider)\\b.*
假设原始正则表达式为:
String pattern = "(?i).*\\b(bot|spider)\\b.*";
3.3.1 匹配逻辑
(?i)
→ 忽略大小写。.*
→ 允许目标关键词出现在 任意位置(如开头、中间、结尾)。\\b
→ 确保关键词是完整单词(避免部分匹配,如robot
中的bot
)。(bot|spider)
→ 匹配 “bot” 或 “spider”。- 最后的
.*
→ 允许关键词后有其他字符。
3.3.2 示例匹配的 User-Agent
"Googlebot/2.1"
→ 匹配bot
"YandexSpider"
→ 匹配spider
"BingPreviewBot"
→ 匹配bot
3.3.3 不匹配的 User-Agent
"Robot/1.0"
→\\bbot\\b
不会匹配 “Robot” 中的 “bot”"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
→ 不含关键词
4. Java 代码实现
import java.util.regex.Pattern;public class CrawlerDetector {private static final String BOT_PATTERN = "(?i).*\\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\\b.*";private static final Pattern pattern = Pattern.compile(BOT_PATTERN);public static boolean isCrawler(String userAgent) {if (userAgent == null || userAgent.trim().isEmpty()) {return false;}return pattern.matcher(userAgent).matches();}
}
4.1 java 使用示例
public static void main(String[] args) {String userAgent1 = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";String userAgent2 = "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1";System.out.println("Is crawler 1? " + CrawlerDetector.isCrawler(userAgent1)); // trueSystem.out.println("Is crawler 2? " + CrawlerDetector.isCrawler(userAgent2)); // false
}
5. JS 代码实现
以下是 JavaScript 版本的正则表达式实现(适配浏览器环境):
5.1 JavaScript 正则表达式
const crawlerRegex = /\b(bot|spider|crawler|slurp|facebookexternalhit|duckduckbot|facebot|alexa|applebot|pinterest|twitterbot|linkedinbot|telegrambot|uptimerobot|exabot|msnbot|yahoo|googlebot|bingbot|yandexbot|baiduspider|ahrefsbot|semrushbot)\b/i;
5.2 实现解析
5.2.1 正则结构
\b
:匹配单词边界(确保关键词是完整单词,避免误匹配类似robot
中的bot
)。(bot|spider|...)
:匹配列表中的任意关键词。i
标志:忽略大小写(替代 Java 的(?i)
)。
5.2.2 浏览器端使用示例
// 检测当前浏览器 User-Agent 是否是爬虫
function isCrawler() {const userAgent = navigator.userAgent;return crawlerRegex.test(userAgent);
}// 调用示例
if (isCrawler()) {console.log("检测到爬虫,阻止 WebSocket 连接");
} else {console.log("允许连接 WebSocket");
}
5.3注意事项
-
关键词动态更新
可以将正则关键词提取到配置中,便于动态扩展:const botKeywords = ["bot", "spider", "crawler", "slurp", "facebookexternalhit", "duckduckbot", "facebot",// ...其他关键词 ]; const crawlerRegex = new RegExp(`\\b(${botKeywords.join("|")})\\b`, "i");
-
浏览器兼容性
- 所有现代浏览器(Chrome/Firefox/Safari/Edge)均支持
RegExp
和i
标志。 - 兼容到 IE9+。
- 所有现代浏览器(Chrome/Firefox/Safari/Edge)均支持
5.4 完整代码
<script>
// 定义正则表达式
const botKeywords = ["bot", "spider", "crawler", "slurp", "facebookexternalhit","duckduckbot", "facebot", "alexa", "applebot", "pinterest","twitterbot", "linkedinbot", "telegrambot", "uptimerobot","exabot", "msnbot", "yahoo", "googlebot", "bingbot","yandexbot", "baiduspider", "ahrefsbot", "semrushbot"
];
const crawlerRegex = new RegExp(`\\b(${botKeywords.join("|")})\\b`, "i");// 检测逻辑
function isCrawler() {return crawlerRegex.test(navigator.userAgent);
}// 根据检测结果控制 WebSocket 连接
if (!isCrawler()) {const ws = new WebSocket("wss://your-websocket-endpoint");ws.onopen = () => console.log("WebSocket 已连接");
} else {console.log("爬虫客户端,禁止连接 WebSocket");
}
</script>
注意事项
- 误判风险:极少数正常浏览器可能包含关键词(如
Bot
),但概率极低。 - 动态更新:定期更新正则中的关键词列表以覆盖新出现的爬虫。
- 性能:正则表达式复杂度较低,适合高频调用。
如果需要更全面的关键词列表,可以参考 user-agents 等公开数据集。
相关文章:
爬虫的精准识别:基于 User-Agent 的正则实现
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
Scala的初步使用
目录 1. Scala简介2. Scala编写的Hello World2.1 pom.xml中依赖和插件的配置2.2 安装Scala2.12.172.3 安装code-server插件2.4 helloworld.scala2.5 helloworld2.scala2.6 java调用scala object 3. Scala调用Java3.1 例子13.2 例子2 参考 1. Scala简介 Scala是一门多范式的编程…...
【Json RPC框架】框架介绍与环境搭建(Ubuntu 22.04)
🎁个人主页:我们的五年 🔍系列专栏:Json RPC框架 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 JSon RPC框架系列文章Json RPC框架_我们的五年的博…...
python读取word文档 | AI应用开发
python读取word文档 | AI应用开发 RAG中python读取word文档 RAG系统中构建知识库流程中重要的一个步骤是读取外挂的知识文档,为word是其中比较常见的文件。 另一个值得注意的是,RAG在读取文档后需要对文档进行分割,而良好的分割需要有一定结…...
20、组件懒加载
组件懒加载,也被称为异步组件加载,是一种在 Vue 项目中提升性能的重要技术手段。下面从概念、实现原理、使用场景、实现方式几个方面详细介绍: 概念 在传统的 Vue 项目里,当应用启动时,所有的组件代码都会被一次性加…...
打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)
文章目录 前言一、准备工作(一)钉钉机器人(二)智谱 GLM-4-Flash(三)内网穿透工具 cpolar(四)需要准备的工具和环境 二、钉钉机器人的创建与配置步骤1:创建钉钉机器人步骤…...
【故障处理系列--docker卷的挂载】
一位伙伴需求是把容器的目录映射到宿主机且容器目录的内容不被宿主机的空白目录覆盖。我的第一反应是-v 卷的映射,参数是对的,但是用法是错的 1、容器卷的挂载方式 容器把目录映射到宿主机创建volume卷,然后把容器的目录和volume卷绑定 区别…...
兴达易控modbusTCP转profinet接防撞雷达测试
modbusTCP转profinet接防撞雷达测试 随着工业自动化程度的不断提高,现场设备之间的通信需求日益增长。ModbusTCP作为一种广泛应用的工业通信协议,因其简单、可靠的特点,被广泛应用于各种自动化设备中。而Profinet作为工业以太网的一种&#…...
Acknowledgment.nack方法重试消费kafka消息异常
文章目录 问题示例异常 原因nack方法Acknowledgment接口实现类:ConsumerAcknowledgment实现类:ConsumerBatchAcknowledgment 解决方案1 批量消费指定index示例 2 单条消费示例 问题 使用BatchAcknowledgingMessageListener 批量消费Kafka消息࿰…...
通过动态获取后端数据判断输入的值打小
eval() 函数在 JavaScript 中是一个非常强大的函数 【1】计算简单公式 很多时候如果需要动态的提供计算的公式,需要写一大段的公式计算逻辑去兼容,可能耗费大量的开发成本。为了快速了解 eval 的用法,直接 ① 打开浏览器;② F1…...
乐维网管平台核心功能解析(一)——告警关联知识
在数字化转型浪潮中,企业IT系统规模呈指数级增长,传统的"人工经验"运维模式已难以应对海量告警处理需求。某银行数据中心曾统计,其日均告警量突破10万条,关键故障的平均定位时间长达3.5小时,直接导致年损失超…...
数据结构_单链表
今天我们要开启链表的学习 🖋️🖋️🖋️ 学了顺序表我们可以知道: 🎈链表其实就是争对顺序表的缺点来设计的,补足的就是顺序表的缺点 🎈链表在物理上是上一个节点存放的下一个节点的地址 链表 …...
b站视频下载工具软件怎么下载
自行配置FFMPEG环境 请优先选择批量下载,会自处理视频和音频文件。 如果要下载更高质量请登陆。 没有配置FFMPEG下载后会有报错提示,视频音频文件无法合并生成mp4文件 更新批量下载标题,只取视频原标题,B站反爬机制登陆后下载多了…...
如何实现pinia的持久化存储
在 Vue 3 项目中使用 Pinia 进行状态管理时,若要实现持久化存储,可借助 pinia-plugin-persistedstate 插件,该插件能让 Pinia 存储的状态在页面刷新或关闭后依然保留。下面为你详细介绍实现步骤: 1. 安装插件 首先,在…...
webpack介绍
entry与output 入口是 Webpack 开始构建依赖图的起点,Webpack 会从入口文件开始,递归地分析项目的依赖图。输出指定 Webpack 打包后的文件存放位置和文件名。 const path require("path");module.exports {entry: "./src/index.js&qu…...
使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图
以下是使用Mermaid语法绘制的C语言程序从Linux移植到Windows的流程图: graph TDA[开始移植] --> B[代码兼容性检查]B --> C[检查系统调用差异\nfork/exec -> CreateProcess]B --> D[检查文件路径格式\n/ vs \\]B --> E[检查依赖库兼容性\nPOSIX vs …...
蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
文章目录 1.题目解析1.1 分而治之,藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 ADC模块1.3.3 IIC模块1.3.4 UART模块1.3.5 LCD模块1.3.6 LED模块1.3.7 TIM模块 2.源码3.第七届题目 前言:STM32G431RBT6实现嵌入式组第七届题目解析源码&…...
【spring bean的生命周期】
以下是使用 Mermaid 绘制的 Spring Bean 生命周期流程图: 流程说明 实例化:Spring 容器创建 Bean 的实例。属性赋值:Spring 为 Bean 的属性注入值(依赖注入)。BeanPostProcessor.postProcessBeforeInitialization&…...
数据类设计_图片类设计之3_半规则图类设计(前端架构基础)
前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇讨论半规则图类型的设计 半规则图的定义 什么是半规则图?笔者看见了一些似乎规则又不是太规则的图形,例如带圆角的矩阵,在页面上找一个圆角框 为了…...
【leetcode hot 100 138】随机链表的复制
解决一:回溯 哈希表 本题要求我们对一个特殊的链表进行深拷贝。如果是普通链表,我们可以直接按照遍历的顺序创建链表节点。而本题中因为随机指针的存在,当我们拷贝节点时,「当前节点的随机指针指向的节点」可能还没创建…...
如何安全处置旧设备?
每年,数百万台旧设备因老化、故障或被新产品取代而被丢弃,这些设备上存储的数据可能带来安全风险。 如果设备没有被正确删除数据,这些数据往往仍可被恢复。因此,安全处置旧设备至关重要。 旧设备可能包含的敏感数据 旧设备中可能…...
Windows 万兴恢复专家 Wondershare Recoverit-v13.5.7.9-[电脑数据恢复工具]
Windows 万兴恢复专家Wondershare_Recoverit 链接:https://pan.xunlei.com/s/VOL3z608vzAj_IYTvH-F1q7kA1?pwdiu89# 1. 打开Setup.exe进行安装,安装完不要打开软件,记住安装目录 2. 将"Crack"文件夹内的所有文件复制到安装目录 …...
eLection: 1靶场渗透测试
eLection: 1 来自 <eLection: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.196 3,对靶机进行端口服…...
类与对象(下)
1 . 再谈构造函数 1.1构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。 class B { public:B(int a0){_a a;} private:int _a; };虽然上述构造函数调用之后,对象中已经有了一个初始值…...
数字人源头技术搭建模型--v10追踪推理逻辑
数字人源头技术搭建模型--v10追踪推理逻辑 #数字人# #数字人技术源头saas开发# 数字人源头技术搭建模型V10的追踪推理逻辑通常涉及以下几个关键方面: 数据收集与预处理 - 多模态数据采集:收集图像、音频等多模态数据。例如通过摄像头采集人物的面部…...
基于Asp.net的高校迎新管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
商业智能BI的未来,如何看待AI+BI这种模式?
昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...
C++ 编程指南27 - 始终将 mutex 与它所保护的数据一起定义,并尽可能使用 synchronized_value<T>
一:概述 在多线程编程中,互斥锁(std::mutex)的作用是保护共享数据的访问。但如果 mutex 和它保护的数据分开定义,可能会导致以下问题: 锁的使用不明显:程序员可能会忘记获取 mutex 就访问数据&…...
选择 DotNetBrowser 还是 EO.WebBrowser
您是否正在为 .NET 应用寻找 Web 视图控件?如果是的话,那您真是太幸运了!.NET 生态系统提供了丰富的选择。既有开源和专有的免费 Web 视图控件,也有许多企业广泛选择的商业 Web 视图控件。 在这篇博客文章中,我们将对…...
ngin配置内网服务-具体案例【天地图】
ngin配置内网服务-具体案例【天地图】 描述需求整体网络架构1. 政务内网服务器(10.10.10.70)2. 网闸(10.10.10.240:8088)3. 跳板机(10.10.20.70:9109)4. 天地图服务 具体步骤第一步:配置跳板机&…...
【网络】poll 与epoll(原理、工作模式LT、ET)
文章目录 1. poll2. epoll3. epoll原理4. epoll工作模式4.1 水平模式LT4.2 边缘模式ET 在前面用的select中,它的使用方式非常麻烦,而且能支持的文件描诉符太少了。 下面来介绍一下更加方便、高效的方式: 1. poll poll函数接口: include <…...
DeepIn Wps 字体缺失问题
系统缺失字体 Symbol 、Wingdings 、Wingdings2、Wingdings3、MT—extra 字体问题 问了下DeepSeek 在应用商店安装或者在windows 里面找 装了一个GB-18030 还是不行 在windows里面复制了缺失的字体 将字体复制到DeepIn 的字体目录(Ubuntu 应该也是这个目录&am…...
Spring有哪些缺点?
大家好,我是锋哥。今天分享关于【Spring有哪些缺点?】面试题。希望对大家有帮助; Spring有哪些缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring是一个非常流行的Java框架,提供了丰富的功能和灵活的配置选项…...
使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile
比起容器、镜像来说,Dockerfile 非常普通,它就是一个纯文本,里面记录了一系列的构建指令,比如选择基础镜像、拷贝文件、运行脚本等等,每个指令都会生成一个 Layer,而 Docker 顺序执行这个文件里的所有步骤&…...
蓝桥杯刷题周计划(第二周)
目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题解分…...
03 | fastgo 项目规范及目录结构介绍
提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入我的训练营:云原生AI实战营,一个助力 Go 开发者在 AI 时代建立技术竞争力的实战营。 为了让你更好的学习本课程。本节课,我来简单介绍下 fastgo…...
K8S学习之基础二十三:k8s的持久化存储之nfs
K8S持久化存储之nfs 在 Kubernetes (k8s) 中使用 NFS(Network File System)作为存储解决方案是一种常见的方式,特别是在需要共享存储的场景中。以下是关于如何在 Kubernetes 中使用 NFS 存储的详细说明: 1. 准备 NFS 服务器 …...
CTF代码学习日记 Python
os模块 在Python中,os是一个内置的标准模块,主要用于与操作系统进行交互,提供了许多操作文件、目录、进程等的功能。 例如: os.mkdir()用于创建新目录os.rmdir()用于删除空目录os.listdir()可以列出指定目录下的所有文件和目录…...
存储优化(protobuf与mmkv)
存储优化(protobuf与mmkv) 在Android应用开发中,数据存储是一个基础且关键的环节。随着应用功能的日益复杂,数据量的增加,传统的存储方式如SharedPreferences、SQLite等在性能上的局限性逐渐显现。本文将深入探讨两种…...
MTK Android12 添加GMS后,报“设备未经过play保护认证“问题
文章目录 问题解决 问题 在MTK平台的Android12机柜上面,客户要求安装GMS。安装后,打开发现报"设备未经过play保护认证"问题,无法使用。解决 路径:/build/make/tools/buildinfo.sh diff --git a/build/make/tools/bui…...
自定义Linux网络协议的开发与测试
在当今快速发展的技术领域中,定制化网络协议可以为特定的应用场景提供灵活而强大的解决方案。本文将详细介绍如何在Linux系统上开发一个自定义网络协议,并编写相应的用户空间程序进行测试。所有步骤基于2025年3月11日的时间点完成。 开发自定义协议内核模块 定义协议和实现…...
Ubuntu 24.04 安装与配置 JetBrains Toolbox 指南
📌 1. JetBrains Toolbox 介绍 JetBrains Toolbox 是 JetBrains 开发的工具管理器,可用于安装、更新和管理 IntelliJ IDEA、PyCharm、WebStorm、CLion 等。本指南记录了 JetBrains Toolbox 在 Ubuntu 24.04 上的 安装、路径调整、权限管理 及 遇到的问题…...
说一下spring的事务隔离级别?
大家好,我是锋哥。今天分享关于【说一下spring的事务隔离级别?】面试题。希望对大家有帮助; 说一下spring的事务隔离级别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring的事务隔离级别是指在数据库事务管理中…...
【社区投稿】深入再谈智能指针、AsRef引用与Borrow借用
深入再谈智能指针、AsRef引用与Borrow借用 这是一个具有深度的技术主题。每次重温其理论知识,都会有新的领悟。大约 2 年前,我曾就这一技术方向撰写过另一篇短文《从类型转换视角,浅谈Deref<Target T>, AsRef<T>, Borrow<T&g…...
C++ Primer Plus第十二章课后习题总结
1. 对于下面的类声明: class Cow {char name[20];char * hobby;double weight;public:Cow();Cow(const char * nm, const char * ho, double wt);Cow(const Cow c&);~Cow();Cow & operator(const Cow & c);void ShowCow() const; // display all cow d…...
Xavier 初始化:深度网络权重初始化的经典之作
Xavier 初始化:深度网络权重初始化的经典之作 发音:美 [zeɪvjər] n.泽维尔(男子名) 在深度学习的发展历程中,权重初始化对神经网络训练的成功至关重要。随机初始化的简单方法在浅层网络中尚可,但在深层…...
【量化策略】动量反转策略
【量化策略】动量反转策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 动量反转策略是一种基于市场行为分析的量化交易策略,它假设股票价格在经历一段时间的持续上涨或下跌后,会出现反转。这种策略适用于那些希望通过…...
菜鸟之路Day23一一JavaScript 入门
菜鸟之路Day23一一JavaScript 入门 作者:blue 时间:2025.3.10 文章目录 菜鸟之路Day23一一JavaScript 入门0.概述1.JS的引入方式2.JS的基础语法2.1输出语句2.2变量2.3数据类型2.4运算符2.5类型转换 3.函数4.JS对象4.1Array对象4.2String对象4.3Js自定义…...
FreeSWITCH 简单图形化界面40 - 使用mod_curl模块进行http请求
FreeSWITCH 简单图形化界面40 - 使用mod_curl模块进行http请求 0、界面预览00、简介1、编译安装1.1 编辑模块配置文件 2、使用2.1 拨号规则GET 请求POST 请求JSON 数据 2.2 Lua 脚本GET 请求POST 请求JSON 数据 3 、示例3.1 示例 1:提交 CDR 到第三方接口3.2 示例 2…...
TCP/IP原理详细解析
前言 TCP/IP是一种面向连接,可靠的传输,传输数据大小无限制的。通常情况下,系统与系统之间的http连接需要三次握手和四次挥手,这个执行过程会产生等待时间。这方面在日常开发时需要注意一下。 TCP/IP 是互联网的核心协议族&…...