python--基础

  1. 什么是装饰器
    装饰器是一个函数,这个函数的主要作用是包装另一个函数
    包装的目的是不改变原函数的情况下增加新的功能

  2. 正则匹配邮箱
    [a-zA-Z0-9_.-]+@[a-zA-z0-9]+.[a-z]
    身份证匹配
    (\d+{18})|(\d{15})|(\d{17}(\d|X|x))

  3. python垃圾回收机制
    垃圾回收: python解释器都市正在使用的函数保持计数,当某个对象计数降为0时。垃圾收集器也就可以释放该对象,获取分配的内存,当分配对象和取消分配对象的差值高于阈值时垃圾收回才会启动。
    分代回收:python将所有的对象分为0,1,2三代。所有的新建对象都是0代对象对象,当某一代对象经历过垃圾回收依然存活,那么他就被归入下一代对象,垃圾回收启动,一定会扫描所有的0代对象。

  4. 多进程与多线程的区别 CPU密集适用什么:
    多线程:在单个程序中同时运行多个线程完成不同的工作,称为多线程,线程共享内存空间,进程的内存是独立的
    同一个进程之间可以直接交流,两个进程通信,必须通过一个中间代理来实现
    一个X线成可以控制和操作同一进程里的其他线程,但是进程只能操作子进程,
    优缺点:
    1. 多进程的优点是稳定性好,一个子进程崩溃了,不会影响主进程以及其余进程,大那是缺点是创建进程的代价非常大,因为错A座系统要给每个进程分配固定的资源
    2. 多线程优点的效率较高一些,但是致命 的缺点是任何一个县城崩溃都可能。造成整个进程的崩溃,因为他们共享了进程的内存资源池。
    CPU密集适合多进程开发。

  5. 通信方式有几种
    管道(Pie) 系统IPC(消息队列,信号量,共享存储),socket

  6. 什么是协程
    协程是一个可以暂停的函数,当函数暂停时,可以跳出函数执行其他内容,重新加载时可以继续执行。
    yield是协程中的关键字
    协程的原理:
    记录一个上细纹栈帧,协程切换时会记录栈帧的位置,切换回来时进行调取,恢复原有的执行内容,
    优点: 占用资源少,效率高。可以同时执行多个任务
    缺点: 无法利用计算机资源

  7. range和xrange的区别
    xrange返回的是一个生成器,取一个用一个
    range是生成一个列表。占用内存

  8. 快排算法

    def QuickSort(myList,start,end):
        #判断low是否小于high,如果为false,直接返回
        if start < end:
            i,j = start,end
            #设置基准数
            base = myList[i]
    
            while i < j:
                #如果列表后边的数,比基准数大或相等,则前移一位直到有比基准数小的数出现
                while (i < j) and (myList[j] >= base):
                    j = j - 1
    
                #如找到,则把第j个元素赋值给第个元素i,此时表中i,j个元素相等
                myList[i] = myList[j]
    
                #同样的方式比较前半区
                while (i < j) and (myList[i] <= base):
                    i = i + 1
                myList[j] = myList[i]
            #做完第一轮比较之后,列表被分成了两个半区,并且i=j,需要将这个数设置回base
            myList[i] = base
    
            #递归前后半区
            QuickSort(myList, start, i - 1)
            QuickSort(myList, j + 1, end)
        return myList
    
    
    myList = [49,38,65,97,76,13,27,49]
    print("Quick Sort: ")
    QuickSort(myList,0,len(myList)-1)
    print(myList)
    
  9. 冒泡排序

    def bubbleSort(myList):
        # 首先获取list的总长度,为之后的循环比较作准备
        length = len(myList)
    
        # 一共进行几轮列表比较,一共是(length-1)轮
        for i in range(0, length - 1):
    
            # 每一轮的比较,注意range的变化,这里需要进行length-1-长的比较,注意-i的意义(可以减少比较已经排好序的元素)
            for j in range(0, length - 1 - i):
    
                # 交换
                if myList[j] > myList[j + 1]:
                    tmp = myList[j]
                    myList[j] = myList[j + 1]
                    myList[j + 1] = tmp
    
            # 打印每一轮交换后的列表
            # for item in myList:
            #     print(item)
            # print("=============================")
        return myList
    
    print("Bubble Sort: ")
    myList = [1, 4, 5, 0, 6]
    mylist = bubbleSort(myList)
    print(mylist)
    
  10. TCP 和UDP的区别,三次握手四次挥手:
    TCP协议:面向连接–可靠的–流式套接字
    UDP协议:面向无连接额–不可靠的–数据报套接字
    三次握手:
    1. 客户端向服务器发起请求
    2. 服务器收到情亲返回报文允许连接
    3. 客户端收到许可,建立连接
    四次挥手:
    1. 主动方发送报文告知被动方要断开连接
    2. 被动方收到报文 准备断开
    3. 被动放发送报文给主动方,告知准备就绪可以断开,
    4. 主动方断开连接

  11. HTTP全过程:
    域名解析–发起TCP三次握手 – 建立TCP连接 – 发起HTTP请求 – 服务器响应HTTP请求 – 浏览器得到HTML代码 – 浏览器解析HTML代码,并请求HTML代码中的静态文件(CSS、JS、图片) – 浏览器渲染给用户。

  12. 深拷贝和浅拷贝的区别 :
    浅拷贝只复制指向某个对象的引用地址。而不是对象本身。新旧对象还是共用一块内存 cp.copy
    深拷贝会另外创造一个一模一样的对象,跟就对象不共享内存,修改新对象旧对象不会改变。cp.deepcopy

  13. __new__和__init__的区别:
    __new__用于创建实例对象
    __init__用于初始化实例对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值