面试答案

第一部分 Python基础篇(80题)

一、为何学习Python?

  • 一、语言自己简洁,优美,功能超级强大,
  • 二、跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能作
  • 三、很是火爆的社区
  • 四、不少有名的大公司堵在用

二、经过什么途径学习的Python?

    经过自学书籍、搜索资料进行学习html

三、Python和Java、PHP、C、C#、C++等其余语言的对比?

  • 一、c,它是现代编辑语言的老一辈了,在现代应用中使用很少,全部大部分语言,写法都和c语言差很少,经常被用做学习其余语言的基础
  • 二、PHP语言主要适用于网页编辑,而python适合与各个领域
  • 三、c++是面向对象的c语言,因为偏底层,因此性能很是高,主要用在一个要求高性能的领域
  • 四、学习起来python要比java简单快捷的多,java从c++的系统语言中继承了许多语法和复杂型,而python的语法很是简洁,大大提升编写效率;
  • 五、python是解释性语言,不须要额外的编译过程,而c#必须编译后才能执行
  • 六、python程序是开源的,但c#却不是,python能够跨平台 
  • 七、python比c++等这类语言,更容易学习,语法规则简单,语意化,易读易懂,容易维护  

四、简述解释型和编译型编程语言?

解释型语言

    解释型语言编写的程序不须要编译,在执行的时候,专门有一个解释器可以将VB语言((Visual Basic)通用的基于对象的程序设计语言))翻译成机器语言,每一个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

编译器语言

    用编译型语言写的程序执行以前,须要一个专门的编译过程,经过编译系统,把源高级程序编译成为机器语言文件,翻译只作了一次,运行时不须要翻译,因此编译型语言的程序执行效率高,但也不能一律而论。
    部分解释型语言的解释器经过在运行时动态优化代码,甚至可以使解释型语言的性能超过编译型语言。

五、Python解释器种类以及特色?

  • CPython:这个解释器是用C语言开发的,因此叫CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器;
  • Jython:Jython是运行在Java平台上的Python解释器,能够直接把Python代码编译成Java字节码执行;
  • PyPy:PyPy是另外一个Python解释器,对Python代码进行动态编译(注意不是解释),因此能够显著提升Python代码的执行速度;
  • IPython:IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所加强。

六、位和字节的关系?

 1字节=8位、一个字符=2字节

七、b、B、KB、MB、GB 的关系?

  1B=8b、1KB=1024B、1MB=1024KB、1G=1024MB

八、请至少列举5个 PEP8 规范(越多越好)

  •  一、缩进。4个空格的缩进(编辑器均可以完成此功能),不使用Tap,更不能混合使用Tap和空格。
  •  二、每行最大长度79,换行可使用反斜杠,最好使用圆括号。换行点要在操做符的后边敲回车。
  •  三、不要在一句import中多个库,好比import os, sys不推荐
  •  四、逗号、冒号、分号前不要加空格。
  •  五、整体原则,避免没必要要的空格
  •  六、类的方法第一个参数必须是self,而静态方法第一个参数必须是cls

九、经过代码实现以下转换:

二进制转换成十进制:v = “0b1111011”     答: print(int("0b1111011",2))

十进制转换成二进制:v = 18              答:print("转换为二进制为:", bin(18))

八进制转换成十进制:v = “011”           答:print(int("011",8))

十进制转换成八进制:v = 30              答:print("转换为八进制为:", oct(30))

 

十六进制转换成十进制:v = “0x12”        答:print(int("0x12",16))

十进制转换成十六进制:v = 87            答:print("转换为十六进制为:", hex(87))

十、请编写一个函数实现将IP地址转换成一个整数。

 

 

十一、python递归的最大层数?

默认最大次数1000,这是python专门设置的一种机制用来防止无限递归形成Python溢出崩溃, 最大递归次数是能够从新调整的

import sys
sys.setrecursionlimit(1500)

def ret(n):
  n += 1
print(n)
ret(n)

if__name__=="__main__":
  ret(1)

十二、求结果:

v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or Flase and 1
答:
v1 = 1 
v2 = 3 
v3 = 0
v4 = 1
v5 = 1 
v6会报错

1三、ascii、unicode、utf-八、gbk 区别?

ASCII码使用一个字节编码,因此它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。

Unicode可以表示全世界全部的字节

UTF-88-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码

GBK是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。

1四、字节码和机器码的区别?

字节码:字节码是一种中间状态(中间码)的二进制代码(文件)。须要直译器转译后才能成为机器码。

