原创2024/1/25大约 1 分钟
1. 生成 32 位机器码
using System.Management;
using System.Security.Cryptography;
using System.Text;
public string Get32BitMachineCode()
{
string cpuInfo = string.Empty;
string hddInfo = string.Empty;
// 获取CPU序列号
ManagementObjectSearcher cpuSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");
foreach (ManagementObject mo in cpuSearcher.Get())
{
cpuInfo = mo["ProcessorId"].ToString();
break;
}
// 获取硬盘序列号
ManagementObjectSearcher hddSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive");
foreach (ManagementObject mo in hddSearcher.Get())
{
hddInfo = mo["SerialNumber"].ToString();
break;
}
// 1. 拼接硬件信息
string rawInfo = cpuInfo + hddInfo;
// 2. 使用 MD5 生成 32 位哈希值
using (MD5 md5 = MD5.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(rawInfo);
byte[] hashBytes = md5.ComputeHash(inputBytes);
// 3. 将字节数组转换为 32 位的十六进制字符串
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hashBytes.Length; i++)
{
sb.Append(hashBytes[i].ToString("X2")); // X2 表示大写十六进制
}
return sb.ToString(); // 返回固定 32 位的字符串
}
}
原创2026/6/4大约 1 分钟
在 Oracle 数据库中,当 Job 的 BROKEN 状态为 Y 时,意味着该定时任务已被标记为“损坏”或“禁用”,系统将不再自动调度执行它。
这就像给这个任务按下了“暂停键”,它会被移出自动执行的队列,直到有人手动干预。
1. 🤔 为什么 Job 会变成 BROKEN=Y?
最常见的原因是连续执行失败。Oracle 有一种自我保护机制:
- 当一个 Job 执行出错时,Oracle 不会立即放弃,而是会尝试重新执行。
- 它会进行多次重试(通常是 16 次),并且每次重试的间隔会越来越长。
- 如果连续失败了 16 次,Oracle 就会判定这个 Job 有严重问题,自动将其
BROKEN状态设置为Y,以防止它继续无谓地消耗系统资源。
原创2026/4/15大约 3 分钟
这种模式非常适合处理需要按顺序执行多个步骤的场景,每个步骤(或称“处理器”)负责一项特定的校验或操作。
- 核心思想:将请求的处理者串联成一条链,请求沿着链传递,直到被某个处理者处理。
- 优点:
解耦:请求的发送者和接收者解耦。 高扩展性:可以动态地增加、删除或重新排列处理节点,符合“开闭原则”。 单一职责:每个处理器只关注自己的逻辑。
- 适用场景:订单审核、请求过滤、数据校验等。
1. 简化的订单处理链
1.1. 定义处理器抽象类
原创2026/3/23大约 1 分钟
原创2026/3/13大约 4 分钟
原创2026/2/26小于 1 分钟
原创2026/2/26小于 1 分钟
原创2026/2/26小于 1 分钟
原创2026/2/25大约 4 分钟
原创2026/2/25大约 4 分钟