公司名称:北京仁科互动网络技术有限公司 公司地址:西安雁塔区中晶科技广场A座23楼 公司规模:500-999人 公司环境:下图
笔记:无 面试环节: 1、 Q:你用过哪些框架? A:Flask框架、Django、Scrapy框架 2、Q:说说你对MVC和MVT的理解? A:MVC简介: M:Model,模型,和数据库进行交互 V:View,视图,负责产生 Html 页面 C:Controller,控制器,接收请求,进行处理,与 M 和 V 进行交互,返回应答。 MVT简介: M:Model,模型,和 MVC 中的 M 功能相同,和数据库进行交互。 V:view,视图,和 MVC 中的 C 功能相同,是核心,负责接收请求、获取数据、返回结果 T:Template,模板,和 MVC 中的V 功能相同,产生 Html 页面 3、Q:Django 创建项目后,项目文件夹下有哪些东西? A:a、manage.py 与项目进行交互的命令行工具集的接口 项目管理器 执行python manage.py来查看所有命令 b、与项目同名的目录,项目的一个容器 ,包含项目的配置文件,目录名称不建议修改 c、urls.py:url配置文件,Django项目中所有地址(页面)都需要我们自己去配置URL d、settings.py:项目的总配置文件,里面包含了数据库、web应用、时间等各种配置 e、init.py:python中声明模块的文件,内容默认为空 f、wsgi.py :python 服务器网关接口,python应用与web服务器之间的接口 ,在项目开发中一般不做修改 4、Q:Django 中间件是如何使用的? A:在http请求 到达视图函数之前 和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。 中间件的执行流程 1、执行完所有的request方法到达视图函数。 2、执行中间件的其他方法 2、经过所有response方法返回客户端 中间件可以定义五个方法,分别是:(主要的是 process_request和process_response) process_request(self,request) process_view(self, request, view_func,view_args, view_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, response) 5、Q:什么 csrf 攻击原理?如何解决? A:CSRF攻击原理: a、用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A; b、在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A; c、用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B; d、网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A; e、浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行,发邮件,发消息,修改你的密码,购物,转账,偷窥你的个人信息,导致私人信息泄 漏和账户财产安全收到威胁 。 防御: a、验证 HTTP Referer 字段 b、在请求地址中加入token验证 c、在HTTP 头中自定义属性并验证 6、Q:接口安全设计你是怎么设计的? A:我主要是通过签名sign、Token、时间戳配合使用进行验证的,主要流程是: 1、客户端通过用户名密码登录服务器并获取Token 2、客户端生成时间戳timestamp,并将timestamp作为其中一个参数 3、客户端将所有的参数,包括Token和timestamp按照自己的算法进行排序加密得到签名sign 4、将token、timestamp和sign作为请求时必须携带的参数加在每个请求的URL后边(http://url/request?token=123×tamp=123&sign=123123123) 5、服务端写一个过滤器对token、timestamp和sign进行验证,只有三个参数都正确且在规定时间内,本次请求才有效 7、Q:熟悉Linux吗?有没有做过项目部署? A:我在工作中经常会用到Linux,使用起来没问题,做过项目部署,使用nginx + uwsgi 的方式来部署 Django 项目。 8、Q:MySQL的索引类型有哪些,怎么优化查询效率? A:索引类型有:普通索引、唯一索引、主键索引、组合索引、全文索引 查询优化: 1、对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 3、应尽量避免在 where 子句中使用!= 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描 4、应尽量避免在 where 子句中使用or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描 5、对于多张大数据量的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差 6、分表分库 、主从读写分离 9、Q:爬虫爬取下来的数据如何去重,说一下具体的算法依据 A:1.通过 MD5 生成电子指纹来判断页面是否改变 2.nutch 去重。nutch 中 digest 是对采集的每一个网页内 容的 32 位哈希值,如果两个网页内容完全一样,它们的 digest 值肯定会一样。 10 Q:爬虫过程中遇到验证码怎么处理? A:1.Scrapy 自带处理验证码 2.获取到验证码图片的url,调用第三方付费接口破解验证码
面试总结:这次面试问的比较多的是关于web方面的知识,以及一些爬虫、数据库相关知识,公司很有发展力,保持有礼貌,认真按照自己的理解回答问题。
|