Python小白项目练习500例(附源代码),练完可就业

1.有一个jsonline格式的文件file.txt大小约为10K

2.补充缺失的代码

3.输入日期, 判断这一天是这一年的第几天?

4.打乱一个排好序的list对象alist?

5.现有字典 d= {‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按value值进行排序?

6.字典推导式

7.请反转字符串 “aStr”?

8.将字符串 “k:1 |k1:2|k2:3|k3:4”,处理成字典 {k:1,k1:2,…}

9.请按alist中元素的age由大到小排序

10.下面代码的输出结果将是什么?

11.写一个列表生成式,产生一个公差为11的等差数列

12.给定两个列表,怎么找出他们相同的元素和不同的元素?

13.请写出一段python代码实现删除list里面的重复元素?

14.给定两个list A,B ,请用找出A,B中相同与不同的元素 企业面试题

15.python新式类和经典类的区别?

16.python中内置的数据结构有几种?

17.python如何实现单例模式?请写出两种实现方式?

18.反转一个整数,例如-123 --> -321

19.设计实现遍历目录与子目录,抓取.pyc文件

20.一行代码实现1-100之和

21.Python-遍历列表时删除元素的正确做法

22.字符串的操作题目

23.可变类型和不可变类型

24.is和==有什么区别?

25.求出列表所有奇数并构造新列表

26.用一行python代码写出1+2+3+10248

27.Python中变量的作用域?(变量查找顺序)

28.字符串 “123” 转换成 123 ,不使用内置api,例如 int()

29.Given an array of integers

30.python代码实现删除一个list里面的重复元素

31.统计一个文本中单词频次最高的10个单词?

32.请写出一个函数满足以下条件

33.使用单一的列表生成式来产生一个新的列表

34.用一行代码生成[1,4,9,16,25,36,49,64,81,100]

35.输入某年某月某日,判断这一天是这一年的第几天?

36.两个有序列表,l1,l2,对这两个列表进行合并不可使用extend

37.给定一个任意长度数组,实现一个函数

38.写一个函数找出一个整数数组中,第二大的数

39.阅读一下代码他们的输出结果是什么?

40.统计一段字符串中字符出现的次数

41.super函数的具体用法和场景

42.Python中类方法、类实例方法、静态方法有何区别?

43.遍历一个object的所有属性,并print每一个属性名?

44.写一个类,并让它尽可能多的支持操作符?

45.介绍Cython,Pypy Cpython Numba各有什么缺点

46.请描述抽象类和接口类的区别和联系

47.Python中如何动态获取和设置对象的属性?

48.哪些操作会导致Python内存溢出,怎么处理?

49.关于Python内存管理,下列说法错误的是 B

50.Python的内存管理机制及调优手段?

51.内存泄露是什么?如何避免?

52.python常见的列表推导式?

53.简述read、readline、readlines的区别?

54.什么是Hash(散列函数)?

55.python函数重载机制?

56.写一个函数找出一个整数数组中,第二大的数

57.手写一个判断时间的装饰器

58.使用Python内置的filter()方法来过滤?

59.编写函数的4个原则

60.函数调用参数的传递方式是值传递还是引用传递?

61.如何在function里面设置一个全局变量

62.对缺省参数的理解 ?

63.Mysql怎么限制IP访问?

64.带参数的装饰器?

65.为什么函数名字可以当做参数用?

66.Python中pass语句的作用是什么?

67.有这样一段代码,print c会输出什么,为什么?

68.交换两个变量的值?

69.map函数和reduce函数?

70.回调函数,如何通信的?

71.Python主要的内置数据类型都有哪些? print dir( ‘a ’) 的输出?

72.map(lambda x:xx,[y for y in range(3)])的输出?

73.hasattr() getattr() setattr() 函数使用详解?

74.一句话解决阶乘函数?

75.什么是lambda函数? 有什么好处?

76.递归函数停止的条件?

77.下面这段代码的输出结果将是什么?请解释。

78.什么是lambda函数?它有什么好处?写一个匿名函数求两个数的和

79.对设计模式的理解,简述你了解的设计模式?

80.请手写一个单例

81.单例模式的应用场景有那些?

82.用一行代码生成[1,4,9,16,25,36,49,64,81,100]

83.对装饰器的理解,并写出一个计时器记录方法执行性能的装饰器?

84.解释以下什么是闭包?

85.函数装饰器有什么作用?

86.生成器,迭代器的区别?

87.X是什么类型?

88.请用一行代码 实现将1-N 的整数列表以3为单位分组

89.Python中yield的用法?

90.Python中的可变对象和不可变对象?

91.Python的魔法方法

92.面向对象中怎么实现只读属性?

93.谈谈你对面向对象的理解?

94.请写出一段代码用正则匹配出ip?

95.a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?

96.Python字符串查找和替换?

97.用Python匹配HTML g tag的时候,<.> 和 <.*?> 有什么区别

98.正则表达式贪婪与非贪婪模式的区别?

99.写出开头匹配字母和下划线,末尾是数字的正则表达式?

100.正则表达式操作

101.请匹配出变量A 中的json字符串。

102.怎么过滤评论中的表情?

103.简述Python里面search和match的区别

104.请写出匹配ip的Python正则表达式

105.Python里match与search的区别?

106.进程总结

107.谈谈你对多进程,多线程,以及协程的理解,项目是否用?

108.Python异常使用场景有那些?

109.多线程共同操作同一个数据互斥锁同步?

110.什么是多线程竞争?

111.请介绍一下Python的线程同步?

112.解释以下什么是锁,有哪几种锁?

113.什么是死锁?

114.多线程交互访问数据,如果访问到了就不访问了?

115.什么是线程安全,什么是互斥锁?

116.说说下面几个概念:同步,异步,阻塞,非阻塞?

117.什么是僵尸进程和孤儿进程?怎么避免僵尸进程?

118.python中进程与线程的使用场景?

119.线程是并发还是并行,进程是并发还是并行?

120.并行(parallel)和并发(concurrency)?

121.IO密集型和CPU密集型区别?

122.python asyncio的原理?

123.怎么实现强行关闭客户端和服务器之间的连接?

124.简述TCP和UDP的区别以及优缺点?

125.简述浏览器通过WSGI请求动态资源的过程?

126.描述用浏览器访问www.baidu.com的过程

127.Post和Get请求的区别?

128.cookie 和session 的区别?

129.列出你知道的HTTP协议的状态码,说出表示什么意思?

130.请简单说一下三次握手和四次挥手?

131.说一下什么是tcp的2MSL?

132.为什么客户端在TIME-WAIT状态必须等待2MSL的时间?

133.说说HTTP和HTTPS区别?

134.谈一下HTTP协议以及协议头部中表示数据类型的字段?

135.HTTP请求方法都有什么?

136.使用Socket套接字需要传入哪些参数 ?

137.HTTP常见请求头?

138.七层模型?

139.url的形式?

140.对Flask蓝图(Blueprint)的理解?

141.Flask 和 Django 路由映射的区别?

142.什么是wsgi,uwsgi,uWSGI?

143.Django、Flask、Tornado的对比?

144.CORS 和 CSRF的区别?

145.Session,Cookie,JWT的理解

146.简述Django请求生命周期

147.用的restframework完成api发送时间时区

148.nginx,tomcat,apach到都是什么?

149.请给出你熟悉关系数据库范式有哪些,有什么作用?

150.简述QQ登陆过程

151.post 和 get的区别?

152.项目中日志的作用

153.django中间件的使用?

154.谈一下你对uWSGI和nginx的理解?

155.Python中三大框架各自的应用场景?

156.Django中哪里用到了线程?哪里用到了协程?哪里用到了进程?

157.有用过Django REST framework吗?

158.对cookies与session的了解?他们能单独用吗?

159.试列出至少三种目前流行的大型数据库

160.列举您使用过的Python网络爬虫所用到的网络数据包?

161.爬取数据后使用

哪个数据库存储数据的,为什么? 162.你用过的爬虫框架或者模块有哪些?优缺点?

163.写爬虫是用多进程好?还是多线程好?

164.常见的反爬虫和应对方法?

165.解析网页的解析器使用最多的是哪几个?

166.需要登录的网页,如何解决同时限制ip,cookie,session

167.验证码的解决?

168.使用最多的数据库,对他们的理解?

169.

编写过哪些爬虫中间件? 170.“极验”滑动验证码如何破解?

171.爬虫多久爬一次,爬下来的数据是怎么存储?

172.cookie过期的处理问题?

173.动态加载又对及时性要求很高怎么处理?

174.HTTPS有什么优点和缺点?

175.HTTPS是如何实现安全传输数据的?

176.TTL,MSL,RTT各是什么?

177.谈一谈你对Selenium和PhantomJS了解

178.平常怎么使用代理的 ?

179.存放在数据库(redis、mysql等)。

180.怎么监控爬虫的状态?

181.描述下scrapy框架运行的机制?

182.谈谈你对Scrapy的理解?

183.怎么样让 scrapy 框架发送一个 post 请求(具体写出来)

184.怎么监控爬虫的状态 ?

185.怎么判断网站是否更新?

186.图片、视频爬取怎么绕过防盗连接

187.你爬出来的数据量大概有多大?大概多长时间爬一次?

188.用什么数据库存爬下来的数据?部署是你做的吗?怎么部署?

189.增量爬取

190.爬取下来的数据如何去重,说一下scrapy的具体的算法依据。

191.Scrapy的优缺点?

192.怎么设置爬取深度?

193.scrapy和scrapy-redis有什么区别?为什么选择redis数据库?

194.分布式爬虫主要解决什么问题?

195.什么是分布式存储?

196.你所知道的分布式爬虫方案有哪些?

197.scrapy-redis,有做过其他的分布式爬虫吗?

198.主键 超键 候选键 外键

199.视图的作用,视图可以更改么?

200.drop,delete与truncate的区别

201.索引的工作原理及其种类

202.连接的种类

203.数据库优化的思路

204.存储过程与触发器的区别

205.悲观锁和乐观锁是什么?

206.你常用的mysql引擎有哪些?各引擎间有什么区别?

207.Redis宕机怎么解决?

208.redis和mecached的区别,以及使用场景

209.Redis集群方案该怎么做?都有哪些方案?

210.Redis回收进程是如何工作的

211.MongoDB中对多条记录做更新操作命令是什么?

212.MongoDB如何才会拓展到多个shard里?

213.编写测试计划的目的是

214.对关键词触发模块进行测试

215.其他常用笔试题目网址汇总

216.测试人员在软件开发过程中的任务是什么

217.一条软件Bug记录都包含了哪些内容?

218.简述黑盒测试和白盒测试的优缺点

219.请列出你所知道的软件测试种类,至少5项

220.Alpha测试与Beta测试的区别是什么?

221.举例说明什么是Bug?一个bug report应包含什么关键字?

222.数组中出现次数超过一半的数字-Python版

223.求100以内的质数

224.无重复字符的最长子串-Python实现

225.通过2个5/6升得水壶从池塘得到3升水

226.什么是MD5加密,有什么特点?

227.什么是对称加密和非对称加密

228.冒泡排序的思想?

229.快速排序的思想?

230.如何判断单向链表中是否有环?

231.你知道哪些排序算法(一般是通过问题考算法)

232.斐波那契数列

233.如何翻转一个单链表?

234.青蛙跳台阶问题

235.两数之和 Two Sum

236.搜索旋转排序数组 Search in Rotated Sorted Array

237.Python实现一个Stack的数据结构

238.写一个二分查找

239.set 用 in 时间复杂度是多少,为什么?

240.列表中有n个正整数范围在[0,1000],进行排序;

241.面向对象编程中有组合和继承的方法实现新的类

242.找出1G的文件中高频词

243.一个大约有一万行的文本文件统计高频词

244.怎么在海量数据中找出重复次数最多的一个?

245.判断数据是否在大量数据中

102.怎么过滤评论中的表情?

思路:主要是匹配表情包的范围,将表情包的范围用空替换掉
import re 
pattern = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]') 
pattern.sub('',text)

