python问答3

1.技术面试题

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

答:进程是资源分配的基本单位,独立运行,适合需要隔离资源的场景;线程是进程内的执行单元,共享资源,适合高并发、低开销的任务;守护进程是后台运行的特殊进程,用于持续提供服务,脱离终端控制。

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

答:osi:物理层 负责将数据转换为电信号、光信号或无线电信号等物理介质可传输的形式,并在物理介质(如网线、光纤、无线信道)上传输原始比特流。数据链路层 核心功能:将物理层的原始比特流封装成帧(Frame),负责相邻节点间的可靠传输。网络层 核心功能:实现不同网络之间的数据包路由和转发。 传输层 核心功能:为源端和目的端的应用程序之间提供可靠的端到端数据传输服务。会话层 核心功能:负责建立、维护和终止应用程序之间的会话连接。 表示层 核心功能:负责数据的格式转换和表示。 应用层 核心功能:直接为用户应用程序提供网络服务。 TCP/IP:网络接口层 核心功能:对应 OSI 模型的物理层和数据链路层,负责将网际层的 IP 数据包封装成帧并通过物理介质传输。 网际层 核心功能:对应 OSI 模型的网络层,负责跨网络的数据包路由和转发。 传输层 核心功能:与 OSI 模型的传输层功能一致,负责为应用程序提供端到端的可靠或不可靠数据传输。 应用层 核心功能:对应 OSI 模型的会话层、表示层和应用层,直接为用户应用程序提供网络服务。 典型协议:HTTP/HTTPS、FTP、SMTP、DNS。

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

答:堆(Heap)是一种特殊的完全二叉树数据结构,其核心特性是父节点与子节点之间存在固定的大小关系,根据这种关系可分为最大堆和最小堆。

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

答:二分搜索树(又称二叉搜索树、二叉查找树)是一种特殊的二叉树数据结构,其核心特性是每个节点的值满足特定的排序规则,这使得它在查找、插入和删除操作上具有高效的时间复杂度

2.HR面试题

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

答:分析:这看似只是一次关于薪资的问题,背后却可能隐藏着公司想了解你是看重什么的人,是否属于把薪资放在首位,亦或者是能对这份工作抱有热情的人,以及是否能随着公司一起成长的人 。 回答: 对于您开的条件我会接受,我所追求的并不是当下赚得有多少,而是我的能力和我的回报能否一起成长,就像鲜花要有绿叶衬托一样,我也愿为公司衬托光彩。

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

答:分析:1.想看能否适应团队的工作节奏2.是否有成熟的工作心态:能区分必要付出与无效消耗 3.对工作与生活的平衡观是否稳定,能否长期留存。 回答:我知道贵公司可能进入了特殊时期,我会提前做好心理准备,把较长时间留给核心的工作,提升工作的效率。但是我的底线是不打算长期牺牲健康和成长,比如在进行连续熬夜后,我会申请调休半天时间进行状态的恢复;周末加班后,会留出一天时间进行工作复盘,学习新技能,毕竟只有保持可持续的状态才能长期给团队创造价值。

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

答:分析:你的优势是否是岗位的刚需能力,你能否用具体案例证明优势,这个优势能否转化为岗位的价值产出。 回答:我认为自己的核心优势是跨领域学习转化,接触新领域时(如从 0 学数据分析),能在 1 个月内掌握工具并产出实际成果。以及在高压下的资源协调与执行 遇到突发问题时(如项目技术瓶颈),能当天联动多部门明确分工,甚至带头攻坚(曾提前 2 天解决紧急上线任务)这些能力叠加起来,既能适配贵司高强度的工作节奏,快速响应突发需求;也能在对接复杂业务时,通过拆解、协调、学习快速突破瓶颈,最终为贵公司创造价值。

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

答:分析:面试官问这两个问题,本质是想确“双向匹配度”:公司能提供的资源是否符合你的成长诉求?你能输出的价值是否能解决公司的核心需求? 回答:对我而言,这份工作的核心价值在于能力与视野的双重突破,与公司愿景如对齐的方向,能让我在创造价值的同时,获得做有长期意义的事的成就感,这比单纯的薪资回报更重要;结合岗位需求,我的价值可以落地在三个具体层面:快速上手解决现有问题凭借过往经验,如3年 To B 产品落地经验,我能在入职后[具体行动,如个月内熟悉现有业务流程,3个月内牵头优化客户反馈的3个高频痛点,直接降低团队的衔接成本。

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的核心功能:将输入列表lst转换为一个新列表result。

(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] 遍历列表lst,func的主要功能根据元素数值的特性进行不同操作。

(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的核心功能:将两个有序数组的前半部分合并为一个新的有序数组,结果直接存储在第一个数组中。

(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]))

答:1 函数func的主要功能:遍历列表lst,根据元素索引的奇偶性对元素进行累加或累减,同时确保累加过程中总和始终非负。

(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] 函数功能:将输入列表lst拆分为偶数子列表和奇数子列表,分别排序后合并:偶数子列表:按升序排列(从小到大);奇数子列表:按降序排列(从大到小);合并结果:偶数子列表在前,奇数子列表在后。

(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)] 函数功能:查找列表中所有和为 10 的不重复元素对。

(8)编写程序,反素数

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

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

答:

# Your Codes 
```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

count = 0
num = 10
emirps = []

while count < 100:
    reversed_num = int(str(num)[::-1])
    if (str(num) != str(num)[::-1] and 
        is_prime(num) and 
        is_prime(reversed_num)):
        emirps.append(num)
        count += 1
    num += 1

# 输出结果
for i in range(0, len(emirps), 10):
    print(' '.join(f"{n:<5d}" for n in emirps[i:i+10]))



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

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

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

答:

```python
# Your Codes 
```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

primes_p = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

print("p ≤ 31的梅森素数:")
for p in primes_p:
    m = 2 ** p - 1
    if is_prime(m):
        print(f"当p={p}时,2^{p}-1 = {m}")



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

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

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

并输出测试结果:

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

答:

# Your Codes 
```def calculate_sum(i):
    total = 0.0
    for n in range(1, i + 1):
        total += n / (n + 1)
    return total

# 输出表头
print("i\tm(i)")

# 输出i从1到20的结果,保留三位小数
for i in range(1, 21):
    result = calculate_sum(i)
    print(f"{i}\t{result:.3f}")



**11)编写程序,组合问题**1234这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?

答:

```python
# Your Codes 
```count = 0
combinations = []

for i in range(1, 5):
    for j in range(1, 5):
        for k in range(1, 5):
            if i != j and i != k and j != k:
                combinations.append(f"{i}{j}{k}")
                count += 1

print(f"共有{count}个符合条件的三位数:")
print(' '.join(combinations))



**12)编写程序,计算e**

你可以使用下面的数列近似计算e
$$
e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
$$
当i越大时,计算结果越近似于e

答:

```python
# Your Codes 
```precision = 100
e = 1.0
factorial = 1

for i in range(1, precision + 1):
    factorial *= i
    e += 1 / factorial

print(f"e ≈ {e:.15f}")



**13)编写程序,完全数**

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

例如 6 = 3 + 2 + 128 = 14 + 7 + 4 + 2 + 1

**输入输出描述**

输入一个正整数

输出该数是否为完全数

**示例1**

> 输入:
>
> 6
>
> 输出:
>
> Yes

**示例2**

> 输入:
>
> 9
>
> 输出:
>
> No

答:

```python
# Your Codes 
```n = int(input()) 

sum_factors = 0
for i in range(1, n):
    if n % i == 0:
        sum_factors += i

print("Yes" if sum_factors == n else "No")






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值