面试题目-第一部分 Python基础篇(80题)

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

1. 为什么学习Python?
2. 通过什么途径学习的Python?
3. Python和Java、PHP、C、C#、C++等其他语言的对比?
4. 简述解释型和编译型编程语言?

什么是编译型语言和解释型语言
计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。

 

计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。而这种转换的方式有两种:

编译

解释

由此高级语言也分为编译型语言和解释型语言。

编译型语言
使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

特点
在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

总结
一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;

与特定平台相关,一般无法移植到其他平台;

现有的C、C++、Objective等都属于编译型语言。

解释型语言
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。

特点
解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

总结
解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;

只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;

Python等属于解释型语言。
View Code

5. Python解释器种类以及特点?

CPython
c语言开发的 使用最广的解释器
IPython
基于cpython之上的一个交互式计时器 交互方式增强 功能和cpython一样
PyPy
目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
JPython
运行在Java上的解释器 直接把python代码编译成Java字节码执行
IronPython
运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码
View Code

6. 位和字节的关系?

bit就是位,也叫比特位,是计算机表示数据最小的单位。
byte就是字节,1byte=8bit,1byte就是1B;
一个字符=2字节;
1KB=1024B
View Code

7. b、B、KB、MB、GB 的关系?

b ,B,KB,MB,GB之间的关系
utf-8种一个字母或者 数字等于一个字节 , 一个汉字等于3个字节,表情等于4个字节



b 比特bit / 位 
B——字节
KB——千比特
MB——兆比特
GB——吉比特

1 B = 8b (8个bit/ 位) 一个字节(byte)等于8位(bit)
1 kB = 1024 B (kB - kilobajt) 
1 MB = 1024 kB (MB - megabajt)
1 GB = 1024 MB (GB - gigabajt) 

英文和数字占一个字节
中文占一个字符,也就是两个字节
字符 不等于 字节。
字符(char)是 Java 中的一种基本数据类型,由 2 个字节组成,范围从 0 开始,到 2^16-1。
字节是一种数据量的单位,一个字节等于 8 位。所有的数据所占空间都可以用字节数来衡量。例如一个字符占 2 个字节,一个 int 占 4 个字节,一个 double 占 8 个字节 等等。
1字符=2字节;
1Byte=8bit
1k=2^10;b:位;B:字节1kb=1024 位1kB=1024 字节
--------------------- 
作者:tiny_sxj 
来源:CSDN 
原文:https://blog.csdn.net/abc3224302/article/details/51898283 
版权声明:本文为博主原创文章,转载请附上博文链接!
View Code

8. 请至少列举5个 PEP8 规范(越多越好)。

(1)、缩进:每一级4个缩进。连续跨行应该使用圆括号或大括号或者使用悬挂缩进。

(2)、代码长度约束

一行列数:PEP8 规定最大为79列,如果拼接url很容易超限

一个函数:不可以超过30行;直观来讲就是完整显示一个函数一个屏幕就够了,不需要上下拖动

一个类:不要超过200行代码,不要超过10个方法

一个模块:不要超过500行

(3)、import

不要在一句import中引用多个库

(4)、命名规范

(5)、注释

总体原则:错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
View Code

9. 通过代码实现如下转换:

二进制转换成十进制:v = “0b1111011”=====123
十进制转换成二进制:v = 18 ============0b10010
八进制转换成十进制:v = “011” ==========9
十进制转换成八进制:v = 30 ============36
十六进制转换成十进制:v = “0x12” =======18
十进制转换成十六进制:v = 87==========57
View Code

10. 请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
        10            00001010
         3            00000011
         9            00001001
        12            00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
11. python递归的最大层数?

首先来看看python默认的最大递归层数:

运行环境:Windows 10,x64
python环境:python3.5

def foo(n):
    print(n)
    n += 1
    foo(n)
 
if __name__ == '__main__':
    foo(1)
得到的最大数为998,以后就是报错了:RecursionError: maximum recursion depth exceeded while calling a Python object

那么python允许的最大递归层数是多少呢?我们实验下:

复制代码
import sys
sys.setrecursionlimit(100000)

def foo(n):
    print(n)
    n += 1
    foo(n)
        
if __name__ == '__main__':
    foo(1)
复制代码
 

得到的最大数字在3925-3929之间浮动,这个是和计算机有关系的,不然也不会是一个浮动的数字了(数学逻辑讲求严谨)。