103.简述Python里面search和match的区别

match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None;
search()函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

106.进程总结

进程:程序运行在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。
创建进程:
首先要导入multiprocessing中的Process:
创建一个Process对象;
创建Process对象时,可以传递参数;

p = Process(target=XXX,args=(tuple,),kwargs={key:value}) 
target = XXX 指定的任务函数,不用加(), 
args=(tuple,)kwargs={key:value}给任务函数传递的参数

使用start()启动进程
结束进程
给子进程指定函数传递参数Demo

在这里插入图片描述
注意:进程间不共享全局变量

进程之间的通信-Queue

在初始化Queue()对象时(例如q=Queue(),若在括号中没有指定最大可接受的消息数量,获数量为负值时,那么就代表可接受的消息数量没有上限一直到内存尽头)

Queue.qsize():返回当前队列包含的消息数量
Queue.empty():如果队列为空,返回True,反之False
Queue.full():如果队列满了,返回True,反之False
Queue.get([block[,timeout]]):获取队列中的一条消息,然后将其从队列中移除,
block默认值为True。

如果block使用默认值,且没有设置timeout(单位秒),消息队列如果为空,此时程序将被阻塞(停在读中状态),直到消息队列读到消息为止,如果设置了timeout,则会等待timeout秒,若还没读取到任何消息,则抛出“Queue.Empty"异常:

Queue.get_nowait()相当于Queue.get(False)

Queue.put(item,[block[,timeout]]):将item消息写入队列,block默认值为True;

如果block使用默认值,且没有设置timeout(单位秒),消息队列如果已经没有空间可写入,此时程序将被阻塞(停在写入状态),直到从消息队列腾出空间为止,如果设置了timeout,则会等待timeout秒,若还没空间,则抛出”Queue.Full"异常

如果block值为False,消息队列如果没有空间可写入,则会立刻抛出"Queue.Full"异常;
Queue.put_nowait(item):相当Queue.put(item,False)
进程间通信Demo:

在这里插入图片描述
在这里插入图片描述
进程池Pool

在这里插入图片描述
在这里插入图片描述
进程池中使用Queue

如果要使用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue(),而不是
multiprocessing.Queue(),否则会得到如下的错误信息:

RuntimeError: Queue objects should only be shared between processs through inheritance

在这里插入图片描述
107.谈谈你对多进程,多线程,以及协程的理解,项目是否用?

这个问题被问的概念相当之大,
进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。

线程: cpu调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在,一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。

协程: 是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。

协程调度时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操中栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

108.Python异步使用场景有那些?

异步的使用场景:

1、 不涉及共享资源,获对共享资源只读,即非互斥操作
2、 没有时序上的严格关系
3、 不需要原子操作,或可以通过其他方式控制原子性
4、 常用于IO操作等耗时操作,因为比较影响客户体验和使用性能
5、 不影响主线程逻辑

