- 博客(125)
- 收藏
- 关注
原创 TCP/UDP伪首部
伪首部并非TCP&UDP数据报中实际的有效成分,伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP数据报的首部中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。《tcp/ip详解 卷一 协议》,其中介绍到了UDP和TCP伪首部书中有句话:“其目的是让UDP两次检查数据是否已经正确到达目的地”,具体是那两次呢?对伪首部字段进行分析:32位源IP地址、32位目的IP地...
2020-04-07 09:32:21
2021
原创 关于对‘pthread_create’未定义的引用解决方法
pollmsg.c:(.text+0x839):对‘pthread_creat’未定义的引用缺少lpthread该库支持使用:hello-zhen@h:~$ gcc pollmsg.c -lpthread 编译成功
2020-04-03 15:26:01
3516
转载 标准IO缓冲详解全缓冲、行缓冲、不缓冲
标准IO缓冲详解全缓冲、行缓冲、不缓冲标准I/O库提供缓冲的目的是尽可能地减少使用read和write调用的次数。他也对每个I/O流自动地进行缓冲管理,从而避免了应用程序需要考虑这一点所带来的麻烦。不幸的是,标准I/O库最令人迷惑的也是他的缓冲。标准I/O提供了三种类型的缓冲:1、全缓冲。这种情况下,在填满标准I/O缓冲区后才进行实际I/O操作。对于驻留在磁盘上的文件通常是由标准I/O...
2020-03-31 13:24:47
433
转载 IO模式和IO多路复用(阻塞IO、非阻塞IO、同步IO、异步IO等概念)
IO模式和IO多路复用(阻塞IO、非阻塞IO、同步IO、异步IO等概念)网络编程里常听到阻塞IO、非阻塞IO、同步IO、异步IO等概念,总听别人装13不如自己下来钻研一下。不过,搞清楚这些概念之前,还得先回顾一些基础的概念。**1 基础知识回顾**注意:咱们下面说的都是Linux环境下,跟Windows不一样哈~~~1.1 用户空间和内核空间现在操作系统都采用虚拟寻址,处理器先产生一...
2020-03-30 14:06:09
609
原创 vscode打开文件,中文显示乱码
在vscode中的扩展中搜索:GBKtoUTF8 ------------下载并重新加载,就解决了中文乱码的问题
2020-03-27 13:50:41
468
转载 深入理解pthread_cond_wait、pthread_cond_signal
===============================man pthread_cond_wait的解释==========================LINUX环境下多线程编程肯定会遇到需要条件变量的情况,此时必然要使用pthread_cond_wait()函数。但这个函数的执行过程比较难于理解。 pthread_cond_wait()的工作流程如下(以MAN中的EXAMP...
2020-03-24 00:16:25
319
原创 C++中输出设置
#include<iostream>#include<iomanip>//输出样式头文件using namespace std;//命名空间第一种使用方式,不安全,可能与其它重复using std::cin;//命名空间第二种使用方式,较安全//std::cin<<xx<<std::endl;命名空间第三种使用方式,最安全int main...
2020-03-23 12:10:11
249
原创 C++多态
多态,就是一个事物,通过多种方式呈现,一对多机制一 、多态存在条件:1-必须存在继承关系2-必须存在同名虚函数,虚函数覆盖(原函数相同)3-必须存在基类指针二、虚函数构成多态关键虚函数关键字:virtual虚函数是构成多态存在的关键,也是虚函数唯一的作用1-只需要在基类成员函数前面加上virtual关键字即可2-构造函数不存在虚函数,不继承,派生类通过调用调用基类构造函数3-析...
2020-03-23 10:12:00
135
原创 关于C++中静态成员变量、静态成员函数、const属性变量、const成员函数的理解
1、静态成员变量 一定要初始化,一般为类外初始化格式为:类型 类名::变量名=value;2、静态成员函数只能够调用静态成员函数(由于静态成员变量从初始化开始就有了一个内存,属于类,所有的对象都可以使用该静态成员变量,属于公有制,且静态成员函数中无this指针)3、构造函数和析构函数对于静态成员变量无影响,可以调用4、const属性变量只能通过初始化列表进行初始化,(也可以初始化列表默认初...
2020-03-23 10:09:44
626
原创 友元函数、友元类以及运算符重载
1、友元函数:类中声明,类外定义,不属于类,但可以访问类中成员变量2、友元类:类中声明,类外定义,可以访问友类中的所有成员(包括成员变量,成员函数.一般不用)3、运算符重载:将所需要的运算符重载,可实现对象的运算必须使用友元函数进行重载:>>和<<必须使用成员函数进行重载:= [] () ->不可进行重载的运算符:求大小sizeof,域名解析符:...
2020-03-23 10:09:25
898
原创 继承、多继承
//继承 父类(基类)+ 新内容 = 子类(派生类)//子类继承父类,子类继承父类所有的成员变量和成员函数 父类有的子类都有,子类没有的可以加//继承方式 控制父类成员在子类中的访问权限:public、private、protected 格式 calss 子类:权限 父类//规则(继承方式:public):// 父类私有成员,子类不可访问(继承了,但不可访...
2020-03-23 10:09:12
425
转载 C++11右值引用、移动语义、完美转发详解
c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:看能不能对表达式取地址,如果能...
2020-03-22 18:45:34
233
原创 面试题66:构建乘积数组
给定一个数组,A[0,1,2,3,4,5,6…n-1],构建一个数组B[0,1,2,3,4,5,6…n-1],其中B[i]=A[0]xA[1]xA[2]…A[i-1]xA[i+1]…xA[n-1];eg:A[5]={1,2,3,4,5},那么B[0]=2345,B[1]=1345,B[2]=1245,B[3]=1235,B[4]=123*4,所以构建出来的乘积数组为:B[5]={120,60,...
2020-03-19 15:19:40
204
原创 面试题60:n个骰子的点数(动态规划)
一、基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达...
2020-03-17 15:15:23
305
1
原创 面试题57:和为s的连续正数序列
抽象为双指针class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>>res; if(target<0)return res; int smal...
2020-03-15 14:58:07
150
原创 面试题56:数组中数字出现的次数
将数组中每个数的二进制的每一位都加起来,如果能够整除3那么就不是,如果不能整除3那么该位为唯一数的某一个位class Solution {public: int singleNumber(vector<int>& nums) { if(nums.size()<=0)return -1; int bitSum[32]={0}; ...
2020-03-15 12:13:39
92
原创 面试题49:丑数
一、暴力法从1开始对每一个数进行判断,是否可以连除2,3,5得到1,效率比较低class Solution {public: int nthUglyNumber(int index) { if(index<=0)return -1; int number=0; int count=0; while(count<...
2020-03-12 11:50:46
112
转载 Linux:实际用户ID,有效用户ID,
在Linux中,每个文件都有其所属的用户和用户组,默认情况下是文件的创建者,也可以根据chown和chgrp来修改文件所属的用户和用户组。文件的属性存放在属性结构stat中,其中有st_uid和st_gid标志着。先举个例子。假设现在系统中有两个用户liz和hlf,有一个程序文件file的所属用户为hlf。然后使用liz用户登录系统,运行file文件,则运行进程process有一个实际用户和有效...
2020-03-11 19:19:47
301
转载 Unix概念:实际用户ID,有效用户ID,设置用户ID
看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解。今天好好区分了一下这几个概念并总结如下。说白了这几个UID引出都是为了系统的权限管理。下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,为了说明方便真接使用了用户名来代表不同的UID。先解释一下这几个ID的作用:RUID, 用于在...
2020-03-11 18:27:22
431
原创 面试题48:最长不含重复字符的子字符串
哈希表+双指针(效率较低)class Solution {public: int lengthOfLongestSubstring(string s) { int N=s.length(); if(N<=0)return 0; map<char,int>mmp; int R=0; int ...
2020-03-11 14:15:42
158
转载 Ubantu Vim配置
Ubantu的vim配置文件在 /etv/vim下,文件名:vimrc使用vim、vi或者nano等可以进行编辑以下是我的小小配置:以下是以下简单的配置语法,可根据自己需求选择性地进行配置" 开启语法高亮 syntax enable " 开启语法高亮syntax on " 设置字体 set guifont=Monaco\ 12" 设置历史记录条数 set h...
2020-03-09 17:40:20
201
原创 面试题43:1~n整数中1出现的次数
一、算是一种暴力求解法int countNum(int n){ int count = 0; while (n) { if (n % 10 == 1)++count; n /= 10; } return count;}int GetNumberOf1(int n){ if (n <= 0)return 0; int count = 0; for (int ...
2020-03-08 15:23:40
172
原创 面试题42:连续子数组的最大和
一、累加遍历累加,比之前累加值大的更新结果res,当累加值小于0时,将下一个元素值赋予nCursum,一直遍历到最后class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()==0) return 0; int nCu...
2020-03-07 13:50:07
103
原创 面试题41:数据流中的中位数
思路:利用最大堆,最小堆1、将数据平分给两个堆(平分时,因为会有奇偶差,所以两个堆的元素数量之差最大只能是1);2、采用奇偶插入,当容器中已插入元素(最大堆、最小堆数量之和)数量为偶数时,新元素插入最小堆,奇数时,新元素插入最大堆;3、因为需要两个堆顶元素来确定中位数,那么最小堆的元素都要比最大堆的元素要大(最小堆堆顶为该段最小值,最大堆堆顶为该段最大值),所以在偶数插入时,如果该元素比最大...
2020-03-07 10:23:31
156
原创 面试题40:最小的K个数
一:先排序,取前k个数class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int>res; if(arr.size()==0)return res; sort(arr.begi...
2020-03-06 21:48:11
161
原创 面试题39:数组中出现次数超过一半的数字
一:摩尔投票法如果与保存的值相等times+1,不相等则times-1,如果times等于0,则result保存另外一个值,最后结束时;如果times大于0,则result保存的值就为超过一半的数值class Solution{public: int majorityElement(vector<int>& nums) { int res...
2020-03-06 20:54:45
107
原创 面试题38:字符串的排列
class Solution {public: vector<string> permutation(string s) { vector<string>res; if(s.size()==0)return res; sort(s.begin(),s.end());//排序,也可不排序,看需求 per...
2020-03-05 23:23:10
125
原创 面试题37:序列化二叉树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //中...
2020-03-05 20:59:45
150
原创 面试题36:二叉搜索树与双向链表
#include <iostream>struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* pLeft, * pRight; BinaryTreeNode(int _value) :m_nValue(_value), pLeft(nullptr), pRight(nullptr) {}};void ConvertNod...
2020-03-05 20:54:55
91
原创 红黑树(左倾)C++
红黑树的性质:1.每个结点的链接要么是红的要么是黑的;2.根结点的链接是黑的;3.每个叶结点的左右nullptr指针都是黑的;4.如果一个父节点链接是红的,那么它的两个儿子的链接都是黑的;5.对于任意结点而言,其到叶结点树尾端到根节点的每条路径都包含相同数目的黑链接。#include<iostream>#define RED true#define BLACK fals...
2020-03-02 22:29:15
261
原创 UNIX环境高级编程环境配置
UNIX环境高级编程的环境配置在UNIX环境高级编程中apue.h不是系统自有的,需要将这个文件放置在系统中具体步骤如下:一.下载apues.h压缩包,并解压二.cd 命令进入该文件的apue.3e目录中三.执行 make(可能会出现一定的错误,如果错误就需要安装)四.将编译后的相应头文件放入系统中,因为程序编译时所需的头文件是从系统路径下获取的,具体分为三步:cp ./includ...
2020-02-27 14:07:27
614
原创 面试题36:复杂链表的复制
原地进行复制:时间复杂度O(n),空间复杂度O(1)第一步:将链表节点复制,并将其链接 eg:1->2->3->4---------1->1->2->2->3->3->4->4第二步:将自由链接进行链接,N->S可转化为N->N’------>S->S’第三步:将原节点与复制节点分开,奇节点链接起来,偶节点链...
2020-02-26 21:15:32
100
原创 Member selection运算符
详情请见:Member Functions (C++)原文:Classes can contain data and functions. These functions are referred to as “member functions.” Any nonstatic function declared inside a class declaration is considered...
2020-02-26 11:12:26
331
原创 面试题34:二叉树中和为某一值的路径(递归 C++)
因为从根节点开始寻找,前序、中序、后序遍历中只有前序遍历的根节点首先出现,所以利用前序遍历的规则去进行寻找路径,当访问到一个节点时,就将节点的值加上,如果当路径和(currentSum)等于预期的值并且为叶节点的时候,将此路径压入容器(vector)中;如果访问到叶节点的路径和(currentSum)没有达到预期值,回退到上一个节点,路径和(currentSum)减去此节点的值,一直到遍历完所有的...
2020-02-25 22:40:05
167
原创 面试题33:二叉搜索树的后续遍历
例如{5,7,6,9,11,10,8};根据最后一个元素为根节点,二叉搜索树的左子节点比根节点小{5,7,6},右子节点比根节点大{9,11,10},依照这个规律,可进行一步步的分析class Solution {public: bool verifyPostorder(vector<int>& postorder) { if(pos...
2020-02-25 21:23:45
99
转载 C++指向成员的指针
Copy:https://www.cnblogs.com/hugb/articles/5666063.html
2020-02-25 09:00:45
153
原创 面试题32:从上到下打印二叉树
利用队列容器:deque#include<iostream>#include<deque>struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* pLeft, * pRight; BinaryTreeNode(int _value) :m_nValue(_value), pLeft(nullptr), pRig...
2020-02-23 14:47:07
97
原创 面试题31:栈的压入、弹出序列
找出入栈序列与弹出序列的规律:栈的栈顶元素与弹出序列按照顺序指定元素进行比较,如果不相等,则继续入栈,如果当入栈序列栈顶元素不等于按顺序指定的弹出序列的元素,那么该弹出序列即为错误,当栈与弹出序列都一一对应(栈空,弹出序列完结)即正确。#include<iostream>#include<stack>bool isPopOrder(const int* pPush...
2020-02-23 14:05:52
177
原创 面试题30:包含min函数的栈
刚开始以为要完全模拟一个出stack出来,后面才发现原来可以用原有的stack进行操作得到栈中最小的元素,需要一个辅助栈,进入该栈的条件就是比辅助栈栈顶元素小,否则加入本时辅助栈的栈顶元素以补充位置,致使调用pop时,不会出现一个最小元素弹出后没有了次最小元素#include<iostream>#include<stack>template<class T&...
2020-02-22 20:21:19
172
原创 面试题29:顺时针打印矩阵
#include<iostream>#define Row 4#define Col 4void PrintArray(int (*number)[Col], int rows, int cols, int start){ int endY = rows - 1 - start; int endX = cols - 1 - start; for (int i = sta...
2020-02-22 17:41:59
101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人