摘要:一、程序在内存中的分配 1、栈区:由编译器自动分配,主要是存储函数的参数,局部变量等。 2、堆区:一般由程序员分配释放,若程序员不自动释放,一般程序结束后会被回收。 3、全局区(静态区):全局变量和静态变量实际上是存在一起的,程序结束后由系统释放。 4、文字常量区:存放常量字符串。 5、代码区:存放
阅读全文
摘要:一、为什么有了GIL还要给线程加锁 先说一下GIL,所谓的GIL,也叫全局解释器锁,它限制了任何时候都只能有一个线程进入CPU进行计算,所以python所谓的多线程并不能真正的并行。 那为什么有了GIL还需要给线程加锁呢?不是直接一个线程处理完一个数据才轮到下一个线程进行吗?线程锁不是多此一举? 解
阅读全文
摘要:一、什么是动态规划 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。 使用动态规划特征: 1.
阅读全文
摘要:一、一个关于找零的经典问题 这个问题换而言之就是,服务过的持50的客户数量一定要大于等于持100的。解决的思路大致如下: 其实上面的解法本质就是卡特兰数: 所谓的卡特兰数就是满足下面式子: 卡特兰数的前几项是1, 1, 2, 5, 14, 42, 132, 429, 1430 二、括号匹配问题 显然
阅读全文
摘要:一、题目 二、解题思路 三、代码 最后运行结果如下:结果和eval完全一样
阅读全文
摘要:1、无重复最长子字符串 题目: 解法: 2、盛最多水的容器 解法: 3、三数之和 对于寻找两个数的和,我们通常采用首尾双指针的处理方法,即对于排序后的数组(升序)而言,分别从头尾向中间靠拢,当头尾指针对应元素之和大于目标值时,我们需要缩小元素和,即尾指针前移。当元素之和小于目标值时,我们需要增大元素
阅读全文
摘要:一、set去重简单实例 我们知道对于一个列表最简单的去重方法就是直接调用set函数,利用集合元素的唯一性,就可以做到去重。但是,这个底层原理究竟是什么样的却一直半解。 且看下面剖析 二、重新set实现机制 从上面可以看出,set方法就是去调用hash方法,然后根据哈希值一不一样就行去重判断,但是事实
阅读全文
摘要:一、什么是单例模式 二、用类装饰器实现单例模式 三、使用__new__ 四、使用元类 待补充,研究中
阅读全文