【技术面试题+HR面试题】Python中函数的基础知识点题+Python中函数基础编程题

1.技术面试题

(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?

答:

  • 进程:程序的运行实例,有独立资源(内存、文件描述符等),是操作系统资源分配的基本单位。

  • 线程:进程内的执行单元,共享进程资源,是 CPU 调度的基本单位,切换开销小,用于提升程序并发效率。

  • 守护进程:后台运行、脱离终端控制的特殊进程,随系统启动 / 特定条件启动,执行系统级任务(如日志、服务监听 )。

进程管理
  • 查看ps -ef(全量进程信息)、top/htop(实时监控资源占用)。

  • 控制kill <PID>(终止进程)、kill -9 <PID>(强制终止)。

线程管理
  • 查看ps -T -p <PID>(查进程内线程)、pstack <PID>(线程栈跟踪)。

  • 控制:编程层面通过库(如 Python threading、C pthread)创建、启停。

守护进程管理(以 systemd 为例)
  • 启停systemctl start/stop <服务名>(如 httpd)。

  • 状态systemctl status <服务名>(查运行状态、日志)。

  • 自启systemctl enable/disable <服务名>(设置开机自启 / 关闭)。

(2)请详细描述OSI七层模型和TCP/IP四层模型,并说明它们之间的对应关系。每一层的主要功能是什么?各层有哪些典型的协议?

答:OSI 七层模型

  • 物理层:处理物理介质(网线、无线等)信号传输,定义接口、编码。如 RJ-45、802.11 标准。

  • 数据链路层:将比特流组帧,做差错检测、流量控制。如以太网(802.3)、PPP 协议。

  • 网络层:路由选路、逻辑寻址(IP),跨网络传数据。如 IP、ICMP、OSPF 协议。

  • 传输层:端到端通信,分可靠(TCP)、不可靠(UDP)传输。

  • 会话层:建立、管理通信会话,协调交互。功能常被合并,无独立广用协议。

  • 表示层:处理数据加密、压缩、格式转换。如 SSL/TLS、JPEG 规范(功能多融合到应用层)。

  • 应用层:为应用提供网络接口,定义交互规则。如 HTTP、FTP、SMTP 协议。

TCP/IP四层模型

  • 网络接口层:对应 OSI 物理层 + 数据链路层,负责物理传输、帧封装。

  • 网络层:同 OSI 网络层,做 IP 寻址、路由转发。核心协议 IP、ICMP 等。

  • 传输层:同 OSI 传输层,用 TCP(可靠)、UDP(高效)传数据。

  • 应用层:融合 OSI 会话层 + 表示层 + 应用层功能,涵盖 HTTP、DNS 等协议。

对应关系

TCP/IP四层模型 对应 OSI七层模型

网络接口层 物理层+数据链路层

网络层 网络层

传输层 传输层

应用层 会话层+表示层+应用层

(3)详细介绍什么是最大堆/最小堆。

答:最大堆

  • 定义一种完全二叉树结构,其中每个父节点的值 大于或等于 其左右子节点的值。

  • 核心特性:根节点是整个堆中的最大值,任意子树也满足最大堆的性质。

  • 典型应用:用于高效获取和删除最大值(如优先队列中处理高优先级任务)、堆排序(降序排序时构建最大堆)。

最小堆

  • 定义:同样是完全二叉树结构,其中每个父节点的值 小于或等于 其左右子节点的值。

  • 核心特性:根节点是整个堆中的最小值,任意子树也满足最小堆的性质。

  • 典型应用:用于高效获取和删除最小值(如 Dijkstra 最短路径算法)、实现优先队列(处理低优先级任务优先的场景)、堆排序(升序排序时构建最小堆)。

共同点

  • 均为完全二叉树,便于用数组存储(通过索引计算父子节点位置:若父节点索引为 i,左子节点为 2i+1,右子节点为 2i+2)。

  • 插入、删除操作需通过 “上浮” 或 “下沉” 调整结构,维持堆的性质,时间复杂度为 O(log n)n 为节点数)。

  • 能快速访问极值(根节点),时间复杂度为 O(1)

(4)详细介绍什么是二分搜索树。

