1、什么情況下使用Python語言開發(fā)比較好?/你對Python怎么看?/。。。
1、python的設計哲學“簡單、明確、優(yōu)美”,決定了python開發(fā)的易用性和高效性,同樣的業(yè)務需求,C++需要一周,python可能三天可以完成,
2、動態(tài)解釋型腳本語言,跨平臺
3、很多高校開始開設python教學班
4、潛在的問題也會少很多,因為python有非常強大的第三方庫,同時封裝了很多復雜的底層語言,如內存分配釋放,指針的相關操作
2、開發(fā)語言選型需要考慮多個方面:
1、業(yè)務本身特點適合哪種語言
2、公司歷史技術棧和人員技術儲備傾向哪種語言
3、python是否存在內存泄露
內存泄漏(Memory Leak)是指程序中己動態(tài)分配的內存由于某種原因程序未釋放或無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。
python會存在內存泄露:
例如當對象A中引用對象B,同時對象B中又引用對象A,A和B出現循環(huán)引用,python中使用的引用計數的內存管理方式,此時A和B的引用計數將永遠大于1,解釋器無法自動回收對象A和B的內存空間,即產生了內存泄露。
l1 = [1, 2, 3] l2 = [4, 5, 6] l1.append(l2) l2.append(l1) print(l1) print(l2) # [1, 2, 3, [4, 5, 6, [...]]] # [4, 5, 6, [1, 2, 3, [...]]]
4. 過往的項目中有沒有出現過性能問題?
有
對象A,B之間循環(huán)引用,導致內存泄露
5. 什么是協程
協程是一種用戶態(tài)的輕量級線程,就是由用戶自己控制調度,從而更高效利用CPU
一個線程在執(zhí)行是,只有當子程序內部發(fā)送中斷或阻塞時,才會交出線程的執(zhí)行權交給其他子程序,在適當的時候在返回來接著執(zhí)行,省去了線程間頻繁切換的時間開銷,同時也解決了多線程加鎖造成的相關問題
6. 知道m(xù)ysql的事務隔離嗎?/事務隔離分哪幾個級別?/事務隔離性怎么保證/...
數據庫支持事務本身需要具備四個特性:原子性、一致性、隔離性、持久性 ACID
原子性:事務是一個不可分割的工作單位,事務中的操作要么都發(fā)生,要么都不發(fā)生
A轉賬200 給B : A-200 B+200 這兩個動作必須一起成功后者一起失敗
一致性:事務前后數據的完整性必須保持一致
A-200 B+200 符合邏輯運算
隔離性:并發(fā)執(zhí)行的多個事務之間互不干擾
持久性:事務一旦被提交,他對數據庫中數據的改變是永久性的
事務的隔離性:并發(fā)執(zhí)行的多個事務之間互不干擾
事務隔離的級別:
臟讀:一個事務讀取到另一個事務未提交的數據
不可重復度:一個事務內讀取表中的某一行數據,多次讀取結果不同(其他事務更改了數據)
虛讀(幻讀):一個事務內讀取到別的事務插入的數據,導致前后讀取不一致
mysql數據庫事務隔離有四個級別: RU, RC,RR,SE(可序列化)
默認是RR級別: 可以處理臟讀和不可重復讀問題,SE可以解決幻讀問題,但性能消耗大,一般不用,
mysql的RR級別引入了GAP LOCK(間隙鎖),可以在RR級別解決幻讀問題, innodb間隙鎖就是不僅僅鎖住所需要的行(如果鎖住的這行不存在)還會鎖住一個范圍的行,這個范圍依據鎖住的這行而定。上下剛好是兩個相鄰索引葉節(jié)點的范圍。包含下范圍,不包含上范圍。
7、 MySQL和MongoDB區(qū)別?
mysql是關系型數據庫,存儲引擎有MyISam, InnoDB, Merge等目前大都使用支持事務的InnoDB存儲引擎。myslq5.7開始支持json格式,向nosql靠近
MongoDB 18年8月發(fā)布的4.0開始支持事務,當前其默認的存儲引擎wiredtiger性能非常卓越
區(qū)別:
mysql索引底層是用B+樹實現,mongoDB采用B樹。
B樹的特性決定MongoDB在海量讀寫的情況下性能比mysql優(yōu)越,B+樹的特性決定Mysql更適合多區(qū)間范圍查詢的業(yè)務需求
總體來說,如果是海量數據高并發(fā)讀寫,從技術角度推薦MongoDB,如果是數據結構相對統一,同時對于事務要求較高,個人傾向于Mysql
8. 什么是IO多路復用?/epoll和select,poll有什么區(qū)別?
I/O多路復用,I/O就是指的我們網絡I/O,多路指多個TCP連接(或多個Channel),復用指復用一個或少量線程。
一個線程,通過記錄IO流的狀態(tài)來同時管理多個I/O,可以提高服務器的吞吐能力
select:最多支持1024個鏈接,輪詢,非線程安全
poll:去掉1024的限制,輪詢,非線程安全
epoll:去掉限制,不輪詢,線程安全,只支持linux系統,絕大部分tcp鏈接處于就緒態(tài)時,輪詢方式更好
9. 了解過tornado或sanic嗎?/有木有接觸過其他web框架
了解過,不過之前公司項目中大多框架選用django,少部分使用flask。
django設計哲學簡便,快速,強調代碼復用,大而全是代表特性
falsk相對小而精
tornado和sanic是異步框架(異步框架),性能非常卓越,tornado是facebook的開源項目,應用頗為廣泛,sanic是基于python3.5的近些年興起的框架,用到了很多python3的新特性
10、同步、異步、并行、并發(fā)
并發(fā):多個任務交替執(zhí)行,
并行:多個任務如果是單核處理器交替執(zhí)行,在多處理器中可以重疊執(zhí)行
同步:一個進程的輸出作為另一個進程的輸入,存在依賴關系
異步:彼此獨立
浙公網安備 33010602011771號