自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

爱拍凯特的专栏

师夷长技以制夷

  • 博客(55)
  • 资源 (14)
  • 收藏
  • 关注

原创 Go语言中的GC机制

Go语言和C/C++语言的一个显著的特点是Go中对象内存空间的回收是通过GC机制来完成的,不需要像C++一样通过程序员的手动申请和释放,所以Go中相对不容易出现内存泄漏,不过也不是绝对的(后面会在写一篇文章来说明Go中的内存泄漏和Gorotinue泄漏,以及Go的内存逃逸),今天我们就来详细聊聊Go中的GC机制。首先要先说一下GC,GC机制是在Java语言被广泛使用之后所火起来的,像后来的脚本语言Python都支持GC,GO也支持GC。GC是对内存空间的自动释放,那我们首先说说如果对内存空间管理和分配。

2021-01-23 22:44:53 2994

原创 为什么C++函数可以返回局部Vector变量

C++语言中,所有new和malloc创建的变量均存放在堆区,这已经是一个共识。但是鲜为人知的是,STL库中的容器虽没有经过这两个关键字创建,但同样是存放在堆区。这与动态数组性质相同。如果从汇编角度观察便会发现,容器均调用了allocator来创建。这里便不展开多言。在下面的例子中,fun()函数和main()函数中,两个vec的地址并不相同,而首元素的首地址却相同。这就和new创建出的动态数组一样。#include <iostream>#include <vector>

2020-12-21 23:24:53 2659

原创 Apache Thrift网络栈

thrift 网络栈英文原版:https://thrift.apache.org/docs/concepts.html1、thrift 网络栈的简单表示(包括以下四层)serverprocessorprotocoltransport+-------------------------------------------+ | Server | | (single-threaded, event-driven et...

2020-12-08 22:37:54 188

原创 Python装饰器、生成器、迭代器、魔术方法总结

1、装饰器和上下文管理2、生成器、迭代器和可迭代对象总结一:1、上下文管理器是符合上下文管理协议的对象,主要是定义了__exit__()和__enter__()方法。装饰器是一个特殊的上下文管理器,两者都是包装其他代码块的工具,区别在于,装饰器包装的是定义的代码块,而上下文管理器可以包装任意的代码块。也就是说装饰器包装的代码是有要求的,也就是一个定义代码块,如定义一个函数。而上下文管理器则没有这种要求,你可以之有一个print都可以。2、生成器的核心是迭代器,或者说生成器是一种迭代器。因

2020-06-14 13:38:12 248

原创 Tornado的高性能服务器开发常用方法

