自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小麦China的博客

吾生也有涯,而知也无涯。

  • 博客(248)
  • 收藏
  • 关注

原创 十大排序算法原理及实现

算法概述冒泡排序及其优化 快速排序及其优化 直接插入排序及其优化 希尔排序及其误区明析 直接选择排序 堆排序 归并排序 计数排序 桶排序 基数排序算法分类十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。根据使用内外存分类.

2020-05-11 23:00:37 343

原创 Gin 框架学习

Gin 框架

2022-04-29 21:38:29 463 1

原创 EndNote使用笔记

注:mac安装EndNote 20导入导入文章:文献网站直接导出 下载pdf,File---Import引用格式下载导入引用格式:https://endnote.com/downloads/styles/国标:Chinese Standard GBT7714 (numeric) | EndNote直接打开下载的文件,File---Save As引用EndNote插件框Style选择引用格式...

2021-10-21 22:34:04 482

原创 C/C++开源项目目录

cjson网址:cJSON download | SourceForge.netMyTinySTL网址:https://github.com/Alinshans/MyTinySTLoatpp网址:https://github.com/oatpp/oatppTinyhttpd网址:https://github.com/EZLippi/Tinyhttpd/blob/master/httpd.cnginx网址:http://nginx.org/Redis网址:https://redis.io/downl

2021-10-19 20:33:22 539

原创 《TCP/IP详解》卷1第16章 TCP拥塞控制&&BBR分析

在TCP的演进过程中,出现了很多优秀的思想和算法,以实现网络传输过程中,在公平竞争性的前提下,尽可能地利用带宽资源。本文介绍TCP发展过程中出现的几种拥塞控制算法。拥塞控制前言1、公平性公平性是在发生拥塞时各源端(或同一源端建立的不同TCP连接或UDP数据报)能公平地共享同一网络资源(如带宽、缓存等)。处于相同级别的源端应该得到相同数量的网络资源。产生公平性的根本原因在于拥塞发生必然导致数据包丢失,而数据包丢失会导致各数据流之间为争抢有限的网络资源发生竞争,争抢能力弱的数据流将受到更多损害。因此

2021-10-12 16:31:32 1772

原创 wireshark学习手记

wiresharkWireShark是非常流行的网络封包分析工具,可以截取各种网络数据包,并显示数据包详细信息。使用捕获过滤展示过滤1. 协议过滤比如TCP,只显示TCP协议。2. IP 过滤比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,ip.dst==192.168.1.102, 目标地址为192.168.1.1023. 端口过滤tcp.port ==80, 端口为80的tcp.srcpor...

2021-10-12 11:58:57 890

原创 Go语言学习笔记

优点:继承C,保留编译执行以及弱化的指针 引入包概念,一个文件属于一个包 垃圾回收机制,内存自动回收 天然并发,语言层面支持,goroutine,轻量级线程,可实现大并发处理,高校利用多核,基于CPS 吸收管道通信机制channel,不是用共享内存 函数返回多个值 切片slice,集合,动态数组,延时执行defer安装:下载:https://golang.org/dl/ 点击pkg安装 export PATH=$PATH:/usr/local/go/bin单独运行:go

2021-09-03 15:16:29 400

原创 C++11编译问题:warning: ISO C++11 does not allow conversion from string literal to ‘char *‘

在新写的采用C++11标准的编译器里,进行编译以后,原来没有任何提示的语句,竟然出现如下问题:char* a="abc";std::cout << a <<std::endl;warning: ISO C++11 does not allow conversion from string literal to 'char *'我虽然知道这个是指针指向了不可修改的常量字符串,但在C++98 中,该种类型的语句首先是支持的,其次也不会出现类似的C++11之类的标志。查

2021-08-11 13:04:34 7574

原创 丢包计算(以WebRTC为例)

背景 目前WebRTC的版本主要还是基于GCC的拥塞控制,发送端需要根据丢包率控制发送码率,而丢包率是在接收端计算并通过RR(Receiver Report RTCP)包通知发送端。版本 66问题 重传包可能会影响丢包率,如果发送端重传的包都被接收端收到,并且接收端没有区分重传包,那么丢包率会是0,与实际的网络状态不符,发送端也无从控制发送码率。丢包与NACK、RTX的关系 在使能RTX的情况下,发送端的重传包会使用新的SSRC通过RTX发送,这些...

2021-08-03 00:00:28 2443

原创 C++中对象NEW出来和直接声明的区别

