整理收集python面试常见题目

news2024/11/18 19:38:16

1.多进程和多线程

1.python多进程和多线程看这一篇就够了_T型人小付的博客-CSDN博客

2.多进程和多线程的实现:一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎

3.多线程的补充:一文看懂Python多进程与多线程编程(工作学习面试必读) - 知乎

进程和线程

进程是资源分配的最小单元。运行程序最少会需要一个进程,并且单核cpu一次最多运行一个进程。进程一般使用pid来进行唯一标识

线程是系统调度的最小单元。进程里面可以有多个线程,单核cpu一次最多运行一个线程,一个进程的线程可以分布在多个Cpu中,所以只有多核才能实现多个线程同时运行。

在大多数编程语言中因为切换消耗的资源更少,多线程比多进程效率更高

python中的GIL全局解释器锁

一个历史遗留问题,python中的每个进程都会有一个GIL,这个锁是为了保证线程之间的数据安全一致,GIL的存在会导致一个进程每次只能执行一个线程。

在使用IO密集型的操作时多线程有效,因为IO交互的时间较长,所以使用多线程更为轻量。

在使用CPU密集型的操作时多进程有效,多进程可以在多个CPU中运行,要尽可能的多利用CPU资源。

需要注意的是,即使有GIL锁的存在,依旧需要添加互斥锁。因为python的操作不只是一个原子操作,完成一个操作需要分成好几步,每一步都有可能被停下来去执行另一个操作,这个就会导致之前没做完的步骤被覆盖了。多线程间通讯也可以用queue,因为queue是对线程安全的,不需要额外加锁了。

2.python的内存管理

面试必备:Python内存管理机制 - 掘金

内存管理的核心

创建 - 内存池

销毁 - 垃圾回收(引用计数, 标记清除, 分代回收)

内存池

每次申请内存会导致存在非常多的内存碎片,使用内存池可以一次性申请一串连续的地址空间,减少内存碎片的产生。

level 3:用于存放python内置的类型

level 2:用于存放内存小于256kb的申请

level 1:用于存放内存大于256kb的申请,内部是使用C的malloc等方法

垃圾回收

主要使用引用计数:指被其他对象引用的次数,当计数为0时进行销毁。

  • 引用计数增加的情况:
  1. 一个对象被分配给一个新的名字(例如:a=[1,2])
  2. 将其放入一个容器中(如列表、元组或字典)(例如:c.append(a))
  • 引用计数减少的情况:
  1. 使用del语句对对象别名显式的销毁(例如:del b)
  2. 对象所在的容器被销毁或从容器中删除对象(例如:del c )
  3. 引用超出作用域或被重新赋值(例如:a=[3,4])

辅助使用分代回收:分为年轻代,中年代,老年代。我们认为存留越久的数据被使用的概率就越大,所以更应该保留。当某一代的内存创建和销毁到达了一定比例时就会触发当前代和更年轻代的GC

辅助使用标记清理:主要使用在list,dict等容易造成循环引用的位置,用于针对引用计数无法解决的循环引用的问题。遍历对象,如果当前对象是可到的我们进行标记,不可达对象则清除。同时如果有循环引用,会把循环引用的对象引用-1。

在python中,维护了一个refchain的双向循环环状链表,这个链表中存储程序创建的所有对象,每种类型的对象中都有一个0b_refcnt引用计数器的值,默认为1,当引用计数器变为0时会进行垃圾回收(对象销毁,refchain中移除)但是,在python 中,对于那些可以有多个元素组成的对象可能会存在循环引用的问题,为了解决这个问题,python又引入了标记清除和分代回收,在其内部维护了四个链表

refchain

0代 700个对象触发

1代 0代十次执行一次1代

2代 1代十次执行一次2代

3.封装继承多态

封装

封装是为了增加代码的复用性,减少对外展示的内容。

继承

继承是为了增加代码的复用性,让子类可以使用或者重写父类的方法。单/多继承:子类有一个/多个父类。继承链,当继承了多个父类的时候,根据继承的顺序来让子类明确使用什么父类的方法。

多态

多态是为了增加代码的复用性,不同的对象的同一个方法有不同的实现逻辑

鸭子类型

如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, it must be a duck)。鸭子类型是编程语言中动态类型语言中的一种设计风格,一个对象的特征不是由父类决定,而是通过对象的方法决定的。所以只要对象有这个方法,就算当前方法父类不是当前这个类型,我们也可以使用。

4.*args和**kwargs含义

*args表示可变长非关键字参数

**kwargs表示可变长关键字参数

5.python关键字

6.其他推荐面试题

1.2022非常全面的Python常见基础面试题及答案 - 知乎

2.Python-Interview-Bible/Python面试宝典-基础篇-2020.md at master · jackfrued/Python-Interview-Bible · GitHub

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试面试技巧 这么准备,拿下心仪offer不是问题

拥有一个心仪的offer,是每个软件测试工程师们都梦寐以求的事情,那如何才能通过最后的面试一关,拿到offer呢? 俗话说,知己知彼百战不殆,作为测试员,在面试前对面试官可能提出的问题进行总结和准…

UDS - 14.2.1 RoutineControl (31) service

来自:ISO 14229-1-2020.pdf 目录 14.2.1 服务描述 14.2.1.1 概述 14.2.1.2 通过引用routineIdentifier来启动一个例程 14.2.1.3 通过引用routineIdentifier来停止一个例程 14.2.1.4 通过引用routineIdentifier来请求例程结果 14.2.2请求消息 14.2.2.1请求消…

【从零开始学习深度学习】31. 卷积神经网络之残差网络(ResNet)介绍及其Pytorch实现

