Pyhton全栈的知识点(2)

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

 

posted @ 2018-10-21 14:18  知你几分  阅读(144)  评论(0编辑  收藏  举报