python开发一些知识点

吐血整理。
1、 正则表达式(这个肯定得会,爬虫啥的都要用)
^ 行首匹配,和在[]里的不是一个
$ 行尾匹配
. 匹配任意一个字符(除了\n)
(xyz) 匹配小括号内的xyz(作为一个整体去匹配)
[] 匹配[]中列举的字符
\d 匹配数字,即0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格,tab键
\S 匹配非空白
\w 匹配单词字符,即a-z、A-Z、0-9、_
\W 匹配非单词字符
a* 匹配前一个符字出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有1次
? 匹配前一个字符出现1次或者0次,要么有1次,要么没有
{m} 匹配前一个字符出现m次
x{n,} 匹配至少n个x
{m,n} 匹配前一个字符出现从m到n次
[\u4E00-\u9FA5] 匹配汉字
2、 python有哪些数据类型:数字,字符串,列表,元组,字典,集合
3、 python2和python3的区别:首先,python2默认采用的是Ascll编码格式,python3默默认采用utf8。Print方法 python中的print不用加括号,是一个类,python3中print是一个函数,必须加括号。Python2中input函数输入的是数字,python3中输入的是字符串。Python2中range返回的是一个列表,python3中返回的是一个可迭代对象。等
4、 列表和字典的区别:列表通过索引来获取值,字典通过键获取值。字典的原理是hash算法,占用内存不同,字典占用内存较大。字典查找和插入的速度极快。
5、 元组的实现原理。
myTuple=(1,2,3,4)
id(myTuple[0])
1652911120
a=1
id(a)
1652911120
元组第一位元素的地址和整形变量a的地址是一样的,说明他们都指向常量1所在的地址空间,常量是不可重写的,所以元组的元素不可重写,但元组却可以重新赋值,此特性和C++的指针常量完全一样:指向的内存地址区域不可重写,但却可以重新指向其他内存区域
6、 类和对象的区别:类是具有相同属性和服务的一组对象的集合,类是抽象的,其内部包
括属性和服务两个主要部分,而对象用于表示现实中该类事物的个体,对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,对象是类的一个具体。它是一个实实在在存在的东西,类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。
7、 面向对象和面向过程:面向过程就是分析出解决问题所需要的步骤,然后用函数把这些
步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
8、 python面向对象中super是干啥用的?继承父类的方法属性;super在新式类中才有,
在python2中要写object,python3中不用。super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
9、 python中的魔法方法__init__和__new__的区别:__init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。
10、简述一下ORM:ORM,全拼Object-Relation Mapping,意为对象-关系映射,实现了
数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面向对象编程,orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句
11、git发request大概流程:新建分支,分支开发,撰写提交信息,与主干同步,合并 commit,
推送代码到远端,请求代码合并 merge-request
12、类中self的作用:为了方便使用对象自身的性质。
13、俩个栈实现一个队列:栈A用来作入队列,栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列)
14、MySQL中序列的使用:auto_increament
15、TCP断开连接过程,什么情况下进入time_wait阶段?当关闭一个 socket 连接时,主动关闭一端的 socket 将进入TIME_WAIT状态,而被动关闭一方则转入CLOSED状态。
具体过程如下:1、 客户端发送FIN报文段,进入FIN_WAIT_1状态。2、 服务器端收到FIN报文段,发送ACK表示确认,进入CLOSE_WAIT状态。3、 客户端收到FIN的确认报文段,进入FIN_WAIT_2状态。4、服务器端发送FIN报文端,进入LAST_ACK状态。5、 客户端收到FIN报文端,发送FIN的ACK,同时进入TIME_WAIT状态,启动TIME_WAIT定时器,超时时间设为2MSL。6、 服务器端收到FIN的ACK,进入CLOSED状态。7、客户端在2MSL时间内没收到对端的任何响应,TIME_WAIT超时,进入CLOSED状态。
16、Nginx:niginx是一款轻量级的Web 服务器/反向代理服务器, 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好. 轻量级高并发服务器Nginx.
Nginx使用基于事件驱动架构,使得其可以支持数以百万级别的TCP连接
高度的模块化和自由软件许可证使得第三方模块层出不穷(这是个开源的时代啊~)
Nginx是一个跨平台服务器,可以运行在Linux,Windows,FreeBSD,Solaris,AIX,Mac OS等操作系统上。正向代理(翻墙软件):正向代理最大的特点是客户端非常明确要访问的服务器地址,屏蔽或者隐藏了真实客户端信息。(1)访问原来无法访问的资源,如Google(2) 可以做缓存,加速访问资源(3)对客户端访问授权,上网进行认证(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。
反向代理:比如淘宝每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署也就是通过部署多台服务器来解决访问人数限制的问题;淘宝网站中大部分功能也是直接使用Nginx进行反向代理实现的

客户端是无感知代理的存在的,反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理,“它代理的是服务端,代服务端接收请求”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。反向代理的作用:(1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网(2)负载均衡,通过反向代理服务器来优化网站的负载,常用方法有哈希,轮询。
17、MySQL对于千万条数据量有什么优化方法:1、分库分表很明显,一个主表(也就是很重要的表,例如用户表)无限制的增长势必严重影响性能,分库与分表是一个很不错的解决途径,也就是性能优化途径,现在的案例是我们有一个1000多万条记录的用户表members,查询起来非常之慢,做法是将其散列到100个表中。2、不停机修改mysql表结构,同样还是members表,前期设计的表结构不尽合理,随着数据库不断运行,其冗余数据也是增长巨大。
18、死锁产生的必要条件?MySQL发生死锁了,怎么解决?互斥条件,请求和保持条件,不可剥夺条件,环路等待条件。解决:终止进程,终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态中解除出来;抢占资源,从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以打破死锁状态。
19、redis基本数据类型。列表,字符串,哈希,集合,有序集合
20、get和post的区别?get请求无消息体,只能携带少量数据 post请求有消息体,可以携带大量数据。携带数据的方式:get请求将数据放在url地址中,post请求将数据放在消息体中,GET请求提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
21、HTTP协议,请求头和响应头信息?HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。请求报文包含三部分:a、请求行:包含请求方法、URI、HTTP版本信息b、请求首部字段c、请求内容实体;响应报文包含三部分:a、状态行:包含HTTP版本、状态码、状态码的原因短语b、响应首部字段c、响应内容实体
22、输入一个网址的整个请求流程?(1)域名解析:分解出协议名、主机名、端口、对象路径等部分,得到IP地址(2)建立TCP连接,三次握手,把以上部分结合本机自己的信息,封装成一个HTTP请求数据包(3)Web浏览器向Web服务端发送HTTP请求报文(4)服务器响应HTTP请求(5)浏览器解析HTML代码,并请求HTML代码中的资源(JS,CSS,图片)(这是自动向服务器请求下载的)(6)浏览器对页面进行渲染呈现给客户(7)断开TCP连接。HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题
23、长连接和短连接及其优缺点?HTTP的长连接和短连接本质上是TCP长连接和短连接。在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源
24、数据库的集中连接?1、django自带ORM框架和django.db三方库2、python中最著名的SQLAlchermy ORM框架
25、多态以及多态怎样实现?python中多态的实现:多个不同的类具有共同的方法f,各个类调用方法f,返回值不同。把方法f提取出来,封装为一个接口g。不同类的实例作为参数,传入接口g,得到不同返回值。多态性使用的前提:①类的继承关系 ②要有方法重写。python中的多态体现
26、进程和线程和协程?进程是操作系统进行资源分配和调度的基本单位,多个进程之间相互独立。直白的讲:进程是应用程序的启动实例。线程是CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源。缺点是一个线程的崩溃,可能会导致整个进程的崩溃。IO密集型用多线程。CPU密集型用多进程,因为如果IO操作少,用多线程的话,线程会共享一个全局解释器锁。不能充分发挥多线程的优势。协程,又称微线程,线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。也就是说在同一线程内一段代码在执行过程中会中断然后跳转执行别的代码,接着在之前中断的地方继续开始执行,类似与yield操作。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态。协程的优点:1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力)(2)无需原子操作锁定及同步的开销(3)方便切换控制流,简化编程模型(4)高并发+高扩展性+低成本:一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理。协程的缺点:(1)无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是cpu密集型应用。2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序。
传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高:
27、数据库的存储引擎?1、InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;2、MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;3、InnoDB 支持外键,MyISAM 不支持;4、对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;5、清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;
28、Linux软连接和硬链接:ln命令用于给文件创建链接。软链接:类似于 Windows 系统中给文件创建快捷方式,即产生一个特殊的文件,该文件用来指向另一个文件,此链接方式同样适用于目录。硬链接:我们知道,文件的基本信息都存储在 inode 中,而硬链接指的就是给一个文件的 inode 分配多个文件名,通过任何一个文件名,都可以找到此文件的 inode,从而读取该文件的数据信息。
29、python垃圾回收算法?python垃圾回收主要以引用计数为主,标记-清除和分代清除为辅的机制,其中标记-清除和分代回收主要是为了处理循环引用的难题。引用计数算法
当有1个变量保存了对象的引用时,此对象的引用计数就会加1,当使用del删除变量指向的对象时,如果对象的引用计数不为1,比如3,那么此时只会让这个引用计数减1,即变为2,当再次调用del时,变为1,如果再调用1次del,此时会真的把对象进行删除
30、迭代器,生成器,装饰器,闭包?迭代器就是用于迭代操作的的对象,遵从迭代协议(内部实现了__iter__()和__next__()方法,可以像列表(可迭代对象,只有__iter__()方法)一样迭代获取其中的值,与列表不同的是,构建迭代器的时候,不像列表一样一次性把数据加到内存,而是以一种延迟计算的方式返回元素,即调用next方法时候返回此值。生成器本质上也是一个迭代器,自己实现了可迭代协议,与生成器不同的是生成器的实现方式不同,可以通过生成器表达式和生成器函数两种方式实现,代码更简洁。生成器和迭代器都是惰性可迭代对象,只能遍历一次,数据取完抛出Stopiteration异常。区别:生成器一定是迭代器,但是迭代器不一定是生成器,因为创建一个迭代器只需要实现iter和next()方法就可以了,并不一定要使用yield实现。生成器的唯一注意事项就是:生成器只能遍历一次。装饰器:在不修改原函数的情况下,给原函数添加新功能。一共有俩个函数,外层函数返回的是内层函数的函数名,用的时候在被装饰的函数上面加上@装饰器名。闭包:闭包的概念就是当我们在函数内定义一个函数时,这个内部函数使用了外部函数的临时变量,且外部函数的返回值是内部函数的引用。Nonlocal关键字
31、import搜索过程:首先判断这个module是不是built-in即内建模块,如果是则引入内建模块,如果不是则在一个称为sys.path的list中寻找。sys.path在python脚本执行时动态生成,包括以下3个部分:a、脚本执行的位置,即当前路径b、环境变量中的PYTHONPATH, 即.bash_profilec. c、安装python时的依赖位置
32、HTTP和HTTPS的区别:HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。HTTPS和HTTP的区别主要如下:1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
33、红黑树:简单来说,就是平衡的二叉查找树,结点是红色或黑色,根结点是黑色,每个叶子结点都是黑色的空结点(NIL结点),每个红色结点的两个子结点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色结点),从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点。红黑树能够以O(log2(N))的时间复杂度进行搜索、插入、删除操作,红黑树可以能确保树的最长路径不大于两倍的最短路径的长度,所以可以看出它的查找效果是有最低保证的。在最坏的情况下也可以保证O(logN)的,这是要好于二叉查找树的。因为二叉查找树最坏情况可以让查找达到O(N)。需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。Linux内核在管理vm_area_struct时就是采用了红黑树来维护内存块的。linux中进程的调度用的是红黑树。
34、cookie和session的区别:1,session 在服务器端,cookie 在客户端(浏览器)2、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效,存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置3、cookie安全性比session差。
35、对分布式的理解:在面对一些高并发,海量的数据任务时,一台服务器往往是不够的,而分布式就是让多台服务器协同工作,完成单台服务器无法处理的任务。即就是同一个业务拆成多个子业务,部署在不同服务器上。
36、线程同步的方法:1. 锁机制threading的Lock类,用该类的acquire函数进行加锁,用realease函数进行解锁,当一个线程调用锁的acquire()方法获得锁时,锁就进入“locked”状态。每次只有一个线程可以获得锁。如果此时另一个线程试图获得这个锁,该线程就会变为“blocked”状态,称为“同步阻塞”, 直到拥有锁的线程调用锁的release()方法释放锁之后,锁进入“unlocked”状态。线程调度程序从处于同步阻塞状态的线程中选择一个来获得锁,并使得该线程进入运行(running)状态。2. 信号量:信号量也提供acquire方法和release方法,每当调用acquire方法的时候,如果内部计数器大于0,则将其减1,如果内部计数器等于0,则会阻塞该线程,知道有线程调用了release方法将内部计数器更新到大于1位置。3. 条件判断:所谓条件变量,即这种机制是在满足了特定的条件后,线程才可以访问相关的数据。它使用Condition类来完成,由于它也可以像锁机制那样用,所以它也有acquire方法和release方法,而且它还有wait,notify,notifyAll方法。4. 同步队列:put方法和task_done方法,queue有一个未完成任务数量num,put依次num+1,task依次num-1.任务都完成时任务结束。
37、进程间通信:管道,消息队列,共享内存。进程地址空间:父子进程代码共享,数据各自开辟空间,采用写时拷贝私有一份。
38、redis如何做持久化:一种是RDB(快照)持久化(默认)(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。优点:是一个紧凑压缩的二进制文件,Redis加载RDB恢复数据远远快于AOF的方式。另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件),AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。优点:实时持久化。
39、restful架构:(表征性状态转移),一种软件架构风格,描述的是在网络中client和server的一种交互形式,使得软件更简洁,更有层次,更易于实现缓存机制。规定:a、每一个url代表一种资源,客户端和服务器之间,传递这种资源的某种表现层c、客户端通过get,post,delete,update四个HTTP动词来对资源进行操作。
40、tcp实现可靠传输:1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。2、数据校验3、数据合理分片和排序:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每 一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于TCP的特性,当某一片数据传送中丢失时,接收方便 无法重组数据报.将导致丢弃整个TCP数据报.tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。4、流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。5、拥塞控制:当网络拥塞时,减少数据的发送
41、flask,django面试题、https://blog.csdn.net/qq_41891803/article/details/81272575
https://www.cnblogs.com/chongdongxiaoyu/p/9403399.html
42、MVC,MVT: MVC:软件的设计典范,用一种业务逻辑,数据,界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。 核心思想:解耦,让每一个模块独立的Model(模型):处理应用程序数据逻辑的部分,通常模型对象负责数据库存取数据。 View(视图):是应用程序中处理数据显示的部分,通常视图依据模型数据建立的。Controller(控制器):是应用程序处理用户交互的部分,通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
MVT:本质上与MVC模式没有什么差别,也是各组件为了保持松耦合关系,知识定义上有些许不同。
编程模式:model(模型):负责业务对象与数据库的对象(ORM)
Template(模板):负责如何把页面展示给用户
View(视图):负责业务逻辑,并在适当的时候调用Model
和Template。
44、mysql 事务特征:原子性(A):事务是最小单位,不可再分。一致性©:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败。隔离性(I):事务A和事务B之间具有隔离性。持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)
45、docker了解不?Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。Dockers的思想来源于集装箱,比如在一个大货轮上,各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。现在都流行云计算了,云计算就好比大货轮,docker就是集装箱。A、不同的应用程序可能有不同的应用环境,比如开发的网站,依赖的软件环境并不一样,要是把他们安装在一个服务器上要调试很久,而且很麻烦。我们可以在服务器上创建不同的虚拟机在不同的虚拟机放置不同的应用,但是这样开销太大了。比如我电脑上装了一个虚拟机,运行起来都好卡。。而docker呢,可以实现虚拟机隔离应用环境的功能,且开销比较小。B、比如开发软件用的是Ubuntu,但是运维管理用的是centos,那么在运维人员部署项目的时候,要是遇到有些东西不兼容,就会很麻烦,无形之中增加了工作量,但是,要是有docker你就可以将开发环境直接封装给运维人员,这就很方便,部署速度也很快。C、在服务器负载方面,如果你单独开一个虚拟机,那么虚拟机会占用空闲内存的,docker部署的话,这些内存就会利用起来。

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值