- 博客(62)
- 资源 (7)
- 收藏
- 关注
转载 Sqlite3之C++开发常用API总结
Sqlite3之C++开发常用API总结使用流程sqlite3_open()Sqlite3_prepare()sqlite3_bind()_*()sqlite3_step()sqlite3_column()sqlite3_exec()sqlite3_finalizesqlite3_close性能优化Sqlite3之C++开发常用API总结注:此篇博客摘抄总结于几个博客,尽可能全面地讲解C++开发过程中涉及的API相关的知识。使用流程要使用sqlite,需要从sqli..
2020-09-03 11:30:29
2295
1
原创 SAE J1708协议
SAE J1708协议1.协议简介1708是SAE(Society of Automotive Engineers:美国机动车工程师学会)专门针对重型车辆(卡车和客车)起草文件中J标准规范之一,该协议旨在推广微控制器模块之间的通信标准规范。SAE J1708协议仅详细描述了OSI(Open System Interconnection:开放式系统互联)七层模型中的物理层和数据链路层。所以在进行通信时,常常需要与描述应用层的SAE J1587协议一起使用。图1-OSI模型 ...
2020-08-31 11:04:50
2601
2
转载 SQLite 基础
SQLiteSQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎,其源代码不受版权限制。SQLite是一个进程内的库,但不是一个独立的进程,可以按应用程序的需求进行静态或动态连接,SQLite直接访问其存储文件。为什么使用SQLite?不需要一个单独的服务器进程或操作的系统(无服务器的)。SQLite 不需要配置,这意味着不需要安装或管理。一...
2019-08-03 15:30:31
715
转载 操作系统 死锁定义及避免死锁
什么是死锁以及避免死锁死锁定义线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。当线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。当然死锁...
2019-07-03 11:49:14
1383
转载 计算机网络 基于TCP的Socket连接断开判断
最近在做一个服务器端程序,C/S结构。功能方面比较简单就是client端与server端建立连接,然后发送消息给server。我在server端会使用专门的线程处理一条socket连接。这就涉及到一个问题,如果socket连接断开(异常,正常)后,我如何才能感知到?server端这边是绝对被动的,sever端不能主动断开连接。也没有连接链路维持包之类的。client端发送数据的时间也是不定的。在s...
2019-07-03 10:54:15
1055
转载 计算机网络 Socket基础
一、I/O 模型阻塞式 I/O非阻塞式 I/OI/O 复用信号驱动 I/O异步 I/O五大 I/O 模型比较二、I/O 复用selectpoll比较epoll工作模式应用场景一、I/O 模型一个输入操作通常包括两个阶段:等待数据准备好从内核向进程复制数据对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它...
2019-07-03 02:53:52
176
转载 计算机网络 TCP与UDP的区别
TCP与UDP区别总结TCP面向连接(如打电话要先拨号建立连接); UDP是无连接的,即发送数据之前不需要建立连接。TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达; UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和、重传控制、序号标识、滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。UDP具有较好的实时性...
2019-07-03 02:25:17
195
转载 Linux IO模型介绍以及同步异步阻塞非阻塞的区别
同步异步,阻塞非阻塞的区别同步、异步同步:用户进程发起IO后,进行就绪判断,轮询内核状态。异步:用户进程发起IO后,可以做其他事情,等待内核通知。阻塞、非阻塞阻塞:用户进程访问数据时,如果未完成IO,调用的进程一直处于等待状态,直到IO操作完成。非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成,此时进程可以操作其他事情。IO模型Linux下的五种I/O模型阻塞I/O...
2019-07-03 02:17:41
755
转载 Linux select、poll、epoll区别
(1)select==>时间复杂度O(n)select的作用是仅仅知道有I/O事件发生,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它...
2019-07-03 02:16:49
358
原创 通过子网掩码判断两个IP地址是否在同一子网中
IP地址分为两部分,网络部分和主机部分,子网掩码就是用来给你指明哪些是网络部分,哪些是主机部分,如果网络部分相同,那主机就在同一网络里。一个IPv4地址,由32位二进制数构成,为方便记忆,每8个一组转化十进制,就是我们常见的ip地址。子网掩码就是说在这个32位的ip地址中,用前面多少位代表子网标识,剩下的作为主机表示。子网表示用1表示。比如常见的255.255.255.0其实就是下面的二进制:...
2019-07-03 00:50:58
15473
原创 网络编程(待补充)
网络编程的三要素1)IP地址:网络中每一台计算机的唯一标识,通过IP地址找到指定的计算机。2)端口:用于标识进程的逻辑地址,通过端口找到指定进程。3)协议:定义通信规则,符合协议则可以通信,不符合不能通信。...
2019-07-03 00:39:47
141
2
转载 Linux 基础
一、常用操作以及概念快捷键求助关机PATHsudo包管理工具发行版VIM 三个模式GNU开源协议二、磁盘磁盘接口磁盘的文件名三、分区分区表开机检测程序四、文件系统分区与文件系统组成文件读取磁盘碎片blockinode目录日志挂载目录配置五、文件文件属性文件与目录的基本操作修改权限文件默认权限目录的权限...
2019-07-03 00:08:50
203
转载 C++ STL中的RB-tree
RB-tree概述红黑树是平衡二叉搜索树的一种,其通过特定的操作来保持二叉查找树的平衡。二叉搜索树是指一个空树或者具有以下性质的二叉树:任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。红黑树与AVL树的比较:AVL树的时间复杂度虽然优...
2019-07-02 18:07:22
869
转载 C++ STL中的Hashmap
为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典…这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是取得所有的记录,然后...
2019-07-02 17:15:28
13886
3
原创 C++ STL常用容器
C++的STL中,有哪几种容器?容器在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。序列容器(7个)vectorvector是一段连续的内存地址,基于数组实现,其提供了自动内存管理功能(采用了STL普遍的内存管理器allocator),可以动态改变对象长度,提供随机访问。在尾部添加和删除元素的时间是常数的,但在头部或中间就是线性时间。在ve...
2019-07-02 15:11:04
8593
3
转载 C++ Lambda表达式
lambda表达式的完整声明如下:[capture list](params list) mutable exception -> return type{function body} //capture list : 捕获列表 //[var]:以值的形式捕获,[&]:引用方式捕获,[=]:值捕获//params list : 参数列表//mutable : 捕获列表可以...
2019-07-02 09:09:01
254
转载 C++ 经典面试题之简单Sring类
C++类中有一个BigThree的概念。也就是构造函数,拷贝构造函数,赋值函数。String类原型如下面代码所示:class String{public:String(const char *str == NULL); //普通的构造函数String(const String &other); //拷贝构造函数String operate=(const String &...
2019-07-01 23:11:12
257
原创 C++ 经典面试题之标准库函数strcpy
标准库中strcpy的函数原型为:char *strcpy(char *strDest, char *strSrc);不能调用C/C++的字符串处理函数下的实现方法:#include<iostream>#include<assert.h> //调用assert函数using namespace std;//使用标准命名空间char* strcpy(char *...
2019-06-21 23:55:02
404
转载 C++智能指针
智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。理解智能指针需要从下面三个层次:从较浅的层面看...
2019-06-21 17:59:13
917
转载 C++ 强制转换的四种cast操作符
C风格(C-style)强制转型如下:(T) expression 或 T(expression) //函数风格(Function-style)两种形式之间没有本质上的不同。ANSI-C++标准定义的四个cast操作符对于转换简单类型而言C风格转型工作得很好。然而,这样的转换符也能不分皂白地应用于类和类的指针。ANSI-C++标准定义了四个新的转换符:reinterpret_cast, ...
2019-06-21 14:24:32
530
转载 C++ 模版的全特化和偏特化
模板为什么要特化,因为编译器认为,对于特定的类型,如果你能对某一功能更好的实现,那么就该听你的。模板分为类模板与函数模板,特化分为全特化与偏特化。全特化就是限定死模板实现的具体类型,偏特化就是如果这个模板有多个类型,那么只限定其中的一部分。template<typename T1, typename T2> //模板类class Test{public: Test(T...
2019-06-21 13:38:16
374
转载 C++ 多态中的动态绑定和静态绑定
动态绑定和静态绑定静态绑定和动态绑定是C++多态性的一种特性。对象的静态类型和动态类型对象的静态类型:对象在声明是采用的类型,在编译期确定;对象的动态类型:当前对象所指的类型,在运行期决定,对象的动态类型可以更改,但静态类型无法更改。class B{}; class C: public B{}; class D: public B{}; D* pD = new D();...
2019-06-21 12:40:05
333
原创 C++ 基础
C++与C的区别面向对象的特点程序的内存分配符号常量误区函数重载函数模板函数参数默认值变量的引用作用域运算符字符串变量内存操作类封装与信息隐蔽类的数据与函数、对象与指针类的公用数据的保护类对象的赋值和复制,静态数据成员与函数,类的友元和模版提前声明类类的模版运算符重载继承与派生公用继承私有继承保护成员和保护继承派生类的构造函数虚基类多态性和...
2019-06-21 11:57:15
226
原创 new和malloc的区别
new和malloc的区别自身属性new/delete是C++关键字,需要编译器支持,因此属于操作符。malloc/free是库函数,需要头文件支持,因此属于标准库函数。内存区域new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存空间。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内...
2019-06-19 19:54:08
186
转载 C++ 指针和引用
常见的野指针问题指针变量没有被初始化。任何指针变量在刚被创建的时候不会自动成为NULL指针,它的缺省值是随机的。所以指针变量在创建的时候,要么设置为NULL,要么指向合法的内存。指针p被free/delete之后,没有被置为NULL(最好加一句p = NULL;)。他们只是把指针指向的内存给释放掉,并没有把指针自身内容释放。指针操作超越了变量的作用范围。不要返回指向栈内存的指针或引用,因为...
2019-06-19 19:18:12
163
转载 C++ 继承中重载、重写、重定义的区别
重载overload:是函数名相同,参数列表不同 重载只是在类的内部存在。但是不能靠返回类型来判断。重写override:也叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实现不同,主要是在继承关系中实现的。重写需要注意:(1)被重写的函数不能是static的且必须是virtual的。(2)重写函数必须有相同的类型,名称和参数列表。(3)重写函数的访问修饰符可...
2019-06-19 18:45:46
485
1
原创 C++ 多态与虚函数、与构造函数和析构函数的联系
多态与虚函数面向对象编程中,多态的含义是“一个接口,多种实现”。多态分为静态多态和动态多态。静态多态是通过模板化和重载技术来实现,在编译的时候确定。动态多态通过虚函数和继承关系来实现,执行动态绑定,在运行的时候确定。C++中运行时的多态是指根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数。C++多态性是通过虚函数来实现的,虚...
2019-06-19 17:18:24
910
转载 C++ #define、const和static
#define和const的区别两者区别(1)作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在编译、运行阶段起作用。(2)作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。(3)存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中...
2019-06-19 14:36:34
571
转载 C++ 类成员初始化表
类成员初始化可以在构造函数当中实现,也可以在构造函数的初始化列表当中实现。但高手则一般选择后者,是什么原因呢?// 构造函数当中的实现CMyObject :: CMyObject (int id, string name){ m_id = id; m_name = name;} // 初始化列表中的实现CMyObject :: CMyObject(int id, st...
2019-06-19 14:13:15
334
转载 C++ 深拷贝与浅拷贝
深拷贝与浅拷贝简单的来说,浅拷贝是增加了一个指针,指向原来已经存在的内存。而深拷贝是增加了一个指针,并新开辟了一块空间让指针指向这块新开辟的空间。浅拷贝在多个对象指向一块空间的时候,释放一个空间会导致其他对象所使用的空间也被释放了,再次释放便会出现错误。浅拷贝为了形象化说明什么是深拷贝和浅拷贝,我们就先写一个String类(包含构造函数、拷贝构造函数、赋值运算符重载、析构函数和输出操作符"...
2019-06-19 14:07:11
371
转载 C++字符串和字符数组
在C++中,有两种类型的字符串表示形式:C-风格字符串C++引入的string类C-风格字符串C 风格的字符串起源于C语言,并在C++中继续得到支持。字符串实际上是使用null字符‘\0’终止的一维字符数组。下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。char greeting[6] = ...
2019-06-19 11:45:46
1660
转载 C++ sizeof用法总结
定义sizeof是一个操作符(operator)。其作用是返回一个对象(包括变量和表达式,将转换为对相应类型)或类型所占的内存字节数。注意sizeof是右结合操作符,在编译时计算。语法sizeof有三种语法形式:sizeof (type_name); //sizeof (类型)sizeof (object); //sizeof (对象)sizeof object; ...
2019-06-18 00:15:14
1836
转载 C++ 常用设计模式
工厂模式策略模式适配器模式单例模式原型模式模板模式建造者模式外观模式组合模式代理模式享元模式桥接模式装饰模式备忘录模式中介者模式职责链模式观察者模式工厂模式工厂模式:简单工厂模式、工厂方法模式、抽象工厂模式1)、简单工厂模式:主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。typedef enum{ T8...
2019-06-17 20:51:46
7614
3
转载 正则表达式
一、概述二、匹配单个字符三、匹配一组字符四、使用元字符五、重复匹配六、位置匹配七、使用子表达式八、回溯引用九、前后查找十、嵌入条件一、概述正则表达式用于文本内容的查找和替换。正则表达式内置于其它语言或者软件产品中,它本身不是一种语言或者软件。正则表达式在线工具二、匹配单个字符. 可以用来匹配任何的单个字符,但是在绝大多数实现里面,不能匹配换行符;. 是元...
2019-06-17 19:23:41
240
转载 面向对象思想
一、面向对象的三大特性封装继承多态二、类图泛化关系 (Generalization)实现关系 (Realization)聚合关系 (Aggregation)组合关系 (Composition)关联关系 (Association)依赖关系 (Dependency)三、设计原则S.O.L.I.D1. 单一责任原则2. 开放封闭原则3. 里氏替换原则4...
2019-06-17 18:53:35
134
转载 代码可读性
一、可读性的重要性二、用名字表达代码含义三、名字不能带来歧义四、良好的代码风格五、为何编写注释六、如何编写注释七、提高控制流的可读性八、拆分长表达式九、变量与可读性十、抽取函数十一、一次只做一件事十二、用自然语言表述代码十三、减少代码量参考资料一、可读性的重要性编程有很大一部分时间是在阅读代码,不仅要阅读自己的代码,而且要阅读别人的代码。因此,可读性良好的代码...
2019-06-17 17:33:24
178
转载 Linux下C程序执行的全过程
在Linux使用gcc来编译C语言程序,编译过程一般可以细分为四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking)1.在预处理阶段“gcc -E test.c -o test.i”,其中参数E告诉gcc命令值经行编译,不做其他的处理,用参数o指明输出的文件名为test.i。命令运行完毕后就会产生一个名为test...
2019-06-17 17:00:24
1080
原创 Unity 简单实现资源管理类加载AssetBundle
基于Unity用C#语言编写一个资源管理类,要求如下:使用协程加载加载AssetBundle,支持优先级队列,尽量考虑加载新能。设置打包编辑器:#if UNITY_EDITORusing UnityEngine;using UnityEditor;using System.Collections;using System.IO;public class AssetBundle{...
2019-06-09 22:02:06
498
原创 Unity UGUI、模型与特效的叠层实现
Unity中UGUI、模型与特效的叠层实现影响层次的因素Camera组件,分为场景和UI。Canvas组件,分层次,一般为Scene,Main,UI,Activity,Top。Camera的Depth属性。Canvas的Sorting Layer属性。Canvas的Order in Layer属性。ReaderQueue属性,Shader中的tags属性,属于Material的属性...
2019-06-08 23:17:40
2959
原创 Unity AssetBundle
#AssetBundle作用原理把资源导出成一种叫做AssetBundle的文件,然后打包后可以在Unity程序运行的时候再加载回来用。AssetBundle是采取某一种压缩方式压缩成的资源文件。节省存储空间,控制游戏包的大小,实现游戏的热更新。AssetBundle文件分类AssetBundle文件可以分为两类:序列化文件(serialized file)和资源文件(resource ...
2019-06-08 18:12:49
3298
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人