美文网首页
面试python语法题

面试python语法题

作者: 蕴重Liu | 来源:发表于2020-01-02 22:52 被阅读0次

    1 高级解包操作 a,b,*rr = range(10)
    2 KeyWord only arguments 限定关键字参数
    3 Chained expections 抛出异常不丢失栈信息
    4 一切返回迭代器 range map zip dict.values
    5 yield from 链接子生成器
    6 aysncio内置库 async/await 原生协程支持异步编程
    7 新的内置库enum mock asyncio ipaddress concurrent.futures等

    8 可变对象(bool/int/float/tuple/str/frozenset)不可变对象(list/set/dict)
    9 位置参数和关键字参数

    10 Cpython GIL(Global Interpreter Lock)
    Cpython解释器的内存管理并不是线程安全;
    保护多线程情况下对Python对象的访问;
    使用简单的锁机制避免多个线程同时执行字节码;

    11 区分CPU和IO密集程序
    CPU密集可用多进程+线程池
    IO密集使用多线程/协程
    cython扩展器(不是cpython)

    12 服务的优化措施
    数据结构与算法优化
    数据库层:索引优化/慢查询消除/批量操作减少IO/NoSQL
    网络IO:批量操作/pipline操作减少IO
    缓存:内存数据库 redis/memcached
    异步:asyncio/celery
    并发:gevent/多线程

    13 生成器Generator
    生成值的函数;
    函数有yield即成生成器函数;
    生成器可挂起执行并保持当前执行状态

    基于生成器的协程:
    通过yield暂停执行和产出数据;
    同时支持send()向生成器发送数据和throw()向生成器抛出异常

    协程装饰器(避免每次用send(None)启动)
    python3.5引入async/await支持原生协程(native coroutine )

    14 网络IO中的pipeline 例子

    15 collection模块的数据结构和底层原理:
    deque实现queue和stack结构;
    counter-计数器;
    OrderedDict-有序的字典;
    defaultdict-带有默认值的字典;

    16 哈希冲突和扩容;
    dict支持快速查找使用哈希表作为底层结构;
    平均查找时间复杂度O(1);
    CPython解释器使用二次探查解决哈希冲突问题;

    17 LRUCache的实现原理(4.1)

    18 算法常考:
    冒泡/快速/归并/堆排序(heapq);
    线性查找/二分查找;

    19 数据结构常考:
    链表/队列/栈/二叉树/堆(用代码实现);
    用内置结构实现高级数据结构,内置的list/deque实现栈;
    Leetcode或剑指offer的常见题;

    20 链表:删除/增加结点、合并两个有序链表
    21 二叉树:镜像/层序遍历
    22 栈与队列:用栈实现队列/用python的list或deque实现栈和队列
    23 堆(完全二叉树):合并多个有序数组或链表;TopK问题;
    24 字符串:翻转字符串/判断数字是否是回文数
    25 反转单链表(循环/递归)

    26 OOP
    组合&继承;类变量&实例变量;classmethod & staticmethod
    元类(meta class)创造类,类创造实例;
    27 装饰器

    28 创建型设计模式
    工厂模式(Factory):解决对象创建问题
    构造模式(Builder):控制复杂对象的创建
    原型模式(Prototype):通过原型的克隆创建新的实例
    单例模式(Borg/Singleton):一个类只能创建一个对象
    对象池模式(Pool):预先分配同一类型的一组实例
    惰性计算模式(Lazy Evaluation):延迟计算(property)

    29 结构型设计模式
    装饰器模式(Decorator):无需子类化扩展对象功能
    代理模式(Proxy):把一个对象的操作代理到另一个对象----组合
    适配器模式(Adapter):通过间接层适配统一的接口---待练习
    外观模式(Facade):简化复杂对象的访问问题
    享元模式(Flyweight):通过对象复用池改善资源利用,如连接池
    Model-View-Controller(MVC):解耦展示逻辑和业务逻辑

    30 学习行为型设计模式
    迭代器模式(Iterator):通过统一的接口迭代对象(nextiter
    观察者模式(Observer):对象发生改变时,观察者执行相应动作(回调)
    策略模式(Strategy):针对不同规模输入使用不同的策略

    31 函数式编程
    map/reduce/filter;
    闭包:绑定外部作用域的变量的函数,每次运行外部函数会重新创建闭包,即使程序离开外部作用域,如果闭包仍可见,绑定变量不会销毁;

    32 文件/目录操作命令
    chown/chmod/chgrp;
    ls/rm/cd/cp/mv/touch/rename/ln(软链接和硬链接)等;
    locate/find/grep定位查找和搜索;
    编辑器vi/nano;
    查看文件cat/head/tail;
    交互式查看文件more/less;

    33 网络操作命令
    ifconfig查看网卡信息
    lsof/netstat查看端口信息
    ssh/scp远程登录/复制
    tcpdump抓包

    注意:
    kill执行原理
    free内存泄漏

    34 线程同步&线程安全
    互斥量(锁):互斥机制防止多个线程同时访问公共变量;
    信号量(Semphare):控制同一时刻多个线程访问同一个资源的线程数;
    事件(信号):通过通知的方式保持多个线程同步;

    35 进程通信IPC(Inter-Process Communication)
    管道/匿名管道/有名管道(pipe);
    信号(signal);
    消息队列(Message);
    共享内存(share memory);
    信号量(Semaphore);
    套接字(Socket):最常用,web应用;

    36 python使用多进程
    GIL,CPU密集程序;
    multiprocessing多进程模块;

    37 操作系统内存管理机制
    分页机制:逻辑地址划分为固定大小的页(Page),物理地址划分为同样大小的帧(Frame),通过页表对应逻辑地址和物理地址;
    分段机制:数据共享与保护/动态链接;段内部连续分配,段和段之间是离散分配;

    38 垃圾回收机制原理
    引用计数为主(缺点:循环引用无法解决);
    引入标记清除和分代回收解决引用计数的问题;
    引用计数为主+标记清除和分代回收为辅;

    40 浏览器输入url中间经历的过程
    DNS查询;TCP握手;HTTP请求;反向代理nginx;uwsgi/gunicom;web app响应(flask/tornado);TCP挥手;

    41 HTTP/TCP/网络编程


    42 并发编程IO多路复用
    操作系统提供的同时监听多个socket的机制;
    python3的selectors模块;


    43 python并发网络库
    Tornado框架:
    底层基于Linux多路复用;
    通过协程或回调实现异步编程;
    Gevent:
    基于轻量级绿色线程(greenlet)实现并发;
    monkey patch 修改socket为非阻塞;
    配合gunicorn和gevent部署作为wsgi server;
    《gevent程序员指南》
    Asyncio:
    基于协程实现的内置并发网络库;
    协程+事件循环;

    44 练习题:异步爬虫


    45 WSGI和常见web框架
    什么是WSGI,经常用uwsgi/gunicorn部署Django/flask应用;
    Django/Flask/Tornado对比;
    web框架的组成:
    中间件,用于请求前和请求后的处理(如,日志记录);
    路由,表单验证,权限认证,ORM,视图函数,模板渲染,序列化;
    第三方插件:Redis连接,RESTful支持等;

    46 什么是Gunicorn
    Python WSGI HTTP Server;
    纯python编写的高性能的WSGI Server;
    pre-fork预先分配多个worker进程处理请求(master-slave);
    多种worker支持:Sync/Async(Gevent)/Tornado/AsyncIO;

    47 系统设计:
    定义系统架构、模块、接口和数据满足特定需求的过程;
    如短网址服务、评论服务、Feed流服务、抢红包服务;
    微服务架构按照业务拆分,需要单独设计一个系统服务;

    48 后端技术组件:
    消息队列、缓存、数据库、框架;

    49 系统设计三大要素:
    使用场景和限制条件:使用场景、用户量、并发qps(峰值qps和平均qps);
    数据存储设计:设计数据表/字段/类型/数据增长速度,数据库选型(关系型或NoSQL),优化/索引/缓存;
    算法模块设计:接口设计、使用算法/模型,不同实现方式的优劣对比;
    延伸考点:扩展、容错;

    相关文章

      网友评论

          本文标题:面试python语法题

          本文链接:https://www.haomeiwen.com/subject/tdjaoctx.html