高性能源于Tornado基于Epoll(unix为kqueue)的异步网络IO。因为tornado的单线程机制,一不小心就容易写出阻塞服务[block]的代码。不但没有性能提高,反而会让性能急剧下降。因此,探索tornado的异步使用方式很有必要。简而言之,Tornado的异步包括两个方面,异步服务端和异步客户端。无论服务端和客户端,具体的异步模型又可以分为回调[callback]和协程[co...

2020-03-01 14:05:19 722

原创 curl的常见用法小结

【常用命令】模拟post请求,发送json格式的参数curl -H "Content-Type:application/json" -X POST --data '{"message": "sunshine"}' http://localhost:8000/这种方法是json数据直接在body里面的。1、首先,最简单的情况是我们只需要提交一个不带文件上传的表单,这种情况下,只需要在cu...

2020-02-28 23:29:03 1388

原创 Jmeter实用总结1

最近在对项目做压力测试的时候用到了jmeter,一开始查了很多资料,但总是有问题,但最终发现是一个小问题引起的。特此总结一下,以便后来人少出现问题。1、背景:开发了一个服务端有个接口暂时记为如下:http://IP:PORT/router服务端接受一个图片并作为输入调用AI算法,并识别结果,然后返回。2、配置:在配置jmeter的时候主流的配置,简单的描述一下:2.1、...

2020-02-18 16:21:11 310

原创 跳跃表C++的一个实现

跳表是一种多层的链表,因为我们知道单链表的查询时间复杂度为接近O(log(n)),这个时间效率接近了平衡二叉树,而效率高些的二叉查找树,平衡二叉树,红黑树的实现相对困难,所以跳表就成为了一种高效且易实现的数据结构。至于具体的解释网上有很多的材料可以参考,下面是我从leetcode上发现的一个比较简单标准的跳跃表的c++实现,代码的优点是简单易懂,缺点是没有做优化,最差的情况下会导致跳跃表降低为单链...

2020-02-14 22:16:28 185

原创 Tornado 做为服务端response json数据中文显示异常

最近在开发一个车牌识别的服务端的时候,后端返回的json中的中文在调用方显示总是以unicode的格式显示,而不是中文。折腾了一天多时间,后来在一个博客中发现了相同的问题,特此记录。背景:服务端返回的数据print之后如下:{'message': 'ok', 'code': 0, 'result': {'car.jpg': [{'value': '京ABXXX', 'pred': 0....

2020-02-13 12:35:00 2274 1

原创 nvidia-docker的一次实际应用

在深度学习中,如果要使docker中的代码能够在GPU的环境下运行,需要安装nvidia-docker。nvidia-docker是一个可以是用GPU的docker,其在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现还是在docker的启动命令上携带一些必要的参数,因此在安装nvidia-docker之前,还是需要安装docker的。...

2019-08-29 18:32:26 3926

原创 Docker的一次完整使用总结

最近在项目中存在这么一个需求,就是对深度学习的一些代码要大规模部署,但是依赖一些环境和显卡驱动,所以考虑将代码和所需要的环境打包成docker镜像来方便部署,经过了一两周的学习和实验以及请教他人,目前我算是基本搞明白了一些,先主要总结一些容易出错的点或者疑惑的点。1、制作Dockerfile在制作Dockerfile的过程中,用到了一些指令:FROM、ENV、COPY、ADD、CMD、...

2019-08-29 18:29:19 351

原创 遇到的开源库的用法--libcurl

近期在开发一个小项目时候需要用到发送HTTP的请求,这个用Python很容易实现,不过这次代码环境是C++,所以就想用C++写一个发送HTTP请求的代码。需求:需要在一个Post请求中,发送到HTTP服务端几个参数,同时要发送一批图片。在一番调研之后发现用libcurl库可以实现需求,但是在写代码的过程中遇到了一些对curl_formadd API理解的问题,特此写出来以供分享。附上l...

2019-08-09 14:28:21 1361

原创 vmware中centos扩展磁盘空间

今天在使用vmware中的centos7的时候发现空间不多了,就想着扩展磁盘空间,之前也想过要搞,结果有些地方总是搞不明白,今天参考了一份博客,成功扩展了磁盘空间,因此写下此文已示总结。参考博客地址:https://www.cnblogs.com/baihuitestsoftware/articles/6474075.html我总结了一下主要是分成以下几个步骤。1、在vmware中扩展...

2019-07-14 22:52:27 936

原创 GO学习笔记---GO中的Interface详解

在学习Go语言的过程中,有几个核心的概念不容易理解,如函数、interface、map、channel、gorotine、struct、等。今天主要总结一下GO中的interface。学习过C++的同学都知道C++有面向对象编程,有类,有继承,多态机制,可以减少我们代码的编写量,然后实现功能的复用,但是在go中没有面向对象的概念,但是通过interface也能实现面向对象中的多态机制。首先...

2019-07-13 23:53:30 503

原创 Go学习笔记---Go中有关环境变量的操作

今天在阅读Go开源分布式 key-value 存储软件etcd的时候,在main函数中遇到了一个有关于系统平台判断的代码如下:func checkSupportArch() { // TODO qualify arm64 if runtime.GOARCH == "amd64" || runtime.GOARCH == "ppc64le" { return } // unsupp...

2019-07-13 21:50:49 1033

原创 C++智能指针

c++智能指针:auto_ptr, shared_ptr, weak_ptr, unique_ptr 其中后三个是c++11支持,并且第一个已经被c++11弃用。为什么要使用智能指针:智能指针是一个RAII(Resource Acquisition is initialization)类模型,用来动态的分配内存。它提供所有普通指针提供的接口,却很少发生异常。在构造中,它分配内存,当离开作用...

2019-07-01 17:40:24 109

原创 遇到的算法题--03(N条电线)

我们有N条电线,每个电线两端是不同规格的接口(a/b/c/d....),同一根电线两端的接口规格可能是不同的,只有相同规格的接口才能把两根电线连接在一起,设计一个程序,判断所有这些电线是否能合并为一根长电线。输入:N行,每行是两个字符串,表示电线的规格,如a aa bb c输出:是否能拼接为一根电线解题思路:采用数学思想,找规律。已知N根线,则共有2N个端点,...

2019-07-01 11:57:46 381 2

原创 遇到的算法题--02(斗牛)

“斗牛”是一种热门的扑克游戏,每个人5张牌,其中A当1,JQK都当10。要求:从5张牌中选出3张牌(必须刚好3张),如果存在3张牌加起来是10或者20或者30,就称为“有牛”,否则就是“没牛”。有牛的情况下,剩余两张牌加起来除以10后:• 余数为0就是“牛牛”,是最大的一手牌。• 如果余数为9就是“牛九”,是第二大的,依次类推,“牛一”就是最小。• “有牛”都大于“没牛”。• 两人都是没牛...

2019-07-01 11:57:35 664 1

原创 遇到的算法题--01(取排序数组的重复元素)

现有两个从小到大排好序的int数组(每个数组自身没有重复元素)。请找出所有在这两个数组中都出现过的数。请写一个函数,输入为两个数组。思路简述:因为数组已经排好序,且没有重复数据。所以可以采用两个指针分别指向两个排序的数组num1、num2。然后当两个值相同的时候就存储下来同时将两个指针都向后移动,当num1较小时则该指针向后移动,当num2较小的时候则该指针向后移动,直到其中任何一个指针指...

2019-07-01 11:56:42 321

原创 python 中 with 的用法和原理

在写代码过程中,我们一般会有这样的问题,如文件描述符打开,关闭,锁的加锁,解锁,一旦缺少任何一环都会对系统造成严重影响,如果不能正确关闭描述符,就会导致可用的描述符数量急剧下降,如果不能正常解锁,会导致严重的死锁问题。python中存在一个用法:with,可以帮助我们自动的进行资源的获取和释放,从而避免上述问题。with的原理:with在执行的时候,会执行紧随其后的代码,并调用该对象的...

2019-05-09 14:29:01 6496

原创 lua 中冒号和点号的区别

lua 中冒号和点号的区别:一、定义方法的区别1、冒号定义方法,默认会接受self参数;而点号定义的时候,默认不会接受self参数例:(1)冒号定义function class:test()  --这里会接受self参数,比如  print(self.a,self.b)  在这里self就是class对象本身,因此不会出错end(2)点号定义function...

2019-05-08 11:45:43 2988

原创 C++的构造函数、初始化方式

一、类的构造函数及其种类当我们自定义一个类的时候,需要创建类的构造函数。1、构造函数的作用:用来初始化对象空间。编译系统在创建类对象的时候,会申请内存空间,然后自动调用类的构造函数,完成对象的初始化操作。2、构造函数的种类:无参数构造函数(没有参数)、一般构造函数(构造函数有多个不同参数,或者参数类型不同)、拷贝构造函数(参数是const类型,且参数为类对象本身的引用),拷贝赋值函数...

2019-05-08 11:24:30 3774

原创 C++函数模板和模板函数、类模板和模板类

这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区别)注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中,实现在.cpp文件中。1、函数模板和模板函数函数模板:函数模板的重点是模板。表示的是一个模板,专门用来生产函数。template <typename T>void fun(T a){}模板函数:...

2019-05-08 10:03:04 1596

原创 python学习笔记--可迭代对象和迭代器的理解

首先,我们从简单的容器开始。容器:是一种把多个元素组织在一起的数据结构,其中的元素可以迭代获取,可以用in,not in,来判断是否存在容器中,这类数据结构的所有元素是存储在内存中的,像迭代器,生成器的数据元素只有一部分存在内存中。python中常见的容器:list/dequeset/fronzensetsdict/defaultdict/Ordereddict/Count

2018-01-05 21:47:15 922

原创 python学习笔记--lambda

之前用过lambda,但是虽然用过却并没有仔细的想过lambda,今天就简单的说说lambda。还是遵循我固有的三板斧:what,how,why。1、lambda是什么,以及怎么用:lambda是一个匿名函数,用法如下。a = lambda x:x+1上式等价与:def a(x): reurn x+1下面的式子大家一看...

2017-09-17 23:14:40 300

原创 python学习笔记--闭包

一个函数A和一个函数B,其中B函数位于A函数体内部,同时B函数体内调用了B函数之外,A函数之内的其他变量x(包括A中传递过来的参数),此时,x称为B函数的环境变量,B函数和变量x就构成了一个闭包。而函数B是需要返回的,也就是返回函数B,其中在返回的时候,对A参数x的调用也包括在了里面,(有点封闭包含的意思,可能因此叫闭包)。此时A称为闭包函数eg:#outer functiondef

2017-06-15 20:44:01 311

原创 Python 学习笔记--GIL

1、python 全局翻译锁(GIL Global Interpreter Lock)为了实现在多核环境下的运行时数据的一致性,Python采用加锁的思想来实现这种同步和一致性,这把锁就是GIL。这造成了一定量的性能损失,使用锁的原因是因为Python解释器内部是线程不安全的。另外一点,首先需要明确的一点是 GIL 并不是Python的特性,它是在实现Python解析器(CPython)时...

2017-04-19 00:13:44 307

原创 C++ 存储类的含义和区别

C++中有五种类型的存储类。存储类是管理对象的生存期、链接、内存位置的类型说明符。这些说明符放在需要修饰的变量类型前。autoregisterstaticexternmutable1、说明符的作用是用来定义变量/函数 的范围(可见性)和生命周期。2、以上五类可以分成两种:自动存储类和静态存储类。自动存储类包括auto、register,其他的是静态存储类。3、自

2017-01-10 21:43:40 3173

原创 程序的装入和链接

编译—链接---装入 编译:预处理—编译、优化—汇编 链接:静态链接—动态链接1、 静态链接2、 装入时动态链接3、 运行时动态链接 装入:静态装入—动态装入1、 绝对装入方式这种方式在编译的时候就会产生绝对地址(程序中的逻辑地址就是实际的物理地址),在装入的时候不需要对地址和数据进行修改。缺点:只能将目标模块装入内存中指定的位置,不够灵

2016-08-07 16:55:09 1622

原创 Java 基础----内部类

今天在复习Java的相关知识的时候遇到了内部类这个概念,小小的总结一下,下面就用一句话来总结Java中的内部类:Java 中内部类包括四种:静态内部类,成员内部类,局部内部类,匿名内部类那么问题来了:如何区分这几种类呢?很简单:1、静态内部类定义在类中,用static关键字修饰,并且只能访问外部类(相对于内部类,自然有个外部类)的静态成员和静态方法。2、成员内部类定义在类中,和

2016-07-25 23:18:02 307

原创 位示图用法的总结

今天在复习的过程中,遇到了海量数据处理问题,这种问题是一种常见的TOP K 问题,处理方法比较固定就是考虑两种情况,一种情况是内存中能够将数据全部存储下来,另一种情况是不能将数据全部存储下来。对于第一种情况,直接采用hash_map进行统计,然后通过堆排序进行建立一个K大小的堆,然后将数据存储到堆里,最终获取Top K。另一种情况的解决方式是先hash分治,然后对每份进行hash_map统计,

2016-07-24 19:03:38 11354

原创 最近想开始学习机器学习

期待自己可以继续坚持下去,,,机器学习走起。

2016-07-18 18:04:09 318

原创 select poll epoll系统调用详细分析

1、select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。select/poll的实现很类似,epoll是从select/poll扩展而来,主要是为了解决select/poll天生的缺陷。epoll在内核版本2.6以上才出现的新的函数,而他们在linux内核中的实现都是十分相似。这三种函数都需要设备驱动提供poll回调函

2016-07-02 11:39:16 1822

原创 被动操作系统扫描软件 p0f 指纹库文件分析

p0f.fp指纹文件分析==============================================一段指纹信息:; ==================; TCP SYN signatures; ==================[tcp:request]; -----; Linux; -----label

2016-06-28 16:59:37 3075

原创 C程序的内存结构和C++程序的内存结构比较

1、C程序的存储空间布局包括以下几个部分:栈:------------栈上分配局部变量堆:------------堆上分配的是用malloc,realloc,calloc分配的变量的内存bss:----------未初始化的全局变量data:---------初始化的全局变量,静态变量正文段:------包括字符串常量和程序代码bss和data合称为全局/静态存

2016-06-24 15:37:02 425

原创 Docker 中 安装软件并创建新的镜像

1、在docker中根据已有的镜像然后安装新的软件在生成新的镜像docker中镜像是个静态的概念,而容器是一个动态的概念,自我感觉有点像程序和进程之间的关系似的。现在已经有的镜像是  learn/tutorial  现在安装 ping 和vim 生成自己的新的镜像首先根据镜像运行-->容器并安装软件ping#docker run -t  learn/tutorial  ap

2016-06-14 15:14:44 10027 1

原创 C程序的存储空间布局

1、C程序的存储空间布局C程序由以下几个部分构成:1、正文段(代码段)、存储CPU执行的机器指令,这个段可以共享,所以频繁执行的程序在内存中这个段只有一个副本,且这个段通常只读。2、初始化数据段(数据段)、包含了程序中需要明确赋初值的全局变量和静态变量。3、未初始化数据段(bss段)、包含了程序中没有赋初值的全局变量和静态变量。

2016-06-13 16:35:31 543

原创 C++ 默认构造函数的重要性

1、默认构造函数C++ 默认构造函数是对类中的参数提供默认值的构造函数,一般情况下,是一个没有参数值的空函数,也可以提供一些的默认值的构造函数,如果用户没有定义构造函数,那么编译器会给类提供一个默认的构造函数,但是只要用户自定义了任意一个构造函数,那么编译器就不会提供默认的构造函数,这种情况下,容易编译报错,所以正确的写法就是用户在定义构造函数的时候,也需要添加一个默认的构造函数,这样就不会造

2016-06-12 15:37:23 12468

原创 三次握手和四次挥手

三次握手和四次挥手1、为什么要三次握手?因为信道是不可靠的,而TCP协议是一个可靠的传输协议,要在不可靠的信道上实现可靠的传输,那么就需要一钟同步机制,而进行三次握手是理论上所需要的最少的握手次数。因为如果只进行两次握手的化,会出现以下的一个问题:如果第一个SYN握手包发送过去之后在网络中滞留,没有被送到服务端,然后过了一段时间之后客户端和服务端通信结束,并且断开了sock

2016-06-07 08:54:00 372

原创 EPOLL的用法和模型

1、epoll的用法既然epoll是一种IO多路复用技术,也就是管理大量的描述符的,那么这种机制既可以使用在服务端也可以使用在客户端。而在这两种使用方式下可能会有一些差距,但是差距并不大,毕竟作用是相同的。首先说一下epoll中常用的几个函数:int epfd = epoll_create(int size);  这个函数用于创建一个epoll描述符,同时他会创建红黑树

2016-05-28 16:45:38 596

C++必知必会

包含大量的C++重点知识

2016-07-29

FTP协议简介

FTP协议详细的介绍。

2016-07-29

HTTP协议简介

对HTTP协议进行了详细的介绍,能够从整体上把握HTTP协议

2016-07-29

主机发现和端口扫描技术

该文档系统的整理了当前主机发现和端口扫描的技术点,并主要分析了nmap扫描工具所支持的主机发现和端口扫描技术。

2016-05-16

C语言经典算法100例.doc

2016-05-06

递归读取文件夹及文件

使用c语言开发的读取指定文件夹下的所有文件和子文件夹内容的代码,并读文件内容进行提取,具体提取代码需要修改,我的只是适合我自己的文档格式。

2015-11-05

HadoopFileSystem简介

详细描述了google Hadoop的组成。主要是基本概念和数据流组成。

2015-06-04

P2P 文件上传下载

P2P文件传输,实现上传和下载功能,用于局域网内部的文件传输。

2015-06-04

c++基本知识点汇总

包含了c++编程语言的基本知识点,是一个汇总性质的文件,可以很好的查缺补漏。

2015-06-04

c++ 常用算法手册

包含常用的算法知识和c/c++代码实现,很全面,有很多的代码量。

2015-06-04

字典序法输出排序

本程序实现了输出字典序法的排序,可以输出一个排序也可以输出所有的排序。

2014-09-09

文件上传下载系统

本程序由c语言开发,linux下的服务端和windows下的客户端实现,主要实现文件的上传下载,和服务端交互。

2014-09-09

EMR电子病历管理系统

Java web技术开发的电子病历管理系统

2013-04-10

空空如也

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

TA关注的人

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