自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Python eval hook时局部和全局变量报错NameError问题

globals 用于指定运行时的全局命名空间,类型是字典,缺省时使用的是当前模块的内置命名空间。locals 指定运行时的局部命名空间,类型是字典,缺省时使用 globals 的值。值得注意的是,这两者不代表真正的命名空间,只在运算时起作用,运算后则销毁。原因其实是变量的作用域问题,在hook的代码里应该在调用原函数前把locals()和globals()还原回hook前的值,这样才能确保局部和全局的变量都能被正确调用。globals 与 locals 是可选参数,默认值是 None。

2023-12-26 20:21:57 460

原创 进程间通信的常用方式和特点

进程间通信的六种方式及特点

2023-07-03 08:00:00 364

原创 操作系统之调度算法总结

介绍进程调度算法、磁盘调度算法,内存页面置换算法。

2023-07-02 22:22:02 283

原创 Java运行时内存分配和垃圾回收机制介绍

Java内存分配和垃圾回收机制介绍,Runtime获取内存计算。

2023-04-01 19:49:58 940

原创 Linux下内存泄漏定位工具Valgrind介绍

Valgrind 是Linux平台下一系列的调试和分析工具的工具组,具体包括以下工具:1、Memcheck:内存错误检测器,常用于检测C/C++编写的程序,是否还有内存泄漏、堆栈溢出等内存的错误;2、Cachegrind:缓存和分支预测分析器,可以帮助程序优化,运行得更快;3、Callgrind:生成缓存的调用图分析器;4、Helpgrind:线程错误检测器,可以帮助多线程程序更正确;5、DRD:也是一个线程错误检测器,与Helpgrind相似但是使用了不同的分析技术,可以发现不同的问题;

2023-03-20 22:23:17 1184

原创 Linux命名空间简述

在传统的LIinux系统上,系统资源都是全局的,比如pid、文件、网络等,为了支持容器虚拟化,Linux内核有NameSpace机制,它可以把一组进程的资源隔离起来,比如使用将进程自己的文件映射到特定目录下,不与其他命名空间下的进程共享。

2022-12-13 20:26:19 2365

原创 Linux安全模块AppArmor总结

Linux的安全模块,除了SELinux还有AppArmor,AppArmor相对来说要简单很多,多用于Ubuntu系统,这篇文章带大家了解AppArmor的策略。

2022-11-24 21:52:18 5082

原创 一文搞懂C++的智能指针

所谓的智能指针,其实是一个类,类的对象在离开作用域时会自动调用析构函数,利用这一特性达到自动释放内存,避免内存泄漏。

2022-11-21 08:00:00 156

原创 Linux系统的安全模块Selinux总结

很多人在遇到selinux权限问题时,直接就把selinux给禁用掉,这是有很大的安全隐患的,这篇文章可以帮助大家如何定位selinux权限问题。

2022-11-15 21:46:04 2345

原创 Linux 目录和文件权限总结

目录一、文件权限简介二、利用特殊权限实现普通用户通过 VSCode 远程调试三、默认文件和目录权限当我们使用ll或ls查看某个文件或者目录的信息时,第一列就会显示出它的权限设置,一共有十个字符,第1个字符用来表示文件类型,目录是d,链接是l,普通文件是-;接下来的 9 个字符,3个为一组,共三组,分别表示文件所有组,文件所有者所在的群组成员,其他成员的权限,其中权限有三种:r、w、x分别代表读、写、执行。如果是用数字表示,对应的值分别为4,2,1;假如文件权限为:-rwx rwx rwx,转换为八进制值为7

2022-06-12 12:52:26 987

原创 PHP的异常处理

PHP 的 try-catch 实际是使用 setjmp 和 longjmp 实现的

2022-05-20 11:50:49 264

原创 汇编语言入门(一)

目录一、汇编语言如何产生的二、汇编语言语法2.1 CPU如何产生要访问的内存单元的地址2.2 如何修改CS、IP的地址2.3 汇编语言如何表达数据的位置2.4 如何指明处理数据的长度一、汇编语言如何产生的机器语言:由一串0或1组成,如果有错误会特别难发现和查找,所以产生了汇编语言,写法与人类语言相近,便于记忆,例如:操作:寄存器BX的内容送到AX中机器指令:1000100111011000汇编指令:mov ax,bx为了将汇编语言转换成计算机能读懂的机器指