和之前介绍的批量归一化层作用类似,残差网络(ResNet)提出的主要目的也是为了优化深度神经网络中数值稳定性问题。 1. 残差块介绍 假设输入为x\boldsymbol{x}x,希望学出的理想映射为f(x)f(\boldsymbol{x})f(x)。下图左右为普通网…

【GO】 K8s 管理系统项目[API部分--Namespace]

K8s 管理系统项目[API部分–Namespace] 1. 接口实现 service/dataselector.go type namespaceCell corev1.Namespacefunc(n namespaceCell) GetCreation() time.Time {return n.CreationTimestamp.Time }func(n namespaceCell) GetName() string {return n.Name }2. Namespa…

景联文科技:赋能智能安防,详谈其中运用到的数据标注类型

“数据显示,2013-2020年我国智能安防行业市场规模由101亿元增长至511亿元。随着智能安防在多个领域的深化应用,预计2023年我国智能安防行业市场规模将超1000亿元。 智能安防领域中,数据标注主要应用于计算机视觉与语音识别两个主要领域,具体…

人口数据可视化,深圳是人口密度最高的城市,东莞上海位居二三名

进入2022年以来,人口问题频频引起热议,人口老龄化、生育意愿再创新低、男女比例失衡等等问题频出。具体的人口问题如何,跟随可视化互动平台的数据可视化大屏一起来了解吧! 我国各省人口数量从地图分布图看,广东省、山…

安装Pytorch

太难了 之前在学校就没安装好 各种报错 终于安装好了 浅浅记录一下 撒花撒花 菜鸡经验: 1.本地python 与 Anaconda 是两个独立的东西 2.可直接在Anaconda中创建不同新的虚拟环境以适配不同的需求 3.cuda 的版本与 NVIDIA版本需要一致,与Python环境也需要…

Echarts图表相关知识

一个基于 JavaScript 的开源可视化图表库。目前我们的前端框架中已经集成了Echarts库v5.3.2),使用的时候不需要再次安装,直接使用即可,具体安装方法不再赘述。 有些时候官网的例子不满足我们的需求,这个时候就要求我们…

cq:fast lookup argument

1. 引言 Ariel Gabizon等人2022年论文《cq: Cached quotients for fast lookups》。 lookup argument的核心思想为: 对于特定的quotient多项式,经某种预处理之后,将更易于计算其commitments。 当前的lookup argument系列方案主要有&#…

实拍视频、图片素材库,高质量、免费下载。

这几个网站的实拍素材,质量高,还可以免费下载。 1、菜鸟图库 https://www.sucai999.com/?vNTYwNDUx 菜鸟图库有超多设计类素材,像平面、UI、电商、办公类等等在这个网站都能找到,网站还有很多实拍视频素材,质量很高&a…

k8s集群部署01

k8s集群部署01Kubernetes简介Kubernetes部署节点部署关于yum缓存提示满了,Rhel7换源解决报错解决过程配置文件内容—要自己看链接是否过期集群初始化Kubernetes-kubectl命令出现错误【The connection to the server localhost:8080 was refused - did you specify t…

git chrry pickup

git chrry pickup目录概述需求:设计思路实现思路分析1.java2.转移分支3.git merge4.cherry pick.切换到 master 分支Cherry pick 操作参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,…

基于MVC的在线影票售卖系统/基于ASP.NET的电影院售票系统

摘 要 随着电影院规模的不断扩大,人流数量的急剧增加,有关电影院的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有在线影票售卖系统来提高电影院工作的效率。通过这样的系统,我们可以做到信息的规范管理和快速查询&…

副业项目分享,旧衣回收项目怎么做

大家好,我是蝶衣王的小编,今天分享一个简单的项目 我们每个家庭都有多余的旧衣服。许多人会直接把它们扔进垃圾桶。然而,这里隐藏着巨大的商机。说到这里,每个人都应该想到:旧衣服的回收。 事实上,目前国…

《位图布隆过滤器》

【一】位图的概念 位图,就是用每一个比特位来存放某种状态,适用于海量数据,整数,数据无重复的场景,通常是用来判断某个数据存不存在的。例如:10个整数本应该存放四十个字节,此时用位图只需要十…

Ajax(JavaWebAjax、源生Ajax、跨域)

1.JavaWeb - Ajax 概念:AJAX(Asynchronous Java JavaScript And Xml ):异步的JavaScript和Xml AJAX作用: 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据。 使用…

2022-12-28-面试题整理

1. Spring中Bean创建完成后执行指定代码的几种实现方式 实现ApplicationListener接口 实现ApplicationListener接口并实现方法onApplicationEvent()方法,Bean在创建完成后会执行onApplicationEvent()方法 Component public class DoByApplicationListener impleme…

Java操作redis数据库之读取csv文件

csv文件 要想对某个文件进行具体操作,首先要了解这个文件的结构。csv 全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CSV 文件由任意数目的记录组成,记录间以某种换行符分隔&…

FPGA再入门——UART IP核调用

我的工作偏向硬件设计与调试,但是经过几年的发展,发觉不会调程序发展真的很受限制。最近越来越被这种限制折磨的很难受,所以开始学习调调程序。其实,本科与研究生阶段都有过做写代码的经历,算是入过门。但是&#xff0…

[3]ESP32连接MQTT服务端

MQTT库&#xff1a;PubSubClient 连接MQTT服务端 #include <Arduino.h> #include <WiFi.h> #include <PubSubClient.h>const char *ssid "613专属"; const char *password "613613613"; const char *mqttServer "test.ranye-…