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面试问题集锦的更多相关文章

  1. .NET面试问答集锦

    程序员级别鉴定书(.NET面试问答集锦) 提供避免元素命名冲突的方法 DOM适合的使用场景是什么?是否有尺寸限制? DOM是一种与浏览器,平台,语言无关的接口,使你可以访问页面其他的标准组件. DOM ...

  2. C#面试考点集锦

    C#面试考点集锦 ©智客坊      岁末年初往往是程序猿准备跳槽的高峰,当然互联网行业跳槽几乎是每个月都在发生,没有太过明显的淡季~那么,如何提高面试的通过率,最终顺利的拿到自己心仪的offer呢? ...

  3. Python面试真题答案或案例

    Python面试真题答案或案例如下: 请等待. #coding=utf-8 #1.一行代码实现1--100之和 print(sum(range(1,101))) #2.如何在一个函数内部修改全局变量 ...

  4. Python面试 【315+道题】

    Python面试 [315+道题] 第一部分 Python基础篇(80题) 为什么学习Python? 因为看到python的发展趋势,觉得需要与时俱进,第一点,python开发速度极快,能快速完成一个 ...

  5. 10个Python面试常问的问题

    概述 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的 ...

  6. Python面试基础篇

    1. 为什什么学习Python? Life is short, You need Python 2. 通过什什么途径学习的Python? pass 3. Python和Java.PHP.C.C#.C+ ...

  7. Python 面试中 8 个必考问题(转载)

    Python 面试中 8 个必考问题 1.下面这段代码的输出结果是什么?请解释. def extendList(val, list=[]): list.append(val) return list ...

  8. 常见的25个python面试问答

    常见的25个python面试问答 说到好用简洁的大数据技术,除了Hadoop.R等等,Python也是其中熠熠生辉的一员,因而广受企业和商家的青睐.求职季,不少应聘者在面试相关职业时都被要求掌握Pyt ...

  9. python面试笔试题汇总

    Python面试攻略(嗨谈篇) 110道python面试笔试题汇总,你能答对几道? Python 面试问答 Top 25 2018 年最常见的 Python 面试题 & 答案

随机推荐

  1. 关于JQuery中$.get()和$.post()和$.ajax()的区别和使用

    首先,这三个方法都是Ajax方法中一种与服务器交换数据的请求类型. 一.$.get() $.get() 方法使用 HTTP GET 请求从服务器加载数据. 使用格式: $.get(url,[data] ...

  2. webrtc如何进行错误恢复

    视频的压缩方法:(三种帧) 为了视频尽可能的保持高效,视频数据通过不同的编码进行压缩.以帧为单位进行压缩,按照压缩中的不同作用可分类为:内帧(Intra-frames,I帧),预测帧(Predicti ...

  3. kubernetes in action - Services

    问题,如何将Pod所提供的功能提供给别人用?微服务,是服务,所以关键要把服务提供出去 直接把pod的静态ip提供给用户用,这个会有很多问题,比如failover,扩容,负载均衡等 所以需要servic ...

  4. Kafka: Exactly-once Semantics

    https://www.confluent.io/blog/enabling-exactly-kafka-streams/ https://cwiki.apache.org/confluence/di ...

  5. vue设置背景图片

    现在data里面定义: note: { backgroundImage: "url(" + require("../../assets/home/bigdatabak.p ...

  6. MySQL Server8.0版本时出现Client does not support authentication protocol requested by server

    MySQL Server8.0版本时出现Client does not support authentication protocol requested  by server 解决方法: 1.roo ...

  7. django 缓存信号等

    参考别人的博客:写的挺好 http://www.cnblogs.com/wupeiqi/articles/5246483.html

  8. Java集合List、Set、Map

    集合是 java 基础中非常重要的一部分,同样也是 Java 面试中很重要的一个知识点.所以,给王小整理了这篇关于集合的文章. 1.接口继承关系以及实现 集合类存放于 Java.util 包中,主要有 ...

  9. Python---Models 模型

    #Models 模型 数据结构 + 算法 = 程序 ---> URL ---> VIEW ---> Temple ---> DB:分类---关系 Teacher   Stude ...

  10. 常用SQL语法

    1.替換A表中B字段中第二个字符 ,), 2.根据 Score 字段 排序 并分页 * from (select row_number() over(order by Score DESC) as r ...