答:二分搜索树

  • 定义:二叉树的一种,节点值满足:左子树所有节点值 < 当前节点值 < 右子树所有节点值(左、右子树也为 BST)。

  • 核心操作

    • 查找:从根节点开始,按值大小递归查左 / 右子树(O (log n) 平均,O (n) 最坏)。

    • 插入:类似查找,找到空位插入,维持值规则。

    • 删除:分叶子节点、单子节点、双子节点(用前驱 / 后继替代)三种情况处理。

    • 遍历:中序遍历得升序序列。

  • 特点:高效维护有序数据,不平衡时可能退化为链表(效率下降),是平衡树(如红黑树)的基础。

2.HR面试题

(1)我们非常欣赏你的能力,但目前只能提供比你期望薪资低20%的offer。在这种情况下,你会接受这份工作吗?如果接受,你对未来薪资增长有什么期望?如果不接受,你的底线是什么?

答:

  1. 试探接受底线:通过压低薪资,判断候选人对岗位的重视程度、薪资弹性空间,以及是否存在 “为机会妥协” 的可能。

  2. 评估动机优先级:考察候选人更看重 “短期薪资” 还是 “长期发展机会”(如平台资源、成长空间、行业前景等)。

  3. 预留谈判空间:若候选人有妥协意愿,可进一步明确其对薪资增长的预期,为后续调薪机制提供参考。

正面回答:

若愿意:”感谢贵公司的认可。这个薪资确实低于我的预期,但贵公司在【某某业务上的优势以及岗位能提供的某某实操经验,非常吸引我】。这些是我非常看重的成长资源,我愿意基于对长期价值的认可接受这个 offer。关于未来薪资增长,我希望能通过 3-6 个月的实践证明自己的能力。我相信只要能为团队创造足够的价值,薪资自然会随之体现“

(2)我们公司经常需要加班到深夜,有时甚至需要周末工作。你如何看待这种工作强度?你认为工作与生活的理想平衡点在哪里?

答:HR问这个问题的意图:

  1. 考察候选人对高强度工作的接受度,是否能适应公司的工作节奏;

  2. 了解候选人的价值观,是否重视可持续的工作状态,避免招到因无法承受压力而短期离职的人;

  3. 间接判断候选人的时间管理能力和抗压能力,以及对 “工作意义” 的理解是否与公司文化匹配。

正面回答:

我认为工作中难免有需要集中精力攻坚的阶段,这时加班是团队共同推进目标的体现,我会积极配合。但从长期来看,可持续的效率更重要。对于贵公司的工作强度,我相信如果是基于具体任务的合理安排,我有能力适应;同时我也会努力提升自身效率,在完成工作的前提下兼顾生活节奏,实现两者的动态平衡,为团队持续创造价值

(3)你认为自己最大的优势是什么?这个优势如何帮助你胜任我们这个岗位?

答:HR问这个问题的意图:

  1. 判断匹配度通过优势与岗位核心需求的关联度,评估候选人是否具备胜任岗位的关键能力。

  2. 了解自我认知:考察候选人是否清晰自身优势,以及优势是否真实、具体(避免空泛的 “抗压能力强”“学习能力强” 等表述)。

  3. 预测贡献价值:推断候选人未来能为团队 / 公司带来的核心价值,是否能解决岗位面临的典型挑战

正面回答:

优势需具体、有案例支撑,且紧密绑定岗位需求,避免脱离岗位空谈优势,体现 “我的优势正是你需要的“。

例如:“我认为自己最大的优势是精准的需求洞察与落地能力。比如在之前的 XX 工作中,曾遇到客户提出的模糊需求,我通过 3 次深度沟通提炼出核心痛点,再转化为可执行的方案,最终不仅满足了客户预期,还额外提出 2 个优化建议,获得了客户的长期合作意向。

我了解到贵岗位需要 [结合岗位描述,如 “对接多部门需求并推动跨团队协作”],而我的优势刚好能帮助快速理解各方诉求、转化为具体行动方案,减少沟通成本,确保协作高效推进。我相信这一能力能让我更快融入团队,为岗位目标的达成提供支持。”

(4)你认为这份工作能为你带来什么?你能为公司创造什么价值?

