无论是应聘 Python 方向的 web 开发, 还是爬虫工程师, 或是数据分析, 还是自动化运维, 都涉及到一些基础的知识! 小编挑了一些 Python 的基础面试题, 看看你能不能的答上来, 也许面试的同学用的着!
1.Python 这么好, 说说它的特性吧
关键特性
Python 是一种解释型语言, 这意味着, 与 C,C++ 不同, Python 不需要在运行之前进行编译. 它是边运行边解释的.
Python 是动态类型化的, 这意味着当你声明它们或类似的东西时, 你不需要声明变量的类型. 你可以 x=1 , 然后 x="abc" 是没有错误.
Python 非常适合面向对象编程, 因为它允许定义类以及组合和继承. Python 没有访问修饰符.
在 Python 中函数是一等对象, 这意味着它们可以在运行时动态创建, 能赋值给变量或者作为参数传给函数, 还能作为函数的返回值.
Python 代码容易上手, 开发速度很快, 但运行速度通常比编译语言慢. 幸运的是, Python 允许包含基于 C 的扩展, 所以瓶颈可以被优化掉.
2. 单引号, 双引号和三引号之间的区别
关于怎么快速学 python, 可以加下小编的 python 学习群: 611+530+101, 不管你是小白还是大牛, 小编我都欢迎, 不定期分享干货
每天晚上 20:00 都会开直播给大家分享 python 学习知识和路线方法, 群里会不定期更新最新的教程和学习方法, 大家都是学习 python 的, 或是转行, 或是大学生, 还有工作中想提升自己能力的, 如果你是正在学习 python 的小伙伴可以加入学习. 最后祝所有程序员都能够走上人生巅峰, 让代码将梦想照进现实
单引号和双引号主要是用来表示字符串
比如:
单引号:'python'
双引号:"python"
区别:
若你的字符串里面本身包含单引号, 必须用双引号包裹.
比如:"can't find the log "
三引号
三单引号:'''python''', 也可以表示字符串一般用来输入多行文本, 或者用于大段的注释.
三双引号:"""python""", 一般用在类里面, 用来注释类, 这样省的写文档, 直接用类的对象 doc 访问获得文档.
3.Python 里面如何拷贝一个对象?
标准库中的 copy 模块提供了两个方法来实现拷贝. 一个方法是 copy, 它返回和参数包含内容一样的对象.
使用 deepcopy 方法, 对象中的属性也被复制
4.Python 的参数传递, 是值传递还是引用传递?
Python 的参数传递有:
位置参数
默认参数
可变参数
关键字参数
函数的传值到底是值传递还是引用传递, 要看情况
不可变参数用值传递:
比如像整数和字符串这样的不可变对象, 是通过拷贝进行传递的, 因为你无论如何都不可能在原处改变不可变对象.
可变参数是用引用传递:
比如像列表, 字典这样的对象是通过引用传递, 和 C 语言里面的用指针传递数组很相似, 可变对象能在函数内部改变.
5. 什么是 lambda 函数? 它的好处是什么?
lambda 表达式, 通常是在需要一个函数, 但是又不想费神去命名一个函数的场合下使用, 也就是指匿名函数.
lambda 函数: 首要用途是指点短小的回调函数.
- lambda [arguments]:expression
- >>> a=lambdax,y:x+y
- >>> a(3,11)
好处:
lambda 能和 def 做同样种类的工作, 特别是对于那些逻辑简单的函数, 直接用 lambda 会更简洁, 而且省去取函数名的麻烦.
6. 字符串格式化: % 和 .format 的区别是什么?
字符串的 format 函数非常灵活, 很强大, 可以接受的参数不限个数, 并且位置可以不按顺序, 而且有较为强大的格式限定符(比如: 填充, 对齐, 精度等).
7.Python 是如何进行内存管理的?
Python 引用了一个内存池 (memory pool) 机制, 即 Pymalloc 机制(malloc:n. 分配内存), 用于管理对小块内存的申请和释放
内存池 (memory pool) 的概念:
当创建大量消耗小内存的对象时, 频繁调用 new/malloc 会导致大量的内存碎片, 致使效率降低. 内存池的概念就是预先在内存中申请一定数量的, 大小相等 的内存块留作备用, 当有新的内存需求时, 就先从内存池中分配内存给这个需求, 不够了之后再申请新的内存. 这样做最显著的优势就是能够减少内存碎片, 提升效率.
内存池的实现方式有很多, 性能和适用范围也不一样.
python 中的内存管理机制 --Pymalloc:
python 中的内存管理机制都有两套实现, 一套是针对小对象, 就是大小小于 256bits 时, pymalloc 会在内存池中申请内存空间; 当大于 256bits, 则会直接执行 new/malloc 的行为来申请内存空间. 关于释放内存方面, 当一个对象的引用计数变为 0 时, python 就会调用它的析构函数. 在析构时, 也采用了内存池机制, 从内存池来的内存会被归还到内存池中, 以避免频繁地释放动作.
8. 如何用 Python 来进行查询和替换一个文本字符串?
可以使用 sub()方法来进行查询和替换, sub 方法的格式为: sub(replacement, string[, count=0])
replacement 是被替换成的文本
string 是需要被替换的文本
count 是一个可选参数, 指最大被替换的数量
9.Python 里面 search()和 match()的区别?
match()函数只检测 RE 是不是在 string 的开始位置匹配, search()会扫描整个 string 查找匹配, 也就是说 match()只有在 0 位置匹配成功的话才有返回, 如果不是开始位置匹配成功的话, match()就返回 none .
10. 线程如何在 Python 中实现
Python 有一个多线程包 threading, 可以使用多线程来加快你的代码. 但是 Python 有一个叫做 Global Interpreter Lock(GIL)的构造. GIL 确保只有一个'线程'可以在任何时候执行.
线程获取 GIL, 做一些工作, 然后将 GIL 传递到下一个线程. 这种情况发生得非常快, 所以对于人眼而言, 它可能看起来像你的线程并行执行, 但它们实际上只是轮流使用相同的 CPU 内核. 因此 GIL 的存在使得 Python 中的多线程无法真正的利用多核的优势来提高性能.
对于 IO 密集型操作, 在等待操作系统返回的时候会释放 GIL; 再比如爬虫因为有等待的服务器的响应时间, 可以利用多线程来加速! 但是对于 CPU 密集型操作, 只能通过多进程 Multiprocess 来加速.
11.Python 的参数传递, 是值传递还是引用传递?
Python 的参数传递有:
位置参数
默认参数
可变参数
关键字参数
函数的传值到底是值传递还是引用传递, 要看情况
不可变参数用值传递:
比如像整数和字符串这样的不可变对象, 是通过拷贝进行传递的, 因为你无论如何都不可能在原处改变不可变对象.
可变参数是用引用传递:
比如像列表, 字典这样的对象是通过引用传递, 和 C 语言里面的用指针传递数组很相似, 可变对象能在函数内部改变.
12. 数据仓库是什么?
数据仓库是一个面向主题的, 集成的, 稳定的, 反映历史变化的, 随着时间的流逝发生变化的数据集合. 它主要支持管理人员的决策分析.
数据仓库收集了企业相关内部和外部各个业务系统数据源, 归档文件等一系列历史数据, 最后转化成企业需要的战略决策信息.
特点:
面向主题: 根据业务的不同而进行的内容划分;
集成特性: 因为不同的业务源数据具有不同的数据特点, 当业务源数据进入到数据仓库时, 需要采用统一的编码格式进行数据加载, 从而保证数据仓库中数据的唯一性;
非易失性: 数据仓库通过保存数据不同历史的各种状态, 并不对数据进行任何更新操作.
历史特性: 数据保留时间戳字段, 记录每个数据在不同时间内的各种状态.
来源: http://www.jianshu.com/p/54ffc125aeb8