1.技術面試題
(1)詳細描述單調棧的工作原理和應用場景
答:
原理
維護棧內元素單調遞增 / 遞減,新元素入棧前,彈出破壞單調性的棧頂,保持單調。
應用場景
排隊比身高,搭積木找最大的空地
(2)詳細描述單調隊列的工作原理和應用場景
答:
原理
隊列內元素單調 遞增 / 遞減,新元素入隊時,移除隊尾破壞單調性的元素;按需(如滑動窗口)移除隊首無效元素,動態維護區間極值。
應用場景
滑動窗口最值(如窗口內最大 / 小值)、數據流實時極值計算。
2.HR面試題
(1)如果競爭對手用雙倍薪資挖你,你會怎么選擇?
答:薪資誘人,但我更看重當下團隊的適配度。要是現在工作順心、有成長,不會為錢盲目跳。當然要是這邊長期不重視員工價值,那也得重新考慮,不過目前優先選留下,畢竟錢之外的東西也重要。
(2)我們覺得你今天表現一般,不符合崗位要求,你有什么想說的?
答:謝謝您可以直接告訴我,今天確實可能因為緊張沒完全展現好,要是能麻煩您具體說說,那些地方和崗位要求有差距,哪怕這次沒機會,這些建議也能幫我下次做得更好。對我來說,搞清楚問題在哪兒,比什么都重要,辛苦您了。
3.選擇題
(1)在Python中,以下哪個不是循環控制語句?
A. break
B. continue
C. pass
D. return
答:D(pass 是占位語句,在循環里可起到空語句的作用)
(2)以下代碼的輸出結果是什么?
for i in range(5):if i == 3:continueprint(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 += ii += 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 += 1if i == 3:continueprint(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:breakprint(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循環
-
語法:for 變量 in 可迭代對象 :循環體 【for i in range(5): print(i)】
-
適用場景:已知循環次數,或遍歷次序元素時用
while循環 -
語法:while 條件: 循環體 【while num <10 : num+=1】
-
適用場景:有明顯的循環條件
(2)Python中有哪些循環控制語句?它們各自的作用是什么?請給出示例說明。
答:break循環控制語句和continue循環控制語句
break循環環控制語句
**作用:**用于在循環執行過程中,當滿足一定條件時,可以跳出循環(提前結束)
#示例
for i in range(5):if i == 3:breakprint(i) # 輸出 0、1、2
continue循環控制語句
**作用:**用于在循環結構中,當滿足一定條件時可以跳過本次循環,接著下一輪循環。
#示例
for i in range(5):if i == 3:continueprint(i) # 輸出 0、1、2、4
(3)在Python的for循環中,range()函數扮演著重要角色。請詳細說明range()函數的語法、參數含義和使用方法,并給出至少3個不同用法的示例。
答:
range()函數的語法、參數含義和使用方法
range(a)
:a
為結束邊界,生成0
到a- 1
的序列。range(a, b)
:a
是起始值,b
是結束邊界,生成a
到b
的序列,步長默認1
。range(a, b, c)
:a
為步長,控制間隔,生成b
開始、按c
遞增(c>0
)或遞減(c<0
)到c - 1
的序列。
# 用法1:一個參數,生成 0-4
for i in range(5):print(i)
# 用法2:兩個參數,生成 2-5
for i in range(2,6):print(i)
# 用法3:三個參數,生成 1、3、5、7、9(步長2)
for i in range(1,10,2):print(i)
(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(" "))
distance=((x1-x2)**2+(y1-y2)**2)**0.5
if distance+w2/2<=w1/2 and distance+h2/2<=h1/2 or distance+w1/2<=w2/2 and distance+h1/2<=h2/2:print("包含")
elif distance>w1/2+w2/2:print("相離")
else:print("重疊")
(6)編寫代碼,打印如下數字圖案
11 2 11 2 4 2 11 2 4 8 4 2 11 2 4 8 16 8 4 2 11 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(1,8):for k in range(7-i):print(" ",end=" ")for j in range(i):print(2**j,end=" ")for j in range(i-2,-1,-1):print(2**j,end=" ")print()
(7)編寫代碼,打印如下星星圖案
菱形高度n,并打印出該高度下的菱形
****************
*************************
答:
n = 9
for i in range(1, n + 1):for j in range(abs(i - (n + 1) // 2)):print(" ", end="")stars = n - 2 * abs(i - (n + 1) // 2)for k in range(stars):print("*", end="")print()
(8)編寫代碼,求最小公倍數
題目描述
輸入兩個正整數,計算其最小公倍數,例如4和2的最小公倍數是4,3和5的最小公倍數是15
輸入輸出描述
輸入兩個正整數
輸出最小公倍數
示例1
輸入:
3 9
輸出:
9
示例2
輸入:4 6
輸出:
12
num1,num2=map(int,input().split(" "))
max_num=max(num1,num2)
for i in range(max_num,num1*num2+1):if i % num1==0 and i % num2 ==0:print(i)break