Rotor实现中用到的Macro(摘自Shared Source CLI Essentials)

【机械视觉】Halcon—【二、Halcon算子全面介绍(超详细版)】 Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。 本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。 注意: ​​​​​​​跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。 阅读详情

General Macros

_ASSERTE

Defined in clr/src/inc/debugmacros.h, this is used to verify that an invariant holds true at runtime in debug-enabled builds.

C_ASSERT

CPP_ASSERT

These macros are used for language-specific compile-time assertions.

DEFINE_LOG_FACILITY

Defined in clr/src/inc/loglf.h to produce the list found in clr/src/inc/loglf.h, this is used to define facilities called out for individual configurability when tracing.

GET_UNALIGNED_16

GET_UNALIGNED_32

GET_UNALIGNED_64

Defined in clr/src/inc/palclr.h, these macros dereference a pointer and fetch a value, even if the pointer is not a naturally-aligned pointer. Natural alignment is defined as ((UINT_PTR)p & (sizeof(p)-1)) == 0.

For platforms that automatically handle misaligned memory references, these macros expand to a simple dereference. See also SET_UNALIGNED.

IfFailGoto

IfFailGo

IfFailRet

Also defined in clr/src/inc/debugmacros.h, these are used to branch conditionally on HRESULT values.

LOG

Defined in clr/src/inc/log.h, this is used in debug-enabled builds to issue a logging message. See also DEFINE_LOG_FACILITY.

MAKEDLLNAME_A

MAKEDLLNAME_W

These macros are used to convert a platform-independent basename into a platform-specific loadable library name. They append the operating system-specific prefix and suffix to the generic name. For example, MAKEDLLNAME_A("foo") will create libfoo.dylib on Mac OS X, libfoo.so on FreeBSD, and foo.dll on Windows. These macros are defined in clr/src/inc/palclr.h.

OPDEF

Use this macro, found in clr/src/inc/openum.h, to define CLI opcodes. The file clr/src/inc/opcode.def contains all opcode definitions for Rotor, and is shared by the C# compiler, the assembler and disassembler, and the execution engine.

PORTABILITY_ASSERT

PORTABILITY_WARNING

These are used within regions of code that differ from platform to platform. They are no-ops while working on a port, and once you've finished porting a platform-specific region, its WARNING should be changed to a matching ASSERT. To find regions of code that are platform-specific, use your favorite search or indexing utility to find these macros .

SET_UNALIGNED_16

SET_UNALIGNED_32

SET_UNALIGNED_64

Defined in clr/src/inc/palclr.h, these store a value into a pointer, even if the pointer is not naturally aligned. For platforms that automatically handle mis-aligned memory references, these macros expand to a simple dereferenced assignment. See also GET_UNALIGNED.

SwapString

SwapStringLength

SwapGuid

Defined in clr/src/inc/palclr.h, these perform an in-place byte swap of a string, counted string, or GUID structure.

VAL16

VAL32

VAL64

Defined in clr/src/inc/palclr.h, these are used to simplify writing code to run on both big-endian and little-endian processors. They are no-ops on little-endian platforms, but byte-swapped on big-endian platforms. Given a value composed of 16, 32, or 64 bits in little-endian format, they return the value in the native format.

 

Execution Engine Macros

BEGIN_FORBID

ENDFORBID

Defined in clr/src/vm/threads.h, these macros bracket code in which garbage collection is forbidden. They are activated in debug-enabled builds only.

COMPlusThrow

This macro, defined in clr/src/vm/exceptmacros.h, is used to throw exceptions from within execution engine code.

COMPLUS_TRY

COMPLUS_CATCH

COMPLUS_END_CATCH

COMPLUS_FINALLY

COMPLUS_END_FINALLY

These macros wrap the PAL_TRY family of macros with additional code that maintains internal execution engine data structures. In particular, these protect the integrity of the frame chain. They are defined in clr/src/vm/exceptmacros.h.

EE_TRY_FOR_FINALLY

EE_ FINALLY

EE_END_FINALLY

This is a simplified version of the COMPLUS_TRY macro that supports only finally clauses. (COMPLUS_TRY supports both catch and finally clauses.) It is defined in clr/src/vm/exceptmacros.h.

FCDECL*

FCIMPL*

The macros from this large series, defined and documented in clr/src/vm/fcall.h, are used to declare and implement FCalls. Platform-to-platform differences in FCall calling conventions are encapsulated inside these macros.

FCThrow

This macro is used to throw exceptions from within FCall implementations when a helper frame is not erected for the FCall. (COMPlusThrow would be used to throw exceptions if a helper frame were erected.) It is defined in clr/src/vm/frames.h.

