自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

晟夏的叶的专栏

公众号:cpp加油站,专注于分享linux下c/c++开发经验,c++面试题,linux下服务器开发技术,python下django开发相关技术

  • 博客(61)
  • 资源 (1)
  • 收藏
  • 关注

原创 libevent源代码初识及目录结构分析

1.libevent源代码获取最新代码直接从libevent的github即可,链接如下:https://github.com/libevent/libevent编译方法在该github介绍页说的很详细了,这里不再多说。2.libevent源代码的目录结构我们下载下来源代码以后,看到有很多文件,很多目录,往往不知道从何入手,我一开始也是这样,后来我花时间把每个目录和一些主要的文件内容弄明...

2019-07-26 18:09:39 153

原创 django和xadmin打造后台管理系统(三)-xadmin进阶使用

1.修改app名称参照上篇文章,自己补充一些model以后,界面如图所示:可以看到左上角名称还是默认的,这样就显得很low,我们进行修改。修改op_xadmin/apps.py,如下:from django.apps import AppConfigclass OpXadminConfig(AppConfig): name = 'op_xadmin' verbose_...

2019-07-24 17:53:57 2576

原创 django和xadmin打造后台管理系统(二)-xadmin安装及使用

安装完django,该安装xadmin了,我们都知道django有自己的原生后台admin,但这里我们不用admin,我们用xadmin,因为xadmin的界面更加漂亮。1.xadmin的安装首先登陆root用户,安装xadmin:1pip install https://github.com/sshwsfc/xadmin/tarball/master注意:不能使用pi...

2019-07-23 18:03:42 353

原创 django和xadmin打造后台管理系统(一)-django开发环境搭建

学习环境:redhat 5.8python版本:3.6.8django版本:1.11.201.python环境安装首先打开下面官网网址直接下载源码安装包:https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz下载下来后,上传到linux环境,在命令行下解压:xz -d Python-3.6.8.tar.xztar xv...

2019-07-19 17:57:05 424

原创 c++11&14-多线程专题

在C++11以前,C++的多线程编程均需依赖系统或第三方接口实现,一定程度上影响了代码的移植性。C++11中,引入了boost库中的多线程部分内容,形成C++标准,形成标准后的boost多线程编程部分接口基本没有变化,这样方便了以前使用boost接口开发的使用者切换使用C++标准接口,很容易把boost接口升级为C++标准接口。我们通过如下几部分介绍C++11多线程方面的接口及使用方法。1. ...

2019-07-18 18:05:31 417

原创 c++11&14-STL专题

在c++里面不得不提的一个标准库,就是STL,STL包含很多实用的数据结构,如vector,list,map,set等都是我们常用的,而c++11也对STL做了一些补充,使得STL的内容越来越丰富,可选择的也越来越多了。1. std::array先看一段代码:#include <array>#include <iostream>int main(){ s...

2019-07-17 18:41:33 262

原创 c++11&14-智能指针专题

学c++的人都知道,在c++里面有一个痛点,就是动态内存的管理,就我所经历的一些问题来看,很多莫名其妙的问题,最后都发现是内存管理不当引起的。但像java等其他一些语言则不会有这样的问题,为什么呢,因为它们有很好的处理内存的方法,比如java的垃圾回收机制,现在,我们c++终于也有了智能指针。1. 什么是智能指针简单地说,智能指针是用对象去管理一个资源指针,同时用一个计数器计算引用当前指针对...

2019-07-16 12:18:26 72

原创 c++11&14-常用属性专题

1. 常用属性1.1 auto关键字及其用法auto关键字可以用于定义变量和函数的返回值(包括声明和定义都可以),但不能用于函数形参和模板类型。示例如下:#include "stdio.h"auto add(int a, int b){ return a+b;}int main(){ int a = 2, b = 3; auto c = add(a, b); f...

2019-07-09 14:16:32 97

原创 c++11&14-编译

