- 博客(131)
- 收藏
- 关注
转载 鸟哥的Linux私房菜——基础学习篇(第三版) (1-5章)
整颗磁盘的第一个扇区特别重要,它记录了两个重要的信息:(1) MBR (master boot record) 主要启动记录区: 可以安装开机管理程序的地方, 有446bytes(2) 分区表 (partition table): 记录整个磁盘的分区状态, 有64bytesMBR非常重要, 系统在开机的时候要主动读取这个分区的内容, 这样才知道如何引导开机。
2023-04-24 14:50:30
1355
原创 《UNIX网络编程卷1:套接字联网API》第一章:简介和TCP/IP
第1章 简介1.1 概述要编写通过计算机网络通信的程序,首先要确定这些程序相互通信所用的协议(protocol)。在深入设计一个协议的细节之前,应该从高层次决断通信由哪个程序发起以及响应在何时产生。举例来说,一般认为Web服务器程序是一个长时间运行的程序(即所谓的守护程序,daemon),它只在响应来自网络的请求时才发送网络消息。协议的另一端是Web客户程序,如某种浏览器,与服务器进程的通信总是由客户进程发起。大多数网络应用就是按照划分成客户(client)和服务器(server)①来组织的。
2023-04-23 15:37:14
197
转载 《C++编程调试秘笈》
在编写C++代码时,我们不应该自己捕捉缺陷,而是由编译器和可执行代码为我们做这些事情,该书便提供了这样的一个思考。作者以“调试器友好”的方式编写了一些方便安全检查时所需的宏代码并针对C++代码中最为常见的各种错误制定了一些规则,并用代码实现,使之很容易在运行时捕捉,或者尽可能地在编译时就捕捉缺陷。
2023-04-19 16:17:38
208
原创 剑指offer:关于二叉树的汇总(c++)
1、重建二叉树:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2、树的子结构:输入两棵二叉树A和B,判断B是不是A的子结构。如图:A中有一部分子树的结构和B是一样的,因此B是A的子结构...
2023-04-11 09:36:27
525
2
原创 Effective C++
1. 视C++为一个语言联邦2. 尽量使用const、enum、inline替换#define3.尽可能使用const4. 确定对象被使用前已先被初始化4.1 成员对象初始化4.2 如何保证定义于不同的编译单元内的对象先被初始化5. 了解C++默默编写并调用那些函数6. 若不想使用编译器自动生成的函数,就改明确拒绝7. 多态基类声明virtual析构函数8. 别让异常逃离析构函数9. 绝不在构造析构过程中调用virtual函数10. operator=返回reference to *this。
2023-03-31 11:04:56
334
原创 《剑指offer》:线性表经典题目分析
1、逆置单链表typedef struct LinkNode{ int val; LinkNode*next;};//单链表逆置void Reverse(ListNode* pHead){ if(pHead == NULL || pHead->next == NULL) { return; } LinkNode*Recv = NULL; ...
2020-02-12 00:59:14
316
原创 《剑指0ffer》:栈与队列经典题目分析
1.实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值)的时间复杂度为O(1)主要思路:1)建立两个栈_data与_mindata,其中_data作为数据栈,存放每一个入栈的数据;_mindata作为数据最小栈,存放数据栈中当前最小的数据;2)当元素data入栈时,将data入栈到_data数据栈中,并让data与_data的栈顶元素做比较,如果x小于等于_da...
2020-02-09 23:38:50
254
原创 c++设计模式:状态模式
在软件开发过程中,应用程序中的有些对象可能会根据不同的情况做出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。当有状态的对象与外部事件产生互动时,其内部状态会发生改变,从而使得其行为也随之发生改变。如人的情绪有高兴的时候和伤心的时候,不同的情绪有不同的行为,当然外界也会影响其情绪变化。状态模式的定义与特点:状态(State)模式的定义:对有状...
2020-02-09 18:50:38
282
原创 c++设计模式:命令模式
前期提醒:在软件开发系统中,常常出现“方法的请求者”与“方法的实现者”之间存在紧密的耦合关系。这不利于软件功能的扩展与维护。例如,想对行为进行“撤销、重做、记录”等处理都很不方便,因此“如何将方法的请求者与方法的实现者解耦?”变得很重要,命令模式能很好地解决这个问题。在现实生活中,这样的例子也很多,例如,电视机遥控器(命令发送者)通过按钮(具体命令)来遥控电视机(命令接收者),还有计算机键盘...
2020-02-09 18:29:38
319
原创 c++设计模式:建造者模式
在软件开发过程中有时需要创建一个复杂的对象,这个复杂对象通常由多个子部件按一定的步骤组合而成。例如,计算机是由 OPU、主板、内存、硬盘、显卡、机箱、显示器、键盘、鼠标等部件组装而成的,采购员不可能自己去组装计算机,而是将计算机的配置要求告诉计算机销售公司,计算机销售公司安排技术人员去组装计算机,然后再交给要买计算机的采购员。生活中这样的例子很多,如游戏中的不同角色,其性别、个性、能力、脸型、体...
2020-02-08 14:50:28
218
原创 c++设计模式:策略模式
在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。在软件开发中也常常遇到类似的情况,当实现某一个功能存在多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如数据排序策略有冒泡排序、选择排序、插入排序、二叉树排序等。如果使用多重条件转移语句实现(...
2020-02-08 14:13:34
260
转载 c++设计模式:代理模式
前期知识:代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。代理模式概述代理模式是一种应用很广泛的结构...
2020-02-08 01:09:47
306
原创 c++设计模式:适配器模式
前期讲解:在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本...
2020-02-07 00:13:21
456
原创 c++设计模式:Observer 观察者模式
前期讲解:观察者模式是使用频率最高的设计模式之一,它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而且这些观察者之间可以没有任何相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。观察者模式的定义&特点:观察者模...
2020-02-06 22:15:02
252
转载 c++设计模式:Factory 工厂模式详解(简单工厂、工厂方法、抽象工厂)
1.简单工厂模式模式的结构与实现该模式中包含的角色及其职责如下:工厂角色:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。抽象产品角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。具体产品角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。缺点:对修改不...
2020-02-06 14:12:28
485
原创 c++06:函数
1.函数基础通过调用运算符来执行函数。调用运算符是一对括号,是一个用逗号隔开的实参列表,用实参来初始化函数的形参,调用类型与函数类型一样。2.函数调用1.用实参初始化函数的形参2.将控制权转移给被调用函数3.局部对象1.局部变量:形参和函数体内部定义的变量2.函数体外被定义的对象存在于程序的整个执行过程中3.自动对象:只在块执行期间的对象,当块执行结束后,块中的自动对象变成未定...
2020-01-30 13:12:35
165
原创 c++:智能指针shared_ptr
先前的文章我们讲过了智能指针的概念等一系列问题,下面我们直接来看智能指针1.带有引用计数的智能指针 (Shared_ptr)同时也是强智能指针所谓的引用计数,就是有多少个智能指针对象管理这个堆内存。引用计数的作用是做所有对象共享的。不可以写为普通的成员变量,要写成静态的成员变量我们用一个引用计数管理器来实现Shared_ptr智能指针:设计思路:将引用计数管理器设计...
2020-01-30 13:10:02
302
原创 liunx:复习大纲(进程管理与调度)
八.进程管理与调度https://blog.csdn.net/Jochebed666/article/details/830492991)io密集型和处理器密集型进程根据任务所需要的cpu和io资源的量可以分为:CPU密集型任务: 主要是执行计算任务,响应时间很快,cpu一直在运行,这种任务cpu的利用率很高 IO密集型任务:主要是进行IO操作,执行IO操作的时间较长,这是cp...
2020-01-19 19:03:35
225
原创 liunx:复习大纲(内核同步&磁盘调度&服务器端编程技术和框架&源码分析)
九.内核同步的概念及内核同步的方法https://blog.csdn.net/miao_9/article/details/53055739十.磁盘io调用程序使用的调度方法https://www.cnblogs.com/kongzhongqijing/articles/5786002.html十一.liunx服务器端编程技术和框架1)分布式与集群的区别https://ww...
2020-01-18 22:35:17
184
原创 linux:复习大纲(内存)
七.关于内存部分扩展探讨1.逻辑地址 线性地址(虚拟地址)物理地址逻辑地址(Logical Address) 是指由程式产生的和段相关的偏移地址部分。例如,你在进行C语言指针编程中,能读取指针变量本身值(&操作),实际上这个值就是逻辑地址,他是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu...
2020-01-18 22:33:05
182
原创 liunx:复习大纲(网络)
五.网络1.网络基本概念ip地址:IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据报传输服务。端口号...
2020-01-18 14:55:53
260
原创 linux:复习大纲(进程间的通信)
Linux平台应用开发--进程间通方式1.管道:1)有名管道与无名管道的区别:有名管道:任何进程之间无名管道:父子进程之间写入管道数据在内存存放 管道是一种半双工通信方式 内核实现方式关于管道更多请看我之前的博客:https://blog.csdn.net/Kobe51920/article/details/1032293202.信号量:1)信号量的概念...
2020-01-18 14:43:32
292
转载 linux:19网络socket
1、网络中进程之间如何通信? 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 2、什么是Socket?socket一词的起源在组网领域的首次使用是在1970年2月12日发布的文献IETF RFC33中发现的,撰写者...
2020-01-18 14:39:45
337
原创 linux:复习大纲(线程)
该文章仅作为自己复习使用,因该文章内容太多借鉴他人博客内容,实在不知道写成翻译还是装载好,所以就写成了原创,实在不知道怎么回事!!!Linux平台应用开发--线程1.线程概念:线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务2....
2020-01-16 22:23:41
261
原创 liunx:复习大纲(进程)
该文章作为复习使用,其中有部分就直接使用了自己之前的博客或者他人博客,但都会表明来自何方!!!二.Linux平台应用开发基础--进程1.程序编译连接过程,及各阶段所完成的功能预编译主要是做一些代码文本的替换工作。(该替换是一个递归逐层展开的过程。)(1)将所有的#define删除,并展开所有的宏定义(2)处理所有的条件预编译指令,如:#if #ifdef #elif #el...
2020-01-16 17:12:02
353
原创 c++:智能指针(unique_ptr)
unique_ptr介绍:unique_ptr是一种定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权unique是独特的、唯一的意思,故名思议,unique_ptr可以“独占”地拥有它所指向的对象,它提供一种严格意义上的所有权。这一点和我们前面介绍的shared_ptr类型指针有很大的不同:shared_ptr允许多个指针指向同一对象,而u...
2020-01-15 22:11:19
328
原创 c++:智能指针(weak_ptr)
1.weak_ptr到底是什么?简单的说就是weak_ptr是shared_ptr的一个助手,是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是将一个weak_ptr绑定到一个shared_ptr不会改变shared_ptr的引用计数。不论是否有weak_ptr指向,一旦最后一个指向对象的shared_ptr被销毁,...
2020-01-15 19:46:45
294
转载 linux:复习大纲(命令)
转载地址:https://www.runoob.com/cprogramming/c-function-qsort.html一.命令的种类有很多种,这就介绍其中的一两种,之后会介绍更多1).文件操作命令touch:修改-a:改变档案的读取时间-m:改变档案的修改时间.......实例使用指令"touch"修改文件"testfile"的时间属性为当前系统时间,输入如下命...
2020-01-15 15:35:19
1066
原创 算法:分治策略经典题目
改文章仅供自己作为学习资料!!!1.二分搜索技术问题描述:大部分程序员应该都知道二分搜索的大致原理,这里不再赘述。需要说明的是二分搜索是所有以比较为基础的搜索算法时间复杂度最低的算法。用二叉树描速二分查找算法,最坏情况下与二叉树的最高阶相同。比较二叉树线性查找也可用二叉树表示,最坏情况下比较次数为数组元素数量。任何一种以比较为基础的搜索算法,其最坏情况所用时间不可能低于O(logn)...
2020-01-14 16:55:26
1627
原创 算法:动态规划经典题目(10)
这些问题都是从别人博客里复制过来的,仅供自己学习的资料,都已经表明出处,看见大佬写的文章这样好 我就直接发链接!!!(仅供自己学习的资料)。1.矩阵连乘问题问题描述】给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是...
2020-01-14 16:36:59
1151
转载 c++:class与struct的区别
c++中的struct是对c语言中的struct进行的扩充c++中的struct可实现以下功能:能继承 能多态 能包含成员函数class与struct的区别如下:默认的继承访问权限。struct是public的,class是private的。struct A{char a;};struct B : A{...
2020-01-10 21:00:01
170
原创 算法:动态规划
动态规划的概念:是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题...
2020-01-10 17:43:02
204
原创 c++:Lambda表达式(匿名函数)详解
使用STL时,往往会大量用到函数对象,为此要编写很多函数对象类。有的函数对象类只用来定义了一个对象,而且这个对象也只使用了一次,编写这样的函数对象类就有点浪费。而且,定义函数对象类的地方和使用函数对象的地方可能相隔较远,看到函数对象,想要查看其 operator() 成员函数到底是做什么的也会比较麻烦。对于只使用一次的函数对象类,能否直接在使用它的地方定义呢?Lambda 表达式能够解决这个...
2020-01-09 15:24:08
434
原创 c++: auto和decltype关键字
可以用 auto 关键字定义变量,编译器会自动判断变量的类型。例如:auto i =100; // i 是 int auto p = new A(); // p 是 A* auto k = 34343LL; // k 是 long long有时,变量的类型名特别长,使用 auto 就会很方便。例如:map <string, int, greater <string...
2020-01-09 14:33:47
160
原创 c++:右值引用
能出现在赋值号左边的表达式称为“左值”,不能出现在赋值号左边的表达式称为“右值”。一般来说,左值是可以取地址的,右值则不可以。非 const 的变量都是左值。函数调用的返回值若不是引用,则该函数调用就是右值。前面所学的“引用”都是引用变量的,而变量是左值,因此它们都是“左值引用”。C++11 新增了一种引用,可以引用右值,因而称为“右值引用”。无名的临时变量不能出现在赋值号左边,因而是右值。右值...
2020-01-09 14:24:13
216
原创 c++:强制类型转换运算符(static_cast、reinterpret_cast、const_cast和dynamic_cast)
C++中四种类型转换是:static_cast, dynamic_cast, const_cast, reinterpret_cast强制类型转换是有一定风险的,有的转换并不一定安全,如把整型数值转换成指针,把基类指针转换成派生类指针,把一种函数指针转换成另一种函数指针,把常量指针转换成非常量指针等。C++ 引入新的强制类型转换机制,主要是为了克服C语言强制类型转换的以下三个缺点。1) 没有从...
2020-01-09 14:05:25
260
原创 c++:继承(4)虚继承&虚基类
1.虚基类:虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在派生类中存在多份拷贝。这将存在两个问题:浪费存储空间 存在二义性问题。通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚基类使得从多个类(它们的基类相同)派生出的对象...
2020-01-09 13:23:05
479
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人