1.技術面試題
(1)解釋Linux中的進程、線程和守護進程的概念,以及如何管理它們?
答:
進程
概念:程序運行的實例,有獨立資源(如內存),是系統調度的基本單位。
管理:ps
看進程,kill
終止,nice
/renice
調優先級。
線程
概念:進程里的執行單元,多個線程共享進程資源,開銷小,適合并發。
管理:通過編程語言線程庫(如 pthread
)創建 / 控制,gdb
調試。
守護進程
概念:后臺長期運行的進程,無終端關聯,系統啟動時啟動(如 httpd
)。
管理:systemctl
或 service
命令啟動 / 停止 / 查狀態。
(2)請詳細描述OSI七層模型和TCP/IP四層模型,并說明它們之間的對應關系。每一層的主要功能是什么?各層有哪些典型的協議?
答:
OSI 七層模型
- 物理層:傳輸原始比特流(0/1),協議如 Ethernet 物理層、RS-232。
- 數據鏈路層:封裝比特流為幀,通過 MAC 地址通信,處理錯誤,協議如 Ethernet、PPP、ARP。
- 網絡層:通過 IP 地址路由,實現跨網絡傳輸,協議如 IP、ICMP、OSPF。
- 傳輸層:端到端數據傳輸(可靠 / 高效),協議如 TCP(可靠)、UDP(高效)。
- 會話層:建立 / 管理進程會話(如登錄狀態),協議如 RPC。
- 表示層:數據格式轉換、加密(如編碼、SSL),協議如 JPEG、SSL/TLS。
- 應用層:為應用程序提供服務,協議如 HTTP、FTP、DNS。
TCP/IP 四層模型
- 網絡接口層:對應 OSI 物理層 + 數據鏈路層,協議如 Ethernet、ARP。
- 網絡層:同 OSI 網絡層,協議如 IP、ICMP。
- 傳輸層:同 OSI 傳輸層,協議如 TCP、UDP。
- 應用層:合并 OSI 會話層 + 表示層 + 應用層,協議如 HTTP、DNS。
對應關系
- TCP/IP 網絡接口層 → OSI 物理層 + 數據鏈路層
- TCP/IP 網絡層 → OSI 網絡層
- TCP/IP 傳輸層 → OSI 傳輸層
- TCP/IP 應用層 → OSI 會話層 + 表示層 + 應用層
(3)詳細介紹什么是最大堆/最小堆。
答:
最大堆
- 定義:一種完全二叉樹,每個父節點的值 大于等于 其左右子節點的值(根節點是最大值)。
- 特點:根節點為堆中最大元素,插入 / 刪除時需調整結構維持特性。
最小堆
- 定義:一種完全二叉樹,每個父節點的值 小于等于 其左右子節點的值(根節點是最小值)。
- 特點:根節點為堆中最小元素,同樣需動態調整維持特性。
兩者均用于高效獲取極值(如最大 / 最小值),常見于優先隊列、堆排序等場景。
(4)詳細介紹什么是二分搜索樹。
答:
二分搜索樹(BST)是一種有序二叉樹:
- 左子樹所有節點值 小于 根節點值;
- 右子樹所有節點值 大于 根節點值;
- 左右子樹也為二分搜索樹。
特點:支持高效的查找、插入、刪除操作(平均時間復雜度 O (logn)),常用于動態數據的有序管理。
2.HR面試題
(1)我們非常欣賞你的能力,但目前只能提供比你期望薪資低20%的offer。在這種情況下,你會接受這份工作嗎?如果接受,你對未來薪資增長有什么期望?如果不接受,你的底線是什么?
答:
感謝您的認可,也特別理解公司可能有現階段的考量。但這個薪資差距確實超出了我能接受的范圍,這不僅關系到我現階段的生活規劃,也是對自己能力和過往經驗的基本衡量,所以這次可能沒辦法接受。
不過我真心很看重這個機會,如果公司覺得我確實是合適的人選,能否咱們約定一下:比如入職后 3 個月,我會全力以赴做出業績,到時候咱們根據我的實際表現,把薪資調整到我最初期望的水平?這樣既不辜負您的信任,也能讓我更安心地投入工作。如果這個約定能達成,我非常愿意加入;如果實在有難度,那這次只能遺憾錯過了,也希望以后還有合作的可能。
(2)我們公司經常需要加班到深夜,有時甚至需要周末工作。你如何看待這種工作強度?你認為工作與生活的理想平衡點在哪里?
答:我個人不太傾向于頻繁加班到深夜,更希望能盡量避免占用周末時間。平時工作時我會集中精力高效完成任務,爭取準時下班,留出時間處理生活瑣事、放松調整,這樣才能保持穩定的工作狀態。當然,如果遇到項目緊急、確實需要趕工的情況,偶爾加班我是可以理解和配合的,但長期這樣肯定不行,身體和精力都扛不住。如果需要加班,我希望能有符合預期的加班費作為補償,這樣付出和回報能對等一些。
對我來說,工作與生活的理想平衡就是:平時各有邊界,工作時專注投入,生活時能踏實放松;偶爾需要打破平衡加班時,能有合理的回報來彌補,不讓這種失衡成為常態,這樣才能長久可持續。
(3)你認為自己最大的優勢是什么?這個優勢如何幫助你勝任我們這個崗位?
答:我的核心優勢在于持續學習能力和快速掌握新技術的能力,這在云計算這個技術迭代迅速的領域尤為重要。我能夠高效地消化吸收各類云平臺的技術文檔和最佳實踐,無論是主流云服務商的基礎架構還是新興的云原生技術,都能在短時間內理解其核心原理并上手應用。這種能力使我不僅能夠快速適應企業現有的云技術棧,更能跟進行業發展趨勢,為企業未來的技術升級做好準備。在云計算這個日新月異的領域,我這種持續進化的技術適應力,相比靜態的知識儲備更能創造長期價值。
(4)你認為這份工作能為你帶來什么?你能為公司創造什么價值?
答:這份工作能為我提供寶貴的實戰機會,將我的云計算知識轉化為真正的生產力,同時讓我在專業團隊中快速積累行業經驗。作為新人,我尤其看重貴公司在云計算領域的成熟技術棧和規范流程,這能幫助我建立扎實的技術根基。
而我能為公司帶來的價值是:用快速學習能力迅速填補經驗缺口,以高度執行力完成基礎性技術工作,同時保持對新技術趨勢的敏感度。在團隊中,我會成為可靠的技術執行者,隨著經驗積累逐步承擔更復雜的云架構任務,最終成長為既能踏實運維又懂創新優化的綜合型云技術人才。
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 resultprint(func([5, 3, 7, 2]))
答:運行結果:[4,4,6,4]
主要功能:按規則(相鄰元素比較、最后一個元素加倍)轉換列表元素并返回新列表 。
(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:breakelse:result.append(num + 1)return resultprint(func([9, 4, 12, 7, 14]))
答:運行結果:[3, 8, 4, 8, 28]
主要功能:按元素是否被 3/2 整除的規則轉換,且在 “能被 2 整除且>10” 時處理當前元素后終止循環。
(3)以下代碼運行結果是?并闡述函數func的主要功能是什么?
def func(nums1, m, nums2, n):i = j = k = 0temp = nums1.copy()while i < m and j < n:if temp[i] < nums2[j]:nums1[k] = temp[i]i += 1else:nums1[k] = nums2[j]j += 1k += 1while i < m:nums1[k] = temp[i]i += 1k += 1return nums1nums1 = [1, 3, 5, 0, 0]
m = 3
nums2 = [2, 4]
n = 2
print(func(nums1, m, nums2, n))
答:運行結果:[1, 2, 3, 4, 5]
主要功能:合并兩個有序子數組(nums1
前 m
個、nums2
前 n
個)到 nums1
,使其整體升序。
(4)以下代碼運行結果是?并闡述函數func的主要功能是什么?
def func(lst):total = 0for i in range(len(lst)):if i % 2 == 0:total += lst[i]else:total -= lst[i]if total < 0:total = 0return totalprint(func([5, 3, 2, 7, 1]))
答:運行結果:1
主要功能:按索引奇偶交替加減元素值,負數結果重置為 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 + oddsprint(func([3, 1, 4, 1, 5, 9, 2, 6, 5]))
答:運行結果:[2, 4, 6, 9, 5, 5, 3, 1, 1]
主要功能:奇偶分離后,偶數升序、奇數降序,再拼接輸出。
(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 + lstdata = [1, 2, 3, 4, 5]
print(func(data))
答:運行結果:[1, 3, 5, 4, 8]
主要功能:分離列表中的奇數并收集,對偶數翻倍后放回原列表,最終返回奇數列表與處理后偶數列表的拼接結果。
(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]))breakreturn resultprint(func([5, 3, 7, 2, 8]))
答:運行結果:[(3, 7), (2, 8)]
主要功能:提取列表中 “和為 10” 的數對(每個數對僅找第一個匹配,不重復) 。
(8)編寫程序,反素數
反素數是指一個將其逆向拼寫后也是一個素數的非回文數,例如17和71都是素數但不是回文數,且反轉后依舊是素數
輸出顯示前100個反素數,每行顯示10個
答:
def is_prime(num):if num < 2:return Falsefor i in range(2, int(num ** 0.5) + 1):if num % i == 0:return Falsereturn Truedef is_palindrome(num):return str(num) == str(num)[::-1]count = 0
num = 10
result = []
while count < 100:if not is_palindrome(num) and is_prime(num) and is_prime(int(str(num)[::-1])):result.append(num)count += 1num += 1for i in range(0, 100, 10):print(*result[i:i + 10])
(9)編寫程序,梅森素數
如果一個素數可以寫成2p?12p?1的形式,其中p是某個正整數,那么這個素數就稱作梅森素數
輸出p≤31的所有梅森素數
答:
def is_prime(num):if num < 2:return Falsefor i in range(2, int(num**0.5) + 1):if num % i == 0:return Falsereturn Truefor p in range(1, 32):j = 2**p - 1if is_prime(p) and is_prime(j):print(f"p={p}, 梅森素數={j}")
(10)編寫程序,數列求和
編寫一個函數計算下面的數列:
m(i)=12+23+...+ii+1m(i)=12+23+...+ii+1
m(i)=12+23+...+ii+1m(i)=12+23+...+ii+1
m(i)=12+23+...+ii+1m(i)=12+23+...+ii+1
并輸出測試結果:
i m(i)
1 0.500
2 1.16
...
19 16.40
20 17/35
答:
def calculate_m(i):result = 0.0for n in range(1, i + 1):result += n / (n + 1)return resultfor i in range(1, 21):j = calculate_m(i)print(f"{i}\t{j:.3f}")
(11)編寫程序,組合問題
有1、2、3、4這個四個數字,能組成多少個互不相同且無重復數字的三位數?分別又是多少?
答:
result = []
for i in range(1, 5):for j in range(1, 5):if j == i :continuefor k in range(1, 5):if k == i or k == j :continueresult.append( i * 100 + j * 10 + k)
print(f"能組成 {len(result)} 個符合條件的三位數,分別是:")
for num in result:print(num, end=" ")
(12)編寫程序,計算e
你可以使用下面的數列近似計算e
e=1+11!+12!+13!+14!+...+1i!e=1+11!+12!+13!+14!+...+1i!
e=1+11!+12!+13!+14!+...+1i!e=1+11!+12!+13!+14!+...+1i!
e=1+11!+12!+13!+14!+...+1i!e=1+11!+12!+13!+14!+...+1i!
當i越大時,計算結果越近似于e
答:
def factorial(n):result = 1for i in range(1, n + 1):result *= ireturn resulti = 10
e = 1
for n in range(1, i + 1):e += 1 / factorial(n)
print(f"e 的近似值為: {e:.10f}")
(13)編寫程序,完全數
如果一個正整數等于除了它本身之外所有正因子的和,那么這個數稱為完全數
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
輸入輸出描述
輸入一個正整數
輸出該數是否為完全數
示例1
輸入:
6
輸出:
Yes
示例2
輸入:
9
輸出:
No
答:
num = int(input("請輸入一個正整數:"))
factor_sum = 0
for i in range(1, num):if num % i == 0:factor_sum += i
print("Yes" if factor_sum == num else "No")