frankfan的胡思乱想

学海无涯,回头是岸

2021年12月28日

UDP编程实践与细节

摘要: 基于以下几点考虑,本文章并不会使用udp协议来实际工程编码实现聊天室。这几点分别是: udp实践IM(即时通讯)并不是科学合理的实践(学习udp-socket的用法无可厚非) udp通信的实践领域更多的是音视频通讯(传输)这种场景上(实时性高,但对消息完整性要求不高) 无论是从学习还是工作的角度,没 阅读全文

posted @ 2021-12-28 09:40 shadow_fan 阅读(157) 评论(0) 推荐(0)

TCP编程

摘要: tcp 面向连接 流 本文我们需要掌握的主要知识是『理解TCP是面向连接的协议』、『理解TCP是流式的』。 这两个知识点非常关键,只有掌握了这两个基本问题,才能进一步理解TCP协议的真正运作机制,以及网络编程中所遇到和需要解决的问题。 在接下来的章节中,我们需要在基于TCP协议的基础上掌握解决高性能 阅读全文

posted @ 2021-12-28 09:38 shadow_fan 阅读(82) 评论(0) 推荐(0)

NAT(NAPT)机制及应用

摘要: UDP/TCP的差异 TCP的模拟 模拟TCP的现实意义 本章内容分为三部分: NAT(NAPT)机制及应用 TCP协议的特性 使用UDP模拟TCP实现TCP协议中的主要特性 NAT(NATP) 我们已经学习过UDP与TCP协议(伯克利socket接口函数)的使用,无论是sendto还是send,我 阅读全文

posted @ 2021-12-28 09:36 shadow_fan 阅读(1617) 评论(0) 推荐(0)

TCP及其细节

