第四模块:网络编程进阶&数据库开发 考核实战

 一、什么是进程?什么是线程? 什么是协程?
进程:正在进行的一个过程或者说一个任务。而负责执行任务则是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()
相关文章
相关标签/搜索