【面试题】Python软件工程师能力评估试题(一)
文章目录
- 前言
- 应试者需知
- (一)Python 语言基础能力评估
- 1、理解问题并完成代码:
- 2、阅读理解代码,并在空白处补充完整代码:
- 3、编写一个装饰器:exposer
- 4、阅读代码并在空白处补充完整代码:
- 5、自行用Python代码实现一个简单的.ini配置文件解析类:
- 结语
前言
🌰 大家好,我是writer桑。这是自己整理的 Python 真实的面试题,分享出来一起学习。本章内容展示的是试题的第一部分: Python 语言基础能力评估。未经作者允许禁止转载。附上笔者的代码,并非标准答案,仅供参考,如有不同的见解欢迎私信评论区讨论。
应试者需知
1、本能力评估试题旨在全面评估Python软件工程师的知识结构和技能水平,试题会涵盖Python语言的基础知识、Linux操作系统常识、Linux Shell命令、计算机网络知识、Web前/后端开发相关的知识等多个维度。
一些试题因应试者的知识/经验没有涵盖到而无法作答属于正常现象,作答时请不要困扰于自己能力范围之外的问题而影响其它试题作答、进而影响能力评估结果和影响自己的信心。无法作答的问题应直接跳过(不要勉强)【能答对30% - 50%的试题属于正常水平】
2、认真阅读试题所提出的问题、仔细分析试题所描述的上下文内容(包括代码上下文、代码内的注释提示),尽自己的能力去理解和分析,不会有考官对问题进行另行解释。
3、作答时间60分钟,请恪守诚信、不要舞弊;本考试仅作为一种能力评估手段,每个试题/填空没有定量评分,请不要主观猜测试题的分值比重及其对考核成绩的占比。
(一)Python 语言基础能力评估
1、理解问题并完成代码:
代码示例:
def roution(arg1, *args, **kwargs):print(arg1)print(args)print(kwargs)# 以主进程的方式运行
if __name__ == "__main__":roution("value1", "value2",3,extra_args = "hello,world")
运行结果:

补充说明: 直接使用 print 输出函数进行输出即可。
2、阅读理解代码,并在空白处补充完整代码:
代码示例:
import inspect
import typing
from typing import Callable, List def parse_func_args(func: Callable): # 判断参数func是否为可调用对象 result = {} # 判断函数是否为异步调用if inspect.isasyncgenfunction(func):result["async_call"] = True else: result["async_call"] = False result["func"] = func result["doc"] = inspect.getdoc(func) # 获取可调用对象的文档字符串 sign = inspect.signature(func) # signature 函数获取函数的签名对象,包括参数信息。pos_args = [] kw_args = [] result["pos_args"] = pos_argsresult["kw_args"] = kw_args for param in sign.parameters.values():if param.name == "check_list" or param.name == "result_list": continue # 开始判断每个param参数的属性item = {"name": param.name} if param.default is not inspect._empty:item["optional"] = True else: item["optional"] = Falseif param.annotation is inspect._empty:item["type"] = str # 补充代码检查参数是否为str, int, float, bool 类型: elif param.annotation is str:item["type"] = strelif param.annotation is int:item["type"] = intelif param.annotation is float:item["type"] = floatelif param.annotation is bool:item["type"] = boolelif param.annotation is list or param.annotation is typing.List[str]:item["type"] = listelse:item["type"] = str # defaultif param.kind == inspect.Parameter.POSITIONAL_ONLY or \param.kind == inspect.Parameter.POSITIONAL_OR_KEYWORD:result["pos_args"].append(item)else:result["kw_args"].append(item)return result def func(num1: str, num2: int):return num1 * num2 # 以主进程的方式运行
if __name__ == "__main__":func("123",11)result = parse_func_args(func)print(result)
运行结果:

补充说明: 原题中关于位置参数、关键字参数的描述不是很合理,麻烦大家自行甄别。上例中笔者写的代码也不是很好,仅作参考。
3、编写一个装饰器:exposer
代码示例:
def exposer(a_func):def write_key(self, key):global_table[key] = selfreturn a_func(self)return write_key# 假设有一个全局的Dict对象 “global_table”
global_table = {} #编写的装饰器可用于任何自定义类的__init__方法装饰,如下:
class AnyType: @exposerdef __init__(self):pass#被装饰过的类在构造时,用户可指定一个名为 “key” 的参数;
#此时,新建的对象将以该key为索引,记录在全局Dict对象“global_table”中。
object1 = AnyType(key = "id001")
object2 = AnyType(key = "id002")print(global_table)
# 此时,global_table的内容将记录为:
# { “id001”: object1, “id002”: object2 }
运行结果:

