python暑假课第三次作业
1.技术面试题
(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?
答:
1、进程
进程是运行中的程序的实例,拥有独立的地址空间、资源以及唯一的进程ID。
2、线程
线程是进程内的执行单元,共享同一进程的地址空间和资源,但拥有独立的栈和程序计数器。
3、守护进程
守护进程是后台运行的特殊进程,通常脱离终端启动。
守护进程的管理方法
1、创建守护进程
2、系统服务管理
(2)请详细描述OSI七层模型和TCP/IP四层模型,并说明它们之间的对应关系。每一层的主要功能是什么?各层有哪些典型的协议?
答:一、OSI七层模型
1、物理层(Physical Layer)
负责数据的物理传输,包括电压、针脚定义、电缆规格等。典型协议有Ethernet(物理层部分)、USB、HDMI。
2、数据链路层(Data Link Layer)
提供结点到结点的可靠传输,处理帧同步、错误检测(如CRC)和MAC地址寻址。典型协议包括以太网(Ethernet)、PPP、HDLC。
3、网络层(Network Layer)
负责路由选择、逻辑寻址(如IP地址)和分组转发。典型协议有IP、ICMP、ARP、OSPF。
4、传输层(Transport Layer)
提供端到端的连接管理,确保数据可靠或高效传输。典型协议包括TCP(可靠传输)、UDP(无连接传输)。
5、会话层(Session Layer)
管理会话的建立、维护和终止,支持数据同步。典型协议有NetBIOS、RPC。
6、表示层(Presentation Layer)
处理数据格式转换、加密/解密和压缩。典型协议包括SSL/TLS(加密)、JPEG(数据格式)。
7、应用层(Application Layer)
为用户应用程序提供网络服务接口。典型协议有HTTP、FTP、SMTP、DNS。
二、TCP/IP四层模型
网络接口层(Network Access Layer)
对应OSI的物理层和数据链路层,负责硬件连接和帧传输。典型协议是以太网、Wi-Fi(IEEE 802.11)。
1、网络层(Internet Layer)
对应OSI的网络层,核心协议为IP,其他包括ICMP、IGMP。
2、传输层(Transport Layer)
与OSI传输层一致,主要协议为TCP和UDP。
3、应用层(Application Layer)
合并了OSI的应用层、表示层和会话层功能,涵盖HTTP、DNS、SMTP、SSH等协议
三、对应关系
网络接口层对应OSI的物理层+数据链路层;
网络层与OSI网络层完全对应;
传输层在两个模型中功能相同,均管理端到端通信。
应用层整合了OSI的上三层(会话层、表示层、应用层),简化了设计。
(3)详细介绍什么是最大堆/最小堆。
答:
最大堆:每个节点的值都大于或等于其子节点的值,根节点是堆中的最大值。
最小堆:每个节点的值都小于或等于其子节点的值,根节点是堆中的最小值。
(4)详细介绍什么是二分搜索树。
答:二分搜索树是一种特殊的二叉树数据结构:
每个节点包含一个键和对应的值。
左子树中所有节点的键均小于当前节点的键。
右子树中所有节点的键均大于当前节点的键。
左右子树也分别为二分搜索树。
2.HR面试题
(1)我们非常欣赏你的能力,但目前只能提供比你期望薪资低20%的offer。在这种情况下,你会接受这份工作吗?如果接受,你对未来薪资增长有什么期望?如果不接受,你的底线是什么?
答:我可以接受,首先非常感谢贵司的认可,我对这个岗位非常感兴趣,尤其看重团队的发展方向和行业前景,其次我的技能与岗位要求高度契合,相信能为团队创造价值,但是如果加入贵司,我希望在6-12个月内通过业绩证明价值,届时根据贡献重新评估薪资,可以将薪资提升到市场价值或者更高。
(2)我们公司经常需要加班到深夜,有时甚至需要周末工作。你如何看待这种工作强度?你认为工作与生活的理想平衡点在哪里?
答:我认为工作强度较高是许多行业面临的现实情况,我会在在保证项目进度的前提下,更高效的时间管理和任务优先级划分可能比单纯延长工作时间更有效。对我个人而言,我会找到既能完成工作职责,又能保持身心健康和家庭生活的平衡模式。
(3)你认为自己最大的优势是什么?这个优势如何帮助你胜任我们这个岗位?
答:我的优势是有着丰富的解决问题的经验,这么多年的学校学习当中,我也掌握了一套属于自己的学习方法能够快速解决问题,其次我的团队合作经验也是非常丰富的,我在大学期间担任了我们学校的学生会会长,我也了解了许多同学,也与他们一起实现了很多不可能的事,所以这是我的优势,这个优势也可以让我与同事更好的相处,使团队更加的融洽,工作效率更高。
(4)你认为这份工作能为你带来什么?你能为公司创造什么价值?
答:我认为这个项目管理岗位提供的复杂场景决策机会,能系统提升我的风险评估能力,这正是我三年运营经验后希望突破的方向。贵司的行业资源也能帮助我构建更完整的供应链知识体系。基于对贵司智能客服项目的了解,我过去搭建的客户标签系统可直接复用,预计能缩短20%的模型训练周期。在上一家公司,类似的优化为季度营收贡献了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 resultprint(func([5, 3, 7, 2]))
答:[4,4,6,4]
函数 func 接收一个列表 lst 作为输入,遍历列表中的每个元素并根据特定规则修改元素值,最终返回修改后的新列表。
(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:breakelse:result.append(num + 1)return resultprint(func([9, 4, 12, 7, 14]))
答:函数 func 对 lst 中的每个元素进行条件判断和操作,生成新列表 result ,然后输出。
[3, 8, 4, 8]
(3)以下代码运行结果是?并阐述函数func的主要功能是什么?
def func(nums1, m, nums2, n):i = j = k = 0temp = nums1.copy()while i < m and j < n:if temp[i] < nums2[j]:nums1[k] = temp[i]i += 1else:nums1[k] = nums2[j]j += 1k += 1while i < m:nums1[k] = temp[i]i += 1k += 1return nums1nums1 = [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 = 0for i in range(len(lst)):if i % 2 == 0:total += lst[i]else:total -= lst[i]if total < 0:total = 0return totalprint(func([5, 3, 2, 7, 1]))
答:6
函数根据元素的奇偶性进行加减操作。
偶数时,将元素值加到 total。
奇数时,从 total 中减去元素值。
在每次加减操作后,检查 total 是否为负数。若为负,则total 为 0。
最终返回 total 的累计结果,保证其为非负数。
(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 + oddsprint(func([3, 1, 4, 1, 5, 9, 2, 6, 5]))
答:[2, 4, 6, 9, 5, 5, 3, 1, 1]
func将一个列表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 + lstdata = [1, 2, 3, 4, 5]
print(func(data))
答:[1, 3, 5, 4, 8]
将奇数保留原值,加入 result。
将偶数从列表头部移除,乘以 2 后放入列表尾部。
最终返回 result与剩余 lst的合起来的列表。
(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]))breakreturn resultprint(func([5, 3, 7, 2, 8]))
答:[(5, 5), (3, 7), (2, 8)]
func 接收一个列表 lst,返回一个列表,每个列表包含列表中两个不同的元素,且这两个元素的和为 10。
(8)编写程序,反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
答:
# Your Codes
```def a(n):if n <= 1:return Falseif n == 2:return Trueif n % 2 == 0:return Falsefor i in range(3, int(n**0.5) + 1, 2):if n % i == 0:return Falsereturn True
def b(n):s = str(n)return s == s[::-1]
def c(n):return int(str(n)[::-1])
def d(count):e = []n = 2while len(e) < count:if a(n) and not b(n):reversed_n = c(n)if a(reversed_n):e.append(n)n += 1return e
e = d(100)
for i in range(0, 100, 10):print(', '.join(map(str, e[i:i+10])))**(9)编写程序,梅森素数**如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数输出p≤31的所有梅森素数答:```python
# Your Codes
```def a(n):if n <= 1:return Falseif n == 2:return Trueif n % 2 == 0:return Falsefor i in range(3, int(n**0.5) + 1, 2):if n % i == 0:return Falsereturn True
def b(p):c = []for p in range(2, p + 1):if a(p):mersenne = (1 << p) - 1if a(mersenne):c.append((p, mersenne))return c
s = b(31)
for p, m in s: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 a(i):total = 0.0for k in range(1, i + 1):total += k / (k + 1)return total
print("i\tm(i)")
for i in range(1, 21):if i == 20:print(f"{i}\t17/35")else:print(f"{i}\t{a(i):.3f}")**(11)编写程序,组合问题**有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?答:```python
# Your Codes
```a = [1, 2, 3, 4]
b = 0
c = []
for i in a:for j in a:for k in a:if i != j and j != k and i != k:num = i * 100 + j * 10 + kc.append(num)b += 1
print(f"总共有 {b} 个三位数")
print("具体数值为:", c)**(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
```import mathdef a(n):e = 0for i in range(n):e += 1 / math.factorial(i)return eprint(a(10))**(13)编写程序,完全数**如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1**输入输出描述**输入一个正整数输出该数是否为完全数**示例1**> 输入:
>
> 6
>
> 输出:
>
> Yes**示例2**> 输入:
>
> 9
>
> 输出:
>
> No答:```python
# Your Codes
``def a(n):if n <= 1:return Falseb = 1for i in range(2, int(n ** 0.5) + 1):if n % i == 0:b += iif i != n // i:b += n // ireturn b == n
num = int(input())
print("Yes" if a(num) else "No")