首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深圳某匠的笔试题,据说基本都考的这几个

深圳某匠的笔试题,据说基本都考的这几个

作者头像
王中阳AI编程
发布2026-03-17 19:38:43
发布2026-03-17 19:38:43
820
举报
文章被收录于专栏:Go语言学习专栏Go语言学习专栏

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

这必须得整理出来分享给大家学习一下,希望对大家有帮助。

1. 重构以下代码

代码语言:javascript
复制
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;
}

2. 设计一个算法,找到数组中所有和为指定值的整数对

代码语言:javascript
复制
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)

3. 现有一个IP库文件,格式如下(以逗号分隔):起始ip,结束ip,国家名

3.1 实现一个函数,将ip转化为整数(保持ip之间的大小关系)
代码语言:javascript
复制
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]
3.2 MySQL实现从ip获取国家名的功能
  • 表格设计:
代码语言:javascript
复制
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   -- 国家名
);
  • 索引设计:
代码语言:javascript
复制
-- 针对范围查询优化,建立联合索引
CREATE INDEX idx_ip_range ON ip_country (start_ip_int, end_ip_int);
  • 查询SQL(假设目标IP转换后的整数为target_ip_int):
代码语言:javascript
复制
SELECT country 
FROM ip_country 
WHERE target_ip_int BETWEEN start_ip_int AND end_ip_int 
LIMIT 1;  -- IP段不重叠,只返回一条结果
3.3 Redis实现从ip获取国家名的功能

数据结构:使用有序集合(ZSET) 实现方法:

  1. 存储方式:将IP段的起始IP整数作为ZSET的score国家名,结束IP整数作为member,通过ZADD命令插入数据:
代码语言:javascript
复制
ZADD ip_segments 起始IP整数 "国家名,结束IP整数"
# 示例:ZADD ip_segments 0 "CN,16914248" (对应0.0.0.0-1.5.7.8的转换后整数范围)
  1. 查询步骤:
  • 将目标IP转换为整数target_ip
  • 使用ZREVRANGEBYSCORE命令找到最大的score(起始IP整数)小于等于target_ipmember
代码语言:javascript
复制
ZREVRANGEBYSCORE ip_segments target_ip -inf LIMIT 0 1
  • 解析返回的member,得到国家名结束IP整数
  • 验证target_ip是否小于等于结束IP整数,若满足则返回该国家名(IP段不重叠,验证后必为唯一结果)。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 王中阳 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 重构以下代码
  • 2. 设计一个算法,找到数组中所有和为指定值的整数对
  • 3. 现有一个IP库文件,格式如下(以逗号分隔):起始ip,结束ip,国家名
    • 3.1 实现一个函数,将ip转化为整数(保持ip之间的大小关系)
    • 3.2 MySQL实现从ip获取国家名的功能
    • 3.3 Redis实现从ip获取国家名的功能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档