python相关

1.技术面试题

(1)解释 Linux 中的符号链接和硬链接

符号链接(软链接)
它类似 Windows 系统中的快捷方式,实际上是一个独立的文件,其内容为目标文件的路径。
可以对目录或者不存在的文件创建符号链接。
当原文件被删除后,链接文件就会失效,显示为 “broken link”。
创建符号链接使用的命令是:ln -s 源文件 链接名。
硬链接
硬链接是文件的另一个入口,和原文件共用同一个 inode 号以及数据块。
只能对文件创建硬链接,无法针对目录。
即便原文件被删除,硬链接依然有效,数据也不会丢失。
创建硬链接的命令是:ln 源文件 链接名。

(2)Linux 使用的进程间通信方式有哪些?

1 管道(Pipe):
半双工,数据只能单向流动。
分为匿名管道(用于父子进程)和命名管道(FIFO,无亲缘关系进程也能用)。
示例命令:ls | grep “test”。
2 消息队列(Message Queues):
以队列形式存放消息,多个进程可按类型收发消息。
自带同步机制,不过容量有限。
3 共享内存(Shared Memory):
多个进程共享同一块物理内存,是最高效的通信方式。
需要自行处理同步问题。
4 信号量(Semaphores):
主要用于进程间的同步,防止多个进程同时访问共享资源。
常和共享内存配合使用。
5 套接字(Sockets):
支持跨网络的进程通信,分为 TCP(可靠连接)和 UDP(无连接)两种。
可用于不同主机之间的进程通信。
6 信号(Signals):
用于异步通知进程有事件发生,例如 SIGINT(中断信号)、SIGTERM(终止信号)。
不能传递大量数据。
7 内存映射文件(Memory-Mapped Files):
把文件映射到内存,进程对内存的操作会自动反映到文件上。
适合大数据量的共享。

(3)什么是TCP 三次握手与四次挥手?

TCP 三次握手(建立连接)
客户端→服务器:发送 SYN 包(携带初始序列号 ISN=c),进入 SYN_SENT 状态。
服务器→客户端:回 SYN+ACK 包(ISN=s,确认号 ack=c+1),进入 SYN_RECV 状态。
客户端→服务器:发 ACK 包(ack=s+1),双方进入 ESTABLISHED 状态,连接建立。
TCP 四次挥手(关闭连接)
客户端→服务器:发 FIN 包(序列号 seq=u),进入 FIN_WAIT_1 状态。
服务器→客户端:回 ACK 包(ack=u+1),进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
服务器→客户端:发 FIN 包(seq=w),进入 LAST_ACK 状态。
客户端→服务器:回 ACK 包(ack=w+1),进入 TIME_WAIT 状态(等待 2MSL 后关闭),服务器直接关闭。
核心目的
三次握手:同步初始序列号,验证双方收发能力。
四次挥手:确保双方都能正确关闭连接,数据不丢失。

(4)ARP 协议的作用及工作原理
作用:将 IP 地址解析为 MAC 地址,实现链路层通信。
工作原理:
请求阶段:主机广播 ARP Request(含目标 IP),询问 “谁拥有该 IP?”。
响应阶段:目标主机单播回复 ARP Reply(含自身 MAC)。
缓存机制:主机维护 ARP 表(TTL≈20 分钟),避免重复查询。
核心机制:广播请求、单播响应、动态缓存。

(5)详细阐述快速排序算法

快速排序(QuickSort)
核心思想:分治法,选基准值(pivot)将数组分为两部分,递归排序。
步骤:
分区(Partition):双指针交换元素,使左半部分≤pivot,右半部分≥pivot。
递归:对左右子数组重复上述过程。
时间复杂度:平均 O (n log n),最坏 O (n²)(需优化基准值选择)。
空间复杂度:O (log n)(递归栈)。
优化:三数取中、随机基准值、三路划分(处理重复元素)。
应用:大规模数据排序(如 Java Arrays.sort () 对基本类型的实现)。

