python面试常见问题

1、“==”与is的区别

在这里插入图片描述
对象=确定内存地址+存储在这块内存中的值

2、list与tuple的区别

在这里插入图片描述

3、python中list与dict

在这里插入图片描述
list实现原理
dict实现原理

4、局部变量和全局变量

在这里插入图片描述

5、迭代器和生成器

生成器、迭代器详解在这里插入图片描述
在这里插入图片描述

6、yield

在这里插入图片描述

7、import过程

在这里插入图片描述

8、python装饰器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、python特点(封装、继承、多态)

在这里插入图片描述

10、垃圾回收()

完美详解
python采用的是引用计数机制为主,标记-清除分代收集机制为辅的策略
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11、python内存管理机制、内存泄漏

在这里插入图片描述python内存管理优化方法:
在这里插入图片描述
在这里插入图片描述

12、深拷贝/浅拷贝区别

在这里插入图片描述

13、GIL全局解释器锁

在这里插入图片描述

14、python2和python3的区别

在这里插入图片描述

15、提高python运行效率的方法

在这里插入图片描述

16、类:单例模式

在这里插入图片描述
在这里插入图片描述

17、python常见异常

在这里插入图片描述

18、列出几种魔法方法并介绍

在这里插入图片描述

19、python进程、线程、协程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进程间通信:

import time
from multiprocessing import Process, Queue, current_process
# 进程间通信
class WriteProcess(Process):
    """写的进程"""
    def __init__(self, q, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.q = q
    def run(self):
        ls = ['qqqqqqqqq','wwwwwwwww','rrrrrrrrr']
        for l in ls:
            print('写的内容{}-----{}'.format(l, current_process().name))
            # 写入
            self.q.put(l)
            time.sleep(1)
class ReadProcess(Process):
    """读的进程"""
    def __init__(self, q, *args, **kwargs):
        self.q = q
        super().__init__(*args, **kwargs)
    def run(self):
        while True:
            content = self.q.get()
            print("读的内容{}---{}".format(content, self.name))
if __name__ == '__main__':
    q = Queue()
    w_process = WriteProcess(q, name='write')
    w_process.start()
    r_process = ReadProcess(q, name='read')
    r_process.start()
    w_process.join()
    # r_process.join()
    # 读的进程死循环,无法等待
    r_process.terminate()

进程池:

import time
from multiprocessing import current_process, Pool
def run(file_name, num):
    """写入文件"""
    with open(file_name, 'a+', encoding='utf-8') as f:
        # 获取当前进程对象
        now_process = current_process()
        content = '{}---{}-----{}\n'.format(now_process.name, now_process.pid, num)
        f.write(content)
        print(content)
        time.sleep(2)
    return 'ok'
if __name__ == '__main__':
    pool = Pool(2)
    file_name = 'pool_text.txt'
    # for i in range(3):
    #     # 同步添加进程
    #     pool.apply(run, args=(file_name, i))
    for i in range(3):
        # 异步添加进程
        r = pool.apply_async(run, args=(file_name, i))
        print(r)
    # pool.starmap(run, [(file_name, 1), (file_name, 3), (file_name, 6)])
    pool.close()
    pool.join()

线程创建:

# 实例的方式生成线程
import os
import threading
import time
def loop():
    """新线程的执行代码"""
    n = 0
    while n < 3:
        now_thread = threading.current_thread()
        print("线程名:", now_thread.name)
        print(n)
        print(os.getpid())
        time.sleep(1)
        n += 1
def use_thread():
    """使用线程来实现"""
    # 当前正在执行的线程名称
    now_thread = threading.current_thread()
    print("线程名:", now_thread.name)
    t = threading.Thread(target=loop, name='loop_thread')
    t.start()
    t.join()
if __name__ == '__main__':
    print(os.getpid())
    use_thread()

多线程:

import threading
import time
from concurrent.futures.thread import ThreadPoolExecutor
from multiprocessing.dummy import Pool

def run(n):
    """线程要做的事情"""
    time.sleep(1)
    print("-------name:{}---------n:{}--".format(threading.current_thread().name, n))
def main():
    """使用传统方式"""
    t1 = time.time()        # 获取当前时间
    for i in range(5):
        run(i)
    print("任务总时间:", time.time() - t1)

def main_use_thread():
    """使用多线程做
    方法1:
    """
    # 资源有限 假设最多跑10个线程
    t1 = time.time()
    ls = []
    for count in range(10):
        for i in range(10):
            t = threading.Thread(target=run, args=(i, ))         # 传入参数 是元组类型  一个参数末尾需要,
            ls.append(t)
            t.start()
        for l in ls:
            l.join()
    print(time.time() - t1)

def main_use_pool():
    """ 
    方法2:
    线程池优化"""
    t1 = time.time()
    n = range(100)
    pool = Pool(10)
    pool.map(run, n)
    pool.close()
    pool.join()
    print(time.time() - t1)

def main_use_executor():
    """
    方法3:
    使用ThreadPoolExecutor优化;最优方法
    """
    t1 = time.time()
    n = range(100)
    with ThreadPoolExecutor(max_workers=100) as executor:
        executor.map(run, n)
    print('==================', time.time() - t1)

if __name__ == '__main__':
    main_use_thread()

在这里插入图片描述
在这里插入图片描述

20、python中的锁

在这里插入图片描述

21、python传参数是传值还是传址

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值