答:從三個方面來說,一物件的引用計數機制,二垃圾**機制,三記憶體池機制
⒈物件的引用計數機制
python 內部使用引用計數, 來保持追蹤記憶體中的物件, 所有物件都有引用計數。
引用計數增加的情況:
❶乙個物件分配乙個新名稱
❷將其放入乙個容器中(如列表、 元組或字典)
引用計數減少的情況:
❶使用 del 語句對物件別名顯示的銷毀
❷引用超出作用域或被重新賦值
sys.getrefcount( )函式可以獲得物件的當前引用計數,多數情況下, 引用計數比你猜測得要大得多。 對於不可變資料(如數字和字串) , 直譯器會在程式的不同部分共享記憶體, 以便節約記憶體。
⒉垃圾**
❶當乙個物件的引用計數歸零時, 它將被垃圾收集機制處理掉。
❷當兩個物件 a 和 b 相互引用時, del 語句可以減少 a 和 b 的引用計數, 並銷毀用於引用底層物件的名稱。 然而由於每個物件都包含乙個對其他物件的應用,因此引用計數不會歸零, 物件也不會銷毀。 (從而導致記憶體洩露) 。 為解決這一問題, 直譯器會定期執行乙個迴圈檢測器, 搜尋不可訪問物件的迴圈並刪除它們。
⒊記憶體池機制
python 提供了對記憶體的垃圾收集機制, 但是它將不用的記憶體放到記憶體池而不是返回給作業系統。
❶pymalloc 機制。 為了加速 python 的執行效率, python 引入了乙個記憶體池機制, 用於管理對小塊記憶體的申請和釋放。
❷python 中所有小於 256 個位元組的物件都使用 pymalloc 實現的分配器, 而大的物件則使用系統的 malloc。
❸對於 python 物件, 如整數, 浮點數和 list, 都有其獨立的私有記憶體池, 物件間不共享他們的記憶體池。 也就是說如果你分配又釋放了大量的整數, 用於快取這些整數的記憶體就不能再分配給浮點數。
答: pychecker 是乙個 python **的靜態分析工具, 它可以幫助查詢 python **的 bug, 會對**的複雜度和格式提出警告pylint 是另外乙個工具可以進行 codingstandard 檢查
前端優化:
1 減少http請求
2 html和css放在頁面上部,js放在底部。因為js載入慢防止顯示不全,效能差,影響使用者體驗
後端優化
1 快取儲存讀寫次數搞變化少的資料,如**首頁和商品資訊。通常固定的或者更新周期長的資料放在快取中,應用程式讀取時候找不到再訪問磁碟進行讀寫操作。(磁碟訪問速度遠遠低於記憶體)
2 對耗時操作採用非同步處理,對採集比較頻繁資料單獨儲存
3 **優化,方法封裝,避免多次巢狀使用迴圈
資料庫:
1 如果有條件,資料放在redis讀取快
2 建立索引和外來鍵
3 多多表聯合查詢的資料進行檢視處理
同源策略同時滿足協議相同、網域名稱相同和埠相同。
1 session存放在伺服器端,cookie在客戶端(瀏覽器檢視)
2 session執行依賴session id,session id存放在cookie中,兩者同時生效
3 session安全性較高
C C 學習筆記 基礎知識11
1指標陣列和陣列指標 1 指標陣列 首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身決定。它是 儲存指標的陣列 的簡稱。陣列指標 首先它是乙個指標,它指向乙個陣列。在32位系統下永遠是佔4個位元組,至於它指向的陣列佔多少位元組,不知道。它是 指向陣列的指標 的簡稱 int p1 1...
JAVA面試總匯(11)
1.以下三條輸出語句分別輸出什麼?c易 char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 st...
1 1 基礎知識
char strerror int errno 基於當前errno值,在標準錯誤上產生一條出錯資訊,返回。錯誤資訊格式 msg void perror const char msg 每個使用者有使用者id,有組id,可有 或多個附屬組id 對磁碟的每個檔案,檔案系統都儲存該檔案的所有者的使用者id,...