博客
关于我
Python-爬虫工程师-面试总结
阅读量:796 次
发布时间:2023-03-08

本文共 2703 字,大约阅读时间需要 9 分钟。

技术问题解答

1. 对 if __name__ == 'main' 的理解

__name__ 是当前模块名,当模块被直接运行时,模块名为 __main__,此时代码将执行。如果模块被导入其他模块运行,模块名则不是 __main__,此时代码不会执行。

2. Python内存管理的方式

a. 引用计数机制

Python内部使用引用计数来追踪内存中的对象。当对象被创建时,创建一个引用计数。当对象不再被引用时,引用计数归零,对象被垃圾回收。

b. 垃圾回收

  • 当引用计数归零时,对象被垃圾回收。
  • 对于循环引用(两个对象互相引用),解释器会定期执行循环检测器,删除不可访问的循环对象以释放内存。
  • 内存泄露可能导致内存不足的问题。

c. 内存池机制

Python使用内存池机制来管理内存。

  • 小于256字节的对象使用pymalloc分配内存。
  • 大对象使用系统malloc分配内存。
  • 每个Python对象(如整数、浮点数、List)有独立的内存池,不共享内存池。

3. 删除List中的重复元素

# 使用set函数list = [1, 3, 4, 5, 51, 2, 3]unique_list = list(set(list))print(unique_list)# 使用字典函数a = [1, 2, 4, 2, 4, 5, 6, 5, 7, 8, 9, 0]b = {}b = dict.fromkeys(a)c = list(b.keys())print(c)

4. Python对象拷贝方式

  • 赋值(=):创建对象的引用,修改任一对象会影响另一个。
  • 浅拷贝:创建新对象,包含原始对象中项的引用。常用方法:
    • 使用list()或copy()模块的copy()函数进行完全切片。
  • 深拷贝:创建新对象,并递归复制包含的对象。常用方法:
    • 使用copy()模块的deepcopy()函数进行深拷贝。

5. except 的用法与作用

except 用于处理异常。

  • try下的代码正常执行时,会执行except对应的语句。
  • 如果发生异常且except匹配,则执行相应语句。
  • 如果所有except都不匹配,异常会传递到上层try。
  • 如果try正常执行,且存在else块,则执行else代码。

6. __new__ 与 __init__ 的区别

  • __new__:在对象创建时调用,返回对象实例。可以用于实现单例模式。
  • __init__:在对象创建后调用,对对象进行初始化,无返回值。

7. 常用的网络数据爬取方法

  • 正则表达式:用于匹配特定模式。
  • Beautiful Soup:用于解析HTML/XML。
  • Lxml:功能强大的解析库,支持XPath查询。

8. 反爬虫策略及解决方法

  • 基本反爬虫:通过自定义headers、降低请求频率、使用代理IP。
  • 动态网页反爬虫:使用Selenium+PhantomJS抓取网页内容。
  • 加密数据:使用Selenium截图加密部分数据,或进行逆向推理。

9. urllib 与 urllib2 的区别

  • urllib:只能通过URL发送请求,无法设置请求头,无法伪装User-Agent。
  • urllib2:支持通过Request类设置headers,伪装User-Agent。
  • urllib:提供urlencode()函数,用于生成GET查询字符串。

10. 基于Session登录验证的爬虫方案

基于Session的登录验证需要使用浏览器模拟工具(如Selenium)进行抓取,确保每次请求都携带有效Session cookie。

11. 网络爬虫中的数据包与解析包

  • 数据包:urllib、urllib2、requests。
  • 解析包:re、xpath、Beautiful Soup、Lxml。

12. 熟悉的爬虫框架

常用的爬虫框架包括Scrapy、Selenium、Beautiful Soup等。选择框架时需根据项目需求和复杂度进行权衡。

13. Python在服务器部署流程

  • 部署流程:
  • 安装Python和相关依赖。
  • 配置应用程序(如Django、Flask)。
  • 部署脚本(如使用gunicorn)。
  • 配置Nginx反向代理。
  • 环境隔离:使用虚拟环境(如virtualenv)或容器化工具(如Docker)。

14. Django与Flask的比较与选择

  • 相同点:都支持MVC模式,提供灵活的路由和视图。
  • 不同点:
    • Django更高级,内置更多功能(如ORM、模板)。
    • Flask更轻量,适合定制化开发。
  • 选择依据:根据项目复杂度和开发需求选择。

15. Python单例模式实现

class Singleton(object):    _instance = None    def __new__(cls, *args, **kw):        if not cls._instance:            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)        return cls._instance    def __init__(self, a):        self.a = a    @classmethod    def get_instance(cls):        return cls._instance    def some_method(self):        print("Singleton instance:", self.a)

16. Linux部署服务脚本命令

# 启动脚本./start.sh# 停止脚本./stop.sh# 检查状态./status.sh

17. 多线程与异步的使用及效率优化

  • 多线程:适合I/O密集型任务,如网络爬取。
  • 异步:使用asyncio处理I/O等待任务。
  • 效率优化:使用Scrapy-Redis分布式爬取,定向爬取优化等。

18. POST与GET的区别

  • GET:数据传输安全性低,适合数据查询。
  • POST:数据传输安全性高,适合数据添加、修改或删除。
  • 数据传输方式:GET在URL中,POST在请求体中。
  • 数据量:GET较小,POST较大。
  • 效率:GET比POST更高效。

19. Lambda函数的定义与用途

  • 定义:匿名函数,通常用于短小回调。
  • 用途:简化代码,提升可读性。例如:
lambda x, y: x + ya = lambda x, y: x + yprint(a(3, 11))  # 输出14

转载地址:http://ezlfk.baihongyu.com/

你可能感兴趣的文章
python3.2批量查询IP地址区域
查看>>
Python3.5中协程和未来/任务之间的区别?
查看>>
python3.5实现socket通讯(TCP)
查看>>
python3.6 ubuntu部署nginx、 uwsgi、 django
查看>>
Python3.6.3中,functools似乎不能用
查看>>
python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
查看>>
python3.6使用pickle序列化class
查看>>
python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
查看>>
Python3.6属性错误:模块‘;异步没有属性‘;运行‘;
查看>>
python3.6版本中的python-weka-wrapper安装失败,错误代码为%1
查看>>
Python3.7安装cv2踩过的坑
查看>>
python写txt文件
查看>>
python关于sorted排序函数详细解析 附实战代码(全)
查看>>
python3.8调用m文件,调用matlab
查看>>
python3.9新特性_Python 3.9 新特性速览
查看>>
Python3.x:遍历select下拉框获取value值
查看>>
python360百科_11月编程排行榜:Python超过Java成第二
查看>>
Python关于Paginator分页函数详细解析 附实战代码
查看>>
python3、ipython3、setup-tools、pip等环境搭建详细总结
查看>>
python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
查看>>