GIL(全局解释器锁)

描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因。

1.python语言和GIL没有任何关系,GIL不是python语言的特性,仅仅是因为历史原因在Cpython解释器,难以移除GIL

2.GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程执行代码

3.Python使用多进程(mutilprocess)代替多线程(threading),可以利用多核的CPU资源的

4.线程释放GIL锁的情况:在IO操作等可能会引起阻塞的系统调用之前,会暂时释放GIL,但在执行完毕之后,会重新获得GIL

5.多线程比单线程爬取有所提升,在遇到IO阻塞的时候会释放GIL,达到多线程爬出的目的。

深拷贝、浅拷贝(copy.copy copy.deepcopy)

浅拷贝是对一个对象的顶层拷贝,只拷贝引用,没有拷贝内容 。

深拷贝是对一个对象的所有层次的拷贝(本质上递归浅拷贝),开辟一个新的空间。分片表达式进行的拷贝是深拷贝,字典的copy是深拷贝。

对可变数据类型(列表、字典、集合)进行浅拷贝,只是指向引用地址,不会开辟新的空间

对不可变数据类型(数字、字符串、元组)进行浅拷贝,会开辟一个新的空间(仅仅是最顶层开辟了新的空间,里层的元素地址还是一样的)

浅拷贝后,改变原始对象中可变类型的元素的值,拷贝对象的值也随之改变。改变原始对象中不可变类型元素的值,拷贝对象的值也不会改变

面向对象的三大特性(封装、继承、多态)

封装:把客观事物封装成抽象的类,类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。提高了代码的重用性,能够对代码进行有效的管理,当某个类有问题只要修改这个类即可,而其继承的子类不需要修改

多态:必须是在继承的基础上,一个类实例的相同方法在不同情形下有不同的表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

鸭子类型:在程序设计中,鸭子类型是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由这个对象继承特定的类或实现特定的接口,而是由当前方法和属性集合决定。“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

新式类和经典类的区别,在多继承上。经典类(python2.x)会进行深度优先继承。新式类(python3.x)默认继承object,会进行广度优先查找。

@property:可以把一个实例方法变成其同名属性,以支持.号访问获得方法返回值。property属性内部进行一系列的逻辑计算,最终将计算结果返回。

闭包:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包。在闭包内函数想要修改外部临时变量时,需要加上nonlocal xx。

一个简单的闭包函数:

def outer():

a = 10

def inner():

b = 22

nonlocal a

a = 100

print(a+b)

return inner

if __name__ == '__main__':

x = outer()

x()

装饰器:写代码需要遵循开放封闭原则,已经实现的功能代码不允许被修改,但是可以扩展。装饰器的作用就是在不改变原有函数功能的情况下,为其添加额外的功能。

装饰器的功能:1.作为引入日志 2.函数执行时间的统计 3.执行函数前预备处理 4.执行函数后清理功能 5.权限校验等场景 6.缓存

一个简单的装饰器:

# wrapper装饰器,传入函数作为变量,由内函数调用

def outer_wrapper(func):

def wrapper(*args,**kwargs): # 进行函数的装饰

# 权限校验等场景

# 验证1

# 验证2

# 验证3

pass

func()

return wrapper

@outer_wrapper

def f1():

print('f1')

使用装饰器实现一个单例:

def singleton(cls,*args,**kwargs):

instances = {}

def get_instance(*args,**kwargs):

if cls not in instances:

instances[cls] = cls(*args,**kwargs)

return instances[cls]

return get_instance

单例:是软件设计的一种模式,该模式的目的主要是确保某一个类只有一个实例存在

使用__new__方法实现一个单例:

class SingleTon(object):

_instance = {}

def __new__(cls,*args,**kwargs):

if cls not in cls._instance:

# 重写父类的__new__实现单例

cls._instance[cls] = super(SingleTon,cls).__new__(cls,*args,**kwargs)

print(cls._instance)

return cls._instance[cls]

洒洒水

