自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (2)
  • 收藏
  • 关注

原创 Linux:TCP/IP四层模型导图

OSI四层模型思维导图对OSI四层模型做了一些回顾,有纰漏的地方请大家在评论区指出,我们一起进步O(∩_∩)O哈哈~

2019-08-05 20:41:52 324

原创 网易笔试问答:智能指针与inline关键字

这次是第一次笔试,被深深打击了,特将问答题重新整理一番,与诸君共勉;inline函数;特点,优缺点,在编译期间如何处理特点:inline是一种以空间换时间的做法,省去调用函数的额外开销,所以代码很长或者有递归循环的函数不适合使用inline对于编译器使用只是一个建议,编译器会自动优化,如果定义位inline的函数体内有函数/递归,就不会被调用inline修饰的函数不能让定义和声明分离,...

2019-08-04 20:14:15 232

原创 C++:智能指针

智能指针为什么需要有智能指针?智能指针是一种预防型的内存泄漏的解决方案。智能指针在C++没有垃圾回收器环境下,保证在任何情况下资源都能够进行合理的释放,而不用在所有可能退出的地方都进行是否释放的检测,避免由此引发的资源泄露问题;原理RAII:利用对象的生命周期来控制程序资源;将资源使用类的方式进行封装:在对象构造时获取资源,在析构函数中清理资源不需要显式释放资源;采用这种方式对象...

2019-08-04 19:13:51 319

原创 C++:继承概念基础

概念及定义继承对象是面向对象程序设计时代码可复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,以此产生的新类叫作派生/子类,继承体现了面向对象程序设计的层析结构,是类设计层次的复用继承的方式共有三种继承的方式会决定基类成员在子类中的访问方式继承方式/类成员基类的public成员基类的protected成员基类的private成员public...

2019-07-22 17:13:50 260

原创 从零开始搭建Linux共享服务器(云享系统)

从零开始搭建Linux共享服务器(云享系统)是男人就下100层,是汉子就来搭个服务器吧ヾ(◍°∇°◍)ノ゙主要思路所谓共享服务器,就是支持多人文件共享的HTTP服务器,功能十分简单,但我们关注的是如何尝试构建较高性能服务器、开放出用于扩展功能的接口、并且高效的管理文件数据;所以我们需要经过建立TCP服务端、将到来的客户端连接添加到线程池中、线程获取任务后解析请求报文、根据处理结果调用响应模块...

2019-07-17 20:54:45 1948

原创 Linux:TCP协议详解

TCP协议详解TCP协议是TCP/IP协议族里的另一个极为重要的协议,按照TCP/IP五层模型来划分,IP协议层位于传输层,基于它实现的广泛应用的应用层协议有http/ftp等;位于该层的还有UDP协议,关于它们的区别与联系,我们会在后文进行详细的讲解;TCP协议特点面向字节流,面向连接,可靠传输,一对一连接,无法像UDP一样广播多播;面向连接的具体表现为,使用TCP协议进行通信,双方...

2019-07-05 18:13:59 954

原创 Linux:两道题检测对fork的了解

Linux下,当需要创建进程时,我们最常使用的就是fork()函数,但你真的了解它吗?简略复习我们先来复习一下fork的运行规则:功能:以父进程为模板,创建子进程会把父进程的PCB拷贝一份,部分会修改,成为子进程的PCB会把父进程的虚拟地址空间拷贝一份,作为子进程的地址空间。写时拷贝,父子进程公用一份代码(代码段只读就不改了),各有一份数据(极端情况下代码段也会发生拷贝)由...

2019-05-15 01:14:21 163

原创 Linux:信号处理机制

什么是信号?信号是软件中断,信号通知进程发生了某个事件,打断进程当前正在进行的操作,去处理这个信号(应对对应的事件),这种机制为正在运行进程提供了一种处理异步事件的方法,而异步的执行方式因为不需要等待事件的完成再去执行接下来的操作,极大地提升了程序的执行效率;信号种类既然信号有那么多产生的场景,那么也就需要不同种类的信号来对事件类型加以区分,在CentOS上,我们可以使用kill -l...

2019-05-09 21:21:44 132

原创 C/C++:static与extern

C语言中static:修饰局部变量:局部变量原本存放于栈区,但经过static修饰后就被存放在静态区,这延长局部变量的生命周期至程序结束,但作用域仍限于语句块内修饰全局变量:原本全局变量/函数是全局作用域的,但经过static修饰后便无法被同一工程的其他源文件所使用,作用域限于本文件内修饰函数:与修饰全局变量相同,作用域缩小至本文件;extern:修饰函数/变量:声明在该工程中的...

