1. 程式人生 > 實用技巧 >面試1

面試1

面試題目總結

有孚網路面試題總結

  1. 列表與元組區別?

  2. 向列表內新增元素?兩個列表使用“+”號的結果,與append區別?

  3. Python全域性變數與區域性變數?__name__是區域性還是全域性,函式內變數區域性與全域性的判斷?

  4. Python垃圾回收機制

  5. 運算子過載?

  6. Django ORM 中F查詢與Q查詢?

  7. 資料庫遷移命令,多人協同開發時資料庫遷移問題解決?

  8. python的日誌,配置過嗎?

  9. 異常處理:try...except...else...,try...finally...執行的過程?

  10. Linux下檔案操作:

    • 檢視檔案最後50行

    • vim中命令的使用,有沒有用過行,列操作

  11. Signal模組

  12. 命令列程式碼演示

# 1.python中的False
bool(0)
bool('')
bool([])
# ...

# 2. 列表操作
[1, 2] * 2

# 3.==與is區別

# 4.變數賦值引用問題
a = 2
b = a
a += 2
print(a, b)

# 5. 函式傳參,解壓縮
def func(a, b, c=3, d=4):
print(a, b, c, d)

func(3, *(3, 4))
func(3, *(3, 4), c=6, d=7)

太平洋保險面試題

資料庫優化,資料庫索引,索引的詳細知識點

python 中資料型別,哪些可變,哪些不可變

列表和元組排序

map有沒有用過

序列化,為什麼使用序列化,哪些資料可以序列化

迭代器與生成器的區別

正則表示式匹配網址 ^((https|http|ftp|rtsp|mms)?:\/\/)[^\s]+

樂言科技面試

裝飾器

# 手寫一個裝飾器,並列印函式內參數
def wrapper(func):
def inner(*args, **kwargs):
print(args, kwargs)
res = func(*args, **kwargs)
return res
return inner


@wrapper
def test(a, b):
print('這是原函式')


test(1, 2)

>> 1, 2
>> '這是原函式'

類的property方法,如何修改類屬性

class A:

def __init__(self, x):
self.x = x

@property
def t(self):
return self.x

@t.setter
def t(self, value):

def change_x(self, x):
self.x = x


a = A(1)
a.t
>> 1
>>
a.change_x(2)
a.t
>> 2
a.t = 2
a.t
>> 2

python2與python3區別

range 返回值   #返回一個生成器
2: xrange == 3: range

前端問題

# a.js
export default {a: 1}

# b.js
# 如何獲取a

# 箭頭函式的特點

# css
display: 的屬性,至少說兩個

JWT認證,認證過程(本來想問HTTP協議的,我就說那我說下http協議唄,結果說太寬泛了)

JWT: {"user": "zhaojun"}

{"user": "test"}

{"user": "zhaojun"}: 加密的校驗碼

base64

掃碼登入問題

手機上已經登入了

你就是微信開發者

掃碼登入 web

中軟國際華為外包

迭代器,list是迭代器嗎

裝飾器,傳參

多繼承(C繼承A,B,繼承順序)

先傳進來哪個就找哪個,如果A上層還有,繼續找上層
經典類深度優先,新式類廣度優先
如果關係比較亂,使用mro()方法檢視繼承圖

哪些不會被繼承,析構方法

魔法方法,如:__del__()

map()與reduce()(reduce()沒答上)

map() 會根據提供的函式對指定序列做對映。
map(function, iterable, ...)
第一個引數 function 以引數序列中的每一個元素呼叫 function 函式,返回包含每次 function 函式返回值的新列表。

reduce函式對引數迭代器中的元素進行類累積
格式為:reduce(func,iter,init)
func為函式,iter為序列,init為固定初始值,無初始值時從序列的第一個引數開始

多執行緒的使用場景,GIL原理

使用threading.Thread()方法
繼承threading.Thread類

由於GIL的原因, Python直譯器只允許同一時間執行一個執行緒。多執行緒不能用,使用多程序

I/O 密集型使用多執行緒
CPU 密集型使用多程序

TCP三次握手,四次揮手

CSRF預防

MySQL隔離級別,哪些產生髒讀,哪些產生幻讀

MySQL什麼情況下建立索引

較頻繁地作為查詢條件的欄位
出現where的欄位

Redis,快取穿透與快取雪崩,解決辦法(解決辦法沒答布隆過濾器)