109.多线程共同操作同一个数据互斥锁同步?

在这里插入图片描述
110.什么是多线程竞争?

线程是非独立的,同一个进程里线程是数据共享的,当各个线程访问数据资源时会出现竞争状态即:数据几乎同步会被多个线程占用,造成数据混乱,即所谓的线程不安全

那么怎么解决多线程竞争问题?—锁

锁的好处: 确保了某段关键代码(共享数据资源)只能由一个线程从头到尾完整地执行能解决多线程资源竞争下的原子操作问题。

锁的坏处: 阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了

锁的致命问题: 死锁

111.请介绍一下Python的线程同步?

一、 setDaemon(False)
当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行的最小单位,当设置多线程时,主线程会创建多个子线程,在Python中,默认情况下就是setDaemon(False),主线程执行完自己的任务以后,就退出了,此时子线程会继续执行自己的任务,直到自己的任务结束。

例子
在这里插入图片描述
在这里插入图片描述
二、 setDaemon(True)
当我们使用setDaemon(True)时,这是子线程为守护线程,主线程一旦执行结束,则全部子线程被强制终止

例子

在这里插入图片描述
三、 join(线程同步)
join 所完成的工作就是线程同步,即主线程任务结束以后,进入堵塞状态,一直等待所有的子线程结束以后,主线程再终止。