补充说明: 装饰器的写法有很多,不止上例的一种。若有更好的写法,欢迎评论区或者私信讨论。
4、阅读代码并在空白处补充完整代码:
代码示例:
import asyncio
msg_queue = []msg_lock = asyncio.Lock() # 定义消息队列的锁
signal_event = asyncio.Event() # 定义信号事件async def backend_task():try:for counter in range(0,1000):async with msg_lock: # 在访问msg_queue之前先获得锁msg_queue.append(f"msg{counter}")signal_event.set() # 设置信号事件,通知main函数可以取出消息了await asyncio.sleep(0.5)except asyncio.CancelledError: # 处理任务被取消的异常print("后台任务被取消!")returnexcept Exception as e: # 处理其他未知异常print("未知异常!")returnasync def main():task = asyncio.create_task(backend_task())try:await signal_event.wait() # 等待信号事件async with msg_lock: # 在访问msg_queue之前先获得锁msg = msg_queue.pop()print(f"获取到后台任务的通知消息 {msg}")except Exception: # 处理异常print("异常!正在停止后台任务…")task.cancel() # 取消后台任务await task # 等待后台任务结束loop = asyncio.get_event_loop()try:loop.run_until_complete(main())
finally:loop.close() # 关闭事件循环
运行结果:

补充说明: 此题考查的是 python 中的 asyncio 模块,需要对 asyncio 模块中的锁和事件的应用有一定的掌握程度。
5、自行用Python代码实现一个简单的.ini配置文件解析类:
代码示例:
import configparser# 一个简单的.ini配置文件解析类
class IniClass:def analysis_method():# 实例化一个 ConfigParser 实例 config = configparser.ConfigParser() # 打开 ini 文件 config.read("./cfg.ini", encoding = "utf-8")# 获取所有的 section print(config.sections())# ['SectionName', 'Section2']# 指定section的所有parameter print(config["Section2"])# 指定section输出value值print(config["Section2"].values())# 指定section以item的形式输出print(config["Section2"].items())# 以主进程的方式运行
if __name__ == "__main__": IniClass.analysis_method()
ini 文件的内容:(文件名为 cfg)

运行结果:

补充说明: 解析 .ini 文件可以使用 python 中的 configparser 库,这个库用法很多,并不局限于上例。
结语
🌱 以上就是 Python 语言基础能力评估的展示啦,希望能够帮到大家,感谢大家的支持。再次声明,笔者的代码仅作参考。
相关文章:
【面试题】Python软件工程师能力评估试题(一)
文章目录前言应试者需知(一)Python 语言基础能力评估1、理解问题并完成代码:2、阅读理解代码,并在空白处补充完整代码:3、编写一个装饰器:exposer4、阅读代码并在空白处补充完整代码:5、自行用P…...
Java八股文(Java多线程面试题)
并行和并发的区别?(1)并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生;(2)并行是在不同实体上的多个事件,并发是在同一实体上的多个事件&#…...
小程序当前页面如何分享别的页面内容呢?
需求分析 因为功能的需要分为两点 他需要调转转发,并且有首页转发点击button按钮进行转发邀请好友帮忙助力,如何做到一个页面多种转发 如何区分,是button转发还剩右上角三个点转发呢? 通过onShareAppMessage()这个函数的事件…...
编写Java哪个编译器好
现在能够编写Java代码的工具简直不要太多,各种各样五花八门,但目前效率最高的还是Intellij Idea。但这个工具对于完全零基础的小白来说,第一次用起来是比较复杂的,因为它的功能太多了。这就好比你要学开车,如果上来就给…...
第十六章 Java为什么使用序列化
为何要指定serialVersionUID的值如果不指定显示serialVersionUID的值,jvm在序列化时会自动生成一个serialVersionUID,跟属性一起序列化,再进行持久化或者网络传输,在反序列化时,jvm会根据属性自动生成一个新版的serial…...
28岁小公司程序员,无车无房不敢结婚,要不要转行?
大家好,这里是程序员晚枫,又来分享程序员的职场故事了~ 今天分享的这位朋友叫小青,我认识他2年多了。以前从事的是土木行业,2年前找我咨询转行程序员的学习路线和职业规划后,通过自学加入了一家创业公司,成…...
出道即封神的ChatGPT,现在怎么样了?
从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在怎…...
【计算机视觉】CNN 可视化算法
文章目录一、CAM算法1.1 概述1.2 CAM算法介绍二、Grad-CAM算法2.1 概述2.2 Guided Backpropagation2.3 Occlusion Sensitivity2.4 Grad-CAM 整体结构和效果2.5 Grad-CAM 实现细节一、CAM算法 1.1 概述 本文介绍 2016 年提出的 CAM (Class Activation Mapping) 算法࿰…...
自动抓取服务器巡检、登录、执行命令记录+备份脚本
文章目录 引抓取【巡检日志】语言&时区设置语言设置时区巡检脚本执行效果抓取【登录信息】登录脚本登录脚本低版本的last命令执行效果抓取【history记录】说明配置history授权日志文件显示时间戳持久化到日志未配置history的配置过history的执行脚本执行脚本...
如何用Python求解微分方程组
文章目录odeint简介示例odeint简介 scipy文档中将odeint函数和ode, comples_ode这两个类称为旧API,是scipy早期使用的微分方程求解器,但由于是Fortran实现的,尽管使用起来并不方便,但速度没得说,所以有的时候还挺推荐…...
【微信小程序】-- 自定义组件 - behaviors(三十九)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
【微信小程序】-- 自定义组件 - 父子组件之间的通信(三十八)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
Java Web 实战 11 - 多线程进阶之常见的锁策略
常见的锁策略常见的锁策略1. 乐观锁 VS 悲观锁2. 普通的互斥锁 VS 读写锁3. 重量级锁 VS 轻量级锁4. 自旋锁 VS 挂起等待锁5. 公平锁 VS 非公平锁6. 可重入锁 vs 不可重入锁7. 常见面试题大家好 , 这篇文章给大家带来的是多线程中常见的锁策略 , 我们会给大家讲解 6 种类别的锁…...
(20)目标检测算法之YOLOv5计算预选框、详解anchor计算
目标检测算法之YOLOv5计算预选框、详解anchor计算 单节段目标检测算法中:预选框的设定直接影响最终的检测精度众所周知,yolov5中采用自适应调整预选框anchor的大小,但万事开头难,配置文件config中的预设还是很重要yolo算法作为on…...
3-1 SpringCloud快速开发入门: Ribbon 是什么
接上一章节Eureka 服务注册中心自我保护机制,这里讲讲Ribbon 是什么 Ribbon 是什么 通常说的负载均衡是指将一个请求均匀地分摊到不同的节点单元上执行,负载均和分为硬件负载均衡和软件负载均衡: **硬件负载均衡:**比如 F5、深信…...
Java【lambda表达式】语法及使用方式介绍
相关文章目录 第一篇: Java【EE初阶】进程相关知识 进程管理 内存管理 文章目录相关文章目录前言一、lambda表达式 是什么?1, lambda表达式 的背景2, 什么是 函数式接口3, lambda表达式 的语法二、lambda表达式 的使用方式1, 无参无返回值2, 有一个参…...
【AcWing】蓝桥杯备赛-深度优先搜索-dfs(2)
目录 写在前面: 题目:94. 递归实现排列型枚举 - AcWing题库 读题: 输入格式: 输出格式: 数据范围: 输入样例: 输出样例: 解题思路: 代码: AC &…...
‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
Anaconda环境搭建常见问题 conda不是内部或外部命令,也不是可运行的程序或批处理文件。 解决方案:配置环境变量 1.找到Anaconda Nvaigator单机右键 2.更多 3.打开文件所在位置 4.继续Anaconda Nvaigator单机右键,更多,选择文件…...
HTTP 3.0来了,UDP取代TCP成为基础协议,TCP究竟输在哪里?
TCP 是 Internet 上使用和部署最广泛的协议之一,多年来一直被视为网络基石,随着HTTP/3正式被标准化,QUIC协议成功“上位”,UDP“取代”TCP成为基础协议,TCP究竟“输”在哪里? HTTP/3 采用了谷歌多年探索的基…...
《JavaCV从入门到实战教程合集》介绍和目录
前言 《JavaCV从入门到实战教程合集》是2016年《JavaCV开发实战教程》和2018年《JavaCV入门教程》2022年《JavaCV音视频实战宝典》三合一汇总合集,完整包含JavaCV入门教程》、《JavaCV开发实战教程》系列和《JavaCV音视频实战宝典》系列所有付费内容。 《JavaCV入…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...
如何做好一份技术文档?从规划到实践的完整指南
如何做好一份技术文档?从规划到实践的完整指南 🌟 嗨,我是IRpickstars! 🌌 总有一行代码,能点亮万千星辰。 🔍 在技术的宇宙中,我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…...









