运维岗春招--part2

时间:2020-04-28
本文章向大家介绍运维岗春招--part2,主要包括运维岗春招--part2使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

段页式存储

段式是用户为方便编程自己定义的,页式是系统为方便管理确定的。段式是一维的,段号;页式是二维的段号+页号。

分页是操作系统进行的,分段是用户确定的

段式的逻辑地址可以不连续,页式的逻辑地址是连续的

Mysql中的myisam与innodb的区别

MyISAM引擎
1、锁级别为表锁,表锁优点是开销小,加锁快;缺点是锁粒度大,发生锁冲动概率较高,容纳并发能力低,这个引擎适合查询为主的业务。
2、此引擎不支持事务,也不支持外键。
3、INSERT和UPDATE操作需要锁定整个表;
4、它存储表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。
 
InnoDB引擎
1、支持事务处理、ACID事务特性;
2、实现了SQL标准的四种隔离级别;
3、支持行级锁和外键约束;
4、可以利用事务日志进行数据恢复。
5、锁级别为行锁,行锁优点是适用于高并发的频繁表修改,高并发是性能优于 MyISAM。缺点是系统消耗较大。
6、索引不仅缓存自身,也缓存数据,相比 MyISAM 需要更大的内存。
 

varchar(10)和varchar(100)有什么区别?

先举个例子:如果要存储'hello12345'这个字符串,使用varchar(10)varchar(100)存储,占用磁盘空间是一样的么?

答案是:占用磁盘的存储空间是一样的。