2019-05-03 19:44:25 148

原创 Linux:IPC之共享内存

什么是共享内存?共享内存即指在Linux下,两个或多个进程所共享的一块在内存映射段(共享区) 上开辟好的物理内存空间,将这块物理内存空间映射到这些进程的虚拟地址空间中进行访问,当一个进程写入数据时,其他进程就可以读取这些数据,这就实现了进程间的通信,并且因为是直接读取共享内存中的数据,较其他方式省去了用户态与内核态的数据拷贝过程,所以这种方式的速度是最快的在Linux中,我们可以通过 “ip...

2019-05-03 18:12:05 535

原创 Linux:静态库&动态库

什么是库?从本质上来说,库(library)就是一段被编译好的二进制可执行代码,的当一个程序引用了该库头文件后,库在链接后就会为程序提供服务为什么要使用库呢?在开发过程中,任何一个需求的实现都需要依赖许多的功能协作,这些函数又依赖着更基础的函数,如果每个人都从头写起,那将是巨大的工作量,所以人们将一些公用/大量复用的函数写成函数库,这些函数往往都是简洁/高效/稳定且受到大量检验的的代码...

2019-05-02 23:46:40 140

原创 C++:青蛙的地下迷宫

今天看到了一个很有意思的题目:小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中...

2019-04-26 23:45:05 432

原创 Linux:EXT文件系统

总的来说,计算机的文件系统就是操作系统储存组织计算机数据的方法,使用户操作的是直观的文件和目录结构,而不需要访问晦涩离散的数据块,在Linux中,文件系统中的文件是数据的集合,这里不仅包含文件中的数据,还有文件,目录,软连接等一系列相关的信息;文件系统就是对磁盘中的文件数据进行管理...

2019-04-25 14:52:38 358

原创 Linux:IPC之管道

文章目录管道匿名管道模拟实现以下操作:ls | grep make命名管道模拟实现传输一串字符到另一进程中管道读写特性总结在这里,我们第一次提到了IPC(Inter-process communication)即进程间通信,我们变来简单说说IPC以及它的使用意义:在操作系统中,进程间通信主要是为了应对以下场景而产生的:数据传输:一个进程需要将他的数据发送给另一个进程数据共享:一份数据有...

2019-04-21 21:21:28 211

原创 Linux:如何实现Shell解释器?

熟悉Linux的小伙伴们都知道,shell作是用户使用系统的桥梁,那么今天我们便来看看shell是如何实现的;shell是一种命令解释器,也是用户操作接口,Linux用户通过我们通过输入一系列的指令,被shell解释后调用需要的系统接口,从而操纵系统内核,完成期望的动作所以,任何一个shell都必须要具备以下几点:抓取分析信息:能够读入用户操作的命令,并将其解析为我们需要的参数创建进程...

2019-04-14 13:00:51 1597

原创 Linux:彩色进度条

搞一个连续进度条循环打印递增#(第一次1个,第二次2个…)作为进度条的元素,但注意每次打印完后以/r结尾,这样会覆盖该行的文本从开头重新打印,然后用**fflush(stdout);**手动清理缓冲区让它显示出来,如果你用了/n的话,虽然不需要手动清理缓冲区了,但你看到的可就是个直角三角形了=_=打印七彩效果printf支持改变打印内容的颜色,和其背景颜色,其格式为:printf("\...

2019-04-07 18:59:15 200

原创 Linux:认识进程

说到进程,我们首先要来认识一下冯诺依曼体系结构它也被称为现代计算机硬件体系结构,包括:输入设备:如键盘/鼠标输出设备:如显示器/打印机存储器:如内存-外存运算器/控制器:这两个功能都由CPU来实现。举一个生活中常见的情形:如果你要用电脑通过qq给小明发消息,那麽你一定要先将这条信息通过键盘输入进你的电脑,存储进内存后,CPU取出这条信息,通过网卡等设备将它输送到小明的电脑,他的电脑也...

2019-04-06 22:00:42 360

原创 C++:模板

文章目录函数模板格式函数模板的实例化函数模板匹配原则类模板格式了解STL库泛型编程:编写与类型无关的通用代码,是服用代码的一种手段,模板是泛型编程的基础函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定版本。格式template<typename T1,typename T2,…typename Tn>返回值类型 函...

