- 博客(83)
- 收藏
- 关注
原创 Linux系统编程之守护进程
守护进程简介及特点 守护进程又称精灵进程(DAEMON),是一类具有如下特点的进程。其生命周期很长,通常在系统启动的时候会创建并一直运行,当系统关闭时才终止,不随着用户登录、注销等改变其状态。 他是在后台运行且不拥有控制终端的进程。守护进程创建过程及原因 要把一个进程变成守护进程,要完成以下步骤:执行一个fork,然后父进程退出,子进程接着运行。这样做就是为了让子进...
2019-01-18 22:01:44
209
原创 C++——分配器allocator
Allocator简介 分配器(配置器,allocator)是STL中六大组件(容器、算法、迭代器、仿函数、适配器、分配器)之一,用于分配管理内存空间。其实我们可以把allocator看成一个简易的内存池,其主要适用于在使用容器时,对内存空间的动态分配,如果是我们平常要申请一块动态内存时,不推荐使用allocator,应该使用new-delete(malloc-free),主要原因是al...
2019-01-15 14:03:39
4669
1
原创 Git简介与使用
Git简介 Git是一个开源的分布式版本控制系统。SVN是一个集中式版本控制系统,程序的版本都是集中放在中央服务器,用户可以从上push和pull,最大的问题就是需要联网才能使用,速度较慢,效率较低,而且中央服务器一旦出现问题,将会造成很大的影响。Git是分布式的版本控制系统,每个人的电脑上都有完整的版本库,安全性能较高,分支管理较为方便。详细可见git教程。Git常用指令git...
2019-01-07 23:26:33
202
原创 Effective C++读书笔记
本篇记录一下首次研读Effective C++的知识点和自己的理解,会分条款逐一阐述。条款01:视C++为一个语言联邦 C++有四个次语言,次语言之间相互协调,当你在编写程序的时候,最有可能运用到的就是次语言之间的相互转换,所以可以分开来学习,熟悉了每一块之后再联合起来使用。C:C++任然是以C为基础,区块、语句、预处理器、内置数据类型、数组、指针等都是延续C的传统。 面向对象...
2019-01-06 12:05:32
194
原创 剑指offer——删除链表中的节点
题目1:在O(1)内删除链表节点。给定单向链表的头指针和一个节点的指针,在规定时间复杂度内删除该节点解题思路:首先在时间复杂度O(1)就不可能从头遍历链表查找节点。我们把下一个要删除节点的下一个节点的值赋值给指定的节点,然后删除下一个节点即可,再改变一下next指针的指向即可。具体代码如下:#include <iostream>using namespace std;...
2019-01-04 11:30:44
341
原创 Linux系统编程之线程
线程概述 线程是允许应用程序并发执行多个任务的一种机制,一个进程中可包含多个线程。同一程序中的所有线程都会执行相同的程序,共享一份全局内存区域,其中包括代码段、初始化数据段、未初始化数据段、以及堆内存段、栈及文件描述符。 多线程可以弥补多进程的缺陷:进程之间信息难以共享,而线程则可以方便快速共享信息,只需将数据复制到共享变量中即可 调用fork()创建进程代价较高,创建线...
2019-01-03 19:19:59
269
原创 Linux系统编程之进程
进程的创建 系统调用fork()可以从一个父进程中创建一个子进程,子进程的资源同父进程几乎一样:子进程获取父进程的栈、数据段、堆和代码段(执行文本段)的拷贝。执行fork()之后,每个进程都可以修改自己栈数据、堆中的变量且并不会影响另一个进程。执行fork()时,子进程会获得父进程所有的文件描述符副本,类似于dup(),意味着父进程和子进程对应的文件描述符指向同一个打开文件句柄(共享当前...
2018-12-31 18:32:31
255
原创 剑指offer——打印从1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。解题思路:首先要想到这是一道大数题,用字符串存储每一位数字,然后要想到利用每一位的全排列来递归求解。从最后一位开始。若n=2,则字符串大小为3,str[2]='\0',分别从01,02,03 ...,99。所以利用递归每次index=3时,就可以打印。打印的时候要注意把字符串前面的0去掉。#include <stdio.h&g...
2018-12-30 22:37:16
165
原创 Linux信号(一)
信号的概述 信号是事件发生时对进程的通知机制,也成为软件中断,是进程之间通信的方式之一。信号分为两大类,一组用于内核向进程通知事件,构成所谓的传统或标准信号;另一组由实时信号构成。 信号因某些事件而产生,信号产生后,会于稍后传递给某个进程,进程即会采取相应的措施来相应信号。但是有时候需要保证一段代码不被传递来的信号所中断,即可以将信号添加到进程的信号掩码中(其作用就是阻塞该信号...
2018-12-29 16:17:48
960
1
原创 剑指offer——剪绳子
题目描述:有一个长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1且m>1)每段绳子的长度记为k[0]、k[1]...k[m-1],求每一段相乘最大为多少?解题思路:这道题目有两种思路。动态规划和贪心。贪心的策略:当绳子的长度大于或等于5时,我们尽可能多的剪成长度为3的绳子,当剩下的绳子为4时,将绳子剪成长度为2的绳子。#include <iostream>...
2018-12-27 20:27:07
727
原创 剑指offer——机器人运动范围
题目描述:地上有一个m行n列的方格,一个机器人从坐标(0,0)的格子开始移动,可以向左右上下四个方向,但是不能进入行坐标和列坐标的数位之和大于k的格子。请问机器人能够达到多少个格子?解题思路:这道题目也是一道典型的回溯法题目,可以用递归来写。写递归的思路都相似的,通过变化若干个参数调用自己所在的函数。重点在于递归出口的编写。因为本题要求满足条件格子的数量,如果某个格子不满足条件,则返回coun...
2018-12-26 19:27:04
222
原创 Linux目录与链接
目录 在文件系统中,目录与普通文件主要有两个区别。i节点条目中,会将目录标记为一种不同的文件类型。 目录是一种特殊的文件,本质上是一个表格,包含文件名和i节点编号。而文件的i节点中存储信息列表不包含文件名。 关于目录的系统调用有很多。#include <sys/stat.h>#include <unistd.h>#include <...
2018-12-26 15:58:38
960
原创 剑指offer——矩阵中的路径
题目描述:设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,分别向上下左右四个方向都可以移动。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。解题思路:这是一个回溯法的经典题,最常用就是递归来做。用递归解题的最主要问题就是要注意递归的边界条件。本题为目标字符串遍历完成,即可return。还有一点需要注意,就是题目中提及,矩阵中...
2018-12-25 20:28:00
159
原创 剑指offer——旋转数组的最小数字
题目描述:把一个数组最开始的若干个元素搬到数组的末尾,就称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如输入{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,输出最小值1。题目解析:本题如果直接遍历的话复杂度为O(n),如果采用二分查找的话复杂度为O(logn)。具体逻辑:选取中间元素,如果其大于等于第一个元素,说明其处于第一个递增阶段,最小值在其或者后...
2018-12-24 00:12:50
137
原创 Linux文件系统与文件属性
磁盘和分区 常规文件和目录通常存放在硬盘里。可将每块磁盘划分为一个或多个不重叠的分区,内核将每个分区视为位于/dev路径下单独设备。 磁盘分区主要是以下三种之一:文件系统、数据区域(可做裸设备对其访问)、交换区域(供虚拟内存使用)。文件系统 文件系统是对常规文件和目录的组织集合。在文件系统中,用来分配空间的基本单位是逻辑块,即文件系统所在磁盘设备上若干连续的物理块...
2018-12-23 20:15:04
760
原创 剑指offer——两个栈实现队列与两个队列实现栈
题目描述:两个栈实现队列解题思路:栈是“先进后出”,队列是“先进先出”。操作“入队列”:利用两个栈s1和s2,元素进的时候,放入s1即可。操作“出队列”:先检查s2是否为空,如果不为空,直接pop出s2的元素,如果为空,则把s1的元素都pop出来,然后依次放入s2中,再对s2进行pop即可。class Solution{public: void push(int node) ...
2018-12-21 21:33:16
142
原创 Linux进程与内存分配
进程 进程是由内核定义的抽象实体,该实体分配用以执行程序的各项系统资源,是拥有资源的基本单位。从内核的角度来看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含程序代码及代码所使用的变量(程序段和数据段),而内核数据结构则用于维护进程状态信息。 每个进程都有一个进程号,用以标识系统中的某个进程。Linux内核限制进程号小于等于32767,一旦进程号达到32767...
2018-12-21 17:43:50
2810
原创 剑指offer——二叉树的下一个节点
题目描述:给定一颗二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左右子树节点的指针,还有一个指向父节点的指针。解题思路:这道题目就是要理清二叉树的前、中、后序遍历,然后分情况理清楚下一个节点就行。要举一反三。如果这个节点有右子树,则下一个节点是右子树中最左子节点。 如果这个节点没有右子树,且节点是父节点的左子节点,则下一个节点是其父节点。 如果这...
2018-12-20 20:31:12
125
原创 剑指offer——重建二叉树
题目描述:输入二叉树的前序遍历和中序遍历结果,请重建二叉树。假设输入的前序遍历和中序遍历都不含重复的数字。解题思路:首先要了解二叉树的前序遍历和中序遍历分别是是怎样的规则,了解之后就可以发现。前序遍历的首节点一定是根节点,然后再去中序遍历中查找根节点所在的位置,依此将其分为左右子树,然后分别遍历即可。注意递归边界条件,即为当发现数组中没有元素,则返回空子树。/** * Definiti...
2018-12-19 20:37:01
125
原创 基类析构函数与虚函数
基类析构函数为什么要声明为虚函数? 这个问题是C++理解虚函数和动态绑定的一个基础,也是面试常考的一个点。虽然几乎每本书中都会提及这个点,但是很少有把其具体阐明。本文通过具体实例+理论阐述尽量清晰解释这个问题。 首先看一下effective c++中是怎么描述的。 ----摘自《Effective C++》 C++中明白指出,当derived cla...
2018-12-18 16:55:58
882
原创 剑指offer——从尾到头打印链表
题目描述:输入一个链表的头节点,从尾到头反过来打印出每个节点的值。解题思路:这道题目是链表中的基础题,主要思路有两种第一种思路:可以利用栈的特性“后进先出”,将链表从头到尾遍历,然后将元素放到栈中,最后再取出。 第二种思路:可以利用递归的思想,在链表遍历的时候,对于每个节点而言:如果next指针不为空,则先遍历next指向的链表,回退时在打印本节点的值。/*** struct L...
2018-12-17 19:00:04
126
原创 剑指offer——替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20",例如输入“We are happy” ,输出"We%20are%20happy"解题思路: 首先会想到从头到尾遍历一遍string,只要遇到空格就插入"%20",但是发现在数组中执行插入非常难实现,同时也有较高的复杂度。接下来就会想到是否能够直接定位出每个新元素的位置呢?答案是可以的,但是需要知道每个元素之前有多少个空格,因...
2018-12-17 18:17:30
139
原创 剑指offer——二维数组中的查找
题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的二维数组和一个整数,判断数组中是否含有该整数。解题思路:首先选取数组右上角的数字,如果该数字等于要查找的数字,则查找过程结束,如果该数字大于要查找的数字,则说明该数字所在的列都不会有目标数字,所以去掉该列,如果该数字小于要查找的数字,则说明该行都不会存在目标数字,所以去...
2018-12-16 19:12:42
120
原创 剑指offer——数组中重复的数字
题目一:在一个长度为n的数组中,所有的数字都在0~n-1的范围里,数组中的某些数字是重复的,但不知道有几个数字重复了,请求出数组中任意一个重复的数字。解题思路:首先想到的肯定是排序,然后再次遍历来查看有无重复,这样的时间复杂度至少为O(nlogn) 然后第二种想到的方法就是hash表,或者利用unordered_set,因为其内部实现也是利用hash表。具体过程就是遍历数组中的每一个元...
2018-12-15 20:58:02
193
原创 Linux系统编程基础知识
本篇主要介绍了Linux系统编程的基础概念,为后续深入打好基础,还有助于回顾操作系统的知识。内核 通常来说,操作系统的内核是整个os的核心所在,是指管理和分配计算机资源(CPU、RAM和设备)的核心软件层。 内核的主要任务:进程调度:Linux属于抢占式多任务操作系统,多任务是指多个进程可以同时驻留在内存中,而且每个进程都可以获得CPU的使用权,抢占式是指运用进程调度算...
2018-12-15 17:09:36
468
原创 IP协议详述
本文将从两个方面对IP协议进行详解:IP头部信息,IP数据报的路由和转发。IP基础知识 IP协议是TCP/IP协议栈网络层的协议,它主要是为上层提供无状态、无连接、不可靠的服务。无状态是指IP通信双方不同同步传输数据的状态信息,所有的IP数据报的发送、传输和接受都是独立的,这种服务的最大缺点是无法处理乱序和重复的IP数据报,所以每当接收端接收到完整的IP数据报,只能把其将数据部分...
2018-12-10 21:49:41
375
原创 TCP协议详述
TCP协议是面向连接的传输层协议。其相对于UDP而言,主要有三个特征:面向连接、可靠传输、面向字节流。面向连接。TCP协议规定双方通信之前需建立可靠的连接(三次握手),通信结束后需断开连接(四次分手)。由此可见,TCP协议也是一种一对一的通信协议,即不支持广播和多播。 可靠传输。TCP协议规定发送端发送的每个报文段都要得到接收端的回复(ACK),除此之外,TCP还有超时重传,定时器等...
2018-12-06 22:47:56
386
原创 Linux文件IO
本文章中提到的文件IO都是不带缓冲的IO,即每个read和write都调用内核中的一个系统调用。文件描述符 文件描述符是一个非负数,每当打开一个现有的文件或者创建一个新文件时,内核都向进程返回一个文件描述符。文件描述符用以表示所有类的已打开文件,包括管道(pipe)、FIFO、socket、终端设备和普通股文件。特殊:文件描述符0、1、2分别代表标准输入、标准输出、标准错误,把其换为...
2018-11-23 17:29:10
179
原创 C++侯捷面向对象高级编程笔记
P7 三大函数(big three):拷贝构造,拷贝赋值,析构函数设计一个拥有指针的类String。(1)拷贝构造函数如果没有显示的写出来,编译器会默认给一个。当我们设计的class带有指针,就不能用默认的拷贝构造函数,需要自己定义拷贝构造函数,拷贝赋值操作符,析构函数。(2)拷贝构造函数,首先也是一个构造函数,即函数名和类名相同,没有返回值,与普通的构造函数不同的是,实参为本类对象的...
2018-11-23 14:31:20
967
转载 grep与正则表达式
转自马哥linuxgrep是linux下强大的文本搜索工具。命令:grep [option] pattern [FILE]option: --corlor=auto 把匹配的文本着色 -v 显示不能够被pattern匹配到的行 -i 忽略字符大小写 -o 仅显示匹配到字符串本身 ...
2018-11-19 17:24:11
151
转载 linux目录介绍
转自 https://blog.csdn.net/m0_38044196/article/details/72844025/:根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。/bin,/usr/bin:该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要...
2018-11-14 21:09:59
168
原创 网络编程笔记——多进程服务器
多进程服务器端并发服务器实现模型和方法主要有三种:(1)多进程服务器端:通过创建多个进程提供服务(2)多路复用服务器:通过捆绑并统一管理IO对象提供服务(3)多线程服务器:通过生成与客户端等量的线程提供服务用sigaction信号处理技术消灭僵尸进程。(这里不详述)多进程服务器端实现echo服务器。每当客户端请求服务时,回声服务器就创建子进程以提供服务。步骤如下:(...
2018-11-08 10:36:23
231
转载 网络编程笔记——套接字可选项
转自 https://blog.csdn.net/wangdd_199326/article/details/76595293套接字可选项套接字具体多种特性,可通过可选项更改。1 套接字可选项和I/O缓冲大小SOL_LOCKET层是套接字相关的通用可选项IPPROTO_IP层可选项是IP协议相关事项IPPROTO_TCP层可选项是TCP协议相关事项可选项的读取和设置通过如下两个函数完...
2018-11-08 10:03:44
139
原创 网络编程笔记——UDP
TCP原理首先,TCP套接字的数据收发无边界,意思就是即使调用1次write函数传输40字节数据,客户端也有可能通过4次read函数调用每次读取10字节。实际上,数据在网络中存在输入缓冲和输出缓冲,调用write函数时,数据将移动到输出缓冲,在适当的时候传向对方的输入缓冲,然后对方将调用read函数从输入缓冲中读取数据。IO缓冲特性:(1)IO缓冲在每个TCP套接字中单独存在(2)IO...
2018-11-07 11:43:12
207
原创 C++ Primer 记录(二)
第三章 字符串、向量和数组这一章主要介绍了string、vector、迭代器和数组,也是较为基础的一章,但是在刷算法题目的时候经常可以用到一些里面的操作,所以一些基本的知识需要熟练运用。(1)标准库类型string表示可变长的字符序列,其初始化的方式有很多种,主要是直接初始化和拷贝初始化。值得一提的是,其可以通过getline(is,s) 从输入流对象is中读取一行赋给s,并返回s,可以保...
2018-11-03 22:48:55
165
原创 网络编程基础知识
网络编程就是编写程序使两台连网的计算机相互交换数据。而socket就是连接两台计算机的纽带,首先了解一些socket相关函数。SOCKET 创建套接字所用的socket函数#include <sys/socket.h>int socket (int domain,int type,int protocol);成功时候返回socket文...
2018-10-16 18:49:18
410
原创 C++ Primer 记录(一)
这是一本C++的圣经,以前上课的时候没有好好学,现在趁着这个机会好好回顾一下,同时着重掌握C++11的特性,里面很多知识点都是面试必考,应该反复多读理解并记好笔记。第一章 开始这一章比较基础,编者以一个书店程序的例子作为引入,本章着重记录一下几个之前没有注意到的细节。(1)大多数系统中,在主函数main中的返回值被用来指示状态,返回值0表明成功,非0返回值的含义由系统定义,通常用来指出...
2018-10-12 16:35:26
179
转载 vector初始化方式
转自:https://blog.csdn.net/yjunyu/article/details/77728410?locationNum=10&fps=1vector的几种初始化及赋值方式:(1)不带参数的构造函数初始化//初始化一个size为0的vectorvector<int> abc;(2)带参数的构造函数初始化//初始化size,但每个元素值为...
2018-10-04 22:29:04
163
原创 最大子数组和(一维和二维)
经典算法题。【一维数组】一个有N个整数元素的一维数组,最大连续的子数组和是多少?大致思路如下:首先定义一个变量存储以某个元素结尾的最大数组和。再定义一个变量存储全局的最大子数组和。然后初始化,遍历整个数组,找出对应的值比较即可。#include<stdio.h>int max(int a,int b){ if(a<b) return b; ...
2018-10-01 12:10:16
397
原创 结束与开始
【结束】2018.9.28,终于结束了保研过程。是一次非常值得怀念的时光。一路走来并不顺畅。最后还有一些小波浪,不过还是磕磕绊绊的去了华科大计算机,也算是给自己这几个月画上一个句号。保研其实就是一个多重选择的过程,很多的选择都是由个性所决定的。我自己其实不是一个很有野心的人,比较安逸,这是一个优点,同时也是缺点,当有很多的机会摆在眼前时,我不想触碰,也不敢触碰,我也许会选择忽视,到后面...
2018-09-28 20:55:56
432
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