315道面试题【1】_v1=1or3,2024网易Python高级面试题总结

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

words = ‘today is a wonderfulday‘
print(words.strip(‘today‘))#如果strip方法指定一个值的话,那么会去掉这两个值
print(words.count(‘a‘))#统计字符串出现的次数
print(words.index(‘is‘))#找下标
print(words.index(‘z‘))#找下标如果元素不找不到的话,会报错
print(words.find(‘z‘))#找下标,如果元素找不到的话,返回-1

列表:

sample_list = [‘a‘,1,(‘a‘,‘b‘)] #创建列表
sample_list = [‘a‘,‘b‘,0,1,3] # Python 列表操作
value_start = sample_list[0] #得到列表中的某一个值
end_value = sample_list[-1] #得到列表中的某一个值
del sample_list[0] #删除列表的第一个值
sample_list[0:0] = [‘sample value‘] #在列表中插入一个值

元祖:

#元组也是一个list,他和list的区别是元组的元素无法修改
tuple1 = (2,3,4,5,6,4,7)
print(type(tuple1))
print(tuple1[:7])
print(tuple1[:5:-1])

字典:

dict = {‘ob1‘:‘computer‘, ‘ob2‘:‘mouse‘, ‘ob3‘:‘printer‘}
#每一个元素是pair,包含key、value两部分。key是Integer或string类型,value 是任意类型。键是唯一的,字典只认最后一个赋的键值。

D.get(key, 0) #同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常
D.has_key(key) #有该键返回TRUE,否则FALSE
D.keys() #返回字典键的列表
D.values()
D.items()

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

lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

lambda所表示的匿名函数的内容应该是很简单的,如果复杂的话,干脆就重新定义一个函数了,使用lambda就有点过于执拗了。

lambda就是用来定义一个匿名函数的,如果还要给他绑定一个名字的话,就会显得有点画蛇添足,通常是直接使用lambda函数。如下所示:

需求:将列表中的元素按照绝对值大小进行升序排列

list1 = [3,5,-4,-1,0,-2,-6]
print(sorted(list1, key=lambda x: abs(x))) #[0, -1, -2, 3, -4, 5, -6]

24、pass的作用?
  • 空语句
  • 保证格式完整
  • 占位语句