GCPROTECT_BEGIN

GCPROTECT_ARRAY_BEGIN

GCPROTECT_BEGININTERIOR

GCPROTECT_END

This series of macros is used to mark memory locations (usually local variables) that contain object references. Locations that are protected using GC_PROTECT are visible to the garbage collector, and the objects that they reference can be promoted safely. These macros are defined in clr/src/vm/frames.h.

GETTHROWABLE

SETTHROWABLE

Defined in clr/src/vm/exceptmacros.h, these macros are used to get or set the thrown exception. GETTHROWABLE is usually used inside a COMPLUS_CATCH clause.

HELPER_METHOD_FRAME_*

Defined in clr/src/vm/fcall.h, these macros are used to erect a helper frame within an FCall implementation. These helper frames must exist when an FCall wishes to call other parts of the execution engine that might trigger garbage collection or cause nonlocal changes. Simple FCalls do not need helper frames. Some flavors of HELPER_METHOD_FRAME expose a simplified version of GC_PROTECT, to reduce the number of frames pushed in the FCall.

THROWSCOMPLUSEXCEPTION

This macro, defined in clr/src/vm/exceptmacros.h, is used to mark code blocks that can throw exceptions. This is used only in debug-enabled builds.

TRIGGERSGC

This macro is used in debug-enabled builds to mark code blocks that can trigger garbage collection. It is defined in clr/src/vm/threads.h.

 

JIT Compiler Macros

CHECK_STACK

CHECK_STACK_SIZE

When verification is turned on, these macros will verify that the evaluation stack is deep enough to be valid or that it matches an exact depth.

FJIT_FAIL

This macro will cause the current JIT compilation to fail and return an error code.

VALIDITY_CHECK

If verification is turned on, this macro will conditionally terminate a JIT compilation and return an error code that indicates that invalid code was provided.

VERIFICATION_CHECK

If verification is turned on, this macro will conditionally emit code to throw a verification exception. It is used within the JIT compiler.

There is a large series of macros used to emit code, which is contained in clr/src/fjit/fjitdef.h and is augmented by platform-specific redefinition files that can be found in subdirectories named after their processor targets:

 

x86_*

These are low-level, x86-specific macros used by fjitdef.h.

ppc_*

These are low-level, PowerPC-specific macros used by fjitdef.h.

emit_*

These are high-level, macros defined in fjitdef.h that can be redefined by platform-specific low-level macros.

emit_<IL OPCODE NAME>_*

These are portable macros that implement opcodes, and are frequently separated by the size of the stack and frame registers.

ARG_*

These definitions represent argument registers.

RETURN_*

These definitions represent return value registers.

The file clr/src/fjit/fjitdef.h also contains macros used to emit code for manipulating the stack and calling helper functions:

deregisterTOS

enregisterTOS

These macros are used by the JIT compiler to manage the top of the stack.

emit_arg

emit_reg_arg

emit_tos_arg

emit_tos_fixedsize_arg

emit_tos_indirect_to_arg

emit_reg_to_arg

These simple portable calling convention macros are used by the JIT compiler to set up arguments being passed on the stack.

emit_callhelper_*

These macros represent a portable way to make a call to a helper function.

emit_loadresult_*

emit_pushresult_*

These macros manage return value placement. (The mechanism used to return values is platform-specific.)

Finally, there are a few JIT macros that affect the runtime execution of code:

LABELSTACK

This macro, defined in clr/src/fjit/fjit.cpp, saves the a map of the evaluation stack and associates it with the current IL offset so that the garbage collector will be able to find roots on the stack. This macro is used before calls to JIT helper functions that may trigger garbage collection.

THROW_FROM_HELPER

THROW_FROM_HELPER_RET

These macros define a mechanism by which JIT helper functions can construct an exception context as though the exception occurred within the code of the JIT-compiled function that called them rather than in their own code. They are defined in clr/src/fjit/fjit.h.

 

PAL & Platform Macros

_PPC_

This is defined when compiling for Motorola PowerPC.

_X86_

This is defined when compiling for Intel x86.

BIGENDIAN

This is defined on big-endian platforms, and undefined on little-endian platforms.

HAVE_CASE_SENSITIVE_FILESYSTEM

This macro is defined to differentiate filesystems that are case-sensitive, such as FreeBSD, from filesystems that are case-insensitive, such as Windows or HFS+, the default and most frequently used Mac OS X filesystem.

HAVE_CFSTRING

This is defined if Mac OS X CoreFoundation CFString is present.

HAVE_COMPATIBLE_ASIN

HAVE_COMPATIBLE_ACOS

