投稿    登录
欢迎来访~

网络爬虫工程师面试小笔记

Python Payne 2570浏览 0评论

扫码或搜索:进击的Coder

发送

即可立即永久解锁本站全部文章

网络爬虫工程师面试小笔记

————小企业,7K至10k版,面试总结。Payne

面试题之一:Python单例模式

  1. 什么是Python的单例模式?

单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式主要目的是确保某一个类只有一个实例存在。当希望在整个系统中,某个类只能出现一个实例时,单例对象就派上用场了。

面向对象编程单例模式,保证了在程序运行中该类只实例化一次,并提供了一个全局访问点

Python的模块就是天然的单例模式

当模块在第一次导入时,就会生成 .pyc 文件

当第二次导入时就会直接先加载 .pyc 文件,而不会再次执行模块代码。

我们只需把相关函数和数据定义在一个模块中,就可以获得一个单例对象。

  1. 如何实现单例模式?
1.基于类:

此时是以完成了一个简单的单例模式案例,But实际开发中随时凉凉

举例说明:

当然此时也并没有什么问题,BUT在’ init ‘方法中加入I/O(input/output)操作就凉凉了

问题出现了,按照以上方式创建的单例无法支持多线程

缘由:Python中实例化对象与初始化对象是分开执行的,又由于多线程之间是通信共享的,故出现线程安全问题。主要体现为,create一个之后kill一个,create一个又被kill一个。所以就。。。

解决思路一:相互独立,分而治之。加锁独立

也就是咱们所了解、知道的线程锁的概念,使得其无序变为相对有序。具体代码便不在此赘述

在看看思路一(相互独立,分而治之。加锁独立)

解决思路二:‘反’实例化,加锁保护独立,确保通用性

在Python3中,调用父类方法是为super(),那么是否可以增加判断:

当类属性不为空时,我们便不在实例化且返回一个已实例化的类属性。这样还是不太完美,带有局限性。进一步加锁保护优化以保障多线程情况下只有一个线程同时访问。这样就保障了单例的安全

基于 new 方法实现!!!

  1. 基于装饰器

使用装饰器实现,实例如下:

  1. 使用模块的方法

书写代码(并保存在Singleton.py中):

// from * import singleton 需使用时,直接在其他文件中导入此文件中的对象,那么这个对象即是单例模式对象

还有个基于元类的就没书写了具体请看:https://blog.csdn.net/weixin_44239343/article/details/89376796

面试题之二:Redis有几种数据类型?

如果是单单是Redis那么常用数据类型为五种

他们分别是:String,List,hash,set,zset

String:字符串,一个字符串Value最多可以是512M

Hash:哈希,是一个String类型的field和Value的映射表

List:列表,时间是链表

Set:集合是一个String类型无序无重复集合,其通过Hash Table实现

Zset(sorted):有序集合

那么应聘时,请注意这个小坑,你Python使用Redis又几种数据类型?

这个是基于语言来回答的,所用语言+Redis数据类型杂糅

Number,String,list,tuple(这个不确定),dict,aggregate

同时又涉语言所拥有的数据类型与redis,一样的就‘合二为一’

以Python为例,稍后继续探究这(6+5)之间的杂糅,dict与aggregate其二者区别为主(其实我也不晓得更深的了)。以及1对1,1对多,多对1。数据结构搞起来,然后哼哼~。

面试题之三:Scrapy框架的运行流程及各模块的作用

如果简历里面写了分布式会拓展scrapy-Redis架构以及其作用。

CAP理论,估计会扯到数据这块。拓展database什么特性啊,之类的。谈优化,谈数据结构。反正数据结构与算法这块,基于此,难于此,也凉于此

面试题之四:scrapy去重所用的几种机制

谨记:先从scrapy本身的去重原理及机制说起来,最基础,优缺点,去重原理等等。一步步来,一上来就BloonFilter,风险不小啊

对于此,自我总结如下:

1、scrapy 基于内存

2、redis 基于内存 更加快捷、速度快、易于管理

3、布隆过滤器 大 可能存在拥有一定的错误率

对于此面试个人总结如下:

源于基础,死于基础(数据结构及类型, 以及算法)

知识点:点串线,线成面。

自己也还有很长一段路走,加油,加油~

转载请注明:静觅 » 网络爬虫工程师面试小笔记

更多文章、联系博主、技术交流、商务合作

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

喜欢 (10)or分享 (0)

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址