答:HR问这个问题的意图:

  1. 判断动机匹配度:通过 “工作能带来什么”,看候选人是否了解公司 / 岗位,动机是否单纯(如仅为薪资,还是重视成长与价值认同),避免因 “需求错位” 导致短期离职。

  2. 评估价值贡献力:通过 “能为公司创造什么”,考察候选人是否清晰自身优势与岗位的结合点,是否有明确的产出预期,而非 “空有能力却不知如何落地”。

  3. 观察长期稳定性:若候选人的个人成长需求与公司能提供的平台匹配,且能清晰阐述自身价值,通常更可能长期稳定任职,减少招聘成本。

正面回答:

“对我而言,这份工作首先是一个能让我深耕 [岗位领域] 的平台 —— 贵公司在 [行业优势,如 “零售数字化领域的领先实践”] 非常吸引我,岗位要求的 [具体任务,如 “通过用户分层提升复购率”],既能发挥我过往 [相关经验,如 “3 年用户运营经验”] 的积累,也能让我在 [目标成长点,如 “精细化运营策略”] 上得到突破,这是我最看重的成长价值。

而我能为公司带来的,一方面是 [即时价值,如 “用过往总结的用户分层模型,快速完成初期用户画像搭建”],另一方面,我擅长 [附加能力,如 “通过数据复盘优化策略”],之前曾帮团队 [过往成果,如 “将用户复购率提升 15%”],相信这类经验也能助力贵公司 [业务目标,如 “提升私域用户活跃度”]。我期待在为团队创造实际价值的同时,实现个人与公司的共同成长。”


3.问答题

(1)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        if i == len(lst) - 1:
            result.append(lst[i] * 2)
        elif lst[i] < lst[i+1]:
            result.append(lst[i] + 1)
        else:
            result.append(lst[i] - 1)
    return result
​
print(func([5, 3, 7, 2]))

答:运行结果为[4, 4, 6, 4];函数func功能是遍历输入列表,依据元素位置和相邻元素大小关系,对每个元素做特定运算(最后一个元素乘 2,非最后一个元素小于下一个则加 1、否则减 1 ),返回处理后的新列表 。

