1. HTTP/IP相关协议,分别位于哪层 http协议是超文本传输协议,http协议是基于TCP/IP通信协议来传递数据 http协议工作与c/s架构上,浏览器作为http的客户端通过URL向http服务端即web服务器发送所用请求。web服务器收到所有请求后,向客户端发送响应信息, http特点是短连接,无状态 地址栏键输入URL,按下回车之后经历了什么? 1.浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址 2.解析出IP地址后,根据IP地址和默认端口80,和服务器建立TCP连接 3.浏览器发出读取文件的http请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器 4.服务器对浏览器请求做出响应,并把对应的html文件发送给浏览器 5.释放TCP连接 6.浏览器将该HMTL渲染并显示内容 2. TCP/UDP区别 TCP协议是面向连接,保证高可靠性(数据无丢失,数据无失序,数据无错误,数据无重复达到)传输层协议 UDP:数据丢失,无秩序的传输层协议(qq基于UDP协议与TCP的混合开发) 3. webscoket websocket是基于http协议的,可持续化连接 轮询:浏览器每隔几秒就发送一次请求,询问服务器是否有新消息 长轮询:客户端发起连接后,如果没有消息,就一直不返回response给客户端,直到有消息返回,返回完之后,客户端再次发起连接 4. RabbitMQ: 服务器端有Erlang语言来编写,支持多种客户端,只会ajax,用于分布式系统中存储转发消息,在易用性、扩展性、高可用性的方面不俗。 connection是RabbitMQ的socket连接,它封装了socket部分相关协议逻辑 connectionFactroy为connection的制造工厂 channel是我们与RabbitMQ打交道的最重要的一个接口,大部分的业务操作是在chaanel这个接口中完成,包括定义Queue、定义Exchange、 绑定Queue与Exchange,发布消息等 5. 页码越大速度越慢,为什么以及如何解决? -原因:页码越大向后需要扫描的行数越多,因为每次都是从0开始 -解决:1.限制显示得页数 2.记录当前页数ID最大值和最小值,再次分页时,根据ID现行筛选,然后分页 6. 什么是接口? -Python中接口是url -Java/C# 有个专门的类(interface),约束并继承(实现)了他的类中必须含有IFOO中的方法 7. Python里面如何生成随机数? 答:random模块 随机整数:random.randint(a,b):返回随机整数x,a<=x<=b random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值。 随机实数:random.random( ):返回0到1之间的浮点数 random.uniform(a,b):返回指定范围内的浮点数。 8. 有没有一个工具可以帮助查找python的bug和进行静态的代码分析? 答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个进阶工具可以分析Python代码中的错误,查找不符合代码风格标准和有潜在问题的代码 9. 支付宝支付 -加密方式:RSA -公钥私钥: -商户私钥 -支付宝公钥 - 精度(小数点后两位) -支付成功后,断点宕机(有一天时间可以处理) -成功:return HttpResponse("success") 10. 原生Ajax - XMLHttpRequest(原生对象) 11. git协同开发 a. 怎么通过git做得协同开发? git checkout -b dev 创建dev分支,然后切换到dev分支 每个人一个分支,一到两天或者一个小功能合并一次 b. 是否做代码review? 合并一部分代码到review分支给组长查看 c. 开发过程中出现bug如何做? 创建一个分支来解决bug d. git rebase作用? rebase操作可以把本地未push的分叉提交历史整理成直线 e. 给别人开源代码贡献力量。 f. 使用的github、gitlab ? 18美金 自己搭建服务器,费用贵 PS:隐藏敏感信息 12. 轮询和长轮询 轮询是每隔多久的时间请求一次 长轮询是请求到来就夯住,并设置超时时间,有值就瞬间返回。 13.什么是响应式布局?(前端css) @media属性+(限制条件)之后根据用户操作而动态变化 14. python中的unittest是什么? 在python中,unittest是python中的单元测试框架,它拥有支持共享搭建、自动测试、在测试中暂停代码、将不同测试迭代成一组 15. tornodo的ioloop知道是什么吗? 事件循环 16. uwsgi和wsgi wsgi:是web服务器网关接口,是pyhton应用程序或框架和web服务器之间的一种接口,其广泛使用的是django框架。 uwsgi:是一个web服务器,它实现了wsgi协议,Nginx中HttpUwsgiModule的作用是与Uwsgi服务器进行交换 17. 解释下django - debug -toolbar的使用 使用django开发站点时,可以使用django-debug-toolbar来进行调试,在settings.py中添加 'debug—toolbar.midleware.Debug ToolbarMiddleware'到项目的MIDDLEWARE_CLASSES内。 18. 多进程,多线程,协程,GIL GIL:全局解释器锁,是锁在cpython解释器上,导致同一时刻,同一进程只能有一个线程被执行 多进程:多进程模块multiprocessing来实现,cpu密集型,IO计算型可以用多进程 多线程:多线程模块threading来实现,IO密集型,多线程可以提高效率 协程:依赖于geenlet,对于多线程应用。cpu通过切片的方式来切换线程间的执行,遇到IO操作自动切换,线程切换时需要耗时,而协成好处没有切换的消耗,没有锁定概念。 进程:是资源管理单位,进程是相互独立的,进程是线程的容器,进程是程序的实体。 线程:是最小的执行单位,线程的出现为了降低上下文切换的消耗,提供系统的并发性 19. IO多路复用/异步非阻塞 IO多路复用:通过一种机制,可以监听多个描述符 select/poll/epoll select:连接数受限,查找配对速度慢,数据由内核拷贝到用户态 poll:改善了连接数,但是还是查找配对速度慢,数据由内核拷贝到用户态 epoll:epoll是linux下多路复用IO接口,是select/poll的增强版,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率 异步非阻塞:异步体现在回调上,回调就是有消息返回时告知一声儿进程进行处理。非阻塞就是不等待,不需要进程等待下去,继续执行其他操作,不管其他进程的状态。 20. 什么是pickling和unpickling? Pickle模块读入任何python对象,将它们转换成字符串,然后使用dump函数将其转储到一个文件中——这个过程叫做pickling 反之从存储的字符串文件中提取原始python对象的过程,叫做unpickling 21. os与sys区别: os是模块负责程序与操作系统的交互,提供了访问操作系统底层的接口 sys模块是负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控Python时运行的环境 22. 实现一个单例模式 _new_()在 _init_()之前被调用,用于生成实例对象。利用这个方法和类的属性的特点可以实现设计模式的单例模式。 单例模式是指创建唯一对象,单例模式设计的类只能实例,实例化1个对象 class Singleton(object): __instance=None def __init__(self): pass def __new__(cls, *args, **kwargs): if Singleton.__instance is None: Singleton.__instance=object.__new__(cls,*args,**kwargs) return Singleton.__instance