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)编写程序,组合问题**
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
答:
```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 + 1,28 = 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")