最近有训练营内部的学员在深圳的某匠面试,他进行完笔试之后跟我说:

这必须得整理出来分享给大家学习一下,希望对大家有帮助。
HRESULT function()
{
HRESULT error = S_OK;
if (FAILED(Operation1()))
{
return OPERATION1FAILED;
}
if (FAILED(Operation2()))
{
return OPERATION2FAILED;
}
if (FAILED(Operation3()))
{
return OPERATION3FAILED;
}
if (FAILED(Operation4()))
{
return OPERATION4FAILED;
}
return S_OK;
}
def find_all_pairs(arr, target):
seen = {}
pairs = set()
for num in arr:
complement = target - num
if complement in seen:
# 用元组存储并排序,避免重复(如(2,3)和(3,2)视为同一对)
pair = tuple(sorted((num, complement)))
pairs.add(pair)
seen[num] = True
return list(pairs)
def ip_to_int(ip):
# 分割IP为4个部分
parts = list(map(int, ip.split('.')))
# 确保IP格式正确(4个0-255的整数)
if len(parts) != 4 or any(p < 0 or p > 255 for p in parts):
raise ValueError("Invalid IP address")
# 转换公式:a*256^3 + b*256^2 + c*256 + d
return parts[0] * (256**3) + parts[1] * (256**2) + parts[2] * 256 + parts[3]
CREATE TABLE ip_country (
id INT PRIMARY KEY AUTO_INCREMENT,
start_ip_int BIGINT NOT NULL, -- 起始IP转换后的整数
end_ip_int BIGINT NOT NULL, -- 结束IP转换后的整数
country VARCHAR(50) NOT NULL -- 国家名
);
-- 针对范围查询优化,建立联合索引
CREATE INDEX idx_ip_range ON ip_country (start_ip_int, end_ip_int);
target_ip_int):SELECT country
FROM ip_country
WHERE target_ip_int BETWEEN start_ip_int AND end_ip_int
LIMIT 1; -- IP段不重叠,只返回一条结果
数据结构:使用有序集合(ZSET) 实现方法:
起始IP整数作为ZSET的score,国家名,结束IP整数作为member,通过ZADD命令插入数据:ZADD ip_segments 起始IP整数 "国家名,结束IP整数"
# 示例:ZADD ip_segments 0 "CN,16914248" (对应0.0.0.0-1.5.7.8的转换后整数范围)
target_ip;ZREVRANGEBYSCORE命令找到最大的score(起始IP整数)小于等于target_ip的member:ZREVRANGEBYSCORE ip_segments target_ip -inf LIMIT 0 1
member,得到国家名和结束IP整数;target_ip是否小于等于结束IP整数,若满足则返回该国家名(IP段不重叠,验证后必为唯一结果)。