python面试-python面试问题集锦相关推荐

  1. 一位资深程序员面试Python工程师的岗位心得和历程

    说一些面试的心得体会: 1.简历制作 我做了两份简历,用两个手机账号,两个简历名字,分别在各个招聘网站投了双份简历,一个是数据分析的简历.一个是web全栈开发的简历,我真正接触python快2年,不管 ...

  2. python面试-Python面试常问的10个问题

    很多人想找Python工作,面试往往在基础知识点采坑了 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试 ...

  3. Python程序员面试必备常用问题答案及解析

    源 | 小象     文 | 水木华章 在发布<Python程序员面试,这些问题你必须提前准备!>一文后,应广大程序员朋友的强烈要求,小编就Python程序员面试必备问题整理了一份参考答案 ...

  4. python程序员面试题精选100题_在Python程序员面试中被问的最多的10道题

    我们在为大家整Python程序员面试试题中,发现了一些被面试官问到的最多的一些问题,以下就是本篇内容: Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位 ...

  5. python程序员面试算法宝典pdf-Python程序员面试笔试宝典

    本书是一本讲解Python程序员面试笔试的百科全书,在写法上,除了讲解如何解答Python程序员面试笔试问题以外,还引入了相关知识点辅以说明,让读者能够更加容易理解.本书将Python程序员面试笔试过 ...

  6. 【Python】Python学到什么程度可以面试工作?------持续更新 ...

    前言: 从事python学习,有爬虫.web后台.深度学习相关经验, 坐标北京欢迎骚扰. 本答案力求简洁和直击重点,代码部分使用Python3,更详细的解释请Google,回答有误请务必提醒答主,我将 ...

  7. 2020最新软件测试(Python自动化测试)面试宝典大全(一)挑战高薪必备!!!赶紧收藏!!!!

    1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通常说的软件的可移植性. 兼容的类型,如果细分的话,有平台的兼容, ...

  8. 2023备战金三银四,Python自动化软件测试面试宝典合集(三)

    马上就又到了程序员们躁动不安,蠢蠢欲动的季节~这不,金三银四已然到了家门口,元宵节一过后台就有不少人问我: 现在外边大厂面试都问啥 想去大厂又怕面试挂 面试应该怎么准备 测试开发前景如何 面试,一个程 ...

  9. 绿盟python测试实习面试

    1.简历问题 低级错误:时间写错 最近好像越来越马大哈了,总是犯低级错误. 上次的开题报告首页,这次的时间,每次都有小问题,确是大毛病 到底哪里出错了 2 RHCE证书好像没有用 面试官根本就不懂这个 ...

  10. 好程序员Python培训分享Python程序员面试技巧

    好程序员Python培训分享Python程序员面试技巧,往年的这个时候,"金三银四"的招聘热潮已经扑面而至.今年,因为疫情的影响,各大公司的社招可能跟"2002的第一场雪 ...

最新文章

  1. envoy实现_微服务之服务治理:Envoy 全局 gRPC 限速服务 lyft/ratelimit 详解
  2. GRUB引导菜单加密
  3. C 语言回顾,数组指针的使用(小鸡肋的使用)
  4. 配置访问oracle_SpringBoot中application.properties的常用配置
  5. 介绍一款facebook信息收集工具FBI
  6. 删除online日志測试及ora-600 [4194]错误的处理
  7. 记一个简单的保护if 的sh脚本
  8. 类加载器-启动类加载器
  9. clistctrl 列不可按 -baijiahao_好吃到让人尖叫的日本人气美食 | 不可错过的京都吃喝地图...
  10. 开方计算与浮点数的问题
  11. python base64加解密
  12. python爬虫执行js代码_python爬虫执行js代码-execjs
  13. 设计模式 英文名Design Pattern
  14. 软件测试方法_边界值分析法
  15. python range 小数_python中如何表示一个无限循环小数?(不用分数的形式)python,使用range语...
  16. 会考计算机基本知识点总结,高中计算机会考基本知识点
  17. Python制作统计图形
  18. 求长方柱的体积和表面积
  19. 袋鼠云产品功能更新报告01期丨用诚心倾听您的需求
  20. JVM 1.8 永久代---元空间 的变动

热门文章

  1. 归并排序(转载http://www.cnblogs.com/jillzhang/archive/2007/09/16/894936.html)
  2. hibernate中的锁
  3. TCP连接建立与终止,及状态转换
  4. vue项目中的tab页实现
  5. js运算符单竖杠“|”的用法和作用及js数据处理
  6. model1模式变为mv模式,实现业务逻辑和画面的分离
  7. wex5 教程 前端UI编译原理与记事本编辑
  8. handlebars 基础
  9. sizeof 和strlen的区别
  10. 输出主键的值 output inserted.id