自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Neo

  • 博客(141)
  • 收藏
  • 关注

原创 Cpython源码分析01_使用Visual Studio2017来研究Cpython,debug和release两种模式下编译的Python中__sizeof__()不一样的地方

阅读本文章最好有一些C语言和python语言的基础的读者1.为什么要研究Cpython目前python主流的解释器CPython、JPython、IPython、PyPy、IronPython,但是用到最多的、生态最好的还是Cpython。了解python底存的构造,比如List、Dict、Set、Tuple等他们到底是怎么实现的,而不是用它的时候两眼一抹黑,了解Cpython有助于让我们编写出更加高质量的python代码。由于Cpython中绝大部分都是用C语言编写的,研究它有助于不会忘记C语言

2021-08-04 01:58:02 8383

原创 快速对二叉树和前中后序遍历的相互转化

首先回忆一下前中后序遍历的概念前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。已知二叉树的结构,快速推算前中后序遍历二叉树如图中序遍历根据中序遍历定义第一步:2(左)4(根)6(右)第二步:遍历第一步中的非根节点,还是按照中序遍历

2021-07-25 20:13:11 8608 11

原创 Python装饰器的总结,感觉总结的比较通透

简述当有多个装饰器叠加时,从最靠近被装饰函数的装饰器开始执行。就算被装饰函数不被调用,只要程序模块开始被运行,那么装饰器中的逻辑也会开始执行,这个和闭包有关。闭包知识补充(大白话)在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。不带参数的装饰器举例from functools import wrapsdef register1(func): print('running register1 {}'.fo.

2021-07-24 22:09:58 8550 13

原创 如何查看以及修改Cpython中GIL的切换周期,验证GIL存在,的确多线程修改共享数据也不安全

python2默认值为100,表示每100条Python虚拟指令执行一次检查sys.getcheckinterval()sys.setcheckinterval(1000000)标题python31.python3中GIL的切换改成了时间片轮转,默认切换周期为0.005秒sys.getswitchinterval()sys.setswitchinterval(1)2.python3中实验1>以下代码在不使用互斥锁的情况下,只需要修改cpython默认的GIL切换时间同样可以达到

2021-03-12 20:13:33 8054

原创 vim编辑器常用指令梳理

操作描述gg跳转到文件的第一行GG跳转到文件的最后一行dd删除光标所在的行set nu显示行号nG跳转到第几行,例如22G,表示跳转到22行dd删除光标所在的行set nu显示行号A定位到当前行的行末尾i(I)a或者A定位到当前行的行首:88跳转到文件的88行3dd从当前行起删除3行yy复制一行 (nyy:复制n行)nyG或者ynG复制到第n行,例如1yG或者y1G,复制到档尾yw复...

2020-06-30 00:42:11 7998 1

原创 再次理解python多继承mro的深度优先

最近在使用多继承时再次体验了一把mro,最近工作中遇到的简化以下代码结构既可以写出一个小例子,如下:class A(object): def __init__(self, params): self.a_name = 'name_a_{}'.format(params['name']) self.a_age = 'age_a_{}'.format(par...

2019-12-18 10:12:18 11392

原创 利用python读取磁盘二进制数据获取磁盘分区的起始扇区的LBA以及磁盘分区大小

利用python获取磁盘分区的起始扇区的LBA以及磁盘大小

2019-01-24 11:36:59 13679

原创 window中相关的日志

蓝屏详细文件:C:\Windows\MEMORY.DMP 此文件信息更丰富,深入分析时需要提供此文件(若文件非常大,可先不提供),操作系统每次蓝屏会用新的文件覆盖此文件,如果蓝屏次数频繁,建议重命名备份一次此文件,便于对比蓝屏原因。蓝屏信息简略文件:C:\Windows\Minidump\ 根据文件生成日期排序,准备最近生成的1-2个文件(此文件很小,提供越多越好)。C:\Windows\System32\winevt\Logs路径下的这四种日志取出。安全日志:Security.evtx。

2024-05-02 17:41:00 143

原创 调试厉器addr2line

Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。这在应用程序和内核程序执行过程中出现崩溃时,可用于快速定位出出错的位置,进而找出代码的bug。一般适用于 debug 版本或带有 symbol 信息的库。参考。

2023-06-17 20:01:36 2416

原创 透明、匿名、高匿代理学习记录

透明代理(Transparent Proxy)、匿名代理(Anonymous Proxy)和高匿名代理(High Anonymity Proxy)是网络代理服务器的三种类型,它们主要用于隐藏客户端的真实IP地址,从而提高上网隐私和安全性。透明代理是最简单的代理类型,它会将客户端的请求转发给目标服务器,同时在HTTP头部揭示客户端的真实IP地址。匿名代理在客户端和目标服务器之间起到了中介的作用,它会将客户端的请求转发给目标服务器,但不会透露客户端的真实IP地址。实现高匿名代理的关键是删除HTTP请求头中的。

2023-06-11 22:31:58 1017

原创 cgroup配合tc工具对进程的上下行(出口入口)速度进行限制,附测试脚本

tc配合cgroup可以做很多事,既可以对单个进程、某个IP、某个端口还可以直接限制整个网卡的流量。值得我们研究学习

2023-04-21 22:44:48 908 1

原创 golang 死锁就一定会触发all goroutines are asleep - deadlock!吗?

一般其它高级语言,死锁的表现都为程序卡死,但是go则不然,它有可能不卡死有可能卡死,则分情况看

2022-08-14 00:05:01 256

原创 Python利用抽象方法实现类似Golang的interface

什么是多态性即一个接口,多种实现。

2022-08-06 19:21:05 285

原创 Golang死锁场景总结

都知道golang的读写锁中,只要读锁和读锁之间是不互斥的,写和读、写和写锁之间是互斥的,由于golang中是不支持锁的重入的(有的地方也叫做递归锁)写锁重入导致死锁读写锁冲入导致死锁b.需要注意的点,虽然读与读锁之间是不需要互斥的,但是,当两个读锁重入的时候,需要考虑对应锁对象的写锁是否会影响读锁的重入从而导致死锁例如单独的两个读锁,他们这样是不会死锁的但是需要注意写锁对重入的读锁的影响,可能会出现死锁,当有写锁申请时会阻塞掉新的读锁申请,也就是说当同时有读锁和写锁同时申请获得同一个锁对象时,优先

2022-06-29 23:29:11 1071

翻译 CPython如何实现超大整数

整数是“数字方式”持久化的,这意味着加法就像我们在小学学到的一样简单,python 的源代码向我们展示了这也是它的实现方式。文件longobject.c中名为x_add的函数执行两个数字的相加。上面的代码片段取自x_add函数,您可以看到它遍历数字并执行数字加法并计算和传播进位。当加法的结果是负数时,事情就变得有趣了。的符号ob_size是整数的符号,这意味着,如果你有一个负数,那么它就是ob_size负数。的绝对值ob_size将决定 中的位数ob_digit。与加法的实现方式类似,减法也以数字方式进行

2022-06-26 22:35:58 866

原创 Golang自动强制检查interface中的所有方法是否都实现了,如果没有都实现则编译报错

1.说明nil的类型是nil地址值为0,利用强制类型转换成了ContextBase,返回的变量就是类型为ContextBase地址值为0,然后Context=xx赋值如果xx实现了Context接口就没事,如果没有实现在编译时期就会报错,实现编译期间检测接口是否实现。(一个变量是具有类型和地址两个属性,强制类型转换只修改了类型,但是地址是原来那个(例如是nil),这样的转换的变量不用分配地址)2. 举例子...

2022-06-18 15:07:53 551

原创 Cpython源码分析03(*)_简要总结下Cpython是如何执行python test.py

当我们通过命令行传入参数的方式调用 python 解释器去运行一个模块的时候,比如: $ python test.py 图2.1中所示的过程将开始进行。(当然这只是其中一种运行 Python 程序的方式比如也可以在交互模式下单行运行,对于交互模式,这里暂时不做讨论。) 基于Python3.7Python 可执行程序是一个用 C 语言编写的程序。当它被执行的时候,所发生的事情其实就和其他 C 语言程序(比如 Linux 内核或是一个简单的 hello world 程序)差不多。请花一点时间来理解一下,Pyt

2022-06-04 20:25:10 539

转载 MySQL到底支不支持哈希索引?

经常有朋友问,MySQL的InnoDB到底支不支持哈希索引?对于InnoDB的哈希索引,确切的应该这么说:(1)InnoDB用户无法手动创建哈希索引,这一层上说,InnoDB确实不支持哈希索引;(2)InnoDB会自调优(self-tuning),如果判定建立自适应哈希索引(Adaptive Hash Index, AHI),能够提升查询效率,InnoDB自己会建立相关哈希索引,这一层上说,InnoDB又是支持哈希索引的;那什么是自适应哈希索引(Adaptive Hash Index, AHI)呢?

2022-04-30 14:47:04 303

原创 TCP的blacklog之全连接队列与半连接队列的深入研究

文章目录Linux内核探测工具systemtap的安装与使用backlog、半连接队列、全连接队列是什么半连接队列、全连接队列基本概念linux 内核是如何计算半连接队列、全连接队列的半连接队列的大小的计算模拟半连接队列占满全连接队列(Accept Queue)iprouter 库中的 ss 工具的原理是什么如何快速模拟半连接队列溢出,全连接队列溢出说明:以下所有实验均在Centos7上操作,内核版本为Linux version 3.10.0-957.el7.x86_64你需要对三次握手过程要很熟悉

2022-01-02 20:35:35 7970

转载 Golang多版本管理机制

一门充满生机的编程语言,一定是不断进化向前的。随着 Go 项目的持续发展,它目前已经发布到了 1.17 大版本,而且每个大版本内还会有不少小版本的迭代。对于 Go 的版本更新,我们该如何做好多版本管理。多版本管理的重要性这里简单列举几个我们需要 Go 多版本管理的理由。稳定性考量:虽然 Go1 一直在良好地遵守向后兼容准则,但通常基于稳定性考虑,我们并不会直接升级到最新版本。多项目开发:各项目依赖的 Go 版本不一致。版本兼容:测试代码前后兼容性,或者确保 bug 修复在不同 Go 版本的正确性

2021-12-20 17:01:50 7697

原创 Consul实现http或者grpc服务的注册与发现,Golang、Python的使用记录

consul官网Consul包含多个组件,但是作为一个整体,为你的基础设施提供服务发现和服务配置的工具.他提供以下关键特性:服务发现 Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程序可用很容易的找到他所依赖的服务.健康检查 Consul客户端可用提供任意数量的健康检查,指定一个服务(比如:webserver是否返回了200 OK 状态码)或者使用本地节点(比如:内存使用是否大于90%). 这个信

2021-12-09 13:37:10 8034

原创 Nuitka将Python源代码编译成可执行文件,注意的地方

Nuitka的GitHub地址在Nuitka之前我们最常用的打包工具就是Pyinstaller了,但是经过反复考虑,我觉得Nuitka也还是很有必要了解记录一下,它可以直接将Python源码打包成dll库或者pyd文件,增加了反编译难度,不会暴露源码,遗憾的是Nuitka和Pyinstaller一样不支持交叉编译Window下第一步安装mingw64,在window上做过c语言开发的应该都知道这个东西这里就不做过多阐述了,记得将其安装的bin目录的路径加到环境变量啊安装nuitka模块 pip i

2021-11-19 12:24:33 8483

转载 深度解密Go语言之unsafe

文章目录指针类型什么是unsafe为什么有unsafeunsafe实现原理unsafe如何使用总结参考资料指针类型在正式介绍 unsafe 包之前,需要着重介绍 Go 语言中的指针类型。我本科开始学编程的时候,第一门语言就是 C。之后又陆续学过 C++,Java,Python,这些语言都挺强大的,但是没了 C 语言那么“单纯”。直到我开始接触 Go 语言,又找到了那种感觉。Go 语言的作者之一 Ken Thompson 也是 C 语言的作者。所以,Go 可以看作 C 系语言,它的很多特性都和 C 类似

2021-10-15 19:25:54 8769 2

原创 如何高效的研究Django框架,少走弯路

毫无疑问,官方文档是最好的资料,但是资料仅仅局限于资料,我们如何快速的对官方文档中提到的知识点进行实验呢,那就是研究django源码的单元测试部分首先我们django源项目clone到本地进入到django项目中的tests目录cd D:\my_project\django-master\tests安装我们的django项目,并下载好对应的依赖注意-e 的方式安装后的django的对应路径也就是我们的D:\my_project\django-master路径python -m pi

2021-10-12 22:00:29 7984

转载 Percona XtraBackup 8.0.26实战大全

目录Percona XtraBackup特性说明Percona Xtrabackup 备份恢复权限限制创建备份用户、配置参数及数据准备Sysbench造数据全量备份与恢复全量备份全量恢复增量备份增量恢复压缩备份解压备份及恢复流备份Percona XtraBackup特性说明Percona Xtrabackup 8.0.26新增支持MyRocks存储引擎,不支持TokuDB引擎Percona Xtrabackup 8.0.26 不支持低于MySQL 8.0的备份(因为MySQL 8.0在数据字典、re

2021-10-01 00:57:59 7904

转载 MySQL,在线热备的内核原理(适用存储引擎为InnoDB的情况)

研发的童鞋每次对MySQL库表做重大操作之前,例如:(1)修改表结构;(2)批量修改或者删除数据;都会向DBA申请进行数据库的备份。画外音:又或者说,不备份直接操作啦?那DBA童鞋是怎么进行MySQL备份的呢?调研了几十个RD和QA,基本是3种答案:(1)不太清楚;(2)在线逻辑备份,mysqldump;(3)离线物理备份(冷备),拷贝从库库文件;那实际上,DBA是如何对MySQL进行库备份的呢?现在基本上使用的是PXB方案。今天,和大家说说MySQL备份的来龙去脉,以及内核原理。

2021-10-01 00:01:24 8068

原创 Python3中impolib模块的reload使用时需要注意的地方

与 Python 2 不同,reload 在最新的 Python 中不再作为内建函数存在了,而被移入标准库 importlib 模块中。实验1,reload基本使用假设我们有个模块叫做config.py导入一下config模块(如果导入报错找不到config模块,请配置模块的搜索路径先再来测试如下的步骤),如下我们在右边终端修改b变量的值为20保存退出,再次导入(这个时候我们退出左边的交互式环境),可以看到b的值并没有发生变化,那有没有不退出左边的交互式环境,热加载呢有的,这

2021-09-25 18:21:37 8955

原创 Golang和C指针异同点的对比

目录指针相同点指针异同点指针相同点1.定义通常我们把指针变量简称指针,简单直白点,指针变量就是用来存储内存地址的变量即为指针变量。2. 用法栈变量赋给指针变量例子,都是通过取地址赋给对应指针变量的,且指针取对应内存地址存的值也是一样的都是用*号。//C版本#include<stdio.h>int main(int argc, char *argv[]){ int * p1; int a = 5; p1 =&a; printf("p1 v

2021-08-29 01:22:09 7784

原创 Cpython源码分析02_Python代码是怎么运行起来的

目录1.python代码运行时的入口2.window与Linux入口出的区别3.继续前进,生成_Py_Main对象,并做简单初始化4.继续前进,我们来到了pymain_mian5.pymain_init都干了些什么事情呢6.继续前进,进入4步骤中的pymain_run_python看看7.重点分析一下pymain_run_filename,既通过交互式环境或者文件执行代码的过程说明:如果没有特殊说明,均基于window平台讨论1.python代码运行时的入口入口文件为python.c,当宏MS_WI

2021-08-20 00:39:39 8444

原创 性能提升优化之_C和Python混合编程之Cython

目录安装与简介Cython定义函数类型建立一个Cython模块测试复杂模型的处理官方例子调用c函数限制条件生成器表达式对比char*常量元组作为函数参数栈帧安装与简介Cython它可以让我们直接将Python代码编译成C语言.Cython可以看成是一个转换器, 可以简单看成一个软件, 它可以把源代码从一种语言翻译成另一种语言。 类似的软件还有CoffeeScript和Dart。 这两个是不同的软件, 使用不同的语言, 但是都翻译成JavaScript。Cython把Python的超集(扩展

2021-08-10 00:45:10 8202

原创 用fastapi快速构建后端服务接口

项目目录结构如下,下载链接如下,提取码c72h fastapi官方文档1.所需模块fastapi==0.66.0requests==2.25.1uvicorn==0.14.0gunicorn==20.1.0protobuf3-to-dict==0.1.5grpcio==1.38.12.config.ini内容如下其中GetIdentityList、GetMetaDataDetailListByOwner 、PublishTaskDeclare为提供给前端调用的接口的URL[Enab

2021-08-05 16:41:26 8723

转载 Python和Golang协程的区别

背景最近在做后端服务python到go的迁移和重构,这两种语言里,最大的特色和优势就是都支持协程。之前主要做python的性能优化和架构优化,一开始觉得两个协程原理和应用应该差不多,后来发现还是有很大的区别,今天就在这里总结一下。什么是协程在说它们两者区别前,我们首先聊一下什么是协程,好像它没有一个官方的定义,那就结合平时的应用经验和学习内容来谈谈自己的理解。协程其实可以理解为一种特殊的程序调用。特殊的是在执行过程中,在子程序(或者说函数)内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着

2021-07-25 18:25:05 8182

转载 python中容易被忽视的三个点

异常处理中的returndef some_func(): try: return 'from_try' finally: return 'from_finally'>>> some_func()'from_finally'当在 “try…finally” 语句的 try 中执行 return, break 或 continue 后, finally 子句依然会执行.函数的返回值由最后执行的 return 语句决定. 由于 .

2021-07-24 23:09:38 7944

原创 利用缓存来缓存返回值,对以Python递归方式实现的斐波那契数列进行加速

用到的内存分析工具为memory profile传统的递归方式进行调用,来求第30个斐波那契数的值import profiledef fib(n): if n <= 1: return n else: return fib(n - 2) + fib(n - 1)profile.run('print(fib(30))')结果如下,用时5.016秒空间消耗的测试代码如下#一下代码用来测试空间使用情况,用到的空间为memory pro

2021-07-24 21:37:12 8048

原创 python性能分析工具总结

性能分析工具的使用cProfile介绍它是一种确定性的性能分析器,提供了一组API帮助开 发者收集Python程序运行的信息,更确切地说,是统计每个函数消耗的 CPU时间。同时它还提供了其他细节,比如函数被调用的次数。 cProfile只测量CPU时间,并不关心内存消耗和其他与内存相关的信 息统计。尽管如此,它是代码优化过程中一个很不错的起点,因为大多 数时候,这个分析工具都会快速地为我们提供一组优化方案。 cProfile不需要安装,因为它是语言自带的一部分。要使用它,直接 导入cProfile

2021-07-23 19:48:39 8346

原创 计算机为什么要用补码?

人类在制造出晶体管后,利用晶体管制造出了与非门,然后又利用与非门制造出了加法器。加法器解决了加法运算问题。只有加法器是不够的,还需要解决减法的计算问题,但是与加法器相比,设计减法器硬件更为复杂,增加了计算的时间,能不能用加法器实现减法器的功能?这个实现的过程就用到了补码。计算机为什么使用补码?采用补码可以简化计算机硬件电路设计的复杂度。对于有符号数,内存要区分符号位和数值位,要是能把符号位和数值位等同起来,让它们一起参与运算,不再加以区分,只用加法器就可以同时实现加法和减法运算,这样硬件电路就变得简单了

2021-07-19 11:54:59 13905 6

原创 pip包管理工具使用总结

安装管理以 Python 库 requests 为例:安装 Python 库pip install requests安装指定版本的 Python 库pip install requests==2.25从本地wheel文件安装pip install requests‐2.25.1‐py3‐none‐any.whl从 git 仓库安装pip install git+https://github.com/psf/requests.git从国内镜像安装pip ins

2021-07-18 23:38:26 8363 1

原创 python代码优化提速总结(仅限在写法层面),可比较相应代码段的运行时间

1.开发者都知道,我们几乎大多数情况下使用的python解释器都是cpython,Guido van Rossum(吉多·范罗苏姆)创建python时就只考虑到单核cpu,解决多线程之间数据完整性和状态同步的最简单方法自然就是加锁, 于是有了GIL这把超级大锁。因为cpython解析只允许拥有GIL全局解析器锁才能运行程序,这样就保证了保证同一个时刻只允许一个线程可以使用cpu。由于大量的程序开发者接收了这套机制,现在代码量越来越多,已经不容易通过c代码去解决这个问题。...

2021-07-04 23:21:20 7917

转载 mysql索引杂谈

文章目录hash索引B+树索引hash索引Hash 索引是比较常见的一种索引,他的单条记录查询的效率很高,时间复杂度为1。但是,Hash索引并不是最常用的数据库索引类型,尤其是我们常用的Mysql Innodb引擎就是不支持hash索引的。主要有以下原因:Hash索引适合精确查找,但是范围查找不适合因为存储引擎都会为每一行计算一个hash码,hash码都是比较小的,并且不同键值行的hash码通常是不一样的,hash索引中存储的就是Hash码,hash 码彼此之间是没有规律的,且 Hash 操作并不

2021-04-21 23:45:32 7846

原创 python操作带Kerberos验证的Kafka

安装Kerberos客户端yum install krb5-workstation使用which kinit查看是否安装成功;安装gssapi和kafka-python模块pip install gssapi kafka-pythonpython demo如下# -*- coding: utf-8 -*-import osimport jsonimport timefrom kafka import KafkaProducerfrom kafka import Kafk..

2021-03-03 15:32:33 8927 4

空空如也

空空如也

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

TA关注的人

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