筆記11:面試知識

面試筆記

1 Python 是如何進行內存管理的?

答:從三個方面來講,一對象的引用計數機制,二垃圾回收機制,三內存池機制
⒈對象的引用計數機制
Python 內部使用引用計數, 來保持追蹤內存中的對象, 全部對象都有引用計數。
引用計數增長的狀況:
❶一個對象分配一個新名稱
❷將其放入一個容器中(如列表、 元組或字典)
引用計數減小的狀況:
❶使用 del 語句對對象別名顯示的銷燬
❷引用超出做用域或被從新賦值
sys.getrefcount( )函數能夠得到對象的當前引用計數,多數狀況下, 引用計數比你猜想得要大得多。 對於不可變數據(如數字和字符串) , 解釋器會在程序的不一樣部分共享內存, 以便節約內存。css

⒉垃圾回收
❶當一個對象的引用計數歸零時, 它將被垃圾收集機制處理掉。
❷當兩個對象 a 和 b 相互引用時, del 語句能夠減小 a 和 b 的引用計數, 並銷燬用於引用底層對象的名稱。 然而因爲每一個對象都包含一個對其餘對象的應用,所以引用計數不會歸零, 對象也不會銷燬。 (從而致使內存泄露) 。 爲解決這一問題, 解釋器會按期執行一個循環檢測器, 搜索不可訪問對象的循環並刪除它們。html

⒊內存池機制
Python 提供了對內存的垃圾收集機制, 可是它將不用的內存放到內存池而不是返回給操做系統。
❶Pymalloc 機制。 爲了加速 Python 的執行效率, Python 引入了一個內存池機制, 用於管理對小塊內存的申請和釋放。
❷Python 中全部小於 256 個字節的對象都使用 pymalloc 實現的分配器, 而大的對象則使用系統的 malloc。
❸對於 Python 對象, 如整數, 浮點數和 List, 都有其獨立的私有內存池, 對象間不共享他們的內存池。 也就是說若是你分配又釋放了大量的整數, 用於緩存這些整數的內存就不能再分配給浮點數。前端

2 有沒有一個工具能夠幫助查找 python 的 bug 和進行靜態的代碼分析?

答: PyChecker 是一個 python 代碼的靜態分析工具, 它能夠幫助查找 python 代碼的 bug, 會對代碼的複雜度和格式提出警告Pylint 是另一個工具能夠進行 codingstandard 檢查python

3 前端、後端和數據庫角度闡述web項目的性能

前端優化:web

1 減小http請求面試

2 html和css放在頁面上部,js放在底部。由於js加載慢防止顯示不全,性能差,影響用戶體驗redis

後端優化數據庫

1 緩存存儲讀寫次數搞變化少的數據,如網站首頁和商品信息。一般固定的或者更新週期長的數據放在緩存中,應用程序讀取時候找不到再訪問磁盤進行讀寫操做。(磁盤訪問速度遠遠低於內存)後端

2 對耗時操做採用異步處理,對採集比較頻繁數據單獨存儲瀏覽器

3 代碼優化,方法封裝,避免屢次嵌套使用循環

數據庫:

1 若是有條件,數據放在redis讀取快

2 創建索引和外鍵

3 多多表聯合查詢的數據進行視圖處理

4 什麼是同源策略

同源策略同時知足協議相同、域名相同和端口相同。

5 cookie和session區別

1 session存放在服務器端,cookie在客戶端(瀏覽器查看)

2 session運行依賴session ID,session id存放在cookie中,二者同時生效

3 session安全性較高

相關文章
相關標籤/搜索