(6)详细阐述归并排序算法
归并排序是基于分治策略的稳定排序算法,核心逻辑为 “分解 - 排序 - 合并”:
分解:递归将数组拆分为子数组,直至每个子数组仅含 1 个元素(天然有序)。
合并:双指针遍历两有序子数组,按序合并为更大有序数组。
性能:
时间复杂度:所有情况均为 O (n log n)(分解 log n 层,每层处理 n 元素)。
空间复杂度:O (n)(需临时数组存储合并结果)。
稳定性:稳定(相等元素相对顺序不变)。
优化与应用:可通过原地合并、结合插入排序(小规模数组)优化;适用于外部排序、稳定性要求高的场景(如 Java 对象数组排序)。

(7)详细阐述基数排序算法

基数排序(Radix Sort)
核心思想:按位排序,从低位到高位(LSD)或高位到低位(MSD),每轮用稳定排序(如计数排序)处理当前位。
步骤:
确定最大位数:找到最大值的位数(如 987 的位数为 3)。
逐位排序:从个位开始,将元素按当前位放入 0-9 号桶,再按桶顺序收集,重复至最高位。
时间复杂度:O (d*(n+k)),d 为位数,k 为基数(如十进制 k=10)。
空间复杂度:O(n+k)。
稳定性:稳定。
适用场景:整数或可转换为整数的数据(如字符串),数据范围不大。

(8)详细阐述桶排序算法
桶排序(Bucket Sort)
核心:将数据分到有限数量的桶中,对每个桶单独排序(如插入排序),最后拼接桶。
步骤:
确定桶范围与数量(通常基于数据分布)。
将元素分配到对应桶。
桶内排序,按桶顺序合并结果。
性能:
时间复杂度:理想 O (n + k)(k 为桶数,数据均匀分布),最坏 O (n²)(数据集中于单桶)。
空间复杂度:O (n + k)。
适用:数据分布均匀的场景(如浮点数、整数范围已知)。

2.HR面试题

(1)你为什么选择我们公司?
其实在投递贵公司之前,我花了不少时间了解咱们的业务和团队氛围。首先是业务方向 —— 我一直很关注 [提及公司核心业务,比如 “新能源领域的技术创新” 或 “用户体验驱动的产品设计”],这和我职业规划里想深耕的领域高度契合,能把自己的专业能力用在真正认同的方向上,对我来说特别重要。
另外,我也听说咱们团队特别重视新人成长,比如 [举一个了解到的细节,如 “有完善的导师带教制度” 或 “鼓励跨部门协作学习”],这一点特别吸引我。我希望的不只是一份工作,更是能和一群愿意互相支持、一起把事情做好的人共事,在解决实际问题中积累经验。
还有一点很实在的是,贵公司在 [行业内的优势,如 “技术研发上的前瞻性” 或 “对用户需求的敏锐捕捉”] 一直有口皆碑,我相信在这里能接触到更有挑战的项目,既能发挥自己的优势,也能快速弥补不足,这种 “能做事、能成长” 的环境,正是我最看重的。

(2)你现在手里有offer吗?

目前确实收到了一些其他公司的 offer,主要是在 [可以简单提一下行业方向,比如 “互联网产品岗” 或 “机械设计领域”],不过经过对贵公司的深入了解,不管是业务赛道的前景,还是团队的工作氛围,都更符合我长期的职业期待。所以现在最希望能有机会加入咱们团队,也在认真等待这次面试的结果,这会是我优先考虑的选择。

(3)你认为一份 “好工作” 的核心要素是什么?如果工作内容与预期不符,你会如何调整?
我理解的 “好工作” 核心要素,其实可以总结成三个词:价值感、成长空间、适配性。
价值感不只是薪资回报,更在于做的事有意义 —— 比如能解决用户真实需求,或者推动行业里的微小进步,这种 “付出有反馈” 的感觉会让人有持续的动力。
成长空间也很关键,不只是技能提升,更包括能接触到有挑战的项目、遇到愿意带教的前辈,甚至允许试错的环境,这样才能慢慢从 “能做事” 变成 “能做好事”。
最后是适配性,比如团队氛围是否合拍(不用刻意迎合,能自然沟通),工作节奏是否和自己的生活状态平衡(比如我更倾向于高效协作而非内耗),这些 “隐性匹配” 其实决定了能不能长期投入。
如果工作内容和预期不符,我可能会先做两件事:
一是主动沟通,和领导聊聊这份工作的核心目标是什么,看看是我对 “预期” 的理解有偏差,还是任务本身在动态调整 —— 很多时候,初期的 “不符” 可能是因为信息不全。
二是先沉下去做,哪怕是陌生的内容,先试着找到其中的价值点(比如 “虽然和我想的不一样,但能锻炼 XX 能力”)。如果确实长期偏离职业方向,再坦诚和团队沟通调整的可能性,毕竟互相适配才是长久之计。
对我来说,比起 “完美符合预期”,更重要的是能在过程中找到平衡点 —— 既不盲目妥协,也不过分执念,毕竟工作的本质是互相成就嘛。

