Linux运维工程师面试题第四套

Python

1、假设 AAA=[1,1,1,3,5,2,6,1,7,3,45],请问使用python如何在将list里重复的数字过滤掉?

1
>>>list(set(AAA))

【评析】注意,虽然set(list(AAA))的结果好像也是一样的,但是注意set是{},list是[]。而且如果AAA里是中括号套中括号的话,那么不可以使用set(list()),因为没法比。不是哈希。


2、简述一下list和tuple的不同

list是动态的,设定完了可以删减元素,而tuple是静态的,不能删减元素。

【评析】tuple的调用速度更快,如果是一个需要反复调用的数组,用tuple效果更好。

tuple不能索引也不能删减元素,但是其实是可以增加元素的,举个例子:

1
2
3
>>>AAA=(1245)
>>>AAA=AAA[:2]+(3,)+AAA[2:]
>>>print(AAA)              #看看结果。


3、简述一下search()和match()的区别

match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none


4、如何在生成一个随机数?

1
2
>>>import random
>>>random.random()

【评析】这样会生成一个在0~1之间的浮点数。如果要生成一个1~10的整数,那么就是print(random,randint(1,10))。

如果要是在固定的几个元素中随机抽取一个值,比如aaa=["林志玲","贾静雯","刘涛","关咏荷","高圆圆"],要从这几个女性中随机抽取一个值,同样先import random,然后random.choice(aaa)。


5、假设 AAA=["梅西","内马尔","苏亚雷斯","皮克","布斯克茨","伊涅斯塔"],BBB=["皮克","德赫亚","拉莫斯","伊涅斯塔","法布雷加斯","布斯克茨"],如何求出两个list之间的交集和差集?

交集:CCC=[val for val in AAA if val in BBB]

差集:DDD=[val for val in AAA if val not in BBB]

【评析】DDD这个差集是AAA这个list里有但是BBB里没有的,如果要显示出BBB有而AAA没有的元素,那么就调换一下 DDD=[val for val in BBB if val not in AAA]

本题里AAA和BBB都是list,所以要用“列表生成式”;如果这里AAA和BBB都是set,即AAA={"梅西","内马尔","苏亚雷斯","皮克","布斯克茨","伊涅斯塔"},BBB={"皮克","德赫亚","拉莫斯","伊涅斯塔","法布雷加斯","布斯克茨"},那么这样求交集就是AAA&BBB,而差集就是AAA|BBB。


6、反转由单词和不定个数空格组成的字符串,要求单词中的字母顺序不变。如:"I love    this      game!"反转成“game!      this    love I”。

1
2
3
4
>>> import re
>>> AAA = "I love    this      game!"
>>> BBB= ''.join(re.split(r'(\s+)',AAA)[::-1])
>>> print(BBB)


【评析】这道题虽然寥寥几个字,但是真心有难度。


7、deepcopy和copy的区别?

copy:只拷贝父对象,不去深入挖掘里面的子对象

deepcopy:父对象子对象都拷贝,有点坚守原样的意思。

【评析】

1
2
3
4
5
6
7
>>>import copy
>>>a=[1,2,3,4,["a","b"]]
>>>b=a    #与a同进共退
>>>c=copy.copy(a)    #浅拷贝
>>>d=copy.deepcopy(a)    #深拷贝
>>>a.append(5)
>>>a[4].append("c")    # 此时分别输出一下a,b,c,d看一下结果。


Mysql

1、MySQL中myisam与innodb的区别,至少5点

【评析】将Mysql常见的存储引擎的特点归纳表格如下

特点 myisam innodb memory archive
存储限制 256TB 64TB
事物安全 支持
支持索引 支持 支持 支持 不支持
锁颗粒(锁力度) 表锁 行锁(没有索引的情况是表锁) 表锁 行锁
数据压缩 支持 不支持 支持 不支持
支持外键 支持


2、varchar与char的区别;varchar(50)中50的涵义;int(20)中20的涵义;

char是定长变量,varchar是变长变量。 varchar(50)表示这一行的变量最大的存储字节是50个字节,int(20)同理。

【评析】假设有一行是name char(8),如果有一个数据是叫 AAA,那么它仅仅只有三个字节被存储进去,但是依旧存储了8个字节,多余的5个字节空着也就空着了。而是name varchar(8),同样是AAA,由于是变长,所以只保存了3个字节,剩下5个字节是弹性的,有就用,没有就不用。

在读取方面,char的读取速度要比varchar快,也就是常说的“用读取换容量”,但是还是多用varchar,当数据库内容成万上亿的时候,节省的容量是非常非常可观的。

3、问了下MySQL数据库cpu飙升到500%的话他怎么处理?

4、explain出来的各种item的意义;profile的意义以及使用场景;explain中的索引问题。

5、备份计划,mysqldump以及xtranbackup的实现原理;备份恢复时间;备份恢复失败如何处理。

mysqldump是采用sql级别的备份机制,将数据表导成sql脚本文件,在不用的mysql版本之间升级时相对比较合适。

xtranbackup是innodb的hotbackup工具,xtrbackup在启动的时候会复制所有的数据文件,同时会启动一个后台进程,用于监视事务日志,并且从事务日志复制最新的修改。所以xtrbackup在启动的开始,就不懂的将事务日志的每个数据文件的修改都记录下来。

mysqldump的备份和恢复时间都很慢,任何数据的更新和变化都会被挂起。

xtrabackup的恢复时间比mysqldump快一点,但是会锁表。

备份恢复失败的话,其实原因很多,主要可能就是参数设置的不对,检查一下参数。

【评析】使用mysqldump备份数据表的命令,在shell下执行:

mysqldump -u用户名 -p密码(可以直接-p) -h主机名 --databases 数据库名 > 要备份的文件路径

mysqldump -u用户名 -p密码 -h主机名 --all-databases >要备份的文件路径

mysqldump -u用户名 -p密码 -h主机名 --no-data 数据库名 >要备份的文件路径

这里并不全,另写文章专门补充。


6、MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的?为什么是这样子的?

InnoDB的行锁是通过加在索引上实现的,为什么这么设计,我也不知道,去问mysql的设计公司。


http://www.2cto.com/database/201312/265037.html

http://www.myexception.cn/mysql/1712377.html



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1742467


上一篇:效验手机号码正则表达式


下一篇:基于Hash的查找算法实现