zoukankan      html  css  js  c++  java
  • 面试题

    Python面试重点(基础篇)

    注意:只有必答题部分计算分值,补充题不计算分值。

    第一部分 必答题(每题2分)

    1. 简述列举了解的编程语言及语言间的区别?
      Python 解释型语言
      java 混合型语言
      c# 编译型语言
      c++ 编译型语言
    2. 列举Python2和Python3的区别?
      python解释器默认编码(python2与python3的区别一)

    python2 解释器默认编码:ascii
    python3 解释器默认编码:utf-8
    输入(python2与python3的区别二)

    python2:name=raw_input('请输入姓名')
    python3:name=input('请输入你的姓名')
    输出(python2与python3的区别三)

    python2:print "你好"
    python3:print("你好")
    数字表示(python2与python3的区别四)

    python2

    64位机器,范围-263~263-1

    超出上述范围,python自动转化为long(长整型)

    注:long(长整型)数字末尾有一个L

    python3

    所有整型都是int,没有long(长整型)
    整型除法(python2与python3的区别五)

    python2:只能保留整数位
    python3:可以保留所有内容
    range / xrange(python2与python3的区别六)

    python2:
    xrange:不会在内存中立即创建,而是在循环时,边循环边创建
    range:在内存立即把所有的值创建
    python3:
    只有range,相当于python2中的xrange
    range:不会在内存中立即创建,而是在循环时,边循环边创建
    包的定义(python2与python3的区别七)

    python2:文件夹中必须有_ _ init _ .py文件
    python3:不需要有
    _ init _ _.py文件
    字典的keys / values / items方法(python2与python3的区别八)

    python2:返回列表,通过索引可以取值
    python3:返回迭代器,只能通过循环取值,不能通过索引取值
    map / filter(python2与python3的区别九)

    python2:返回列表,直接创建值,可以通过索引取值
    python3:返回迭代器,不直接创建值,通过循环,边循环边创建
    str(字符串类型)的区别(python2与python3的区别十)(最大区别,优先写这个)

    python2:
    str类型,相当于python3中的字节类型,utf-8/gbk等其他编码
    unicode类型,相当于python3中的字符串类型,unicode编码
    python2中没有字节类型
    python3:
    str类型,字符串类型,unicode编码
    python3中没有unicode类型
    继承object(python2与python3的区别十一):

    class Foo:
    pass
    class Foo(object):
    pass

    在python3中这俩的写法是一样,因为所有的类默认都会继承object类,全部都是新式类。

    如果在python2中这样定义,则称其为:经典类

    class Foo:
    pass

    如果在python2中这样定义,则称其为:新式类

    class Foo(object):
    pass

    新式类

    继承object

    # 支持super
    # 多继承 广度优先C3算法
    # mro方法
    

    经典类

    # py2中不继承object
    # 没有super语法
    # 多继承 深度优先
    # 没有mro方法
    
    1. 看代码写结果

      v1 = 1 or 2     1
      v2 = 3 and 7 or 9 and 0   7
      
    2. 比较以下值有什么不同?

      v1 = [1,2,3]   列表
      v2 = [(1),(2),(3)]  和v1一样
      v3 = [(1,),(2,),(3,)] 列表嵌套元祖
      
    3. 用一行代码实现数值交换。

      a = 1
      b = 2
      

    a,b = b,a
    6. Python中单引号、双引号、三引号的区别?
    双引号可以互相包含,避免转义
    三引号支持长字符串的换行,会保留其格式
    7. is和==的区别?
    is判断内存地址是否相同
    == 判断值是否相等
    8. python里如何实现tuple和list的转化?
    tuple(list) # 列表转元组
    list(tuple) # 元组转列表
    9. 如何实现字符串 name='老男孩'的反转?
    name='老男孩'
    name = name[::-1]
    10. 两个set如何获取交集、并集、差集?
    # 交集
    set(a)&set(b)
    # 并集
    set(a)|set(b)
    # 差集
    set(a)-set(b)

    1. 那些情况下, y != x - (x-y)会成立?

    2. Python中如何拷贝一个对象?
      copy模块
      copy.copy() # 浅拷贝
      copy.deepcopy() # 深拷贝

    3. 简述 赋值、浅拷贝、深拷贝的区别?
      赋值:将多个变量指向同一个内存地址
      浅拷贝:只拷贝第一层元素地址,只有修改第一层元素时不受影响
      深拷贝:不可变数据类型内存地址共用,可变数据类型重新开辟空间

    4. pass的作用?
      pass 占位符 与 ...的用法一样

    5. 阅读代码写结果。

      import copy
      a = [1,2,4,5,['b','c']]
      b = a
      c = copy.copy(a)
      d = copy.deepcopy(a)
      
      a.append(5)
      a[4].append('d')
      
      print(b)
      print(c)
      print(a)
      

      print(b) [1,2,4,5,['b','c','d'],5]
      print(c) [1,2,4,5,['b','c','d']]
      print(a) [1,2,4,5,['b','c','d'],5]

    6. 用Python实现9 * 9 乘法表。
      for i in range(1, 10):
      for x in range(1, i + 1):
      print(f"{i} * {x} = {i * x}",end=" ")
      print("")

    7. 用Python显示一个斐波那契数列。

    8. 如何删除列表中重复的值?
      list(set(list))

    9. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
      with open(r'etl_log.txt','r',enconding='utf-8') as f:
      for i in f:
      info = f.readlines()
      print(info)

    10. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
      a是字典,
      a = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

    11. lambda关键字的作用?
      匿名函数

    12. *arg**kwarg作用?
      *args 接收多余的位置参数
      **kwargs 接收多余的关键字参数

    13. 如何在函数中设置一个全局变量 ?
      global
      在最外面赋值定义

    14. filter、map、reduce的作用?
      filter 过滤
      map 映射
      reduce 累计算

    15. 什么是匿名函数?匿名函数有什么作用?
      lambda函数就是匿名函数
      作用....

    16. Python递归的最大层数?
      理论1000

    17. 什么是迭代器?什么是可迭代对象?
      迭代器:具有__iter__()和__next__()方法
      可迭代对象:具有__iter__()方法就是可迭代对象

    18. 什么是生成器?
      具有yield的关键字就是生成器,生成器的本质是迭代器
      装饰器的本质是闭包,在不修改源代码及其调用方式的前提下,外增加功能

    19. 什么是装饰器及应用场景?

    20. 什么是反射及应用场景?
      通过字符串操作对象的方法和属性
      判断用户的输入

    21. 写一个普通的装饰器。
      def warpper(func):
      def inner():
      print("111")
      func()
      print("222")
      return inner

    @warpper
    def func():
    print("被装饰的函数")
    32. 写一个带参数的装饰器。
    def func_z(func):
    def inner(args,**kwargs):
    print("我是装饰器")
    ret = func(
    args,**kwargs)
    return ret
    return inner

    @func_z
    def func_b(*args,**kwargs):
    print("我是被装饰的函数")
    33. 求结果

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

    [6,6,6,6]
    34. def(a, b=[])这种写法有什么陷阱?
    默认参数可变,容易在后面引用的时候,读取到之前使用的值,因为列表的内存地址没有变。
    35. 看代码写结果

    ```python
    def func(a,b=[]):
        b.append(a)
    	return b
    
    v1 = func(1)
    v2 = func(2,[10,20])
    v3 = func(3)
    print(v1,v2,v3)
    ```
    

    [1,3]
    [10,20,2]
    [1,3]
    36. 看代码写结果

    ```python
    def func(a,b=[]):
        b.append(a)
    	return b
    
    v1 = func(1)
    print(v1)
    v2 = func(2,[10,20])
    print(v2)
    v3 = func(3)
    print(v3)
    ```
    
    1. 请编写一个函数实现将IP地址转换成一个整数。

      如 10.3.9.12 转换规则为:
              10            00001010
               3            00000011
               9            00001001
              12            00001100
              
      再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
      
    2. 请查找一个目录下的所有文件(可能存在文件嵌套)。

    3. 求结果

      import math
      print (math.floor(5.5))
      
    4. 是否使用过functools中的函数?其作用是什么?

    5. re的match和search区别?

    6. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

    7. 如何生成一个随机数?

    8. super的作用?

    9. 双下划线和单下划线的区别?

    10. @staticmethod和@classmethod的区别?

    11. 实现一个单例模式(加锁)。

    12. 栈和队列的区别?

    13. 以下代码输出是什么? 请给出答案并解释。

      class Parent(object):
          x = 1
      
      class Child1(Parent):
          pass
      
      class Child2(Parent):
          pass
      
      print Parent.x, Child1.x, Child2.x
      
      Child1.x = 2
      print Parent.x, Child1.x, Child2.x
      
      Parent.x = 3
      print Parent.x, Child1.x, Child2.x
      
    14. 参考下面代码片段

      class Context:
          pass
      
      with Content() as ctx:
          ctx.do_something()
      请在Context类下添加代码完成该类的实现
      

    第二部分 可选题

    1. 如何获取列表中第二大的值?
    2. 简述Python内存管理机制。
    3. 简述Python的垃圾回收机制。
    4. 请用两个队列来实现一个栈。
    5. 请用Python实现一个链表。
    6. 请用Python实现链表的逆转。
  • 相关阅读:
    树形DP,最大直径,并查集——HDU4514
    树形DP——HDU2196
    树上倍增法,LCA——CF-832-D
    LCA,Tarjan——POJ1330
    树的直径,树形DP,DFS——POJ1958
    剑指offer28-最小k个数
    剑指offer27-数组中出现次数超过一半的数字
    剑指offer26-字符串的排列
    剑指offer25-二叉搜索树与双向链表
    剑指offer24-复杂链表的复制
  • 原文地址:https://www.cnblogs.com/sjf981012-/p/12366138.html
Copyright © 2011-2022 走看看