Python常见面试题的详解7
1. 内置的数据结构有哪几种
Python 中有多种内置的数据结构,主要分为以下几种:
1.1 数值类型
- 整数(int):用于表示整数,没有大小限制。例如:
1
,-5
,100
。 - 浮点数(float):用于表示小数。例如:
3.14
,-0.5
。 - 复数(complex):由实部和虚部组成,虚部以
j
或J
结尾。例如:3 + 4j
。
1.2 序列类型
- 字符串(str):由零个或多个字符组成的不可变序列。例如:
"hello"
。 - 列表(list):一种可变的序列类型,可以包含不同类型的元素。例如:
[1, 'a', True]
。 - 元组(tuple):一种不可变的序列类型,使用圆括号表示。例如:
(1, 2, 3)
。
1.3 集合类型
- 集合(set):无序且唯一元素的集合,可变类型。例如:
{1, 2, 3}
。 - 冻结集合(frozenset):不可变的集合类型。例如:
frozenset([1, 2, 3])
。
1.4 映射类型
- 字典(dict):以键值对形式存储数据,键是唯一的,可变类型。例如:
{'name': 'Alice', 'age': 25}
。
-
要点:
不同的数据结构在内存占用和性能表现上有所差异。例如,列表在插入和删除元素时效率相对较低,尤其是在列表头部操作;而集合在查找元素时具有较高的效率,时间复杂度为 O (1)。在实际应用中,需要根据具体的需求选择合适的数据结构。比如,当需要存储有序且可重复的数据时,列表是不错的选择;当需要快速判断元素是否存在时,集合更为合适。
2. 如何实现单例模式?请写出三种实现方式
2.1 使用模块
Python 的模块在第一次导入时会被执行,并且会将模块的内容加载到内存中,后续的导入操作都会使用同一个模块对象,因此可以利用这一特性实现单例模式。
python
# singleton.py
class Singleton:def __init__(self):passsingleton_instance = Singleton()
在其他文件中使用:
python
from singleton import singleton_instance
2.2 使用装饰器
python
def singleton(cls):instances = {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton
class MyClass:def __init__(self):passobj1 = MyClass()
obj2 = MyClass()
print(obj1 is obj2) # 输出: True
2.3 使用类方法
python
class Singleton:_instance = None@classmethoddef get_instance(cls):if cls._instance is None:cls._instance = cls()return cls._instanceobj1 = Singleton.get_instance()
obj2 = Singleton.get_instance()
print(obj1 is obj2) # 输出: True
- 要点:
单例模式在实际开发中有很多应用场景,比如数据库连接池、日志记录器等。在多线程环境下使用单例模式时,需要考虑线程安全问题。例如,使用类方法实现单例模式时,在多线程环境下可能会创建多个实例,需要使用锁机制来保证线程安全。
- 示例:
python
import threadingclass Singleton:_instance = None_lock = threading.Lock()@classmethoddef get_instance(cls):with cls._lock:if cls._instance is None:cls._instance = cls()return cls._instance
3. 如何反转一个整数
例如 -168 --> -861
python
def reverse_integer(x):sign = -1 if x < 0 else 1num_str = str(abs(x))reversed_str = num_str[::-1]return sign * int(reversed_str)print(reverse_integer(-168)) # 输出: -861
- 要点:
实现整数反转的关键步骤是先处理符号,然后将绝对值转换为字符串进行反转,最后再加上符号。在处理整数反转时,需要考虑整数溢出的问题。虽然 Python 的整数类型没有大小限制,但在某些需要与其他语言交互或对性能有严格要求的场景下,可能需要考虑溢出问题。另外,可以对输入进行合法性检查,确保输入是有效的整数。
4. 用一行代码写出 1 + 2 + 3 + ... + 10000
python
print(sum(range(1, 10001)))
- 要点:
使用 sum
函数和 range
函数可以在一行代码中完成 1 到 10000 的求和。同样,对于较大的范围,使用数学公式 n * (n + 1) // 2
可以更高效地计算。另外,可以将这个功能封装成一个函数,方便计算任意范围的整数求和。以下是示例代码:
- 示例:
python
def sum_range(n):return n * (n + 1) // 2print(sum_range(10000))
5. 遍历列表时删除元素的正确做法
5.1 使用列表推导式创建新列表
python
original_list = [1, 2, 3, 4, 5]
new_list = [i for i in original_list if i != 3]
print(new_list)
5.2 反向遍历列表并删除元素
python
original_list = [1, 2, 3, 4, 5]
for i in range(len(original_list) - 1, -1, -1):if original_list[i] == 3:del original_list[i]
print(original_list)
- 要点:
正确的做法有使用列表推导式创建新列表和反向遍历列表并删除元素。列表推导式的优点是代码简洁,易于理解,但会创建一个新的列表,占用额外的内存。反向遍历列表的方法不会创建新的列表,但代码相对复杂一些。在处理大型列表时,需要根据具体情况选择合适的方法。另外,还可以使用迭代器和 filter
函数来实现相同的功能。
6. 可变类型和不可变类型
- 可变类型:对象创建后,其值可以被修改的类型。常见的可变类型有列表(list)、集合(set)、字典(dict)。
python
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # 输出: [1, 2, 3, 4]
- 不可变类型:对象创建后,其值不能被修改的类型。常见的不可变类型有整数(int)、浮点数(float)、字符串(str)、元组(tuple)。
python
my_str = "hello"
# 下面这行代码会报错,因为字符串是不可变的
# my_str[0] = 'H'
- 要点:
可变类型和不可变类型在函数参数传递时表现不同。不可变类型作为参数传递时,函数内部对参数的修改不会影响到外部的变量;而可变类型作为参数传递时,函数内部对参数的修改会影响到外部的变量。
- 示例:
python
def modify_immutable(num):num = num + 1return numdef modify_mutable(lst):lst.append(4)return lsta = 1
b = [1, 2, 3]
print(modify_immutable(a)) # 输出: 2
print(a) # 输出: 1
print(modify_mutable(b)) # 输出: [1, 2, 3, 4]
print(b) # 输出: [1, 2, 3, 4]
7. is
和 ==
有什么区别
==
用于比较两个对象的值是否相等。
python
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # 输出: True
is
用于比较两个对象是否是同一个对象,即它们是否指向同一块内存地址。
python
a = [1, 2, 3]
b = [1, 2, 3]
print(a is b) # 输出: Falsec = a
print(a is c) # 输出: True
- 要点:
在实际应用中,对于简单的数据类型,如整数、字符串等,Python 会对一些常用的值进行缓存,因此在一定范围内使用 is
比较可能会得到意外的结果。
- 示例:
python
a = 100
b = 100
print(a is b) # 输出: Truea = 1000
b = 1000
print(a is b) # 输出: False
8. 求出列表所有奇数并构造新列表
python
original_list = [1, 2, 3, 4, 5]
odd_list = [i for i in original_list if i % 2 != 0]
print(odd_list) # 输出: [1, 3, 5]
- 要点:
可以使用列表推导式来筛选出列表中的奇数元素并构建新列表。除了列表推导式,还可以使用 filter
函数和 lambda
表达式来实现相同的功能。
- 示例:
python
original_list = [1, 2, 3, 4, 5]
odd_list = list(filter(lambda x: x % 2 != 0, original_list))
print(odd_list) # 输出: [1, 3, 5]
相关文章:
Python常见面试题的详解7
1. 内置的数据结构有哪几种 Python 中有多种内置的数据结构,主要分为以下几种: 1.1 数值类型 整数(int):用于表示整数,没有大小限制。例如:1, -5, 100。浮点数(float)…...
C++ ——构造函数
1、作用:创建对象时,给对象的属性进行初始化 2、特点 (1)构造函数与类同名 (2)如果没有显式给出构造函数,编译器会给出默认的构造函数(参数为空,并且函数体也为空&#…...
PostgreSQL如何关闭自动commit
PostgreSQL如何关闭自动commit 在 PostgreSQL 中,默认情况下,每个 SQL 语句都会自动提交(即 AUTOCOMMIT 是开启的)。如果希望关闭自动提交,以便手动控制事务的提交和回滚,可以通过以下方法实现。 1 使用 …...
HCIA项目实践--静态路由的总结和简单配置
七、静态路由 7.1 路由器获取未知网段的路由信息: (1)静态路由:网络管理员手工配置的路由条目,它不依赖网络拓扑的变化进行自动更新,而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…...
B站视频同步思维导图(全)
前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z 文章目录 前言分段视频一张思维导图版本手写版本联系作者 分段视频 Java基础 并发编程 MySQL redis…...
C++游戏开发流程图
C游戏开发流程图如下: #mermaid-svg-by3hx6H65qEwr5mV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-by3hx6H65qEwr5mV .error-icon{fill:#552222;}#mermaid-svg-by3hx6H65qEwr5mV .error-text{fill:#5…...
回顾Golang的Channel与Select第二篇
深入掌握Go Channel与Select:从原理到生产级实践 一、Channel基础:不只是数据管道 1.1 通道的完整生命周期(可运行示例) package mainimport ("fmt""time" )func main() {// 创建缓冲通道ch : make(chan i…...
将OpenWrt部署在x86服务器上
正文共:1234 字 40 图,预估阅读时间:2 分钟 如果你问ChatGPT有哪些开源的SD-WAN方案,他会这样答复你: 我们看到,OpenWrt也属于比较知名的开源SD-WAN解决方案。当然,在很久之前,我就发…...
Spring Boot 常用依赖详解:如何选择和使用常用依赖
在Spring Boot项目中,依赖(Dependencies)是项目的核心组成部分。每个依赖都提供了一些特定的功能或工具,帮助我们快速开发应用程序。本文将详细介绍Spring Boot中常用的依赖及其作用,并指导你如何根据项目需求选择合适…...
day51 第十一章:图论part02
99. 岛屿数量 深搜 每一块的上下左右都遍历过了之后,这块陆地就遍历完了。是深搜,不是广搜 深搜:递归 def dfs(): if .....: 终止条件 dfs(子节点) directions [[0,1],[1,0],[0,-1],[-1,0]]def dfs(grid, visited, x, y):if grid[x][y]…...
介绍一下 Octave
已思考完成 收起 好的,我现在要回答用户关于介绍Octave的问题。首先,我需要整理提供的参考内容,看看有哪些关键点需要覆盖。 用户给的参考内容很多,包括知乎文章和网页资料,涵盖了Octave的历史、功能、语法、与MATLAB的…...
垃圾回收器
一、GC分类与性能指标 1.垃圾回收器概述: 垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。 由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。 从不同角度分析垃圾收集器,可以将…...
前端为什么要使用new Promise包裹一个函数
在前端开发中,使用 new Promise 包裹一个函数主要是为了将原本不支持 Promise 规范的操作转化为支持 Promise 规范的操作,从而可以更好地处理异步操作,提升代码的可读性和可维护性。下面详细介绍这么做的常见原因和应用场景: 1. …...
【设计模式】【行为型模式】访问者模式(Visitor)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
深入理解 MQTT 协议:物联网通信的核心
目录 一、什么是 MQTT? 二、MQTT 的核心特点 2.1 轻量级 2.2 发布/订阅模式 2.3 可靠传输 2.4 安全性 三、MQTT 协议架构 3.1 核心组件 3.2 通信流程 四、MQTT 协议详解 4.1 消息格式 4.2 消息类型 4.3 QoS 级别 五、MQTT 的应用场景 六、MQTT 的实现 6.1 常用 Bro…...
25/2/16 <算法笔记> MiDas原理
MiDaS(Monocular Depth Sensing)是一种基于单目深度估计的技术,它通过深度学习方法使用单张RGB图像(普通2D图像)来估算场景的深度图(Depth Map)。相比于传统的依赖专用深度传感器(如…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_ssl_init 函数
#if (NGX_OPENSSL)ngx_ssl_init(log); #endif objs/ngx_auto_config.h 中 #ifndef NGX_OPENSSL #define NGX_OPENSSL 1 #endif 所以这个条件编译成立 NGX_OPENSSL 是一个宏定义,用于控制与 OpenSSL 相关的功能是否被启用 若用户通过./configure参数(如-…...
时间盲注Boolen盲注之获取表、列、具体数据的函数
时间盲注 时间盲注(Time-Based Blind SQL Injection)是一种利用数据库响应时间的差异来推断数据的SQL注入技术。它的核心原理是通过构造特定的SQL查询,使得数据库在执行查询时产生时间延迟,从而根据延迟的有无来推断数据。 时间…...
人工智能在文化遗产保护中的创新:科技与文化的完美融合
人工智能在文化遗产保护中的创新:科技与文化的完美融合 引言 文化遗产是人类历史的见证,是我们了解过去、感知现在、展望未来的重要宝贵资源。然而,随着时间的流逝,自然灾害、战争、气候变化以及人为因素等,都对文化遗产的保护造成了严峻挑战。传统的文化遗产保护方法虽…...
linux下OSD使用SDL_ttf生成点阵数据,移植+开发代码详解
前言 在做音视频开发的时候,一般会在视频上增加osd水印,时间或者logo之类的,这种水印其实就是由点阵数据构成,本文使用freetypeSDLSDL_ttf生成文字点阵数据,并保存为bmp格式图片。使用这种方式的优点: 方便…...
渗透测试方向的就业前景怎么样?
互联网各领域资料分享专区(不定期更新): Sheet 前言 渗透测试作为网络安全领域的重要分支,近年来就业前景持续向好,尤其在数字化转型加速、安全威胁加剧的背景下,市场需求显著增长。以下是详细分析: 一、市场需求旺盛 …...
SQL Server:查看当前连接数和最大连接数
目录标题 **1. 查看当前连接数****使用系统视图****使用动态管理视图** **2. 查看最大连接数****通过配置选项****通过服务器属性** **3. 查看连接数的实时变化****4. 设置最大连接数****5. 查看连接的详细信息****6. 使用 SQL Server Management Studio (SSMS)****7. 使用 SQL…...
Windows环境搭建ES集群
搭建步骤 下载安装包 下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…...
【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】
一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…...
DeepSeek与ChatGPT:AI语言模型的全面对决
DeepSeek与ChatGPT:AI语言模型的全面对决 引言:AI 语言模型的时代浪潮一、认识 DeepSeek 与 ChatGPT(一)DeepSeek:国产新星的崛起(二)ChatGPT:AI 界的开拓者 二、DeepSeek 与 ChatGP…...
DeepSeek-V3模型底层架构的核心技术一(多Token预测(MTP)技术)
一、DeepSeek-V3的框架结构 DeepSeek-V3的框架结构基于三大核心技术构建:多头潜在注意力(MLA)、DeepSeekMoE架构和多token预测(MTP)。这些创新使得模型在处理长序列、平衡计算负载以及生成连贯文本方面表现出色。 1. 基础架构 DeepSeek-V3的基础架构仍然基于Transformer框…...
QT c++ QMetaObject::invokeMethod函数 线程给界面发送数据
在项目开发时,常常需要用线程采集数据,如果要给界面发送数据,本文是方法之二,动态调用。 第一步:在界面类里定义一个带Q_INVOKABLE关键字的函数接收信息 第二步:在线程类里,用 QMetaObject::i…...
netcore https配置
一、生成证书 1. 安装 OpenSSL 如果尚未安装 OpenSSL,可以通过以下命令安装:Ubuntu/Debian:sudo apt update sudo apt install openssl CentOS/RHEL:sudo yum install openssl 2. 生成私钥 使用以下命令生成私钥文件(private.key)…...
centos部署open-webui
提示:本文将简要介绍一下在linux下open-webui的安装过程,安装中未使用虚拟环境。 文章目录 一、open-webui是什么?二、安装流程1.openssl升级2.Python3.11安装3.sqlite安装升级4.pip 下载安装open-webui 总结 一、open-webui是什么? Open W…...
sql语言语法的学习
sql通用语法 sql分类 DDL(操作数据库和表) 操作数据库 操作表_查询 操作表_创建 举例: 操作表_删除 操作表_修改 DML(增删改表中数据) DML添加数据 DML删除数据 DML修改数据 DQL 单表查询 基础查询 条件查询 案例演示: 排序查询 聚合函数 分组查询…...
vueDevtools和文档整合(前端常用工具/插件)
3.vueDevtools安装 chrome插件vue-devtools下载地址: https://chrome.zzzmh.cn/info/nhdogjmejiglipccpnnnanhbledajbpd下载完放到chrome的拓展程序中即可,注意点:vue2和vue3下载版本不同,vue2的话使用稍微老点的版本才行。 详细…...
算法刷题--哈希表--字母异位词和两个数组的交集
哈希表概念 哈希表是根据关键码的值而直接进行访问的数据结构。 直白来讲数组就是一种哈希表。 那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。 那么一般都是将一个集合里面的元素映射为哈希表的索引。 那么设计哈希表的时候需要…...
150,[5] BUUCTF WEB [BJDCTF2020]EasySearch
进入靶场 有个文件 和之前一道题如出一辙 <?php// 开启输出缓冲,将后续所有的输出内容先暂存到缓冲区,而不是直接发送到浏览器ob_start();/*** 生成一个基于随机字符串和唯一标识符的哈希值* return string 返回生成的 sha1 哈希值*/function get_…...
kibana es 语法记录 elaticsearch
目录 一、认识elaticsearch 1、什么是正向索引 2、什么是倒排索引 二、概念 1、说明 2、mysql和es的对比 三、mapping属性 1、定义 四、CRUD 1、查看es中有哪些索引库 2、创建索引库 3、修改索引库 4、删除索引库 5、新增文档 6、删除文档 5、条件查询 一、认识…...
以若依移动端版为基础,实现uniapp的flowable流程管理
1.前言 此代码是若依移动端版为基础,实现flowable流程管理,支持H5、APP和微信小程序三端。其中,APP是在安卓在雷电模拟器环境下完成的,其他环境未测试,此文章中所提及的APP均指上述环境。移动端是需要配合若依前后端分…...
SaaS 平台开发要点
如何在 SaaS 平台的前端开发中,编写高性能、高质量且高度通用化的 Vue 组件 一、组件设计原则 单一职责原则:每个组件只负责一个核心功能受控/非受控模式:同时支持 v-model 和自主状态管理组合式 API:使用 Composition API 提升逻辑复用性可访问性:遵循 WAI-ARIA 规范Typ…...
【Kubernetes】k8s 部署指南
1. k8s 入门 1.1 k8s 简介 需要最需要明确的就是:kubernetes(简称 k8s ) 是一个 容器编排平台 ,换句话说就是用来管理容器的,相信学过 Docker 的小伙伴对于容器这个概念并不陌生,打个比方:容器…...
【Linux】进程间关系与守护进程
文章目录 1. 进程组2. 会话2.1 什么是会话2.2 如何创建会话2.3 守护进程 3. 作业控制 1. 进程组 我们运行下面的命令 sleep 10000 | sleep 20000 | sleep 30000然后查看进程的信息: 可以看到,其实每一个进程除了有进程PID、PPID之外,还属于…...
如何通过AI让PPT制作更轻松:从AI生成PPT到一键智能生成
如何通过AI让PPT制作更轻松:从AI生成PPT到一键智能生成!在这个信息爆炸的时代,PPT几乎成了每个人办公必备的工具。但说到制作PPT,很多人头疼不已——排版、设计、内容的整理,时间一不小心就被浪费掉了。有没有一种方法…...
解决前后端日期传输因时区差异导致日期少一天的问题
前端处理 1. 发送日期字符串而非时间戳 在前端使用日期选择器(如 el-date-picker)获取日期后,将日期转换为特定格式的字符串(如 YYYY-MM-DD)发送给后端,避免直接发送带有时区信息的时间戳或日期对象。这样…...
vue2和vue3生命周期的区别通俗易懂
用最直白的对比帮你理解 Vue2 和 Vue3 生命周期的区别,就像对比手机系统的升级: 一、生命周期阶段对比表(老手机 vs 新手机) 阶段Vue2(老系统)Vue3(新系统)变化说明初始化beforeCre…...
在 Ubuntu 20.04 为 Clash Verge AppImage 创建桌面图标教程
在 Ubuntu 20.04 为 AppImage 创建桌面图标教程 一、准备工作 确保你已经下载了 xxxx.AppImage 文件,并且知道它所在的具体路径。同时,你可以准备一个合适的图标文件(.png 格式)用于代表该应用程序,如果没有合适的图…...
Dockerfile 编写推荐
一、导读 本文主要介绍在编写 docker 镜像的时候一些需要注意的事项和推荐的做法。 虽然 Dockerfile 简化了镜像构建的过程,并且把这个过程可以进行版本控制,但是不正当的 Dockerfile 使用也会导致很多问题。 docker 镜像太大。如果你经常使用镜像或者…...
Flutter 中的生命周期
在 Flutter 中,StatefulWidget 和 StatelessWidget 这两种 Widget 的生命周期不同,主要关注的是 StatefulWidget,因为它涉及到状态的管理和更新。 StatefulWidget 的生命周期: 1. 创建阶段 (Create) createState():…...
AI大模型的文本流如何持续吐到前端,实时通信的技术 SSE(Server-Sent Events) 认知
写在前面 没接触过 SSE(Server-Sent Events),AI大模型出来之后,一直以为文本流是用 WebSocket 做的偶然看到返回到报文格式是 text/event-stream,所以简单认知,整理笔记博文内容涉及 SSE 认知,以及对应的 D…...
项目版本号生成
需求 项目想要生成一个更新版本号,格式为v2.0.20250101。 其中v2.0为版本号,更新时进行配置;20250101为更新日期,版本更新时自动生成。 实现思路 创建一个配置文件version.properties,在其中配置版本号;…...
Spring AI发布!让Java紧跟AI赛道!
1. 序言 在当今技术发展的背景下,人工智能(AI)已经成为各行各业中不可忽视的重要技术。无论是在互联网公司,还是传统行业,AI技术的应用都在大幅提升效率、降低成本、推动创新。从智能客服到个性化推荐,从语…...
ubuntu服务器 如何配置安全加固措施
下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。 新的服务器,通常我们会创建一…...
京东java面试流程_java京东社招面试经历
个人背景:java开发工作2年,跳槽2次,被裁一次,无大厂经历,京东内推。整体感觉不错的面试经历,最后败了。 一、面试流程 (1)上机题(60分钟100道选择题,单选多选混合的) (2)技术面(java基础知识…...
多表查询、事务(MySQL笔记第三期)
p.s.这是萌新自己自学总结的笔记,如果想学习得更透彻的话还是请去看大佬的讲解 目录 多表关系多表查询内连接外连接左外连接右外连接 自连接联合查询子查询标量子查询列子查询行子查询表子查询 例题事务方式一方式二事务四大特性(ACID)并发事务问题隔离事务级别 多…...