2020-Python开发(应届)面试真题总结与反思

前言

  在面试之前觉得自己有几个小项目的经验就飘了,自我感觉称不上是 “大侠” 怎么也算是个“少侠” 吧!面完试之后发现原来是“小虾”。其实项目经验重要,基础题跟算法题更重要,搞好基础题跟算法才是王道,横行霸道,霸道横行,横着走路。豪横!!!

  面试官想要快速考察面试者的编程能力是很困难的,因为面试时间长则一个小时,短则二三十分钟。编程基础题跟算法问题是可以短时间考察面试者解决问题能力的最好办法,你会就是会,不会就是不会。

  项目经验这个东西可以吹水的地方很多,而且面试官如果不是十分了解面试者的项目的话,是很难判断面试者吹水的成分有多大。如果基础题跟简单算法题都写不出来代表代码水平其实并不高。

  面试时看到题目的时候第一感觉就是即眼熟又简单。就是写不出来·····,写了完之后感觉五五开写了一半一半。回来写总结的时候发现写的一半里面估计又错了一半有点小尴尬。

以下是总结完的题目以及答案,如有出错望指正。
2020-Python开发(应届)面试真题总结与反思_第1张图片

文章目录

    • 前言
    • 1. 列出5个 Python标准库以及大概功能说明
    • 2. 简要概述对 Python的 GIL(全局解释器锁)的理解
    • 3. 面向对象中的__new__和__init__的区别
    • 4. with 打开处理文件帮我们做了什么,比常规只用 f.open 有什么好处
    • 5. 你目前习惯的版本是 Python2 还是 Python3
    • 6. 正则表达式中, `(.*)` 和(.*?)的匹配区别
    • 7. 简述Django的 ORM
    • 8.写出五条常用的 SQL 语句
    • 9. 提高 Python 运行效率的几种方法
    • 10. MySQL 的 InnoDB 和 MyISAM 数据库引擎有什么区别?
    • 11. 多线程和多进程有什么区别?
    • 12. `__name__`的值与作用
    • 13. logging 模块的日志等级及其使用场景?
    • 14. 反爬机制有哪些
    • 15. 切换账号持续爬取数据
    • 16. 获取 a标签中的跳转链接
    • 总结

1. 列出5个 Python标准库以及大概功能说明

  1. os:操作系统接口提供操作系统相关的函数
  2. sys:命令行参数通常用于处理命令行参数
  3. datetime:处理日期时间
  4. re:正则匹配
  5. json:json与Python数据交换
  6. logging:日志
  7. random:随机数
  8. math:数学运算

2. 简要概述对 Python的 GIL(全局解释器锁)的理解