1. c++11&14怎么编译学习c++11的时候,我的redhat虚拟机上的g++才是4.1.2版本,而g++4.7版本才开始支持c++11的,所以要使用c++11,首先需要将我们的g++编译器升级到4.7或者以上版本,这里我选择的是GCC的 7.1.0版本。注意:大意义上来讲,GCC是一个编译器集合,拿到源代码后编译出来各种编译器,如果我们选择编译c,c++的编译器,就会生成gc...

2019-07-08 15:36:40 684

原创 linux网络编程系列(十三)--缓冲区设计及收发大量数据

1. 自定义缓冲区我们在使用TCP/IP编程的时候除了socket有收发数据缓冲区之外,通常我们还要自己定一个数据的收发缓冲区。1.1 为什么要自定义缓冲区假设应用程序需要发送40kB数据,但是操作系统的TCP发送缓冲区只有25kB剩余空间,那么剩下的15kB数据怎么办?如果等待OS缓冲区可用,会阻塞当前线程,因为不知道对方什么时候收到并读取数据。因此网络库应该把这15kB数据缓存起来,放...

2019-07-02 14:08:51 490

原创 linux网络编程系列(十二)--滑动窗口、拥塞控制、断线重连机制

1. 滑动窗口我们都知道TCP是可靠的协议,而可靠性很多时候就是来自于TCP的确认重传机制,在确认重传的基础上,就实现了滑动窗口协议,滑动窗口主要有两个作用:保证TCP的可靠性;提供TCP的流控特性;1.1 滑动窗口保证可靠性所谓窗口其实就是表示一段存放在发送缓冲区中的、可以被发送者发送的字节序列,它连续的一个范围,我们就称为窗口。而滑动则是随着数据不断的被发送,那么窗口就会在缓冲区...

2019-07-01 14:03:37 265

原创 linux网络编程系列(十一)--select基本使用以及它和epoll区别

1. select函数复用IO还有一种就是select模型,我们下面就来简单介绍一下select用法。1.1 select函数原型int select(int maxfdp, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);//fd_set是一个集合,里面存放的是文件描述符,如下是一...

2019-06-28 13:19:21 53

原创 epoll的基本使用

1. 网络编程中的四种IO模型阻塞IO模型,默认socket都是阻塞的,就是IO操作都要等待操作完成以后才能返回;非阻塞IO模型,就是IO操作时不等待,立即返回,但需要不断的去询问内核,数据是否准备好了,如果准备好了,就主动调用函数去处理数据,使用fcntl设置socket为非阻塞;多路复用模型,就是事件驱动IO,也就是说检测到描述符上发生了事件,才去处理,典型的就是select和epol...

2019-06-27 12:34:18 71

原创 优雅关闭以及如何检测对端已经关闭

1. 什么是优雅关闭一种情况是在多进程并发时,假设客户端有两个进程,父进程和子进程,子进程是在父进程和服务器建立连接之后fork出来的,我们期望实现这样的功能:子进程将数据写入套接字后close,并退出,服务端接收完数据,直到检测到EOF,也关闭连接,并退出,接着父进程读取完服务端响应的数据,也退出,但如果子进程使用close的话,并不会发生4次挥手的过程,只是引用计数减1,服务端是接收不到...

2019-06-26 12:34:35 647

原创 如何将socket设置成非阻塞的,非阻塞socket与阻塞的socket在收发数据上的区别