2022-03-31 19:26:02 4170 4

原创 浮点数的存储方式

目录一、浮点数存储方式分类二、浮点实数存储方式2.1 如何把浮点数转为二进制数2.2 为什么浮点数存在精度问题三、double类型如何存储为什么浮点数不适合比较大小和比较相等的操作?原先只听说跟浮点数的精度有关,浮点数为什么会有精度缺失问题?需要看一下浮点数在计算机中如何存储。一、浮点数存储方式分类在计算机发展过程中,出现了两类存储方式,分别是定点实数存储和浮点实数存储方式:1、定点实数存储方式:约定整数位和小数位的存储长度,比如高两位放整数位,低两位存放小数位。.

2022-03-06 14:07:38 10321 2

原创 PHP 的 HOOK 实现原理

PHP HOOK OPCode 是通过int zend_set_user_opcode_handler(zend_uchar opcode, opcode_handler_t handler)接口替换了 PHP 内置的 OPCode 的 handler (函数指针),那 PHP 是如何执行到我们替换后的 handler 的呢?一、zend_user_opcodes 和 zend_user_opcode_handlers以 PHP 5.1 版本为例,zend_set_user_opcode_h

2022-02-20 11:39:11 3806

原创 PHP 的 RASP 实现

一、什么是 RASPRASP 全称是 Runtime Application self-protection,即运行时应用自我保护,这是一种嵌入到应用程序内部,实时检测来自外部的请求、输入的技术。PHP 的 RASP 是通过 PHP 拓展的形式嵌入到PHP 的解释器中。二、PHP 拓展简介PHP 在不同的环境下有不同的工作模式,常见的有:命令行下的单进程模式和 Apache 环境下的多进程或者多线程模式。但不管是哪种模式下,都需要执行以下几个流程:图1 单进程拓展执行流程单进程模式.

2022-02-13 21:52:24 2835

原创 函数调用约定

目录一、函数调用约定的作用二、stdcall三 、cdecal四、fastcall一、函数调用约定的作用函数调用是由栈这种存储结构来实现的,但是这里面涉及几个问题,比如下面的函数:int add(int a, int b) { return a + b;}int main { add(1, 2); return;}(1)参数的入栈顺序怎么保证?是先 a 后 b,还是先 b 后 a?(2)函数调用结束后,谁来负责恢复栈顶指针?函数调用约定

2021-12-22 19:55:32 639

原创 dlopen()实现三方库的动态加载

目录一、函数介绍二、实现热更新一、函数介绍动态加载也就是运行时加载,即可以在程序运行时由我们决定何时加载指定的模块。这样进程启动时只加载必要的模块就行,减少了内存占用,除此之外最大的优点是,可以实现在不重启程序的情况下,实现模块的重新加载。这种技术也叫做“热更新”。先看一下函数原型和功能:// 按指定的模式打开动态链接库文件,并返回句柄void *dlopen(const char *filename, int flags);// 通过句柄获取共享对象或可执行文件中符号的.

2021-11-18 20:24:33 2995

原创 STL中vector插入元素迭代器失效问题

