clion远程gdb调试配置
1 安装cmake gcc gdbserver 首先安装所需工具: 1yum install cmake gcc-c++ gdb-gdbserver wget -y 2 源码编译gdb 由于yum安装的gdb版本较低,这里我选择的是源码安装: 首先去这个网址找到所需的gdb版本,我这里选择的是9.2,然后下载: 1wget http://ftp.gnu.org/gnu/gdb/gdb-9.2.tar.xz 解压并进入目录: 1tar -xvf gdb-9.2.tar.xz && cd gdb-9.2 安装所需依赖: 1yum install texinfo libncurses5-dev -y 确认安装目录,编译安装: 1234mkdir buildcd build../configure --prefix=/usr/local/gdb9make && make install 等待编译完成后,删除旧版本,给新版本建立软连接: 12rm -f /usr/bin/gdbln -s /usr/local/gdb9/bin/gdb /usr/bin/ ...
爬虫技术基础
前言,本篇文章是我几年前开始陆陆续续记录最初学爬虫时的笔记,现在发出来(水一篇文章)。较为基础,有些地方也比较简陋,仅供参考。如有纰漏之处,欢迎指正。 一、基本介绍 1 爬虫的基本流程 模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 对每一个步骤进行分析: 12345678910111213141516#1、发起请求使用http库向目标站点发起请求,即发送一个RequestRequest包含:请求头、请求体等#2、获取响应内容如果服务器能正常响应,则会得到一个ResponseResponse可能是:html,xml,json,图片,视频或者加密格式#3、解析内容解析html数据:正则表达式(re),第三方解析库如Beautifulsoup,pyquery等解析json数据:json模块解析二进制数据:以b的方式写入文件#4、保存数据数据库文件 2 robots协议 Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些 ...
numpy快速入门
安装 1pip3 install numpy numpy快速入门 数组是 NumPy 库的核心数据结构。创建数组的最简单方法之一是使用array函数。 1 创建数组 123456789import numpy as np x = np.array([[1,2,3],[2,3,4]]) print(x)"""输出:[[1 2 3][2 3 4]]""" array函数可以在列表甚至嵌套列表上调用。 由于此处输入的嵌套级别是2,因此生成的数组是二维的。 这意味着可以使用两个整数集对数组进行索引。 计算数组维数的最简单方法是检查数组的ndim属性,也可以通过检查数组的shape属性,数组中的元素总数使用size查看: 123456789print(array.ndim)print(array.shape)print(array.size)"""输出:2(2, 3)6""" 创建初始值为0、为1、空值(随机值)的数组: 123456789101112array=np.zeros(2)print(array)array=np.ones(2)print(array)array=np.empt ...
pandas快速入门
安装 1pip3 install pandas pandas快速入门 1 pandas擅长处理哪些数据 在处理表格数据时,例如存储在电子表格或数据库中的数据,pandas是适合您的工具。pandas将帮助您探索、清理和处理数据。在pandas中,数据表称为DataFrame。 要加载pandas包并开始使用它,请导入该包。社区一致使用的pandas别名是pd,因此将pandas加载为pd是所有pandas文档的标准做法: 1import pandas as pd 2 创建DataFrame 下面是一个简单的示例: 1234567891011121314import pandas as pdmydataset = { 'sites': ["aaa", "bbb", "ccc"], 'number': [1, 2, 3]}myvar = pd.DataFrame(mydataset)print(myvar)"""输出: sites number0 aaa 11 bbb 22 ccc 3""" 二维数组的手动创建使用DataFra ...
redis源码分析
redis源码分析 持续更新… 一、C语言基础 本节参考资料: 1、C Primer Plus(第6版)中文版 2、stdint.h 3、编译器特性 attribute_((packed)) redis基于C语言编写,因此在阅读之前,先对C语言的相关语法进行简单回顾。 1 变量 1.1 整型 整型一般使用int定义,它占用一个机器字长,现在一般的个人计算机使用32位(4字节)来储存一个整型的数据。 除此之外,还有其它的附属关键字来定义整型: short或short int,它占用16位(2字节)存储一个整型数据。 long或long int,它占用32位(4字节)或64位(8字节),具体占用多少取决于什么样的操作系统。 long long或long long int,它占用64位(8字节)存储整型数据。 在上述关键字的基础上,使用unsigned可以定义无符号整型,如unsigned int、unsigned short等,它的占用和对应的关键字占用相同,但表示的范围不同(非负)。 1.2 字符型 字符型char实际上也是一个整型,它实际存储的是整数而不是字符。根据不同的字 ...
twisted快速入门
一、介绍 twisted是基于事件驱动的网络引擎框架,事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。 twisted支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、IMAP、SSH、IRC以及FTP。 twisted的架构与单线程、多线程的对比如下: 和asyncio一样,twisted的编程模型可以在单线程下实现并发编程,即事件驱动版本的程序中,多个任务交错执行,但仍然在一个单独的线程控制中。当处理I/O或者其他耗时的操作时,注册一个回调到事件循环中,然后当I/O操作完成时继续执行。回调描述了该如何处理某个事件。事件循环轮询所有的事件,当事件到来时将它们分配给等待处理事件的回调函数。这种方式让程序尽可能的得以执行而不需要用到额外的线程。事件驱动型程序比多线程程序更容易推断出行为,因为程序员不需要关心线程安全问题。 二、反应堆reactor 1 hello world 12345678910from twisted.internet import reactor# ...
对于TCP的一次抓包分析
一、TCP基础 1 TCP介绍 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,它建立在IP层之上,用于解决可靠传输、有序传输等问题。 TCP包又称TCP报文段,报文段分为TCP首部和TCP数据两个部分。TCP首部最小为20B,最大为60B,如图: 其中: 源端口和目的端口字段:各占2B(2^16-1=65535,这是端口号的上限) 序列号字段:占4B,TCP是基于字节流的通信协议,在传输数据流时,要为每个字节编号。比如一个TCP报文的序列号字段为101,总共占100B,则代表这个TCP报文的最后一个字节序号为200,下一个TCP报文的起始序号字段就为201。 确认号字段:占4B,表示期望收到的另一个TCP报文的序列号,ack=seq+1(期望收到的下一个seq)。比如:我收到了一个TCP报文,其seq为301,长度为300B,此时我正确接收了301-600序号的数据,接下来期望收到seq为601的TCP报文,于是我把自己的ack置为601。 数据偏移:占4bit,它表示首部长度,即:TCP数据部分距离TCP整个报文的首部偏移量为多少,数据偏移以4B为单位,最小为(01 ...
scrapy源码分析
一、初出茅庐 1 架构总览 Scrapy的基础架构: 关于架构,很有趣的一点是在Scrapy文档里的问题: Did Scrapy “steal” X from Django? Probably, but we don’t like that word. We think Django is a great open source project and an example to follow, so we’ve used it as an inspiration for Scrapy. We believe that, if something is already done well, there’s no need to reinvent it. This concept, besides being one of the foundations for open source and free software, not only applies to software but also to documentation, procedures, policies, etc ...
Docker
docker 持续更新中.. 一、 简介 1 虚拟化技术 虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。虚拟机和docker都属于虚拟化技术的一种。 2 容器技术 容器技术属于虚拟化技术。当一个项目仅由几个大组件构成的时候,可以为它们单独创建虚拟机,为它们提供完全独立的环境(分配独立的硬件环境);但是,但这些组件逐渐解耦成为更小的组件,它们的数量逐渐增长,为它们一一分配虚拟机是浪费资源的行为,并且大大增加了系统管理员和运维人员的负担。 容器技术应运而生地解决了这个问题,它的开销相比虚拟机小很多,并且在一台机器上允许运行多个相互隔离的服务。在宿主机看来,一个容器不过是一个运行的进程,在容器本身看来,就好像是机器和操作系统上运行的唯一一个进程。 3 虚拟机和容器比较 虚拟机和容器比较,容器更加轻量。因为容器直接运行在宿主机的操作系统上,虚拟机则需要创建出虚拟的硬件资源,将操作系统跑在这些硬件资源之上。 但是虚拟机的好处是它们提供完全隔离的环境,每个虚拟机运行在自己的lin ...
MySQL
MySQL 一、数据库概述 数据库的本质其实就是一款基于网络通信的程序,用于持久化数据,可以理解为存储数据的“仓库”,它保存了一系列有组织的数据。以实现结构化查询,方便管理。 1 数据库相关概念 DB:数据库,保存一组有组织的数据的容器 DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 SQL:结构化查询语言,用于和DBMS通信的语言 SQL 的优点: 不是某个特定数据库供应商专有的语言,几乎所有 DBMS 都支持 SQL 。 简单易学。 虽然简单,但实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。 2 数据库存储数据的特点 将数据放到表中,表再放到库中一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性” 表中的数据是按行存储的,每一行类似于java中的“对象”。 3 数据库的分类 关系型数据库:数据之间彼此有关系或者约 ...