Git Git - 如何将项目Clone至一个非空文件夹 背景 在 GitHub 上创建了一个项目时,基本会选择初始化一个 readme 文件,有时还会生成 .gitignore 、LICENSE 文件,但是有时候会在本地进行了一些开发,这时候我们需要把两者关联起来。之前一直在使用临时文件夹的方式,直到找到了下面的方法,不用使用临时文件夹,就可以直接将两者关联起来。记录一下步骤。 步骤 进入目标文件夹 cd target/folder/ 初始化 git 仓库 git init 将需要忽略的文件、文件夹加入
Algorithm 拓扑排序 含义 拓扑排序(Topological Sorting)是一个有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足如下两个条件: 每个顶点出现且只出现一次 若存在一条从顶点 A 到 B 的路径,那么在序列中顶点A出现在顶点B前面 步骤 从DAG图中选择一个没有前驱(即入度为0)的顶点并输出 从图中删除该顶点和所有以它为起点的有向边。 重复1和2,直到当前的 DAG 图为空,或者当前图中不存在无前驱的顶点为止,后一种情况说明有向图中必定存在环。 于是得到拓扑排序后的结果是
Python Python3 获取协程的返回值 如何获取通过 asyncio task 方式运行的函数的返回值: asyncio.wait asyncio.gather future.result asyncio.wait 与 asyncio.gather 对比: asyncio.wait 比 asynci.gather 更低级,asyncio.gather 主要集中在收集结果,它等待并按给定的顺序返回其结果,asyncio.wait 只是等待,它不是直接给出结果,
Python Python 方法解析顺序MRO-C3算法 在上一篇文章中分析了 Python 的 MRO 的变迁历史,参考 Python 方法解析顺序 MRO – 艽野尘梦 Python 从 2.3 开始就将 mro 换成了 C3,这里记录一下 C3 的具体过程。 原理 类 C 的线性化记为 L[C] = [C1, C2, … Cn]
Python Python 方法解析顺序 MRO 对于支持继承的编程语言来说,其方法和属性可能定义在当前类,也可能来自基类,所以在方法调用时就需要对当前类和基类进行搜索以确定方法的位置。搜索的顺序,就是方法解析顺序 (Method Resolution Order, MRO)。对于只支持单继承的语言来说,MRO 比较简单;但对于Python这种支持多继承的语言来说,MRO 会相对复杂。 Python 的类 Python 有两种类: 经典类 python 2.1 之前,经典类是唯一可用的形式 新式类 python2.2 引入
Git Git 重命名本地和远程分支 背景 有时候分支命名出错,开发的过程中发现功能与名称不符,需要重命名分支名, 先来查看一下 git branch 命令里面是否提供了相应的功能: git help branch 在输出中可以看到这样一行说明: With a -m or -M option, will be renamed to . If had a corresponding reflog, it is renamed
Python Python3 绑定方法与未绑定方法 class Bound(object): def add(self, a): print('add one') bound = Bound() print(Bound.add) print(bound) print(bound.add) 上述代码的输出为: <function Bound.add at 0x10814a048> <__main_
Python 使用Middleware为Scrapy Spider设置随机UA 前言 做爬虫的都知道,模拟真实用户是很重要的,爬虫与反爬虫斗争的过程中,其实就是围绕伪装与鉴别,常见的反爬虫策略都会添加对 User Agent 的校验,会封掉常见的爬虫请求头,比如 Scrapy 默认的 User Agent 是什么呢?同过下面的方式试一下: scrapy shell https://httpbin.org/user-agent 在结果中使用: response.text 进行查看,结果为: { "user-agent":"Scrapy/
Python Python中的垃圾回收机制 简介 Python3 的垃圾回收机制(Garbage Collection)分为三点: 引用计数 — Reference Counting 标记-清除 — Mark and Sweep 分代回收 — Generational Collection 引用计数 — Reference Counting 什么是引用计数? 参考下维基百科的定义: 引用计数是计算机编程语言中的一种内存管理技术,是指将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,
Python 如何在 Python3 中实现单例模式? 在最开始接触设计方法的时候,我们经常会接触到单例模式,它是23种GOF模式中最简单,也是最经常出现的一种设计模式,也是面试官最常爱考的一种模式。单例模式是一种创建型模式,它提供了一种创建对象的方式,确保只有单个对象被创建。这个设计模式主要目的是想在整个系统中只能出现类的一个实例,即一个类只有一个对象。 什么是单例模式? 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 — Wikipedia 实现单例模式的思路 实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,
WordPress 使用wordpress为网站构建blog栏目 背景 许多网站出于SEO内链的需要,都会设置blog栏目。今天来说一下如何使用 nginx 的 proxy_pass 将 wordpress 固定到 网站的 /blog 栏目下。 思路 将 wordpress 部署在本地的一个端口,然后在站点 nginx 的 server 配置中,将 blog 通过 proxy_pass 转到本地端口的wordpress实例上。这样我们通过
Python Difference between `==` and `is` operator in Python 问题 遇到了一个现象,具体代码不贴了,大概是这样的: def find(x, nums): ans = 0 for n in nums: if x is n: ans += 1 return ans >>> find(10, range(20)) 1
MySQL MySQL 六千万数据迁移过程记录 背景 业务中使用的一个 群组与用户的关系表,典型的查询场景是根据群组ID查询所有的用户ID,于是设计表结构如下: CREATE TABLE `group_user_relation` ( `user_id` varchar(32) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user id', `group_id` varchar(255) COLLATE utf8_unicode_
PHP CentOS7 php-fpm 参数优化 背景 在linode上买了最低配的主机,将自己的个人博客站点搭建在上面,博客是用 WordPress 搭建的,对应的在服务器上部署了 Nginx + MySQL + php-fpm。 具体过程可参见之前的文章: 在CentOS 7上安装LEMP(Nginx+MySQL+PHP) Install WordPress 但最近一段时间站点总是莫名奇妙的离线,Jetpack 插件隔三差五给我发送监控邮件,告诉我我的站点没有响应了。之前几次在机器上看发现是 mariadb 数据库进程挂掉了,一直以为是我的数据库配置有问题,导致系统kill掉了它。所以每次都只是简单的重启了mariadb服务,也没有深究。后来将数据库的连接数调低,
HTTP CORS--跨域资源共享 CORS(Cross-origin resource sharing) 跨域资源共享 定义 MDN 给出的定义是: CORS (Cross-Origin Resource Sharing) is a system, consisting of transmitting HTTP headers, that determines whether browsers block frontend JavaScript code from accessing
Python 关于 Gmail 邮件地址的校验 之前介绍了通用的email校验方法,参考之前的文章 如何校验邮件地址是否存在? ,但是对于 Gmail 的邮件地址,我们可以使用如下的办法进行邮件校验。 这个方式源于一个被发现的接口,这个接口对于存在的Gmail地址和不存的Gmail 地址,有着不同的表现形式。而且这个接口还没有速率限制,那我们可以利用这个接口做很多事情。 方法介绍 这个网址为: https://mail.google.com/mail/gxlu,我们准备一个不存在的邮件地址:zijixiabiandeyouxiandizhi@gmail.com $ curl -v https://mail.google.
SMTP 如何校验邮件地址是否存在? 前言 在国外,大家更加倾向于使用邮件进行沟通,而不像国内,钉钉微信一顿轰炸。而且在国外,最常见和有效的营销方式还是EDM,做EDM过程中经常会遇到的一个问题就是如何验证一个电子邮箱地址的真实性?发送一封含有验证链接的邮件,这在网站注册时验证用户是很有效的,但并不适合EDM中大规模的邮件验证。接下来介绍一下基于SMTP协议验证邮箱有效性的基本原理,和具体的实现。 SMTP 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是在Internet传输电子邮件的事实标准。 SMTP是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail
Linux CentOS 7上WordPress由于文件权限导致插件无法安装 Centos7 上使用 WordPress 搭建了一个小站,使用 Nginx 做服务器,配置环节一切正常,最后站点也可以正常访问,但是在安装插件的时候出现了 无法创建文件夹的错误。google 一番,都是说 WordPress 文件权限设置不对,但是我已经将所有 文件夹权限设置为 755 文件权限设置为 644。 直到我看到了这个 https://wordpress.stackexchange.com/questions/302778/installation-failed-could-not-create-directory-centos-7 才找到根源所在
Linux CentOS 7 修改 ssh 端口 晚上登陆 linode 主机之后,发现有 4k + ssh 失败的登录记录。嚯,我这是被盯上了呀。 统计一下多少暴力破解 root 密码的 $ sudo grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort
WordPress Install WordPress 如何在 centos7 上安装 WordPress 所需要的环境 LEMP 参考上一篇文章 在centos7上安装 LEMP 安装 WordPress 下载并解压 WordPress 源码 为 WordPress 创建数据库 将数据库信息配置到 WordPress 的 配置文件中 将 WordPress 放到指定目录(建议 放到 /var/www目录下 ),并配置 nginx
Linux 在CentOS 7上安装LEMP(Nginx+MySQL+PHP) Install LEMP stack(Linux Nginx MySQL PHP)on CentOS7 step one — install nginx 添加 CentOS 7 EPEL repository sudo yum install epel-release 安装 nginx sudo yum install nginx