HAVE_COMPATIBLE_*

This is defined when C runtime math functions produce Windows-compatible results for edge-case values.

HAVE_POLL

This is defined if the poll( ) system call is implemented.

HAVE_STRTOK_R

This is defined if the strok_r( ) API is implemented.

MMAP_IGNORES_HINT

This is set when the mmap( ) system call ignores its hint argument.

PAL_TRY

PAL_EXCEPT

PAL_EXCEPT_EX

PAL_EXCEPT_FILTER

PAL_EXCEPT_FILTER_EX

PAL_FINALLY

PAL_FINALLY_EX

PAL_ENDTRY

The file pal/rotor_pal.h contains the API definitions for the PAL, as well as these macros, which result in calls against the PAL's exception-handling mechanism.

PLATFORM_UNIX

This is defined when building for Unix systems, and is used to control the formatting of things dictated by convention, such as line breaks, path and environment separator characters, and the like.

There are a number of macros used within the Unix PAL implementation:

ASSERT

This macro is different from the Win32 PAL and execution engine ASSERT macros in that it doesn't take an expression as an argument. It is a printf-style logger plus an optional debug breakpoint. This is a no-op in the "free" build.

LOGAPI

This is a printf-style logging call for the PAL. It is a no-ops in the "free" build.

PALASSERT

This macro asserts if its argument is false and is a no-op in the "free" build.

TRACE

WARN

ERROR

These printf-style logging calls are defined in pal/unix/include/dbgmsg.h and are no-ops in the "free" build.

水文仿真软件:SWMM (Storm Water Management Model)_(6).地理信息系统(GIS)与SWMM数据交换 地理信息系统(GIS)与SWMM数据交换是水文仿真中的一个重要环节。通过合理的数据准备、导入、导出和校验,可以确保模型的准确性和实用性。本文介绍了使用SWMM GIS Add-on和Python脚本进行数据交换的方法,并提供了一些优化建议和常见问题的解决方案。希望这些内容能帮助读者更好地进行GIS与SWMM的数据交换,提高水文仿真的效率和质量。 阅读详情

相关推荐

千兆以太网PHY设计:PCB原理图完整示例

深入解析千兆以太网PHY电路设计要点,提供完整的PCB原理图设计实例,帮助工程师掌握高速信号布局与电源去耦等关键技术,提升设计稳定性与信号完整性。

weixin_30633869的博客 628

数据库、SQL 与 DB AI

模型可使用目录发现、表描述、DDL、有限样本、计数、索引检查和 explain 工具,但不能通过工具切换连接,也不能执行任意 SQL 或写操作。## 场景五:恢复 DB AI 产品会话数据库上下文变化后,aiopsterm 会轮换到新的 DB AI 会话,避免旧对话在另一个数据库上继续执行。生成 SQL 的 Run 动作仅接受只读语句,并要求当前 SQL 页签仍然匹配生成时的连接、database 和 schema。- 不返回保存的连接 ID、地址、用户名、URL、文件路径、代理或密码。

woai110120130的专栏 200

手把手教你用STM32硬件SPI驱动BMI088陀螺仪(附完整代码)

本文提供了一份详尽的STM32硬件SPI驱动BMI088陀螺仪的实战指南。内容涵盖从硬件连接、SPI底层配置、驱动层封装到设备初始化、数据读取与同步策略,并深入探讨了数据处理、滤波融合及温度补偿等核心技巧,旨在帮助开发者构建稳定高效的IMU驱动框架,解决BMI088应用中常见的挑战。

quiet的专栏 528

在Codex 让AI模型 拥有长期智能记忆

本文介绍Claude-Mem V15新功能——智能记忆召回,解决AI遗忘、重复提示、执行不一致等问题。通过本地部署claude-mem,实现自动记录决策(如数据库选型)、跨会话智能召回,支持记忆写入、检索、遗忘全流程闭环。相比传统记忆方案,其基于Hooks自动捕获工具调用,结构化存储,可追溯、可共享、可清理,显著提升工程效率与协作一致性,是长期项目中理想的“工作黑匣子”与“工程脑”。

米莱虾 253

Infineon MOSFET开关损耗计算实战指南

本文是英飞凌MOSFET开关损耗计算的实战指南。针对MOSFET发热问题,文章深入剖析了开关损耗的产生机理,并基于Infineon数据手册的关键参数,手把手推导了开通与关断损耗的工程计算公式。同时,指南强调了栅极电阻、寄生参数等实际因素对损耗的影响,并提供了从理论计算到实测优化的完整路径,帮助工程师精准评估与优化电源设计。

weixin_29212867的博客 440

