导航:首页 > 编程语言 > python面试必问

python面试必问

发布时间:2023-01-25 00:10:43

python面试必备题目有哪些

Q:你做一个自我介绍吧?
旁白:其实遇到好几家面试官都让我做自我介绍了,该如何自我介绍阳哥估计都会背了,好玩(恶心)的是在万达信息面试,面试了3个技术官,每个人都分别让我做了自我介绍,尼玛,他们3个就不会沟通一下要问我啥吗,一个问题至于问我3遍吗~:funk:阳哥是敢怒不敢言,毕竟在人家的地盘。
PS:自我介绍的内容就不说了,每个人都是独特的,我就跟大家说一下应该如何自我介绍吧。
一个优良的自我介绍会给面试官留下深刻的印象,大部分情况下,所谓的面试好坏其实看的就是你给面试官留下的印象怎么样了,我们用俗语叫感觉。
自我介绍应该分以下几个部分,按照一定的逻辑连贯起来。如果连贯不起来,或者不够熟练一定在台下多背几遍,多讲几遍,但是面试的时候不要说的跟背过似的,高境界就是让面试官感觉你是临场发挥的,却又比背的都好。
1)个人基本信息(姓名、年龄、老家、居住地等)
2)自己来自哪里(工作地点),是干什么的(给自己一个清晰的定位,比如:我是一名Android开发工程师),担任过什么职务、做过什么样的项目
3)自己为何来贵公司面试
4)最后祝愿(希望能得到贵公司的认可等等,不用太多,一两句话就ok)
Q:介绍一下你做过的项目吧?
PS:黑马那么多项目,随便准备3个就ok了。
介绍项目大概的思路如下:
1)这个项目是干什么的(比如是一个类似网易新闻的地方新闻客户端,或者类似美团的o2o,或者类似豌豆荚的一个应用市场,或者类似淘宝的购物平台)?解释就是拿一个市场上耳熟能详的应用跟自己的应用做类比,省的面试官听的云里雾里的。
2)自己负责了哪些模块(功能)的职责(比如负责系统的架构,核心代码的编写,xx功能模块的开发等等)
3)自己在这个项目中担当的责任(比如,这个项目是自己独立开发的,这个项目是和另外一个同事一起架构一起开发的,这个项目是自己负责了几个核心模块)
4)项目中都用到了哪些技术
5)从项目中学到了哪些东西(可以从技术方向和业务两个方向入手)
旁白:面试官问的很多技术性问题跟之前问的都大同小异,因此这里只给出有特色且技术含量高的。阳哥正在写面试宝典,该宝典核心内容针对的还是技术问题,阳哥会从javase基础到javase高级,从Android基础到Android高级以及到Android项目依次展开分析,其次也会写一些常见的非技术性问题,敬请期待~
Q:①在Listview的优化中,我们为何使用ConvertView?②为何使用ViewHolder?③你认为哪个更能解决问题?④你认为view.inflate和view.findviewById哪个更耗时,为什么?⑤如果这两个AP让你重新写,你怎么写?
PS:上面的问题,阳哥认为是面试以来遇到很难的一个,也是很有技术含量的一道题。前一半问题还好回答,最后一个问题真的需要发挥想象了。
A:①使用ConvertView可以实现对view的复用,这样大大节约了每次创建对象的时间,提升了ListView的显示效率。②使用ViewHolder作为内部类,可以将view的子控件封装在ViewHolder类中,然后通过View.setTag(ViewHolder)将view和ViewHolder进行绑定,这样我们就不用每次都调用view的findViewById(id)方法来查找控件。③使用ConvertView解决了一大部分问题,使用ViewHolder实现了控件换时间的问题,因为给View对象设置一个Tag本身就是占用内存的,因此ViewHolder的使用还是需要区分不同的应用场景的, 没有绝对的好与不好。如果内存足够需要高效则ViewHolder建议使用,否则不建议使用。④当然是view.inflate耗时,这个函数完成的功能是把xml布局文件通过pullParser的形式给解析到内存中,需要io,需要递归子节点。⑤我其实还不太相信我写出来的代码比Google官方写的好,如果让我写的话我可能会这样考虑,当用户在使用view.inflate的时候将多个id作为数组添加到形参中,这样在初始化view的使用我就可以给这个view直接调用setTag方法绑定需要的子控件。不过这个原生方法其实也应该保留共不同的需求使用。
PS:技术面试时间并不长,我回答了几个之后,他们两个大眼瞪小眼,A看看B问:你还有什么问的吗?B说我没有,你还有吗?A说我也没了。那行,接下来,他们就让我等人事了。

