1.技术面试题
(1)详细描述单调栈的工作原理和应用场景
答:单调栈是一种特殊的栈,其核心特点是栈内元素保持单调递增或递减, 用于高效解决 “寻找下一个更大 / 更小元素” 等问题。
工作原理:
-
单调递增栈:栈顶元素 ≤ 栈底元素(从栈底到栈顶递增)。
-
单调递减栈:栈顶元素 ≥ 栈底元素(从栈底到栈顶递减)。
-
入栈规则:若新元素破坏单调性,则弹出栈顶元素,直至满足单调性后入栈。
典型应用场景
- 下一个更大 / 更小元素
- 数组
[2, 1, 3],右侧第一个更大元素为[3, 3, -1]。
- 数组
- 接雨水问题
- 计算直方图中能容纳的水量。
- 最大矩形面积
- 求直方图中最大矩形面积
- 下一个更大 / 更小元素
(2)详细描述单调队列的工作原理和应用场景
答:单调队列是一种特殊队列,核心特点是队列元素保持单调递增或递减,常用于高效解决滑动窗口类问题。
工作原理:
-
单调递增队列:队首到队尾元素递增(队首最小)。
-
单调递减队列:队首到队尾元素递减(队首最大)。
-
入队规则:若新元素破坏单调性,则从队尾弹出元素,直至满足单调性后入队。
-
出队规则:队首元素过期时(如窗口滑动超出范围),从队首删除。
应用场景:
1.滑动窗口最大值 / 最小值
- 示例:数组
[3, 1, 4, 2],窗口大小 3,最大值为[4, 4]。
2.股票买卖问题(含冷却期)
- 维护可能的买入价格,确保卖出后有冷却期。
3.子数组和的最大值(限制长度)
- 快速找到区间内的最小前缀和,优化动态规划。
- 示例:数组
2.HR面试题
(1)如果竞争对手用双倍薪资挖你,你会怎么选择?
答:我会从职业发展、公司价值观等方面进行综合评估。薪资固然是重要因素,但并非唯一标准。当前的工作,对于我在核心业务上的积累和长期发展更为关键。若新机会仅仅是薪资翻倍,却缺乏与职业目标的匹配度(如业务稳定性等),我更倾向于深耕现有平台,长期沉淀,与团队共同为公司创造价值。
(2)我们觉得你今天表现一般,不符合岗位要求,你有什么想说的?
答:谢谢您的坦然指出。面试是双向展示,可能我部分优势未能充分呈现。我曾主导某团运维方面的项目,大大提升了应用处理效率,这些能力与贵司岗位高度契合。若有机会,我会以行动证明价值。同时也希望您能具体指出我的不足之处,这对我未来的职业成长很有帮助,谢谢!
3.选择题
(1)在Python中,以下哪个不是循环控制语句?
A. break
B. continue
C. pass
D. return
答:C
(2)以下代码的输出结果是什么?
for i in range(5):
if i == 3:
continue
print(i, end=' ')
A. 0 1 2 3 4
B. 0 1 2 4
C. 0 1 2
D. 3
答:B
(3)完成以下代码,使其能够打印出1到100之间所有的偶数:
for i in range(1, 101):
if ______:
print(i, end=' ')
A. i % 2 == 0
B. i % 2 == 1
C. i / 2 == 0
D. i // 2 == 0
答:A
(4)以下代码有一个错误,导致它无法正确计算1到10的和。请选择正确的修改方案:
sum = 0
i = 1
while i < 10:
sum += i
i += 1
print(sum)
A. 将i < 10改为i <= 10
B. 将i += 1改为i += 2
C. 将sum += i改为sum = sum + i + 1
D. 将i = 1改为i = 0
答:A
(5)以下代码的输出结果是什么?
for i in range(3):
for j in range(2):
print(f"({i},{j})", end=' ')
A. (0,0) (0,1) (1,0) (1,1) (2,0) (2,1)
B. (0,0) (1,0) (2,0) (0,1) (1,1) (2,1)
C. (0,0) (0,1) (0,2) (1,0) (1,1) (1,2)
D. (0,0) (1,1) (2,2)
答:A
(6)完成以下代码,使其能够打印出斐波那契数列的前10个数:
a, b = 0, 1
for _ in range(10):
print(a, end=' ')
______
A. a, b = b, a + b
B. a, b = a + b, b
C. a, b = b, a
D. a, b = a + 1, b + 1
答:A
(7)以下代码的输出结果是什么?
i = 0
while i < 5:
i += 1
if i == 3:
continue
print(i, end=' ')
else:
print("Done")
A. 1 2 3 4 5 Done
B. 1 2 4 5 Done
C. 1 2 4 5
D. 1 2 Done
答:B
(8)以下代码的输出结果是什么?
for i in range(1, 5):
for j in range(1, 5):
if i * j > 10:
break
print(f"{i}*{j}={i*j}", end=" ")
print()
A.
1*1=1 1*2=2 1*3=3 1*4=4
2*1=2 2*2=4 2*3=6 2*4=8
3*1=3 3*2=6 3*3=9 3*4=12
4*1=4 4*2=8 4*3=12 4*4=16
B.
1*1=1 1*2=2 1*3=3 1*4=4
2*1=2 2*2=4 2*3=6 2*4=8
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8
C.
1*1=1 1*2=2 1*3=3 1*4=4
2*1=2 2*2=4 2*3=6 2*4=8
3*1=3 3*2=6 3*3=9
D.
1*1=1 1*2=2 1*3=3 1*4=4
2*1=2 2*2=4 2*3=6 2*4=8
答:B
(9)以下代码的输出结果是什么?
for i in range(4):
for j in range(4):
if (i + j) % 2 == 0:
print("*", end="")
else:
print("#", end="")
print()
A.
****
####
****
####
B.
*#*#
#*#*
*#*#
#*#*
C.
*#*#
*#*#
*#*#
*#*#
D.
****
****
****
****
答:B
(10)以下代码的输出结果是什么?
count = 0
for i in range(1, 5):
for j in range(1, 5):
for k in range(1, 5):
if i != j and j != k and i != k:
count += 1
print(count)
A. 24
B. 36
C. 60
D. 64
答:A
4.问答题
(1)Python中有哪几种基本的循环结构?请简要说明它们的语法和适用场景。
答:
for循环:遍历可迭代对象(如列表、字符串),语法:for 变量 in 可迭代对象: 代码块。while循环:条件满足时重复执行,语法:while 条件: 代码块。- 适用场景:
for用于已知次数的遍历,while用于未知次数的条件循环。
(2)Python中有哪些循环控制语句?它们各自的作用是什么?请给出示例说明。
答:
break:终止整个循环。
示例:for i in range(5): if i == 3: break; print(i)→ 输出0 1 2。continue:跳过当前循环,继续下一次。
示例:for i in range(5): if i == 3: continue; print(i)→ 输出0 1 2 4。pass:占位语句,无实际作用。
示例:for i in range(5): if i == 3: pass; print(i)→ 输出0 1 2 3 4。
(3)在Python的for循环中,range()函数扮演着重要角色。请详细说明range()函数的语法、参数含义和使用方法,并给出至少3个不同用法的示例。
答:
- 语法:
range(start, stop, step),生成从start到stop-1的整数序列,步长为step(默认 1)。 - 示例:
range(5)→0, 1, 2, 3, 4range(2, 7)→2, 3, 4, 5, 6range(1, 10, 2)→1, 3, 5, 7, 9
(4)什么是嵌套循环?请解释嵌套循环的工作原理。
答:
- 定义:在一个循环内部嵌套另一个循环。
- 工作原理:外层循环每执行一次,内层循环完整执行一轮。
(5)编写代码,判断两个矩形的关系
题目描述
判断两个矩形之间的关系:包含,重叠,相离

