本帖最后由 就业高冷派 于 2018-11-8 14:50 编辑
公司名称:上海指旺信息科技有限公司西安分公司 公司经营范围:在线网贷平台,CRC数据处理系统,债权匹配系统,风险决策引擎,ERP等等金融IT产品 注册规模:50-150人 公司地址:高新技术开发区天谷八路环普科技产业园G4栋15层 公司图片:
人事面试不做整理,正常沟通就行! 技术面试的一些问题整理出来了,希望可以帮到最近面试找工作的小伙伴! 1. 有用过 Django REST framework 吗? Django REST framework 是一个强大而灵活的 Web API 工具。使用 RESTframework 的理由 有: Web browsable API 对开发者有极大的好处 包括 OAuth1a 和 OAuth2 的认证策略 支持 ORM 和非 ORM 数据资源的序列 全程自定义开发——如果不想使用更加强大的功能,可仅仅使用常规的 function-based views 额外的文档和强大的社区支持 2. 简述 Django 下的(内建的)缓存机制? django根据设置缓存方式,浏览器骑一次请求时,cache会缓存单个变量或者整个网页到磁盘或者内存,同时设置 了response头部,第二次访问的时候,根据缓存时间的判断,将内容将缓存数据返回给客户端。 3.对 cookie 与 session 的了解?他们能单独用吗? Session 采用的是在服务器端保持状态的方案,而 Cookie 采用的是在客户端保持状态的方案。但是禁用 Cookie 就不能得到 Session。因为 Session 是用 Session ID 来确定当前对话所对应的服务器 Session,而 Session ID 是通过 Cookie 来传递的,禁用 Cookie 相当于失去了 SessionID,也就得不到 Session。 4.你用过的爬虫框架或者模块有哪些?谈谈他们的区别或者优缺点? requests request是一个HTTP 库, 它只是用来,进行请求,对于HTTP 请求,他是一个强大的库,下载,解 析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现 Scrapy scrapy 是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程,twisted的方 式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取 100个网站,并发及分布式 处理方 面,不够灵活,不便调整与括展。 三种分布式爬虫策略: ①. Slaver 端从 Master 端拿任务(Request/url/ID)进行数据抓取,在抓取数据的同时也生成新任务,并将任务 抛给 Master。Master 端只有一个 Redis 数据库,负责对 Slaver 提交的任务进行去重、加入待爬队列。 优点: scrapy-redis 默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作 scrapyredis 都已经帮我们做好了,我们只需要继承 RedisSpider、指定 redis_key 就行了。 缺点: scrapy-redis 调度的任务是 Request 对象,里面信息量比较大(不仅包含 url,还有 callback 函 数、headers 等信息),导致的结果就是会降低爬虫速度、而且会占用Redis 大量的存储空间。当然我 们可以重写方法实现调度 url 或者用户 ID。 ②. Master 端跑一个程序去生成任务(Request/url/ID)。Master 端负责的是生产任务,并把任务去重、加入到待爬队列。Slaver 只管从 Master 端拿任务去爬。 优点: 将生成任务和抓取数据分开,分工明确,减少了 Master 和 Slaver 之间的数据交流;Master 端生成任务还有一个好处就是:可以很方便地重写判重策略(当数据量大时优化判重的性能和速度还是很重要的)。 缺点: 像 QQ 或者新浪微博这种网站,发送一个请求,返回的内容里面可能包含几十个待爬的用户 ID,即几十个新爬虫任务。但有些网站一个请求只能得到一两个新任务,并且返回的内容里也包含爬虫要抓取的目标信息,如果将生成任务和抓取任务分开反而会降低爬虫抓取效率。毕竟带宽也是爬虫的一个瓶颈问题,我们要秉着发送尽量少的请求为原则,同时也是为了减轻网站服务器的压力,要做一只有道德的 Crawler。所以,视情况而定。 ③. Master 中只有一个集合,它只有查询的作用。Slaver 在遇到新任务时询问 Master 此任务是否已爬,如果未爬则加入 Slaver 自己的待爬队列中,Master 把此任务记为已爬。它和策略一比较像,但明显比策略一简单。策略一的简单是因为有 scrapy-redis 实现了scheduler 中间件,它并不适用于非 scrapy 框架的爬虫。 优点: 实现简单,非 scrapy 框架的爬虫也适用。Master 端压力比较小,Master 与Slaver 的数据交流也不大。 缺点:“健壮性”不够,需要另外定时保存待爬队列以实现“断点续爬”功能。各 Slaver的待爬任务不通用。 如果把 Slaver 比作工人,把 Master 比作工头。策略一就是工人遇到新任务都上报给工头,需要 干活的时候就去工头那里领任务;策略二就是工头去找新任务,工人只管从工头那里领任务干活;策略 三就是工人遇到新任务时询问工头此任务是否有人做了,没有的话工人就将此任务加到自己的“行程 表” 6.编写过哪些爬虫中间件? user-agent、代理池、cookies池、selenium 7.生成迁移文件和执行迁移文件的命令是什么? python manage.py makemigrations python manage.py migrate
|