⑵ python面试题总结1-内存管理机制

(1).引用计数
(2). 垃圾回收
(3). 内存池机制

在python中每创建一个对象,对应的会有一个引用计数,当发生赋值操作如a=b,对应的b的引用计数会自动加1,当引用的对象被清除或者函数结束时,引用计数会自动减1。

在python中使用引用计数,标记清楚,分代回收三种方式进行垃圾回收。
其中,引用计数当对象的引用计数归0时,对象会自动被清除。标记清除机制是首先遍历所有对象,如果对象可达,就说明有变量引用它,则标记其为可达的。如果不可达,则对其进行清除。分代回收是当对象创建时被标记为第0代,经过一次垃圾回收之后,余下的对象被标记为第1代,最高为第2代。其原理是,对象的生存期越长,月可能不是垃越。

ython语言虽然提供了对内存的垃圾收集机制,但实际上它将不用的内存放到内存池而不是返回给操作系统,所以就有了以下:

1 Pymalloc机制;这个主要是为了加速Python的执行效率,Python引入了一个内存池机制,用于管理,为了对小块内存的申请和释放。

2 Python中所有小于256个字节的对象都是依靠pymalloc分配器来实现的,而稍大的对象用的则是系统的malloc。

3 对于Python对象,比如整数、浮点数和List这些,都有自己独立的内存池,对象间并不共享他们的内存池。换句话说就是,假设你分配并且释放了大量的整数,那么用于缓存这些整数的内存就不能再分配给浮点数。

⑶ python面试注意什么

一、自我介绍
之前讲过很多关于如何应对面试官提出的“自我介绍”这个问题,今天,针对Python程序员这个岗位,给大家重新梳理一下答题的结构。我们在做自我介绍时,可以按照:个人基本信息+基本技术构成+项目经验(具体项目以及在项目中的负责部分)+自我评价的结构来回答。注意一定要紧紧围绕招聘岗位的需求做介绍,在此之前要做好准备工作,看看招聘方具体需要什么方向的研发工程师。目前针对Python,有自动化测试平台的设计与开发、数据的挖掘与清洗以及Python开发等具体岗位,所以面试Python方向的同学注意,可以多和运维以及自动化方面靠拢。当然,具体还是要看公司空缺岗位与你的专业是否对口。
二、不要给自己挖坑
确保你在回答面试官的过程中,回答的每个知识点都了然于胸,不然被问住,是很难堪的。如果遇到不会的问题,一定不要盲目乱答一通。比如有一次,有位同学在回答Web安全问题时,顺嘴说了SQL注入,面试官便顺水推舟,让这位同学接着讲讲SQL的原理及解决方法。然而这位同学却把XSS跨站注入攻击和SQL注入搞混了,归根结底,还是知识掌握得不够牢固。所以,在面试时,要斟酌每一句话,聪明的同学还可以引导面试官,让他问出自己想要被问的问题。当然,化被动为主动,就是面试中比较高的一种境界了。
三、有足够的自信
如果你学历不是特别高,在面试时,面试官很有可能会问你是怎样看待学历和能力的。学历和能力在当今的社会都不可或缺,学历往往是你面试的敲门砖,但敲完门用途就不大了,后面才是证明你能力的时刻。针对这个问题,我们一定要不卑不亢地说出自己看法:“我想只要完成了大学校园内的学业,就表明已经具备了一定的学习能力。如果我们努力学习代码技能,并且有能力学好,那么是学士还是博士就不是很重要。竞争这个岗位的关键是看你能在这个领域上发挥什么作用,而不单单是学了多少书本上的知识。”

