python面试总结


  1.  python语言基础
    1. 语言特点
    2. 语言基础
    3. 高级特性
  2. 算法和数据结构
    1. 常用算法和数据结构
    2. 分析时间/空间复杂度
    3. 实现常见数据结构和算法
  3. 编程范式
    1. 面向对象编程
    2. 常用设计模式
    3. 函数式编程
  4. 操作系统
    1. 常用Linux命令
    2. 进程/线程
    3. 内存管理
  5. 网络编程
    1. 常用协议TCP/IP/HTTP
    2. Socket编程基础
    3. Python并发库
  6. 数据库
    1. mysql常考,索引优化
    2. 关系型和NoSQL的使用场景
    3. Redis缓存
  7. python web框架
    1. 常用框架对比,RESTful
    2. WSGI原理
    3. Web安全问题
  8. 系统设计
    1. 设计原则,如何分析
    2. 后端系统常用组件(缓存、数据库、消息队列等)
    3. 技术选型和实现(短网址服务,Feed流系统)
  9. 技术之外,软实力
    1. 学习能力
    2. 业务理解能力,沟通交流能力
    3. 心态

  • python语言特性

    1. python是静态还是动态类型?是强类型还是弱类型?

      1. 动态强类型语言

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

      3. 强类型指的是不会发生隐式类型转换

    2. python作为后端语言的优缺点

      1. 为什么要用python?

        1. 胶水语言,轮子多,应用广泛

        2. 语言灵活,生产力高

        3. 性能问题、代码维护问题、python2/3兼容问题

      2. 什么是鸭子类型

        1. 关注点在对象的行为,而不是类型(duck typing)

        2. 比如file,StringIO,socket对象都支持read/write方法(file like object)

        3. 再比如定义了__iter__魔术方法的对象可以用for迭代

        4. 鸭子类型更关注接口而非类型

      3. 什么是monkey patch?哪些地方用到了?自己如何实现?

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

        2. 比如gevent库需要修改内置的socket

        3. from gevent import monkey;monkey.patch_socket()用阻塞的socket替换成非阻塞的

      4. 什么是自省?

        1. Instrospection

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

        3. Python一切皆对象,用type,id,isinstance获取对象类型信息

        4. Inspect模块提供了更多获取对象信息的函数

          1. id()打印十进制地址

          2. isinstance

          3. type

          4. is和等号区别:等号判断数值,is判断数值和地址

      5. 什么是列表和字典推导?

        1. List Comprehension

          1. 比如[ i for range(10) if i%2 == 0 ]

          2. 一种快速生成list/set/dict方式,用来代替map/filter等

      6. 知道python之禅吗

        1. The Zen of Python

          1. Tim Peters编写的关于Python编程的准则

          2. import this

          3. 编程拿不准的时候参考

    3. python2/3差异常考题

      1. python3改进

        1. print成为函数

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

        3. 除法变化。python3除号返回浮点数,不像python2直接截断返回整数

        4. 类型注解type hint.帮助ide类型检查

        5. 优化的super函数方便直接调用父类函数

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

        7. Keyword only arguments限定关键字参数

        8. Chained exceptions.Python3重新抛出异常不会丢失栈信息

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

          1. 懒加载,不返回列表占用内存,返回迭代器

      2. python3新增语法和内置函数

        1. yield from链接子生成器

        2. asyncio内置库,async/await原生协程支持异步编程

        3. 新增的内置库,enum,mock,asyncio,ipaddress,concurrent.futures等等

        4. 生成的pyc文件统一放到__pycache__

        5. 一些内置库的修改。urllib,selector等

        6. 性能优化等。。。像dict

      3. 熟悉一些2/3兼容的工具

        1. six模块

        2. 2to3等工具转换代码

        3. __future__:在2里面用print()函数


  • python函数常考题

    1. 常考点:可变参数/不可变参数

      1. python如何传递参数:一个容易混淆问题:

        1. 值传递还是引用?都不是,唯一支持的参数传递是共享传参

        2. Call by Object(Call by Object Refrence or Call by Sharing)

        3. Call by sharing(共享传参)函数行参获取实参中各个引用的副本

      2. python可变/不可变对象

         

        1. 搞懂可变和不可变内置对象有利于理解函数参数的副作用

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

          2. 可变对象list/set/dict

        2. python可变参数作为默认参数:默认参数只计算一次

          1. 可变参数传递datetime.datetime.now(),日期不会每次调用函数方法的时候计算

        3. python *args,**kwargs

          1. 函数传递中*args,**kwargs含义是什么

            1. 用来处理可变参数

            2. *args打包成tuple

            3. **kwargs打包成字典dict

    2. python异常处理机制

      1. python使用异常处理错误(有些语言使用错误码)

      2. BaseException

      3. SystemExit/KeyboardInterrupt/GeneratorExit 

      4. 使用异常的常见场景

        1. 什么时候需要捕获处理异常呢?看python内置异常的类型

          1. 网络请求(超时,链接错误等)

          2. 资源访问(权限问题,资源不存在)

          3. 代码逻辑(越界访问、KeyError等)

        2. 如何处理异常


    3. python性能分析与优化,GIL常考题

      1.  什么是Cpython GIL

      2. GIL,Global Interpreter Lock

        1. Cpython解释器的内存管理并不是线程安全的(多个线程访问同一个资源有问题)

        2. 保护多线程下对Python对象的访问

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

      3. GIL影响

        1. 限制了程序的多核执行

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

          2. CPU密集程度难以利用多核优势

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

            有了GIL,非线程安全的 

             通过加锁保证线程安全,但对性能有一定影响

    4. 如何剖析程序性能

      1. 使用各种profile工具(内置或第三方)

        1. 二八定律,大部分时间耗时在少量代码上

        2. 内置的profile/cprofile等工具

        3. 使用pyflame(uber开源)的火焰图工具

      2. 服务端性能优化措施

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

        2. 数据结构和算法优化

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

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

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

          异步:asyncio,celery

          并发:gevent/多线程


  • python单元测试

    1. nose/pytest较为常用

    2. mock模块用来模拟替代网络请求等

    3. coverage统计单元覆盖率

  • python深拷贝和签拷贝

    1. 什么是深拷贝浅拷贝

    2. https://blog.csdn.net/qq_40630902/article/details/119278072

    3. python如何实现深拷贝

    4. python中如何正确初始化一个二维数组?

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值