摘要: 三次握手 四次挥手 ack 重传 拥塞控制 滑动窗口 接受/发送窗口 这里我们讨论的主题是TCP协议及其细节。 『TCP是面向链接的字节流协议』关于TCP的定性我们已经烂熟于胸了。 对TCP最重要也是最直观的认识是『可靠传输』。意思是对于用户来说只有2种情况: 告诉用户这条链接断了,传输失败(rea 阅读全文

posted @ 2021-12-28 09:35 shadow_fan 阅读(100) 评论(0) 推荐(0)

基本的网络IO模型

摘要: 线程池 IO模型 IOCP UDP TCP的理论 Socket的基本实践 用户态缓冲区的操作 完整的使用socket接口来跨进程数据传输 这是我们网络编程这一阶段的主要路径。核心是围绕『跨进程』的数据传输。 随着课程的推进,我们逐渐面临一些新的场景,使得我们学习的通用知识似乎无法很好的处理这些场景。 阅读全文

posted @ 2021-12-28 09:33 shadow_fan 阅读(67) 评论(0) 推荐(0)

多路复用

摘要: 多路复用select的细节 IOCP 高并发服务器常用架构 上一章节我们讨论了线程池、IO模型这两个经典话题。这对于构建高性能高并发服务器是非常重要的一环,今天在这一章节中我们主要来聊聊通用的高并发服务器的架构应该是怎样的,以及IO多路复用的具体用法以及异步IO的Windows实现(IOCP) 因为 阅读全文

posted @ 2021-12-28 09:32 shadow_fan 阅读(175) 评论(0) 推荐(0)

引用与默认参数

摘要: const 引用 默认参数 const关键词,引用的使用以及函数的默认参数。 const C++中使用const来修饰变量,使其成为常量,所谓常量,就是只能在初始化时给定值,后续不支持再次修改其值。 要做到这个效果,除了在内存的语义上做限定使得内存的WRES中的只读属性设置为1外,const更多的是 阅读全文

posted @ 2021-12-28 09:28 shadow_fan 阅读(280) 评论(0) 推荐(0)

迭代器

摘要: 迭代器及其实现原理 『容器迭代器』以及迭代器的实现原理。 在详细讨论迭代器的实现细节时,我们需要事先搞清楚几个前置问题: 1、基于堆的数据结构怎么表述一个节点的位置信息? 2、常规的表达位置的方式有什么弊端? 3、为什么需要迭代器? 4、迭代器的是怎么设计的? 基于堆的数据结构节点都是分配在堆上的, 阅读全文

posted @ 2021-12-28 09:28 shadow_fan 阅读(57) 评论(0) 推荐(0)

函数重载与内联

摘要: 命名空间 函数重载 内联函数 本章讲授的主要 内容是命名空间、函数重载以及内联函数,这三个相对于C语言,都是C++独有的。并且都是为了解决C语言无法解决或者优雅解决的问题而存在的。 命名空间 C/C++是编译型语言,在编译后会将源码中定义的变量名或者函数名等变成唯一的符号名,这个符号是独一无二的,这 阅读全文

posted @ 2021-12-28 00:38 shadow_fan 阅读(91) 评论(0) 推荐(0)

结构体与类

摘要: 类 类与结构体 类与封装 本章讲授的主要内容是C++中的类的定义以及与结构体的对比。 C++是C语言的超集,是对C语言的完全兼容。 C语言是一门面向过程的语言,而C则是多范式语言,而面向对象是其基本范式。在C语言中,使用结构体来模拟面向对象编程的思想,因此在C中,对结构体struct这个关键字做了语 阅读全文

posted @ 2021-12-28 00:34 shadow_fan 阅读(112) 评论(0) 推荐(0)

析构函数

摘要: 构造函数/析构函数 this指针 new/delete 本章讲授的主要内容是C++类的构造,其中牵涉到的概念有类的构造函数与析构函数,this指针与new、delete关键字。 构造函数/析构函数 在所有面向对象的语言中,为了方便管理对象的生命周期,会在对象生成时与对象销毁时调用两个特殊的函数,构造 阅读全文

posted @ 2021-12-28 00:33 shadow_fan 阅读(192) 评论(0) 推荐(0)

拷贝构造的应用

摘要: 拷贝构造 自定义字符串类 拷贝构造 C++中创建对象的方式处理直接定义在栈中ClassType obj也可以定义在堆中ClassType *obj = new ClassType 而无论是哪种方式,都是通过默认构造函数(或者自定义构造函数)创建的。 此外,C还支持通过另一个C对象创建一个新的C++对 阅读全文

posted @ 2021-12-28 00:28 shadow_fan 阅读(61) 评论(0) 推荐(0)

成员

摘要: 常成员函数 初始化列表 静态成员 常成员函数 在C++中,被const关键词修饰的对象只能在初始化时赋值,此后不能被修改。并且,对象的成员也不能被修改; #include <iostream> using namespace std; class Node{ public: int value; } 阅读全文

posted @ 2021-12-28 00:27 shadow_fan 阅读(307) 评论(0) 推荐(0)

构造函数

摘要: 普通构造 拷贝构造 隐式构造 构造函数 无论是普通的默认构造还是自定义参数构造函数,或者拷贝构造函数,都可以认为是对象创建完成后提供给用户的一个hook point. 给用户一个初始化对象成员的一个入口点,通常默认情况下编译器并不会自动实现默认构造函数,除非有成员变量的访问或者赋值等相关操作,而一旦 阅读全文

posted @ 2021-12-28 00:27 shadow_fan 阅读(201) 评论(0) 推荐(0)

友元和引用

摘要: 友元 引用计数 C++提供完整的面向对象支持,提供体系完善的构造函数与析构函数,对成员也提供相应的访问权限关键字(protect public private)。 在面向对象中,总是倾向于将成员变量设计成private 将成员函数设计成public ,不过这样设计的一个缺点在于当类用在全局函数时,全 阅读全文

posted @ 2021-12-28 00:26 shadow_fan 阅读(99) 评论(0) 推荐(0)

继承

摘要: 继承 本章讲授的主要内容是C++中的继承 分别从应用场景、语法、内存结构等方面进行阐述。 继承是面向对象的三大特性之一(封装、继承、多态),继承更多的是先有其设计模式后有其语法支持,在设计模式的角度,与继承通常被一起讨论的是组合 。 C++中继承的场景 面向对象中封装的目的是提高代码的复用度,封装是 阅读全文

posted @ 2021-12-28 00:24 shadow_fan 阅读(56) 评论(0) 推荐(0)

c++面向对象基本

摘要: 默认构造 抽象类 多继承 本章讲授的主要内容依然围绕C++中的面向对象世界观的构建,其中牵涉到构造函数、抽象类与多重继承的概念。 默认构造 编译器生成的构造函数,被称为默认构造函数,该构造函数不带参数。 C++中类的构造分为不带参的构造函数与带参构造函数,带参构造函数需要用户自己定义并实现,而不带参 阅读全文

posted @ 2021-12-28 00:23 shadow_fan 阅读(36) 评论(0) 推荐(0)

多态

摘要: 多态 这是面向对象编程世界中的三大特性之一,各支持面向对象编程语言都对其有语法上的支持。 分别从多态的产生以及应用场景、多态效果的模拟、以及C++对多态机制的实现原理等进行阐述 多态的产生极其应用场景 在面向对象世界中,类,是基础单位,这本质上是在模拟现实世界中的构建规则。 在面向对象世界中有一个继 阅读全文

posted @ 2021-12-28 00:23 shadow_fan 阅读(47) 评论(0) 推荐(0)

C++类的各种内存结构

摘要: 名词阐释 C++类的各种内存结构 关于一些C++中基础名词概念的厘清,如函数重载 函数重写 函数覆盖(隐藏) 以及C++类的相关内存结构在不同条件下的异同。 函数重载 函数重载是C++一个显著区别与C的语言特性。 这一特性的显著表现就是支持定义同名函数,只要函数的参数列表不同(或者成员函数否被con 阅读全文

posted @ 2021-12-28 00:21 shadow_fan 阅读(825) 评论(0) 推荐(0)

运算符重载

摘要: 运算符重载 运算符重载的主要目的是为了更加简洁的书写代码,C语言语法繁复,形式复杂多样,从源码的角度上看异常复杂。C还支持模板编程,这样一来源码显得更加复杂了,因此,C++也支持将常见的运算符进行重载,简化形式。 并非所有运算符都支持重载,如点. 就不支持,此外还有其他,无需记住,编译器会提示。 运 阅读全文

posted @ 2021-12-28 00:20 shadow_fan 阅读(190) 评论(0) 推荐(0)

模板

摘要: 模板 函数模板 类模板 模板特例化 本章讲授的主要内容是『模板』,围绕模板进行展开。包含模板函数与模板类,此外还有模板的特例化。 模板编程是C++面向对象编程的特色之一,是代码复用的另一种手段,模板编程语法繁杂,通常只需要掌握常用的模板知识点即可。 模板的本质是将数据类型进行动态化,将函数以及类的生 阅读全文

posted @ 2021-12-28 00:17 shadow_fan 阅读(158) 评论(0) 推荐(0)

智能指针与文件流

摘要: 智能指针 C++文件流操作API 本章讲授的主要内容是智能指针的应用以及C++接口的文件操作。 因为C文件操作相关API难用,相交C接口以及windows本地平台接口并没有带来相对的优势,因此本笔记不会记录C文件操作的相关API 而C++中基本要杜绝『裸指针』的使用,推荐使用『智能指针』。 所谓智能 阅读全文

posted @ 2021-12-28 00:17 shadow_fan 阅读(164) 评论(0) 推荐(0)

异常

摘要: 异常 本章讲授的主要内容是『异常』。在软件开发中,异常的产生是不可避免的,不合法的内存地址值,不合法的运算值,错误的函数参数等都可能产生软件异常。 出现了异常最直接的表现为应用退出,这在某些场景下是可以接受的,因为这暴露了软件的bug,可以及时修复,而在某些场景是是不可被接受的,一些高稳定要求场景下 阅读全文

posted @ 2021-12-28 00:15 shadow_fan 阅读(42) 评论(0) 推荐(0)

参数与返回值以及新特性等

摘要: 引用当函数的参数与返回值 智能指针再论 C11的一些有用新特性 关于引用当函数的参数与返回值 引用本质就是指针,只不过是将指针削弱了而已。比如不能进行引用的加法运算以及定义时必须初始化等。 因此引用作为函数参数与指针作为函数参数并没有什么不同,只是C++只在定义引用时使用了特殊的&符号,右值与普通赋 阅读全文

posted @ 2021-12-28 00:13 shadow_fan 阅读(42) 评论(0) 推荐(0)

网络编程基础概念与UDP

摘要: 网络协议 TCP/IP协议栈 UDP socket 今天讲授的主要内容是网络编程的基础概念以及UDP发送数据的API基础用法。 (掌握网络编程的API使用并不复杂,甚至网络编程API后面的业务逻辑都比API本身复杂很多倍,窃以为,只有了解了网络编程中的一些核心概念与原理,才能远离API仔,才能知道接 阅读全文

posted @ 2021-12-28 00:12 shadow_fan 阅读(100) 评论(0) 推荐(0)

Java 3分钟入门

摘要: 面向对象 接口 多线程 流 容器.数据结构 泛型 本章节我们主要从Java入门到流畅使用Java,结合我们的C++知识,提纲掣领从「面向对象」这个基本概念出发,引出一系列Java的概念和使用方式。 面向对象-封装、继承、多态 面向对象的封装以「类」为实现手段,Java中的字段(Filed)和方法(F 阅读全文

posted @ 2021-12-28 00:10 shadow_fan 阅读(36) 评论(0) 推荐(0)

NDK

摘要: 编译链接与CMake & NDK中的静态库和动态库 ​ C/C++是编译链接型语言,程序(源码)写完后,需要将源码编译,然后链接,最终生成可执行文件。而脚本语言则在源码完成后直接交给解释器执行即可。因此我们说,C/C++是在工程实践中需要投入「额外」时间成本的,并且成本不低。并且要命的是很多时候这些 阅读全文

posted @ 2021-12-28 00:10 shadow_fan 阅读(91) 评论(0) 推荐(0)

Java反射与JNI

摘要: java从严格意义上而言是一门脚本语言,但得益于Java虚拟机(JVM)的日益发展,各种编译技术(如JIT等)的实践,让Java的【解释】执行性能大幅提升,不再是单纯的解释型语言,这一切的基石就是Java虚拟机。 在运行时,JVM提供一套机制,可以【动态】的获取和设置一个对象的Filed,可以【动态 阅读全文

posted @ 2021-12-28 00:08 shadow_fan 阅读(182) 评论(0) 推荐(0)

Java反射与动态代理

摘要: 在实际工作中,有一种常用的设计模式「代理模式」,用来减少对类封装的修改。在面向对象的设计中,一个基本原则是「尽可能少或者不的改动原有的封装设计,而是在其基础上扩展或修改功能」,要达成这样的目的,可以是通过类的继承来实现,不过大量的类继承会给项目维护带来灾难(也就是说我们不应该依赖大量的继承机制来实现 阅读全文

posted @ 2021-12-28 00:08 shadow_fan 阅读(498) 评论(0) 推荐(0)

Java注解

摘要: 本章我们讨论的话题是【注解annotion】 通俗理解,注解与注释没什么本质差别,都是【标注一段信息】然后【用来被解读】。 不同的是,注释是标注一段信息,然后供人(程序员)解读,起到说明某些代码的作用,这样的注释对代码或者 编译器没有约束或者额外的作用,全靠程序员的解读。 public class 阅读全文

posted @ 2021-12-28 00:06 shadow_fan 阅读(48) 评论(0) 推荐(0)

NDK-静态库与动态库的使用

摘要: 在之前章节中我们介绍了怎样通过CMake来构建静态库与动态库。 静态库与动态库的优缺点都是相对的,是不同应用场景下的不同选择,在同一标准下很难说出孰优孰劣。 在本节中我们会讨论静态库的使用,动态库的使用以及动态库生成中的一些细节(如函数的导出与隐藏、动态库加载与卸载的回调函数等) 静态库 可以认为静 阅读全文

posted @ 2021-12-28 00:05 shadow_fan 阅读(534) 评论(0) 推荐(0)

ARM的跳转及指令集切换

摘要: B BL BX BLX Thumb与ARM的切换 条件分支就是典型的跳转指令,这在编程中必不可少,arm有2种方式支持指令跳转 使用B系列指令(B有很多带后缀的其他指令) 直接修改pc的值 跳转指令 B B,就是最直接最基础的跳转,没有副作用 BL,将BL的下一条指令保存在lr寄存器中,然后跳转,这 阅读全文

posted @ 2021-12-28 00:02 shadow_fan 阅读(1935) 评论(0) 推荐(0)

ARM-模式与中断

摘要: arm的模式 arm的中断 cpu的工作就是执行给定的机器指令,也就是它从内存fetch指令后经过decode得到机器码后便开始执行,从这个角度上讲cpu是没有所谓用户或者系统等区别的,一视同仁,但显然这样的硬件设计并不灵活,这意味着“无论是谁”都有资格来操纵硬件,这并不科学也并不安全,这显然破坏了 阅读全文

posted @ 2021-12-28 00:00 shadow_fan 阅读(756) 评论(0) 推荐(0)

导航