面试相关|常见试题 or 易错题集合

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、腾讯云优秀创作者
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

  • 前言
  • 面试常见题目
    • (1)语言基础知识
    • (2)编程实践
    • (3)数据结构和算法
    • (4)常用的Python库和框架
  • 易错题集合
    • 1 字符串替换问题
    • 2 多维列表的创建
    • 3 字符串反转问题
    • 4 元素计数问题
  • 总结

前言

Python是一种简洁、易读性强的动态类型的语言,他的语法特性使得程序员在编写Python代码时更加简洁,易于理解。Python社区拥有大量的第三方库和框架,这使得Python在各个领域都有广泛的应用。例如数据科学、机器学习、Web开发、数学统计、文本检索、数据筛选等。而针对Python面试也会更加注重对这种动态类型语言的理解和运用,以及如何处理解决实际问题。相比之下,其他语言面试可能更加注重语法细节和性能优化等方面。

  1. Web 开发(服务器端)
  2. 软件开发
  3. 数学
  4. 系统脚本
  5. 文本检索
  6. 数据筛选
    在这里插入图片描述

面试常见题目

在Python的面试中,常见的问题覆盖了语言的基础知识,编程技巧,以及实际应用。

(1)语言基础知识

【1、Python语言相比其他语言有哪些特点和自身优点?】

● 简洁的语法
● 强大的标准库和丰富的第三方库
● 强大的社区支持
● 高扩展性
● 支持面向对象和函数式编程以及多种编程范式
● 广泛的支持和工具
说出四点以上就差不多了。

【2、Python中的字典(dictionary)是如何工作的?】

Python中的字典(dictionary)是一种可变的数据类型,它用于存储键值对。字典的键必须是唯一的,而值可以是任何数据类型:数字、字符串、列表、字典等。字典在Python中被实现为一个哈希表,这意味着字典使用哈希函数将键映射到值。这种实现方式使得字典在查找、插入和删除操作上具有近乎常数时间的性能。

【3、解释一下Python中的装饰器(decorators)】

Python中的装饰器是一种高级功能,用于修改或增强函数、方法或类的行为。装饰器是一个接受函数对象作为参数,并返回一个新的函数对象的可调用对象(通常是函数或类)。装饰器的主要用途有:
函数装饰:在不需要修改原函数代码的前提下,增加额外的功能,例如日志、缓存、权限校验等。
方法装饰:在面向对象编程中,装饰器可以用于修改类的方法的行为。
类装饰:可以用于修改类的行为,或者实现类似单例模式这样的设计模式。
装饰器的工作原理是在函数被调用之前或之后,自动执行一些额外的操作。这些操作可以包括记录日志、性能测试、事务处理等。

【4、解释一下Python中的列表(list)和元组(tuple)以及它们之间的区别?】

Python中的列表(list)和元组(tuple)都是有序的集合类型,它们可以存储任意类型的数据,包括整数、浮点数、字符串、列表等。列表是可变的,这意味着你可以修改列表中的元素,添加或删除元素。元组是不可变的,也就是说,一旦一个元组被创建,它的元素就不能被修改、删除或添加。在效率方面,由于元组是不可变的,所以在处理大量数据时,元组的操作可能会比列表更快。示例如下:

### 列表
my_list = [1, 2, 3]
print(my_list)

### 元组
my_tuple = (1, 2, 3)
print(my_tuple)

(2)编程实践

【1、你如何在Python中进行错误和异常处理?】

错误和异常处理通常通过try/except语句块来完成。这种结构允许程序在遇到错误或异常时执行特定的代码。在Python语言中try语句块包含可能会引发异常的代码,而except语句块包含当异常发生时应该执行的代码。 错误和异常处理通常通过try/except语句块来完成。try语句块包含可能引发异常的代码,而except语句块包含在try块中发生异常时应执行的代码。

【2、如何在Python中实现多线程和多进程?】

在Python中,可以使用内置的threading模块来实现多线程,使用multiprocessing模块来实现多进程。
● threading模块来实现多线程

import threading  
  
def worker():  
    # 线程执行的代码  
    print("线程开始执行")  
    # ...  
    print("线程执行完毕")  
  
# 创建线程  
thread = threading.Thread(target=worker)  
# 启动线程  
thread.start()

multiprocessing模块来实现多进程

import multiprocessing  
  
def worker():  
    # 进程执行的代码  
    print("进程开始执行")  
    # ...  
    print("进程执行完毕")  
  