⑷ 面试官常问十大经典算法排序(用Python实现)

算法是一种与语言无关的东西,更确切地说就算解决问题的思路,就是一个通用的思想的问题。代码本身不重要,算法思想才是重中之重

我们在面试的时候总会被问到一下算法,虽然算法是一些基础知识,但是难起来也会让人非常头疼。

排序算法应该算是一些简单且基础的算法,但是我们可以从简单的算法排序锻炼我们的算法思维。这里我就介绍经典十大算法用python是怎么实现的。

十大经典算法可以分为两大类:

比较排序: 通过对数组中的元素进行比较来实现排序。

非比较排序: 不通过比较来决定元素间的相对次序。


算法复杂度

冒泡排序比较简单,几乎所有语言算法都会涉及的冒泡算法。

基本原理是两两比较待排序数据的大小 ,当两个数据的次序不满足顺序条件时即进行交换,反之,则保持不变。

每次选择一个最小(大)的,直到所有元素都被输出。

将第一个元素逐个插入到前面的有序数中,直到插完所有元素为止。

从大范围到小范围进行比较-交换,是插入排序的一种,它是针对直接插入排序算法的改进。先对数据进行预处理,使其基本有序,然后再用直接插入的排序算法排序。

该算法是采用 分治法 对集合进行排序。

把长度为n的输入序列分成两个长度为n/2的子序列,对这两个子序列分别采用归并排序,最终合并成序列。

选取一个基准值,小数在左大数在在右。

利用堆这种数据结构所设计的一种排序算法。

堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。利用最大堆和最小堆的特性。

采用字典计数-还原的方法,找出待排序的数组中最大和最小的元素,统计数组中每个值为i的元素出现的次数,对所有的计数累加,将每个元素放在新数组依次排序。

设置一个定量的数组当作空桶;遍历输入数据,并且把数据一个一个放到对应的桶里去;对每个不是空的桶进行排序;从不是空的桶里把排好序的数据拼接起来。

元素分布在桶中:


然后,元素在每个桶中排序:

取得数组中的最大数,并取得位数;从最低位开始取每个位组成新的数组;然后进行计数排序。

上面就是我整理的十大排序算法,希望能帮助大家在算法方面知识的提升。看懂之后可以去试着自己到电脑上运行一遍。最后说一下每个排序是没有调用数据的,大家记得实操的时候要调用。

参考地址:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

⑸ python面试,一般都问什么问题

下面是一些关键点:
Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。
Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。
Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access specifier,类似C++中的public和private),这么设计的依据是“大家都是成年人了”。
在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。
Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Python实现的。
Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。
Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。

⑹ Python后端开发工程师面试

第一步:自我介绍

第二步:公司介绍

第三步:技术基础

第四步:项目介绍

第五步:待遇

自我介绍,简单直接,姓名,籍贯,大学,工作经历

示例如下:

你好,面试官,我叫XX,来自XX,本科毕业于XX,主修XX专业,有X年工作经验,在上一家公司担任python后端开发工程师的职位。

公司名称是XX、公司主要做外包软件、都有软件定制/商城定制、前端2个后端2个运维1个

主要是根据你简历中填写的技术,根据我的简历中所写的,总结几点如下:

字典的查询流程:

不可变对象可哈希, str , fronzenset , tuple ,自己实现的类,要重载 __hash__ 方法。

dict内存花销大,但是查询速度快,自定义的对象或者python内部的对象都是dict包装的。

dict的存储顺序和元素添加顺序有关,添加顺序可能改变已有数据的顺序。

集合:是一个可以存放任意数据类型的可变无序的映射集合。