区别首先,最直观的,new出来的对象需要使用指针接收,而直接声明的不用。例如 A* a=new A() 与A a()。 new出来的对象是直接使用堆空间,而局部声明一个对象是放在栈中。 new出来的对象类似于申请空间,因此需要delete销毁,而直接声明的对象则在使用完直接销毁。 new出来的对象的生命周期是具有全局性,譬如在一个函数块里new一个对象,可以将该对象的指针返回回去,该对象依旧存在。而声明的对象的生命周期只存在于声明了该对象的函数块中,如果返回该声明的对象,将会返回一个已经被销毁的对

2021-07-30 01:33:27 661

原创 Mac下安装java并配置运行环境

1、在官方网站下载安装包,安装2、终端打开 ~/.zshrc ,在文件最后添加JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home"export JAVA_HOMECLASS_PATH="$JAVA_HOME/lib" PATH=".$PATH:$JAVA_HOME/bin"3、刷新~/.zshrc4、验证执行echo $JAVA_HOME查看环境变量查看环境变量执行java.

2021-07-20 11:19:15 349

原创 C++11的std::shared_ptr 是否是线程安全

结论:指针和引用计数是线程安全的,但指针所指对象中的操作就需要自己做控制,并不是线程安全的。std::shared_ptr大概总结有以下几点:(1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用的资源。(2) 使用引用计数来标识是否有多余指针指向该资源。(注意,shart_ptr本身指针会占1个引用)(3) 在赋值操作中, 原来资源的引用计数会减一,新指向的资源引用计数会加一。(4)引用计数加一/减一操作是原子性的,所以线程安全的。(5) make_shared要优于.

2021-07-19 00:25:29 2579 1

原创 内存对齐及其类大小

内存对齐C与C++ 区别 :C:空结构体 ,大小不确定,报错;C++:空结构体,大小1个字节结构体的大小不是结构体元素单纯相加就行的,因为我们主流的计算机使用的都是32bit字长的CPU,对这类型的CPU取4个字节的数要比取一个字节要高效,也更方便。所以在结构体中每个成员的首地址都是4的整数倍的话,取数据元素时就会相对更高效,这就是内存对齐的由来。每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。可以通过预编译命令#pragma pack(n),n=1,2,4,8,16.

2021-07-18 23:43:07 193

原创 常见基本数据类型所占字节数

指针大小与系统编译器位数相同,16位编译器(2字节)、32位编译器(4字节)、64位编译器(8字节)编码与中文:Unicode/GBK: 中文2字节UTF-8: 中文通常3字节,在拓展B区之后的是4字节综上,中文字符在编码中占用的字节数一般是2-4个字节。int,longint,shortint的宽度都可能随编译器而异。但有几条铁定的原则(ANSI/ISO制订的): sizeof(shortint)<=sizeof(int) sizeof(int)<=size...

2021-07-18 23:26:17 10931

原创 虚函数表存储的位置(解析C++内存分配及其编译分段)

先上结论:C++虚函数表保存在.rdata只读数据段。编译时期由编译器确定虚函数表。虚函数表属于类,类的所有对象共享这个类的虚函数表。c/c++的内存分配栈(stack):又称堆栈,栈是由编译器自动分配释放,存放函数的参数值,局部变量的值等(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,栈用来传递参数和返回值。由于栈的先进后出的特点,所以栈特别方便用来保存/恢复调用数据。其操作方式类似于数据结构中的栈。 堆(heap):堆是用于存放进程运行中

2021-07-18 23:15:00 5292

原创 gdb、g++、vscode和cmake开发(学习手记)

Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的。Dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似window下的分配盘符)。Etc:该目录主要存储一些配置文件。Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。Proc:全称process,表示进程,该目录中存储的是Linux运行时候的进程。Root:该目录...

2021-07-12 21:29:04 581 3

原创 vi/vim学习手记

vim界面设置步骤1:cp /usr/share/vim/vimrc ~/.vimrc 先复制一份vim配置模板到个人目录下步骤2:vi ~/.vimrc 进入insert模式,在最后加二行 syntax on set nu!保存收工。最后附上其它选项set nocompatible "去掉有关vi一致性模式,避免以前版本的bug和局限 set nu!...

2021-07-08 17:09:05 240

原创 MVCC及其实现原理

事务有四大特性:ACID,其中在Mysql中解决隔离性有两种方法,一个是加锁,一个是MVCC数据库并发场景有三种,分别为:读-读:不存在任何问题,也不需要并发控制 读-写:有线程安全问题,可能会造成事务隔离性问题,可能遇到脏读,幻读,不可重复读 写-写:有线程安全问题,可能会存在更新丢失问题,比如第一类更新丢失,第二类更新丢失当前读像select lock in share mode(共享锁), select for update ; update, insert ,delete(排他锁)这

2021-07-02 15:24:50 992

原创 Redis学习手记

Redis 命令参考

2021-06-30 22:50:26 98

原创 k8s学习路线

AnsibleiptablesLinux上常用的防火墙软件Helm教程nginxetcdKubernetes

2021-06-30 19:01:22 141

原创 C++11强制类型转换

向下转换需要向上转换不需要

2021-06-30 17:25:37 124

原创 MQTT习记

MQTT 协议 3.1.1 中文版https://mcxiaoke.gitbooks.io/mqtt-cn/content/MQTT Version 3.1.1(英文版)MQTT-SN 与 MQTT区别MQTT Brokerhttps://github.com/mqtt/mqtt.org/wiki/serversMQTT Broker 比较与选型——开源与商业服务器/服务对比Mosquitto(C/C++)emqttd(Erlang/OTP)Moquette(...

2021-06-29 22:40:59 65

转载 死锁避免——银行家算法(Banker‘s Algorithm)

Dijkstra在1965年提出的银行家算法是著名的死锁避免算法,这个用于一个银行家给多个顾客贷款的算法可以直接用于操作系统给进程分配资源,这时只要把银行家换成操作系统,把顾客换成进程,把资金换成资源,把银行家决定是否放贷时所用的判断过程(即判断顾客是否有信誉和偿还能力)换成操作系统决定是否分配资源时所用的判断过程(即判断进程是否能及时归还资源)即可。为了描述银行家算法,下面先介绍一下系统的安全状态的概念。一、安全序列注意:(1)系统在某一时刻的安全状态可能不唯一,但这不影响对系统安全性的.

2021-06-28 08:36:31 5158

原创 基础HTTP Web服务器

基础HTTP Web服务器#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <unistd.h>#include <string.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/types.h>#include <sys/socket.h>

2021-06-24 22:58:20 88

原创 实现web服务器项目(C++)

简单web服务器的实现(C++)

2021-06-24 09:20:48 1125 2

原创 Lua学习笔记

for范型编程list模版、建立链表、迭代器--建链表list = nilfor k,v in ipairs(tab) do list = {val = v,next = list} print(list.val)end--迭代函数function ipairs_iter( t,node ) if node ==nil then return t else return node.next endend--迭

2021-06-23 23:20:23 105 1

原创 如何在Ubuntu 18.04上安装Let‘s Encrypt SSL证书

Certbot是一个用户友好的自动客户端,它为你的web服务器获取和部署SSL/TLS证书,它是一个用来从let's Encrypt获取证书,并且在你的服务器上自动启用HTTPS的工具,总之,它充当官方"let's Encrypt客户端"或"let's Encrypt python client.",它利用自动证书管理环境(ACME )自动部署由大多数浏览器信任的免费证书,因此,它适用于支持ACME协议的CA 。在本文中,我将解释如何在ubuntu 18 04服务器上使用Certbot为Apache和N

2021-06-15 20:28:18 1332

原创 搭建 WebRTC TURN&STUN 服务器

本文主要讨论用于 WebRTC 的 TURN 服务器的应用,这里我们使用 coturn 。coturn 是一个免费的开源的 TURN/STUN 服务器。coturn 服务器完整的实现了 STUN/TURN/ICE 协议,支持 P2P 穿透防火墙。STUN 服务器用于获取设备的外部网络地址 TURN 服务器是在点对点失败后用于通信中继。WebRTC 建立连接的步骤大概是这样的:客户端(浏览器)直接尝试直连; 如果如果直连则通过 STUN 服务器进行穿透; 如果无法穿透则通过 TURN 服务

2021-06-15 20:25:24 1940 2

原创 WebRTC学习

官网:官方提供的demo平台:https://appr.tc/原理和架构

2021-06-15 20:16:07 393

原创 C++智能指针

C++ 智能指针unique_ptr的简单实现

2021-06-11 01:41:53 65

转载 智力题汇总

100张牌,每次只能抽一张,抽过的牌会丢掉,怎么选出最大的牌。36匹马,6条跑道,选出最快3匹,最少赛多少场?5个海盗抢到了100颗宝石,每一颗都一样的大小和价值连城。他们决定:抽签决定自己的号码(1,2,3,4,5)。首先,由1号提出分配方案(你抽到1号),然后大家5人进行表决,当且仅当超过半数的人同意时,按照他的提案进行分配,否则将被扔入大海喂鲨鱼。 如果1号死后,再由2号提出分配方案,依此类推。条件:每颗宝石都是一样的价值。海盗都想保命,尽量多得宝石,尽量多杀人。问题:你会提出怎样的分配方案才

2021-06-09 09:31:33 530

转载 MySQL索引详解(聚集索引与非聚集索引以及数据结构)

【摘要】一、索引的简介 索引是存储引擎快速找到记录的一种数据结构,是数据库中专门用于帮助用户快速查询数据的一种数据结构,可以帮助用户快速寻找到需要的数据行,是数据库性能优化中最重要的工具。 使用索引的主要目的是为了优化查询速度,它们包含着对数据表里所有记录的引用指针。简单的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。 二、索引的分类 索引是在存储引擎中实现的,也就是说不同......

2021-06-08 21:27:31 853

转载 音视频通讯中的抗丢包与带宽自适应原理

文章内容主要来自中国电信北京研究院丁博士在上周六的技术交流会上的演讲内容,之前我们有在公众号上介绍过这个技术交流会,详见:http://mp.weixin.qq.com/s?__biz=MzA5ODMzMjE1NQ==&mid=401152241&idx=1&sn=38dd10e369d3f8e308a6086e84984072&scene=23&srcid=1219MtQx3dqOaQZo9L2emdBH#rd从结果来看这种技术交流会还是挺有料的,主要是技术人员

2021-06-08 20:02:04 443

转载 实时音视频会议场景下QoS策略

文|网易智慧企业资深流媒体开发工程师背 景科技的进步以及通讯基建的高速发展,使得人们对交流的模式要求越来越即时,对交流内容要求越来越具象,这些要求催化着内容交换模式的不断发展,从传统的信件,到短信电话再到互联网场景下的微信语音、抖音短视频、视频直播及实时音视频通话。随着5G正式商用元年的真正到来,更加即时与具象的实时音视频通讯将被更广泛的应用。实时音视频系统,是一个相对比较复杂的内容传输系统,从大的流程上来讲,系统覆盖音视频采集、音视频编码、音视频传输、音视频解码、音视频绘制。想要...

2021-06-08 15:09:25 1213

转载 一致性哈希算法 consistent hashing

在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。场景描述假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存的压力。也就是说,我们希望每台服务器能够缓存1万张左右的图片,那么,我们应该怎样做呢?如果我们没有任何规

2021-06-08 09:48:30 113

原创 返回有序数组所有数的平方值中有多少种不同的取值

题目如下:给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:nums = {-1,1,1,1},那么你应该返回的是:1。因为这个数组所有数的平方取值都是1,只有一种取值nums = {-1,0,1,2,3}你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9作者:列文链接:https://juejin.cn/post/6844903828525940743来源:

2021-06-07 11:33:05 241

原创 C ++基础数据结构算法 | 分治法(Divide and Conquer)

C++基础数据结构算法 | 分治法(Divide and Conquer)Divide分解成子问题 Conquer求解子问题 combine(merge)合并子解答 169. 多数元素 模板,分治divide(),解决conquer() 50. Pow(x, n) 215. 数组中的第K个最大元素 归排,取最后第k个 23. 合并K个升序链表 切割成两个相邻的list,...

2021-05-26 17:39:42 336

原创 经典考题总结

经典考题目录经典考题经典考题一 | 计算器(Calculator)经典考题二 |经典考题一 | 计算器(Calculator) 224. 基本计算器 递归+栈 227. 基本计算器 II 栈 772. 基本计算器 III 递归+栈 经典考题二 |...

2021-05-18 22:45:36 70

原创 C程序设计 07-09 数组和指针(二)

折半查找法(二分查找)折半搜索(half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

2021-05-06 13:12:02 92

原创 C程序设计 04-06 数组和指针

目录break与continueC数组​初始化数组用 for 循环初始化数组数组在内存中如何存放?​sizeof()数组名能否作为左值或者右值?数组内部详解指针常量指针指向常量的指针访问数组中的元素​断言(assert)的使用字符数组'\0' '0' "0" 0的区别sizeof与strlen的区别与联系字符串与字符数组strcpy()字符串拷贝函数break与continuebreak : 结束所有循环conti...

2021-05-06 12:28:41 103

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除