# 创建进程  
process = multiprocessing.Process(target=worker)  
# 启动进程  
process.start()

【3、你如何在Python中优化代码以提高性能?】

Python是一种解释型语言,相对于编译型语言,其执行速度通常较慢。在以往工作中,常用的一些优化Python代码的方法使用内置函数和库、避免不必要的对象创建、使用生成器、使用缓存、使用多线程或多进程、优化循环、避免使用with statement、使用Cython或C扩展等。具体使用哪种方法需要根据实际情况而定。

【4、描述一下你在Python中使用过的设计模式?】

在Python中,我使用过以下几种设计模式:单例模式(Singleton)、工厂模式(Factory)、观察者模式(Observer)、装饰器模式(Decorator)、策略模式(Strategy)、适配器模式(Adapter)、模板方法模式(Template Method)。相对于Java的设计模式,说出来上述五个以上就可以,熟练两个就可以了。例如下面说的策略模式:

【5、可以描述下策略模式吗?】

策略模式(Strategy)
策略模式是一种行为型模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户而变化。在Python中,可以使用类和函数来实现策略模式。

(3)数据结构和算法

【1、有使用过哪些算法?(这个针对算法岗)】

我在使用Python语言编程过程中,使用了以下是一些常见的Python算法:

  1. 排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序等。
  2. 搜索算法:线性搜索、二分搜索等。
  3. 动态规划算法:最长公共子序列、最长递增子序列、背包问题等。
  4. 图算法:最短路径算法(Dijkstra算法、Bellman-Ford算法)、图的遍历算法(深度优先搜索、广度优先搜索)等。
  5. 分治算法:归并排序、快速排序等。
  6. 贪心算法:最小生成树算法(Prim算法、Kruskal算法)、最优装载问题等。
  7. 回溯算法:排列组合问题、八皇后问题等。
  8. 分支限界算法:0-1背包问题、旅行商问题等。
  9. 近似算法:遗传算法、模拟退火算法等。

【2、有使用过很多算法,可以简单描述下插入排序算法吗?(这个针对算法岗)】

插入排序(Insertion Sort)是一种简单的排序算法,其基本思想是将数组分为已排序部分和未排序部分,初始时已排序部分包含一个元素,然后逐步将未排序的元素插入到已排序部分的合适位置。如果是上机要求演示算法,则可以按照下面的代码进行操作:

arr = [89,23,87,23,61,91,13,65,4,54]
print('排序前:')
for i in arr:  
    print(i, end=' ')

def insertion_sort(arr):  
    for i in range(1, len(arr)):  
        key = arr[i]  
        j = i - 1  
        while j >= 0 and key < arr[j]:  
            arr[j + 1] = arr[j]  
            j -= 1  
        arr[j + 1] = key 

insertion_sort(arr)  
print('\n排序后:')    
for i in arr:  
    print(i, end=' ')

(4)常用的Python库和框架

【1、你知道或者认识常用的Python库和框架?】

Python作为数据统计、数据科学、模型计算的通用语言,有很多框架,说出下面四五个即可,然后可以简单介绍下框架:
● NumPy:这是一个用于处理大型多维数组和矩阵的库,也是Python科学计算的基础。
● Pandas:这是一个提供高性能、易用数据结构和数据分析工具的库。
● Matplotlib:这是一个用于绘制图表和生成图形的库。
● Seaborn:这是一个基于Matplotlib的高级数据可视化库,提供了更高级的接口,用于制作统计图形。
● Scikit-learn:这是一个用于机器学习的库,提供了大量简单易用的机器学习算法。
● TensorFlow:这是一个用于深度学习的库,提供了构建和训练神经网络的工具。
● Keras:这是一个基于TensorFlow的高级神经网络库,可以方便地构建和训练神经网络模型。
● Django:这是一个高级Web框架,用于快速开发安全和可维护的网站。
● Flask:这是一个轻量级的Web框架,用于构建Web应用程序。
● SQLAlchemy:这是一个SQL工具包和对象关系映射(ORM)系统,可以方便地处理数据库操作。

易错题集合

1 字符串替换问题

先看一个例子:

string = "123"  
string = string.replace("2", "")
print(string)

替换字符串中的2后,string的值仍为123,而不是13。这是因为replace()方法不会修改原始字符串,而是返回一个新的字符串。

2 多维列表的创建

创建一个长度为100的一维列表,其中每个元素都是一个长度为10的列表。然而,当修改其中一个子列表时,其他子列表也会被改变,这是因为子列表是引用类型,而非值类型。

