python技术面试题(十七)

简介: python技术面试题(十七)

每日分享

People will forget what you said, people will forget what you did, but people will never forget how you made them feel.

人们会忘记你所说的话,也会忘记你做的事,但是人们不会忘记你带给他们的感觉。

小闫语录

昨日夜观天象,东南方有异象显现,低头思,今天不宜瞎说。。。



python技术面试题(十七)

1.@classmethod和@staticmethod?

@classmethod用来标识类方法,对于类方法,第一个参数必须是类对象,一般用 cls作为第一个参数。 cls参数用来调用类的属性,类的方法等等。类方法可以通过实例对象和类对象去访问。类方法还可以对类属性进行修改。

@staticmethod修饰的方法为静态方法,该方法不强制要求传递参数,可以通过对象和类来访问。在静态方法中引用类属性的话,必须通过类来引用。

2.谈一谈python中的元类

答:一般来说,我们都是在代码里定义类,用定义的类来创建实例。而使用元类,步骤有些不同,定义元类,用元类创建类,再使用创建出来的类来创建实例。元类的主要目的就是当创建类时能够自动地改变类。

3.with open执行原理

答:使用了with上下文管理器。上下文管理器的工作机制便是使用了python的方法: __enter____exit__两个方法。

上下文管理器简单的理解就是一个操作环境。在文件操作时,需要打开、关闭文件,而在文件进行读写操作时,就处于文件操作的上下文中,也就是文件操作环境中。

__enter__方法会在执行 with 后面的语句时执行,一般用来处理操作前的内容。比如一些创建对象,初始化等。在with open的时候就是打开文件的操作。

__exit__方法会在 with 内的代码执行完毕后执行,一般用来处理一些善后收尾工作,比如文件的关闭,数据库的关闭等。在with open的时候就是关闭文件的操作。

自定义一个上下文管理器,模拟文件打开过程

class MyOpen(object):
    def __init__(self,file,mode):
        self.__file = file
        self.__mode = mode
    def __enter__(self):
        print('__enter__run... open the file')
        self.__handle = open(self.__file,self.__mode)
        return self.__handle
    def __exit__(self,exc_type,exc_val,exc_tb):
        print('__exit__.run... close the file')
        self.__handle.close()
with MyOpen('test','w') as f:
    f.write('欢迎关注 <小闫笔记>')
print('over')

4.状态码中301和302的区别?

答:301是永久重定向,302是临时重定向。

5.python中的列表底层实现原理

python中的列表底层采用了顺序表。那么什么是顺序表呢?顺序表是线性表存储的一种方式。那么什么是线性表呢?(怎么问题这么多....)线性表就是存储着一些元素的集合(不光有元素,还有元素的顺序关系)。

为了了解底层实现原理,首先来了解顺序表吧。假如班主任在统计班级同学信息,统计完之后在教室前面贴了一张表,表上写的是班级能容纳学生的数量以及现有同学的数量,教室和这张表就构成了顺序表。

一个顺序表的完整信息包括两部分,一部分是表中的元素集合,另一部分是为实现正确操作而需记录的信息,即有关表的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项。

了解完顺序表之后,我们了解一下顺序表的实现方式。顺序表实现方式有两种,分别是一体式结构和分离式结构。(点击下图即可查看超清图片)

一体式就是教室前面的那张表被用胶水粘死了,他和教室融为了一体,在教室前面。

一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象。

分离式就是表在班主任办公桌上,教室在.....(不管你爱还是不爱,教室就在那里...),万一换教室了,班主任改一下表上的信息就好了。如果是一体式,哈哈哈,再做一张表吧,总不能为了看班级的信息,天天跑去改为了2班的教室吧.....

上面涉及到了元素存储区的一个替换。就是假如我们想更换数据区,也就是教室要从南校区搬迁到北校区了。那张表十分珍贵,被班主任糊涂的写在了乾隆年间的一张草纸上,世界上再无第二张,但是又被死死粘在了墙上,怎么办,教室和那张纸一起搬走(有点暴力哈,不要和我说为什么不把墙皮弄下来....我任性,我就要整体搬迁,谁让是我写的故事呢....哼),这就是一体式结构的元素存储区替换。分离式呢?教室搬迁到了北校区,但是老师的办公室在南校区,这张表还在老师的办公桌上,老师只需要小手一挥,将南校区1班改为北校区1班即可。

一体式结构由于顺序表信息区与数据区连续存储在一起,所以若想更换数据区,则只能整体搬迁,即整个顺序表对象(指存储顺序表的结构信息的区域)改变了。

分离式结构若想更换数据区,只需将表信息区中的数据区链接地址更新即可,而该顺序表对象不变。

好了,了解完了,回归正题。python中的列表就是采取了分离式技术实现的动态顺序表。之所以你可以根据下标随意的访问和更新数据,时间复杂度为O(1),特别快,是因为顺序表中的元素保存在一块连续的存储区中。为了可以任意加入元素,而且在不断加入元素过程中,表对象的id不变,那就只能采用分离式实现。也就是班主任的表就在班主任办公桌上,不变。当班级里的学生太多了需要换教室,随便换,不需要暴力的将整个房子搬走了。


相关文章
|
6天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
19 2
|
12天前
|
算法 Python
Python图论探索:从理论到实践,DFS与BFS遍历技巧让你秒变技术大牛
图论在数据结构与算法中占据重要地位,应用广泛。本文通过Python代码实现深度优先搜索(DFS)和广度优先搜索(BFS),帮助读者掌握图的遍历技巧。DFS沿路径深入搜索,BFS逐层向外扩展,两者各具优势。掌握这些技巧,为解决复杂问题打下坚实基础。
24 2
|
13天前
|
开发框架 开发者 Python
探索Python中的装饰器:技术感悟与实践
【10月更文挑战第31天】 在编程世界中,装饰器是Python中一种强大的工具,它允许我们在不修改函数代码的情况下增强函数的功能。本文将通过浅显易懂的方式,带你了解装饰器的概念、实现原理及其在实际开发中的应用。我们将一起探索如何利用装饰器简化代码、提高可读性和复用性,同时也会分享一些个人的技术感悟,帮助你更好地掌握这项技术。
30 2
|
18天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
18天前
|
数据采集 存储 Web App开发
利用Python 的爬虫技术淘宝天猫销量和库存
使用 Python 爬虫技术获取淘宝天猫商品销量和库存的步骤包括:1. 安装 Python 和相关库(如 selenium、pandas),下载浏览器驱动;2. 使用 selenium 登录淘宝或天猫;3. 访问商品页面,分析网页结构,提取销量和库存信息;4. 处理和存储数据。注意网页结构可能变化,需遵守法律法规。
|
19天前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
16 1
|
27天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
网络协议 安全 Java
难懂,误点!将多线程技术应用于Python的异步事件循环
难懂,误点!将多线程技术应用于Python的异步事件循环
61 0
|
1月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)