set和dict类似,set的核心也是散列表,但是表元只包含值的引用。 由于散列表的特性,set的元素不能重复,且无序。 内部由哈希实现,查找的时间复杂度为O(1),所以性能很高,实现了魔法函数 __contains__ 可以使用in来查找。 set的去重是通过两个函数 __hash__ 和 __eq__ 实现的。

(1)浅拷贝

定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值。

浅拷贝的特点:

(2)深拷贝:

定义:一个变量对另外一个变量的值拷贝。

深拷贝的特点:

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collectio n)以空间换时间的方法提高垃圾回收效率。

GIL全称 Global Interpreter Lock ,中文解释为全局解释器锁。它并不是Python的特性,而是在实现python的主流Cpython解释器时所引入的一个概念,GIL本质上就是一把互斥锁,将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,从而保证数据的安全性。

GIL保护的是解释器级别的数据,但是用户自己的数据需要自己加锁处理。

既然有了GIL的存在,一个进程中同一时刻只有一个线程能够被执行,无法利用cpu的多核机制,导致多线程用于I/O密集型,多进程用于计算密集型,如金融分析等。

死锁:两个或两个以上的进程或者线程在执行过程中,因为争夺资源而造成的互相等待现象,若无外力的作用,都将一直处于阻塞状态,这些互相等待的进程或者线程就被称为死锁。

解决方法,使用递归锁(RLock)

这个RLock内部有一个Lock和一个counter变量,counter记录着acquire的次数,从而使得资源可以被多次require。直到一个线程所有的acquire都被release,其他的线程才能获得资源。上面的例子如果使用RLock代替Lock,则不会发生死锁

可以直接认为是linux,毕竟搞后端的多数是和linux打交道。

那么如何避免粘包问题呢? 归根结底就是一句话, 明确两个包之间的边界.

UDP不存在粘包问题,是由于UDP发送的时候,没有经过Negal算法优化,不会将多个小包合并一次发送出去。另外,在UDP协议的接收端,采用了链式结构来记录每一个到达的UDP包,这样接收端应用程序一次recv只能从socket接收缓冲区中读出一个数据包。也就是说,发送端send了几次,接收端必须recv几次(无论recv时指定了多大的缓冲区)。

存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例**

⑺ python面试一般问什么常用设计模式

1.设计模式介绍
设计模式(Design Patterns)

——可复用面向对象软件的基础

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。

2. 设计模式分类
经典的《设计模式》一书归纳出23种设计模式,这23种模式又可归为,创建型、结构型和行为型3大类

2.1.创建型模式
前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

简单工厂模式(Simple Factory);

工厂方法模式(Factory Method);

抽象工厂模式(Abstract Factory);

创建者模式(Builder);

原型模式(Prototype);

单例模式(Singleton)。

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。

2.2 结构型模式
在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

外观模式(Facade);

适配器模式(Adapter);

代理模式(Proxy);

装饰模式(Decorator);

桥模式(Bridge);

组合模式(Composite);

享元模式(Flyweight)

2.3 行为型模式
在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法模式(Template Method);

观察者模式(Observer);

状态模式(State);

策略模式(Strategy);

职责链模式(Chain of Responsibility);

命令模式(Command);

访问者模式(Visitor);

调停者模式(Mediator);

备忘录模式(Memento);

迭代器模式(Iterator);

解释器模式(Interpreter)。

3. 设计模式的六大原则
1、开闭原则(Open Close Principle)

开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则(Liskov Substitution Principle)

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Bai 网络

3、依赖倒转原则(Dependence Inversion Principle)

这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则(Interface Segregation Principle)

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

5、迪米特法则(最少知道原则)(Demeter Principle)

为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则(Composite Reuse Principle)

原则是尽量使用合成/聚合的方式,而不是使用继承。

⑻ Python 面试高频问题:cls到底是什么

上一篇文章介绍了什么是python 中的self,详情请参考:

