第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面试题,稳准狠

cpython python 区别面试_python基础教程之千万不要错过这几道Python面试题相关推荐

  1. python 包用法_Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 这篇文章主要介绍了 Python 基础教程之包和类的用法的相关资料, 需要的朋友可以参考下 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido ...

  2. python 字符串替换_Python基础教程,第四讲,字符串详解

    本节课主要和大家一起学习一下Python中的字符串操作,对字符串的操作在开发工作中的使用频率比较高,所以单独作为一课来讲. 学完此次课程,我能做什么? 学完本次课程后,我们将学会如何创建字符串,以及如 ...

  3. python expect模块_Python基础教程:用Python怎么telnet到网络设备

    Python基础教程:用Python怎么telnet到网络设备 0.前言 Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但 ...

  4. python 英语教学_Python基础教程(英文视频教学)

    Python基础教程 -.1.-.Installing_Python_video.flv: http://www.t00y.com/file/10034879 -.2.-.Numbers_and_Ma ...

  5. python怎么掉包_Python实战教程:拒绝调包,如何用python推导线性回归模型

    原标题:Python实战教程:拒绝调包,如何用python推导线性回归模型 最近有人问我一个问题,我数学不好,代码基础薄弱,英语一般般,如何入门当今最为前沿的机器学习领域?均方差损失,MSE,平方损失 ...

  6. python dict下标_Python基础教程:python的数据类型

    python基础之五大标准数据类型 学习一门语言,往往都是从Hello World开始. 但是笔者认为,在一个黑框框中输出一个"你好,世界"并没有什么了不起,要看透事物的本质,熟悉 ...

  7. python raise用处_python基础教程python raise的基本使用

    简介 当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常.一旦执行了raise语句,raise后面的语句将不能执行. 1.演示raise用法 try: s = None i ...

  8. python考勤管理系统_python基础教程:face++与python实现人脸识别签到(考勤)功能...

    @本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府 这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一 ...

  9. python石头剪刀布循环_python基础教程之实现石头剪刀布游戏示例

    下边是标准.你与你的敌人,在同一时间作出特殊的手式,务必是下边一种手式:石块,剪刀,布.胜者从 下边的标准中造成,这一标准自身是个谬论. (a) 布包石块. (b)石头砸剪刀, (c)剪刀剪碎布.在你 ...

最新文章

  1. php 新闻列表,php原生开发新闻站之新闻列表(二)
  2. Java实现的有道云笔记图片批量下载工具
  3. 回顾微软近年来对于Linux和开源的策略
  4. mysql五大子句_MySQL的查询语句中可以使用以下哪个子句来表示分组查询
  5. 网页底部的版权信息_Shopify底部的版权信息(Powered by Shopify )如何删除
  6. 计算机二级考试python_全国计算机等级考试考试大纲(2018年版)
  7. 《飞鸽传书》把写程序和文学创作相提并论
  8. Mono SVN最新代码或者Mono 1.2.5 支持IronPython 2.0
  9. 樊登讲亲密关系_看了《亲密关系》这本书,原来吵架是牺牲对方来保护自己
  10. date命令使用文档.txt
  11. 数据库安全之Mysql数据库安全加固
  12. Python爬虫之selenium爬虫,模拟浏览器爬取天猫信息
  13. oracle字符串转日期比较大小写,【varchar】oracle中比较日期大小日期定义的是varchar2类型的......
  14. LINUX doubango编译中prefix参数无效
  15. oracle instant client 32,Oracle Instant Client 配置方法
  16. 基于特征点检测的人脸融合技术
  17. java导出excel弹出下载框_[Java教程]Springmvc和poi3.9导出excel并弹出下载框
  18. XSS(跨站脚本攻击)理论知识
  19. c语言延时100us程序,编写100MS软件延时程序 汇编语言编写延时程序
  20. PYTHON从娃娃学起教程 教案 第一课计算机简史

热门文章

  1. Android 心跳呼吸动画
  2. c# 之继承、封装、多态
  3. 实现环形和扇形百分比
  4. swfupload使用说明
  5. 【转】使用手势对UIImageView进行缩放、旋转和移动
  6. centos7 日志文件
  7. sqlserver创建程序集
  8. spring事务在web环境中失效的问题
  9. Jmeter操作之跨线程组传递参数
  10. 简答String类的操作特点以及static方法的注意事项