快取穿透:快取與資料庫中都沒有,惡意訪問,頻繁的查資料庫,壓力大
解決辦法:查詢一次,如果沒有,快取中增加空值
採用布隆過濾器(將所有可能存在的資料雜湊到一個足夠大的bitmap中)

快取雪崩:同一時間,大量鍵過期,同時訪問資料庫,壓力大
解決辦法:設定過期時間為隨機

快取擊穿:前臺高併發訪問一個已經在快取中恰好過期的資料,全部打到後臺資料庫
解決辦法:互斥鎖,Redis的SETNX功能,資料沒有,返回一個設定值,再去查資料庫
熱點資料設定永不過期

Redis的記憶體清理機制

定時隨機清除
惰性清除
配置檔案裡的清除(常用清理訪問次數最少的)

Restful介面,如果是做計算,群增等設計,返回的狀態碼

Django的路由層,檢視層,模板層,模型層的工作流程

Flask的請求流程,請求上下文(棧實現)

上下文:有兩種
RequestContext請求上下文:內部有request和session物件
AppContext程式上下文:內部有g和current_app物件

第一步:建立上下文
Flask根據WSGI Server封裝的請求等的資訊(environ)新建RequestContext物件 和AppContext物件
第二步:入棧
將RequestContext物件push進_request_ctx_stack裡面。在這次請求期間,訪問request物件,session物件將指向這個棧的棧頂元素
第三步:請求分發
response = self.full_dispatch_request()
Flask將呼叫full_dispatch_request函式進行請求的分發,之所以不用給引數,是因為我們可以通過request物件獲得這次請求的資訊。full_dispatch_request將根據請求的url找到對應的藍本里面的檢視函式,並生成一個response物件。注意的是,在請求之外的時間,訪問request物件是無效的,因為request物件依賴請求期間的_request_ctx_stack棧。
第四步:上下文物件出棧
這次HTTP的響應已經生成了,就不需要兩個上下文物件了。分別將兩個上下文物件出棧,為下一次的HTTP請求做出準備。
第五步:響應WSGI
呼叫Response物件,向WSGI Server返回其結果作為HTTP正文。Response物件是一個可呼叫物件,當呼叫發生時,將首先執行WSGI伺服器傳入的start_response()函式 傳送狀態碼和HTTP報文頭。

Django ORM跨表一次性查詢

select_related內部自動連表,連表的時候比較消耗資源,但走資料庫的次數少
prefetch_related內部不做連表,多次查詢的時候比較消耗資源,但剛給使用者的感覺和連表操作一樣

Celery Broker使用的什麼,結果要儲存嗎,儲存到哪裡

uWSGI的工作流程,基於什麼協議,使用的什麼配置

快速排序,大量重複資料重複影響效率嗎,怎麼處理(會影響效率,優化沒回答上來)

會影響效率
解決辦法:分組
三相切割快速排序:分三組

Dockerfile中ADD和COPY的區別,是用ADD還是COPY

COPY是從本地,推薦使用,從本地拷貝,不直接解壓
ADD是增強版COPY,可以使用url拷貝,直接解壓

JWT校驗後,是隻能一個使用者登入還是多使用者可以同時線上,怎麼實現只能單使用者登入

實現一個使用者登入:
將token存入redis,每次登入就重新整理redis裡的token,這樣就能保證token永遠只有一個

logging模組,日誌過大怎麼辦

python的元類,Django ORM底層用到元類

元類其實就是產生類的類,我們可以通過元類來攔截類的建立過程,這個地方我自己通過元類寫過一個簡易版本的ORM

首先ORM全稱叫物件關係對映,能夠讓不會資料庫操作的程式設計師通過面向物件的方法簡單快捷的操作資料庫,ORM有三層對映關係

* 類對映資料庫的表
* 物件對映成資料庫的表中的一條條記錄
* 物件獲取屬性對映成資料庫的表中的某條記錄某個欄位對應的值

具體做法就是在類建立過程中通過元類攔截它的建立,在類創建出來之前給類賦上表該有的屬性表名,主鍵欄位,其他普通欄位

MySQL事務+悲觀鎖,直接用MySQL不會崩嗎

上海展灣

在什麼情況下使用過多執行緒

網路程式設計這塊熟悉吧?沒有問具體問題?

介面風格是http還是restful?

Celery用在什麼場景下?

Docker image過大怎麼解決?

Docker的編排容器的命令compose有沒有用過?