(4)如果领导对你的工作成果提出尖锐批评,你会如何回应?
首先,先认真倾听,不急于辩解。比如可以说:“您说的这几点我都记下来了,尤其是 XX 地方(重复一个具体批评点),确实是我没考虑周全,您再展开说说吗?” 这样既让领导感受到被尊重,也能确保自己准确理解问题核心,避免因情绪影响判断。
然后,坦诚承认不足,聚焦改进方向。如果确实是自己的疏漏,会直接说:“这次确实是我在 XX 环节(比如细节把控 / 逻辑梳理)出了问题,您指出的这点特别关键,我马上梳理改进方案,今天下班前给您反馈可以吗?” 即使有客观原因(比如信息不全),也会先认下责任:“不管怎么说,结果没达到预期就是我的问题,我先复盘下过程,看看哪些地方能优化,之后和您同步。”
最后,用行动跟进,形成闭环。按约定时间给出具体改进措施,比如修改后的方案、避免再犯的流程等,完成后再主动汇报:“上次您提的 XX 问题,我按您的建议调整了 XX,您看这样是否更合适?” 毕竟领导的批评本质是希望工作更完善,用结果证明自己的吸收能力,比过多解释更有说服力。
对我来说,尖锐的批评其实是明确的 “改进路标”—— 比起模糊的肯定,这种直接的反馈反而能让我更快发现盲区,只要心态放正,反而能变成成长的契机。

(5)我看你简历里写了学习能力强,你怎么证明你的学习能力强呢?
我理解 “学习能力强” 不是空泛的说法,对我来说,它体现在 “快速掌握新事物、解决陌生问题” 的具体经历里。可以举两个例子:
比如之前实习时,团队突然接到一个需要用 Python 处理大量数据的任务,而我当时只学过基础语法,对 pandas、numpy 这些库几乎不熟。我花了两天时间,白天跟着官方文档练核心函数,晚上拆解同事给的旧代码片段,边模仿边改 bug,第三天就独立完成了第一版数据清洗脚本,最后还帮团队优化了重复计算的逻辑,把处理时间从 2 小时压到了 40 分钟。
还有一次,为了做一个用户行为分析的项目,我需要快速理解埋点逻辑和 SQL 复杂查询。我先找数据部门要了埋点文档,对着表结构画思维导图,再针对不懂的 “窗口函数”“关联查询”,每天抽 1 小时看教程 + 实际跑数练习,一周后就能独立写出符合要求的分析报表,还发现了之前被忽略的用户留存漏斗问题。
其实对我来说,学习能力的核心是 “目标导向”—— 先明确要解决什么问题,再针对性找方法(查资料、问前辈、动手试错),而不是单纯堆时间。这些经历让我觉得,面对新领域时,只要能抓住核心需求,沉下心拆解问题,就能快速上手。
(6)如果你的室友在考试中,偷偷让你帮忙传递一个写着知识点的小纸条(现场监管不严,被发现概率低),你会帮吗?请说具体理由,不要只讲大道理。
我不会帮。原因有三个:
第一,对室友来说,这次 “帮” 其实是在纵容侥幸心理。考试的本质是检验学习成果,靠小纸条混过去,他既没真正掌握知识,还可能养成 “走捷径” 的习惯,以后遇到更重要的考验(比如求职、工作中的实操),缺的这点底子总会暴露,反而害了他。
第二,对我自己来说,风险不可控。哪怕现场监管松,“被发现” 的可能性再低,一旦发生,不仅会影响我的成绩、信誉,甚至可能记过影响毕业 —— 用自己的前途换 “一时的义气”,显然不值。
第三,换个方式帮才更有意义。如果他考前没复习好,我可以提前提醒他重点,或者考完后帮他梳理错题、补知识点,这才是真的帮他进步。朋友之间的支持,应该是一起守住底线,而不是一起破坏规则,您说对吗?