我们已经将数字调到足够大了,已经大于系统堆栈,python已经无法支撑到太大的递归了。

对于没有尾递归的编程语言来说,程序运行起来的时候计算机会给当前进程分配栈,每递归一次,计算机就会给当前程序调度一部分来使用,当使用过多了,那么不好意思,我就这么点了。然后,就没有然后了,崩了。python不是尾递归优化的语言,我们不应该使用递归来替代掉循环,循环存在必然有它巨大的意义。递归用于复杂度为O(log(n))的计算是很有意义的,用于O(n)就不怎么好了。

那么有什么好的解决办法呢?当然是有的,比如python的generator,这个是python的一大神器,请参看:http://www.jianshu.com/p/d36746ad845d

 

总结:

递归是一个很有用的处理方式,简单到遍历文件夹、处理XML;复杂到人工智能等。
合理使用递归能让我们的程序具有简洁和强的可读性。
View Code

12. 求结果:
    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
13. ascii、unicode、utf-8、gbk 区别?
14. 字节码和机器码的区别?
15. 三元运算规则以及应用场景?
16. 列举 Python2和Python3的区别?
17. 用一行代码实现数值交换:
      a = 1
       b = 2
18. Python3和Python2中 int 和 long的区别?
19. xrange和range的区别?
20. 文件操作时:xreadlines和readlines的区别?
21. 列举布尔值为False的常见值?
22. 字符串、列表、元组、字典每个常用的5个方法?
23. lambda表达式格式以及应用场景?
24. pass的作用?
25. *arg和**kwarg作用
26. is和==的区别
27. 简述Python的深浅拷贝以及应用场景?
28. Python垃圾回收机制?
29. Python的可变类型和不可变类型?
30. 求结果:
   v = dict.fromkeys(['k1','k2'],[])  
   v[‘k1’].append(666)
   print(v)
   v[‘k1’] = 777
   print(v)
31. 求结果:

32. 列举常见的内置函数?
33. filter、map、reduce的作用?
34. 一行代码实现9*9乘法表
35. 如何安装第三方模块?以及用过哪些第三方模块?
36. 至少列举8个常用模块都有那些?
37. re的match和search区别?
38. 什么是正则的贪婪匹配?
39. 求结果: 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
41. def func(a,b=[]) 这种写法有什么坑?
42. 如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?
43. 如何实现[‘1’,’2’,’3’]变成[1,2,3] ?
44. 比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?
45. 如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?
46. 一行代码实现删除列表中重复的值 ?
47. 如何在函数中设置一个全局变量 ?
48. logging模块的作用?以及应用场景?
49. 请用代码简答实现stack 。
50. 常用字符串格式化哪几种?
51. 简述 生成器、迭代器、可迭代对象 以及应用场景?
52. 用Python实现一个二分查找的函数。
53. 谈谈你对闭包的理解?
54. os和sys模块的作用?
55. 如何生成一个随机数?
56. 如何使用python删除一个文件?
57. 谈谈你对面向对象的理解?
58. Python面向对象中的继承有什么特点?
59. 面向对象深度优先和广度优先是什么?
60. 面向对象中super的作用?
61. 是否使用过functools中的函数?其作用是什么?
62. 列举面向对象中带爽下划线的特殊方法,如:__new__、__init__
63. 如何判断是函数还是方法?
64. 静态方法和类方法区别?
65. 列举面向对象中的特殊成员以及应用场景
66. 1、2、3、4、5 能组成多少个互不相同且无重复的三位数
67. 什么是反射?以及应用场景?
68. metaclass作用?以及应用场景?
69. 用尽量多的方法实现单例模式。
70. 装饰器的写法以及应用场景。
71. 异常处理写法以及如何主动跑出异常(应用场景)
72. 什么是面向对象的mro
73. isinstance作用以及应用场景?
74. 写代码并实现:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would 
have exactly one solution, and you may not use the same element twice.
Example:
          Given nums = [2, 7, 11, 15], target = 9,
            Because nums[0] + nums[1] = 2 + 7 = 9,
           return [0, 1]
75. json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?
76. json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
77. 什么是断言?应用场景?
78. 有用过with statement吗?它的好处是什么?
79. 使用代码实现查看列举目录下的所有文件。
80. 简述 yield和yield from关键字。

猜你喜欢

转载自www.cnblogs.com/jokezl/p/10138374.html
今日推荐