每日分享
If you change nothing, nothing will change
如果你什么也不去改变,那么没什么会改变。
小闫语录:
想要一份好工作,那就好好学习扎实自己;想要气质,那就多读读书;想要钱,那就别怕吃苦撸起袖子加油干。你看,只要你想,总是有路去实现。前提是你想,然后付出行动,否则什么都不会得到。想要生活现状有所改变,请先去为改变做些什么。
python技术面试题(一)
面试题
1.1Python中的幂运算
在python中幂运算是由两个 **
星号运算的,实例如下:
>>> a = 2 ** 2 >>> a 4
我们可以看到2的平方输出结果为4。
那么 ^
指的是什么呢?我们用代码进行演示:
>>> 1 ^ 0 1 >>> 0 ^ 1 1 >>> 1 ^ 1 0 >>> 0 ^ 0 0 >>> 2 ^ 2 0
作为python的运算符时, ^
表示bitwise XOR(按位操作符,按位异或)
a ^ b 对于每一个比特位,当两个操作数相应的比特位有且只有一个1时,结果为1,否则为0.
1.1.1面试题
a=1,b=2,不用中间变量交换a和b的值?
答:
>>> a=1 >>> b=2 >>> a=a^b >>> b=b^a >>> a=a^b >>> a 2 >>> b 1
注意这是一种比较巧的办法,当然本题的答案不唯一,最简单的答案
a,b=b,a
此处为了演示上面的异或,提供一种巧的办法。
解析:
2用二进制表示为10,1用二进制表示为1。所以题中转换为二进制相当于a=1,b=10。如下:
a=01 b=10
首先a=a^b(按照相同取0,不同取1),注意两个二进制位上数值的变化规律:
a=01 b=10 ------ a=11
然后进行b=b^a,结果如下:
b=10 a=11 ------ b=01
最后进行a=a^b,结果如下:
a=11 b=01 ------ a=10
最后的结果就是a=10,b=01。和最开始的a=1,b=10相比较,确实是交换了两个变量的值。
1.2面试题之基础
1.代码中要修改不可变数据会出现什么问题?抛出什么异常?
答:代码不会正常运行,抛出TypeError异常。
2.print调用python中底层的什么方法?
答:print方法默认调用 sys.stdout.write
方法,也就是往控制台打印字符串。
3.简述你对input()函数的理解?
答:在python3中,input获取用户输入,不论用户输入什么,获取到的都是字符串类型。
在python2中,有rawinput()和input(),rawinput()和python3中的input作用是一样的,input有点区别,就是输入的是什么数据类型,获取到的就是什么数据类型的。
4.python2中range和xrange的区别?
答:两者用法相同,不同的是range返回的结果是一个列表,而xrange的结果是一个生成器;range直接开辟一块内存空间来保存列表,xrange是一边循环一边使用,是有使用的时候才会开辟内存空间,所以当列表很长时,使用xrange性能要更好一点。
5.4G内存怎么读取一个5G的数据?
答:可以通过生成器,分多次读取,每次读取数量相对少的的数据进行处理,处理结束后再读取后面的数据。
还可以通过Linux命令split切割成小文件,然后再对数据进行处理,此方法效率比较高,可以按照行数切割,可以按照文件大小切割。
1.3文件读取的一些知识点
1.在文件读取的时候要考虑到指针的位置,如果文件没有关闭,那么我们第二次读取的时候将从第一次读取结束的位置开始。
2.控制文件指针的方法:
方法一:重新打开文件,每次执行只读方式的时候都是从文件开始进行读取的。
方法二:可以手动的将文件的指针移动到文件的开头:
file_name.seek(0.0)
file.seek(off, whence=0):从文件开始移动off个操作标记(文件指针),正数代表往结束方向移动,负数代表往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。
1.3.1Linux命令split
该指令代表的是将大文件切割成较小的文件,在默认情况下按照每1000行切割成一个小文件。
语法:
split [--help][--version][-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
参数解释:
-<行数>
: 指定每多少行切成一个小文件
-b<字节>
: 指定每多少字节切成一个小文件
--help
: 在线帮助
--version
: 显示版本信息
-C<字节>
: 与参数"-b"相似,但是在切 割时将尽量维持每行的完整性
[输出文件名]
: 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
-a
, --suffix-length=N 指定输出文件名的后缀,默认为2个
-d
, --numeric-suffixes 使用数字代替字母做后缀
-l
, --lines=NUMBER NUMBER 值为每一输出文档行数大小
使用:
split -l 2482 ../BLM/BLM.txt -d -a 4 BLM_
将 文件 BLM.txt 分成若干个小文件,每个文件2482行(-l 2482),文件前缀为BLM_ ,系数不是字母而是数字(-d),后缀系数为四位数(-a 4)
1.3.2Linux命令wc
读取文件有多少行
wc -l <file_name>
1.3.3Linux命令>>和>
>
代表覆盖文件内容。
>>
代表的是在文件后面追加内容。