(7)你说很想进入我们公司,但你的专业和我们公司关联度不高,而且你也没有相关的实习经历。你觉得我们为什么要相信你是真心想做这个行业,而不是把这里当跳板?
我特别理解您的顾虑 —— 专业和实习经历的关联度不高,确实容易让人担心我的诚意和稳定性。但其实我转向这个行业,是花了半年多时间认真琢磨后的决定,不是一时冲动,更不是把这里当跳板。
首先,我对这个行业的关注已经有一段时间了。比如我会定期看 [行业相关的公众号 / 报告,举具体例子,如 “贵公司所在的智能家居领域,我追过《XX 行业白皮书》,也研究过咱们去年发布的 XX 产品的用户反馈”],慢慢发现这个领域 [说一个具体吸引点,如 “用技术解决生活痛点的思路,和我一直想做‘有实际价值的事’的想法完全契合”]。这种兴趣不是凭空来的,是真的花时间去了解、去琢磨后产生的认同。
其次,我知道自己缺相关经验,所以这半年一直在主动补。比如我 [举 1-2 个具体行动,如 “自学了 XX 基础课程(提课程名),做了 XX 小练习(如用 XX 工具分析了一份行业数据,写了 3000 字的分析笔记);还加了几个行业社群,经常看前辈们聊实操问题,记了满满一本笔记”]。这些事没人要求我做,是自己觉得 “想入行就得先入门”,主动攒的 “敲门砖”—— 如果只是想找个跳板,完全没必要花这么多精力做这些 “额外功”。
最后,我之所以特别想来贵公司,是因为 [说公司的具体吸引力,如 “你们的 XX 项目(提具体项目)里,那种‘让新人从基础参与、允许试错’的模式,特别适合我这种想从头扎根的人;而且我研究过团队分享的案例,发现你们对‘跨专业成长’的包容度很高(如有案例可提)”]。对我来说,比起 “找个工作过渡”,更想在这里把 “转行” 这件事做扎实 —— 毕竟从头学一个领域不容易,我更希望能在一个认可我这份 “从头开始的决心” 的地方,长期沉下来做,而不是随便跳来跳去浪费精力。
所以您看,我其实是带着 “想在这里把‘短板’补成长板” 的心态来的,而不是把这里当跳板。毕竟,对我这种跨专业的人来说,能被一个愿意给机会的平台接纳,更该珍惜才是。

(8)你的成绩在班级里处于中等水平,而我们这个岗位竞争激烈,很多应聘者成绩都很优秀。你觉得自己比他们强在哪里,值得我们录用你?
我很清楚成绩是衡量能力的一个维度,但在准备这个岗位的过程中,我也认真想过:对实际工作来说,除了成绩单上的分数,解决问题的落地能力、主动补短板的意识,可能是更重要的 “竞争力”。这也是我觉得自己可以胜任的底气。
比如,我成绩中等,但在专业相关的实践课上,反而做得更扎实。大二时我们有个 “XX 课程设计”(举具体项目),要求用课堂学的理论做一个简易模型。当时班里成绩好的同学大多按教材框架做,但我发现教材里的方案在实际操作中会有漏洞(比如 XX 环节效率低),就自己查了 3 篇行业论文,结合课上学的基础原理,改了两个关键参数,最后我的模型运行效率比标准方案提升了 30%,还被老师当成案例在课上分享。这件事让我意识到:成绩好可能代表理论掌握扎实,但实际工作更需要 “把理论落地、甚至优化” 的能力 —— 这恰恰是我更擅长的。
另外,我知道自己成绩不算顶尖,所以更主动去补 “实践经验”。比如这个岗位要求 XX 技能(提岗位核心技能),我没在课堂上学过系统知识,就花了 3 个月自学(举具体行动,如 “跟着 XX 网课练手,用 XX 工具做了一个小案例,比如分析了 XX 数据 / 搭了一个简易原型”),过程中遇到卡壳的问题,会主动找学长请教,甚至在行业社群里发帖问前辈,最后不仅掌握了基础操作,还总结了一套自己的操作手册。这种 “发现短板就立刻补、而且一定要落地到具体成果” 的习惯,可能比 “成绩单上的高分” 更贴近实际工作的需求 —— 毕竟工作里更常遇到的是 “没人教、需要自己找办法” 的场景。
再者,我性格里有个特点:不回避 “自己不懂”,但会立刻想办法 “弄懂”。比如之前小组作业里,有个环节需要用 XX 软件(提岗位相关工具),我完全没接触过,成绩好的同学可能更擅长查理论资料,但我当天就找了 5 个实操教程,边看边练,熬了两个晚上就摸透了核心功能,最后还帮组里另外两个同学解决了操作问题。这种 “快速上手、解决具体问题” 的能力,我觉得对这个岗位(尤其是需要快速适应项目节奏的部分)来说,可能比单纯的成绩排名更有实际价值。
当然,我也知道成绩能反映学习的专注度,这是我需要继续提升的地方。但如果说 “为什么值得录用”,我想大概是:我更擅长把学到的东西变成 “能解决问题的具体结果”,也更习惯用行动补短板 —— 而这,恰恰是实际工作里最需要的 “执行力”。