当设置守护线程时,含义是主线程对于子线程等待timeout的时间将会杀死该子线程,最后退出程序,所以说,如果有10个子线程,全部的等待时间就是每个timeout的累加和,简单的来说,就是给每个子线程一个timeou的时间,让他去执行,时间一到,不管任务有没有完成,直接杀死。

没有设置守护线程时,主线程将会等待timeout的累加和这样的一段时间,时间一到,主线程结束,但是并没有杀死子线程,子线程依然可以继续执行,直到子线程全部结束,程序退出。

例子

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

112.解释以下什么是锁,有哪几种锁?

锁(Lock)是python提供的对线程控制的对象。有互斥锁,可重入锁,死锁。

113.什么是死锁?

若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互相干等着,程序无法执行下去,这就是死锁。

GIL锁 全局解释器锁

作用: 限制多线程同时执行,保证同一时间只有一个线程执行,所以cython里的多线程其实是伪多线程!

所以python里常常使用协程技术来代替多线程,协程是一种更轻量级的线程。
进程和线程的切换时由系统决定,而协程由我们程序员自己决定,而模块gevent下切换是遇到了耗时操作时才会切换

三者的关系:进程里有线程,线程里有协程。

114.多线程交互访问数据,如果访问到了就不访问了?

怎么避免重读?

创建一个已访问数据列表,用于存储已经访问过的数据,并加上互斥锁,在多线程访问数据的时候先查看数据是否在已访问的列表中,若已存在就直接跳过。

115.什么是线程安全,什么是互斥锁?

每个对象都对应于一个可称为’互斥锁‘的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

同一进程中的多线程之间是共享系统资源的,多个线程同时对一个对象进行操作,一个线程操作尚未结束,另一线程已经对其进行操作,导致最终结果出现错误,此时需要对被操作对象添加互斥锁,保证每个线程对该对象的操作都得到正确的结果。

116.说说下面几个概念:同步,异步,阻塞,非阻塞?

同步: 多个任务之间有先后顺序执行,一个执行完下个才能执行。
异步: 多个任务之间没有先后顺序,可以同时执行,有时候一个任务可能要在必要的时候获取另一个同时执行的任务的结果,这个就叫回调!

阻塞: 如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。
非阻塞: 如果不会卡住,可以继续执行,就是说非阻塞的。

同步异步相对于多任务而言,阻塞非阻塞相对于代码执行而言。

117.什么是僵尸进程和孤儿进程?怎么避免僵尸进程?

孤儿进程: 父进程退出,子进程还在运行的这些子进程都是孤儿进程,孤儿进程将被init 进程(进程号为1)所收养,并由init 进程对他们完成状态收集工作。

进程: 进程使用fork 创建子进程,如果子进程退出,而父进程并没有调用wait 获waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中的这些进程是僵尸进程。

避免僵尸进程的方法:

1.fork 两次用孙子进程去完成子进程的任务
2.用wait()函数使父进程阻塞
3.使用信号量,在signal handler 中调用waitpid,这样父进程不用阻塞

118.python中进程与线程的使用场景?