机器码:机器码就是计算机能够直接执行,而且执行速度最快的代码。

1五、三元运算规则以及应用场景?

三元运算符就是在赋值变量的时候,能够直接加判断,而后赋值

三元运算符的功能与'if....else'流程语句一致,它在一行中书写,代码很是精炼,执行效率更高

 
格式:[on_true] if [expression] else [on_false]

           res = 值1 if 条件 else 值2

1六、列举 Python2和Python3的区别?

  1、print

      在python2中,print被视为一个语句而不是一个函数,python3中,print()被视为一个函数

 
  2、整数的除法

      在python2中,键入的任何不带小数的数字,将被视为整数的编程类型。好比5/2=2,解决方法:5.0/2.0=2.5


      在python3中,整数除法变得更直观 5/2=2.5


  3、Unicode


      Python 2 默认使用 ASCII 字母表;Python 3 默认使用 Unicode

 
  4、后续发展

 
      Python 2.7 将在 2020 年失去后续的支持,

      Python 3 将继续开发更多的功能和修复更多的错误。

1七、用一行代码实现数值交换:          

a = 1  b = 2
a, b = b, a

1八、Python3和Python2中 int 和 long的区别?

int(符号整数):一般被称为是整数或整数,没有小数点的正或负整数;


long(长整数):无限大小的整数,这样写整数和一个大写或小写的L。

1九、xrange和range的区别?

range: 函数说明,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个列表。

 
xrange:函数说明,xrange 用法与 range 彻底相同,所不一样的是生成的不是一个list对象,而是一个生成器。

 
 1、range和xrange都是在循环中使用,输出结果同样。
 2、range返回的是一个list对象,而xrange返回的是一个生成器对象(xrange object)。
 3、xrange则不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少,于是性能很是好。

注意:Python 3.x已经去掉xrange,所有用range代替。

20、文件操做时:xreadlines和readlines的区别?

  两者使用时相同,但返回类型不一样,xreadlines返回的是一个生成器,readlines返回的是list

2一、列举布尔值为False的常见值?

0 , [ ] , " , ( ) , { }

2二、字符串、列表、元组、字典每一个经常使用的5个方法?

 


# 字符串
words = "today is a wonderfulday"
print(words.strip('today'))      # 若是strip方法指定一个值的话,那么会去掉这两个值
print(words.count('a'))          # 统计字符串出现的次数
print(words.index('is'))         # 找下标
print(words.index('z'))          # 找下标若是元素不找不到的话,会报错
print(words.find('z'))           # 找下标,若是元素找不到的话,返回-1
print(words.replace('day','DAY'))# 字符串替换

# 列表 sample_list
= ['a', 1, ('a', 'b')] # 建立列表 sample_list = ['a', 'b', 0, 1, 3] # Python列表操做 value_start = sample_list[0] # 获得列表中的某一个值 end_value = sample_list[-1] # 获得列表中的某一个值 del sample_list[0] # 删除列表的第一个值 sample_list[0:0] = ['sample value'] # 在列表中插入一个值

# 元组 #元组也是一个list,他和list的区别是元组的元素没法修改 tuple1
= (2, 3, 4, 5, 6, 4, 7) print(type(tuple1)) print(tuple1[:7]) print(tuple1[: 5: -1]) for i in range(6): print(tuple1[i]) for i in tuple1: print(i) # 字典 D.get(key, 0) # 同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常 D.has_key(key) # 有该键返回TRUE,不然FALSE D.keys() # 返回字典键的列表 D.clear() # 清空字典,同del dict D.copy() # 拷贝字典

2三、lambda表达式格式以及应用场景?    

lambda表达式,一般是在须要一个函数,可是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

 
add = lambda x, y : x+y

print(add(1,2))  # 结果为3

应用在函数式编程中 应用在闭包中

2四、pass的做用?

1、空语句 do nothing
2、保证格式完整,保证语义完整
3、占位语句

2五、*arg和**kwarg做用

 

*args:能够理解为只有一列的表格,长度不固定。 

**kwargs:能够理解为字典,长度也不固定。

1、函数调用里的*arg和**kwarg:
  (1) *arg:元组或列表“出现”
       **kwarg:字典“出没”
  (2)分割参数
