本帖最后由 逆风TO 于 2019-5-23 14:25 编辑



公司名称:西安图迹信息科技有限公司

公司地址:锦业路69号创业研发园瞪羚谷A座9层

主营概况:2013年成立,大数据应用工程中心,为五大发电集团在内的数十家大型发电企业提供信息化服务,去的时候办公室大概十几个人,网上查到的信息是50-100人

公司网址:http://www.dt-future.com/



公司照片:

HR问到的一些问题都是我们面试经常会问到的一些问题,会问到上家公司的一些情况还有离职原因,希望大家一定要做些准备再去面试!我把和技术面试的一些题目整理了一下,方便大家参考。

1. 简述你对input()函数的理解?

在Python3中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。在Python2中有 raw_input()和input(), raw_input()和Python3中的input()作用是一样的, input()输入的是什么数据类型的,获取到的就是什么数据类型的。



2. Python中有日志吗?怎么使用?

Python自带logging模块,调用 logging.basicConfig()方法,配置需要的日志等级和相应的参数, Python 解释器会按照配置的参数生成相应的日志。

INFO

DEBUG

WARNING

ERROR

CRITICAL



3.Python中的作用域?

Python中,一个变量的作用域总是由在代码中被赋值的地方所决定。当Python遇到一个变量的话 它会按照这的顺序进行搜索: 本地作用域(Local)--->当前作用域被嵌入的本地作用域(Enclosing locals)--->全局/模块作用域(Global)--->内置作用域(Built-in)



4. Python 中三大框架各自的应用场景?

①. Django

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVT的框架模式,即模型M,模板T和视图V。主要是用来搞快速开发的,他的亮点就是快速开发,节约成本

②. Flask

轻量级,主要是用来写接口的一个框架,实现前后端分离,提升开发效率,Flask 本身相当于一 个内核,其他几乎所有的功能都要用到扩展(邮件扩展 Flask-Mail,用户认证 Flask-Login),都需要 用第三方的扩展来实现。比如可以用 Flask-extension 加入 ORM、窗体验证工具,文件上传、身份验 证等。Flask 没有默认使用的数据库,你可以选择 MySQL,也可以用 NoSQL。

③. Tornado

Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。

5.什么是 restful api,谈谈你的理解?

REST:Representational State Transfer 的缩写,翻译:“具象状态传输”。一般解释为“表现层 状态转换”。REST 是设计风格而不是标准。是指客户端和服务器的交互形式。我们需要关注的重点是如何设计 REST 风格的网络接口。

REST 的特点:

①. 具象的。一般指表现层,要表现的对象就是资源。比如,客户端访问服务器,获取的数据就是资 源。比如文字、图片、音视频等。

②. 表现:资源的表现形式。txt 格式、html 格式、json 格式、jpg 格式等。浏览器通过 URL 确定资 源的位置,但是需要在 HTTP 请求头中,用 Accept 和 Content-Type 字段指定,这两个字段是对资源 表现的描述。

③. 状态转换:客户端和服务器交互的过程。在这个过程中,一定会有数据和状态的转化,这种转化 叫做状态转换。其中,GET 表示获取资源,POST 表示新建资源,PUT 表示更新资源,DELETE 表示删 除资源。HTTP 协议中最常用的就是这四种操作方式。

RESTful 架构:

①. 每个 URL 代表一种资源;

②. 客户端和服务器之间,传递这种资源的某种表现层;

③. 客户端通过四个 http 动词,对服务器资源进行操作,实现表现层状态转换。

5.有用过 Django REST framework 吗?

Django REST framework 是一个强大而灵活的 Web API 工具。使用 RESTframework 的理由 有:Web browsable API 对开发者有极大的好处包括 OAuth1a 和 OAuth2 的认证策略支持 ORM 和非 ORM 数据资源的序列全程自定义开发——如果不想使用更加强大的功能,可仅仅使用常规的 function-based views 额外的文档和强大的社区支持。

6.查询集两大特性?惰性执行?

①. 惰性执行

创建查询集不会访问数据库,直到调用数据时,才会访问数据库,调用数据的情况包括迭代、序列化、与if合用

②. 缓存

使用同一个查询集,第一次使用时会发生数据库的查询,然后Django会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少了数据库的查询次数。

7.HttpRequest 和 HttpResponse 是什么?干嘛用的?

HttpRequest 是 django 接受用户发送多来的请求报文后,将报文封装到 HttpRequest 对象中去。

HttpResponse 返回的是一个应答的数据报文。render 内部已经封装好了 HttpResponse 类。



8.你所知道的分布式爬虫方案有哪些?

三种分布式爬虫策略:

①. 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 比作工头。策略一就是工人遇到新任务都上报给工头,需要 干活的时候就去工头那里领任务;策略二就是工头去找新任务,工人只管从工头那里领任务干活;策略 三就是工人遇到新任务时询问工头此任务是否有人做了,没有的话工人就将此任务加到自己的“行程 表”。9.你用过的爬虫框架或者模块有哪些?谈谈他们的区别或者优缺点?

requests request是一个HTTP 库, 它只是用来,进行请求,对于HTTP 请求,他是一个强大的库,下载,解析全部自己处理,灵活性更高,高并发与分布式部署也非常灵活,对于功能可以更好实现Scrapy scrapy 是封装起来的框架,他包含了下载器,解析器,日志及异常处理,基于多线程,twisted的方式处理,对于固定单个网站的爬取开发,有优势,但是对于多网站爬取 100个网站,并发及分布式 处理方面,不够灵活,不便调整与括展。






最新文章

  1. OpenGL glMultMatrixf() glPushMatrix() glPushMatrix()浅析
  2. [已解决]:调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "c:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.
  3. .NET工程师面试宝典
  4. ubuntu12.04下root启动wireshark报错解决办法
  5. Android加载SD卡目录,文件夹遍历,图片设置,设置文件对应打开方式等
  6. 【BZOJ 4455】【UOJ #185】【ZJOI 2016】小星星
  7. tomcat、Linux服务器
  8. 深入浅出const
  9. Good Bye 2015 C. New Year and Domino 二维前缀
  10. iOS开发——UI篇Swift篇&玩转UItableView(三)分组功能
  11. Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件
  12. LibLinear(SVM包)使用说明之(二)MATLAB接口
  13. WS_CLIPCHILDREN与WS_CLIPSIBLINGS 收藏
  14. BZOJ 4820 [SDOI2017] 硬币游戏
  15. 邮票面值设计 (动态规划+DFS)
  16. 【LOJ#6074】子序列(动态规划)
  17. git diff命令详解
  18. Patrick Hughes - 错觉3D雕塑艺术
  19. 20165320 2017-2018-2《Java程序设计》课程总结
  20. spring 和 spring boot 的区别

热门文章

  1. 关于sql sp_send_dbmail 发送邮件的怪异问题
  2. APK更新集成实践
  3. java8-13-默认方法 静态方法 重复注解 类型注解
  4. React 中this.setStat是批量执行的, 它发现做三次是多余的,所以只执行一次
  5. The 2017 ACM-ICPC Asia Shenyang Regional Contest
  6. Day13- Python基础13 生产者与消费者模型,进程
  7. AcWing 166. 数独
  8. Codeforces Round #603 (Div. 2) A. Sweet Problem 水题
  9. jquery延迟加载
  10. php 交换值