面试
1.首先自我介绍
2.简述技术问题
3.展示你的经验
4.双方谈判(工资,待遇,加班......)
5.笔试(或现场做一项目)
6.等待通知继续去下一家面试
1.你对pyhon的理解?
理解:python一种计算机编程语言,一种解释型、动态、面向对象语言
特点: 优雅,简单,开发效率高,第三方包多,高级语言,可移植,可嵌入,胶水语言,脚本语言
*Python解释器有哪些?
1.CPython 2.IPython 3.PyPy 4 .Jython 5.IronPython
2.你对‘类’与‘对象’的理解?
3.Python的特点?
.简单易学
.自由开元 4.简述一下开元历史?
.解释性 5..什么是解释性?
.面向对象 6.什么是面向对象?
.可扩展性
.可嵌入型
.丰富的库 7.面向对象的特点?
封装 8.什么是封装?:同一种事物的多种形态
继承 9.什么是继承?:。。。。。。。特点:子类拥有父类的属性和方法
子类拥有自己的属性和方法
子类可以重写父类的方法
多态 10.什么是多态?。。。。。。
11..解释型编译型的区别?
12.举例常见的的10个库?
12.Python中的编码格式你用过哪些?
1.utf-8, 2.gbk, 3.gb2312,
4.ascii 5.gb18030
13.常用的数据解析方式及解析用到的包?
正则表达式 re
bs4 bs4
json解析 json
xpath lxml
13.写出5个常用的字符串函数,并说明作用 ?
Strip() 去除字符串两端空格
Upper() 转大写
Lower() 转小写
Find() 查找子串开始位置
Replace() 替换
Start_switch()
End_switch()
Split()
Join()
14.你用过哪些框架?
15.scrapy的创建命令? django-admin startproject myDjango
18. django-admin startapp app
19. python manage.py runserver
20. 按ctrl+c可终止运行
21. python manage.py makemigrations
22. python manage.py migrate
16.scrapy的运行命令?
scrapy 17.scrapy都有哪些内置文件?
18.简述scrapy的工作流程?
19.dgango的创建命令?
20.dgango创建app命令?
21.dgango的运行命令?
dgango 20.dgango都有哪些内置文件?
22.简述dgango的工作流程?
23.简述for请求和while请求的区别?
for:有限循环
while:条件为真一直无限循环
24.简述get请求和post请求的区别?
1.参数位置
get请求参数放在url之后,以?分割,多个参数之间用&符号链接
Post请求参数放在请求体中,每个参数之间用&符号链接
2.安全性
get请求参数直接在url地址中明文显示,只要能获取到url地址,就可以将隐私数据提取,不安全
Post请求,由于参数是放在请求体重的,不会明文显示,相对来说比较安全
3.请求参数长度
理论上url地址没有长度限制的,但是浏览器会对url做长度限制,一般的浏览器url地址长度不能超过2048个字节,所以get请求参数是有长度限制的
post请求,请求数据放在请求体中,没有长度限制,但实际情况会根据服务器端的要求作出限制
4.应用场景
get请求一般用于获取服务器资源
Post请求一般用于向服务器提交资源
25.简述cookie(客户端)与session(服务端)的作用和区别?
区别:
1.cookie存储在客户端 session存储在服务端
2.数据存储大小 cookie只适合存储一些小的数据,例如用户登录状态、用户浏览记录.... session存储在服务器,理论上来说大小没有限制
3.安全性 session安全性要比cookie安全
26.简述selenium模拟登陆流程?
27.简述如何应对目标服务器对爬虫程序的限制?
1.User-Agent 中如果携带python标识,禁止访问
模拟浏览器的User-Agent,可以搜索多个浏览器请求头,每次发请求随机取一个
2.要求用户登录后进行访问 解决:登录之后找到cookie,每次发送请求携带上cookie
3.封ip, 使用代理ip
28.例举python中的数据结构?
列表 26.list的特点:列表中的每一个元素都是可变的,有序的,可以容呐Python中的任何对象
元组 27.Dic的特点 :字典中的数据以键对值出现,key是不变的,无法修改。value是可变,改
字典 28.Tuple特点 : 元组固定列表不可修改
集合 29.set特点 :?
29.分别写出list、dict中常用的五个函数及作用 ?
list: append()追加 insert()插入 clear()清空 pop()移出
remove()删除 copy()拷贝 sort()排序 reverse()反向排序 extends()扩展
dict: clear()清空 pop()移出 popitem()移出一个key个value keys()获取所有
key values()获取所有值 items()获取所有key和值
update()更新 get()根据key获取值
30.列举使用过的装饰器? 31.解释各装饰器的作用?
@classmethod、 = = 类函数装饰器,装饰的函数可以由类和对象调用,默认参数cls表示类
@staticmethod、= = 静态函数装饰器,装饰的函数可以由类和对象调用,没有默认参数
@property = = 描述装饰器 装饰的函数可以通过对象.函数(不加括号) 直接调用
31.列举你使用过的数据库? 33.操作对应数据库的第三方包?
sqlite3、 = =sqlite、
mysql、 = =pymysql、
mongodb、 = =pymongo、
redis = =redis
32.例举你用过的操作系统?
dos、Linux、Windows、Unix、Ubuntu
(你至少要回会两种操作系统)
33.列举至少10个HTML标签,10个CSS3样式,并说明他们的含义?
34.pass的作用是什么?
保证代码完整性,若函数或代码块中暂无要执行的功能代码,
可以使用pass占位,保证代码不出错
35.try语法的作用是什么?
判断不确定代码是否正确,不影响后续代码的执行
36.什么是URL、DNS、IP、域名,域名和IP地址之间有什么关系?
37.列举一些常见的响应状态码,及其所表示的含义
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
38.列举一些常用的请求头及其含义?
39.请求报文和响应报文结构(8分)
请求报文
请求方法 请求地址 协议版本 请求行部分
请求头部分
请求数据
响应报文
协议版本 状态码 原因短语 状态行
响应头
响应数据
40.MySQL语句?
a)创建一张学生表,包含姓名,年龄,学号(主键),性别,成绩等五个字段,类型自己定义
CREATE TABLE stuednts(name text,age integer ,id integer primary key,sex text,score integer)
b)向表中插入1条数据,张三,20,10086,男,95
INSERT INTO students(name,age,id,sex,score)values(........)
c)查询年龄大于20的学生的姓名和学号
Select name ,id from students where age>20
d)更新姓名为张三的学生姓名为李四
Update students set name=’李四’ where name=’张三’ \ name like ‘张三’
e)删除所有姓名以张开头的学生信息
Delete from student where name like ‘张%’
f)按成绩降序排序,查询学号、姓名、年龄字段
Select id ,name ,age from student order by score DESC
41.列表生成式实现1-100(包含100)中既是2又是3倍数的数字?
[x for x in range(1,101) if x % 2==0 and x%3 == 0]
[x for x in range(1,101) if x % 6 == 0]
42.3.如何解决网络爬虫中遇到的验证码问题,详细说明你遇到过的验证码及
解决方案
云打码 若快
43.Django配置url路由传递参数有几种写法,有什么不同?
44.简述部署布隆去重步骤及部署分布式爬虫步骤?
45.如何通过请求的方式,调度scrapy爬虫项目的开启和停止?
46.关于Python程序的运行,有什么手段能提升性能。
使用多进程,充分利用机器的多核性能。
对于性能意向比较大的部分代码,可以使用c或c++编写。
对于IO阻塞造成的性能影响,可以使用IO多路复用来解决。
尽量使用Python的内置函数。
尽量使用局部变量。
47.什么是高阶函数
就是把函数当成参数传递的一种函数
48.循环导入怎么解决?
效果:A导入B,B导入A,结果提示'module' object has no attribute
解决:可以引入一个新的文件为C,C中同时包含A和B中的需要引入的代码,A和B只需要引入C即可
注意:最好把公共的/用处频繁的函数单独放到一个工具类中,可以防止循环导入的发生
49.循环引用怎么解决?
效果:A引用B,B引用A,结果是A和B都释放不掉(导致内存泄漏:明明内存看起来够用,但是实际提示不够)
解决:A或B用完对方以后手动del即可
50.什么是lambda函数?它有什么好处?另外python在函数编程方面提供了些什么函数和语法?
lambda是Python中的匿名函数。它语法简单,简化代码,不会产生命名冲突,污染命名空间。Python提供了map,reduce,filter等函数方法,提供了装饰器,闭包等语法
51.如何抓取手机端数据?
1.和pc端连接同一个网络
2.配置手机端的代理,ip填写pc的ip,端口填写8888
打开花瓶,访问手机端网页/app即可
52.GIT常用命令有哪些?
git add添加修改文件
git commit 提交修改到本地仓
git merge 合并分支
git pull拉取远程仓库版本
git push 推送本地仓到远程仓
git log 查看commit历史记录
53git仓库在哪?
码云/github/公司内部服务器
55.Git的可视化工具
TortoiseGit 小乌龟
54GIT出现代码冲突怎么解决?
打开冲突文件
删除特殊符号 <== === ==>
保留你想保留的代码,删除你想删除的代码
重新提交即可
55.爬虫框架scrapy的工作流程?
a、spider解析下载器下下来的response,返回item或是links
b、item或者link经过spidermiddleware的process_spider_out( )方法,交给engine
c、engine将item交给item pipeline ,将links交给调度器
d、在调度器中,先将requests对象利用scrapy内置的指纹函数生成一个指纹对象
e、如果requests对象中的don't filter参数设置为False,并且该requests对象的指纹不在信息指纹的队列中,那么就把该request对象放到优先级队列中
f、从优先级队列中获取request对象,交给engine
g、engine将request对象交给下载器下载,期间会通过downloadmiddleware的process_request方法
h、下载器完成下载,获得response对象,将该对象交给engine,期间会经过downloadmiddleware的process_response( )方法
i、engine将获得的response对象交给spider进行解析,期间会经过spidermiddleware的process_spider_input()的方法
j、从a开始循环
56.爬取的内容怎么去重?
利用数据库,根据信息的特定字段去重。
根据数据和url去去重;
根据scrapy自带的去重;
还可以用md5对内容加密后再比较;
使用布隆过滤去重;
57如何提高爬虫效率
1.爬取方面,利用异步io。
2.处理方面,利用消息队列做生产者消费者模型
3.多线程
4.多进程
5.分布式
6.提升网速
7.部署高配置服务器中
46.待续…