12个Python程序员面试必备问题与答案(小结)


Posted in Python onJune 24, 2019

1. 什么是pickling和unpickling?

Pickle模块读入任何Python对象,将它们转换成字符串,然后使用dump函数将其转储到一个文件中——这个过程叫做pickling。反之从存储的字符串文件中提取原始Python对象的过程,叫做unpickling。

2. 什么是Python的命名空间?

在Python中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就好像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面寻找相应的对象。

3. *args,**kwargs?参数是什么?

如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。

4. 负索引是什么?

Python中的序列索引可以是正也可以是负。如果是正索引,0是序列中的第一个索引,1是第二个索引。如果是负索引,(-1)是最后一个索引而(-2)是倒数第二个索引。

5. Python是如何进行内存管理的?

Python的内存管理是由私有heap空间管理的。所有的Python对象和数据结构都在一个私有heap中。程序员没有访问该heap的权限,只有解释器才能对它进行操作。为Python的heap空间分配内存是由Python的内存管理模块进行的,其核心API会提供一些访问该模块的方法供程序员使用。Python有自带的垃圾回收系统,它回收并释放没有被使用的内存,让它们能够被其他程序使用。

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

首先遍历链表,寻找是否有相同地址,借此判断链表中是否有环。如果程序进入死循环,则需要一块空间来存储指针,遍历新指针时将其和储存的旧指针比对,若有相同指针,则该链表有环,否则将这个新指针存下来后继续往下读取,直到遇见NULL,这说明这个链表无环。

7. mysql数据库如何分区、分表?

分表可以通过三种方式:mysql集群、自定义规则和merge存储引擎。

分区有四类:

RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。

LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。

KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

8. 如何对查询命令进行优化?

a. 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索。

b. 应尽量避免在 where 子句中对字段进行 null 值判断,避免使用!=或<>操作符,避免使用 or 连接条件,或在where子句中使用参数、对字段进行表达式或函数操作,否则会导致权标扫描

c. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

d. 使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

e. 很多时候可考虑用 exists 代替 in

f. 尽量使用数字型字段

g. 尽可能的使用 varchar/nvarchar 代替 char/nchar

h. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

i. 尽量使用表变量来代替临时表。

j. 避免频繁创建和删除临时表,以减少系统表资源的消耗。

k. 尽量避免使用游标,因为游标的效率较差。

l. 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF

m. 尽量避免大事务操作,提高系统并发能力。

n. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

9. 多进程与多线程的区别?

a. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。

b. 线程的划分尺度小于进程,使得多线程程序的并发性高。

c. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

d. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

e. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

10. select和epoll的区别?

a. select实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。

b. select每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。

11. TCP和UDP的区别?边缘触发和水平触发的区别?

a. 基本区别:

  • 基于连接与无连接
  • TCP要求系统资源较多,UDP较少;
  • UDP程序结构较简单
  • 流模式(TCP)与数据报模式(UDP);
  • TCP保证数据正确性,UDP可能丢包
  • TCP保证数据顺序,UDP不保证

b. 编程中的区别

  • socket()的参数不同
  • UDP Server不需要调用listen和accept
  • UDP收发数据用sendto/recvfrom函数
  • TCP:地址信息在connect/accept时确定
  • UDP:在sendto/recvfrom函数中每次均 需指定地址信息
  • UDP:shutdown函数无效

12. 下面的代码能够运行么?请解释?

例如:

12个Python程序员面试必备问题与答案(小结)

能够运行。当key缺失时,执行DefaultDict类,字典的实例将自动实例化这个数列。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 Python
Python的Django框架中的表单处理示例
Jul 17 Python
python实现自动发送邮件
Jun 20 Python
Python中pandas模块DataFrame创建方法示例
Jun 20 Python
学生信息管理系统Python面向对象版
Jan 30 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
Python函数默认参数常见问题及解决方案
Mar 26 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
用python发送微信消息
Dec 21 Python
django框架模板中定义变量(set variable in django template)的方法分析
Jun 24 #Python
django框架model orM使用字典作为参数,保存数据的方法分析
Jun 24 #Python
python对文件目录的操作方法实例总结
Jun 24 #Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 #Python
python跳出双层for循环的解决方法
Jun 24 #Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 #Python
解决python执行不输出系统命令弹框的问题
Jun 24 #Python
You might like
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php生成缩略图的类代码
2008/10/02 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
Swoole源码中如何查询Websocket的连接问题详解
2020/08/30 PHP
jquery URL参数判断,确定菜单样式
2010/05/31 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
2014/02/21 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
Python标准库之sqlite3使用实例
2014/11/25 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
python 实现检验33品种数据是否是正态分布
2019/12/09 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python实现程序重启和系统重启方式
2020/04/16 Python
没编程基础可以学python吗
2020/06/17 Python
python为什么会环境变量设置不成功
2020/06/23 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
澳大利亚最好的在线时尚精品店:Princess Polly
2018/01/03 全球购物
英国浴室洗脸盆购物网站:Click Basin
2018/06/08 全球购物
会计岗位职责
2013/11/08 职场文书
自我评价中英文语句
2013/11/30 职场文书
员工薪酬福利制度
2014/01/17 职场文书
一夜的工作教学反思
2014/02/08 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
股东协议书
2014/04/14 职场文书
银行服务明星推荐材料
2014/05/29 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
二审答辩状格式
2015/05/22 职场文书