list = [[0] * 10] * 100
for i in list:
    print(i, ' ')

3 字符串反转问题

代码实现了字符串反转的功能,但需要注意的是,Python中字符串是不可变的,因此不能通过修改索引来改变字符串中的字符。

str = "abc"  
print(str[::-1])  # 输出:'cba'

4 元素计数问题

先看一个例子:

from collections import Counter  
l1 = [1,4,5,6,2,3,1,3,5,3]  
print(Counter(l1))  # 输出:Counter({3: 3, 1: 2, 5: 2, 2: 1, 4: 1, 6: 1})

Counter对象用于计数可哈希对象,返回一个字典,其中键是输入对象中的元素,值是元素出现的次数。注意Counter`只适用于可哈希对象,对于列表等不可哈希对象,需要使用其他方法进行计数。

总结

作为一个Python开发工程师,在准备面试时,应该复习Python的基础知识,熟悉常见的编程技巧,并准备一些实际应用的例子。此外,还应该了解Python的最新发展趋势和技术,例如异步编程,类型提示,以及数据科学和机器学习的新库和工具。


欢迎关注博主 「六月暴雪飞梨花」 或加入【六月暴雪飞梨花社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359025.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

问卷发放实战指南:提高问卷回收率与数据质量的技巧

进行问卷调查分为四步&#xff1a;制作问卷、发放问卷、收集问卷、分析问卷。其中&#xff0c;发放问卷起到了关键性的作用。他关乎到我们后续收集问卷是否顺利&#xff0c;收集到的问卷数据是否具备真实性和有效性。那么&#xff0c;怎么有效地进行问卷发放呢&#xff1f; ​…

STM32通用定时器、计数器

时间记录&#xff1a;2024/1/30 一、时钟介绍&#xff08;TIM2-TIM5&#xff09; &#xff08;1&#xff09;通用定时器时钟频率介绍 内部时钟AHB为72MHz&#xff0c;经过APB1预分频器2分频变为36MHz&#xff0c;TIMxClk定时器时钟由时钟树可以看出&#xff0c;如果APB1预分…

实现SERVLET生命周期事件

实现SERVLET生命周期事件 问题陈述 David Wong是Smart Software Developers的管理员,他希望创建一个应用程序在日志中记录请求和上下文对象初始化及向上下文对象添加属性的时间。同时,该应用程序应该还能在日志中记录删除上下文对象的属性及销毁请求和上下文时的时间。 解决方…

Python 因果推断(上)

引言 原文&#xff1a;causal-methods.github.io/Book/Introduction.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Vitor Kamada 电子邮件&#xff1a;econometrics.methodsgmail.com 最后更新日期&#xff1a;2020 年 8 月 15 日 这本书是使…

live2D学习:做好让图片动起来的准备

做好让图片动起来的准备https://www.bilibili.com/video/BV1JE411Y7Te?p2&vd_source124076d7d88eee393a1d8bf6fc787efa 把psd文件通过菜单栏的“打开文件”进行导入或直接把psd文件拖到Live2D Cubism Editor 4.0的面板中 网格 我们在点击图像的一部分时&#xff0c;会出现…

vmware安装ubuntu server22.04

下载ubuntu https://cn.ubuntu.com/download 安装vmware 安装 选择自定义硬件&#xff0c;删除打印机和声卡 选择ubuntu镜像 关闭&#xff0c;完成 开启虚拟机 空格选择minimized 重启输入账号密码登录 查看Ip地址使用xshell链接 我看时区不对想修改…

MKRZero通过I2S读取SPH0645音频数据

文章目录 简介实验准备接线定义示例程序实验现象总结 简介 SPH0645LM4H-B 是一款微型、低功耗、并且具有 I2S 数字输出的底部端口麦克风。I2S 接口简化了系统集成&#xff0c;并允许与数字处理器、应用处理器和微控制器直接互连。 SPH0645LM4H-B 无需外部音频编解码器&#xf…

测试开发之路--Flask 之旅 (三):数据库

背景 通过前两次的努力&#xff0c;我们对环境有了增删查改以及部署和查看日志的能力。 现在已经处于将就可用的状态。但其实还差了很重要的东西&#xff0c;就是权限的管理。 因为不能说每个用户上来都能随便的重启和删除环境吧&#xff0c;太容易出事故了。所以我们想起码有…

我在代码随想录|写代码Day20之二叉树-700. 二叉搜索树中的搜索,98. 验证二叉搜索树,530.二叉搜索树的最小绝对差

学习目标&#xff1a; 博主介绍: 27dCnc 专题 : 数据结构帮助小白快速入门 &#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d;&#x1f44d; ☆*: .&#xff61;. o(≧▽≦)…

研发人员如何做好日常工作的稳定性保障

一、前言 二、稳定性介绍 三、实际操作流程 1、需求分析阶段 2、设计阶段 2、1备选架构 2、2方案设计 2、3 架构设计 2、4设计的checklist 2、5的checklist 3、开发联调 4、自测环节 5、上线前环节 6、上线后的验收和复盘 四、稳定性、效率、成本之间的考量 五、…

教你一招轻松把模糊的照片变高清

亲爱的朋友们&#xff0c;你们是否也曾经遇到过这样的问题——精心拍摄的照片或珍藏已久的图片突然变得模糊不清&#xff0c;让人心情郁闷&#xff1f;别担心&#xff0c;我发现了解决这个问题的秘诀&#xff01;借助一些专业的图片修复工具&#xff0c;那些模糊的瞬间可以重新…

第 8 章:Linux中使用时钟、计时器和信号

在本章中&#xff0c;我们将开始探索Linux环境中可用的各种计时器。随后&#xff0c;我们将深入了解时钟的重要性&#xff0c;并探讨UNIX时间的概念。接下来&#xff0c;我们将揭示在Linux中使用POSIX准确测量时间间隔的方法。之后&#xff0c;我们将进入std::chrono的领域&…

05 SB3之Spring Initializr+运行方式+自动配置原理(TBD)

1. 使用IDEA内置Spring Initializr 生成SB项目 最上方Server URL可以选择借助哪个平台生成, 可选阿里云 作为对比 , 官方可选版本最旧为3.1.18 ; 阿里云可选最新版本为3.0.2 本次选择3.1.8版本, 并且添加Spring Web依赖(包括RESTful / Spring MVC/)和Lombok依赖 生成后端项目…

1 月 29日算法练习-二分法

二分法是一种高效的查找方法&#xff0c;它通过将问题的搜索范围一分为二&#xff08;两边具有明显的区别&#xff09;&#xff0c;迭代地缩小搜索范围&#xff0c;直到找到目标或确定目标不存在。 二分法适用于有序数据集合&#xff0c;并且每次迭代可以将搜索范围缩小一半。 …

【GAMES101】Lecture 12 阴影 Shadow Mapping

这里是光栅化的最后一部分&#xff0c;讲这个光栅化里面怎么实现这个阴影 实际上阴影就是光源看不到的地方但是是我们能看到的地方&#xff0c;那这个地方就应该有阴影&#xff0c;那具体怎么做呢&#xff0c;这个就叫做Shadow Mapping&#xff0c;分两步做 我们之前说过这个解…

初识attention

近年来&#xff0c;attention机制在机器视觉和机器翻译领域受到了广泛的关注&#xff0c;有很多文章都是融合attention来提高性能。attention受启发于人类的视觉系统&#xff0c;最先应用于序列化的机器翻译(NLP)后又推广到计算机视觉中&#xff0c;本篇文章就来简单学习一下at…

[GN] 设计模式——面向对象设计原则概述

文章目录 面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 面向对象设计原则概述 单一职责原则 一个类只负责一个功能领域中的相应职责 类…

JavaScript DOM属性和方法之attribute属性对象

在HTML的DOM中&#xff0c;attribute对象表示HTML属性。HTML属性始终属于HTML元素&#xff0c;它在DOM节点中被称为属性节点。在DOM中&#xff0c;NamedNodeMap对象表示元素属性节点的无序集合&#xff0c;我们可以通过指定的索引访问指定的属性。通过element对象的attribute属…

【Leetcode】两数之和

目录 题目&#xff1a; 解法1&#xff1a;暴力双for 1.想到的第一种方法两for循环解 复杂度分析 解法2&#xff1a;hash表 总结&#xff1a; 笔记&#xff1a; 题目&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

实现扫码登录

扫码登录是如何实现的&#xff1f; 二维码信息里主要包括唯一的二维码ID,过期的时间&#xff0c;还有扫描状态&#xff1a;未扫描、已扫描、已失效。 扫码登录流程 用户打开网站登录页面的时候&#xff0c;浏览器会向二维码服务器发送一个获取登录二维码的请求。二维码服务器收…