(此时,varchar(10)和 varchar(50)存储,所占用的空间一样

既然存储时磁盘占用空间一样,还有什么其他的区别吗?

虽然使用varchar(100)varchar(10)存储'hello12345'字符串占用的磁盘空间一样,但是消耗的内存不一样,更长的列消耗的内存会更多。因为MySQL通常会分配固定大小的内存块来保存内部值。尤其是使用临时表进行排序会操作时,会消耗更多的内存。在使用磁盘进行排序时,也是一样。

所以此时varchar(100) 会消耗更多的内存。

varchar(10)和varchar(100)的优劣势是什么?

因为涉及到文件排序或者基于磁盘的临时表时,更长的列会消耗更多的内存,所以在使用使用时,我们不能太过浪费内存空间,还是需要评估实际使用的长度来设置字符的长度。推荐冗余10%的长度(因业务而异)。

所使用varchar(10)会更加节约内存空间,但是实际业务中字符长度一旦超过10就需要更改表结构,在表数据量特别大时,不易拓展

而这时使用更长的列:varchar(100)无需更改表结构,业务拓展性更好

字符串“hello”,用 char(10)和varchar(10)存储,所占用的空间不一样

char的占用存储空间是固定的,不是动态分配的,此时为char(10) == len(10)

varchar(10) == len(hello)

PYTHON装饰器

作用(解耦、为已有函数添加额外的功能)

正则表达式:

 "^":匹配行或字符串的起始位置。例如匹配一个以 a  开头的字符串,"^a"

 "$":匹配行或字符串的结尾。例如匹配一个以 b 结尾的字符串,"b$"

 "\b":匹配一个单词边界,也就是字和空格间的位置。例如提取出 "we are joker" 中的 "are","\bare\b"

更多:(https://www.cnblogs.com/mayytest1202/p/10307463.html

计算机网络套接字:

 http://blog.itpub.net/28624388/viewspace-2649629/

Socket可以作插口或者插槽,可以想象为一根网线,一头插在客户端,一头插在服务端,然后进行通信。所以在通信之前,双方都要建立一个Socket.

 

占用字节问题:

utf-8中文字符占三个字节,GB18030兼容GBK兼容GB2312中文字符占两个字节,ISO8859-1是拉丁字符(ASCII字符)占一个字节

两者的区别:

re.search用来查找,单个的字符串,从中提取所需的,不同域值,即不同group的值;(找到了就返回)

re.findall,一次性提前多个匹配到

  • 单个完整的字符串(可以后续接着用re.search再去提取不同group的值)
  • 一个tuple值,其中包括了每个group的值 -> 省却了在用re.search提起不同组的值
  • (找全部)

 re.match()  正则表达式模块re的 ~方法用来在字符串开始处进行指定模式的匹配。

 如何在Python中实现多线程?

1. 答: Python有一个multi-threading包,但是如果你想让multi-thread加速你的代码,那么使用它通常不是一个好主意。

2. Python有一个名为Global Interpreter Lock(GIL)的结构。 GIL确保只有一个“线程”可以在任何时候执行。一个线程获取GIL,做一点工作,然后将GIL传递到下一个线程。

3. 这种情况很快发生,因此对于人眼看来,您的线程似乎并行执行,但它们实际上只是轮流使用相同的CPU核心。

所有这些GIL传递都增加了执行的开销。这意味着如果您想让代码运行得更快,那么使用线程包通常不是一个好主意。

这是什么意思: *args,**kwargs?我们为什么要用呢?

我们用*args当我们不确定将多少个参数传递给函数时,或者我们是否要将存储的列表或参数元组传递给函数时。**kwargs当我们不知道将多少关键字参数传递给函数时,或者它可以用于将字典的值作为关键字参数传递时使用。标识符args和kwargs是一个约定,你也可以使用*bob和**billy,但这不是明智之举.

从出生到现在过了多少天

import datetime
 
now_day = datetime.datetime(2020,8,21)
birth_day = datetime.datetime(1996,8,21)
passed_days = now_day - birth_day
print("从出生到现在一共经过了%d天" % passed_days.days)

 

linux文件权限构成

Linux用户分为:拥有者、组群(Group)、其他(other)
linux中的文件属性过分四段,如  -rwzrwz---
第一段  -  是指文件类型 表示这是个普通文件
文件类型部分
-为:表示文件
d为:表示文件夹
l为:表示<a href="https://www.baidu.com/s?wd=%E9%93%BE%E6%8E%A5%E6%96%87%E4%BB%B6&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y3nWnzPWbzmHNBn1RYuHmd0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3En1TvPHmzn1b4" target="_blank">链接文件,可以理解为 windows中的快捷方式(link file)
b为:表示里面可以供存储周边设备
c为:表示里面为一次性读取装置
 
第二段  rwz  是指拥有者具有可读可写可执行的权限  
类似于windows中的所有者权限比如 administrator 对文件具有 修改、读取和执行权限
 
第三段  rwz 是指所属于这个组的成员对于这个文件具有,可读可写可执行的权限      
类似于windows中的组权限比如administrators组,属于这个组的成员对于文件的都有 可读可写可执行权限
 
第四段  --- 是指其他人对于这个文件没有任何权限
类似于windows中的 anyone 一样就是说所有人对着个文件都会有一个怎样的权限
</a>

  

Linux

echo 输出

export 执行

下列哪种函数参数定义不合法?

A def myfunc(*args):

B def myfunc(a=1,**args):

C def myfunc(*args,a=1):

D def myfunc(arg1=1):

答案是C,在python2中,c选项是错的,因为a=1被当做了默认参数,而默认参数只能在可变参数之前

Python2参数顺序:必选参数、默认参数、可变参数和关键字参数

在Python3中,c选项是对的,因为a=1被当做了命名关键字参数,而命名关键字参数需要在可变参数之后

python3参数顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

python 调用函数的四种方式

1、必须参数(位置参数)
      必需参数:先用形式参数定义,然后在调用时对应位置使用实参(具体的数值)调用,定义的形式参数和调用的实际参数必需一一对应(顺序、数量)。

      def sum(a, b):
          return a + b

      sum(5, 6)

2、关键字参数
      关键字参数:先使用形式参数定义,然后调用时以关键字的形式(形式参数 = 实际参数)传入参数,函数调用时不关心参数的顺序。

      def sub(a, b):
          return a - b

      s1 = sub(a=6, b=3)
      s2 = sub(b=3, a=0)
      s3 = sub(9, b=3)

3、默认参数
      默认参数:默认参数是指函数在定义时,参数被预先赋予相应的默认值。这样在调用时,可以重新赋值, 也可以(对默认参数)不用赋值而使用默认的值。特别注意,默认参数只能定义在后面。

      def mul(a, b=3, c=2):
            print("a:{0}, b:{1}, c:{2}".format(a, b, c))
            return a*b*c

      print(mul(2))
      print(mul(2, b=4))   #若要对默认值参数重新赋值,需要使用 关键字=值 的形式传参
      print(mul(2, b=4, c=6))

 

4、不定长参数
     不定长参数:数需求传入的参数数量不明确的情况下,一般使用 *args或者 **kwargs形式声明参数的形式

    (1)以*args形式声明参数在函数内使用args获取传入的参数(args的值是由参数构成的元组)

     def fun(*args):
           print(args)

     #调用示例1
     fun(1, 2, 3, 4, 'a')
     fun()
     fun(4,'a')

     #调用示例2
     l = [1, 2, 3, 4]
     t = ('a', 'b', 'c')
    d = {1:2, 2:3, 3:4}
    #当传入参数为列表、元组、或者字典的时候,参数名字前需要加*
     fun(*l)
     fun(*t)
     fun(*d)

  (2)**kwargs形式的可变参数,在函数内部kwargs是一个字典,字典的key是我们传入的形式参数的名字,值为实际参数的值,若以字典形式传入时,注意字典的key必须时字符串

    def fun(**kwargs):
          print(kwargs)

    #调用形式1:
    fun(a = 1, b = 2, c = 3)
    fun()

    #调用形式2
    d = {'1':2,'2':3,'3':4}
    fun(**d)

  

原文地址:https://www.cnblogs.com/tfknight/p/12753017.html