- 博客(74)
- 收藏
- 关注
原创 网络编程套接字(2)-TCP
在上一篇博客中,我们介绍了套接字的相关内容,编写了套接字-udp版本的网络通信代码。这篇文章将介绍,TCP协议版本的网络通信方式,以及多线程,多进程版本的网络通信方法。TCP协议:TCP是TCP/IP协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Protocal),是面向连接的,可靠的字节流服务。它的可靠性体现在:3次握手建立连接,滑动窗口机制,一定的拥塞...
2022-01-12 13:17:22
182
原创 读c++11
weak_ptrshare_ptr的辅助指针,对引用计数无影响,可指针悬空,不管理资源。可以解决shared_ptr的循环引用问题。如下:循环引用问题struct A;struct B;struct A { std::shared_ptr<B> spb; ~A() { std::cout << " A is deleted " << std::endl; }};struct B { std::shared_ptr<A> spa
2020-06-30 21:32:31
217
原创 踩坑日记
mysql服务端在一定时间内没有收到请求就会自动断开背景和现象系统中每隔一小时读取一次配置,但是读取配置时发生错误:Lost connection to MySQL server during query这里的意思是服务器断开了连接。解决通过查看MySQL服务端的等待时间,发现互动时间interactive_timeout为3600s,与读配置的间隔一样,所以读配置时,服务端会断开。MySQL [(none)]> show global variables like '%timeout';
2020-06-29 20:24:03
273
原创 实践真知
文件static变量必须用常量初始化static app_security::freq_limit::FreqLimitServiceProxy freq_limit_service_proxy( 8205, 1, cmlb::PKG_STATS_ENABLE, PORT_TYPE_TCP);场景我想直接初始化这个对象,但是一直失败,直到使用了常量 8205和1。解释全局变量、文件域的静态变量和类的静态成员变量在main函数执行之前的静态初始化过程中分配内存并初始化;局部静态变量(一般为
2020-06-15 22:00:13
218
原创 读c++primer
读c++primerstatic类成员explicitstatic类成员static数据成员的类型可以是该成员所属类类型,但是非static成员的类型只能是该成员所属类类型的指针或引用。class Bar{private: static Bar mem;//ok Bar* men1;//ok Bar& mem2;//ok Bar mem3;//error}expl...
2020-06-02 19:57:27
140
原创 https协议
1,什么是HTTPS协议? 基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护2,公钥和私钥?公钥私钥的原则:一个公钥对应一个私钥。 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的...
2019-05-20 16:16:01
272
原创 友元函数的使用
一,友元函数的作用在类外的函数是无法访问类中的 protected 和 private变量,当在类中将一个函数声明为friend函数A时,A函数就可以访问类中的所有变量。二,友元函数的使用1,普通成员作为类的友员函数class Base{public: Base() {} friend void Print(Base& b); virtu...
2019-05-11 20:13:35
3797
原创 nexus6p手机编译,烧写记录
一,下载源码1,环境 >ubantu 16.04 >nexus6p >git repo >可以翻墙的网络 >大于100G的硬盘2,安装软件 >安装gitsudo apt-get install git >安装repo 1,首先创建bin文件夹 mkdir ~/bin PATH...
2019-04-11 16:08:27
733
原创 安卓源码编译记录
问题一:terminating with uncaught exception of type std::bad_alloc: std::bad_alloc Could not build FEC data! Error: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc Out of spac...
2019-03-31 12:17:04
786
原创 吉他学习第一课
1,什么是音符?音符可以分为全音符,二分音符,四分音符,八分音符,十六分音符等。音符并不表示实际的时间,其作用是表示相对的时间。比如说,一首曲子一分钟有60拍,并且以四分音符为一拍,那么一拍就是一秒钟,八分音符就是半秒钟。如果一首曲子一分钟有30拍,并且以四分音符为一拍,那么一拍就是两秒钟,八分音符就一秒钟。具体的个音符长短由节奏型决定。2,什么是音程?音名 A ...
2018-11-03 22:08:57
1131
原创 C++11.新特性
1,统一的初始化方法 1,定义变量:如vector <int> a {1,2,3,4}; 2,创建对象:当类A的构造函数有两个参数时,A的实例化: A a {1,2}; 3,返回值:当返回值类型是 vector<int>时,return {1,2,3,4,5,6,7};2,auto关键字 1, 使用auto定义变...
2018-10-07 14:58:47
183
原创 智能指针
1,什么是智能指针?智能指针实际上是一个类,这个类的对象在构造函数时获取资源,同时在类内部重载 * 和 -> 操作符,用来获取资源。并在析构函数中执行对资源的释放。因为C++语言没有内存回收机制,所以总会导致内存泄漏,智能指针可以解决这个问题。因为这个类的对象是在栈上创建的,那么在程序结束时,销毁类对象自动调用析构函数释放资源,就不会内存泄露了。2,auto_ptr中...
2018-10-05 16:38:32
242
原创 野指针
1,什么是野指针 野指针指的是一个指针指向的内容是垃圾内存,是不可使用的内存2,野指针是如何产生的? 1,定义指针变量是没有初始化,系统并不会为其赋NULL,而是指向一个垃圾地址 2,将mallco出来的空间释放后并没有将指针赋为NULL,这样的指针实际上指向一个垃圾地址 3,返回值是一个指向原函数栈的一个指针,因为原函数空间已被释放...
2018-10-02 11:12:13
157
原创 虚拟内存 && 页表 && pcb && 进程状态
1,虚拟内存电脑中所运行的程序均需经过内存执行,若执行的程序占用的内存很大很多,则会导致内存消耗殆尽,为解决该问题,WINDOWS运用了虚拟内存技术,即拿出一部分硬盘空间来充当内存使用,这部分空间即称为虚拟内存。每个进程运行 每个进程运行的时候都会拿到4G的虚拟内存.其中3G是交给用户的,然后剩下的1G内存存储内核的东西了.一个进程在执行时并没有将所有的数据都加载到内存中,...
2018-10-01 13:03:25
1382
原创 http协议
0,什么是http协议 当tcp连接建立以后,由于tcp是面向字节流的,客户端可以向服务器发送字符串,发送结构体,只要服务器能按照约定 对客户端发送的数据正确的解析就是可以的,那么http就是一个现成的强大约定。1,URL中的特殊字符如何处理? URL中的 / ? 等字符已经有了特殊的含义,所以不适用它的特殊含义的时候必须进行转义。 如,空格...
2018-09-30 17:15:40
267
原创 leetcode-AC代码
1.从下往上按层打印二叉树class Solution {public: vector<vector<int>> levelOrderBottom(TreeNode * root) { vector<vector<int>> result; if (root == NULL) { return result; }...
2018-09-24 22:01:40
765
原创 单例模式
单例模式: 在一些特定的情况下我们需要一个类只创建一个对象,比如,Windows中的文件管理器, 在多线程多进程访问文件管理器并进行插入删除操作时,如果不能对同一个接口进行操作, 那么势必造成文件系统的混乱。懒汉模式:一, 静态指针成员class Si...
2018-09-23 21:20:52
175
原创 实现 STL--list
#pragma once#include<iostream>// 带头结点双向循环链表template<class T>struct ListNode{ ListNode(const T& data = T()) : _pPre(0) , _pNext(0) , _data(data) {} ListNode<T>* _pP...
2018-09-22 09:29:13
119
原创 实现 STL--vector
#pragma once#include<iostream>using namespace std;template<class T>class Vector{public : typedef T* Iterator;public : Vector() :_start(0) , _end(0) , _endOfStorage(0) {}...
2018-09-22 09:27:29
129
原创 GET和POST的区别
1,get 没有 post 更加安全2,get 只能在url中可以添加参数 。post的参数在body中。3,get参数的长度有限,post的参数长度无限制。很可惜以上的三个区别都是错的,下面一个一个进行分析。 1,get 没有 post 更加安全 这是一种以五十步笑百步的言论,post 相对于 get 的安全仅仅体现在post将参数放在body中,用户看不到...
2018-09-21 09:02:49
130
原创 STL六大组件
1,容器1,vector 底层实现使用线性表,,2,list 底层就是链表3,deque 底层是双向的线性表,也就是双向接口,意思在头和尾都可以进行插入和删除操作。4,map 底层是红黑树5,set 底层是红黑树2,算...
2018-09-21 07:32:52
121
原创 链表面试题
#include"LinkList.h"PNode BuyNewNode(DateType date){ PNode NewNode=(PNode)malloc(sizeof(Node)); if(NewNode==NULL) { return NULL; } NewNode->date=date; NewNode->next=N...
2018-09-19 07:38:39
141
原创 剑指offer--ac代码
1,栈的压入,弹出序列class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size()==0 || popV.size()==0 || pushV.size() != popV.size()) re...
2018-09-16 09:50:15
163
原创 C++面试题
一,重载,重写,隐藏的区别 1,重载与重写 作用域不同:重写存在于继承体系下,也就是两个类中的两个函数, 重载存在于一个类中,也就是一个类中的两个函数。 参数列表不同:重写要求两个函数的参数列表完全相同,(...
2018-09-15 08:50:49
186
原创 零碎知识点
1,一个int占几个字节?在16 位系统下,占2个字节,在32,64位系统下占4个字节。2,一个汉字占几个字节?GBK编码格式,一个汉字占两个字节,UTF-8 格式下,不确定,3,#define BUG(X,Y) (X+1)*Yint main(){ int a = 3; int b = 4; printf("%d\n", BUG(a++, b++)...
2018-09-06 16:48:58
239
原创 死锁
1,死锁的两种情况 1,同一线程重复申请同一把锁,在第二次申请时,必须要将第一次申请的锁释放掉, 但是要释放第一次申请的锁,就必须要将第二次申请的锁释放,这样就死循环了。 2,进程1申请了锁1,进程2申请了锁2,然后进程1右申请了锁2,进程2又申请了锁1, 这样当进程1申请锁2时,必须要将锁2释放,释放锁2又必须要...
2018-09-06 16:44:51
127
原创 消费者-生产者模型
1,概念 本质上是用来解决资源的供求问题的,就是缓解供不应求(生产者太慢,消费者太快)和货物囤积(消费者太慢) 使生产与消费达到一个相对稳定的状态。2,321原则 一种消费场所 消费者与生产者的交易场所 两种消费角色 消费者与生产者 三种消费关...
2018-09-06 15:43:02
246
原创 面试题:进程间通信的方式
liunx六大进程间通信方式 管道,消息队列,共享内存,信号量,socket,信号,文件锁1,管道 1,匿名管道: 概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。 2,命名管道: ...
2018-09-04 15:05:50
45032
1
原创 C/C++关键字
1,extern 1,在文件1中有一个全局变量A(也就是在所有的函数体之外),当在文件2中直接使用这个变量时,就会找不到, 但是,如果在文间中写出文件1中全局变量A的声明,并在声明前加上extern,就可以使用。 总结来说,这个关键字解决了用户想使用其他文件中...
2018-09-02 14:20:22
553
原创 Liunx常用命令
%s/to/too/g 将to替换为too%s///gc 表示逐个确认g 表示全局替换c 表示替换前确认yYes:执行这个替换 nNo:取消这个替换 aAll:执行所有替换而不要再询问 qQuit:退出而不做任何改动 lLast:替换完当前匹配点后退出 CTRL-E向上翻滚一行 CTRL-Y向下翻滚一行Netstat –anp |...
2018-08-30 16:55:37
210
原创 c++动态内存管理
1,malloc/calloc/realloc三者之间的区别?void* malloc(字节数)void* calloc (元素个数,元素大小):初始化 0void* realloc (void* p ,size )p---->NULL:malloc 非空:size---->变小--->缩小原空间 非空:si...
2018-08-30 15:49:47
104
原创 流量控制&&拥塞控制
一,流量控制1,什么是流量控制?TCP根据接收端接受缓冲区的大小,来决定发送数据的快慢,这个机制叫做流量控制。2,为什么有流量控制?任何一个接受端接受的能力都是有限的,如果接受缓冲区满了,而发送端依然发送数据,就会导致丢包,而引起超时重传。这对资源是一种浪费。3,怎样实现流量控制?接收端每次都会将自己的缓冲区的大小放入TCP报头的 ‘ 窗口大小’字段, 通过ACK确认应...
2018-08-23 23:28:50
2272
原创 线程
一,线程的概念1,线程是操作系统能够进行运算调度的最小的单位。2,线程被包含在进程中,是进程中实际运作的单位。就是说,线程在进程的地址空间里运行。3,一条线程指进程中一个单一顺序的控制流。4,一个进程中可以并发多个线程,每条线程的执行任务不同。5,从内核的角度理解线程。 在内核中看到的线程也是PCB来表示的,创建新的PCB和原PCB共用虚拟地址空间。 ...
2018-08-22 17:14:25
158
原创 面试题:字符串与数组相关
1,空格替换题目解析:将字符串中的空格 ‘ ’ 替换为 ‘ %20 ’。解题思路:使用string类中的resize函数进行扩容。然后从后往前遍历,进行空格替换。class Replacement {public: string replaceSpace(string iniString, int length) { if(length<=0) ...
2018-08-21 19:42:03
296
原创 给定一个整数 n,生成所有由 1...n 为节点组成的不同的二叉查找树。
题目解析:给定一个n,用1-n这些数字去创建搜索二叉树,并将所有搜索二叉树的头结点放到vector中返回。解题思路:好吧,这题我也说不清是怎么肥事,自己举个例子画一画就明白了。class Solution {public: vector<TreeNode *> generateTrees(int n) { /*vector<TreeNode*> res...
2018-08-21 12:07:31
3596
1
原创 高级IO------epoll
一,epoll的三个系统调用函数1int epoll_create(int size);//创建一个句柄,也要在文件描述符表上占一个位置//size 可以忽略,存在的原因是有很多程序已经用了size,如果去掉就不能用了。函数2 int epoll_ctl (int epfd ,int op ,int fd, struct epoll_event * event...
2018-08-20 10:58:23
211
原创 面试题:恢复二叉树 && 检查二叉树
1,恢复二叉树题目分析:给定一颗二叉搜索树,有两个节点错误的交换了值,现在去将这两个值重新交换回来。解题思路:根据二叉搜索树的性质,选择中序遍历的方法,可得到顺序的序列。情况一:两个错误的节点是直接相连的,情况二:两个错误的节点不是直接相连的在下面的递归过程中,在进入下次递归前都会保存当前节点,为了同下次递归的节点进行比较。不管哪种情况,当上一个节点的值大于当前节点的值时,...
2018-08-20 08:27:27
646
原创 三次握手 && 四次挥手
1,三次挥手 第一次握手: 建立连接时,客户端向服务器发送一个 请求包,在这个包中,SYN=1,ACK=0,表示这是一个请求连接的报文, 系统为这个报文随机产生一个序列号 x,并且客户端进入SYN_SENT状态,等待服务器的确认。 ...
2018-08-19 16:50:24
243
原创 面试题:二叉树的最小深度 && 经过给定节点的最大路径和
1,经过给定节点的最大路径和中心思想: 先递归到最左边,算出最左节点的路径和,用其更新最大值,并将左右两条子路的较小值递归返回//经过给定节点的最大路径和#include<iostream>#include<algorithm>using namespace std; struct TreeNode { int val; TreeNode *lef...
2018-08-18 23:38:36
318
原创 高级IO----select
一,阻塞式IO当需要执行一项任务,而且去执行这项任务必须要满足一个条件,如果在条件满足前一直等待,直到满足条件再去完成任务。这种方式就是阻塞式 。比如:一个人去钓鱼,没有鱼上钩就一直等待,直到有鱼上钩,下去拉鱼竿。二,非阻塞式IO当需要执行一项任务,而且去执行这项任务必须要满足一个条件,如果在条件满足前不等待 ,而是去干其他的事情,但要按时查看条件是否满足,直到满足条件再去完成...
2018-08-17 19:28:58
517
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人