多进程适合在CPU密集操作(cpu操作指令比较多,如位多的的浮点运算)。
多线程适合在IO密性型操作(读写数据操作比多的的,比如爬虫)

119.线程是并发还是并行,进程是并发还是并行?

线程是并发,进程是并行;
进程之间互相独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源。

120.并行(parallel)和并发(concurrency)?

并行: 同一时刻多个任务同时在运行不会在同一时刻同时运行,存在交替执行的情况。
实现并行的库有: multiprocessing
实现并发的库有: threading

程序需要执行较多的读写、请求和回复任务的需要大量的IO操作,IO密集型操作使用并发更好。

CPU运算量大的程序,使用并行会更好

121.IO密集型和CPU密集型区别?

IO密集型: 系统运行,大部分的状况是CPU在等 I/O(硬盘/内存)的读/写 CPU密集型:
大部分时间用来做计算,逻辑判断等CPU动作的程序称之CPU密集型。

122.python asyncio的原理?

asyncio这个库就是使用python的yield这个可以打断保存当前函数的上下文的机制, 封装好了selector摆脱掉了复杂的回调关系

125.简述浏览器通过WSGI请求动态资源的过程?

浏览器发送的请求被Nginx监听到,Nginx根据请求的URL的PATH或者后缀把请求静态资源的分发到静态资源的目录,别的请求根据配置好的转发到相应端口。

实现了WSGI的程序会监听某个端口,监听到Nginx转发过来的请求接收后(一般用socket的recv来接收HTTP的报文)以后把请求的报文封装成 environ 的字典对象,然后再提供一个 start_response 的方法。把这两个对象当成参数传入某个方法比如 wsgi_app(environ, start_response) 或者实现了__call__(self, environ, start_response) 方法的某个实例。这个实例再调用 start_response返回给实现了WSGI的中间件,再由中间件返回给Nginx。

126.描述用浏览器访问www.baidu.com的过程
127.Post和Get请求的区别?
128.cookie 和session 的区别?
129.列出你知道的HTTP协议的状态码,说出表示什么意思?
130.请简单说一下三次握手和四次挥手?
131.说一下什么是tcp的2MSL?
132.为什么客户端在TIME-WAIT状态必须等待2MSL的时间?
133.说说HTTP和HTTPS区别?
134.谈一下HTTP协议以及协议头部中表示数据类型的字段?
135.HTTP请求方法都有什么?
136.使用Socket套接字需要传入哪些参数 ?
137.HTTP常见请求头?
138.七层模型?
139.url的形式?

140.对Flask蓝图(Blueprint)的理解?

蓝图的定义

蓝图 /Blueprint 是Flask应用程序组件化的方法,可以在一个应用内或跨越多个项目共用蓝图。使用蓝图可以极大简化大型应用的开发难度,也为Flask扩展提供了一种在应用中注册服务的集中式机制。

蓝图的应用场景:

把一个应用分解为一个蓝图的集合。这对大型应用是理想的。一个项目可以实例化一个应用对象,初始化几个扩展,并注册一集合的蓝图。

以URL前缀和/或子域名,在应用上注册一个蓝图。URL前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)
在一个应用中用不同的URL规则多次注册一个蓝图。

通过蓝图提供模板过滤器、静态文件、模板和其他功能。一个蓝图不一定要实现应用或视图函数。初始化一个Flask扩展时,在这些情况中注册一个蓝图。

蓝图的缺点:
不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。
使用蓝图的三个步骤

1.创建一个蓝图对象

blue = Blueprint("blue",__name__)

2.在这个蓝图对象上进行操作,例如注册路由、指定静态文件夹、注册模板过滤器…

@blue.route('/') 
def blue_index(): 
	return "Welcome to my blueprint"

3.在应用对象上注册这个蓝图对象

app.register_blueprint(blue,url_prefix="/blue")

你可能感兴趣的:(项目,python,队列,面试)