1.技术面试题
(1)详细描述单调栈的工作原理和应用场景
答:工作原理:维护一个栈结构,栈中元素保持单调递增或单调递减的顺序。遍历数据时,新元素入栈前,弹出栈顶所有不满足单调关系的元素,再将新元素入栈,确保栈的单调性。
应用场景:解决下一个元素更大的问题,如数组中后面一个元素比前面一个入栈的元素大,则需要上一个元素出栈,然后大的那个元素入栈。
(2)详细描述单调队列的工作原理和应用场景
答:工作原理:维护队列内元素单调性,不管是单调递增还是单调递减,新元素入队前,移除队尾破坏单调性的元素;若队首元素无效(如滑动窗口外)也移除,保证队列单调且有效
应用场景:解决滑动窗口最值问题,或优化动态规划,辅助快速取区间极值做状态转移 。
2.HR面试题
(1)如果竞争对手用双倍薪资挖你,你会怎么选择?
答:首先思考一下我现在的公司是否还是稳定的,我是否还有成长的空间,如果没有则可以考虑,如果我现在的公司还是很稳定,工作环境和氛围很号,我就会委婉的对竞争对手。
(2)我们觉得你今天表现一般,不符合岗位要求,你有什么想说的?
答:感谢您直言反馈,我理解面试表现没达到预期。可能因紧张,一些与岗位相关的内容没清晰呈现。我的能力是长期积累沉淀的,您现在可能没有看见我真实的样貌,若您能给我次机会,我相信在以后的工作岗位上您能够看见我的表现的。
3.选择题
(1)在Python中,以下哪个不是循环控制语句?
A. break
B. continue
C. pass
D. return
答:D a是跳出循环,b是跳过当前循环,进入下一个循环,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 循环五次,从0开始到4,当i=3时会跳过当前循环,进入下一次循环
(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
b 是判断奇数
c 和d都是除2
(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
原代码 while i < 10 ,循环到 i=9就结束,无法包含 10。要计算 1 到 10 的和,需让循环条件包含 10,即i <= 10 。B 会改变累加数字间隔,C 错误修改累加逻辑,D 会引入多余数字,所以选 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 这个外层循环是取不到3的,内存取不到2
(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和while循环。for 变量 in range ():代码块 while 条件表达式 :代码块
for适用于已知循环次数 ,while适用于循环次数不确定,靠条件判断
(2)Python中有哪些循环控制语句?它们各自的作用是什么?请给出示例说明。
答:break:立即终止当前所在循环),跳出循环体执行后续代码。
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()
"""输出 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"""
continue:跳过当前循环,进入下一次循环
i = 0
while i < 5:
i += 1
if i == 3:
continue
print(i, end=' ')
else:
print("Done") #输出:1 2 4 5 Done
else:循环正常结束时执行
for i in range(3):
print(i)
else:
print("循环正常结束") # 输出 0、1、2 后,执行该句
(3)在Python的for循环中,range()函数扮演着重要角色。请详细说明range()函数的语法、参数含义和使用方法,并给出至少3个不同用法的示例。
答:range() 语法:range([start,] stop [, step])
start(可选):起始值,默认 0,整数,生成序列从 start 开始。
stop(必选):结束值。到stop值前一个结束。
step(可选):步长,默认 1,整数,控制序列中数的间隔,step>0 递增,step<0 递减;
只有stop
for i in range(5):
print(i) # 输出 0、1、2、3、4 ,默认 start=0,step=1,生成 0 到 4 的整数序列
有start和stop
for i in range(2, 7):
print(i) # 输出 2、3、4、5、6 ,start=2,stop=7,生成 2 到 6 的整数序列
三个参数都有
for i in range(1, 10, 2):
print(i) # 输出 1、3、5、7、9 生成间隔为 2 的递增序列
(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())
#中心点到边界的距离
left1=x1-w1/2
right1=x1+w1/2
top1=y1+h1/2
bottom1=y1-h1/2
left2=x2-w2/2
right2=x2+w2/2
top2=y2+h2/2
bottom2=y2-h2/2
if (left1 <= left2 and right1 >= right2 and top1 >= top2 and bottom1 <= bottom2) or (left2 <= left1 and right2 >= right1 and top2 >= top1 and bottom2 <= bottom1):
print("包含")
elif (right1 >= left2 and left1 <= right2 and top1 >= bottom2 and bottom1 <= top2):
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
答:
for i in range(7):
for k in range(6 - i):
print(" ", end=" ")
num = 1
for j in range(i + 1):
print(f"{num:3}", end="")
num *= 2
num //= 4
for j in range(i):
print(f"{num:3}", end="")
num //= 2
print()
(7)编写代码,打印如下星星图案
*
***
*****
*******
*********
*******
*****
***
*
答:
n = 9
mid = n // 2
for i in range(1, n + 1):
kg = abs(i - mid - 1)
for k in range(kg):
print(" ", end="")
count = n - 2 * kg
for j in range(count):
print("*", end="")
print()
(8)编写代码,求最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
示例1
输入:
3 9
输出:
9
示例2
输入:
4 6
输出:
12
答:
a, b = map(int, input().split())
max_num = max(a, b)
while True:
if max_num % a == 0 and max_num % b == 0:
print(max_num)
break
max_num += 1