(2)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for num in lst:
        if num % 3 == 0:
            result.append(num // 3)
        elif num % 2 == 0:
            result.append(num * 2)
            if num > 10:
                break
        else:
            result.append(num + 1)
    return result
​
print(func([9, 4, 12, 7, 14]))

答:运行结果为 [3, 8, 4, 8, 28]。func主要遍历输入列表,按元素特性做不同运算:能被 3 整除则除以 3;能被 2 整除(且大于 10 时触发break终止循环 )则乘 2;都不满足则加 1,返回处理后的新列表

(3)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(nums1, m, nums2, n):
    i = j = k = 0
    temp = nums1.copy()
    while i < m and j < n:
        if temp[i] < nums2[j]:
            nums1[k] = temp[i]
            i += 1
        else:
            nums1[k] = nums2[j]
            j += 1
        k += 1
    while i < m:
        nums1[k] = temp[i]
        i += 1
        k += 1
    return nums1
​
nums1 = [1, 3, 5, 0, 0]
m = 3
nums2 = [2, 4]
n = 2
print(func(nums1, m, nums2, n))

答:结果输出是 [1, 2, 3, 4, 5]。func主要实现两个有序数组(nums1m 个元素、nums2n 个元素有序 )的合并,将结果存入 nums1,类似归并排序的合并逻辑,用于合并有序序列

(4)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    total = 0
    for i in range(len(lst)):
        if i % 2 == 0:
            total += lst[i]
        else:
            total -= lst[i]
        if total < 0:
            total = 0
    return total
​
print(func([5, 3, 2, 7, 1]))

答:运行结果为total=1,func主要遍历列表,按索引奇偶性做累加 / 累减操作(偶数索引加对应元素,奇数索引减对应元素 ),若结果为负则重置为 0,最终返回处理后的累计值

(5)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    evens = []
    odds = []
    for num in lst:
        if num % 2 == 0:
            evens.append(num)
        else:
            odds.append(num)
    evens.sort()
    odds.sort(reverse=True)
    return evens + odds
​
print(func([3, 1, 4, 1, 5, 9, 2, 6, 5]))

答:运行结果输出 `[2, 4, 6, 9, 5, 5, 3, 1, 1]。func的主要功能是将输入列表按元素奇偶性分离到两个子列表,偶数列表升序排序,奇数列表降序排序,最后合并两个子列表并返回。

(6)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        current = lst.pop(0)
        if current % 2 == 0:
            lst.append(current * 2)
        else:
            result.append(current)
    return result + lst
​
data = [1, 2, 3, 4, 5]
print(func(data))

[1, 3, 5, 4, 8]。func主要遍历列表,每次取出首个元素:若为奇数则加入结果列表;若为偶数则翻倍后放回列表末尾。最终返回 “奇数元素按取出顺序组成的列表” 与 “剩余列表(处理后的偶数及未遍历到的元素)” 的拼接结果,实现对列表元素的奇偶分类及偶数翻倍循环处理逻辑。

(7)以下代码运行结果是?并阐述函数func的主要功能是什么?

def func(lst):
    result = []
    for i in range(len(lst)):
        for j in range(i+1, len(lst)):
            if lst[i] + lst[j] == 10:
                result.append((lst[i], lst[j]))
                break
    return result
​
print(func([5, 3, 7, 2, 8]))

答:代码运行结果为 [(3, 7), (2, 8)]。func的作用是遍历列表,对每个元素 lst[i],从 i+1 位置开始找第一个与它和为 10的元素 lst[j],找到后将 (lst[i], lst[j]) 加入结果列表,且找到后立即停止当前 i 的内层查找(break ),最终返回所有符合条件的元组。

(8)编写程序,反素数

反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数

输出显示前100个反素数,每行显示10个

答:

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5) + 1):
        if num % i == 0:
            return False
    return True
​
def reverse_num(num):
    return int(str(num)[::-1])
​
count = 0
result = []
num = 10
while count < 100:
    reversed_num = reverse_num(num)
    if is_prime(num) and is_prime(reversed_num) and num != reversed_num:
        result.append(num)
        count += 1
    num += 1
​
for i in range(0, 100, 10):
    print(' '.join(map(str, result[i:i+10]))) 

(9)编写程序,梅森素数

如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数

输出p≤31的所有梅森素数

答:

def is_prime(n):
    if n < 2:
        return False
    for i in range(2,int(n**0.5) + 1):
        if n % i ==0:
            return False
        return True
​
result = []
for k in range(1, 32):
    m = 2**k - 1
    if is_prime(m):
        result.append((k,m))

(10)编写程序,数列求和

编写一个函数计算下面的数列:

$m(i) = \frac{1}{2} + \frac{2}{3} + ... + \frac{i}{i + 1}$

并输出测试结果:

i       m(i)
1       0.500
2       1.16
...     
19      16.40
20      17/35

答:

#def c_m(i):
    result = 0.0
    for j in range(1,i + 1):
        result += j / (j+1)
    return result
​
for i in range(1,21):
    m_i = c_m(i)
    if i == 20:
        print(f"{i}\t{17/35}" if 17/35==m_i else f"{i}\t{m_i:.3f}")
    else:
        print(f"{i}\t{m_i:.2f}") 

(11)编写程序,组合问题

有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

答:

nums = [1, 2, 3, 4]
result = []
for i in nums:
    for j in nums:
        for k in nums:
            if i != j and j != k and i != k:
                num = i * 100 + j * 10 + k
                result.append(num)
​
print("能组成", len(result), "互不相同且无重复数字的三位数,分别是:")
for num in result:
    print(num, end=" ")

(12)编写程序,计算e

你可以使用下面的数列近似计算e

$$
e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
$$

当i越大时,计算结果越近似于e

答:

def c(n):
    e = 1.0
    f = 1
    for i in range(1,n+1):
        f*=i
        e +=1/f
        return e
​
n = 10
result = c(n)
print(f"e的近似值:{result}")

(13)编写程序,完全数

如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数

例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1

输入输出描述

输入一个正整数

输出该数是否为完全数

示例1

输入:

6

输出:

Yes

示例2

输入:

9

输出:

No

答:

n = int(input())
s = 0
for i in range(1,n):
    if n % i == 0:
        s +=i
if s == n:
    print("Yes")
​
else:
    print("No")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值