一.基础语法
一.基础语法
1.输入与输出
1.1 print 调用 Python 中底层的什么方法?
print 方法默认调用 sys.stdout.write 方法,即往控制台打印字符串
1.2 简述你对 input()函数的理解?
在 Python3 中,input()获取用户输入,不论用户输入的是什么,获取到的都是字符串类型的。
在 Python2 中有 raw_input()和 input(), raw_input()和 Python3 中的 input()作用是一样的,input()输入的是什么数据类型的,获取到的就是什么数据类型的。
2.条件与循环
2.1 range 和 xrange 的区别?
两者用法相同,不同的是 range 返回的结果是一个列表,而 xrange 的结果是一个生成器,前者是直接开辟一块内存空间来保存列表,后者是边循环边使用,只有使用时才会开辟内存空间,所以当列表很长时,使用 xrange 性能要比 range 好
2.2 比较两个输出结果l1 versus l2
l1 = []
for i in range(10):
l1.append({"num": i})
print(l1)
l2 = []
a = {"num": 0}
for i in range(10):
a['num'] = i
l2.append(a)
print(l2)
3.文件操作
3.1 4G 内存怎么读取一个 5G 的数据?
方法一:
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后再读取后面的 500MB 的数据。
方法二:
可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。
3.2 大文件处理
现在考虑有一个 jsonline 格式的文件 file.txt 大小约为 10K,之前处理文件的
代码如下所示
def process(): # process the data
pass
def get_lines():
l = []
with open('file.txt', 'rb') as f:
for eachLine in f:
l.append(eachLine)
return l
if __name__ == "__main__":
for e in get_lines():
process(e)
现在要处理一个大小为 10G 的文件,但是内存只有 4G,如果在只修改 get_lines 函数而其他代码保持不变的情况下,应该如何实现?需要考虑的问题都有哪些?
def get_lines():
l = []
with open('file.txt', 'rb') as f:
data = f.readlines(60000)
l.append(data)
yield l
要考虑到的问题有:
内存只有 4G 无法一次性读入 10G 的文件,需要分批读入。分批读入数据要记录每次读入数据的位置。分批每次读入数据的大小,太小就会在读取操作上花费过多时间。
3.3 read、readline 和 readlines 的区别?
read:读取整个文件。
readline:读取下一行,使用生成器方法。
readlines:读取整个文件到一个迭代器以供我们遍历
3.4 一个打印路径的函数
def print_directory_contents(sPath):
"""
这个函数接收文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中的文件路径
:param sPath:
:return:
"""
import os
for sChildPath in os.listdir(sPath):
sChildPath = os.path.join(sPath, sChildPath)
if os.path.isdir(sChildPath):
print_directory_contents(sChildPath)
else:
print(sChildPath)
4. 异常
4.1 介绍一下 except 的作用和用法?
except: #捕获所有异常
except: <异常名>: #捕获指定异常
except:<异常名 1, 异常名 2> : 捕获异常 1 或者异常 2
except:<异常名>,<数据>:捕获指定异常及其附加的数据
except:<异常名 1,异常名 2>:<数据>:捕获异常名 1 或者异常名 2,及附加的数据
5. 模块和包
5.1 常用的 Python 标准库都有哪些?
内置模块:
os 操作系统,time 时间,random 随机,pymysql 连接数据库,threading 线程,multiprocessing进程,queue 队列。
第三方库:
django 和 flask 也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celery,
re,hashlib,md5。
常用的科学计算库(如 Numpy,Scipy,Pandas)。
5.2 赋值、浅拷贝和深拷贝的区别?
5.3 双下方法init和new的区别?
__init__ # initial 在对象创建后,对对象进行初始化
__new__ # 是在对象创建之前,开辟一个对象空间,并将该对象空间返回给__init__
5.4 说明os.path 和 sys.path 的区别?
# os.path 主要是用于对系统路径文件的操作
# sys.path 主要是对 Python 解释器的系统环境参数的操作(动态的改变 Python 解释器搜索路径)
5.5unittest是什么?
# 在 Python 中,unittest 是 Python 中的单元测试框架。它拥有支持共享搭建、自动测试、在测试
# 中暂停代码、将不同测试迭代成一组,等的功能。
5.6模块和包是什么?
# 在 Python 中,模块是搭建程序的一种方式。每一个 Python 代码文件都是一个模块,并可以引用
# 其他的模块,比如对象和属性。
# 一个包含许多 Python 代码的文件夹是一个包。一个包可以包含模块和子文件夹
6.Python特性
6.1 Python 是强语言类型还是弱语言类型?
# 强类型:不允许不同类型相加
# 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候
# 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译。
Python 是强类型的动态脚本语言
6.2谈一下什么是解释性语言,什么是编译性语言?
# 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,
# 计算机才能执行高级语言编写的程序
# 解释性语言在运行程序的时候才会进行翻译
# 编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成机器语言(可执行文件)
6.3 Python 是如何进行类型转换的?
内建函数封装了各种转换函数,可以使用目标类型关键字强制类型转换,进制之间的转换可以用
int(‘str’,base=’n’)将特定进制的字符串转换为十进制,再用相应的进制转换函数将十进制转换
为目标进制。
可以使用内置函数直接转换的有:
list(tuple_01)
tuple(list_01)
6.4 Python2 与 Python3 的区别?
6.5 关于 Python 程序的运行方面,有什么手段能提升性能?
- 使用多进程,充分利用机器的多核性能
- 对于性能影响较大的部分代码,可以使用 C 或 C++编写
- 对于 IO 阻塞造成的性能影响,可以使用 IO 多路复用来解决
- 尽量使用 Python 的内建函数
- 尽量使用局部变量
6.6 什么是 Python?
- Python 是一种编程语言,它有对象、模块、线程、异常处理和自动内存管理,可以加入其他语言的对比
- Python 是一种解释型语言,Python 在代码运行之前不需要解释
- Python 是动态类型语言,在声明变量时,不需要说明变量的类型
- Python 适合面向对象的编程,因为它支持通过组合与继承的方式定义类
- 在 Python 语言中,函数是第一类对象
- Python 代码编写快,但是运行速度比编译型语言通常要慢
- Python 用途广泛,常被用走"胶水语言",可帮助其他语言和组件改善运行状况
- 使用 Python,程序员可以专注于算法和数据结构的设计,而不用处理底层的细节
6.7 什么是 Python 自省?
Python 自省是 Python 具有的一种能力,使程序员面向对象的语言所写的程序在运行时,能够获得对象的类Python 型。Python 是一种解释型语言,为程序员提供了极大的灵活性和控制力
6.8 你所遵循的代码规范是什么?请举例说明其要求?
7.Linux基础和git
7.1 Linux 的基本命令(怎么区分一个文件还是文件夹)?
# 在显示名称的时候会在文件夹后添加“/”,在文件后面加“*”
ls -F
7.2日志以什么格式,存放在哪里?
日志以文本可以存储在“/var/log/”目录下后缀名为.log
7.3 Linux 查看某个服务的端口?
netstat -anp | grep service_name
7.4ubuntu 系统如何设置开机自启动一个程序?
直接修改/etc/rc0.d ~ /etc/rc6.d 和/etc/rcS.d 文件夹的内容,添加需启动的程序,S 开头的表示启动,K 开头的表示不启动
7.5 在 linux 中 find 和 grep 的区别?
Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
linux 下的 find:
功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。
语法:find 起始目录寻找条件操作
说明:find 命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。
简单点说说,grep 是查找匹配条件的行,find 是搜索匹配条件的文件
7.6Linux 重定向命令有哪些?有什么区别?
1、重定向>
Linux 允许将命令执行结果重定向到一个文件,本应显示在终端上的内容保存到指定文件中。如:ls >test.txt ( test.txt 如果不存在,则创建,存在则覆盖其内容 )。
2、重定向>>
这个是将输出内容追加到目标文件中。如果文件不存在,就创建文件;如果文件存在,则将新的内容追加到那个文件的末尾,该文件中的原有内容不受影响。
7.7 软连接和硬链接的区别?
软连接类似 Windows 的快捷方式,当删除源文件时,那么软链接也失效了。
硬链接可以理解为源文件的一个别名,多个别名所代表的是同一个文件。当 rm 一个文件的时候,那么此文件的硬链接数减1,当硬链接数为 0 的时候,文件被删除。
7.8 10 个常用的 Linux 命令?
pwd 显示工作路径
ls 查看目录中的文件
cd /home 进入 '/ home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
mkdir dir1 创建一个叫做 'dir1' 的目录'
rm -f file1 删除一个叫做 'file1' 的文件',-f 参数,忽略不存在的文件,从不给出提示。
rmdir dir1 删除一个叫做 'dir1' 的目录'
groupadd group_name 创建一个新用户组
groupdel group_name 删除一个用户组
tar -cvf archive.tar file1 创建一个非压缩的 tarball
tar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件
tar -tf archive.tar 显示一个包中的内容
tar -xvf archive.tar 释放一个包
tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp 目录下
tar -cvfj archive.tar.bz2 dir1 创建一个 bzip2 格式的压缩包
tar -xvfj archive.tar.bz2 解压一个 bzip2 格式的压缩包
tar -cvfz archive.tar.gz dir1 创建一个 gzip 格式的压缩包
tar -xvfz archive.tar.gz 解压一个 gzip 格式的压缩包
7.9 Linux 关机命令有哪些?
reboot 重新启动操作系统
shutdown –r now 重新启动操作系统,shutdown 会给别的用户提示
shutdown -h now 立刻关机,其中 now 相当于时间为 0 的状态
shutdown -h 20:25 系统在今天的 20:25 会关机
shutdown -h +10 系统再过十分钟后自动关机
init 0 关机
init 6 重启
7.10 git 合并文件有冲突,如何处理?
1.git merge 冲突了,根据提示找到冲突的文件,解决冲突如果文件有冲突,那么会有类似标记
2.修改完之后,执行 git add 冲突文件名
3.git commit 注意:没有-m 选项 进去类似于 vim 的操作界面,把 conflict 相关的行删除掉直接 push 就可以了,因为刚刚已经执行过相关 merge 操作了