自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 C++后台开发常见面试问题 -- C/C++

经过刷其他人的面经和回顾自己的面试经历,在面试中C/C++常问问题总结如下:C程序的存储空间布局一个编译链接之后生成的可执行程序,在存储时分为代码段(text)、数据段(data)、未初始化数据段(BSS)text段:存放程序的执行代码和一些常量,该存储区域是只读的data段:存放程序中已初始化的全局变量,静态内存分配BSS段:存放程序中未初始化的全局变量,静态内存分配需要注意的是B...

2020-04-30 09:44:16 659

原创 算法 -- 查找

查找查找即从一堆数据中找到我们想要的数据。查找算法有很多种,包括:[1]顺序查找二分查找插值查找斐波那契查找树表查找分块查找哈希查找鉴于水平有限,这篇博文仅讨论顺序查找、二分查找和树表查找中的二分搜索树查找。如果想了解其他查找算法,可以参考七大查找算法查找表在一个数据集合中查找想要的内容,这个数据集合就是查找表,查找表可以分为:静态查找表:只做查找工作,查找过程中不会...

2020-03-28 11:08:43 350

原创 算法 -- 排序

选择排序提到“选择”,一定要想到是要选择什么?如果是从小到大排序的话,是每次循环选择未排序序列中的最小值如果是从大到小排序的话,是每次循环选择未排序序列中的最大值template <typename T>void select_sort(T array[], int left, int right){ for(int i = 0; i < right - left...

2020-03-28 11:07:17 285

原创 数据结构 --二叉搜索树

二叉搜索树二叉搜索树定义二叉搜索树也称为二叉查找树、二叉排序树,是一种插入、删除、查找操作性能都不错的数据结构二叉搜索树首先还是一棵二叉树,但是这个二叉树有一些特点:对于树中的每个结点,如果左子树存在,那么左子树中所有结点的值都小于该结点的值如果右子树存在,那么右子树中所有结点的值都大于该结点的值树中没有值相等的结点下图就是一棵二叉搜索树,可见满足上述二叉搜索树的特点二叉搜索...

2020-02-26 14:29:27 957

原创 数据结构 -- 链表

单链表(ForwardList)链表是链式存储结构的线性表的实现,由于内存地址不连续,所以链表不仅要有数据域,还要存储后继结点指针,如果一个结点只有一个指向后继结点的指针域,那么该线性表称为单链表头指针与头结点头指针中存储的是第一个结点的内存地址,通过头指针找到第一个结点,之后通过第一个结点的指针域可以找到第二个结点,以此类推,可以找到链表的最后一个结点,最后一个结点的指针域为空(nullp...

2020-02-26 12:37:06 276

原创 内存对齐

看了很多篇有关内存对齐的文章,看得是云里雾里的,花了很长时间才搞清楚内存对齐相关问题,这里整理下,方便其他像我这样的小白查阅什么是内存对齐?先通过一段代码了解下内存对齐现象#include <stdio.h>struct A { char a; // 1字节 int b; // 4字节 short c; // 2字节};struct B { char a; ...

2020-02-07 19:04:45 187

原创 数据结构 -- 队列

队列也是一种特殊的线性表,特殊在于只允许在一端插入元素,在另一端删除元素,所以队列有先进先出的特性队列的可以分为普通队列和带有优先级的队列术语队头:允许删除元素的一端队尾:允许插入元素的一端入队:向队列中插入元素操作出队:从队列中删除元素操作普通队列#ifndef QUEUE_H_#define QUEUE_H_#include <tools/base/noncopya...

2020-02-04 12:30:15 167

原创 数据结构 -- 栈

栈可以理解为一种受限的线性表,只能在表尾插入和删除元素。栈有线性表的特点:每个元素都有且之后一个前驱节点和一个后继节点(第一个节点只有后继节点,最后一个节点只有前驱节点)同时也有自身的特点:后入先出术语栈顶:允许插入和删除元素的一端栈底:与栈顶相对的一端入栈:插入数据操作出栈:删除数据操作抽象数据类型ADT 栈(stack)Data 同线性表。元素具有相同的类型,相邻元素具有...

2020-02-04 12:05:06 198

原创 算法 -- 深度优先搜索和广度优先搜索

深度优先搜索(Depth-First-Search, DFS)和广度优先搜索(Breadth-First-Search, BFS)都是用于遍历和搜索树或图的算法,最开始接触这两个概念是学习二叉树的遍历时,因此,下面先从二叉树的遍历谈起,再通过leetcode上的几道题谈一谈个人对这两种算法的理解。因个人知识储备的问题,下面不涉及图的相关内容二叉树的深度优先遍历二叉树的深度优先遍历又分为:前序、...

2020-02-02 21:26:29 452

原创 数据结构 -- 二叉树

树线性表是处理一对一关系的数据结构,这里的一对一是指:在线性表中一个结点只有一个前驱结点和一个后继结点(头结点和尾结点除外)树是处理一对多关系的数据结构,一个结点有一个父结点和多个子结点,所以树型结构有两个特点:树有一个根结点,而且这个根结点是唯一的一个结点有且仅有一个父结点,可以有多个子结点(当然也可以没有)树中结点的分类根结点内部结点:不是根结点,并且有子结点的结点叶结点...

2020-02-01 22:09:19 342

原创 数据结构 -- 动态数组

线性表定义0个或多个数据元素的有限序列理解:相同类型的元素之间是有顺序的,第一个元素只有一个后继节点,没有前驱节点,最后一个元素只有一个前驱节点,没有后继节点,其他元素各有一个前驱节点和后继节点抽象数据类型ADT 线性表(List)Data 数据元素之间满足线性表的定义Operation InitList(*L) // 初始化操作,建立一个空的线性表 Lis...

2020-01-30 14:45:42 1338

原创 数据结构 -- 绪论

数据结构是做什么的?数据结构是研究数据如何在计算机内存中进行组织和存储,使得我们可以高效的获取数据或者修改数据学习数据结构有用吗?目前在学习、做项目中确实没有感受到哪里需要用到数据结构,这是为什么呢?原因很简单,你使用的编程语言,IDE、操作系统已经把数据结构都实现好了,而你需要的是怎么使用它,怎么在它的基础上增加一些业务逻辑实现一个产品另外一个档次就是开发IDE、编成语言、操作系统,在...

2020-01-30 13:10:58 192

原创 Linux信号机制(二)-- 信号集

什么是信号集?收到一个信号之后执行信号处理函数,在执行信号处理函数的过程中如果又来了一个相同的信号,那么这个信号将会被阻塞,直到信号处理函数执行完之后,再响应被阻塞的信号,注意如果信号被阻塞期间又收到了该信号,那么多个信号的处理会被合并为1次比如正在执行SIGUSR1的信号处理函数,此时又收到了一个SIGUSR1信号,那么该信号将会被阻塞,直到信号处理函数执行完之后,再次执行该函数。如果在阻塞...

2020-01-17 13:36:26 668

原创 Ubuntu18.04安装NFD

官方提供的安装教程:http://named-data.net/doc/NFD/current/INSTALL.html下面提供Ubuntu环境下源码安装NFD的教程下载源文件# Download ndn-cxxgit clone https://github.com/named-data/ndn-cxx# Download NFDgit clone --recursive http...

2020-01-15 15:52:56 767 1

原创 Linux信号机制(一)-- 信号

什么是信号?在Unix/Linux中信号是进程间通信的重要手段,信号可以通知一个进程发生了什么,信号的产生是突发事件,所以也被称为“软件中断”通过查看<signal.h>文件了解到信号是宏定义的常量,以SIG开头值得注意的是:不存在值为0的信号,值为0的信号称为空信号,kill函数对值为0的信号有特殊的应用信号的来源信号的来源有两种:内核发送给用户进程,这种情况一般是硬...

2020-01-14 21:41:39 170

翻译 C++异常的23个问题

本篇博文翻译Standard C++中的一篇C++异常相关问题的文章原文:https://isocpp.org/wiki/faq/exceptions,翻译内容如下:一、为什么使用异常?使用异常有什么好处呢?回答一般为:“使用异常机制进行错误处理可以让代码更加简洁,更不容易遗漏错误情况”。之前用错误码errno和if语句处理错误有什么的问题呢?回答一般为:“使用错误码和if语句处理错误会使错...

2020-01-13 15:31:15 323

原创 封装TCP socket

封装TCP socket对字节序转化函数、网络地址、Socket操作函数、监听套接字和连接套接字进行了封装,部分代码参考自muduo网络库源码地址:https://github.com/liuyunian/tools-cxx/tree/master/tools/socket字节序转化函数对于字节序转化函数,Unix和Linux共同拥有的是htonl(), htons(), ntohl(),...

2020-01-10 15:35:35 661

原创 封装poll和epoll

在select、poll和epoll详解中提到了可以对poll和epoll进行封装,提供统一的接口。封装目的主要有两个:复用和易用,以下封装希望屏蔽poll和epoll使用时的诸多细节,提供简单易用的接口珠玉在前,本文所提供的代码参考自muduo网络库,另外代码有用到tools-cxx中提供的base库和log库框架首先看一下整体类图:PollPoller和EPollPoller分别对p...

2020-01-09 16:44:05 329

原创 select、poll和epoll详解

select、poll和epoll在Unix IO模型中简单介绍了什么是IO复用,现在介绍实现IO复用的几种方式:select、poll和epoll其中select和poll都不如epoll高效(下面会分析为什么),但是可以将poll和epoll封装成跨平台的统一接口(详见封装poll和epoll),所以这里简单介绍select,重点介绍poll和epollselectselect函数原型...

2020-01-05 16:18:51 773

原创 Unix IO模型

Unix下的IO模型Unix下可用的IO模型有五种 [1]:阻塞式IO非阻塞式IOIO复用(select和poll)信号驱动IO(SIGIO)异步IO(POSIX的aio_系列函数)下面介绍自己对前三种IO模型的理解,后面两种模型如果之后有机会接触到,再回来补充!阻塞式IO程序执行一个系统调用时,会进行休眠等待返回结果,不在执行之后的代码比如服务器端以阻塞IO方式调用rea...

2020-01-04 20:46:09 280

原创 C++异常中的堆栈跟踪

C++异常中的堆栈跟踪C++异常中的堆栈跟踪就是当程序抛出异常时,能够把抛出异常的语句所在的文件名、函数以及其它上层函数信息都打印出来。堆栈跟踪意义重大:在实际的生产过程中,发现代码中bug要比解决bug更加费事费力,而发生异常时的堆栈信息可以帮助我们更快的发现程序中的问题,有助于加快开发。C++不像java,在异常类中有提供堆栈跟踪功能,C++标准库中的std::exception及其子类...

2020-01-01 10:30:43 3096 4

原创 我为什么要写博客?

2017年10月保研确定之后,我结合自身的兴趣点做了职业规划,决心从电信专业叛逃,成为一名“码农”,之后一些重要的事件包括:毕业设计(《基于WebRTC构建实时P2P通信系统》)、暑期实习(微信小程序)以及确定硕士研究方向(内容中心网络)都是按照成为一名coder安排自己的学习重心的。现在看来写技术博客似乎是一个coder的必修课,所以决心开始写技术博客并记录些人生思考。最近两年我在CS方面学得...

2020-01-01 10:15:28 141

空空如也

空空如也

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

TA关注的人

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