1. 生成socket时设置socket函数创建socket默认是阻塞的,也可以增加选项将socket设置为非阻塞的:int s = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP);2. 使用fcntl设置将socket设置为非阻塞的if ((nFlags = fcntl (nSock, F_GETFL, 0)) ...

2019-06-25 12:36:15 1020

原创 tcp粘包及如何解决

1. 什么是粘包流式套接字首先说说TCP为什么叫流式套接字,顾名思义,是指TCP的数据传输跟流动的水一样,大家可以想象一下,水是连成一片的,它是没有分界线的,而TCP数据传输也是一样的,是没有界限的;缓存机制熟悉TCP协议的人都应该知道,TCP发送数据,并不是应用程序send以后就发出去了,它是先存储在发送缓冲区的,为了性能考虑,可能会等到多个数据包汇总到一起后,操作系统底层再把缓...

2019-06-21 12:36:20 1798 1

原创 setsockopt的常用选项

1. 函数原型#include <sys/types.h >#include <sys/socket.h>int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);sockfd:标识一个套接口的描述字level:选项定义的层次;支持SOL_S...

2019-06-19 12:23:57 205

原创 errno以及网络编程使用场景

1. linux下定义的errno为防止和正常的返回值混淆,系统调用并不直接返回错误码,而是将错误码放入一个名为errno的全局变量中。如果一个系统调用失败,你可以读出errno的值来确定问题所在。errno不同数值所代表的错误消息定义在errno.h中,你也可以通过命令"man 3 errno"来察看它们。需要注意的是,errno的值只在函数发生错误时设置,如果函数不发生错误,errno的...

2019-06-18 13:58:14 281

原创 tcp包头、三次握手、四次挥手、状态

1. TCP协议1.1 TCP数据包头要了解三次握手和四次挥手,首先需要了解下TCP数据包头的结构,如下:源端口、目的端口:16位长,标识出远端和本地的端口号;序号:SEQ,32位长,标识发送的数据包的顺序,防止数据包乱序;确认号:32位长,接收方对发送方发送来的TCP报文段的响应,其值是对收到的报文序号加1,用于解决不丢包的问题;TCP头长:4位头长,标识tcp头部可以有多少个3...

2019-06-14 12:06:14 199

原创 tcp和udp的基本函数调用过程及如何选择

1. socket编程1.1 概述TCP是TCP/IP体系中面向连接的传输层协议,它提供全双工和可靠交付的服务。它采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号、确认重传、滑动窗口等。首先,TCP要为所发送的每一个报文段加上序列号,保证每一个报文段能被接收方接收,并只被正确的接收一次。其次,TCP采用具有重传功能的积极确认技术作为可靠数据流传输服务的基础。这里“确认”是指接收...

2019-06-12 12:28:45 785

原创 套接口、ip、端口号相关

1. 网络相关概念1.1 套接口的概念套接口,也叫“套接字”。是操作系统内核中的一个数据结构,它是网络中的节点进行相互通信的门户。网络通信,归根到底还是进程间的通信(不同计算机上的进程间通信)。在网络中,每一个节点(计算机或路由)都有一个网络地址,也就是IP地址。两个进程通信时,首先要确定各自所在的网络节点的网络地址。但是,网络地址只能确定进程所在的计算机,而一台计算机上很可能同时运行着多个进...

2019-06-10 12:36:47 157

原创 OSI七层模型和TCP-IP四层模型

1. ISO七层网络模型为使不同计算机厂家之间的计算机能够互相通信,以便在更大的范围内建立计算机网络,国际标准化组织ISO在1981年正式推出了一个网络系统结构–OSI七层网络模型,此后各大计算机厂商迅速向它靠拢,大大推动了计算机网络的发展。OSI七层网络模型分别是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。1.1 应用层应用层是最靠近用户的OSI层,这一层为用户的应用程...

2019-06-06 10:37:39 101

原创 自旋锁

1. 什么是自旋锁自旋锁与互斥锁有点类似,但是自旋锁不会引起调用者阻塞,如果自旋锁已经被别的执行单元保持,调用者会一直循环检查该自旋锁的保持者是否已经释放了锁,所以才叫自旋。2. 自旋锁的特点同时自旋锁使用者一般保持锁时间是非常短的,所以某些情况下,选择自旋而不是睡眠是很有必要的,自旋锁的效率远高于互斥锁。如果被保护的共享资源需要在中断上下文访问,就必须使用自旋锁。在单cpu且不可抢占的...

2019-06-05 10:57:08 52

原创 多线程之无锁队列

1. 什么是无锁队列字面意思理解,就是两个线程同步操作某种数据时,不能加锁;因为加锁是会拖慢效率,造成延时的;2. 什么场景需要用到无锁队列呢?最典型的是生产者和消费者模型,要求生产者生产的同时,进行消费,这就要求足够的低延时,此时可以使用无锁队列;比如:线程A生产 1,2,3,4…线程B对生产出来的数相加,要求效率足够高,不能用锁,此时就可以用无锁队列。3. 无锁队列的实现#d...

2019-05-28 15:10:20 728

原创 线程池

1. 设计线程池遵循的规则我们应该设计通用的线程池,那么该怎么设计呢,其实就是通过回调函数,将线程函数和参数都用void*来表示,这样用户可以定义自己的回调函数,而参数的话可以放在结构体里面,这样每个客户都可以使用该线程池来调用自己的函数,并且可以传递多个入参。2. 什么是线程池顾名思义,就是多个线程事先已经建立好了,放在一个池子里,当有需要的时候拿来用,不需要的时候还到池子里去。3. 线...

2019-05-23 16:43:33 25

原创 线程浅析

1. 线程的基本属性每个线程都包含有表示执行环境所必需的信息,其中包括进程中标识线程的线程id,一组寄存器器值,栈,调度优先级和策略,信号屏蔽字,error变量以及线程私有数据。一个进程的所有信息对该进程的所有线程都是共享的,包括代码段,静态区,堆,栈以及文件描述符。2. 线程部分函数int pthread_equal(pthread_t tid1, pthread_t tid2); //...

2019-05-17 19:31:31 45

原创 使用vsftp在linux(redhat5.5)上搭建ftp服务器的全过程

首先安装vsftp的rpm包,这个就不讲了,自己去下了,然后安装,下面是配置文件vsftpd.conf的配置:# Example config file /etc/vsftpd/vsftpd.conf## The default compiled in settings are fairly paranoid. This sample file# loosens things up a ...

2019-05-08 17:09:22 2293

原创 多线程同步

1.linux使用多线程同步的方法1)互斥锁:当线程A锁定了互斥变量时,线程B再去锁定时就会被挂起,直到A解锁。注意:当线程要不断的去轮询检查某个条件以判断是否可以操作需同步的数据时,可使用条件变量提高效率。demo如下:#include <stdio.h>#include <pthread.h>#include <unistd.h>​pthre...

