首页 > 技术文章 > python面试题记录

cang-yuan 2020-01-13 15:38 原文

1.列举python的5个常用标准库

pathlib,os,sys,re,time,datetime

2.python的内置数据类型

不可变数据类型:num,str,bytes,tuple

可变数据类型:list,dict,set

设置数据类型1.便于开发人员分类,提升编程效率

                      2.提升存储效率,节约存储空间

3.简述with方法打开处理文件帮我们做了什么?

使用open后,要关闭打开文件对象file.close(),而使用with open方法内部实现了try...except...finally中的finally:file.close()这一功能

4.列出python中的可变数据类型,不可变数据类型,为什么?

list,dict,set为可变数据类型

str,num,tuple为不可变数据类型

可变和不可变均是根据变量名对应的内存地址是否改变来确定的

变量对应的值改变,而内存地址发生变化的为不可变数据类型

变量对应的值改变,而内存不发生变化的为可变数据类型

python中可以用内置方法id(),来查看内存地址是否发生改变。

5.获取当前时间

1 import time
2 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
View Code

6.统计字符串 a 中单词个数(假设以空格为分隔符)

1 len([i for i in a.split(' ') if i])

7.python删除文件和linux删除文件方法 

1 # python
2 import os
3 os.remove(path)
4 # linux
5 rm path

 

 8.python写一段自定义异常代码

python内置了很多异常类,这些异常类为编写代码划定红线,让开发者及时的发现错误。那么我们编写一个模块也可以为使用此模块者划定红线,来约束使用者能使用哪些数据,这就需要我们自定义一些异常类。

首先需要了的是自定义类是的父类:

python说明文档中是这样说 exception Exception:

所有内置的非系统退出类异常都派生自此类。 所有用户自定义异常也应当派生自此类

那么就可以通过直接或间接的继承Exception就可以自定义一个异常类,当然也可以间接的继承python内置的异常类。

首先先定义一个基类,然后从此基类中派生出各个异常类,这样不但清晰明了,也便于管理。

 

 将代码中变量a,b改为整数,则会执行else语句(不报异常执行)

 9.举例说明try...except...else...finally的相关含义

try...except不报异常则执行else

不管是否报异常都会执行finally

10.遇到bug如何处理

1、细节上的错误,通过print()打印,能执行到print()说明一般上面的代码没有问题,分段检测程序是否有问题,如果是js的话可以alert或console.log

2、如果涉及一些第三方框架,会去查官方文档或者一些技术博客。

3、对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻辑缜密性的方法,我也都会收藏做一些笔记记录。

4、导包问题、城市定位多音字造成的显示错误问题

11.谈谈python和其他语言的区别

  • 语言特点

简洁 优雅 省略了各种大括号和分号,还有一些关键字,类型说明

  • 语言类型

解释型语言,运行的时候是一行一行的解释,并运行,所以调试代码很方便,开发效率高.

  • 第三方库

python是开源的,并且python的定位时任由其发展,应用领域很多
比如Web,运维,自动化测试,爬虫,数据分析,人工智能.Python具有非常完备的
第三方库

  • 一句话概括Python语言

Python是一门语法简洁优美,功能强大无比,应用领域非常广泛,具有强大完备的第三方库的一门
强类型的可移植,可扩展,可嵌入的解释型编程语言

  • 缺点就是

  • 1. Python的执行速度不够快

Python是一门解释型语言,所以它的速度相较于c/c++ 会慢一些.但是并不影响使用
因为现在的硬件配置都非常的高,基本没什么影响.除非是一些实时性比较强的程序可能会受到
一些影响,但是也是有解决办法的,可以嵌入c\c++代码

  • 2.Python的GIL(Global Interpreter Lock)全局解释器锁

GIL是什么

首先明确一点GIL并不是Python的特性,而是解释器的特性.它是Python的解释器Cpython用来做多线程的控制和调度用的全局锁.保证同一个时刻只有一个线程在运行.Python还有一些别的解释器,比如Jpython就没有GIL锁.Cpython现在已经成了python的实现标准,所以我们都说python具有GIL限制.

GIL的问题总体上来说是历史遗留的问题,以前的计算机的程序运行方式是单核多任务的模式,所以为了防止多个任务对同一资源进行同时的操作,竞争资源,才有了全局的解释器锁.但是随着近年来科技的进步,出现了多核,这样的话,全局锁就会限制多线程的并行.

解决方法

  • 使用multiprocessing(多进程)替代Thread(多线程)
    multiprocessing库的的出现弥补了Python多线程并发限制的不足,每个进程都有自己独立的GIL,因此也不会出现进程之间的GIL的争夺.
  • GIL只是Cpython解释器的产物,当然可以用其他的解释器来替代,但是由于其他的解释器,对C支持的不是很好,多以一直也不是很受欢迎.
  • Python社区也在对GIL对于多线程的支持的一些改进.比如增加线程的优先级(高优先级的线程可以迫使其他线程释放所有的GIl锁)
  • 如果对并行计算性能较高的程序可以考虑把核心部分写成C模块,或者直接用其他语言代替.

Python和Java相比:

Python比Java要简单.Python是函数为一等公民的语言,而Java是类为一等公民的语言

Python和C相比

对于使用:
Python的类库齐全并且使用简洁,很少代码实现的功能用C可能要很复杂
对于速度:
Python的运行速度相较于C,绝对是很慢了.Python和CPython解释器都是C语言编写的

12.简述解释型和编译型编程语言

  • 编译性 和 解释型语言

解释型:就是边解释边执行
编译性:编译后再执行



推荐阅读