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

简介:

python

1、python是强类型还是弱类型的语言?

强类型

【评析】这种问题其实面试出来很没意思,因为太过理论,而且业界对于这个东西的定义没有一个统一的说法。所以这个题问出来挺无语的。记住,目前阳光面的说法:python是动态强类型语言。其中动态静态是针对变量的绑定方式,静态是指在编译的时候绑定变量,而动态是指在运行的时候可以绑定变量。

强弱类型是指变量的类型一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。而弱类型语言,一个数字类型的变量即可以是字符串也可以是数字类型,可以容忍隐式类型转换。 python是一个比较严谨的语言,所以它是强类型语言,而不是弱类型语言。

弱类型语言的话,“1”+2=12,而强类型的话,“1”+2=“大哥,你输入的语法有毛病,你知道不?”

补充一下,perl和php是弱类型动态语言,c和c++是弱类型静态语言。


2、python的动态性体现在哪?

动态性体现在:python在运行的时候可以改变原来的函数定义,也可以引进新的代码和对象。

【评析】首先C和C++不是动态语言。然后,python是可以动态的给实例绑定属性,比如

class undead:    #先class一个“不死族”

def __init_(self,name=None,attitude=None):  

 #设定一个类,这个类就是不死族的类.init是初始属性、默认属性

name=name               #这里设定名字是名字,态度是态度

attitude=attitude


P=undead("食尸鬼","hostile")      #将类实例化,食尸鬼是不死族的一员,他的态度是敌对的


但是这个时候已知设定了name和attitude这两个属性,但是我们可以后补新的属性。

P.attack="爪击"      #设定食尸鬼的攻击方式

然后我们就可以访问attack这个属性了,虽然它并没有在最原始的时候被设定。

P.attack回车一下就可以看到结果。这就是可以动态的补充变量的属性,即一次没有整明白,可以后续补齐。

在实际生产的时候注意一下,在上面的例子里P.name回车的结果和print (P.name)的结果是有那么一点不同的,可以自己动手试试。


3、python的namespace:四种;len()等函数的命名空间

【评析】命名空间就是名字和对象的映射。也就是可以把一个namespace理解为一个字典,实际上很多当前的Python实现namespace就是用的字典。那么哪些可以是一个namespace呢,比如Python的built-in names(包括内置函数,内置常量,内置类型);一个模块的global names(这个模块定义的函数,类,变量);一个函数的所有local names;还有一个类对象的所有属性(数据成员,成员函数)都组成一个命名空间。

len()等函数的命名空间这玩意自己查一下就好。


4、range和xrange的区别

【评析】我找的这个面试题挺新的,2015年10月份左右的试题,但是不得不说搞python就是这一点不好:版本之间不兼容。3.5的版本里xrange已经被枪毙了,range的功能就是xrange。所以在面试的时候大家要注意python2.7和3.5的差别,一旦面试官问你没听过的语句或者是命令,第一反应别说不知道,而是要说“这丫是2.7的吧”。

继续说,在python 2.7版本里:xrange能用就多用,这玩意比range更好,因为在生成一个大数字序列的时候,xrange的性能更优秀。虽然他俩在for in语句里的输出效果是一样的,但是主要区别是xrange会返回一个整体,这个比较类似于人类的思维,而range返回的是list。比如:

a=range(10)

type a 回车的结果是“list”,print a回车的结果是一个list,(1,2,3。。。9,10)。

a=xrange(10)

type (a)回车的结果是"xrange",print(a)回车的结果是一个xrange(10)

而且xrange的效率比range更快,用timeit一下效果更加明显,本机是3.5,range就是xrange,使用timeit.timeit('for i in range(100000000):pass',number=1),看一下查一亿个数用xrange消耗时间仅仅是5秒左右。如果在2.7的环境下,用真实的range试一下上面的命令,估计要20多分钟。


5、于是问怎么实现迭代器,然后又问了生成器,yield语句

迭代器是一种访问集合元素的方式,从第一个元素开始访问直至到最后一个元素访问完毕,迭代器的访问只能前进不能后退。迭代器主要用于数学里面不断地“后项加前项”的场合里。

定义__init__()对象就可以使用迭代器访问。

带有yield的函数在python里就被叫做生成器,或者(n for n in aaa if n >0)这种类型的列表生成式也是生成器。它准许停止函数并且立即返回结果。

【评析】这里又是一个python 2.7与python 3.5的不同,py2.7里是可以调用.next函数的,但是在py3.5里调用的是next()函数,举个例子,在py2.7里:

AAA="秦时明月汉时关"      

AAA.next  回车的话,会把上面的诗句每个字都显示一遍

也可以next(AAA),效果同样。但是在python 3.5里只能使用next(AAA),用.next的话,会报错。

而且在实际生产中,宁可有大量可迭代的简单参数,也不要有一个超大量的最后返回一个值的函数。


6、将list的中的一万条字符串合成一条字符串的方法

可以使用string里的join函数,举个例子

AAA=["zabbix","ngnix","python","Apache","nocchi"]

BBB="".join(AAA)

print (BBB)