2019-05-08 16:59:18 50

转载 vsftp配置主动模式和被动模式

配置文件:/etc/vsftpd/vsftpd.conf主动模式配置方法:#主动式连接使用的数据通道connect_from_port_20=YES#支持数据流的被动式连接模式pasv_enable=NO被动模式配置方法:#主动式连接使用的数据通道connect_from_port_20=NOpasv_enable=YES(默认为YES) #设置是否允许被...

2019-05-07 15:24:12 14673 1

原创 linux c/c++面试知识点整理(八)

71、能不能从构造函数调用虚函数,为什么?       可以的,只是虚函数会使用基类的虚函数。72、什么时候可能会出现这种情况?设定的断点在main()函数的第一行,但是程序运行后没有执行到断点就崩溃退出了?       全局变量的构造函数崩溃。73、如何处理一个析构函数失败,可以抛出一个异常?  ...

2019-05-07 13:28:49 185

原创 linux c/c++面试知识点整理(七)

61、for_each的用法?       for_each是C++STL中用来遍历容器的函数模板,有3个参数:       第一个是容器开始,例如:map.begin()       第二个是容器结束,例如:map.end();      ...

2019-05-07 13:27:42 181

原创 linux c/c++面试知识点整理(六)

51、对称加密算法和非对称加密算法对称加密算法       对称加密才用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用解密密钥,这就是对称加密算法,常见的有:DES、IDEA。非对称加密算法       非对称加密算法需要两个密钥:公开密钥和私有密钥,如果用公开密钥对数据进行加...

2019-05-07 13:25:59 228

原创 linux c/c++ 面试题目整理(五)

