随笔分类 - 面试
Git
摘要:使用流程图 常用命令 第一阶段 git init 将当前目录初始化为本地库 当前路径下生成.git文件夹 git config --local:设置本地库配置,配置保存在.git/gitconfig文件 --global:设置git全局配置,配置保存在~/gitconfig文件 --system:设
LRU算法及实现方式
摘要:LRUCache(Least-Recently-Used) 替换掉最近最少使用的对象 缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key 通过使用一个循环双端队列不断把最新访问的key放到队头实现 先进先出,放到队尾则是最后出 实现 利用dict+collections.OrderedDic
Python并发编程之线程池/进程池
摘要:##前言 python标准库提供线程和多处理模块来编写相应的多线程/多进程代码,但当项目达到一定规模时,频繁地创建/销毁进程或线程是非常消耗资源的,此时我们必须编写自己的线程池/进程池来交换时间空间。但是从Python3.2开始,标准库为我们提供了并发的。Futures模块,它提供两个类:Threa
python面试10问
摘要:生成器send的应用场景 当生成器生成一个新值时,通过send函数传递一个新的参考值(赋值给=yield的左边),然后根据这个参考值去做事情 可以了理解为用于和生成器通信 第一次生成器启动必须使用next()或者send(None) 如何动态创建类,应用场景是什么 type 使用type()函数创建
同步与异步
摘要:多路复用概念 监听多个描述符(文件描述符(windows下暂不支持)、网络描述符)的状态,如果描述符状态改变则会被内核修改标志位,进而被进程获取进行读写操作 I/O多路复用 简单解释:一个进程(线程)可以同时对多个客户请求进行服务 用于提升效率,单个进程可以同时监听多个网络连接IO 监视多个文件描述
数据结构与算法【进阶】
摘要:贪心算法 在对问题求解时,总市做出当前看来时最好的选择。 不从整体最优上考虑 局部最优解 找零问题 假设商店老板需要找零n元钱,钱币的面额:100元、50元、20元、5元、1元,如何找零使得所有钱币数量最少? t = [100,50,20,5,1] def change(t,n): m = [0 f
数据结构与算法【入门】
摘要:复杂度 时间 用来估算算法运行时间的一个单位,越高越慢 快速判断算法复杂度 确定问题规模-->O(N) 循环减半过程-->O(logN) k层关于N的循环-->O(N
python web工程师跳巢攻略
摘要:python web工程师跳巢攻略 流程 一面问基础 二面问项目 三面问设计(经验) web请求的流程 浏览器 负载均衡 web框架 业务逻辑 数据库缓存 后端技术栈 python语言基础 语言特点 语法基础 高级特性 算法与数据结果 常用算法和数据结构 分析时间/空间复杂度 实现常见数据结构和算法
协程
摘要:概念 协程是运行在单线程上的”并发“ 在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。也就是说在同一线程内一段代码在执行过程中会中断然后跳转执行别的代码,接着在之前中断的地方继续开始执
Mixin
摘要:Mixin(混入) Mixin是一种开发模式,将多个类中的功能单元的进行组合利用的方式,用于多重继承,类似于JAVA 的接口(interface) 另外,当某个模块不能修改时,通过Mixin方式可以动态添加该类的方法,动态改变类的原有继承体系。 Mixin类的一般命名方式以Mixin,able,ib
迭代器和生成器
摘要:Iterator(迭代器) 迭代器是访问集合元素的一种方式,是一个可以记住当前访问位置的对象 将对象转成迭代器使用iter() a = [1,2,3] iter(a) next(a) >>> 1 迭代器可以使用next()进行遍历,当全部遍历完之后,就会抛出StopIteration异常 定义可迭代
GIL
摘要:小历史 Guido van Rossum(吉多·范罗苏姆)创建python时就只考虑到单核CPU,解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁, 于是有了GIL这把超级大锁。因为cpython解析只允许拥有GIL全局解析器锁才能运行程序,这样就保证了保证同一个时刻只允许一个线程可以使用
with语法
摘要:with语法 with语句实质上是上下文管理,是try...finally...的简化 1 try: 2 f = open('/path/to/file', 'r') 3 f.read() 4 finally: 5 if f: 6 f.close() 7 8 9 10 with open('/p
猴子补丁
摘要:在运行时替换方法、属性等,动态属性替换 在不修改第三方代码的情况下增加原来不支持的功能 在运行时为内存中的对象增加patch而不是在磁盘的源代码中增加 主要用途在于源码不宜直接修改,而添加补充功能 例子:python自带的json包不支持自定义对象转json串,在python中用json.dumps
python的内存管理机制
摘要:内存的管理:分配(malloc)+回收(free) 作用:控制python内存,对python内存进行回收 python中一切皆对象,python的存储就是分配内存空间去存储对象 整数和短小的字符(基本就是一个单词)使用的是缓存机制,以便快速重复使用 使用is检验是否为同一个对象 三个方面:引用计数
装饰器
摘要:装饰器 使用目的:在不修改函数源代码的基础上,添加额外的功能,类似打补丁 了解装饰器之前先要清除闭包的概念 闭包 引用了外部自由变量的函数 自由变量:不在当前函数定义的变量 特性:自由变量会和闭包函数同时存在 即使程序离开发布作用域,如果闭包仍然可见,绑定变量不会销毁 每次运行外部函数都会重新创建闭