目录一、capaticy()容量不足时,尾部插入元素结论一:二、capaticy()容量充足时,尾部插入元素结论二:三、capacity()容量充足时,中间位置插入元素结论三:STL中vector的内存由三个指针进行管理:_M_start,_M_finish,_M_end_of_storage,所有关于地址,容量大小等操作都需要用到这三个指针。STL源码中关于这三个指针的使用如下:iterator begin() _GLIBCXX_NOEXCEPT { retu

2021-09-30 15:37:06 1239

原创 利用注册类实现特定类型匹配函数模板

函数模板可以让不同的类型调用功能相同的代码,可以减少代码的冗余,但是如果只想让特定类型使用函数模板呢?可以利用模板特化和注册类实现。代码如下:#include <iostream>template <typename T>struct Register{};template <>struct Register<int> { typedef int Type; constexpr static const char* TypeNam

2021-09-13 15:40:03 101

转载 RocksDB LRUCache

目录LRUHandleLRUCacheLRUCacheShard关于LRUCacheShard不同优先级链表的实现整体说来,rocksdb对于LRUCache的实现还是比较简单的,和我们平时见到的LRUCache基本一致,核心数据结构包括一个hashtable,用于存放cache所管理的数据,另一个数据结构为一个由双向循环链表实现的LRUList, 用于提供LRU语义。除了LRUCache以外,rocksdb还提供了另外几种Cache实现,LRUCache在rocksdb的Cache继承

2021-08-30 19:13:27 571

原创 动态规划之01背包与完全背包

目录一、01背包问题描述:解题思路:二、完全背包问题描述:解题思路:一、01背包问题描述:有一个背包,背包总的承载重量是 Wkg,有 n 个物品(每个物品只有一件),每个物品的重量不等,并且不可分割。在不超过背包所能装载重量的前提下,如何让背包中物品的总重量最大?之所以叫做01背包是因为物品要么装(只能装1次)要么不装(0)。解题思路:利用动态规划思想,假设dp[i][j]表示前i件物品背包容量为j的情况下所能装的最大重量,v[i] 表示第i件物品的价值,w[

2021-08-25 10:31:03 110

原创 muduo 异步日志实现

目录一、日志级别与格式二、日志的目的地三、多线程异步日志实现(1)特点(2)具体实现muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。muduo github网址:https://github.com/chenshuo/muduo一、日志级别与格式TRACE、DEBUG、INFO、WARN、ERROR、FATAL,默认级别从环境变量中获取,调整级别只

2021-08-16 21:56:34 339

原创 C++ 堆、栈和内存管理

一、stack(栈)存在于某作用域的一块内存空间,一般用来存放局部变量值、函数参数值。当调用函数,函数本身就会形成 stack 用来放置它所接收的参数,以及返回地址;class Complex {public: int x;};void func() { Complex c1; // 作用域仅存在于func函数内}栈上的对象的生命周期只存在于生命周期,离开了作用域就会调用析构函数;二、heap(堆)由操作系统提供的一块全局的内存空间,程序可动态分配内存

2021-08-11 10:56:03 235

原创 Linux线程创建、销毁、终止与栈清理

目录一、线程的概念二、线程的创建三、线程的终止与栈清理1、线程终止2、栈的清理四、线程取消五、线程分离六、线程同步一、线程的概念线程就是一个正在运行的函数,不同的平台有不同的线程标准,posix 线程是一套标准,而不是实现;线程标识:pthread_t,不要用%d直接打印,如果想判断线程 id 可以用 pthread_equal 非零表示相等,pthread_self 返回当前线程号;二、线程的创建pthread_create(pthread_t*, co

2021-08-05 10:09:18 2699

原创 muduo accept连接、断开连接、发送数据的实现

目录一、TcpServer接受新连接1、TcpServer2、TcpConnection二、TcpConnection断开连接三、TcpConnection发送数据四、如何限制服务器的最大并发连接数五、如何踢掉空闲连接六、发送数据时的流量控制七、为什么TcpConnection对象是用shared_ptr来管理对象八、TcpConnection的id如何存放,当从clientconnection收到数据,如何得知其idmuduo是陈硕个人使用C++开发的一款网..

2021-08-03 16:18:33 366

原创 Thrift ThreadManager以及三个Monitor作用

目录一、ThreadManager二、三个Monitor(1) monitor_(2) workerMonitor_(3) maxMonitor_一、ThreadManager作用:线程池管理类,用线程工厂创建线程特点:不会创建线程或销毁线程,而是保存空闲线程数变量、活跃线程数变量;维护一个任务(task)队列,并平衡服务的响应与等待时间,通知线程池策略对象(PoolPolicy object)相关的信息,由PoolPolicy object 决定池大小调整,这样的好处.

2021-08-02 20:53:53 306

原创 C语言标准IO函数整理

目录一、简介二、常见的标准IO函数一、简介常见的IO函数分为两类,分别是标准IO和系统IO,具体的区别和联系为:不同系统的系统IO有区别,而标准IO是任何平台通用的; 标准IO是依赖于系统调用IO实现的; 标准IO吞吐量大,文件IO响应速度快; 标准IO与文件IO不可混用。二、常见的标准IO函数FIFE *fopen(const char *path, const char *mode);/*path: 打开文件路径mode: 打开文件模式*/int fclos

2021-07-27 14:52:16 2860

原创 常见的网络状态检测及分析工具

目录netcat(nc)网络状态检测工具ifconfig和ipnetstat和ss网络抓包工具tcpdumpWireshark其他常用工具sarnslookupdstatnetcat(nc)简称nc,被称为“瑞士军刀”,使用nc-h查看帮助文档。ncat许多参数与nc相同,区别则是nc是明文传输,缺乏身份验证,而ncat弥补了这些缺点。主要作用:1、telnet远程登录2、端口扫描3、传输文本信息4、传输文件和目录5、加密传输文件网络状态

2021-07-23 14:25:58 5051

原创 Thrift常见报错问题以及定位方式总结

Aache Thrift最常见的报错信息为:问题定位:No more data to read.问题定位:Connection refused.问题定位:No route to host.问题定位:Called write on non-open socket.问题定位:Thrfit_EAGAIN (timed out).问题定位:Thrfit_EAGAIN (unavailable resources).问题定位:socket open() error:没有到主机的路由

2021-07-21 10:04:56 4320

原创 C++ goto语句的使用

简介:关于goto语句的使用,之前只知道goto可以跳转到对应的语句块,可以向前跳转,也可以向后跳转,但即使没有goto,执行到对应的语句块,该语句块也会继续执行。测试代码:int main() { size_t lem = 1; if (lem == 0) goto f; std::cout << " begin" << std::endl;f: lem *= 4; std::cout <&l.

2021-07-19 17:41:36 584

原创 muduo Reactor与Accepter设计

目录一、Reactor1、EventLoop2、Channel3、Poller4、EventLoopThread二、Acceptormuduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。muduo github网址:https://github.com/chenshuo/muduo一、Reactormuduo Reactor主要包括以下几个部分:

2021-07-18 15:03:10 118

原创 转换函数与explicit

简介:转换函数分为两类,一种是转出,把自己转换成别的类型,一种是转入,把别人转成自己类型,当两种都存在时,就可能会有歧义,造成编译器无法识别,这时候就需要explicit关键字。测试代码:先看类的结构:class Fraction {public: Fraction(int num, int den = 1) : m_num(num), m_den(den) { //转入 std::cout << "constructor funtion have

2021-07-16 09:37:56 103

原创 Linux下map、hash_map、unordered_map性能比较

转载地址:https://blog.csdn.net/whizchen/article/details/9286557原理介绍map介绍Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所

2021-07-15 10:25:00 380

原创 muduo Buffer类的使用与设计

目录一、Buffer的数据结构二、Buffer的操作(1)初始值(2)向Buffer里写入200字节(3)从Buffer里读取50字节(4)向Buffer里写入 200字节(5)从Buffer里读取350字节muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。muduo github网址:https://github.com/chenshuo/mu

2021-07-13 16:54:43 191

原创 IO多路复用:select、poll、epoll

目录一、什么是IO多路复用二、怎么实现IO多路复用1、select2、poll3、epoll一、什么是IO多路复用把标准输入、套接字等都看成IO的一路,IO多路复用就是在任何一路I/O有事件发生时,都能通知应用程序去处理响应的事件。所谓的“事件”包括:(1)标准输入文件描述符准备好可读;(2)监听套接字准备好,新连接建立成功;(3)已连接套接字准备好可写;(4)发生超时事件,如一个I/O事件等待超过10秒。二、怎么实现IO多路复用最简单的实现大概如下:

2021-07-07 22:34:35 141

原创 muduo网络库与服务模型介绍

muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。muduo github网址:https://github.com/chenshuo/muduo一、muduo网络库简介1、特点(1)线程安全,原生支持多核多线程;(2)不跨平台,只支持Linux;(3)只要支持x86-64,兼顾IA32,也可以运行在ARM上;(4)不支持UDP,只支持TCP(5)不支.

2021-07-01 11:15:40 2835

空空如也

空空如也

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

TA关注的人

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