<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Innovator_cjx的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Innovator_cjx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Innovator_cjx]]></copyright><item><title><![CDATA[音视频编解码--Opus系列一]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/139925365</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/139925365</guid><author>Innovator_cjx</author><pubDate>Wed, 26 Jun 2024 09:33:00 +0800</pubDate><description><![CDATA[Opus 是一个完全开源，免费的，通用性高的音频解码器。Opus 在网络上有着无与伦比的交互式语音和音乐传播功能，但也可以用来存储，在流媒体上使用。Opus 遵从 Internet Engineering Task Force (IETF)RFC 6716标准，整合了 Skype’s SILK 解码和 Xiph.Org’s CELT 解码的技术。]]></description><category></category></item><item><title><![CDATA[计算机网络高频面试题]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/125018550</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/125018550</guid><author>Innovator_cjx</author><pubDate>Sat, 28 May 2022 16:10:35 +0800</pubDate><description><![CDATA[转载自牛客网@紫霞子
网络分层结构
计算机网络体系大致分为三种，OSI七层模型、TCP/IP四层模型和五层模型。一般面试的时候考察比较多的是五层模型。

TCP/IP五层模型：应用层、传输层、网络层、数据链路层、物理层。

应用层：为应用程序提供交互服务。在互联网中的应用层协议很多，如域名系统DNS、HTTP协议、SMTP协议等。
传输层：负责向两台主机进程之间的通信提供数据传输服务。传输层的协议主要有传输控制协议TCP和用户数据协议UDP。
网络层：选择合适的路由和交换结点，确保数据及时传送。主要包括IP]]></description><category></category></item><item><title><![CDATA[如何在TypeScript中更改只读属性？]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/123976877</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/123976877</guid><author>Innovator_cjx</author><pubDate>Tue, 05 Apr 2022 20:55:14 +0800</pubDate><description><![CDATA[如何在TypeScript中更改只读属性？]]></description><category></category></item><item><title><![CDATA[异步编程: 一次性搞懂 Promise, async, await (#js #javascript)]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/123970293</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/123970293</guid><author>Innovator_cjx</author><pubDate>Tue, 05 Apr 2022 20:35:47 +0800</pubDate><description><![CDATA[根据B站UP主奇乐编程学院的视频异步编程: 一次性搞懂 Promise, async, await (#js #javascript)做的笔记
前提知识：一个视频告诉你“并发、并行、异步、同步”的区别
一、简介
JavaScript目前有两种实现异步的方式：传统的回调函数CallBack Function以及异步API
二、回调函数CallBack Function
例子：
setTimeout (() =&gt; {
    console.log("兄弟你好");
}, 3000 );

console]]></description><category></category></item><item><title><![CDATA[C/C++遇到的笔试题]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/120014299</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/120014299</guid><author>Innovator_cjx</author><pubDate>Tue, 31 Aug 2021 14:27:32 +0800</pubDate><description><![CDATA[收集了在面试中遇到的C/C++笔试题，作为笔记复习
一、计算 sizeof 的值
void Func(char str[100]){}
char str[]=”Hello”;
char *p=str;
int n=10;
void *p1=malloc(100);

请计算：

sizeof(str)= 4
sizeof(str)= 6
sizeof( p )=4
sizeof(n)=4
sizeof(p1)=4

二、计算下面几个类的大小

class A {};: sizeof(A) = 1;
clas]]></description><category></category></item><item><title><![CDATA[二叉树的遍历C/C++]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/120001484</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/120001484</guid><author>Innovator_cjx</author><pubDate>Mon, 30 Aug 2021 20:15:18 +0800</pubDate><description><![CDATA[二叉树建立
一：二叉排序树的左子树节点值都小于根节点值，右子树节点值都大于根节点，因此假如根节点值为10，其左节点值为5，其左节点的右节点值为8，那么从右节点到跟节点的值依次为8  5  10，显然不是有序的
二：哈夫曼树是带权路径最小的二叉树，也不是
三：AVL树是二叉排序树，只不过其左右子树的高度差有限制，在1之内，由一只非有序
四：堆是一种完全二叉树，其有大顶堆和小顶堆的分别，大顶堆是指其每个节点的值都大于其左右孩子的值（小顶堆反之），因此从任一节点到根节点是升序排列的（小顶堆反之）
//前序，建立二]]></description><category></category></item><item><title><![CDATA[常用的排序算法（C语言版）]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/119961278</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/119961278</guid><author>Innovator_cjx</author><pubDate>Fri, 27 Aug 2021 22:28:46 +0800</pubDate><description><![CDATA[冒泡排序 Bubble Sort
基本思想：交换排序，两两比较相邻记录的关键字，如果反序则交换，知道没有反序的记录为止。

(对相邻的元素进行两两比较，顺序相反则进行交换)

原始版：
#include &lt;stdio.h&gt;

void BubbleSort(int a[], int n)
{
    for(int i=0; i&lt;n; ++i)
    {
        for(int j= n-2; j&gt;=i; --j)
        {
            if(a[j]]]></description><category></category></item><item><title><![CDATA[C++关键字 noexcept]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118680700</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118680700</guid><author>Innovator_cjx</author><pubDate>Mon, 12 Jul 2021 18:05:22 +0800</pubDate><description><![CDATA[1. 关键字noexcept
从C++11开始，我们能看到很多代码当中都有关键字noexcept。比如下面就是std::initializer_list的默认构造函数，其中使用了noexcept。
constexpr initializer_list() noexcept
	: _M_array(0), _M_len(0) { }

该关键字告诉编译器，函数中不会发生异常,这有利于编译器对程序做更多的优化。
如果在运行时，noexecpt函数向外抛出了异常（如果函数内部捕捉了异常并完成处理，这种情况不算抛出]]></description><category></category></item><item><title><![CDATA[JavaScript：不要在文档(DOM)加载完成之后使用 document.write()]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118658715</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118658715</guid><author>Innovator_cjx</author><pubDate>Sun, 11 Jul 2021 19:53:31 +0800</pubDate><description><![CDATA[菜鸟教程的JavaScript教程中有这样的一段描述：

您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法，会覆盖整个文档。

查了下网上的资料，这句话的解释为**绝对不要在文档(DOM)加载完成之后使用 document.write()。这会覆盖该文档。**意思是说：不要在文档(DOM)加载完成之后使用 document.write()的含义并不是在文本后使用script标签进行文档内容写入，而是通过按钮响应等方式在全部页面加载完毕之后进行文本写入
例如：
/*
]]></description><category></category></item><item><title><![CDATA[malloc()、calloc()以及realloc()函数的区别]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118255144</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118255144</guid><author>Innovator_cjx</author><pubDate>Sat, 26 Jun 2021 22:11:44 +0800</pubDate><description><![CDATA[malloc()和calloc()函数
两者都可以用来动态分配内存空间,但两者稍有区别。
malloc()
malloc()函数有一个参数,即要分配的内存空间的大小，函数声明(函数原型)：
void *malloc(unsigned int num_bytes);

说明：malloc向系统申请分配指定size个字节的内存空间。返回类型是 void*类型。void*表示未确定类型的指针。C,C++规定，void*类型可以强制转换为任何其它类型的指针。
从函数声明上可以看出。malloc和new至少有两个不同]]></description><category></category></item><item><title><![CDATA[C++ 类之间的关系与实现]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118250695</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/118250695</guid><author>Innovator_cjx</author><pubDate>Sat, 26 Jun 2021 17:06:57 +0800</pubDate><description><![CDATA[类与类的关系
在面向对象的程序设计中，类之间有6中关系，分别是继承， 组合， 聚合，关联， 依赖，实现，如果使用C语言实现，上面的这些关系通过"结构体包含结构体、结构体包含结构体指针以及函数指针等语法实现"，C语言本身的语法并不支持这些逻辑关系的实现，所以使用C语言实现面向对象的程序设计很多时候需要我们自己来关注某一种语法实现两个类之间到底是什么关系，但是C++/Java/Python等语言原生支持面向对象的程序设计，即这些编程语言的语法本身就可以实现这些类之间的逻辑关系，本文以C++为例，分析这些类关系的]]></description><category></category></item><item><title><![CDATA[GNU Libmicrohttpd简介]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/117161200</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/117161200</guid><author>Innovator_cjx</author><pubDate>Sat, 22 May 2021 15:48:38 +0800</pubDate><description><![CDATA[GNU Libmicrohttpd是一个用来在项目中内嵌http服务器的C语言库。这是一款免费软件，并且是GNU项目的一部分。 它具有以下几个鲜明的特点：

C语言库，小而快
简易的API，且都是可重入的
支持 HTTP 1.1 可以同时侦听多个端口
四种不同的线程模式（select、poll、pthread、thread pool）
库平台支持 GNU/Linux, FreeBSD, OpenBSD, NetBSD, Android, Darwin (macOS), W32, OpenIndiana/So]]></description><category></category></item><item><title><![CDATA[const对象不能调用非const成员函数]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116501584</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116501584</guid><author>Innovator_cjx</author><pubDate>Fri, 07 May 2021 20:44:01 +0800</pubDate><description><![CDATA[在C++中，可以用const来定义一个const对象，但const对象不可以调用类中的非const成员函数
原因
引发原因：： 由调用成员函数时隐式传入的当前对象的this指针引起。

非const成员函数中的隐式参数：classA* this
const成员函数中的隐式参数：const classA* this

根本原因：

const对象的指针为const classA* this，因此传入非const成员函数时编译器报错（类型不匹配，无法从const 指针转换为非const指针）；但传入const成]]></description><category></category></item><item><title><![CDATA[C语言extern关键字]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116494346</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116494346</guid><author>Innovator_cjx</author><pubDate>Fri, 07 May 2021 15:25:18 +0800</pubDate><description><![CDATA[在函数内定义的变量是局部变量，而在函数之外定义的变量则称为外部变量，外部变量也称全局变量。它的存储方式为静态存储，其生存周期为整个程序的生存周期。全局变量可以为本文件中的其他函数所共用，它的有效范围为从定义变量的位置开始到本源文件结束。
然而，如果全局变量不在文件的开头定义，有效的作用范围将只限于其定义处到文件结束。如果在定义点之前的函数想引用该全局变量，则应该在引用之前用关键字 extern 对该变量作“外部变量声明”，表示该变量是一个已经定义的外部变量。有了此声明，就可以从“声明”处起，合法地使用该外部]]></description><category></category></item><item><title><![CDATA[const在不同位置下的修饰作用]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116483910</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/116483910</guid><author>Innovator_cjx</author><pubDate>Fri, 07 May 2021 10:45:55 +0800</pubDate><description><![CDATA[顶层const与底层const

const int* a：这里的const修饰的是int，而int定义的是一个整型值a。因此*a所指向的对象值不能通过*a来修改。但是可以重新给a赋值，使其指向不同的对象
int* const a：这里的const修饰的是a，a代表的是一个指针地址。因此不能赋值给a其他的地址值，但可以修改a指向的值，如*a = 1
const int* a与int const* a两者等价
const int* const a：a所指向的对象的值以及地址a本身的值都不能被修改

总结
co]]></description><category></category></item><item><title><![CDATA[C++ 中作用域受限的枚举类型]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115369382</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115369382</guid><author>Innovator_cjx</author><pubDate>Thu, 01 Apr 2021 11:08:49 +0800</pubDate><description><![CDATA[本文介绍 C++ 中传统枚举类型存在的作用域不受限等问题，随后列举经典的限定其作用域的做法，最后给出新标准 C++11 下的解决方案。
传统行为
传统的枚举类型在 C 语言中就有，C++ 中行为和 C 中一致，常被用来定义有类型的常量。一个典型的枚举类型定义如下：
enum Color { RED, BLUE };

C++ 发明人 Bjarne Stroustrup 总结这种枚举有如下问题：

作用域不受限 (unscoped)，枚举变量的作用域不受限，会暴露给领近的代码作用域（如果在最外层则为全局作用域]]></description><category></category></item><item><title><![CDATA[构建 C/C++ 项目时添加宏定义]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115367973</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115367973</guid><author>Innovator_cjx</author><pubDate>Thu, 01 Apr 2021 10:25:55 +0800</pubDate><description><![CDATA[有时候我们希望在构建时能够在命令行添加一些宏定义，改变程序行为。一个典型应用示例是代码里通过检查是否定义了 DEBUG 宏，来决定是否输出调试信息。编译器一般提供命令行选项支持这种做法，例如使用 gcc 时可以在命令行添加-D选项，定义一些宏：
gcc -DDEBUG=1 a.c

不过，大型项目一般都需要自动化构建工具，如 GNU Autotools 或者 CMake。使用它们后，我们无法直接修改编译命令，但它们提供了替代方案。对于 Autotools，它可以识别 CPPFLAGS等环境变量，从而我们可以]]></description><category></category></item><item><title><![CDATA[C++成员变量的初始化顺序问题详解]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115363506</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115363506</guid><author>Innovator_cjx</author><pubDate>Wed, 31 Mar 2021 23:04:10 +0800</pubDate><description><![CDATA[问题来源：
《剑指offer》中，考官出了一道简单的程序输出结果值的题，如下：

class A 
{ 
private: 
	int n1; 
	int n2; 
	
public: 
	 A():n2(0),n1(n2+2){} 
 
	 void Print(){ 
	  cout &lt;&lt; "n1:" &lt;&lt; n1 &lt;&lt; ", n2: " &lt;&lt; n2 &lt;&lt;endl; 
	 } 
}; 
 
int main() 
{ 
	A a; 
	a.Pri]]></description><category></category></item><item><title><![CDATA[iproute2 与 net-tools]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115167315</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/115167315</guid><author>Innovator_cjx</author><pubDate>Wed, 24 Mar 2021 11:25:58 +0800</pubDate><description><![CDATA[如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具（统称为net-tools）来配置网络功能，解决网络故障。net-tools起源于BSD的TCP/IP工具箱，后来成为老版本Linux内核中配置网络功能的工具。**但自2001年起，Linux社区已经对其停止维护。**同时，一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools，只支持iproute2。
作为网络配置工具的一份子，iproute2的出现旨在]]></description><category></category></item><item><title><![CDATA[B2BUA/SBC/Proxy的SIP消息重构和RFC7092详解]]></title><link>https://blog.youkuaiyun.com/Innovator_cjx/article/details/114885758</link><guid>https://blog.youkuaiyun.com/Innovator_cjx/article/details/114885758</guid><author>Innovator_cjx</author><pubDate>Tue, 16 Mar 2021 16:50:24 +0800</pubDate><description><![CDATA[B2BUA/SBC/Proxy的SIP消息重构和RFC7092详解1、为什么使用B2BUA2、RFC7092对B2BUA的类别3、B2BUA具体呼叫工作流程4、B2BUA功能实现3PCC讨论5、SIP Proxy和B2BUA消息重构6、其他相关问题讨论7、总结
我们在IP语音通信领域中一直在讨论SIP服务器和应用等相关的话题。关于SIP协议中，让读者比较关心的或者我们经常使用的就是SIP应用服务器，包括企业IPPBX，SBC，注册服务器等核心的构件。这些典型的应用大部分都是B2BUA的形式出现的，大部分技术]]></description><category></category></item></channel></rss>