2019-04-04 15:15:50 116

原创 C++:单例模式-饿汉/懒汉

单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中只有一个实例,并提供一个访问它的安全局访问点,该实例被所有程序模块共享。用于管理服务器配置;构造函数私有化/防拷贝构造函数私有化/与防拷贝是实现懒汉饿汉的必要手段,如果你已经了然于心,请直接跳到下一部分:**构造函数私有化:**将类的构造函数私有,拷贝构造声明私有。防止别人拷贝在栈上生成对象。**防拷贝:**考虑也得...

2019-04-03 18:24:43 283 1

原创 AL:小Q的巧克力

小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力二分法:这里的思路就是假设一个小Q第一天吃糖的数量,然后使用Sum函数判断是否符合题目要求且是可以吃的最大数量,小Q第一天吃糖的数量在1~N-1之间,为了提高效率,我们使用二分法逼近那个最优值,这里注意,因为题...

2019-04-02 20:58:45 451

原创 C\C++:内存管理

文章目录C/C++内存分布C内存管理-malloc/freeC++内存管理方式-new/deleteoperator new&operator delete如何自行实现new定位表达式与malloc/free区别:C/C++内存分布栈:又叫堆栈,非静态局部变量/参数函数/返回值等等,堆时可以上下增长的内存映射段:是高效I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接...

2019-03-31 19:22:50 124

原创 C++:导图-类与对象

根据所掌握的知识点,我制作了一张关于C++类和对象的思维导图,这是对C++:类和对象的部分总结概括,如果你想看到更多细节,请点击上方蓝色的博文链接:...

2019-03-29 19:57:57 585

原创 671.二叉树中的第二小节点

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。这里笔者采用的思路非常简单,即遍历二叉树中的所有节点,同时设定两个变量分别存放最小的和倒数第二小的值,每次遍历时进行更新,全部遍历完后若是...

2019-03-28 23:28:52 168

原创 C++:类的应用-构建一个简单的Date类

在初步认识了类的构造方法,尤其是六大默认成员函数以及重载运算符后,我们就可以利用这些特性,来DIY一个自己的类,我的选择是构建一个可以进行日期方面运算/判断的类:需要实现的功能:赋值运算(=);加减天数还有前/后置++和–;计算出两个日期之间相差了多少天判断两个日期的大小(>,==,<);额外关系运算(>=,<=);因为Date是一个自定义类型,所有上述的所...

2019-03-27 21:28:18 418

原创 C++:类和对象

文章目录什么是类封装/访问限定符如何在类外访问一个私有的成员变量?class与struct的区别是什么?类的实例化为什莫要进行内存对齐?类的6个默认成员函数构造函数析构函数拷贝构造函数运算符重载赋值运算符重载什么是类脱胎于C的struct,但在C++中,struct不但可以定义数据以描述类的属性/成员变量,还可以再类里定义函数,用以描述类的方法(成员函数),常使用使用class替换作为关键字...

2019-03-26 18:06:00 671

原创 C++:命名空间/缺省参数/内联函数/auto/范围for

文章目录命名空间缺省参数内联函数特性宏的优缺点auto关键字范围for命名空间::-作用域限定符+变量/函数:::a,在全局域中寻找a变量;namespace一个命名空间就定义了一个新的作用域,命名空间中所有内容都局限与该命名空间中;#include <iostream>int a =0;namespace my{//也在全局变量里 int a =0;...

2019-03-25 13:44:53 228

原创 11. 盛最多水的容器

给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。垂直的两条线段将会与坐标轴构成一个矩形区域,较短线段的长度将会作为矩形区域的宽度,两线间距将会作为...

2019-03-24 23:56:05 105

原创 C++:引用详解

文章目录引用const引用引用做参数/返回值引用与指针的区别引用类型后紧跟&->int& b = c;引用是给一个已存在变量取别名,操作的还是原变量空间里的数据;使用规则:引用定义时必须初始化;一旦引用一个实体,就不能再引用其他实体;一个实体可以进行多个引用;#include<iostream>using namespace std;...

2019-03-24 20:52:15 130

原创 Linux:常用工具yum/vim/gcc/gdb/make-Makefile/git使用方法及指令详解

yum-软件包管理器Linux下软件安装方式:源码安装-手动安装/工具安装-自动检测解决依赖关系库的安装yum :产看能够安装哪些安装包 -yum list | grep Packge_name查看已经安装了那些安装包 -yum list installed |grep Packge_name安装软件包 -yum install packge_name移除安装包 -yum remo...

