第四模塊:網絡編程進階&數據庫開發 考覈實戰

 一、什麼是進程?什麼是線程? 什麼是協程?
進程:正在進行的一個過程或者說一個任務。而負責執行任務則是cpu。
線程:在傳統操做系統中,每一個進程有一個地址空間,並且默認就有一個控制線程
協程是一種用戶態的輕量級線程,即協程是由用戶程序本身控制調度的。
 
數據庫類型有哪些?
一、InnoDB 存儲引擎 二、MyISAM 存儲引擎 三、NDB 存儲引擎 四、Memory 存儲引擎 五、Infobright 存儲引擎
六、NTSE 存儲引擎 七、BLACKHOLE
 
mysql數據庫與 MyISAM 存儲引擎 的特色。

MySQL支持事務,其設計目標主要面向聯機事務處理(OLTP)的應用。其mysql

特色是行鎖設計、支持外鍵,並支持相似 Oracle 的非鎖定讀,即默認讀取操做不會產生鎖。 從 MySQL 5.5.8 版本開始是默認的存儲引擎。sql

MyISAM不支持事務、表鎖設計、支持全文索引,主要面向一些 OLAP 數 據庫應用,在 MySQL 5.5.8 版本以前是默認的存儲引擎(除 Windows 版本外)。數據庫系統 與文件系統一個很大的不一樣在於對事務的支持,MyISAM 存儲引擎是不支持事務的。究其根 本,這也並不難理解。用戶在全部的應用中是否都須要事務呢?在數據倉庫中,若是沒有 ETL 這些操做,只是簡單地經過報表查詢還須要事務的支持嗎?此外,MyISAM 存儲引擎的 另外一個不同凡響的地方是,它的緩衝池只緩存(cache)索引文件,而不緩存數據文件,這與 大多數的數據庫都不相同。
 
進程間的通訊方式有哪些?
進程間通訊(IPC)方式主要包括如下幾種:
    (1)管道,分爲有名管道和無名管道,是一種半雙工的通訊方式。
    (2)信號量,信號量是一個計數器,能夠用來控制多個線程對共享資源的訪問。
     (3)信號,信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
    (4)消息隊列,息隊列是消息的鏈表,存放在內核中並由消息隊列標識符標識。
    (5)共享內存,共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問.共享內存是最快的IPC(進程間通訊)方式。
    (6)套接字:可用於不一樣及其間的進程通訊。
 
 
索引的本質?有什麼優缺點?

索引的本質就是排序。 數據庫

固然,咱們通常不會把原始數據集排序,而是把每條記錄的鍵值和這條記錄在數據集中的位置,按鍵值次序作成一個規模較小的數據集,這也就是索引表了。若是還有其它字段也要用於鍵值查找,則能夠再創建別的索引。原始數據集只有一份,索引能夠有多個,若是每一個索引都把原始數據集排序,則會使數據集被複制不少遍,佔用空間過大。 緩存

另外,數據庫在創建索引時還要考慮數據會插入刪除,簡單排序的索引會致使插入刪除的成本很是高,這時通常會使用B樹以方便快速更新。B樹至關於把二叉樹擴展成n叉樹,本質上仍然是鍵值有序。(索引如何創建的話題內容很多,咱們將另行撰文討論,這裏只研討索引使用) 函數

還有一種引伸出來的方法是HASH索引,計算記錄鍵值的某種HASH值,散列到1...k的天然數範圍。這樣查找時連二分比較也沒必要作,直接用HASH值定位了。HASH方法只用來作鍵值的精確查找,不能用來實現區間查找,由於HASH函數並不單調,已經失去原來鍵值的大小信息了,不過這在許多場景下也夠用(按身份證號找人)。HASH索引本質上也是排序,只是用了鍵值的HASH值來排序。咱們下面的討論仍是以普通鍵值排序爲例,結論也適用於HASH索引。spa

 

 
 一、寫一個程序,包含十個線程,子線程必須等待主線程sleep 10秒鐘以後才執行,並打印當前時間;
from threading import Thread,Event,currentThread
import time
event = Event()
def task():
    event.wait()
    for i in range(3):
        print("name:%s ,time:%s"%(currentThread().getName(),time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())))
        # print('name:%s time:%s'%(currentThread().getName(),time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())))

if __name__ == '__main__':
    for i in range(10):
        t =Thread(target=task)
        t.start()


    time.sleep(10)
    event.set()

 

二、寫一個程序,利用queue實現進程間通訊;
q = Queue()
def producer(q):
    for  i in range(3):
        q.put('name:%s is runing %s'%(current_process().name,i))

def consumer(q):
    while True:
        res = q.get()
        if not res:break
        print(res)

if __name__ == '__main__':
    p1 =Process(target=producer,args=(q,))
    p2 = Process(target=producer, args=(q,))
    p3 = Process(target=producer, args=(q,))

    p4 = Process(target=consumer, args=(q,))
    p5 = Process(target=consumer, args=(q,))

    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p5.start()

    p1.join()
    p2.join()
    p3.join()
    q.put(None)
    q.put(None)
    print('main')

 



三、建立一個表student,包含ID(學生學號),sname(學生姓名),gender(性別),credit(信用卡號),四個字段,要求:ID是主鍵,且值自動遞增,sname是可變長字符類型,gender是枚舉類型, credit是可變長字符類型;

create table student1(
id int primary key auto_increment,
sname varchar(16) not null,
gender enum('男','女') default '男',
credit varchar(20)
);操作系統

 向該表新增一條數據,ID爲1,學生姓名爲alex,性別女;
     修改ID爲1的學生姓名爲wupeiqi;
     刪除該數據;

insert into student1(sname,gender) values('alex','女');線程

update student1 set sname='wupeiqi' where id =1;設計

delete from student1 where sname ='wupeiqi';code


四、請使用pymysql模塊鏈接你本地數據庫,並向student表中插入一條數據; 
import pymysqlconn = pymysql.connect(host= 'localhost',user='root',password='123',database='db6')cursor =conn.cursor()sql = 'insert into student1(sname,gender) values("egon","男")'cursor.execute(sql)conn.commit()
相關文章
相關標籤/搜索