第1题: python下多线程的限制以及多进程中传递参数的方式?

python多线程有个全局解释器锁(global interpreter lock),简称GIL,这个GIL并不是python的特性,他是只在Cpython解释器里引入的一个概念,而在其他的语言编写的解释器里就没有这个GIL例如:Jython。

这个锁的意思是任一时间只能有一个线程运用解释器,跟单cpu跑多个程序一个意思,我们都是轮着用的,这叫“并发”,不是“并行”。

为什么会有GIL?

多核CPU的出现,充分利用多核,采用多线程编程慢慢普及,难点就是线程之间数据的一致性和状态同步

说到GIL解释器锁,我们容易想到在多线程中共享全局变量的时候会有线程对全局变量进行的资源竞争,会对全局变量的修改产生不是我们想要的结果,而那个时候我们用到的是python中线程模块里面的互斥锁,哪样的话每次对全局变量进行操作的时候,只有一个线程能够拿到这个全局变量;看下面的代码:

import threading
global_num = 0 def test1():
global global_num
for i in range(1000000):
global_num += 1 print("test1", global_num) def test2():
global global_num
for i in range(1000000):
global_num += 1 print("test2", global_num) t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
t1.start()
t2.start()

接下来加入互斥锁

import threading
import time
global_num = 0 lock = threading.Lock() def test1():
global global_num
lock.acquire()
for i in range(1000000):
global_num += 1
lock.release()
print("test1", global_num) def test2():
global global_num
lock.acquire()
for i in range(1000000):
global_num += 1
lock.release()
print("test2", global_num) t1 = threading.Thread(target=test1)
t2 = threading.Thread(target=test2)
start_time = time.time() t1.start()
t2.start()

哪些情况适合用多线程呢:

只要在进行耗时的IO操作的时候,能释放GIL,所以只要在IO密集型的代码里,用多线程就很合适

哪些情况适合用多进程呢:

用于计算密集型,比如计算某一个文件夹的大小

多进程间同享数据

多进程间同享数据,能够运用multiprocession.Value和multiprocessing.Array

第2题:解释一下python的and-or语法

bool and a or b

相当于bool? a: b

>>> a = "first"
>>> b = "second"
>>> 1 and a or b # 输出内容为 'first'
>>> 0 and a or b # 输出内容为 'second'

上述内容你应该可以理解,但是还存在一个问题,请看下面的代码

>>> a = ""
>>> b = "second"
>>> 1 and a or b # 输出内容为 'second'

因为 a 是一个空串,空串在一个布尔环境中被Python看成假值,这个表达式将“失败”,且返回 b 的值。

如果你不将它想象成象 bool ? a : b 一样的语法,而把它看成纯粹的布尔逻辑,这样的话就会得到正确的理解。

1 是真,a 是假,所以 1 and a 是假。假 or b 是b。

应该将 and-or 技巧封装成一个函数:

def choose(bool, a, b):
return (bool and [a] or [b])[0]

因为 [a] 是一个非空列表,它永远不会为假。甚至 a 是 0 或 ” 或其它假值,列表[a]为真,因为它有一个元素。

第3题: 请至少列举5个 PEP8 规范?

PEP8 规范 官方文档:https://www.python.org/dev/peps/pep-0008/

PEP8中文翻译:http://www.cnblogs.com/ajianbeyourself/p/4377933.html

这个在于平时的积累的了

  • 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  • 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。
  • 类和top-level函数定义之间空两行;类中的方法定义之间空一行;函数内逻辑无关段落之间空一行;其他地方尽量不要再空行。
  • 块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔
  • 各种右括号前不要加空格。
  • 逗号、冒号、分号前不要加空格。
  • 函数的左括号前不要加空格。
  • 序列的左括号前不要加空格。
  • 操作符左右各加一个空格,不要为了对齐增加空格。
  • 函数默认参数使用的赋值符左右省略空格。
  • 不要将多句语句写在同一行,尽管使用‘;’允许。

    i- f/for/while语句中,即使执行语句只有一句,也必须另起一行。
  • 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。

第4题: HTTPS和HTTP的区别:

  • https协议要申请证书到ca,需要一定经济成本
  • http是明文传输,https是加密的安全传输
  • 连接的端口不一样,http是80,https是443
  • http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。

还有很多,自己去整理一下吧

第5题:简述Django的orm

ORM,全拼Object-Relation Mapping,意为对象-关系映射

实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面向对象编程

ORM操作本质上会根据对接的数据库引擎,翻译成对应的sql语句,

所有使用Django开发的项目无需关心程序底层使用的是MySql、Oracle、SQLite....,如果数据库迁移,只需要更换Django的数据库引擎即可。

第6题:关注题,最近在公号更新一个神奇的系列入门文章

她专科学历

27岁从零开始学习c,c++,python编程语言

29岁编写百例教程

30岁掌握10种编程语言,

用自学的经历告诉你,学编程就找梦想橡皮擦