输入输出描述
输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高
输出两者的关系
示例1
输入:
2.5 4 2.5 43
1.5 5 0.5 3
输出:
包含
示例2
输入:
1 2 3 5.5
3 4 4.5 5
输出:
重叠
示例3
输入:
1 2 3 3
40 45 3 2
输出:
相离
答:
# 输入两个矩形的信息
x1, y1, w1, h1 = map(float, input().split())
x2, y2, w2, h2 = map(float, input().split())
# 计算边界
r1_left = x1 - w1/2
r1_right = x1 + w1/2
r1_top = y1 + h1/2
r1_bottom = y1 - h1/2
r2_left = x2 - w2/2
r2_right = x2 + w2/2
r2_top = y2 + h2/2
r2_bottom = y2 - h2/2
# 判断关系
if (r2_left >= r1_left and r2_right <= r1_right and
r2_bottom >= r1_bottom and r2_top <= r1_top):
print("包含")
elif (r2_left > r1_right or r2_right < r1_left or
r2_bottom > r1_top or r2_top < r1_bottom):
print("相离")
else:
print("重叠")
(6)编写代码,打印如下数字图案
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
1 2 4 8 16 32 64 32 16 8 4 2 1
答:
n = 7
for i in range(n):
# 生成中间行的数值列表
nums = [2**j for j in range(i+1)]
line = nums + nums[-2::-1] # 对称复制
# 格式化输出
line_str = ' '.join(map(str, line))
print(line_str.center(127)) # 总宽度127,居中对齐
(7)编写代码,打印如下星星图案
*
***
*****
*******
*********
*******
*****
***
*
答:
n = 5
# 上半部分
for i in range(n):
print(' '*(n-i-1) + '*'*(2*i+1))
# 下半部分
for i in range(n-2, -1, -1):
print(' '*(n-i-1) + '*'*(2*i+1))
(8)编写代码,求最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
答:
a, b = map(int, input().split())
# 求最大公约数(辗转相除法)
def gcd(x, y):
while y:
x, y = y, x % y
return x
# 最小公倍数 = 两数之积 / 最大公约数
lcm = a * b // gcd(a, b)
print(lcm)
2854



被折叠的 条评论
为什么被折叠?



