当前位置: 首页 > news >正文

【面试题】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) 算法&#xff0…...

自动抓取服务器巡检、登录、执行命令记录+备份脚本

文章目录 引抓取【巡检日志】语言&时区设置语言设置时区巡检脚本执行效果抓取【登录信息】登录脚本登录脚本低版本的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入…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...

LLMs 系列实操科普(1)

写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...