2、函数定义时传的*arg /**kwarg: 1)接收参数

2六、is和==的区别

is是对比地址(id),==是对比值

2七、简述Python的深浅拷贝以及应用场景?

浅拷贝:copy.copy     深拷贝:copy.deepcopy

浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的全部层

主要应用在字符串,数字的深浅拷贝

2八、Python垃圾回收机制?

Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还能够通
过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。经过“分代回收”(generation collection)以空间换取时间来进一步提升垃圾回收的效率。

2九、Python的可变类型和不可变类型?

Python的每一个对象都分为可变和不可变

可变:列表、字典  

不可变:数字、字符串、元组

30、求结果:

v = dict.fromkeys(['k1','k2'],[])
v['k1'].append(666)
print(v)
v['k1'] = 777
print(v)
答: {
'k1': [666], 'k2': [666]} {'k1': 777, 'k2': [666]}

3一、求结果:

def  num():
    return [lambda x:i*x for i in range(4)]
print([ m(2) for m in num()])

答:
  [6, 6, 6, 6]

3二、列举常见的内置函数?   

1、abs()     此函数返回数字的绝对值。 

2、all()     此函数用于判断给定的可迭代参数 iterable 中的全部元素是否都不为 0、都不为False 或者iterable都 为空,若是是返回 True,不然返回 False。

3、bin()     返回一个整数 int 或者长整数 long int 的二进制表示。

4bool()    函数用于将给定参数转换为布尔类型,若是没有参数,返回 False。

5、dict()     函数用于建立一个字典。

3三、filter、map、reduce的做用?

通俗的说.这三者都是用在一堆数据(好比一个列表)上.

map是用一样方法把全部数据都改为别的..字面意思是映射..好比把列表的每一个数都换成其平方.

reduce是用某种方法依次把全部数据丢进去最后获得一个结果..字面意思是化简..好比计算一个列表全部数的和的过程,就是维持一个部分和而后依次把每一个数加进去.

filter是筛选出其中知足某个条件的那些数据..字面意思是过滤..好比挑出列表中全部奇数

3四、一行代码实现9*9乘法表

print (‘\n‘.join([‘ ‘.join([‘%s*%s=%-2s‘ % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

3五、如何安装第三方模块?以及用过哪些第三方模块?

pip install 模块名

or

pip3 install 模块名

3六、至少列举8个经常使用模块都有那些

pip、pygame、pyMysql、sys、math、time、os

3七、re的match和search区别?

re.match()从开头开始匹配string。

re.search()从anywhere 来匹配string。

3八、什么是正则的贪婪匹配?

贪婪匹配:正则表达式通常趋向于最大长度匹配,也就是所谓的贪婪匹配

非贪婪匹配:就是匹配到结果就好,就少的匹配字符

默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式

3九、求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )

 


40、求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2

 

4一、def func(a,b=[]) 这种写法有什么坑?

 

4二、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

 

4三、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

 

4四、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?

 

4五、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?

 

 

 

 

4六、一行代码实现删除列表中重复的值 ?

 


4七、如何在函数中设置一个全局变量 ?

 

4八、logging模块的做用?以及应用场景?

能够经过设置不一样的日志等级,在release版本中只输出重要信息,而没必要显示大量的调试信息;

print将全部信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则能够由开发者决定将信息输出到什么地方,以及怎么输出;

4九、请用代码简答实现stack 。

 


50、经常使用字符串格式化哪几种?

{0}.format


%s.%值


5一、简述 生成器、迭代器、可迭代对象 以及应用场景?

 

 

5二、用Python实现一个二分查找的函数。

 

5三、谈谈你对闭包的理解?

 

5四、os和sys模块的做用?

OS模块是Python标准库中的一个用于访问操做系统功能的模块,使用OS模块中提供的接口,能够实现跨平台访问


sys模块主要是用于提供对python解释器相关的操做

  5五、如何生成一个随机数? 

import random
random.random()

5六、如何使用python删除一个文件?

 os.remove(path)

5七、谈谈你对面向对象的理解?

面向对象是向现实世界模型的天然延伸,这是一种“万物皆对象”的编程思想

在现实生活中的任何物体均可以归为一类事物,而每个个体都是一类事物的实例

面向对象的编程是以对象为中心,以消息为驱动,因此程序=对象+消息

5八、Python面向对象中的继承有什么特色?

继承是进一步将一类事物共有的属性和行为抽象为一个父类,而每个子类则继承了父类的行为和属性,也有本身特有的行为和属性。扩展代码,增长复用性 

5九、面向对象深度优先和广度优先是什么?

 

60、面向对象中super的做用?

相关文章
相关标签/搜索