自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 redis (bitcount) 的汉明算法逻辑

redis 中实现 bitcount 的汉明算法逻辑

2022-12-17 00:09:40 404 1

原创 windows 平台上日志文件监控

在 windows 上读取日志文件

2022-12-11 22:52:10 581

原创 如何在 python 中实现内建函数的重载

python 重载内建函数

2022-09-26 00:44:27 337

原创 python pickle 复原导致的变量关系丢失问题

运行 python 时,可以将当前的某些变量通过 pickle 序列化到二进制文件中;然后在需要时,再将这些变量还原,如以下代码:import picklef = open("abc.pickle", 'wb+')x = [1,2,3]ls = [[(23, 29), (22, 79)], 'hello信息', '35',x]num = 3.1415926pickle.dump(ls, f)pickle.dump(num, f)pickle.dump(x, f)print(id(x),id

2022-05-22 23:33:49 300

原创 c 中指针乱用造成的一个越界问题

《C陷阱与缺陷》第四章 4.4 节提到了一个有趣的问题,代码如下:#include<stdio.h>int main(){ int i; char c; for(i = 0; i < 5; i++) { scanf("%d",&c); printf("i=%d\n",i); } printf("\n");}这段代码很简单,它的本意是循环5次,向 char 类型变量中不停输入一个值。但是实际运行(gcc version 9.3.0 + ubuntu

2022-05-22 20:51:36 233

原创 git 暂存区

都说 git 分为三个区域,即所谓工作区、暂存区、版本库三部分,就像如下图所示(图片来源于 https://blog.csdn.net/qq_32452623/article/details/78417609 ):一个 git 工程中,工作区很好理解,就是我们编辑代码的地方,版本库似乎也很好理解,就是 .git 目录,这个目录中有很多文件和子目;如果整个 .git 目录就是版本库,那暂存区在哪里?其实上面的画法不是很正确,或者上面的理解不是很正确。如果认为 git 有三个区域,那所谓的版本库版本库并

2021-10-09 00:36:05 3508

原创 gitlab上如何将一个仓库中所有历史信息都提交到另一个仓库

现在有一个需求,在gitlab上有一个仓库,其中保留有大量的分支和tag信息;现在该仓库准备废弃,迁移到另外的仓库中,但是所有历史记录也要保存在新的仓库中。gitlab上如果直接fork会把仓库fork成为自己私有的,这不符合要求。git本身支持一个本地仓库对应多个远程仓库,只要使用下面命令即可 git add name url但是 git push 时,默认只能推送当前分支,当然也可以使用 -all 推送所有分支,不过这样的操作也只能推送本地已经创建出来的分支,而新拉取的仓库在刚开始时默认只有m

2021-09-02 14:14:56 979

原创 sqlite中的 database is locked 问题

最近写产品用到了sqlite3作为单机数据库,碰到一个挺有意思的问题。需求大体是两张表,当查询时需要连表查询,而更新时也需要连表更新;总共只有几百条数据,但运行过程中出现明显的超时和异常,以为是sqlite有问题,但想想而已不可能,这么流行的数据库不至于扛不住几百条数据的并发查询,经过查询,发现是因为sqlite的锁是个库级别的完全单线程锁。代码是用go写的,model部分如下:package maintype App struct { Id int `gorm:"id;primary_

2021-07-26 00:29:37 12794 2

原创 《高性能mysql》中的一些困惑

最近看《高性能mysql》,遇到一些不同版本引起的困惑,准备长时间更新。1 第三版第六章第6节 编写偷懒的union作者在这里举了一个例子,主要是想说明如果需要从热点表和非热点表中查数据时,如果热点表中找到数据,非热点表应该如何找。作者这里举了一个例子,大体是使用一个中间变量来操作。简表的sql如下: CREATE TABLE `a1` ( `id` int(11) NOT NULL, `name` varchar(10) DEFAULT NULL, PRIMARY KEY (`id`)

2021-07-25 00:06:33 95

原创 python线程可重入锁

RLock是Python的可重入锁,位于threading包中;它本身只是一个工厂函数,实际返回的是两个类型中的一个:def RLock(*args, **kwargs): if _CRLock is None: return _PyRLock(*args, **kwargs) return _CRLock(*args, **kwargs)可重入锁可以被拿到锁的线程多次获取,但必须以相同的次数释放,才能真正释放对锁的拥有权。根据环境不同,内部返回不同的对象,这里只讨论

2021-07-07 14:16:04 436

原创 git stash

这个命令用来将当前暂存区内容进行保存,然后整个工作区、暂存区、仓库恢复到上次提交的状态。首先看一下当前git状态:当前状态下只有一个README文件;我们向工作空间加入一些文件或者文件夹,最后的状态如下:整个工程目前由main.py空文件、README空文件、first/main.py空文件这几个部分组成。然后再添加一些内容使得当前git状态如下:即往main.py中写入一行内容并add到暂存区,新建两个文件test.py和__init__.py,其中test.py中增加一行内容,但均不放

2021-06-20 23:52:04 359

原创 windows python多进程的递归创建问题

在unix和linux上,multiprocessing.Process默认是使用fork创建一个子进程出来,然后在分裂的地方,子进程会调用指定的target中的函数,函数执行完毕则子进程也就结束了;而父进程则继续往下运行直到结束;所以以下代码在linux上没有任何问题:import multiprocessingimport time,osprint("????")def hehe(): while True: time.sleep(1)th1 = multiproce

2021-06-07 14:30:08 469 1

原创 python __add__ __iadd__

这是两个不同的类方法。假设对象是a,它执行下面两个动作:>>>a += 10>>>a = a + 10当一个对象执行+=时,会先查找对象的__iadd__方法,有这个方法的话,就调用该方法,没有则调用__add__;但是如果执=+,则直接调用对象的__add__方法。这两个方法都会返会内容,但返回的情况并不一样,对于前者来说,加是原地修改,返回对象是自己;对于后者来说,返回的是一个新对象。对于字符串 数字等这类不可变对象来说,没有__iadd__;而像数组之

2021-03-01 13:54:36 468

原创 1 cat

cat命令不止能打印出文件中的内容到指定到标准输出;当省略文件名或者用 '-'替换文件名时,表示从标准输入读取;当然似乎还能从unix domain socket中进行数据的读取。参数如下:-b 会给打印出来的每一个非空行标记行号,从1开始:上面空行都没有记行号。-e 展示不可打印字符,同时在每一行的最后打印一个美元符号:-n 给打印出来的每一行打行号,这个与-b的区别是它会把空行也计数的:-s 会将多个连续空行压缩成一个:-t 打印非可见字符,tab会被显示为^I,对py代码特别有用

2021-01-04 21:18:29 307

原创 redis为什么使用skiplist

跳表是redis中基础数据结构之一,主要用在有序表中,与字典一起使用。跳表在功能上主要用来快速查询一个或者一个范围内的数据。首先看跳表的基本结构:图片来源:https://zhuanlan.zhihu.com/p/68516038跳表中每个节点定义有以下最基础的几个部分:1 值,这个值可以直接是个数值,也可以是个指针,根据自己的需求定;2 层数,如上图所示,跳表中每个节点大小并不完全一致,每个点都可以有若干层,第一层是所有节点都有的,节点中的相同层数会通过链表前后按序连接起来,这样当

2020-12-24 14:07:40 193

原创 mac相同的两台终端通信的问题

遇到一个场景,某单位员工电脑上网时要求交换机端口绑定终端mac地址,这样就限制了外机接入网络的可能性;但是有的员工不止有一台终端而每个工位却只有一个端口,为了上网就需要上报多于一个mac;有的员工图省事,就将自己手头所有终端的mac地址都改成了一样,用哪台上网就把网线戳到哪台上。但有一次遇到一个需要,要在两台终端之间传递文件,因此就直接用一根网线把两台终端连了起来,然后配置好静态ip。#mermaid-svg-HSaX3RDIkQoVPsGY .label{font-family:'trebuchet m

2020-12-13 18:21:13 1862

原创 git 远端分支名本地缓存

遇到一个比较搞的git问题,从本地git branch -r时发现远端有一个分支存在,然后去仓库里边查找时并没有找到这个分支;刚开始以为是仓库对错了,git remot -v显示没问题;然后执行git push --delete origin xxx # 远端分支名称却报远端没有这个分支的错:error: unable to delete 'origin/xxx': remote ref does not exist根据这个https://www.cnblogs.com/coding

2020-12-09 17:19:50 187

原创 生成pip可安装的自定义库

pip安装第三方库时,支持多种格式;基本要求是必须有setup.py文件。假设工程的目录结构如下:├── README.txt├── pagtest│ ├── __init__.py│ ├── abc│ │ ├── gzx│ │ │ └── zjj.html│ │ └── main1.go│ ├── def│ │ └── __init__.py│ ├── main.go│ ├── print1.py│ └── print

2020-12-07 23:57:52 420

原创 pip自定义安装位置

最近遇到一个需求,安装py包时,不放置在默认的site-packages下,而是放置在指定位置,类似于go get时会放置在指定的gopath下边一样,pip提供了这样的参数,使用target:pip install --target=path package基本命令如上,其中path是要安装的位置,而package则是要安装的包名;安装的包可能有自己的依赖,这些依赖也会被安装在这个目录下;项目中因为有requirements文件,所以我们的命令是:pip install -r requireme

2020-12-02 19:26:45 1018

原创 git 重命名和删除文件

(本文内容来源于《Git从入门到精通》北大出版社高见龙著)1 删除文件(rm)正常情况下,可以直接使用linux的rm把文件干掉;如果文件已经在git追踪中,这样干会生成一条delete记录:类似于这样的提示,然后开发人员需要在确定后需要再将这个更改add到git中;2 删除文件(git rm)可以直接使用git rm操作,这样的好处是上面的两步并作一步完成了。3 --cached上面的两步会真的将文件实体从磁盘删除,如果只是不想再追踪,则使用git rm --cached:可以看到文件

2020-12-02 14:18:00 357 1

原创 git 查询历史记录

(本文内容来源于《Git从入门到精通》北大出版社稿件龙著)1 查询某个人的提交历史git log --oneline --author="xxx"其中author为要查询的作者的名字;如果要查询多个人的提交历史,则使用i 下格式:git log --oneline --author="xxx\|yyy"注意,上面要对“|”转义;2 查询commit中的关键字信息git log --oneline --grep="xxx"其中xxx为需要查询的关键字,grep为查询的单一关键字,类似于a

2020-12-02 13:53:40 873

原创 redis 字典

redis中的字典就跟正常语言中的hash差不多,同样需要计算key来索引,同样需要解决冲突问题等。代码位于src/dict.c|h中dictEntry结构体字典的基本组成是dictEntry结构体:typedef struct dictEntry { void *key; union { void *val; uint64_t u64; int64_t s64; double d; } v; struc

2020-12-02 01:04:24 140

原创 redis sds

在任何语言和系统中,字符串都几乎是使用频率最高的数据结构,而标准的c字符串有一些问题,主要包括:字符串必须以’\0’结尾,导致图片等二进制不安全的数据无法以字符串形式存储;字符串统计长度的复杂度为O(n),调用strlen时会对整个字符串从头到尾遍历,如果不小心在外层加了一层循环,会导致复杂度变更高,这点上没有java或者python方便;容易发生溢出的问题,字符串是以’\0’为结尾的,一旦操作不慎,会在拼接字符串时,溢出到别的内存区域;拼接字符串比较费时,3中说的一般是字符数组,字符串变量本身不

2020-12-01 00:30:37 234

原创 python __getattribute__ 的一个小利用

最近在写一个功能,要在paramiko包的基础上封装一层,提供更多的上传下载功能。代码包本身在发布前会打成pyd文件给用户使用,封装的时候没有使用直接的继承关系,而是在一个新的独立类中封装了一个connection对象作为类实例属性值,类似于下边这样:class SFTP: def __init__(self,conn): self.conn = conn然后实际使用的时候发现有个问题,就是用户其实可以通过dir的方式查到SFTP实例对象的属性值,本来加密的初衷就是不想让用户知道类的内部细节,

2020-10-08 00:26:24 180

原创 python functools.lru_cache

当调用的函数是一些耗时操作且结果只与参数有关时,为了提高响应速率,可以使用这个函数作为装饰器,它本质是一个缓存池,一次新的计算后会缓存这次计算结果,当下次被调用时就有可能不用再计算,当然只是有可能,具体看后面的代码解读。假如有一个函数需要根据传入的字符串去硬盘上读取相应的文件文本并返回给用户,则可以这样使用:from functools import lru_cache@lru_cachedef readFile(filename:str): return open(filename)但是lr

2020-10-04 14:12:57 939 1

原创 python functools.wrap装饰器

这个装饰器是用来维护被装饰的方法中一些最基本的属性的 ,位于functools.py文件中,使用的格式如下:from functools import wrapsdef outer(f): @wraps(f) def inner(*args,**kwargs): return f(*args,**kwargs) return inner可以看到被装饰的方法被要求作为wraps的参数传入进去。它的原型如下:def wraps(wrapped,assigned

2020-10-04 12:14:00 693 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除