文章中的代码仅在Python3中测试成功,没有在Python2中测试。 0X00 split升级 字符串有一个split方法,可以用某个字符或字符串把源字符串切开。但是存在一个弊端,切割位置是固定的,不能灵活切割。有这样一个需求,将这个字符串hello 1 wrld 2 python 3 linux切割开,以每个数字为分隔符。这样标准的str.split就不能完成任务了。但是在re模块中有一个re.split可以完成这任务。这个方法的分隔符不是使用准确不变的字符/串而是使用正则表达式。 这里使用的正则表达式就是普通的字符串形式,而不需要re.compile进行编译。有了这个方法就可以更加灵活地切割字符串了。 0X01 字符串开头结尾的匹配 当我们有一堆的url,想在url中找到http开头且.jpg结尾的图片文件,以前我总是直接str.strip('http://') ==…
文章中的代码仅在Python3中测试成功,没有在Python2中测试。 0X00 *表达式 从某个可迭代对象中分解出N个元素,但是这个可迭代的对象可能会超过N,会出现too many values to unpack异常。 比如我这儿有N个统计信息,因为第一次和最后一次的信息不准确需要删除掉,而将中间的信息保留下来,那么就可以这么弄。 这里的赋值就是将第一个和最后一个赋给了first和last,而中间的给了new_grade 0X01 定长队列 有一种情况:程序在运行的时候会记录日志,比如说web程序的访问历史。如果我们需要只保留最后的1W条数据,那么很快能想到使用一个列表,每次插入数据的时候判断长度,然后对应的append和del。但是有一个更简单且更快速的方法就是使用collections.deque()。下面的例子中有一个1024长的列表,我们列表里只存最新的7条。 运行之后可以看到,列表里只保存了最后插入的七条数据。 0X02 最大最小的几个元素 当我们有一个列表,需要找到列表里最大的N个元素时,一般会想到先排序然后分片,这想法当然不多,但是还有一个更好用的方法:…
0X00 实例方法 Python中的实例方法是在面向对象编程中用到的最多的方法类型了。 实例方法 从字面理解就可以,就是说这个方法是属于实例的。每次实例化一个对象出来,这个对象都会拥有这个方法。从下面代码中就可以看得出来,这里我定义了一个实例方法'get_name()',定义实例方法不需要任何特殊的修饰符。 从运行结果可以看出来,针对每一个实例,调用实例方法的输出是不同的,也就可以证明这个方法是属于某个实例的。 小明 小红 0X01 静态方法 静态方法用的也很多,比如我们写正则表达式的时候经常会用到表达式的编译,一般都是这么写的're.compile()'这里就是一个静态方法。可以看到我们在调用编译方法的时候是并没有实例化一个re对象的。所以可以知道 静态方法 就是不需要实例化对象即可调用的方法。下面有一个例子,例子中还是上面的Student类,但是定义了一个静态方法'say_hello()',因为这是一个静态方法,所以不需要实例化对象即可调用。正因为这些特点,在定义静态方法的时候没有一个默认的参数self。…
0X00 修改配置文件 MySQL/MariaDB默认并没有采用utf-8编码,所以我们要修改配置文件,以让其使用utf-8。 /etc/my.cnf就是配置文件,打开之后在[mysqld]下面加入两行,使其变成 修改好配置文件之后重启服务 0X01 修改数据库的字符集 在修改配置文件之后新建的数据库默认就是使用utf-8了,但是之前的还不是所以要修改一下。登录到数据库,在命令行界面修改数据库的字符集。 再次重启数据库服务。这样再连接到数据库就解决掉汉字变问号的问题了 0X02 推荐两款软件 大家好多人都在用Navicat,但绝大多数人用的都是盗版软件,这里推荐大家用一些好用的开源软件来替代。 1 HeidiSQL 1. 一款开源软件 2. 可以连接MySQL/MariaDB/SQL Server 3. 官方中文支持 下载地址:HeidiSQL 2 MySQL Workbench 1. 一款开源软件 2. MySQL官方开发 3. 导出表关系图非常强大 下载地址:MySQL Workbench
0X00 最优算法不可能实现算法 最优算法听起来很棒,但是 实现起来是不可能的 。最优算法是:当发生缺页中断时,将最晚会用到的页换出。也就是说,有三个页,现在发生了缺页中断,第一个页在第201条指令的时候会用到,第二个页在第5001条指令的时候会用到,第三个页在第20000条指令的时候会用到,那么第三个页面就是最晚会被用到的,就将其换出。这样确实是最好的效率,但是真正实现不了的原因是:程序不可能知道自己在什么时候需要哪些内存,所以就不能找到最晚会被用到的页。因为要用未来的事情来判断所以我一般称之为未来算法。虽说实现不了,也不是说这个算法就没意义了。这个算法最大的意义就在于可以比较效率。效率越是接近最优算法的就越好,当一个算法已经能达到最优算法效率的101%时,就没必要累死累活的去优化效率了,可以去找一些别的瓶颈了。 0X01 最近未使用NRU 如果说最优算法叫未来算法的话,那么这个最近未使用就可以叫做历史算法,这样就好理解了。当系统发生缺页中断的时候,在内存中找到最久没被用过的页,将其换出。有一种实现方法:给每一个页设置一个 R(read)位和M(modify)位…
0X00 多线程…
0x00 MariaDB的身世 自从MySQL被Oracle收购之后,社区就一直担心MySQL可能会被闭源或者一些其他的原因导致MySQL的支持出现问题。所以现在好多发行版本默认的数据库都从MySQL转移到了Mariadb。而且社区也开始大力支持Mariadb,再加上Mariadb的使用和API和MySQL完全一样,所以这里选择使用Mariadb而不是MySQL。 MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人麦克尔·维德纽斯主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL…
0X00 firewalld 守护进程 firewall-cmd命令需要firewalld进程处于运行状态。我们可以使用systemctl status/start/stop/restart firewalld来控制这个守护进程。firewalld进程为防火墙提供服务。 当我们修改了某些配置之后(尤其是配置文件的修改),firewall并不会立即生效。可以通过两种方式来激活最新配置systemctl restart firewalld和firewall-cmd --reload两种方式,前一种是重启firewalld服务,建议使用后一种“重载配置文件”。重载配置文件之后不会断掉正在连接的tcp会话,而重启服务则会断开tcp会话。 0X01 控制端口/服务…
0X00 文件 ‘文件’是进程创建的逻辑单元。 《现代操作系统(原书第三版)》 文件我们再熟悉不过了,电脑磁盘上存的都是文件。在Windows里和Unix系列系统里,表面看上去文件之间还是有一点点小的区别。比如,在Windows里主要还是以文件的后缀名来标识文件具体是什么类型的,图片还是视频;在Unix系列里文件的后缀名就没那么重要,主要后缀名是用来帮助人们识别文件类型的,操作系统并不很关心。 真正的文件类型 是文件的本质类型,不是我们常说的exe类型、doc类型、更不是什么图片类型和视频类型。在Windows下有常见的普通文件和目录。 _没错,目录其实是文件的_ 。在Unix里,还有一些叫字符特殊文件和块特殊文件的。 0X01 文件的元数据 文件里最重要的东西肯定是文件内容了,但是文件存在磁盘里是还有一些其他的相关数据也被存进去了的,那些数据被称之为元数据 。想一下文件的相关信息,在Windows里右键一个文件选择属性或者在Linux里使用ls…
0X00 Linux中的计划任务 我们使用Linux更多的时候是在服务器上,然而我们有的时候就需要让计算机在固定的某个时间做一些事情。比如我们就可能有有如下需求: 1. 临时有事需要离开电脑,但是一个小时后需要备份某个目录里的文件 2. 写了个爬虫去抓取某网站的新闻,每隔十分钟就去爬取一次 3. 周期性的执行某脚本,但放在后台的话退出ssh就会被自动关掉 4. 其实还有好多这种可能............ 在Linux中有两种常见的任务管理,一个是at也就是在某时做某事,另一个是crontab也就是周期性任务表。使用at可以方便地给Linux设置一个在什么时候做什么事的计划,用crontab可以方便地给Linux设置我要做某事,多久做一次。 0X01 使用at命令 检查atd服务是否开启 atd就是at命令的守护进程,系统默认是打开着的,但是也有可能被关掉,在RHEL系中可以使用systemctl status atd来查看服务是否已经开启,没有开启的话可以用systemctl restart atd来打开服务 创建一个计划任务…