41、怎么避免死锁?有序资源分配法,就是大家申请资源时都按照相同的顺序来;使用银行家算法,进程首次申请资源时测试该进程对资源的最大需求量,若系统现有资源可以满足,则按照当前申请量分配,否则推迟分配。当进程在执行中继续申请资源时,先测试该进程,本次申请的资源数是否超过该资源所剩总量,满足则分配,否则推迟分配。42、实现斐波列算法       斐波列...

2019-05-07 13:24:16 249

原创 linux c/c++ 面试题目整理(四)

31、C++空类是多大?为什么会这样?       空类是1个字节,一个类中虚函数、成员函数(包括静态和非静态)和静态数据成员都不占用类对象的存储空间。有虚函数时,会有一个指向虚表的指针,大小为4个字节,类不为空时,为空的那1个字节是不计算的。       空类之所以是1个字节,是因为求类大小就是求它实例化以后的大...

2019-05-07 13:22:44 624

原创 简单的python爬取图片

之前有一次网页上图片不能复制,就自己写了一个下载图片程序,只能针对例子中网页获取图片,若想下载其他网页中图片,需对程序进行改造。#coding=utf-8from bs4 import BeautifulSoupimport aiohttpimport asynciofrom urllib import request#回调函数,打印进度def callbackFunc(block...

2019-05-07 13:19:55 179

原创 STL的关联式容器总结

1. map1.1 map的底层实现map是红黑树(一种非严格意义上的平衡二叉树),置于红黑树的具体可以看算法和数据结构,这里不多说。1.2 map的元素类型map的key类型必须要重载"<"操作符,无法重载时用自定义仿函数代替map的第三个参数,因为map是有序的。map第一个参数是key,第二个参数是value,第三个参数是compare函数,第四个参数是内存配置对象inse...

2019-05-07 13:18:34 65

原创 STL的序列式容器总结

1. vector1.1 vector的底层实现vector本质上就是一个动态数组, 它维护一段连续的内存空间,具有固定的起始地址,因而能非常方便地进行随机存取,即 [] 操作符,但因为它的内存区域是连续的,所以在它中间插入或删除某个元素,需要复制并移动现有的元素。此外,当被插入的内存空间不够时,需要重新申请一块足够大的内存并进行内存拷贝。值得注意的是,vector每次扩容为原来的1.5-2倍...

2019-05-07 13:17:20 49

原创 多态是怎么回事

1. 多态的定义就是同一个接口,不同的实例有不同的实现方式。2. 多态的作用在继承的同时,每一个派生类都有属于自己的独特的方法,实现接口的重用。3. 多态的实现具体实现来看,就是父类定义虚函数,子类去实现这个函数,然后使用父类指针去指向子类,再去调用这个函数的时候,就会发生多态。4. 多态的原理一个类有虚函数就会产生虚函数表和虚表指针,而多态其实是根据虚函数表来实现的,虚函数表属于整...

2019-05-07 13:16:12 58

原创 c++的一些不常见关键字

1. explicit关键字explicit用来防止由构造函数定义的隐式转换,比如:class Base base=10;即Base类只有一个int类型的变量,explicit使用了以后,就不允许这样写。被声明为explicit的构造函数通常比非explicit的构造函数更受欢迎,因为它们禁止编译器执行非预期的类型转换。2. volatile关键字volatile变量是随时可能发生变化...

2019-05-06 16:16:53 221

原创 memcpy函数的实现

1.按1个字节拷贝(1)不要直接使用形参,要转换成char*(2)目标地址要实现保存(3)要考虑源和目标内存重叠的情况void * mymemcpy(void *dest, const void *src, size_t count){ if (dest == NULL || src == NULL) return NULL; char *pdest ...

2019-05-06 16:16:12 433

pyqt实现的扫雷游戏源代码

初次学习python时使用pyqt实现的扫雷游戏源代码,开发环境时eri6+python3+pyqt5

2018-06-12

空空如也

空空如也

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

TA关注的人 TA的粉丝

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