3.问答题

(1)执行以下代码,输出结果是什么?

def process_list(lst):
    for i in range(len(lst)):
        if lst[i] % 2 == 0:
            lst.insert(i+1, lst[i] // 2)
    return lst

nums = [2, 3, 8]
print(process_list(nums))

[2, 1, 3, 8, 4]

(2)运行下列代码,输出结果是什么?

def modify_tuple(t):
    try:
        t[1] += 10
    except:
        t = (t[0], t[1]+10, t[2])
    return t

tup = (1, 5, 3)
new_tup = modify_tuple(tup)
print(tup[1] + new_tup[1])

20

(3)以下代码的输出结果是什么?

def set_operations():
    a = {1, 2, 3}
    b = a.copy()
    a.add(4)
    b.discard(2)
    c = a - b
    b.update(c)
    return len(a & b)

print(set_operations())

4
(4)执行下列代码后,输出结果是什么?

def string_transform(s):
    result = []
    for i, char in enumerate(s):
        if i % 2 == 0:
            result.append(char.upper())
        else:
            result.append(char.lower())
    return ''.join(result[::-1])

print(string_transform("PyThOn"))

nOhTyP
(5)运行以下代码,输出结果是什么?

def dict_processing():
    d = {'a': 1, 'b': 2, 'c': 3}
    new_d = {}
    for k, v in d.items():
        new_d[v] = k
        if v % 2 == 0:
            new_d[k.upper()] = v * 2
    return sum(new_d.keys())

print(dict_processing())

抛出 TypeError 异常
(6)以下代码的输出结果是什么?

def nested_list_operation():
    matrix = [[1, 2], [3, 4], [5, 6]]
    total = 0
    for i in range(len(matrix)):
        matrix[i].append(matrix[i-1][0])
        total += sum(matrix[i])
    return total

print(nested_list_operation())

30
(7)执行下列代码会产生什么结果?

def tuple_unpacking():
    tup = (10, 20, 30, 40)
    a, *b, c = tup
    b.append(c // a)
    return tuple(b)

print(tuple_unpacking()[1] * 2)

60

(8)运行以下代码,输出结果是什么?

def set_generator():
    s = set()
    for i in range(5):
        if i % 2 == 0:
            s.add(i)
        else:
            s.update(range(i))
    return sorted(s)[-2]

print(set_generator())

2
(9)以下代码的输出结果是什么?

def string_manipulation():
    s = "Hello World Python"
    words = s.split()
    result = []
    for word in reversed(words):
        result.append(word[1:-1] if len(word) > 2 else word)
    return ' '.join(result)

print(string_manipulation())

ytho orl ell
(10)执行下列代码后,输出结果是什么?

def dict_traversal():
    d = {'x': 5, 'y': 10, 'z': 15}
    keys = list(d.keys())
    for key in keys:
        if d[key] > 8:
            d[key.upper()] = d.pop(key)
    return len(d) + sum(d.values())

print(dict_traversal())

33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值