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