2019-03-23 18:07:19 439

原创 AL:链表中的归并排序(148)

在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4看到这个O(n*logn)的时间复杂度,常数级的空间复杂度,我第一反应是堆排序,但在链表进行堆排序要访问子树节点时,非常不好处理(结构体也不支持),我只能考虑快速和归并;归并排序:因为顺序表归并排序的空间复杂...

2019-03-22 23:30:01 123

原创 C++:函数的重载

函数的重载是函数的一种特殊情况,c++允许在同一作用域中声明几个功能类似的同名函数,这些同命函数的形参列表(参数个数,类型,顺序)有一不同即可,常用来处理实现功能类似数据包类型不同的问题;When two or more different declarations are specified for a single name in the same scope, that name...

2019-03-22 18:16:46 223

原创 AL:排序基本概念/七大排序算法详解

排序基本概念/七大排序算法详解文章目录排序基本概念/七大排序算法详解稳定排序内部/外部排序七大排序算法插入排序(大概有序/规模较小)1.直接插入法2.希尔排序(缩小增量排序)选择排序3.单向/双向直接选择排序(使用顺序遍历查找)4.堆排序(使用二叉堆)交换排序5.冒泡排序6.快速排序(hoare/挖坑/前后指针法)7.归并排序递归算法非递归算法各排序时间复杂度对比分析:稳定排序在待排的记录...

2019-03-21 16:36:52 1924

原创 100.相同的树;101.对称二叉树;110.平衡二叉树;572.另一个数的子树

这里的四道题目都使用了递归的思想,从最底层开始判断相同的树给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入: 1        1        / &nbsp...

2019-03-21 00:00:11 116

原创 24.两两交换链表中的节点

两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.这笔者先使用的是前插后插法,即创建一个新链表,首节点指向head,将链表节点两两分组,每组第一个尾插入新链表,第二个插在尾节点的前面;这样遍...

2019-03-19 21:27:33 143

原创 2.两数相加

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4);输出:7 -> 0 -> ...

2019-03-18 23:23:02 75

原创 236.二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 ...

2019-03-18 23:10:29 109

原创 解决"E45:'readonly' option is set"

今天修改一个文件,兴致冲冲搞了十来分钟遇到这个错误:竟然不能保存,这才发现我是普通用户进入的,没有修改挂载在我当前用户空间之外的文件的权限(我要改的这个是在&quot;/&quot;上),使用&quot;su root&quot;以管理员身份修改即可,或者也可以退出当前用户再以root用户进入;...

2019-03-17 22:37:21 10421

原创 解决"Error detected while processing /root/.vimrc:"

因为Linux的自带vim看起代码相当反人类,所以今天搞了一套C++的IDE,顿时舒服多了,但在root下vim 有的文件时,就会报错:Error detected while processing /root/.vimrc:line 5:E492: Not an editor command: Plug 'Valloric/YouCompleteMe'line 6:E492...

2019-03-17 22:27:27 21101 4

原创 DS:树-二叉树-二叉堆(详解+实例)

文章目录树定义(孩子兄弟表示法)二叉树存储结构链式表示法遍历方式深度优先遍历前序遍历(进来)中序遍历(中间)后序遍历(出去)广度优先遍历层序遍历(使用链表)求二叉树中所有节点的个数求二叉树叶子节点个数求第k层节点个数在二叉树中查找一个值(递推思路)判断二叉树是否是完全二叉树(层序遍历)二叉树前序|中序|后序非递归写法(自行用栈实现)tips:顺序实现法(二叉堆)调整二叉堆小堆调整定义&amp;amp;amp;初始...

2019-03-17 20:41:34 523

原创 371.不使用运算符 + 和 - ​​​​​​​计算两整数 ​​​​​​​a b ​​​​​​​之和

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。示例 1:输入: a = 1, b = 2;输出: 3示例 2:输入: a = -2, b = 3;输出: 1这里因为是求和,我们将整个过程分为两步来看:按位相加,如果两者相同位置都为1,向前进位,第一步我们可以使a^b,使得相加但不显示进位:3^5就是0011^0101得到0110恰好...

2019-03-16 22:18:23 370

C++:类和对象思维导图

这是关于C++类和对象特性的思维导图,更加详细的解释请查看我的个人博客

2019-03-29

C语言思维导图

C语言思维导图,使用Xmind打开

2019-03-10

空空如也

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

TA关注的人

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