Python面试高频问题:self到底是什么

简单的说self是类(Class)实例化的对象。

面试中还有一个问题经常被提及,那就是——什么是cls呢?

cls 是类(或子类)本身,取决于调用的是哪个类。

看下面的实例

输出:

我们也可以通过实例的方法调用class method,例如:

同样输出

输出:

使用cls 作为方法参数时,通常该方法需要由@classmethod 修饰,@classmethod修饰的方法表示的是类方法。这里需要注意cls就是一个标识,你可以把他写成abc,bcd都是可以的,只是出于习惯写成了cls。

既然cls是一个类,那么我们就可以使用他来进行实例化,具体代码如下:

输出:

可以看到通过obj1=cls()和obj2=cls(),成功创建了两个实例,分别是0x000000690A1E0C08和0x000000690A1E0C48,而这两个实例的类型都是MyClass3'

另外cls 还可以在python类中的方法 __new__里实现,通常定义为:

最后我们可以简单地总结一下self 和 cls:简单的说self是类(Class)实例化的对象。

cls 是类(或子类)本身。我们也可以方便地理解self表示实例的,cls则表示类的!

⑼ 2022年Python技术类面试题总结(面试题+答案解析)

这是一位有着五年 Python 经验的好友最近对 Python 岗位面试后的一篇经验总结,从 Python 就业方向到 Python 面试题。

Python 就业方向

下面是 Python 面试知识点,总结了华为、阿里巴巴等互联网公司 Python 常问面试题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。

这些面试题分为 Python 基础和 Python高级,内容包含: 基础语法、文件操作、模块与包、数据类型、元类、内存管理与垃圾回收机制以及 Python 函数 等知识点。

(一) Python 基础语法

(二) 文件操作

(三) 模块与包

(四) 数据类型

(五)企业面试题

(一) 元类

(二)内存管理与垃圾回收机制

(三)函数

(四) 面向对象

由于篇幅有限,这份 Python 面试宝典已经被整理成了PDF文档,有需要 Python 面试宝典全套完整文档(面试题+答案解析)的可以 免费领取!

⑽ python运维开发工程师面试常见问题有哪些

面试python运维开发工程师每家公司对专业知识的考察侧重点是不一样的,下面给你整理了一些,希望能帮助到你!
python
1、python是强类型还是弱类型的语言
2、python的动态性体现在哪
3、python的namespace:四种;len()等函数的命名空间
4、range和xrange的区别,谈到了迭代器
5、于是问怎么实现迭代器,然后又问了生成器,yield语句
6、将list的中的一万条字符串合成一条字符串的方法
7、python多线程(g il)
8、python的三目运算符有吗? 怎么用一行代码实现三目运算
linux
1、问linux命令
2、top和ps在进程占有资源率的统计方式有什么不同
3、然后扯到了页表,内存管理,TLB
5、linux文件系统:inode,inode存储了哪些东西,目录名,文件名存在哪里

阅读全文

与python面试必问相关的资料

热点内容
centos命令窗口 浏览:596
编译器有几个好用的 浏览:500
数据库和网站如何搭载服务器 浏览:154
网络流理论算法与应用 浏览:795
java和matlab 浏览:388
钉钉苹果怎么下app软件 浏览:832
php网站验证码不显示 浏览:859
铝膜构造柱要设置加密区吗 浏览:344
考驾照怎么找服务器 浏览:884
阿里云服务器如何更换地区 浏览:972
手机app调音器怎么调古筝 浏览:503
锐起无盘系统在服务器上需要设置什么吗 浏览:19
红旗出租车app怎么应聘 浏览:978
如何编写linux程序 浏览:870
吉利车解压 浏览:248
java输入流字符串 浏览:341
安卓软件没网怎么回事 浏览:785
dvd压缩碟怎么导出电脑 浏览:275
冒险岛什么服务器好玩 浏览:543
如何在服务器上做性能测试 浏览:794