欢迎关注她的公众号,搜索— 非本科程序员

序号 文章
Python面试题No1 Python基础面试,看这篇文章画重点吧
Python面试题No2 Python面试快问快答,理论要的就是速度与精准
Python面试题No3 学习Python一年,基础忘记了,看看面试题回忆回议
Python面试题No4 去面试Python工程师,这几个基础问题一定要能回答
Python面试题No5 2019年,Python工程师必考的6个面试题
Python面试题No6 昨天去面试,这5个Python面试题都被考到了
Python面试题No7 周三面试Python开发,这几道Python面试题差点答错,Python面试题No7
Python面试题No8 面试Python工程师,这几道编码题有必要背背
Python面试题No9 又面试了Python爬虫工程师,碰到这么几道面试题
Python面试题No10 朋友去面试Python工程师,又带回来几道基础题
Python面试题No11 刚毕业去面试Python工程师,这几道题太难了
Python面试题No12 五一4天就背这些Python面试题了
Python面试题No13 大意了,这几道Python面试题没有答对
Python面试题No14 明天找python工作,看看这几道Python面试题吧
Python面试题No15 这几道Python面试题,稳准狠

千万不要错过这几道Python面试题,Python面试题No16的更多相关文章

  1. Python补充06 Python之道

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...

  2. 千万不要错过VAST,NGK算力的下一个财富机会!

    我们把目光投向NGK市场,近来,NGK接连新币,推出了SPC后,又有VAST.在目前市场上债券收益率已经趋近于零的情况下,世界上的大多数央行都在试图让本国货币贬值,所以在此时寻找其他保值资产是合理的. ...

  3. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  4. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  5. Python学习之Python简介

    Python简介 Python的由来 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,它是吉多·范罗苏姆(Guide van ...

  6. 【Python系列】Python自动发邮件脚本-html邮件内容

    缘起 这段时间给朋友搞了个群发邮件的脚本,为了防止进入垃圾邮件,做了很多工作,刚搞完,垃圾邮件进入率50%,觉得还不错,如果要将垃圾邮件的进入率再调低,估计就要花钱买主机了,想想也就算了,先发一个月, ...

  7. python第一篇-------python介绍

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...

  8. 人生苦短,我用python,为什么选择python,python简介

    认识 Python 人生苦短,我用 Python —— Life is short, you need Python  目标 Python 的起源 为什么要用 Python? Python 的特点 ...

  9. 用 Python 编写的 Python 解释器

    Allison是Dropbox的工程师,在那里她维护着世界上最大的由Python客户组成的网络.在Dropbox之前,她是Recurse Center的引导师, … 她在北美的PyCon做过关于Pyt ...

随机推荐

  1. (转)vmware克隆Centos6.4虚拟机网卡无法启动问题

    vmware克隆Centos6.4虚拟机网卡无法启动问题 原文:http://blog.51cto.com/oldboy/1363853 快速处理办法: cat /etc/sysconfig/netw ...

  2. (三)Redis两种持久化方案

    Redis的持久化策略:2种 RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘.RDB是Redis默认采用的持久化方 ...

  3. qemu 出现Could not access KVM kernel module: No such file or directory failed to initialize KVM: No such file or directory

    使用qemu命令 qemu-system-x86_64 -hda image/ubuntu-test.img -cdrom ubuntu-16.04.2-server-amd64.iso -m 102 ...

  4. 基于python3.6的如何爬取百度地图

    先前参考了其他的代码,大多数是python2.7写的,而3.6用的类库以及规则有了很大的变动,所以自己写了一个这样的代码,供给大家参考. def get_station(i): station=[] ...

  5. Eucalyptus管理页面密码设置

    桉树环境什么的都已经是配置好了的,但是过了一段时间不用,也不知道密码是什么了,看着下面的页面也不知道如何进去,这里我们通过命令行的方式重置用户名和密码信息. 登陆clc所在机器,输入下命令: euar ...

  6. URL最大长度问题

    在http协议中,其实并没有对url长度作出限制,往往url的最大长度和用户浏览器和Web服务器有关,不一样的浏览器,能接受的最大长度往往是不一样的,当然,不一样的Web服务器能够处理的最大长度的UR ...

  7. vs移动团队项目集合

    vs移动团队项目集合: https://msdn.microsoft.com/zh-cn/library/vs/alm/dd936138(v=vs.120)/css

  8. jq实现剪裁图片设置为头像

    有时候我们需要设置为这样,就是将某些图片设置为剪裁成设置的尺寸:就是这样的 插件的地址: http://www.htmleaf.com/jQuery/Image-Effects/20150421171 ...

  9. java Vamei快速教程13 String类

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前的Java基础系列中讨论了Java最核心的概念,特别是面向对象的基础.在Jav ...

  10. PHP:implode(),emplode() 字符串数组,数组字符串转换函数

    1.implode()-Join array elements with a string(把数组元素组合为一个字符串.) string implode([string $separator,] ar ...