APP下载
报价宝  ›  科技  › 

12 个 Python 程序员面试必备问题与答案

报价宝 来源:baojiabao.com 发布时间:2019-10-16 16:55:00 09月10日更新
报价宝综合消息12 个 Python 程序员面试必备问题与答案

需要Python学习资料。面试题、开发工具,评论区评论“学习”

关注私信小编“Python”免费领取!!!

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和acceptUDP收发资料用sendto/recvfrom函式TCP:地址资讯在connect/accept时确定UDP:在sendto/recvfrom函式中每次均 需指定地址资讯UDP:shutdown函式无效12. 下面的程式码能够执行么?请解释?

例如:

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

需要Python学习资料。面试题、开发工具,评论区评论“学习”

关注私信小编“Python”免费领取。

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 数码相机价格 汽车价格 电视机价格 华为手机价格 耳机价格