刀具開發專案(他們想做刀具管理系統)

奧解思(外派花旗銀行)

  • 面試官是個做NLP的,問的問題都很大,前面都沒放開答,後面說他是做NLP的

python用過哪些模組(提到了requests,說一下request怎麼實現爬蟲)

python的名稱空間,怎麼實現一個全域性變數

Redis在專案中怎麼用的

Redis有哪些資料型別

Redis的hash怎麼一次性取多個值

Redis獲取字串過程,要做什麼

MySQL在專案中用了什麼

Django的工作流程

drf怎麼實現前後端分離的

celery工作原理

谷露軟體

MySQL中 is null 與 ==null 的區別

髒讀,幻讀

資料庫查詢優化

Python字典的底層實現

Nginx的工作原理

uWSGI的工作原理

Dockerfile中CMD與ENTRYPOINT區別

把可能需要變動的引數寫到 CMD 裡面。然後你可以在 docker run 裡指定引數,這樣 CMD 裡的引數(這裡是-c) 就會被覆蓋掉而 ENTRYPOINT 裡的不被覆蓋。

霖客達

Python的列表切片,引用與引用切片的區別?

手頭有Python的幾本書,看完了幾本,流暢的Python看過嗎?

你印象最深的一本書,提到了三體,問了葉文傑,最深刻的情節,馮諾依曼的情節

演算法題

25匹馬,5個跑道,找出最快的3匹
分成五組,每組跑一次,找出最快的3匹
我說的把第一名跑一遍,以此類推(方法不太好)
引導我,第一名所在組的前三名,第二組的前兩名,第一組的第一名
有6匹,但是5個跑道,怎麼解決,第一名不用跑,剩下5匹跑,取前兩名

所託瑞安

# 多執行緒,多程序的應用

# 車輛資料採集,如何實現大量資料的分發

優層

# 一面給的英文程式碼題
	round1
	1.1 數字轉千分位字串
	1.2 將列表的5的倍數的元素新增到新列表
	1.3 比較兩個檔案中不同的檔案,分成三組
	1.4 起一個客戶端和服務端,客戶端分別傳送GET請求和POST請求,POST傳送字典資料,其中有一個元素是讀取圖片並轉為base64,服務端儲存圖片
	1.5 寫一個指令碼,起始數字每0.5s增加3,將結果儲存到MongoDB,起始數字從MongoDB中讀取
	1.6 MongoDB實現多個數據庫同步
	1.7 寫一個多程序/多執行緒指令碼,實現0-100列印,間隔隨機3-7秒
    
	round2
	2.1 使用Docker構建MongoDB,不能使用註冊中心的映象
	2.2 在虛擬機器中啟動以2.1 Docker 映象的容器
	2.3.1 起一個服務端,有兩個路由,‘/test/A’  ‘/test/B’,這兩個路由能接受要求格式的字典資料{"name": 0,"payload": {"a": "a","b": "b"},"ping": "pong"},A,B的資料分開儲存,如果提交的路由中沒有相同的name資料,新增一天,如果A,B中有同一個name的資料,刪除它們,如果只有一箇中有,更新資料,資料能持久化儲存,下次啟動不受影響
	2.3.2 起一個客戶端,向2.3.1的介面傳送請求,name的值為0-10隨機,payload中a,b為隨機字串,每0.5s傳送一次請求,傳送的介面隨機(A,B機率各50%)    

# 二面現場面
主要聊聊為啥想換工作,專案,整個面試沒問技術點
聊一半,出題的老外技術出現了,英文面試,先自我介紹,然後聊用到的技術點和專案,雪崩

菠蘿蜜

聊專案
使用者校驗怎麼實現的?瀏覽器怎麼攜帶和設定Cookie,HTTP的請求資料格式?request.user怎麼拿到的(原理)?

Celery非同步上傳圖片的過程,多個伺服器的話圖片放哪裡?

使用分頁器後,重新整理的資料重複問題怎麼解決?怎麼寫SQL?

關注的人在MySQL中的表設計?

軟通動力

# 多程序與多執行緒,多執行緒資料共享的安全問題,程序間通訊?

# 你知道的常見通訊協議?TCP為什麼是可靠的?怎麼解決粘包問題?

# sql注入及解決方案?

# 怎麼實現Django讀寫分離?

# 為什麼產生跨域問題,Django中怎麼解決?

# Django中介軟體的流程,自定義的方法,process_view在什麼時候執行?