zoukankan      html  css  js  c++  java
  • python炒鸡面试题

    第一章 python基础

    1,为什么学习python

    自由发挥哈哈哈

    2,通过甚途径学习的python

    本专业毕业请忽略本题

    自学、网教、购买课程、、、、

    3,公司线上和开发环境用的什么系统

    ​ 线上用的centos6,开发环境用的Ubuntu

    4,简述python和java,php,c,c#,c++的对比

    python简单易懂,代码工整美观,简单优雅,可读性强,有成熟的框架,丰富的第三方模块,开发效率非常高,最最关键的是超火,啥都可以做

    5,简述解释性和编译型语言的优缺点,以及实例

    计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

    编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。

    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。

    编译型
    优点:编译器⼀般会有预编译的过程对代码进⾏优化。因为编译只做⼀次,运⾏时不需要编
    译,所以编译型语⾔的程序执⾏效率⾼。可以脱离语⾔环境独立运⾏。
    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运⾏环境⽣
    成机器码,不同的操作系统之间移植就会有问题,需要根据运⾏的操作系统环境编译不同的
    可执⾏⽂件。
    解释型
    优点:有良好的平台兼容性,在任何环境中都可以运⾏,前提是安装了解释器(虚拟机)。
    灵活,修改代码的时候直接修改就可以,可以快速部署,不⽤停机维护。
    缺点:每次运⾏的时候都要解释⼀遍,性能上不如编译型语⾔。

    5,python是一门什么语言

    python是一门编译型、动态强类型的高级脚本语言

    6,强类型、弱类型,动态、静态语言的区别

    强类型:不允许不同类型相加。例如:整形+字符串会报类型错误。

    动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候。

    脚本语言:一般是解释性语言,运行代码只需要一个解释器,不需要编辑。

    7,python解释器种类以及特点

    CPython
    当我们从Python官⽅⽹站下载并安装好Python 2.7后,我们就直接获得了⼀个官⽅版
    本的解释器:CPython。这个解释器是⽤C语⾔开发的,所以叫CPython。在命令⾏下运
    ⾏python就是启动CPython解释器。
    CPython是使⽤最⼴的Python解释器。教程的所有代码也都在CPython下执⾏。
    IPython
    IPython是基于CPython之上的⼀个交互式解释器,也就是说,IPython只是在交互⽅
    式上有所增强,但是执⾏Python代码的功能和CPython是完全⼀样的。好⽐很多国产浏览
    器虽然外观不同,但内核其实都是调⽤了IE。
    CPython⽤>>>作为提示符,⽽IPython⽤In [序号]:作为提示符。
    PyPy
    PyPy是另⼀个Python解释器,它的⽬标是执⾏速度。PyPy采⽤JIT技术,对Python代
    码进⾏动态编译(注意不是解释),所以可以显著提⾼Python代码的执⾏速度。
    绝⼤部分Python代码都可以在PyPy下运⾏,但是PyPy和CPython有⼀些是不同的,这就
    导致相同的Python代码在两种解释器下执⾏可能会有不同的结果。如果你的代码要放到
    PyPy下执⾏,就需要了解PyPy和CPython的不同点。
    Jython
    Jython是运⾏在Java平台上的Python解释器,可以直接把Python代码编译成Java字节
    码执⾏。
    IronPython
    IronPython和Jython类似,只不过IronPython是运⾏在微软.Net平台上的Python解
    释器,可以直接把Python代码编译成.Net的字节码。

    8,计算机存储单位的换算

    计算机存储单位一般用bit、B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB……来表示,它们之间的关系是:

    位 bit (比特)(Binary Digits):存放一位二进制数,即 0 或 1,最小的存储单位。[英文缩写:b(固定小写)]

    字节byte:8个二进制位为一个字节(B),最常用的单位。

    1 Byte(B) = 8 bit

    1 Kilo Byte(KB) = 1024B

    1 Mega Byte(MB) = 1024 KB

    1 Giga Byte (GB)= 1024 MB

    1 Tera Byte(TB)= 1024 GB

    1 Peta Byte(PB) = 1024 TB

    1 Exa Byte(EB) = 1024 PB

    1 Zetta Byte(ZB) = 1024 EB

    1Yotta Byte(YB)= 1024 ZB

    1 Bronto Byte(BB) = 1024 YB

    1Nona Byte(NB)=1024 BB

    1 Dogga Byte(DB)=1024 NB

    1 Corydon Byte(CB)=1024DB

    9,pep8规范

    传送门 http://legacy.python.org/dev/peps/pep-0008/

     ag:

    对齐----换行对齐

    ​ 行最大长度79

    ​ 空行----类之间空两行,类里面的方法空一行

    ​ import导入----模块注释之后,顶部导入,分行导入,导入顺序(标准库,第三方库,本地库,每组库加空行)

    ​ 注释----# 块注释(与同级代码对齐,#后面一个空格)

    ​ ----# 行内注释(与代码至少两个空格,节制使用)

    ​ 变量命名----类名(大写字母开头)

    ​ ----函数名(小写,可下划线分割)

    ​ 函数和方法参数

    ​ 始终要将 self 作为实例方法的的第一个参数。

    ​ 始终要将 cls 作为类静态方法的第一个参数。

    ​ 如果函数的参数名和已有的关键词冲突,加下划线,例class_

    10、ascii,unicode,utf8,gbk区别

    ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符

    Unicode是为了统一世界各国语言的不用,统一用2个bytes代表一个字符,可以表达2**16=65556个,称为万国语言,特点:速度快,但浪费空间,可以用在内存处理中,兼容了utf-8,gbk,ASCII,

    utf-8 为了改变Unicode的这种缺点,规定1个英文字符用1个字节表示,1个中文字符用3个字节表示,特点;节省空间,速度慢,用在硬盘数据传输,网络数据传输,相比硬盘和网络速度,体现不出来的

    gbk 是中文的字符编码,用2个字节代表一个字符

    11、字节码和机器码区别

    机器码是电脑的CPU可直接解读的数据

    字节码是二进制文件,一种中间码

    12、三元运算编写格式

    举例说明:
    a =1
    b = 2
    c= a if a>1 else b #如果a大于1的话,c=a,否则c=b
     
    13、python2和python3区别
    ag:

    python2                   python3
    print ‘1’                    print(‘1’)
    range( 0, 4 ) 结果 是 列表 [0,1,2,3 ]       list( range(0,4) )
    xrange( 0, 4 ) 适用于 for 循环的变量控制   range(0,4)
    原: file( … )或 open(…)             open(…)
    raw_input()                input()

    14、py2项目迁移py3

    2to3 example.py

    15、python2 python3 int long

    python2有非浮点数准备的int和long类型

    在python3里,只有一种整数类型int,

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

    a = 1 b = 2   a, b = b, a   print(a, b)

    17、Python3和Python2中 int 和 long的区别?

    py3中没有long整型,统一使用int,大小和py2的long类似。 py2中int最大不能超过sys.maxint,

    根据不同平台大小不同; 在int类型数字后加L定义成长整型,范围比int更大。

    18、xrange和range的区别

    range产生的是一个列表,xrange产生的是生成器。

    数据较大时xrange比range好。

    Range一下把数据都返回,xrange通过yield每次返回一个

    19、文件操作时:xreadlines和readlines的区别

    Readlines:读取文件的所有行,返回一个列表,包含所有行的结束符

    Xreadlines:返回一个生成器,循环使用和readlines基本一致 。(py2有,py3没有)

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

    [] 、{} 、None 、 ' '、 ()、 0、 False

    21、列出字符串、列表、元组、字典每个常用的5个方法?

    #Str:
    Split:分割
    Strip:去掉两边的空格
    Startwith:以什么开头
    Endwith:以什么结尾
    Lower:小写
    Upper:大写


    #List:
    Append:追加
    Insert:插入
    Reverse:反转
    Index:索引
    Copy:拷贝
    Pop:删除指定索引处的值,不指定索引默认删除最后一个。


    #Tuple:
    Count:查看某个元素出现的次数
    Index:索引


    #Dict:
    Get:根据key取value
    Items:用于循环,取出所有key和value
    Keys:取出所有key
    Values:取出所有的value
    Clear:清空字典
    Pop:删除指定键对应的值,有返回值;

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

    # 格式:
    匿名函数:

    add = lambda x, y : x+y

    add(1,2)

    # 结果为3

    # 应用场景:
    Filter(),map(),reduce(),sorted()函数中经常用到,它们都需要函数形参数;
    一般定义调用一次。
    (reduce()对参数序列中元素进行累积)

    23、pass的作用?

    Pass一般用于站位语句,保持代码的完整性,不会做任何操作。

    24、*arg和**kwarg作用

    # 他们是一种动态传参,一般不确定需要传入几个参数时,可以使用其定义参数,然后从中取参

    '*args':按照位置传参,将传入参数打包成一个‘元组’(打印参数为元组-- tuple)
    '**kwargs':按照关键字传参,将传入参数打包成一个‘字典’(打印参数为字典-- dict)
    *args **args:在实参位置是打散、在形参是聚合

    25、is和==的区别

    ==:判断某些值是否一样,比较的是值

    is:比较的是内存地址(引用的内存地址不一样,唯一标识:id)

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

    #浅拷贝: 不管多么复杂的数据结构,只copy对象最外层本身,该对象引用的其他对象不copy, 内存里两个变量的地址是一样的,一个改变另一个也改变。

    #深拷贝: 完全复制原变量的所有数据,内存中生成一套完全一样的内容;只是值一样,内存地址不一样,一方修改另一方不受影响

    27、Python垃圾回收机制?

    # Python垃圾回收机制
    Python垃圾回收机制,主要使用'引用计数'来跟踪和回收垃圾。
    在'引用计数'的基础上,通过'标记-清除'(mark and sweep)解决容器对象可能产生的循环引用问题.
    通过'分代回收'以空间换时间的方法提高垃圾回收效率。

    '引用计数'
    PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。
    当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,
    它的ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。
    优点:1.简单 2.实时性
    缺点:1.维护引用计数消耗资源 2.循环引用

    '标记-清楚机制'
    基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,
    遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,
    然后清扫一遍内存空间,把所有没标记的对象释放。

    '分代技术'
    分代回收的整体思想是:
    将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,
    垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。

    28、Python的可变类型和不可变类型?

    # 可变类型:列表、字典、集合

    # 不可变类型:数字、字符串、元祖 (可变与否指内存中那块内容value)

    29、求结果:

    v = dict.fromkeys(['k1', 'k2'], [])
    # 内存中k1和k2都指向同一个[](内存地址相同),只要指向的[]发生变化,k1和k2都要改变(保持一致)
    v['k1'].append(666)
    print(v) # {'k1': [666], 'k2': [666]}
    v['k1'] = 777
    print(v) # {'k1': 777, 'k2': [666]}

    30、求结果:

    def num():

      return [lambda x: i * x for i in range(4)] #返回一个列表,里面是四个函数对象 i=3

    print([m(2) for m in num()])

    31、列举常见的内置函数

    # map:遍历序列,为每一个序列进行操作,返回一个结果列表
    l = [1, 2, 3, 4, 5, 6, 7]
    def pow2(x):
      return x * x
    res = map(pow2, l)
    print(list(res)) #[1, 4, 9, 16, 25, 36, 49]
    --------------------------------------------------------------
    # reduce:对于序列里面的所有内容进行累计操作
    from functools import reduce
    def add(x, y):
      return x+y
    print(reduce(add, [1,2,3,4])) #10
    --------------------------------------------------------------
    # filter:对序列里面的元素进行筛选,最终获取符合条件的序列。
    l = [1, 2, 3, 4, 5]
    def is_odd(x): # 求奇数
      return x % 2 == 1
    print(list(filter(is_odd, l))) #[1, 3, 5]
    --------------------------------------------------------------
    #zip用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
    a = [1,2,3]
    b=[4,5,6]
    c=[4,5,6,7,8]
    ziped1 = zip(a,b)
    print('ziped1>>>',list(ziped1)) #[(1, 4), (2, 5), (3, 6)]
    ziped2 = zip(a,c)
    print('ziped2>>>',list(ziped2)) #[(1, 4), (2, 5), (3, 6)],以短的为基准

  • 相关阅读:
    debug error 错误日志的调试模式
    fork(2)
    Fundamental theorem of arithmetic 为什么1不是质数
    Compile-time Dependency Injection With Go Cloud's Wire 编译时依赖注入 运行时依赖注入
    LevelDB
    MySQL Bugs: #34354: Feature request: EXPLAIN ALTER TABLE https://bugs.mysql.com/bug.php?id=34354
    explain 分析 聚合统计语句的性能
    (原创)《Android编程权威指南》学习笔记01-- Android应用初体验--005
    (原创)《Android编程权威指南》学习笔记01-- Android应用初体验--004
    (原创)《Android编程权威指南》学习笔记01-- Android应用初体验--003
  • 原文地址:https://www.cnblogs.com/z520h123/p/10559246.html
Copyright © 2011-2022 走看看