基础面试题day01

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

  1. python,go语言,二者的区别在于python是动态解释类的语言,而go是静态解释类型的语言,python在处理作用域的时候用的是缩进,而go对缩进并不敏感,使用的是像C语言的花括号

2.列举python2,python3的区别、

  1. python3支持Unicode字符,python2使用的是ASCII编码,使得python2中的string有str和Unioncode两种形式
  2. python2中有老式类和新式类的概念,而python3中只有新式类
  3. python2 的不等于<>变成了!=
  4. python中的xrange被弃用,python3中使用range

3.看代码写结果

v1 = 1 or 2
v2 = 3 and 7 or 9 and 0

v1 = 1
v2 = 7

4.比较以下值有什么不同

v1 = [1,2,3] #列表中的元素均为int
v2 = [(1),(2),(3)] #列表中的元素均为int
v3 = [(1,),(2,),(3,)] #列表中的元素均为tuple

5.用一行代码实现数值交换

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

6.python中单引号双引号和三引号的标记

  • 单双引号标记的都是字符串
  • 三引号标记的是多行注释

7.is和==的区别

  1. ==判断的是值相等
  2. is判断的是地址是否相同

8.python如何实现tuple和list的转化

  1. 使用list函数进行转换
tp1 = (1,2,3,4,5)
lst = list(tp1)
  1. 可以遍历tuple向list中添加元素
tp1 = (1,2,3,4,5)
lst = []
for i in tp1:
    lst.append(i)

9.如何实现字符串name='老男孩'的反转

name='老男孩'

anti_name = name[-1::-1]

10.两个set如何求交集并集和差集

set1 & set2 交集
set1 | set2 并集
set1 - set2 差集

11.哪些情况下,y!=x-(x-y)

x,y是两个非空集合

  1. Python中如何拷贝一个对象?
import copy
lst=[1,2,3,4,[1,2]]

# 复制列表lst,命名lst2
lst2=copy.copy(lst)
print(f'这是lst3:{lst2}')

# 深拷贝
lst3=copy.deepcopy(lst)
print(f'这是lst3:{lst3}')
  1. 简述 赋值、浅拷贝、深拷贝的区别?
    • 赋值:将a 的引用 复制一份给 b 两个引用指向同一个内存地址
    • copy.copy 浅拷贝,复制原对象最顶层的引用,如果对其中的不可变类型进行修改,不会影响另一个对象,但是给给可变类型添加元素时会影响另一个对象

    • copy.deepcopy 深拷贝,对原有数据进行递归拷贝,重新开辟空间,直到没有可变数据类型,任何修改都不影响另一个对象
  2. pass的作用?
    • 占位,什么都不做
  3. 阅读代码写结果。

    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)
    
    b = [1,2,4,5,['b','c','d'],5]
    c = [1,2,4,5,['b','c','d']]
    a = [1,2,4,5,['b','c','d'],5]
  4. 用Python实现9 * 9 乘法表。
for i in range(1,10):
    for j in range(1,i+1):
        print(f'{i}*{j}={i*j}',end=' ')
    print(' ')
  1. 用Python显示一个斐波那契数列。
def func(n):
    # 第一位和第二位都是1
    if n == 1 or n == 2:
        return 1
    else:
        # 从第三位开始  返回上一个数加上上一个数
        return func(n-1) + func(n-2)
        
res = func(20)
  1. 如何删除列表中重复的值?
lst = [1,1,2,2,3,4]
lst2 = list(set(lst))

lst3 = []
for i in lst:
    if i not in lst3:
        lst3.append(i)
print(lst2,lst3)
  1. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?
def read_file(file_path)
    file_block = 1024
    with open(file_path,'r',encoding='utf-8') as f
        while True:
            block = f.read(file_block)
        if block:
            yield block
        else:
            return
file_path = '../et1_log.txt'
for content in read_file(file_path)
    print(content)
  1. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?
a = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
  1. lambda关键字的作用?
    • lambda就是用来定义一个匿名函数,实现一些不复杂的功能
  2. *arg**kwarg作用?
    • *arg 为动态位置参数,用于接收多个默认参数
    • **kwargs 为动态关键字参数,用于接收多个关键字参数
  3. 如何在函数中设置一个全局变量 ?
    • 使用global 关键字
  4. filter、map、reduce的作用?
    • map是用同样方法把所有数据都改成别的..字面意思是映射..比如把列表的每个数都换成其平方..

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

    • filter是筛选出其中满足某个条件的那些数据..字面意思是过滤..比如挑出列表中所有奇数..

  5. 什么是匿名函数?匿名函数有什么作用?
    • 以关键字lambda声明的函数
    • 用于简化代码
    • 可以作为函数的参数
  6. Python递归的最大层数?
    • 大概是970-998
  7. 什么是迭代器?什么是可迭代对象?
    • 可迭代对象:具有__iter__方法
    • 迭代器: 具有__next__方法
  8. 什么是生成器?
    • 函数中使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
  9. 什么是装饰器及应用场景?
    • 装饰器本身是一个闭包,可以在不修改原有代码的情况下增加新的功能
    • 应用:
      • 计算程序执行时间
      • 判断权限
      • 添加日志
  10. 什么是反射及应用场景?
    • 反射就是用字符串操作函数
    • django的路由使用的就是反射
  11. 写一个普通的装饰器。
def wapper(func):
    print('我wapper执行')
    def inner(*args,**kwargs):
        print('inner被执行')
        func(*args,**kwargs)
    return inner

@wapper
def func(*args,**kwargs):
    print('我func被执行了')
func()
  1. 写一个带参数的装饰器。

import time
def time_logger(flag = 0):
    def showtime(func):
        def wrapper(a, b):
            start_time = time.time()
            func(a,b)
            end_time = time.time()
            print('spend is {}'.format(end_time - start_time))
            
            if flag:
                print('将此操作保留至日志')
 
        return wrapper
 
    return showtime
 
@time_logger(2)  
def add(a, b):
    print(a+b)
    time.sleep(1)

add(1,2)
  1. 求结果
def num():
    return [lambda x:i*x for i in range(4)]
print([m(2) for m in num()])

[6, 6, 6, 6]
  1. def(a, b=[])这种写法有什么陷阱?
    • 默认参数参数陷阱,若果参数传递时参数b=[]没有被替换,会导致每一次执行都包含上一次的结果
  2. 看代码写结果
def func(a,b=[]):
b.append(a)
return b

v1 = func(1)
v2 = func(2,[10,20])
v3 = func(3)
print(v1,v2,v3)

v1 = [1]
v2 = [10,20,3]
v3 = [1,3]
  1. 看代码写结果
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)
v1 = [1]
v2 = [10,20,3]
v3 = [1,3]
  1. 请编写一个函数实现将IP地址转换成一个整数。
如 10.3.9.12 转换规则为:
        10           00001010
        3            00000011
        9            00001001
        12           00001100
        
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
  1. 请查找一个目录下的所有文件(可能存在文件嵌套)。
import os
path = 'abc'
path_read = []   
def check_if_dir(file_path):
    temp_list = os.listdir(file_path)  
    for temp in temp_list:
        if os.path.isfile(file_path + '/' + temp):
            temp_path = file_path + '/' + temp
            if os.path.splitext(temp_path)[-1] == '.log':    
                path_read.append(temp_path)
            else:
                continue
        else:
            check_if_dir(file_path + '/' + temp_list)    

check_dir(path)
  1. 求结果

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

  3. re的match和search区别?

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

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

  6. super的作用?

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

  8. @staticmethod和@classmethod的区别?

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

  10. 栈和队列的区别?

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

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

    class Context:
    
        def do_something(self):
            print(nothing to do!!)
    
    
    with Content() as ctx:
        ctx.do_something()
    请在Context类下添加代码完成该类的实现

第二部分 可选题

  1. 如何获取列表中第二大的值?
    通过max函数获取最大值,pop掉以后再次用max获取最大值
    通过sort函数从小到大排列,获取倒数第二个值

  2. 简述Python内存管理机制。
  3. 简述Python的垃圾回收机制。
  4. 请用两个队列来实现一个栈。
  5. 请用Python实现一个链表。
  6. 请用Python实现链表的逆转。

猜你喜欢

转载自www.cnblogs.com/Kiwi-456/p/12366095.html
今日推荐