1、Django生命周期a。wsgi,创建一个socketserver来接收用户请求,并第一次封装请求。b.中间件,自定义一些在所有请求到来响应之前的操作。C。路由匹配,在url和view函数的对应关系中,根据当前请求url找到对应的函数。d.执行视图函数,业务处理【通过ORM从数据库中获取数据,然后获取模板,然后渲染数据和模板】e.然后遍历所有的中间件。F。通过wsgi将响应返回给用户。2、TCP/IP由四层组成:数据链路层、网络层、传输层和应用层。数据链路层这是TCP/IP软件的最底层,负责接收IP数据报并通过网络发送,或者从网络接收物理帧,提取IP数据报,交给IP层。网络层负责相邻计算机之间的通信。它的功能包括三个方面:a、处理来自传输层的数据包传输请求,收到请求后,将数据包打包成IP数据报,填充头部,选择到达目的机的路径,然后将数据报发送给适当的网络接口。b.处理输入的数据报:首先检查其合法性,然后进行路由——如果数据报已经到达目的机,则去掉报头,将剩余部分交给合适的传输协议处理;如果数据报尚未到达目的地,则转发该数据报。C。处理路径、流量控制和拥塞等问题。传输层提供应用程序之间的通信。它的功能包括:格式化信息流;b.提供可靠的传输。为实现后者,传输层协议规定接收端必须发回确认,如果丢包则必须重发。应用层为用户提供了一套常用的应用程序,如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供一个接口来在网络中的其他主机上进行注册。TELNET会话提供基于字符的虚拟终端。文件传输访问FTP使用FTP协议在网络中的机器之间提供文件复制。3、使用orm和nativesql处理并发问题的优缺点是什么?1、orm开发速度快,操作简单。让开发更面向对象#执行速度慢。在处理多表联合查询等复杂操作时,ORM的语法会变得复杂。2、SQL开发速度慢,但执行速度快。性能强4、Web开发中有哪些技术手段可以防止SQL注入?1.使用绑定变量预编译的SQL语句2.对用户机密信息进行严格加密处理3.不要在生产环境中随意开启Webserver的报错显示4.使用正则表达式过滤传入参数5.字符串过滤6.检查是否包含非法字符5、说说CSRF的原理你可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF可以做的包括:以你的名义发送邮件和信息,窃取你的账户,甚至购买商品,转移虚拟货币……造成的问题包括:个人隐私泄露和财产安全。受害者要完成一次CSRF攻击,必须依次完成两个步骤:1.登录可信网站A,在本地生成cookie。2、在不退出A的情况下访问危险网站B。6、如果用户抱怨网页加载很慢,不是网速的问题,显示需要10秒左右。现在让你定位这个问题。请用最直接的方法快速定位问题所在。不能保证100%能定位到,但是你的方法一定是80%或者90%能定位到问题的位置。7、docker与虚拟机传统的虚拟机技术是虚拟出一套硬件,在其上运行完整的操作系统,然后在该系统上运行所需的应用进程。操作系统的磁盘起步是几十G,内存起步是几G。启动的时候,所有应该检测和加载的东西,都要从头到尾加载。这个过程非常缓慢。容器中的应用进程直接运行在宿主机的内核上。容器没有自己的内核,也没有硬件虚拟化。因此,容器比传统的虚拟机更轻。每个容器都有自己的文件系统,容器之间的进程不会互相影响,计算资源可以区分。8、如何隔离docker容器Linux中的PID、IPC、网络等资源是全局的,NameSpace机制是一种资源隔离方案。在这种机制下,这些资源不再是全局的,而是属于某个特定的NameSpace,各个NameSpace下的资源互不干扰。虽然通过NameSpace技术可以实现资源隔离,但是进程仍然可以不受控制地访问系统资源,如CPU、内存、磁盘、网络等。为了控制进程对容器中资源的访问,Docker使用了控制组技术(即就是,cgroup),通过cgroup可以控制容器中进程对系统资源的消耗,比如可以限制一个容器使用的内存上限,它可以运行在哪些CPU上等等。有了这两种技术,容器看起来真的很像独立的操作系统。9、Celery的架构由消息代理(messagebroker)、任务执行单元(worker)和任务执行结果存储(taskresultstore)组成。1、客户端为python(django/flask等)发布任务。2、发布的任务存储在任务队列中,可以存储在redis、rabbitMQ、MessageQueue、MySQL中。一般redis多用于django/flask程序中。3、任务处理算子会不断从任务队列中获取任务执行10、redis基本数据类型String字符串:Hash(散列)List(列表)Set(集合)zset(sortedset:有序集合)11、django常用中间件缓存中间件通用中间件内容压缩中间件(GZip)本地化中间件(Locale)消息中间件(Message)更常用于cookie或session消息功能。安全中间件SecurityCSRF保护认证框架Authentication堆和栈的区别栈内存用于存放方法帧和局部变量(基本类型的变量,对象的引用变量),方法结束后栈和栈中的变量会被释放叫做。访问速度比堆快,仅次于寄存器。栈数据可以共享,多个引用可以指向同一个地址。必须确定堆栈中存储的数据的大小和生命周期,缺乏灵活性。堆内存用于存放new创建的对象和数组,由JVM管理。由于运行时动态分配内存,访问速度慢。栈中的变量指向堆内存中的变量,也就是Java中的指针java内存泄漏和溢出的区别1.内存泄漏memoryleak:指的是程序申请内存后,无法释放申请的内存空间。一次内存泄漏看似影响不大,但内存泄漏累积的后果就是内存溢出。2、内存溢出内存不足:当程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一个存储int类型数据的存储空间,你却存储了long类型数据,那么结果就是如果内存不够,这时候就会报错OOM,也就是所谓的内存溢出。Iterator的理解Iterator为统一遍历集合元素提供了统一的接口,Collection接口实现了Iterator接口。每个集合通过实现Iterator接口中的iterator()方法返回一个实例,然后对元素进行迭代,但是在迭代元素时不能使用collection方法删除元素,否则会抛出异常,可以使用Iteratorinterfaceremove()方法执行具有含义的Java面向对象功能的删除。封装、继承、抽象、多态1、封装:封装的目的是实现程序的“高内聚、低耦合”,防止程序相互依赖而带来的变更影响。封装就是保证操作同一??个事物的方法和相关的方法放在同一个类中,方法和它操作的数据放在同一个类中。2、抽象:抽象就是找出事物的相似性和共性,然后将这些事物归为同一类。该类别只考虑这些事物的相似性和共性,忽略与当前主题无关的因素。3、继承:子类继承父类的内容作为自己的内容,并可以增加新的内容或修改父类的内容以更适合特殊需要。提高了程序的可重用性和可扩展性。4、多态性:多态性是指程序中定义的引用变量所指向的特定类型,通过引用变量发出的方法调用在编程时不是确定的,而是在程序运行时确定的,即引用variableisinverted静态变量和实例变量的区别会指向哪个类?静态变量前面必须加上关键字static,而实例变量则不会。实例变量是属于对象的属性。必须先创建一个实例对象,它里面的实例变量才能分配空间和使用实例变量。静态变量不属于任何实例对象,而是属于类,也称为类变量。只要程序加载了类的字节码,它就会被分配空间,而不会创建任何实例对象。总之,静态变量可以不创建任何对象直接使用,而实例变量需要创建实例对象才能使用。MySQL主键与索引的关系和区别主键是用来标识数据库记录的唯一性。不允许重复记录,键值不能为空。主键也是一种特殊的索引。数据表中只能有一个主键,但可以有多个索引。使用主键会自动在数据库中创建主索引,也可以在非主键上创建索引,以方便查询效率。GC的基本原理当程序员创建一个对象时,GC就开始监视这个对象的地址、大小和使用情况。GC使用有向图来记录和管理堆中的所有对象。该方法用于判断哪些对象“可达”,哪些对象“不可达”。当确定为“不可达”时,GC负责回收这些内存空间。垃圾回收器可以立即回收内存,程序员可以手动指定system.gc()方法通知GC进行回收,但是Java语言规范不保证GC一定会执行12、djangouuid字段是self-递增
