Python第三次作业
1.技术面试题
(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?
答:进程:程序执行的实例,拥有独立的内存空间和系统资源。比如运行中的浏览器就是一个进程,就是Windows中的任务管理器。在Linux中,使用ps -aux
或ps -ef
命令查看进程,使用kill -进程号命令来终止进程。
线程:进程内的执行单元,共享进程资源。比如浏览器中打开的每个标签页都可以看作一个线程。使用top
命令查看线程,pstree -p
命令可以查看线程的层级。
守护进程:在后台长期运行的特殊进程。使用systemctl start/stop 服务名
命令来管理。
(2)请详细描述OSI七层模型和TCP/IP四层模型,并说明它们之间的对应关系。每一层的主要功能是什么?各层有哪些典型的协议?
答:
OSI七层----TCP/IP四层---------主要功能------------典型协议
应用层--------应用层--------------用户接口----------------HTTP, FTP, SMTP
表示层--------(合并)---------数据格式转换/加密----SSL, JPEG
会话层--------(合并)------------建立/维护会话----------NetBIOS
传输层--------传输层-------------端到端连接------------TCP, UDP
网络层---------网络层-------------路由寻址--------------IP, ICMP
数据链路层—链路层----------帧传输/物理寻址----Ethernet, PPP
物理层---------(合并)-------------比特流传输------------RJ45, 光纤
(3)详细介绍什么是最大堆/最小堆。
答:最大堆:父节点值>=
子节点的完全二叉树,根节点是最大值。用于优先队列。
最小堆:父节点值<=
子节点的完全二叉树,根节点是最小值。
(4)详细介绍什么是二分搜索树。
答:左子树所有节点值 < 根节点值 < 右子树所有节点值的二叉树。查找/插入/删除时间复杂度O(log n)。
2.HR面试题
(1)我们非常欣赏你的能力,但目前只能提供比你期望薪资低20%的offer。在这种情况下,你会接受这份工作吗?如果接受,你对未来薪资增长有什么期望?如果不接受,你的底线是什么?
答:面试官您好,首先非常感谢公司对我的认可。
关于薪资问题,我非常理解公司在初期可能有一定的预算限制。如果岗位的发展前景和团队氛围符合我的职业规划,我愿意在初期接受稍低的薪资。不过,我希望能在入职后的3-6个月内,通过绩效考核或项目贡献,争取调整到我的期望薪资水平。如果短期内难以调整,我的底线是薪资差距不超过10%,同时希望公司能在其他方面给予补偿。
(2)我们公司经常需要加班到深夜,有时甚至需要周末工作。你如何看待这种工作强度?你认为工作与生活的理想平衡点在哪里?
答:面试官您好,我理解在项目关键阶段可能需要加班,只要工作有意义且团队共同奋斗,我愿意配合。不过,我认为高效的时间管理比长时间加班更重要。比如,通过优化工作流程或明确优先级,可以减少不必要的加班。我个人理想的工作生活平衡是工作日高效完成核心任务,周末至少保留1天休息时间用于充电。当然,如果有紧急任务,我也会以团队为重。
(3)你认为自己最大的优势是什么?这个优势如何帮助你胜任我们这个岗位?
答:面试官您好,我最大的优势是自动化思维和故障快速定位能力。在云原生运维方向,我通过实践深刻理解到,高效的运维不是靠手动操作,而是通过自动化工具和系统化监控来提升效率。
虽然我是云原生运维的初学者,但通过自主学习的知识让我在个人项目中实现基础的应用的自动化部署。此外,我习惯用文档记录问题排查过程,比如曾整理过常见故障排查问题,总结学习的重点,这种系统化的总结能力能帮助团队减少重复性问题处理时间。
在贵公司的岗位中,我的学习能力可以快速掌握内部工具链和规范,而系统化思维能协助优化运维流程。
(4)你认为这份工作能为你带来什么?你能为公司创造什么价值?
答:面试官您好,这份工作能让我在真实的实践环境中深化技术实践,同时我也期待在团队中培养生产级的严谨思维。
我能为公司带来以下几个方面的价值:自动化增效:将重复性操作(如日志收集、监控告警)转化为脚本/工具,减少人工干预。稳定性贡献:严格执行变更管理流程,并建立应急预案文档库,降低故障恢复时间。这份工作能让我在这个领域深入实践,同时提升我的工程化能力,帮助团队降低沟通成本。
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的功能:处理相邻元素,若当前元素小于后面相邻元素,则+1,如果大于后面元素则-1,末位元素×2。
(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]))
答:
运行结果
[3, 8, 4, 8, 28]
函数func的功能:数字能被3整除,则除3,能被2整除,则乘2;当数字>10且为偶数时立即终止;如果不能被3整除,也不能被2整除,数字也没大于10,则+1。
(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]))
答:
运行结果
1
函数func的功能:如果i为偶数,索引相加;如果为奇数,索引相减;如果total小于0,total则变为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 + oddsprint(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 + lstdata = [1, 2, 3, 4, 5]
print(func(data))
答:
运行结果
[1, 3, 5, 4, 8]
函数func的功能:分离奇偶数,如果 i 是偶数,则把该偶数x2,如果是奇数,则不变,最后拼接奇数和处理后的偶数。
(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]))
答:
运行结果
[(3, 7), (2, 8)]
函数func的功能:找出两个数字之和为10的i,j有序对。
(8)编写程序,反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
答:
def is_prime(n):if n < 2: return Falsefor i in range(2, int(n**0.5)+1):if n % i == 0:return Falsereturn Truecount = 0
num = 10
while count < 100:rev = int(str(num)[::-1])if num != rev and is_prime(num) and is_prime(rev):print(f"{num}", end=' ')count += 1if count % 10 == 0:print()num+= 1
(9)编写程序,梅森素数
如果一个素数可以写成2p−12^p-12p−1的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
答:
def is_prime(n):if n < 2:return Falsefor i in range(2, int(n**0.5)+1):if n % i == 0:return Falsereturn Truefor p in range(2, 32):m = (1 << p) - 1if is_prime(m):print(f"{m}")
(10)编写程序,数列求和
编写一个函数计算下面的数列:
m(i)=12+23+...+ii+1m(i) = \frac{1}{2} + \frac{2}{3} + ... + \frac{i}{i + 1}m(i)=21+32+...+i+1i
并输出测试结果:
i m(i)
1 0.500
2 1.16
...
19 16.40
20 17/35
答:
def calculate_sum(num):total = 0for n in range(1, num + 1):total += n / (n + 1)return totalprint("i\tm(i)")
for i in range(1, 21):result = calculate_sum(i)if i < 19:print(f"{i}\t{result:.3f}")else:print(f"{i}\t{result:.2f}")
(11)编写程序,组合问题
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
答:
from itertools import permutations as perm
nums = '1234'
print(f"共有: {len(list(perm(nums, 3)))}个")for p in perm(nums, 3):print(''.join(p), end=' ')
(12)编写程序,计算e
你可以使用下面的数列近似计算e
e=1+11!+12!+13!+14!+...+1i!
e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!}
e=1+1!1+2!1+3!1+4!1+...+i!1
当i越大时,计算结果越近似于e
答:
def e(n):total = 1jiecheng = 1for i in range(1, n + 1):jiecheng *= itotal += 1 / jiechengreturn total
print(f"e ≈ {e(10):.10f}")
(13)编写程序,完全数
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
示例1
输入:
6
输出:
Yes
示例2
输入:
9
输出:
No
答:
def is_perfect(n):if n <= 1:return Falsefactors = {1}for i in range(2, int(n**0.5)+1):if n % i == 0:factors.update({i, n//i})return sum(factors) == nnum = int(input("Please input a num:"))
print(f"Yes" if is_perfect(num) else "No")