美文网首页
后台开发:核心技术与应用实践

后台开发:核心技术与应用实践

作者: Howie_9891 | 来源:发表于2020-01-12 21:20 被阅读0次

    一.C++编程常用技术

    '#'include<>常用来包含系统提供的头文件

    '#'include"":先从当前目录进行查找,如果找不到那么就从标准头目录中进行查找

    2.形参和实参:

    形参只有被调用的时候才分配内存单元,在调用结束的时候立即释放内存单元

    3.函数模板

    在调用函数时,系统会根据实参的类型来取代模板中的虚拟类型,从而实现不同函数的功能

    4.引用时一种变量类型,用于为一个变量起一个别名。经过声明之后,两个都代表同一个变量。声明一个引用变量的时候,必须同时初始化。函数执行期间,不可以将其再作为其他变量的引用

    5.如果既要提高程序的引用,又要使得传递给函数的数据不在函数中被改变,应该使用引用

    6.共用体

    • 在一个共用体里面可以定义不同的数据类型,这些数据共享一段内存,在不同的时间里保存不同的数据类型和长度的变量,以达到节省空间的目的。可以使用union来判断系统的大小端。

    二.面向对象的C++

    1.成员函数

    私有的成员函数只能被本类中其他成员函数使用,而不能在类外被调用。成员函数中可以使用类中的任何成员,包括公用的和私有的

    2.类的封装性

    • 私有成员:只限于类成员访问
    • 公有成员:允许类成员和类外的任何访问
    • 受保护成员:允许类成员和派生类成员访问,不运行类外的任何访问

    3.构造函数

    • 构造函数不需要用户调用,而是在建立对象的时候自动执行的
    • 在C++中,一个类可以同时定义多个构造函数,以提供不同的初始化方法。这些构造函数的参数个数不同或参数的类型不同,即构造函数的重载

    4.析构函数

    • 在一个函数中定义了一个对象,当这个函数调用结束的时候,对象会被释放,而且在对象释放之前会自动执行析构函数
    • static局部对象只有在main函数结束或者调用exit函数结束程序的时候,才调用static局部对象的析构函数
    • 全局对象是在程序离开作用域的时候,才执行析构函数
    • 用new建立的对象,用delete释放对象的时候,会调用对象的析构函数

    析构函数的目的不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使得这些内存可以供新的对象使用

    5.类的静态数据成员拥有一块单独的存储区,而不管创建了多少个该类的对象。所有对象的静态数据成员都共享这一块静态存储空间,这就为对象提供了一种互相通信的方法

    6.静态成员函数和非静态成员函数的区别为:非静态成员函数有this指针,而静态成员函数没有this指针。

    7.纯虚函数:编译器要求在派生类中必须予以重载以实现多态性

    8.单例模式:

    定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法来获取单例

    9.封装,继承,多态

    三.常用STL的使用

    1.字符串

    • c_str()返回 一个以'\0'结尾的字符数组
    • 需要注意的是:C++字符串并不以'\0'结尾

    2.map的三种插入方式

    • 用insert函数插入pair数据
    • 用insert函数插入value_type数据
    • 用数组方式插入数据

    3.set

    • vector封装了数组,list封装了链表,map和set封装了二叉树
    • set为一个关联性容器,红黑树的统计性能要好于一般的平衡二叉树,所以被STL选择作为了关联容器的内部结构

    为什么map和set的插入删除效率比其他的要高?

    • 对于关联性容器来说,不需要做内存拷贝和内存移动
    • set内部所有的元素都是按照节点的方式来存储,节点结构和链表差不多

    四.编译

    1.步骤:

    • 预处理:预处理主要是处理那些源代码文件只能够以'#'开始的预编译指令
    • 编译:词法分析,语法分析,语义分析,优化,代码生成
    • 链接:将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确的衔接(静态链接[在编译时期完成对库函数的链接]&&动态链接[将对一些库函数的链接载入推迟到程序运行时期])
    • 装载

    2.ELF的文件类型

    • 可重定位的目标文件(.o文件)
    • 可执行的目标文件
    • 可被共享的目标文件(.so[动态链接库文件])

    readelf -h add.o显示add.o的ELF Header的文件头

    五.调试

    1.top命令:可以实时显示系统中各个进程的资源占用状况

    2.ps命令:列出当前在运行的进程的快照

    3.Linux程序内存空间布局

    • 代码段
    • 数据段
    • 未初始化数据段

    4.堆栈的区别

    • 栈是由系统自动分配;堆需要程序员自己申请,并指明大小(在C语言中使用malloc函数,在C++中使用new)。
    • 申请之后系统的相应不同:对于栈,只需要栈的剩余空间大于所申请的空间,系统就为他提供内存,苟泽就报错;堆中首先找记录空闲内存地址的链表
    • 栈是向低地址扩展的数据结构,是一块连续的内存的区域。如果申请的空间超过栈的剩余空间,将提示overflow;堆是向高地址扩展的数据结构,是不连续的内存区域。堆的大小受限于计算机系统中有效的虚拟内存,因此堆得空间比较灵活,也比较大
    • 堆是由系统自动分配,速度较快,但程序员是无法控制的;堆是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来方便
    • 栈快捷但是自由度小,堆比较麻烦,但是自由度大

    六.TCP协议

    见网络部分整理

    七.网络IO模型

    1.四种网络IO模型

    • 阻塞IO模型:(IO操作需要彻底完成之后才返回到用户空间)
    • 非阻塞IO模型:IO操作被调用之后立即返回给用户一个状态值,不需要等到IO操作彻底完成
    • 多路IO复用模型:有一个函数(例如select)会不断地轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程(select/epoll的优势并不是对于单个连接能够处理得更快,而是在于能够处理更多的连接)
    • 异步IO模型:两方互不等待,互不堵塞
    • select函数

    • poll函数:可用于执行多路复用IO

    • epoll函数:相对于select和poll而言,epoll更加灵活,没有描述符的限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中。

    八.网络分析工具

    1.常见命令

    • ping命令

    • tcpdump命令

    • netstat命令

    • lsof命令:列出当前系统打开文件的工具

    九.多线程

    见Mysql与Java 多线程部分的整理

    十.进程

    1.进程的创建:

    • 由操作系统创建
    • 由父进程创建

    2.fork()函数

    • 对于父进程,fork()函数返回新创建的子进程的ID
    • 对于子进程,fork()函数返回0
    • 如果创建出错,则fork()函数返回-1

    3.exit和return的区别

    • exit是一个函数,带有参数,exit执行完之后将控制权交给系统
    • return是函数执行完之后的返回,return执行完之后将控制权交给调用函数

    4.孤儿进程和僵尸进程

    • 孤儿进程是父进程已经退出,而子进程未退出
    • 僵尸进程是父进程未退出,而子进程已经退出

    5.守护进程

    如果不想让某个进程不因为用户或终端或其他的变化而受到影响,就必须把这个进程变为守护进程

    十一.进程间通信

    1.方式

    • 管道
    • 消息队列
    • 共享内存:一个缺点是没有提供同步的机制
    • 信号量
    • ipcs命令:用于报告系统的消息队列,信号量,共享内存等

    十二.HTTP协议

    1.返回码:

    • 1xx:指示信息,表示请求已经接收,继续处理
    • 2xx:成功,表示请求已经被成功的接收
    • 3xx:重定向,要完成请求必须进行更一步的操作
    • 4xx:客户端错误,请求有语法错误或请求无法实现
    • 5xx:服务器端错误,服务器没有能够实现合法的请求

    2.CGI:一个Web服务器提供信息服务的标准接口,通过CGI接口,Web服务器就可以获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端。

    十三.常用类库

    JSON-----

    相关文章

      网友评论

          本文标题:后台开发:核心技术与应用实践

          本文链接:https://www.haomeiwen.com/subject/cnuwactx.html