开发背景客户端开发虽然涉及数据库的场景不是很多,但是一般使用sqlite3建立保存本地数据库进行一些内部数据存储。
在开发代码中,往往会进行一些连表查询,通过sqlite3进行查询时,写出的SQL语句非常不美观并且出错的概率非常大。因此学习并实现一个SQL语句工具,可以优雅的添加SQL语句。
简单了解SQL语句SQL语句一般分为三类:
DDL类:数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML类:数据操作语言(SELECT,DELETE,UPDATE,INSERT)
DCL类:数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
网上也有分成四类,将查询单独作为一个类——DQL类,数据查询语言。
相对于客户端本地或者开发者工具使用来说,主要使用DML进行数据库的操作。本工具主要围绕CREATE、DROP、SELECT、DELETE、UPDATE、INSERT几个SQL语言关键字使用。
表级操作表级操作是指对整个表进行操作的数据库操作。这些操作通常会影响到表的结构或内容,而不是单个行或列。表级操作可以包括创建、修改或删除表,以及对表的索引 ...
智能指针是C++11标准在RAII思想下引入智能指针库,其中包括 std::shared_ptr、std::unique_ptr 和 std::weak_ptr。现代C++编程中经常使用智能指针,而且在当前程序员人才过剩时代,面试手撕成了常态。
智能指针C++程序设计中使用堆内存是非常频繁的操作,在工作开发业务逻辑模块时,经常会出现使用多个对象进行数据传输。而堆内存的申请和释放都由程序员自身控制,一不留神可能会导致内存泄漏,后期排查起来要了命。
C++里面的四个智能指针: auto_ptr、unique_ptr、shared_ptr、 weak_ptr 其中后三个是C++11支持, 并且第一个已经被C++11弃用。
auto_ptrC98就诞生的智能指针,不过存在缺陷。
主要问题包括:
auto_ptr 在拷贝构造和赋值操作中会转移所有权,容易导致潜在的内存泄漏问题。
auto_ptr 无法与标准库容器等进行良好的配合,因为它不符合标准库容器对于元素拷贝和赋值的要求。
12345678910111213141516171819202122232425262728293031#inc ...
单例模式作为一种设计模式,是每个程序员的必修模式。作为以前的八股代表——更多的是在面试的时候询问懒汉模式与饿汉模式的区别。但当前随着整体互联网大环境不好,手撕单例模式成为了一个常态的面试问题,可以更加灵活的考察。
什么是单例模式?单例模式是创建型设计模式,为了确保类在程序运行过程中只有一个实例,并只提供一个全局访问点,如:GetInstance()。
如果在业务场景中,实例被共享使用,但全局只需一份的情况下,可以考虑单例模式。
懒汉模式
实例延迟加载:被使用时才进行初始化。
线程不安全:过去的懒汉写法,在进行判空时,如果发生中断的情况下, 可能会导致创建多个实例。
实现方式:简单
123456789101112131415161718192021222324252627class LazySingleton {private: // 声明静态实例指针 static LazySingleton* instance; // 私有构造函数,防止外部直接实例化 LazySingleton() { std::cout << "LazySingleto ...
爱乐之城于2017.2.14中国大陆第一次上映,彼时奥斯卡给了它14项提名,最终斩获了6项奥斯卡大奖。虽然最后最佳电影非常”滑稽”般给了月光男孩。也许这就像电影结局一样,相视一笑,心中都已经明白。
和在《超凡蜘蛛侠2》中让大家意难平的”格温”一样,石头姐(艾玛·斯通)成功的将米娅这一角色映入观众心中,片中最后教科书级别的个人秀震撼全场,最终拿下当年影后。
高司令(瑞恩·高斯林)一双忧郁眼睛和帅气面貌,虽然当年影帝没竞争过《海边的曼彻斯特》的阿弗莱克,并且那一年还有加菲的《血战钢锯岭》,没得奖但是含金量是足够的。后来高司令出演《银翼杀手2049》直接为我打开了赛博朋克的新大门。
那年冬天看完之后,默默的在心里将其划为我自己的最佳影片。顺便一提,个人排第二的是《白日梦想家》。今年12.22重映,下班就冲过去了。
感觉慢慢能体会到一些电影中人们说起老电影,老音乐,重复观看多遍的心情。我也好像给自己设定了一个for循环一样。四月总要看一遍《四月是你的谎言》,十二月也要看一遍《爱乐之城》,去一个陌生城市必须坐公交靠窗边看路边变换的景象。就像重映我能记起将要发生的每一个片段,心情也提前变换。
回 ...
前言之所以重温IO多路复用,是RTSP服务器实现想放在Linux下实现,而那么网络编程不可避免的要接触。而且Windows下只有select可以直接使用,想使用poll和epoll只能用第三方库或者一些功能相似的I/O多路复用,但是性能相较于Linux下有着差距。
在回忆I/O多路复用之前,先看看一般场景下如何实现服务端与客户端的连接。
服务端与客户端的一般连接方式这里我们用幽默的说法来对连接方式做一个区分。用斗破苍穹的等级来划分(都学习网络编程了,咋说C++也是有点水平了,起码也是斗王阶级了):
斗王:能建立一个普通的一对一连接方式。
斗皇:在借用线程的情况下,能实现一对多的的连接方式。
斗宗:熟练使用select建立连接,极大的提高CPU利用率。
斗尊:熟练使用select和poll建立连接。因为二者没有什么太大的区别,只是在不同的情况下选择不同。
斗圣:select/poll/epoll各种技巧与原理不在话下,写个Demo信手拈来。
斗帝:恐怖如斯,桀桀桀桀桀桀桀~
服务端建立连接无非就是socket、bind、listen、accept、send、recv一般连接方式就是网络编 ...
本文继续学习并记录音视频相关基础知识
参考链接是B站UP北小菜,学习音视频讲解非常细致,对入门音视频和有编程基础的同学非常有用。
【音视频开发】《从零开始编写一个RTSP服务器》
《从零开始编写一个RTSP服务器》系列视频教程源码
音频原始数据PCMPCM数据也被称之为脉冲编码调制数据,也指的是音频未经过压缩的原始数据。它是由模拟信号通过采样、编码、量化等步骤转换成标准的数字信号。
PCM数据的存储方式如果是单声道音频文件,采样数据按照时间的先后顺序依次存入。如果是双声道则按照LRLRLR(左右左右声道)的方式存储。存储方式与大小端有关,大端存储方式如下(网络搜索图):
PCM数据采样的相关知识点一段10分钟大小的PCM数据,采样率48000、采样深度8bit、采样2通道。那它的大小计算
123448000*8*2*10*60/8/1024/1024 = 54MBtips:计算每秒采样的大小总的Bit数(48000*8*2*10*60),在将其转换为MB其中单位路径为Bit->byte->KB->MB
采样率声音每秒中采样点的个数,比如44100HZ表示每秒有441 ...
最近打算开始学习音视频相关知识,本篇博客做一些相关知识的总结。
参考链接是B站UP北小菜,学习音视频讲解非常细致,对入门音视频和有编程基础的同学非常有用。
【音视频开发】《从零开始编写一个RTSP服务器》
《从零开始编写一个RTSP服务器》系列视频教程源码
RTSP协议定义RTSP是实时传输协议,并且是一个在应用层的协议。通常在项目沟通交流的RTSP协议包括了:RTSP、RTP、RTCP。几个协议简要概括如下:
RTSP协议负责服务端和客户端之间的请求和响应
RTP协议负责服务端和客户端传输媒体数据
RTCP协议负责提供有关RTP传输质量的反馈,确保传输的质量
三者的关系RTSP协议不会发送媒体数据,只是完成服务器和客户端之间的信令交互;RTP协议负责媒体数据传输,RTCP负责RTP数据包的监视和反馈。
RTP和RTCP并没有规定传输层的类型,可以选择UDP和TCP。RTSP的传输层要求是基于TCP。
RTSP协议常用的方法
DESCRIBE:响应必须包含描述资源的所有媒体初始化信息。
OPTIONS:查询该流媒体服务器有哪些方法可以使用。
SETUP:请求与服务端建立RTSP连接。
...