网易笔试问答:智能指针与inline关键字 这次是第一次笔试,被深深打击了,特将问答题重新整理一番,与诸君共勉;inline函数;特点,优缺点,在编译期间如何处理特点:inline是一种以空间换时间的做法,省去调用函数的额外开销,所以代码很长或者有递归循环的函数不适合使用inline对于编译器使用只是一个建议,编译器会自动优化,如果定义位inline的函数体内有函数/递归,就不会被调用inline修饰的函数不能让定义和声明分离,...
C++:智能指针 智能指针为什么需要有智能指针?智能指针是一种预防型的内存泄漏的解决方案。智能指针在C++没有垃圾回收器环境下,保证在任何情况下资源都能够进行合理的释放,而不用在所有可能退出的地方都进行是否释放的检测,避免由此引发的资源泄露问题;原理RAII:利用对象的生命周期来控制程序资源;将资源使用类的方式进行封装:在对象构造时获取资源,在析构函数中清理资源不需要显式释放资源;采用这种方式对象...
C++:继承概念基础 概念及定义继承对象是面向对象程序设计时代码可复用的重要手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,以此产生的新类叫作派生/子类,继承体现了面向对象程序设计的层析结构,是类设计层次的复用继承的方式共有三种继承的方式会决定基类成员在子类中的访问方式继承方式/类成员基类的public成员基类的protected成员基类的private成员public...
从零开始搭建Linux共享服务器(云享系统) 从零开始搭建Linux共享服务器(云享系统)是男人就下100层,是汉子就来搭个服务器吧ヾ(◍°∇°◍)ノ゙主要思路所谓共享服务器,就是支持多人文件共享的HTTP服务器,功能十分简单,但我们关注的是如何尝试构建较高性能服务器、开放出用于扩展功能的接口、并且高效的管理文件数据;所以我们需要经过建立TCP服务端、将到来的客户端连接添加到线程池中、线程获取任务后解析请求报文、根据处理结果调用响应模块...
Linux:TCP协议详解 TCP协议详解TCP协议是TCP/IP协议族里的另一个极为重要的协议,按照TCP/IP五层模型来划分,IP协议层位于传输层,基于它实现的广泛应用的应用层协议有http/ftp等;位于该层的还有UDP协议,关于它们的区别与联系,我们会在后文进行详细的讲解;TCP协议特点面向字节流,面向连接,可靠传输,一对一连接,无法像UDP一样广播多播;面向连接的具体表现为,使用TCP协议进行通信,双方...
Linux:两道题检测对fork的了解 Linux下,当需要创建进程时,我们最常使用的就是fork()函数,但你真的了解它吗?简略复习我们先来复习一下fork的运行规则:功能:以父进程为模板,创建子进程会把父进程的PCB拷贝一份,部分会修改,成为子进程的PCB会把父进程的虚拟地址空间拷贝一份,作为子进程的地址空间。写时拷贝,父子进程公用一份代码(代码段只读就不改了),各有一份数据(极端情况下代码段也会发生拷贝)由...
Linux:信号处理机制 什么是信号?信号是软件中断,信号通知进程发生了某个事件,打断进程当前正在进行的操作,去处理这个信号(应对对应的事件),这种机制为正在运行进程提供了一种处理异步事件的方法,而异步的执行方式因为不需要等待事件的完成再去执行接下来的操作,极大地提升了程序的执行效率;信号种类既然信号有那么多产生的场景,那么也就需要不同种类的信号来对事件类型加以区分,在CentOS上,我们可以使用kill -l...
C/C++:static与extern C语言中static:修饰局部变量:局部变量原本存放于栈区,但经过static修饰后就被存放在静态区,这延长局部变量的生命周期至程序结束,但作用域仍限于语句块内修饰全局变量:原本全局变量/函数是全局作用域的,但经过static修饰后便无法被同一工程的其他源文件所使用,作用域限于本文件内修饰函数:与修饰全局变量相同,作用域缩小至本文件;extern:修饰函数/变量:声明在该工程中的...
Linux:IPC之共享内存 什么是共享内存?共享内存即指在Linux下,两个或多个进程所共享的一块在内存映射段(共享区) 上开辟好的物理内存空间,将这块物理内存空间映射到这些进程的虚拟地址空间中进行访问,当一个进程写入数据时,其他进程就可以读取这些数据,这就实现了进程间的通信,并且因为是直接读取共享内存中的数据,较其他方式省去了用户态与内核态的数据拷贝过程,所以这种方式的速度是最快的在Linux中,我们可以通过 “ip...
Linux:静态库&动态库 什么是库?从本质上来说,库(library)就是一段被编译好的二进制可执行代码,的当一个程序引用了该库头文件后,库在链接后就会为程序提供服务为什么要使用库呢?在开发过程中,任何一个需求的实现都需要依赖许多的功能协作,这些函数又依赖着更基础的函数,如果每个人都从头写起,那将是巨大的工作量,所以人们将一些公用/大量复用的函数写成函数库,这些函数往往都是简洁/高效/稳定且受到大量检验的的代码...
C++:青蛙的地下迷宫 今天看到了一个很有意思的题目:小青蛙有一天不小心落入了一个地下迷宫,小青蛙希望用自己仅剩的体力值P跳出这个地下迷宫。为了让问题简单,假设这是一个n*m的格子迷宫,迷宫每个位置为0或者1,0代表这个位置有障碍物,小青蛙达到不了这个位置;1代表小青蛙可以达到的位置。小青蛙初始在(0,0)位置,地下迷宫的出口在(0,m-1)(保证这两个位置都是1,并且保证一定有起点到终点可达的路径),小青蛙在迷宫中...
Linux:EXT文件系统 总的来说,计算机的文件系统就是操作系统储存组织计算机数据的方法,使用户操作的是直观的文件和目录结构,而不需要访问晦涩离散的数据块,在Linux中,文件系统中的文件是数据的集合,这里不仅包含文件中的数据,还有文件,目录,软连接等一系列相关的信息;文件系统就是对磁盘中的文件数据进行管理...
Linux:IPC之管道 文章目录管道匿名管道模拟实现以下操作:ls | grep make命名管道模拟实现传输一串字符到另一进程中管道读写特性总结在这里,我们第一次提到了IPC(Inter-process communication)即进程间通信,我们变来简单说说IPC以及它的使用意义:在操作系统中,进程间通信主要是为了应对以下场景而产生的:数据传输:一个进程需要将他的数据发送给另一个进程数据共享:一份数据有...
Linux:如何实现Shell解释器? 熟悉Linux的小伙伴们都知道,shell作是用户使用系统的桥梁,那么今天我们便来看看shell是如何实现的;shell是一种命令解释器,也是用户操作接口,Linux用户通过我们通过输入一系列的指令,被shell解释后调用需要的系统接口,从而操纵系统内核,完成期望的动作所以,任何一个shell都必须要具备以下几点:抓取分析信息:能够读入用户操作的命令,并将其解析为我们需要的参数创建进程...
Linux:彩色进度条 搞一个连续进度条循环打印递增#(第一次1个,第二次2个…)作为进度条的元素,但注意每次打印完后以/r结尾,这样会覆盖该行的文本从开头重新打印,然后用**fflush(stdout);**手动清理缓冲区让它显示出来,如果你用了/n的话,虽然不需要手动清理缓冲区了,但你看到的可就是个直角三角形了=_=打印七彩效果printf支持改变打印内容的颜色,和其背景颜色,其格式为:printf("\...
Linux:认识进程 说到进程,我们首先要来认识一下冯诺依曼体系结构它也被称为现代计算机硬件体系结构,包括:输入设备:如键盘/鼠标输出设备:如显示器/打印机存储器:如内存-外存运算器/控制器:这两个功能都由CPU来实现。举一个生活中常见的情形:如果你要用电脑通过qq给小明发消息,那麽你一定要先将这条信息通过键盘输入进你的电脑,存储进内存后,CPU取出这条信息,通过网卡等设备将它输送到小明的电脑,他的电脑也...
C++:模板 文章目录函数模板格式函数模板的实例化函数模板匹配原则类模板格式了解STL库泛型编程:编写与类型无关的通用代码,是服用代码的一种手段,模板是泛型编程的基础函数模板函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定版本。格式template<typename T1,typename T2,…typename Tn>返回值类型 函...
C++:单例模式-饿汉/懒汉 单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中只有一个实例,并提供一个访问它的安全局访问点,该实例被所有程序模块共享。用于管理服务器配置;构造函数私有化/防拷贝构造函数私有化/与防拷贝是实现懒汉饿汉的必要手段,如果你已经了然于心,请直接跳到下一部分:**构造函数私有化:**将类的构造函数私有,拷贝构造声明私有。防止别人拷贝在栈上生成对象。**防拷贝:**考虑也得...
AL:小Q的巧克力 小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力二分法:这里的思路就是假设一个小Q第一天吃糖的数量,然后使用Sum函数判断是否符合题目要求且是可以吃的最大数量,小Q第一天吃糖的数量在1~N-1之间,为了提高效率,我们使用二分法逼近那个最优值,这里注意,因为题...