GIL 是 Python 的全局解释器锁,同一进程中假设有多个线程运行,一个线程在运行 Python 程序的时候会霸占 Python 解释器(加了一把锁即 GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。

多进程中因为每个进程都能被系统分配资源,相当于每个进程有了一个 Python解释器,所以多进程可以实现多个进程的同时运行,缺点是进程系统资源开销大。

3. 面向对象中的__new__和__init__的区别

  • __new__ 是在实例创建之前被调用的,因为它的认识就是创建实例然后返回该实例对象,是个静态方法。

  • __init__ 是在实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。

4. with 打开处理文件帮我们做了什么,比常规只用 f.open 有什么好处

f.open 文件写入流程

  1. 打开文件
  2. 写入文件内容
  3. 关闭文件

这三个步骤中最后一个关闭文件如果忘记了就会造成占用资源或者执行不了删除和移动文件。

with … as …

当程序执行在代码块内时,文件会一直保持打开状态,一旦程序离开这个代码块,程序就会自动关闭这个文件。

5. 你目前习惯的版本是 Python2 还是 Python3

Python3

6. 正则表达式中, (.*) 和(.*?)的匹配区别

(.*) 单个字符匹配任意次,即贪婪匹配。
(.*?) 条件满足的情况只匹配一次,即非贪婪匹配、最小匹配。

7. 简述Django的 ORM

ORM:对象关系映射

作用:根据类生成表结构,讲对象、列表的操作转换成对象的SQL语句,将SQL语句查询的结果转换为对象或列表。

优点:极大的减轻开发人员的工作量,不需要面对因数据库的更变而导致代码无效再修改代码。

8.写出五条常用的 SQL 语句

  1. 连接数据库
mysql -u root -p 
  1. 查看数据库
show databases;
  1. 使用数据库
use test;
  1. 查看表
show tables;
  1. 查看表结构
desc winton
  1. 创建数据库
CREATE DATABASE database-name
  1. 删除数据库
drop database dbname

9. 提高 Python 运行效率的几种方法

  1. 排序时使用键和内置的sort()方法
  2. 使用较新的Python版本
  3. 使用生成器
  4. 使用多进程

10. MySQL 的 InnoDB 和 MyISAM 数据库引擎有什么区别?

InnoDB功能比MyISAM强大很多
InnoDB性能比MyISAM差很多

InnoDB 适合:

  1. 可要可靠性要求比较高,或者要求事务
  2. 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况

MyISAM 适合

  1. 做很多 count 计算
  2. 插入不频繁,查询非常频繁
  3. 没有事务

11. 多线程和多进程有什么区别?

多线程指的是在同一时间段内,一个运行的程序(进程)同时处理几个不同的任务,比如一个在求最大值,一个在求和,对单线程程序而言,多线程处理单个任务的速度会有所下降,但是总体速度一般会有所提高;

而多进程指的是一个程序的几个实例,比如你两次打开记事本,就产生了两个记事本程序的进程,而有些程序只能是单进程的,就是只能运行一个实例。

拓展:

这里做一个比喻:进程就是公司, 线程就是公司里面的员工。

  1. 公司搞了一个工作的地方(分配了cpu 内存等待资源)。公司有独立房子,资产(cpu 内存),而这些资产不能为个人所有,是共享公司的东西要不就被开除啦!
  2. 然后公司(进程)招了很多员工(创建了很多线程)来工作,很多员工(多线程)一起齐心协力,这样一个公司(进程)就可以正常工作。
  3. 公司内部员工之间(线程之间)的交流很方便,可以使用公司的公共的休息区交流(共享内存 静态变量等等);但是公司之间的交流就不方便了需要公司之间的打通交流渠道(进程间通讯 5种)。
  4. 公司是分配资产和地盘的基本单位,而员工是分配任务干活的基本单位。

12. __name__的值与作用

test.py 文件直接运行和被 import test, __name__ 值分别是什么,说出__name__这个内建的系统变化最大的作用是什么?

直接运行时 __name__ 值为 __main__
import时值为 模块名(model name)

可以防止不需要的模块被执行。

13. logging 模块的日志等级及其使用场景?

五个级别 从高到低 用数字表示为 10、20、30、40、50

  1. info 常规信息
  2. debug 调试信息
  3. warning 警告信息
  4. error 错误信息
  5. cretical 严重错误

14. 反爬机制有哪些

爬虫过程中发现被服务端反爬了,这个时候做哪些调整来绕过服务器的反爬虫机制?至少列出3种,开启你的想象越多越好。

  1. 通过 user-agent 来判断是否是爬虫。

通过伪装请求头中的 user-agent 来解决。诺user-agent 被检测到,可以找大量的 user-agent 放入列表进行更换。

  1. 将 IP 进行封杀

通过代理伪装 IP

  1. 通过访问频率来判断是否是一个爬虫。

可以通过设置请求间隔和爬取间隔。

  1. 当一定时间内总请求数超过上限,弹出验证码。

对于简单的验证码可以使用 tesseract 处理,复杂的可以去打码平台。

  1. 通过 JS来获取页面数据。

使用 selenium + phantomjs 来加载JS获取数据。

15. 切换账号持续爬取数据

爬虫过程中需要账号登录,且需要不停换账号才能持续爬取数据,这时候你是如何设计,让程序高效健壮运行呢?

  1. Selenium 模拟登录
  2. Cookie 登录

16. 获取 a标签中的跳转链接

BeautifulSoup 或解析器解析出 a标签中的跳转链接。

soup = BeautifulSoup(html, 'lxml')

for item in soup.find_all("a"):    
    print(item.get('href'))    
html.xpath('//a[@class="sister"]/@href')

总结

  个人感觉学编程跟练武功差不多,马步要扎实(基础),剑法套路要有(项目),内功心法要炼(算法)这样才能成为大侠!!! 加油!!!

你可能感兴趣的:(随心杂谈)