华为OD机试 - 机器人活动区域(Python/JS/C/C++ 双机位C卷 200分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。现有一个机器人,可放置于 M × N的网格中任意位置,每个网格包含一个非负整数编号。当相邻网格的数字编号差值的绝对值小于等于 1 时,机器人可在网格间移动问题:求机器人可活动的最大范围对应的网格点数目。说明:1)网格左上角坐标为 (0, 0),右

学Java,找哪吒 1431

45-存储过程与函数

匿名块跑完就没了,想下次再用只能复制粘贴。给块起个名字存进数据库,就成了存储过程与函数:一次编译、处处调用、权限收口,还能让 Java 侧少拼 SQL。这篇讲封装、调用、限制与排错的完整套路。CREATE OR REPLACE 覆盖式创建,事务由调用方控制;参数三模式 IN 只进、OUT 只出、IN OUT 双向,OUT 参数调用时要备好变量接;调用三姿势 EXEC、CALL、匿名块,命名传参=>最清晰;函数必有 RETURN,想在 SQL 里调用就不能碰 DML 和事务控制;

yuhou25的博客 151

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 633

通过SCADA等值化配置功能,快速实现数据组态批量配置

现场升级到力控ForceSCADA后,依托数据组态参数等值化功能,工程师只需先设置一个测点的参数,然后在数据库浏览视图中依次等值化设置输入量程上限、量程下限、报警上限和历史保存周期,点击确认,全部20个点在2分钟内配置完成,随后再单独调整个别特殊点的个性化参数即可。数据库组态配置时,工程师可以Ctrl/Shift键或直接拖动鼠标多选任意数量的数据属性项(支持跨类型选择,如模拟量、数字量、累计量等),点击操作栏上的“等值化”按钮,选择参考点,点击确定即可等值化配置所有选中的测点属性。

FORCECON1的博客 109

MATLAB与ROS联合仿真——实例程序搭建思路

MATLAB与ROS联合仿真——实例程序搭建思路

慕羽★的博客 5227

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

大数据工具介绍

Hive作为离线数仓的元数据管理与SQL接口,依托HDFS存储、Spark/MapReduce计算;Spark是统一的分布式计算引擎,承担复杂数据处理;DataX实现异构数据源间离线同步;ClickHouse擅长极速单表分析;Doris则提供实时、多表关联的综合分析能力;Flink作为原生流处理引擎,支持毫秒级实时计算与状态管理。两者共同构建起从离线批处理到实时流处理的完整数据链路。

yyk33324的博客 261

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 342

Orin新系统常用软件安装教程

Miniforge 提供 Conda,用来给不同 Python 项目分开装环境,避免互相影响。它不能替你更换系统内核,也不会自动配好 Jetson 的 CUDA 或 GPU 版 PyTorch。这里固定使用26.9.4-1只有显示OK如果已存在,先检查。不要为了消除报错直接删目录,里面可能有之前的环境。myproject是自己起的环境名。普通 Python 包可以在这个环境里装;涉及 Jetson GPU 的包,还得按对应 JetPack 的官方说明选版本。Miniforge 官方项目。

shimingwang的博客 297

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 392

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

自建 SQL 数据库定时备份踩坑复盘与落地思路

本文剖析了自建SQL定时备份脚本在生产环境中的四大痛点:缺乏监控告警、备份链路割裂、策略管理分散、恢复校验缺失。针对这些问题,提出依托成熟备份工具(如松鼠备份SQL插件)实现统一调度、自动异地流转、智能清理与恢复校验,提升灾备可靠性。强调灾备核心在于“可监控、可转移、可恢复”,建议定期开展恢复演练,确保真正可用。

2501_93776716的博客 228

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

主从切换报成功,业务却写不进去——数据层脑裂与应用层连接残留的两类假成功

监控显示切换完成,应用却大面积写入失败。根因往往不在“切换”这个动作,在切换之后:数据层脑裂防护触发,双主都拒绝写入;应用层旧连接/VIP残留,流量没真正切过去。两类假成功排查优先级完全不同——先查同步状态和仲裁日志,不要重启。本文拆解两类假成功的触发链路与排查顺序。

DBAxiaoye的博客 230

成为全栈·Go 后端篇·重写之前先锁基线:契约、Node 版本与行为清单

用 Go 重写一套已服务网站、管理后台、Flutter 和小程序的后端,第一步应该做什么?本文结合 M6 工程,说明产品规则、冻结 OpenAPI 契约和 Node 历史实现为什么需要分别对待,并记录契约 1.12.0、Node v1.0.4 及差异测试基线。文章从分页、阅读冷却、评论删除和通知等实例,展示如何登记已知偏差、把成功结果与失败后的数据库状态一并纳入验证,并明确三数据库、差分、客户端 smoke 和真实线上联调各自能够证明的范围。适合准备接手既有系统重写、迁移或多端 API 兼容的开发者。

