1. 生成器
在Python中,元素可以在循環的過程中按照某種算法推算出來,而不必創建完整的list,從而節省大量的空間。稱為生成器:generator。
2.迭代器
迭代是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的對象。
迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。
迭代器只能往前不會后退。
3.什么是閉包
在函數內部再定義一個函數,并且這個函數用到了外邊函數的變量,那么將這個函數以及用到的一些變量稱之為閉包
4. 裝飾器(decorator)功能
裝飾器是程序開發中經常會用到的一個功能,用好了裝飾器,開發效率顯著提升
引入日志
函數執行時間統計
執行函數前預備處理
執行函數后清理功能
權限校驗等場景
緩存
5.淺拷貝
淺拷貝是對于?個對象的頂層拷貝
通俗的理解是: 拷貝了引用, 并沒有拷貝內容
6.深拷貝
深拷貝是對于?個對象所有層次的拷貝(遞歸)
7.進程與線程
(1)定義的不同
進程是系統進行資源分配和調度的?個獨立單位.
線程是進程的?個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.
自己基本上不擁有系統資源,只擁有?點在運行中必不可少的資源(如程序計數器,?組寄存器和棧),
但是它可與同屬?個進程的其他的線程共享進程所擁有的全部資源.
(2)區別
一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程(資源比進程少), 使得多線程程序的并發性高。
進程在執行過程中擁有獨立的內存單元, 而多個線程共享內存, 從而極大地提高了程序的運行效率
線程不能夠獨立執行, 必須依存在進程中
(3)線程和進程在使用上各有優缺點: 線程執行開銷小, 但不利于資源的管理和保護; 而進程正相反。
8.爬蟲的底層原理
9.數據庫訪問優化法則
1、 減少數據訪問(減少磁盤訪問)
2、 返回更少數據(減少網絡傳輸或磁盤訪問)
3、 減少交互次數(減少網絡傳輸)
4、 減少服務器CPU開銷(減少CPU及內存開銷)
5、 利用更多資源(增加資源)
10.事務
?可以保證復雜的增刪改操作有效
? 當一個業務邏輯需要多個sql完成時,如果其中某條sql語句出錯,則希望整個操作都退回
? 使用事務可以完成退回的功能,保證業務邏輯的正確性
? 事務四大特性(簡稱ACID)
o 原子性(Atomicity):事務中的全部操作在數據庫中是不可分割的,要么全部完成,要么均不執行
o 一致性(Consistency):幾個并行執行的事務,其執行結果必須與按某一順序串行執行的結果相一致
o 隔離性(Isolation):事務的執行不受其他事務的干擾,事務執行的中間結果對其他事務必須是透明的
o 持久性(Durability):對于任意已提交事務,系統必須保證該事務對數據庫的改變不被丟失,即使數據庫出現故障
? 要求:表的類型必須是innodb或bdb類型,才可以對此表使用事務
事務是邏輯上的一組操作,組成這組操作的各個單元,要不全都成功要不全都失敗,這個特性就是事務
注意:mysql數據支持事務,但是要求必須是innoDB存儲引擎
解決這個問題:
mysql的事務解決這個問題,因為mysql的事務特性,要求這組操作,要不全都成功,要不全都失敗,這樣就避免了某個操作成功某個操作失敗。利于數據的安全
如何使用?
1)在執行sql語句之前,我們要開啟事務 start transaction;
(2)正常執行我們的sql語句
(3)當sql語句執行完畢,存在兩種情況:
1,全都成功,我們要將sql語句對數據庫造成的影響提交到數據庫中,committ
2,某些sql語句失敗,我們執行rollback(回滾),將對數據庫操作趕緊撤銷
(注意:mysql數據支持事務,但是要求必須是innoDB存儲引擎)
11.使用mongodb的優點
面向文件
高性能
高可用
易擴展
可分片
對數據存儲友好
12.MySql的核心就是存儲引擎常用的數據庫引擎有哪些
(1)?InnoDB 存儲引擎,InnoDB是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,它默認的是MqSQL引擎
InnoDB特性:
1、InnoDB給MySQL提供了具有提交、回滾和崩潰恢復能力的事物安全(ACID兼容)存儲引擎。InnoDB鎖定在行級并且也在SELECT語句中提供一個類似Oracle的非鎖定讀。這些功能增加了多用戶部署和性能。在SQL查詢中,可以自由地將InnoDB類型的表和其他MySQL的表類型混合起來,甚至在同一個查詢中也可以混合
2、InnoDB是為處理巨大數據量的最大性能設計。它的CPU效率可能是任何其他基于磁盤的關系型數據庫引擎鎖不能匹敵的
3、InnoDB存儲引擎完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。InnoDB將它的表和索引在一個邏輯表空間中,表空間可以包含數個文件(或原始磁盤文件)。這與MyISAM表不同,比如在MyISAM表中每個表被存放在分離的文件中。InnoDB表可以是任何尺寸,即使在文件尺寸被限制為2GB的操作系統上
4、InnoDB支持外鍵完整性約束,存儲表中的數據時,每張表的存儲都按主鍵順序存放,如果沒有顯示在表定義時指定主鍵,InnoDB會為每一行生成一個6字節的ROWID,并以此作為主鍵
5、InnoDB被用在眾多需要高性能的大型數據庫站點上
InnoDB不創建目錄,使用InnoDB時,MySQL將在MySQL數據目錄下創建一個名為ibdata1的10MB大小的自動擴展數據文件,以及兩個名為ib_logfile0和ib_logfile1的5MB大小的日志文件
(2)?MyISAM存儲引擎
MyISAM基于ISAM存儲引擎,并對其進行擴展。它是在Web、數據倉儲和其他應用環境下最常使用的存儲引擎之一。MyISAM擁有較高的插入、查詢速度,但不支持事物。MyISAM主要特性有:
1、大文件(達到63位文件長度)在支持大文件的文件系統和操作系統上被支持
2、當把刪除和更新及插入操作混合使用的時候,動態尺寸的行產生更少碎片。這要通過合并相鄰被刪除的塊,以及若下一個塊被刪除,就擴展到下一塊自動完成
3、每個MyISAM表最大索引數是64,這可以通過重新編譯來改變。每個索引最大的列數是16
4、最大的鍵長度是1000字節,這也可以通過編譯來改變,對于鍵長度超過250字節的情況,一個超過1024字節的鍵將被用上
5、BLOB和TEXT列可以被索引
6、NULL被允許在索引的列中,這個值占每個鍵的0~1個字節
7、所有數字鍵值以高字節優先被存儲以允許一個更高的索引壓縮
8、每個MyISAM類型的表都有一個AUTO_INCREMENT的內部列,當INSERT和UPDATE操作的時候該列被更新,同時AUTO_INCREMENT列將被刷新。所以說,MyISAM類型表的AUTO_INCREMENT列更新比InnoDB類型的AUTO_INCREMENT更快
9、可以把數據文件和索引文件放在不同目錄
10、每個字符列可以有不同的字符集
11、有VARCHAR的表可以固定或動態記錄長度
12、VARCHAR和CHAR列可以多達64KB
使用MyISAM引擎創建數據庫,將產生3個文件。文件的名字以表名字開始,擴展名之處文件類型:frm文件存儲表定義、數據文件的擴展名為.MYD(MYData)、索引文件的擴展名時.MYI(MYIndex)
(3)?MEMORY存儲引擎
MEMORY存儲引擎將表中的數據存儲到內存中,未查詢和引用其他表數據提供快速訪問。MEMORY主要特性有:
1、MEMORY表的每個表可以有多達32個索引,每個索引16列,以及500字節的最大鍵長度
2、MEMORY存儲引擎執行HASH和BTREE縮影
3、可以在一個MEMORY表中有非唯一鍵值
4、MEMORY表使用一個固定的記錄長度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和對可包含NULL值的列的索引
7、MEMORY表在所由客戶端之間共享(就像其他任何非TEMPORARY表)
8、MEMORY表內存被存儲在內存中,內存是MEMORY表和服務器在查詢處理時的空閑中,創建的內部表共享
9、當不再需要MEMORY表的內容時,要釋放被MEMORY表使用的內存,應該執行DELETE FROM或TRUNCATE TABLE,或者刪除整個表(使用DROP TABLE)