(1)解释Linux中的进程、线程和守护进程的概念,以及如何管理它们?
答:进程是Linux中资源分配的基本单位,代表程序在内存中的执行实例,拥有独立的地址空间和系统资源。通过ps、top命令查看,kill命令终止,或使用systemctl管理服务进程。
线程是进程内的轻量级执行单元,共享进程资源(如内存),切换开销小。Linux通过POSIX线程(pthread)库实现,可用htop查看多线程进程,pstree -p显示线程关系,但需依赖进程管理工具间接控制。
守护进程是后台运行的特殊进程,脱离终端控制,通常由系统启动时通过init/systemd加载(如httpd、sshd)。使用systemctl(Systemd系统)或service命令管理,可配置开机自启。
管理方法:
进程:ps aux查看kill -9 PID强制终止。
线程:依赖进程工具,或通过gdb调试。
守护进程:systemctl start/stop/enable 服务名,日志通常存于/var/log。
(2)请详细描述OSI七层模型和TCP/IP四层模型,并说明它们之间的对应关系。每一层的主要功能是什么?各层有哪些典型的协议?
答:OSI七层模型
TCP/IP四层模型
对应关系
OSI七层模型与TCP/IP四层模型的对应关系可通过功能整合来理解:TCP/IP模型的网络接口层合并了OSI模型中的物理层与数据链路层,负责硬件连接、信号传输及数据帧的封装与解析;网际层对应OSI的网络层,承担IP地址分配、数据包路由及跨网络传输的核心功能;传输层在两个模型中功能一致,均通过TCP提供可靠连接或通过UDP实现高效无连接传输;TCP/IP的应用层则整合了OSI的会话层、表示层和应用层,直接为用户提供网络服务接口,同时涵盖数据格式转换、加密压缩及会话管理等上层功能。这种分层差异体现了理论框架(OSI)与实际应用(TCP/IP)的设计侧重,前者强调标准化解耦,后者更注重协议栈的简洁性与互联网兼容性。
(3)详细介绍什么是最大堆/最小堆。
答:最大堆:每个节点的值大于或等于其子节点的值。根节点为整棵树的最大值。
最小堆:每个节点的值小于或等于其子节点的值。根节点为整棵树的最小值。
(4)详细介绍什么是二分搜索树。
答:二分搜索树是一种有序的二叉树,满足以下性质:
节点关系:对于任意节点,其左子树中的所有节点值均小于该节点值,右子树中的所有节点值均大于该节点值。
结构特性:每个节点最多有两个子节点(左子节点和右子节点),且无重复节点(或允许重复时,通过额外规则处理,如右子树允许等于父节点的值)。
(1)我们非常欣赏你的能力,但目前只能提供比你期望薪资低20%的offer。在这种情况下,你会接受这份工作吗?如果接受,你对未来薪资增长有什么期望?如果不接受,你的底线是什么?
答:感谢您的坦诚!我对这个岗位的XX职责非常感兴趣,如果能明确试用期后根据KPI调整薪资的机制,我愿意接受当前offer。比如,若我在半年内完成XX项目或达成XX指标,薪资能否回到期望范围?此外,弹性办公或额外的技能认证支持也能帮助我更快胜任岗位。
(2)我们公司经常需要加班到深夜,有时甚至需要周末工作。你如何看待这种工作强度?你认为工作与生活的理想平衡点在哪里?
答:首先,必要的加班我能理解。之前负责A项目时,为追赶进度,团队连续三周周末无休,最终提前两周上线。但常态化深夜加班可能需要优化流程——比如我们曾用RPA工具减少30%重复工作,释放出时间专注核心任务。关于平衡点,我认为应‘张弛有度’。高强度阶段后可安排调休缓冲,避免身心透支影响效率。请问公司如何帮助员工维持可持续状态?比如是否有弹性考勤或健康支持政策?
(3)你认为自己最大的优势是什么?这个优势如何帮助你胜任我们这个岗位?
答:我认为自己最大的优势是,尤其在[具体场景]中能创造技术价值。例如在某次项目中,通过[C语言/Python/SQL的具体操作]实现了量化成果,这与贵司岗位要求的某些技术高度契合。未来在业务场景中,我可快速应用此经验优化技术指标。
(4)你认为这份工作能为你带来什么?你能为公司创造什么价值?
答:我认为自己能为公司创造两方面核心价值:
第一,技术落地解决业务痛点。上份工作中,我主导优化某电商平台的用户分层模型,通过Python清洗百万级数据,结合SQL特征工程与XGBoost算法,将高价值用户识别准确率从75%提升至88%,推动季度GMV增长15%。若加入贵司,我可快速将此方法论应用于[如精准营销/风控]场景,降低试错成本。第二,自动化工具提升团队效率。曾开发Python数据监控脚本,实时追踪20+核心指标,异常告警响应速度从30分钟缩短至5分钟。未来可针对贵司[如运营日报/供应链预警]等重复性工作,构建自动化体系,释放人力投入创新。对我而言,贵司是理想的成长平台:一方面,我希望通过如高并发系统/海量数据分析等复杂场景,深化分布式计算与实时流处理技术;另一方面,贵司在[行业领域,如金融科技/智能制造]的深耕,能让我从数据视角理解业务全链路,培养技术+商业的双重视角。期待与团队共同实现技术价值与业务目标的双向赋能。
(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]
该函数对输入列表 lst 进行遍历,根据当前元素与下一个元素的比较结果,按以下规则生成新列表:
核心逻辑:通过相邻元素的比较动态调整当前元素值(增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:
break
else:
result.append(num + 1)
return result
print(func([9, 4, 12, 7, 14]))
答:输出为:
[3, 8, 4]
该函数遍历输入列表 lst,根据元素的整除性和大小按以下规则处理:
若元素能被3整除(num % 3 == 0):
将元素整除3(num // 3)并加入结果列表。
若元素能被2整除(num % 2 == 0):
将元素乘以2(num * 2)并加入结果列表;
若该元素大于10,立即终止遍历(break)。
其他情况(既不能被3也不能被2整除):
将元素加1(num + 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]
该函数实现了两个有序数组合并的功能,将 nums2 合并到 nums1 中,并保持升序排列。具体逻辑如下:
初始化指针:
i 指向 nums1 的有效部分末尾(索引 m-1);
j 指向 nums2 的起始(索引 0);
k 指向 nums1 的最终合并位置(索引 0)。
注意:代码中实际使用 temp = nums1.copy() 保存 nums1 的原始有效数据,避免覆盖。
双指针合并:
比较 temp[i] 和 nums2[j],将较小的值放入 nums1[k],并移动对应指针;
重复直到任一数组遍历完毕。
处理剩余元素:
若 nums2 已遍历完,将 temp 中剩余元素直接复制到 nums1;
若 nums1 的有效部分先遍历完,将 nums2 剩余元素追加到 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]))
答:输出为:
1
该函数通过遍历列表 lst,按以下规则计算一个累加值 total:
交替加减:
若当前索引 i 为偶数(i % 2 == 0),将 lst[i] 加到 total;
若当前索引 i 为奇数,将 lst[i] 从 total 减去。
非负约束:
每次操作后检查 total 是否小于0,若是则将其重置为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]
该函数将输入列表 lst 中的元素按奇偶性分离,并分别对奇数和偶数子列表进行排序后合并:
分离奇偶数:
遍历 lst,将偶数(num % 2 == 0)存入 evens 列表,奇数存入 odds 列表。
排序子列表:
对 evens 升序排序(evens.sort());
对 odds 降序排序(odds.sort(reverse=True))。
合并结果:
返回 evens + odds,即偶数在前、奇数在后的合并列表。
(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, 8, 16]
该函数通过遍历列表 lst,按以下规则处理元素并返回新列表:
弹出首元素:每次从 lst 中弹出第一个元素(lst.pop(0)),根据其奇偶性处理:
若为偶数:将该元素乘以 2 后追加到 lst 末尾;
若为奇数:将该元素添加到结果列表 result。
终止条件:当 lst 为空时停止循环(但实际因追加操作可能不会为空,需结合代码逻辑分析)。
合并结果:返回 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]))
break
return result
print(func([5, 3, 7, 2, 8]))
答:输入’func([5, 3, 7, 2, 8])'的输出为:
[(3, 7), (2, 8)]
该函数通过双重循环遍历列表 lst,查找所有元素对 (lst[i], lst[j])(其中 i < j),若它们的和为 10,则将该对元组添加到结果列表 result 中,并在找到第一个满足条件的 j 后立即跳出内层循环(通过 break)。
(8)编写程序,反素数
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
答:
def is_p(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def is_e(n):
if not is_p(n):
return False
rev = int(str(n)[::-1])
return n != rev and is_p(rev)
def get_e(cnt):
res = []
num = 2
while len(res) < cnt:
if is_e(num):
res.append(num)
num += 1
return res
ems = get_e(100)
for i in range(0, 100, 10):
print(' '.join(f"{n:4}" for n in ems[i:i+10]))
(9)编写程序,梅森素数
如果一个素数可以写成2p−12^p-12p−1的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
答:
def is_p(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def find_m():
res = []
for p in range(2, 32):
m = (1 << p) - 1
if is_p(m):
res.append((p, m))
return res
mersenne = find_m()
for p, m in mersenne:
print(f"p = {p:2d}, 梅森素数 = {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
答:
from fractions import Fraction
def cal(i):
total = Fraction(0)
for n in range(1, i + 1):
total += Fraction(n, n + 1)
return total
print("i\t\tm(i)")
for i in [1, 2, 19, 20]:
result = cal(i)
if i == 20:
print(f"{i}\t\t{result}")
else:
print(f"{i}\t\t{float(result):.2f}")
(11)编写程序,组合问题
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
答:
def gen_num():
nums = [1, 2, 3, 4]
res = []
for i in nums:
for j in nums:
for k in nums:
if i != j and i != k and j != k:
num = i * 100 + j * 10 + k
res.append(num)
return res
numbers = gen_num()
print(f"总数量: {len(numbers)}")
print("具体数字:")
for idx, num in enumerate(numbers, 1):
print(num, end="\t")
if idx % 10 == 0:
print()
(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 cal_e(max_i):
e = 1.0
fact = 1
for i in range(1, max_i + 1):
fact *= i
e += 1 / fact
return e
test_cases = [5, 10, 15, 20]
print("i\t\te的近似值")
for i in test_cases:
approx_e = cal_e(i)
print(f"{i}\t\t{approx_e:.10f}")
(13)编写程序,完全数
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
示例1
输入:
6
输出:
Yes
示例2
输入:
9
输出:
No
答:
def is_wan(num):
"""判断num是否为完全数"""
if num <= 1:
return False
sum_div = 1 # 1是所有大于1的数的真因子,初始化为1
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
sum_div += i
other_div = num // i