FungLeo's Blog 218

MySQL建库建表笔记

本文系统梳理MySQL建库建表核心要点:强调使用utf8mb4字符集以支持完整Unicode;推荐统一命名规范(小写、下划线分隔、前缀标识);合理选择数据类型(如用TINYINT而非BIGINT节省空间);明确CREATE DATABASE IF NOT EXISTS防错机制;详解字符集与排序规则(如utf8mb4_0900_ai_ci);并提供完整建表模板及约束、存储引擎等关键实践,助力高效、规范的数据库设计。

s19134838482d的博客 341

企业级 SaaS 系统架构设计:单体、微服务还是模块化单体?技术选型实战

企业级SaaS架构选型需避免“技术先进”陷阱。初期宜采用模块化单体,平衡成本与扩展性;微服务仅在业务复杂、团队规模大时引入。多租户数据隔离是关键:金融、医疗等敏感行业优先独立数据库或Schema;标准化产品可采用共享库+行级安全+租户ID强约束。切忌过早拆分、忽视隔离设计、忽略可观测性。架构成功不在于“先进”,而在于是否匹配业务阶段,三年内不拖累发展。

Weisanyun_DG的博客 368

Redis单线程指的是?IO多路复用指?

Redis核心命令执行由单线程(事件循环主线程)负责,串行处理所有读写命令,确保无锁竞争、高效低延迟;但整体非单线程:RDB/AOF持久化、异步IO(6.0+)、大key删除等由子进程或后台线程处理。其高性能源于内存操作快、无锁设计,而并发通过IO多路复用实现——主线程可高效监听成千上万客户端请求,事件驱动处理,避免阻塞。

Pniubi的博客 634

轻量应用服务器总是CPU 100%怎么办?

轻量应用服务器CPU持续100%需按“定位进程→分析原因→优化解决”流程排查。通过top/htop定位高占用进程,区分用户态(us)与内核态(sy)问题。针对Java/PHP等应用检查死循环、慢查询或缓存缺失;对Nginx/Apache关注并发与配置;数据库则排查慢SQL与连接数。解决方案包括代码优化、引入缓存、异步处理、扩容及负载均衡。同时启用云监控告警,定期巡检,杜绝盲目重启,确保根因可追溯。

dingxiaowei的专栏 498

MySQL 复合查询:多表 / 自连接 / 子查询 / UNION,一篇讲透

│ 复合查询的四种武器 │││ │ │ │ │【多表查询】 【自连接】 【子查询】 【合并查询】 【隐藏 boss】│ │ │ │ │from a, b 同一表起 WHERE 里 union 笛卡尔积join on 两个别名 ├ 单行(= max) union all = 行数之积where 条件 ├ 多行(in/any/all)├ 多列((a,b)=(x,y))└ FROM 里(派生表)一句口诀:「先想笛卡尔积,再加连接条件;同表比较起别名,聚合结果做临时表。半句含义先想笛卡尔积。

2601_94861874的博客 571

电子发票 Web 服务 部署备忘(Oracle 11g 32 位 + IIS)

现场实测结论,两台机器都踩过的两个坑。

dazer的专栏 327

【FDE系列】阶段2:Day 47(UP详细版):对接企业系统 — 飞书 / 钉钉 API

函数,把飞书的 5 个错误码映射到"换 token / 加权限 / 丢弃 / 退避 / 重试",并写单测覆盖这 5 条分支。(可分两次)| 难度:★★★★☆ | 前置知识:Day 46(认证与 401/403)、Day 44(nginx 转发头)写一个 5 行的"攻击脚本":同一个 sign,换一条 body,POST 到你的接收端。指向它,跑一遍:发 3 条消息,确认只换 1 次 token。多换 1 次,换来"手上 token 至少还有 5 分钟"20 并发抢刷新:无锁 20 次、加锁 1 次。

正经教主是个热衷于正经学习分享的教主。 407

Python FTP 服务端项目详细功能文档

基于 socketserver.ThreadingTCPServer 的多线程 FTP 服务端,与前面的客户端配套,用 ini 存账号、JSON 存断点,不依赖外部数据库。

piaoyiren的博客 93
上一篇: 使用pthread库进行多线程编程2 - UNIX高级环境编程第12章读书笔记
下一篇: UNIX信号(signal)编程 - UNIX高级环境编程第10章读书笔记
ATField
博客等级 码龄25年 673粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值