python语言面试基础_【python面试指北】1.语言基础

1. python是动态强类型的语言。

动态还是静态指的是编译器还是运行期确定类型

强类型指的是不会发生隐式类型转换。比如js能够执行1+"1",但是python不行,所以python是弱类型的语言。

2. 鸭子类型

当一只鸟走起来像鸭子、游泳起来像鸭子、叫气力啊也像鸭子,那么这只鸟就可以被称为鸭子。

鸭子类型关注的是对象的行为,而不是类型。比如file,StringIO,socket对象都支持read/write方法,再比如定义了iter魔术方法的对象可以用for迭代。

3. monkey patch

所谓的monkey patch就是运行时替换。

4. 自省

运行时判断一个对象类型的能力。

python一切皆对象,用type, id, isinstance获取对象类型信息。

5. 列表和字典推导

如 [i for i in range(10) if i % 2 == 0],如果[]改为(),则为生成器

6. python2和python3

print成为函数

编码问题。python3不再有unicode对象,默认str就是unicode

除法变化。python3除号返回浮点数,如果要返回整数,应使用//

类型注解。帮助IDE实现类型检查

优化的super()方便直接调用父类函数

高级解包操作。a, b, *rest = range(10)

keyword only arguments。限定关键字参数

chained exceptions。python3重新抛出异常不会丢失栈信息

一切返回迭代器。range, zip, map, dict.values, etc. are all iterators

性能优化等。。。

7. python如何传递参数

python既不是值传递也不是引用传递,唯一支持的参数传递是共享传参。

call by object(call by object reference or call by sharing)

call by sharing(共享传参),函数形参获得实参中各个引用的副本。

变量一切都是对象。list是可变对象,string是不可变对象

总结一下:根据对象的引用来传递,根据对象是可变对象还是不可变对象,得到两种不同的结果。如果是可变对象,则直接修改。如果是不可变对象,则生产新对象,让形参指向新对象

8. python可变/不可变对象

不可变对象: bool/int/float/tuple/str/frozenset

可变对象:list/set/dict

练习题:

# 1

def clear_list(l)

l = []

ll = [1,2,3]

clear_list(ll)

print(lll)

# 2

def fl(l=[1]):

l.append(1)

print(l)

fl()

fl()

# 记住:默认参数只计算一次

**9. *args, kwargs

用来处理可变参数,args被打包成tuple,kwargs被打包成dict

传递方式有两种

# 第一种

foo(1,2,3)

foo(a=1,b=2)

# 第二种

foo(*[1,2,3])

foo(**dict(a=1,b=2)})

10. python异常机制

BaseException

下面有SystemExit/KeyboardInterrupt/GeneratorExit/Exception(其他异常都属于它)

try:

# func # 可能会抛出异常的代码

except (Exception1, Exception2) as e: # 可以捕获多个异常并处理

# 异常处理的代码

else:

# pass # 异常没有发生的时候代码逻辑

finally:

pass # 无论异常有没有发生都会执行的代码,一般处理资源的关闭和释放

11. 自定义异常

继承Exception实现自定义异常,给异常加上一些附加信息

不用baseException是因为这样的话ctrl+c的keybord异常就用不了了

12. python性能分析与优化,GIL

cpython解释器的内存管理并不是线程安全的

保护多线程情况下对python对象的访问

cpython使用简单的锁机制避免多个线程同时执行字节码

GIL的影响

限制了程序的多核执行

同一个时间只能有一个线程执行字节码

CPU密集程序难以利用多核优势

IO期间会释放GIL,对IP密集程序影响不大

对IO密集程序影响不大

如何规避GIL的影响

区分CPI和IO密集程序

CPU密集可以使用多进程+进程池

IO密集使用多线程/协程

cpython扩展

13. 服务端性能优化措施

web应用一般语言不会成为瓶颈

数据结构与算法优化

数据库层:索引优化,慢查询消除,批量操作减少IO,NoSQL

网络IO:批量操作,pipeline操作,减少IO

缓存:使用内存数据库 redis/memcached

异步:asyncio,celery

并发:gevent/多线程

14. python生成器与协程

Generator

生成器就是可以生成值的函数

当一个函数里有了yield关键字就成了生成器

生成器可以挂起执行并且保持当前执行的状态

协程不懂

15. python3原生协程

async/await支持原生协程

16. python单元测试

三无代码不可取(无稳定、无注释、无单测)

保证的代码逻辑的正确性

单侧影响设计,易测的代码往往是高内聚低耦合的

回归测试,防止改一处整个服务不可用

单元测试相关的库

nose/pytest较为常用

mock模块用来模拟替换网络请求等

coverage统计测试覆盖率

17. python深拷贝与浅拷贝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值