25、*arg和**kwarg作用
  1. 函数调用里的*arg和**kwarg:

  2. *arg:元组或列表“出现”

  3. **kwarg:字典“出没”

  4. 分割参数

  5. 函数定义时传的*arg /**kwarg:

  6. 接收参数

26、is和==的区别

==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

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

字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据,深拷贝指拷贝数据集合的所有层。所以对于只有一层的数据集合来说深浅拷贝的意义是一样的,比如字符串,数字,还有仅仅一层的字典、列表、元祖等.

应用场景:比如在CMDB系统中,我们定义了一个报警模版call给所有的服务器使用,此时有一批特殊应用的服务器需要不通的报警参数,我们既不想单独新建模版来一个一个添加报警参数,又不想修改默认模版而影响其他机器的报警阈值。此时我们就需要用深拷贝来完成。

28、Python垃圾回收机制?

Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用的问题。通过“分代回收”(generation collection)以空间换取时间来进一步提高垃圾回收的效率。没有变量引用及回收。

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

可变:列表、字典

对于可变类型,无论创建多少个可变类型,只要值相同,都不指向同个内存地址(除非进行复制操作,那么他们将会指向同一个地址)。

不可变:数字、字符串、元祖

对不可变类型的变量重新赋值,实际上是重新创建一个不可变类型的对象,并将原来的变量重新指向新创建的对象(如果没有其他变量引用原有对象的话(即引用计数为0),原有对象就会被回收)。

30、求结果:

v = dict.fromkeys([ ‘k1’, ‘k2’],[])
v[‘k1’]. append( 666)
print(v)
v[‘k1’] = 777
print(v)

结果为:

<<<{‘k1’: [666], ‘k2’: [666]}

31、求结果

def num():
return [lambda x:i*x for i in range(4)]

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

结果为:

[6, 6, 6, 6]

32、列举常见的内置函数?

https://mp.csdn.net/postedit/80946751

33、filter、map、reduce的作用?

map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表

In [11]: for i in map(lambda x:x*x,[1,2,3,4]):
…: print(i)
…:
1
4
9
16

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

In [12]: def is_odd(n):
…: return n % 2 == 1

In [15]: for i in filter(is_odd,[1,2,3]):
…: print(i)
…:
1
3

reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 fucntools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数

In [19]: from functools import reduce

In [20]: def add(x,y):
…: return x+y
…: reduce(add,range(1,101))
…:
Out[20]: 5050

34、一行代码实现9*9乘法表

print (‘\n’.join([’ ‘.join([’%s*%s=%-2s’ % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

35、如何安装第三方模块?以及用过哪些第三方模块?

在Python中,安装第三方模块,是通过setuptools这个工具完成的。Python有两个封装了setuptools的包管理工具:easy_install和pip。目前官方推荐使用pip
如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。
如果你正在使用Windows,确保安装时勾选了pip和Add python.exe to Path。
在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。
现在,让我们来安装一个第三方库——bs4
pip install bs4
用过的第三方模块 bs4/pymysql/redis/lxml/tkinter/urllib/requests等

36、至少列举8个常用模块都有那些?

Django Flask Scrapy Tkinter Pygame numpy pillow-python pymysql pip

37、re的match和search区别?

match只找字符串的开始位置,而search是全盘查找

38、什么是正则的贪婪匹配?

1、贪婪匹配
总是尝试匹配尽可能多的字符
2、非贪婪匹配
是尝试匹配尽可能少的字符

39、求结果: a. [ i % 2 for i in range(10) ] b. ( i % 2 for i in range(10) )

In [32]: a = [i % 2 for i in range(10)]
In [33]: a
Out[33]: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

In [34]: b = (i%2 for i in range(10))

In [35]: b
Out[35]: <generator object at 0x000000000552E938>

详情请看https://blog.csdn.net/qq_37275405/article/details/80945446

40、求结果: a. 1 or 2 b. 1 and 2 c. 1 < (2==2) d. 1 < 2 == 2

In [48]: 0 or False
Out[48]: False

In [49]: 1 or 2
Out[49]: 1

In [50]: 1 and 2
Out[50]: 2

In [51]: 1 < (2==2)
Out[51]: False

In [52]: 1<2==2
Out[52]: True

41、def func(a,b=[ ]) 这种写法有什么坑?

In [55]: def func(a,b=[]):
…: b.append(a)
…: print(b)
…: func(1)
…: func(1)
…: func(1)
…: func(1)
…:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]

函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储,所以三次执行的结果就是 [1, 1, 1] ,想每次执行只输出[1] ,默认参数应该设置为None。

42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

In [56]: a = ‘1,2,3’

In [57]: list(a)
Out[57]: [‘1’, ‘,’, ‘2’, ‘,’, ‘3’]

43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

In [65]: a = [‘1’,‘2’,‘3’]

In [66]: [ int(i) for i in a]
Out[66]: [1, 2, 3]

44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?

a = [1,2,3] 和 b = [(1),(2),(3) ] 都是列表 b = [(1,),(2,),(3,) ] 是列表里面套元组

45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?

In [74]: [ i*i for i in range(1,11)]
Out[74]: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

46、一行代码实现删除列表中重复的值 ?

In [75]: a = [1,2,3,4,5,1,2,3,4,5]

In [76]: set(a)
Out[76]: {1, 2, 3, 4, 5}

47、如何在函数中设置一个全局变量 ?

In [78]: def a():
…: global aaa
…: aaa = 123

In [80]: a()
In [81]: aaa
Out[81]: 123

48、logging模块的作用?以及应用场景?

可以通过设置不同的日志等级,在release版本中只输出重要信息,而不必显示大量的调试信息;
print将所有信息都输出到标准输出中,严重影响开发者从标准输出中查看其它数据;logging则可以由开发者决定将信息输出到什么地方,以及怎么输出;

49、请用代码简答实现stack 。

class Stack(object):
def __init__(self):
self.stack = []

def push(self, value): # 进栈
self.stack.append(value)

def pop(self): #出栈
if self.stack:
self.stack.pop()
else:
raise LookupError(‘stack is empty!‘)

def is_empty(self): # 如果栈为空
return bool(self.stack)

def top(self):
#取出目前stack中最新的元素
return self.stack[-1]

50、常用字符串格式化哪几种?

第一种:

In [88]: “hello %s”%(‘word’)
Out[88]: ‘hello word’

第二种:

In [89]: ‘hellow {}’.format(‘word’)
Out[89]: ‘hellow word’

51、简述 生成器、迭代器、可迭代对象 以及应用场景?

https://blog.csdn.net/qq_37275405/article/details/80945446

52、用Python实现一个二分查找的函数。

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def binary_search(dataset,find_num):
if len(dataset) > 1:
mid = int(len(dataset) / 2)
if dataset[mid] == find_num: # find it
print(“找到数字”, dataset[mid])
elif dataset[mid] > find_num: # 找的数在mid左面
print(“\033[31;1m找的数在mid[%s]左面\033[0m” % dataset[mid])
return binary_search(dataset[0:mid], find_num)
else: # 找的数在mid右面
print(“\033[32;1m找的数在mid[%s]右面\033[0m” % dataset[mid])
return binary_search(dataset[mid + 1:], find_num)
else:
if dataset[0] == find_num: # find it
print(“找到数字啦”, dataset[0])
else:
print(“没的分了,要找的数字[%s]不在列表里” % find_num)

binary_search(data,20)

53、谈谈你对闭包的理解?

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。

def outer(a):
b = 10
def inner():
print(a+b)
return inner

54、os和sys模块的作用?

sys模块主要是用于提供对python解释器相关的操作
OS模块是Python标准库中的一个用于访问操作系统功能的模块,使用OS模块中提供的接口,可以实现跨平台访问

55、如何生成一个随机数?

random模块
如:random.random()

56、如何使用python删除一个文件?

os.remove(path)

57、谈谈你对面向对象的理解?

面向对象就是将一些零散的具有相同功能的属性方法通过类封装起来,实现模块化
https://blog.csdn.net/qq_37275405/article/details/80979592

58、Python面向对象中的继承有什么特点?
  1. 在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。有别于C#
  2. 在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
  3. Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
    https://blog.csdn.net/qq_37275405/article/details/80979592
59、面向对象深度优先和广度优先是什么?

pass

60、面向对象中super的作用?
  • super不是一个关键字,也是不是有函数,他是一个类
  • super()的作用不是查找父类,而是找MRO列表的上一个类
  • super()和父类没有任何实质性的关系,只是有时候能调用到父类而已。
  • 在单继承的情况下,super()永远调用的是父类/父对象
  • super()多用于菱形继承
    格式:
    super().方法() #python3的格式
61、是否使用过functools中的函数?其作用是什么?

functools用于高阶函数:指那些作用于函数或者返回其他函数的函数。通常情况下,只要是可以被当做函数调用的对象就是这个模块的目标。

62、列举面向对象中带双下划线的特殊方法,如:newinit

__init__初始化魔术对象,当一个对象被实例化是自动触发
__new__ 当一个对象被实例化前自动触发,通过传递参数判断对象是否被创建或其他
__del__当一个对象没有任何引用是被触发,回收内存
__call__将对象当作函数调用时触发

63、如何判断是函数还是方法?

函数:
函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用。
方法:
方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法。

64、静态方法和类方法区别?

实例方法,类方法,静态方法都可以通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python 3可以传递任意对象,其他版本会报错)。

三种方法从不同层次上来对方法进行了描述:实例方法针对的是实例,类方法针对的是类,他们都可以继承和重新定义,而静态方法则不能继承,可以认为是全局函数。

65、列举面向对象中的特殊成员以及应用场景

魔术方法 用于在某一时刻调用时

66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数

for x in range(1,5):
for z in range(1,5):
if i!=x and i!=z and x!=z:
print(i,x,z)

67、什么是反射?以及应用场景?

本质其实就是利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动!
具体请参考:https://www.cnblogs.com/yooma/p/8004788.html

68、metaclass作用?以及应用场景?

元类就是创建类这种对象的东西

69、用尽量多的方法实现单例模式。

class Earth(object):
__instance=None #定义一个类属性做判断

def __new__(cls):

if cls.__instanceNone:
#如果__instance为空证明是第一次创建实例
#通过父类的__new__(cls)创建实例
cls.__instance
object.new(cls)
return cls.__instance
else:
#返回上一个对象的引用
return cls.__instance

a = Earth()
print(id(a))
b = Earth()

70、装饰器的写法以及应用场景。

装饰器是一个工厂函数,接受一个函数作为参数,然后返回一个新函数,其闭包中包含被装饰的函数。有了装饰器,可以提取大量函数中与本身功能无关的类似代码 ( 这块在Flask中用于定义路由的@app.route,就是一个很好的例子),达到代码重用的目的。可应用于插入日志、性能测试、事务处理等方面。

def deco(func):
def warpper(*args, **kwargs):
print(‘start‘)
func(*args, **kwargs)
print(‘end‘)
return warpper

@deco
def myfunc(parameter):
print(“run with %s” % parameter)

myfunc(“something”)

71、异常处理写法以及如何主动跑出异常(应用场景)

try:
pirnt(‘123’)
except:
print(‘456’)

通过raise 异常对象主动抛出异常

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

866130abf71d796.png#pic_center)

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-eDIP9mMb-1713638346015)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值