【面试题】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_args
    result["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"] = False

        if param.annotation is inspect._empty:
            item["type"] = str 

        # 补充代码检查参数是否为str, int, float, bool 类型: 
        elif param.annotation is str:
            item["type"] = str
        elif param.annotation is int:
            item["type"] = int
        elif param.annotation is float:
            item["type"] = float
        elif param.annotation is bool:
            item["type"] = bool
        elif param.annotation is list or param.annotation is typing.List[str]:
            item["type"] = list
        else:
            item["type"] = str              # default

        if 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] = self
        return a_func(self)
    return write_key

# 假设有一个全局的Dict对象 “global_table”
global_table = {} 

#编写的装饰器可用于任何自定义类的__init__方法装饰,如下: 
class AnyType: 
    @exposer
    def __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("后台任务被取消!")
        return
    except Exception as e: # 处理其他未知异常
        print("未知异常!")
        return
    
async 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 语言基础能力评估的展示啦,希望能够帮到大家,感谢大家的支持。再次声明,笔者的代码仅作参考。

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

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

相关文章

嵌入式 串口通信

目录 1、通信的基本概念 1.1 串行通信 1.2 并行通信 2、串行通信的特点 2.1 单工 2.2 半双工 2.3 全双工 3、串口在STM32的引脚 4、STM32的串口的接线 4.1 STM32的串口1和电脑通信的接线方式 4.2 单片机和具备串口的设备连接图 5、串口通信协议 6、串口通信…

linux进程管理

进程管理 进程是启动的可执行程序的一个指令 1、进程简介 (1)进程的组成部分 已分配内存的地址空间安全属性,包括所有权凭据和特权程序代码的一个或多个执行线程进程状态 (2)程序和进程的区别 程序是一个静态的二进制…

第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

文章目录 一、填空题 1、1 找最小全字母十六进制数 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 给列命名 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 日期相等 1、3、1 题目描述 1、3、2 题解关键思路与解答 1、4 乘积方案数 1、4、1 题目描述 1、4、2 题解关…

28岁小公司程序员,无车无房不敢结婚,要不要转行?

大家好,这里是程序员晚枫,又来分享程序员的职场故事了~ 今天分享的这位朋友叫小青,我认识他2年多了。以前从事的是土木行业,2年前找我咨询转行程序员的学习路线和职业规划后,通过自学加入了一家创业公司,成…

分享几个常用的运维 shell 脚本

今天咸鱼给大家分享几个不错的 Linux 运维脚本,这些脚本中大量使用了 Linux 的文本三剑客: awkgrepsed 建议大家这三个工具都要了解并最好能够较为熟练的使用 根据 PID 显示进程所有信息 根据用户输入的PID,过滤出该PID所有的信息 #! /b…

第十四届蓝桥杯三月真题刷题训练——第 11 天

目录 第 1 题:卡片 题目描述 运行限制 第 2 题:路径_dpgcd 运行限制 第 3 题:字符统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 第 4 题:费用报销 第 1 题:卡片 题…

我今天要彻底搞懂线程状态的变化

💗推荐阅读文章💗 🌸JavaSE系列🌸👉1️⃣《JavaSE系列教程》🌺MySQL系列🌺👉2️⃣《MySQL系列教程》🍀JavaWeb系列🍀👉3️⃣《JavaWeb系列教程》…

MATLAB | 这些花里胡哨的热图怎么画

好早之前写过一个绘制相关系数矩阵的代码,但是会自动求相关系数,而且画出来的热图只能是方形,这里写一款允许nan值出现,任意形状的热图绘制代码,绘制效果如下: 如遇到bug请后台提出,并去gitee下…

出道即封神的ChatGPT,现在怎么样了?

从互联网的普及到智能手机,都让广袤的世界触手而及,如今身在浪潮中的我们,已深知其力。前阵子爆火的ChatGPT,不少人保持观望态度。现如今,国内关于ChatGPT的各大社群讨论,似乎沉寂了不少,现在怎…

Linux IPC:匿名管道 与 命名管道

目录一、管道的理解二、匿名管道三、命名管道四、管道的通信流程五、管道的特性进程间通信方式有多种,本文介绍的是管道,管道分为匿名管道和命名管道。 一、管道的理解 生活中的管道用来传输资源,例如水、石油之类的资源。而进程间通信的管道…

学习C++这几个网站足矣

文章目录cppreferencecplusplus[C 之父的网站](https://www.stroustrup.com/bs_faq.html)C提案[Cpp Core Guidelines](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines)[C Super-FAQ](https://isocpp.org/faq)[learn c](https://www.learncpp.com/)[Awesome C](h…

【YOLOv8/YOLOv7/YOLOv5/YOLOv4/Faster-rcnn系列算法改进NO.59】引入ASPP模块

前言作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv8的如何改进进行详细的介绍&…

1.10-1.12 Makefile

1. Makefile简介 举个栗子,如下为redis-5.0.10的项目目录,有很多的文件 有了Makefile文件,可以简单的make一下就可以对项目文件进行编译,最终生成可执行程序。 2. Makefile栗子1 首先,创建vim Makefile按照PPT里的格…

C++STL set/multiset容器 构造和赋值 大小和交换 插入和删除 查找和统计

文章目录set/multiset容器1 set容器 基本概念2 set容器 构造和赋值3 set容器 大小和交换4 set容器 插入和删除5 set容器 查找和统计set/multiset容器 1 set容器 基本概念 简介: 所有元素都会在插入时会被自动排序,例如,在set容器放入元素1、…

成本降低90%,OpenAI正式开放ChαtGΡΤ

今天凌晨,OpenAI官方发布ChαtGΡΤ和Whisper的接囗,开发人员现在可以通过API使用最新的文本生成和语音转文本功能。OpenAI称:通过一系列系统级优化,自去年12月以来,ChαtGΡΤ的成本降低了90%;现在OpenAI用…

公网远程连接Oracle数据库【内网穿透】

文章目录1. 数据库搭建2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射3. 公网远程访问4. 配置固定TCP端口地址4.1 保留一个固定的公网TCP端口地址4.2 配置固定公网TCP端口地址4.3 测试使用固定TCP端口地址远程OracleOracle,是甲骨文公司的一款关系数据库管理系…

【前端vue2面试题】2023前端最新版vue2模块,高频24问

​ 🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的关于vue2面试题 目录 vue2面试题 1、$route 和 $router的区别 2、一个.v…

2月更新 | Visual Studio Code Python

我们很高兴地宣布,2023年2月版 Visual Studio Code Python 和 Jupyter 扩展现已推出!此版本包括以下改进:从激活的终端启动 VS Code 时的自动选择环境 使用命令 Python: Create Environmen 时可选择需求文件或可选依赖项 预发布:改…

java八股文--java基础

java基础1.什么是面向对象,谈谈对面向对象的理解2.JDK JRE JVM的区别与联系3.和equals4.hashCode与equals5.String StringBuffer StringBuilder的区别6.重载和重写的区别7.接口和抽象类8.List和Set的区别9.ArrayList和LinkedList10.HashMap和HashTable的区别&#x…

2023.03.12学习总结

项目部分写了内外菜单栏的伸缩,更新了导航栏,新增配置,scss变量 提交记录 学习了scss的使用和配置 ,设置了scss全局变量,组件样式 给element-plus配置了主题颜色,配置到了全局 http://t.csdn.cn/FhZYa …
最新文章