【评析】刚才的例子显示出来的结果是无缝连接AAA里的元素。如果BBB="¥¥¥".join(AAA),这时候再print一下,效果就是"zabbix¥¥¥ngnix¥¥¥python¥¥¥Apache¥¥¥nocchi"


7、python的三目运算符有吗? 怎么用一行代码实现三目运算?

三目运算符是c的东西,python里是没有的,但是可以用判断语句来模拟达到这个效果。

【评析】and前后如果有一个值是假,那么返回第一个假值,如果都是真,那么返回最后一个真值。or只要接一个真值,就返回真值,否则返回最后一个假值。


result = XX if True/False else result = YY   当True的时候是XX,如果是False的时候是YY。

-------------------------------------------------------------------------------------------

linux

1、top和ps在进程占有资源率的统计方式有什么不同?

ps是显示在执行ps这个命令时刻所有进程的情况,而top是动态的监控进程的情况(windows的任务管理器)。

top显示系统总的统计信息,比如时间,CPU情况,内存状态和分区信息等等。ps没有这么个功能。

【评析】ps -ef这个是一个比较常见的搭配方式,-e是“所有进程”,-f是文件之间的关系;ps -aux也是很常用的,意思是“显示包含其他使用者的进程”。ps命令也可以搭配 -more和管道符使用,也可以搭配输出重定向。

top -n 2指的是更新两次之后就停;top -d 3指的是更新周期是三秒;top -p 574 指的是显示pid为574的进程。top状态下按b是显示高亮。


2、谈谈/proc目录

Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

【评析】更多信息在http://blog.csdn.net/zdwzzu2006/article/details/7747977


3、/proc存在哪里?

上面已经说了,存在内存里。


4、谈谈页表,内存管理,TLB

【评析】这道题蛮难的,几句话很难说明白,估计面试官主要想看看你的语言组织能力和沟通能力。答案的话,可以看一下:http://blog.chinaunix.net/uid-26009500-id-3089718.html


5、inode存储了哪些东西?目录名,文件名存在哪里?

inode存储了文件大小、user id、group id、文件的读写执行权限、软连接硬链接被引用的次数、时间戳、block的位置。唯独没有文件名!!!

目录名、文件名存在“目录项”里。

【评析】ls -i这个是显示inode号码的查询方法,我个人比较喜欢用ll -hi这个命令。

stat这个可以查询inode信息,使用方法stat AAA 即可。

这道题是可以扩展的,“如果出现了系统使用df-h发现/data分区有空余内存,但是却无法建立新文件,这是什么原因,如何解决?”

答:这个基本就是inode号码已经用完了,所以不能建立新文件。删除掉/ data/cache/目录中的部分文件来释放一部分/data分区的inode,或者把其他分区的inode引进到/data 分区里,操作如下:

ln -s /AAA/cache/ /data/cache         #这样就达到了使用AAA分区的inode为data分区所用的效果

更多信息请看:http://c.biancheng.net/cpp/html/2780.html



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

相关文章
|
2月前
|
Linux Shell 调度
Linux面试题
Linux 一般是指 Linux 内核、 Linux 系统、 Li nux 发行版。严格意义上说 Linux 是指由 Linus Torvalds 维护的并发布的内核。它的代码只包括内核而不包括其它方面的应用。内核提供系统核心服务,如进程管理,进程的调度,虚拟文件系统,内存的管理等等。
85 0
Linux面试题
|
9天前
|
Linux Go
Linux命令Top 100驱动人生! 面试必备
探索Linux命令不再迷茫!本文分10部分详解20个基础命令,带你由浅入深掌握文件、目录管理和文本处理。 [1]: <https://cloud.tencent.com/developer/article/2396114> [2]: <https://pan.quark.cn/s/865a0bbd5720> [3]: <https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH>
64 0
|
21天前
|
运维 Linux Shell
linux运维常用命令
linux运维常用命令
|
27天前
|
运维 监控 Linux
linux脚本自动化运维任务
Linux自动化运维通过脚本提升效率,涵盖服务管理(启停服务、异常恢复)、系统监控(资源警报)、日志管理(清理分析)、备份恢复、补丁更新、自动化部署(如Ansible)、网络管理、定时任务(cron)和故障排查。结合shell、Python及工具,形成高效运维体系。
21 3
|
1月前
|
监控 网络协议 Linux
Linux 命令大全 & CentOS常用运维命令
Linux 命令大全 & CentOS常用运维命令
154 0
|
1月前
|
运维 监控 Linux
Linux本地部署1Panel现代化运维管理面板并实现公网访问
Linux本地部署1Panel现代化运维管理面板并实现公网访问
76 1
|
1月前
|
算法 Linux 调度
嵌入式linux面试题目总结
嵌入式linux面试题目总结
33 0
|
2月前
|
运维 Linux 数据安全/隐私保护
【Linux专题_01】宝塔面板安装及运维
【Linux专题_01】宝塔面板安装及运维
|
2月前
|
Linux
Linux面试常用命令大全(常用指令)
Linux面试常用命令大全(常用指令)
|
2月前
|
运维 Linux Docker
Linux运维工程师必须要掌握的Docker命令,我给你整理好了!
Linux运维工程师必须要掌握的Docker命令,我给你整理好了!
169 2