最近在写Python代码,程序主要就是涉及大文件的IO以及处理。当时在Mac上跑,自己即使的手动释放一下内存,还勉强可以跑,Mac的Swap比较大,虚拟内存用到16个G左右。而再移到台式机上面跑,8G的内存,不久就MemoryError了,怀疑是当时装系统时候设置的Swap太小的缘故。单进程/线程都不堪重负,更别说使用多进程来加速了。想到了邱大神在服务器上面开的100G内存的虚拟机,很久不用了,遂把代码扔上去,顺便稍微把代码用简单的多进程操作简单加了加速。
多人维护一份代码时,经常会出现,两边同时更改一个文件,产生冲突问题,而本地的更改,又暂时不能commit,导致git pull的时候报error,大部分时候,我们需要暂存本地的修改,先stash,返回自己上一个commit,将最新代码git pull到本地,之后再stash pop,继续原来的工作。
git pull
今天在写阿里的代码,涉及到大量的数据load进内存处理的操作,由于Python的list/dict都是使用自动引用计数的机制进行内存释放;而操作中经常需要将文件读入一个list,处理后扔到另一个list,再转存。当不手动释放list占据的内存时,内存泄漏严重。
面试题中经常遇到,定义一个类,或为空,或定义了几个内置类型的变量,或包含构造、析构函数、成员函数,问在32位/64位平台上,sizeof(class)的字节数。比较关键的几个考虑:
C++中的多态与覆盖一直是容易混淆的概念,多态即一个接口,多种方法,程序在执行时才决定调用的函数,OOP的核心概念,通过虚函数来实现,虚函数允许子类重新定义成员函数:而子类重新定义父类的做法称为覆盖;只有重写了虚函数才算多态;而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,参数类型不同,或者两者都不同。编译器会根据这些函数的不同列表,将同名的函数的名称做修饰,从而生成一些不同名称的预处理函数,来实现同名函数调用时的重载问题。但这并没有体现多态性。