zoukankan      html  css  js  c++  java
  • python基础篇

    Python面试重点(基础篇)

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

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

    1. 简述列举了解的编程语言及语言间的区别?

      编译型:只翻译一次(代表语言C)
      	优点:执行速度快
      	缺点:开发速度慢
      解释型:逐行翻译(代表语言python)
      	优点:开发速度快
      	缺点:执行速度慢
      
    2. 列举Python2和Python3的区别?

      1.python解释器默认编码(python2与python3的区别一)
      	python2 解释器默认编码:ascii
      	python3 解释器默认编码:utf-8
      2.输入(python2与python3的区别二)
      	python2:name=raw_input('请输入姓名')
      	python3:name=input('请输入你的姓名')
      3.输出(python2与python3的区别三)
      	python2:print "你好"
      	python3:print("你好")
      字符串不同
      	py2中有两种数据类型:unicode    str
      	py3中有两种数据类型:str		   bytes
      	
      	py2中的str,就是py3中的bytes
      	py2中的unicode,就是py3中str
      	例如:
      		py2:
      			val = u"changxinzuoxia" => unicode
      			val = "changxinzuoxia"  => str
      		py3:
      			val = "chanxin"			=> str
      			val = b"chanxin"        => bytes
      
      range:
      	py2: range    xrange
      	py3:		  range 
      	
      类型:
      	py2:
      		int		long
      	p3:
      				int
      字典:
      	v = {"k1":1,"k2":2}
      	py2,立即将数据放到内存。
      		v.keys(),得到列表
      		v.values(),得到列表
      		v.items(),得到列表
      	py3:
      		v.keys(),迭代器
      		v.values(),迭代器
      		v.items(),迭代器
      map、filter
      	py2: 立即得到结果
      	py3: 迭代器
      	
      类:
      	py2: 经典类、新式类(直接或间接继承object)
      	
      	py3: 新式类
      
    3. 看代码写结果

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

      v1 = [1,2,3]
      v2 = [(1),(2),(3)]
      v3 = [(1,),(2,),(3,)]
      
      v1 是普通列表,元素为int
      v2 是列表里面加了小括号,和v1一样,int类型
      v3 列表嵌套元祖,元组的元素为int
      
    5. 用一行代码实现数值交换。

      a = 1
      b = 2
      a,b = b,a
      
    6. Python中单引号、双引号、三引号的区别?

      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)
      
      
    11. 那些情况下, y != x - (x-y)会成立?

      x,y是两个不相等的非空集合
      
      
    12. Python中如何拷贝一个对象?

      # copy模块
      [:]
      copy.copy() # 浅拷贝
      copy.deepcopy() # 深拷贝
      
      
    13. 简述 赋值、浅拷贝、深拷贝的区别?

      在Python中拷贝的目的就是要再创建一份,拷贝都是针对可变类型而言。 
      例如:
      	data = [1,2,[11,22]]
      	
      浅拷贝, 只拷贝第一层.
      	new_data = copy.copy(data)
      	相当于:[1拷贝一份,2拷贝一份,[11,22]用原来的内存地址] 理论
      	相当于:[1,2,[11,22]用原来的内存地址] 实际
      	
      深拷贝,所有层都拷贝。
      	new_data = copy.deepcopy(data)
      	相当于:[1,2,[11,22]重新拷贝一份]
      	
      总结:Python中所有的拷贝都是针对可变类型而言,浅拷贝就是指拷贝数据的第一层,遇到可变类型只能拷贝他的内存地址,数据不会重新创建。 而对于深拷贝,会将所有的可变类型数据都拷贝一份。
      
      
      
    14. pass的作用?

      占位符
      
      
    15. 阅读代码写结果。

      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)
      # [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]
      
      
    16. 用Python实现9 * 9 乘法表。

      result = "
      ".join([" ".join([ "%s*%s=%s " %(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)])
      
      
    17. 用Python显示一个斐波那契数列。

      # 1	1 2 3 5 8 13 21 ...
      
      def fib(num):
          if num in [1,2]:
              return 1
          return fib(num-1) + fib(num-2)
      
      
      def fib(num):
          if num in [1,2]:
              return 1
          first = 1
          second = 1
          for i in range(3,num+1):
              first,second =second,first + second
          return second 
      
      
    18. 如何删除列表中重复的值?

      list(set(list))
      
      
    19. 一个大小为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)
      
      
    20. 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}
      
      
    21. lambda关键字的作用?

      定义匿名函数,自带for循环
      
      
    22. *arg**kwarg作用?

      *args 接收多余的位置参数
      **kwargs 接收多余的关键字参数
      
      
    23. 如何在函数中设置一个全局变量 ?

      global 全局变量
      
      
    24. filter、map、reduce的作用?

      filter  过滤
      map     映射
      reduce  累计算
      
      
    25. 什么是匿名函数?匿名函数有什么作用?

      lambda函数就是匿名函数
      作用:简化代码
      
      
    26. Python递归的最大层数?

      官方:1000
      实测:995-998
      
      
    27. 什么是迭代器?什么是可迭代对象?

      迭代器:内部具有 __next__方法,获取下一个值,只能前进不能倒退。 
      可迭代对象:内部具有 __iter__ 方法且返回一个迭代器。 
      	class Foo:
      		def __iter__(self,*args,**kwargs):
      			return iter([11,22,33])
      		
      	obj = Foo()
      	for item in obj:
      		print(item)
      
      
    28. 什么是生成器?

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

      登录,类
      
      
    30. 什么是反射及应用场景?

      通过字符串操作对象的方法和属性
      
      判断用户的输入
      
      
    31. 写一个普通的装饰器。

      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. 求结果

      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. 看代码写结果

      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. 看代码写结果

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

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

      import os
      os.listdir()
      
      
    39. 求结果

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

      from functools import reduce
      reduce   累计算
      
      
    41. re的match和search区别?

      match:  从开头进行查找,查找到就停止,找不到返回None
      search: 查找全文,找到就停止,找不到就返回None
      
      
    42. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

      .* 贪婪匹配 匹配多个任意字符
      .*? 非贪婪 只匹配一次
      
      
    43. 如何生成一个随机数?

      import random
      
      random.random()
      
      
    44. super的作用?

      按照mro的顺序进行继承
      
      
    45. 双下划线和单下划线的区别?

      双线划线:__ 是Python中强制定义为私有
      单下划线:_  是程序员约定的私有方法
      
      
    46. @staticmethod和@classmethod的区别?

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

      
      
    48. 栈和队列的区别?

      栈:先进后出
      队列:先进先出
      
      
    49. 以下代码输出是什么? 请给出答案并解释。

      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
      
      
    50. 参考下面代码片段

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

    第二部分 可选题

    1. 如何获取列表中第二大的值?
    2. 简述Python内存管理机制。
    3. 简述Python的垃圾回收机制。
    4. 请用两个队列来实现一个栈。
    5. 请用Python实现一个链表。
    6. 请用Python实现链表的逆转。
  • 相关阅读:
    手动创建DataSet数据集
    Ado.Net 参数化操作
    序列化和反序列化
    封装多个集合在一个类中
    窗体之间的传递
    C程序设计语言练习题1-12
    C程序设计语言练习题1-11
    C程序设计语言练习题1-10
    C程序设计语言练习题1-9
    C程序设计语言练习题1-8
  • 原文地址:https://www.cnblogs.com/hejialong/p/12366096.html
Copyright © 2011-2022 走看看