- 博客(68)
- 资源 (5)
- 收藏
- 关注
原创 关于WebRTC技术详解专栏
一、前言近几年WebRTC大热,不仅拉低了音视频的开发的门槛,而且还大有一统天下的趋势。本人有幸这几年一直在从事WebRTC的相关开发工作,对其略知一二,心理一直想着将自己所知所学的知识做一个系统化的总结,不过耐于技术实力有限,诚惶诚恐。最近这个想法越来越强烈,斗胆开个专栏,一来对自己的前路做个回顾总结,二来也希望对后来者有个抛砖引玉的作用就足矣。希望各位看官,勿要拍砖。二、专栏大纲对于大纲的设计,我想从最基础的概念入手,带领大家一步一步走进WebRTC的世界,所以大体分成以下几块整个.
2020-05-27 14:54:45 933
原创 HTTP协议的进化史:从HTTP/0.9到HTTP/3,你了解吗?
其次HTTP/3还支持连接迁移,它可以让客户端在不同网络无缝的切换,而tcp在切换网络的时候要不断的重连,无法做到那么丝滑。那就是队头堵塞,HTTP/1.1 所有的数据通信都是按次序完成的,服务器只有处理完一个请求,才会处理下一个请求,如果前面的请求处理特别慢,后面就会有很多请求排队等着,严重影响整个页面加载。属于应用层协议,是万维网数据通信的基础。与前面几个版本相比,HTTP/3采用QUIC协议,QUIC协议是一种基于UDP协议的新型协议,它可以减少连接建立的延迟和丢包率,从而提高网络性能。
2023-12-16 19:33:07 400
原创 为啥要使用extern C 0067a8e1007d4f19bd114550fa32fed3
另外需要注意的是,extern “C” 不能修饰类相关的函数或者变量,应为类相关的都是C++的特性,在C中并没有。
2023-02-24 09:12:11 154
原创 Golang的内存分配make,new详解
Golang的内存分配make,new详解Golang内存分配主要有三种方式:new,make,以及大括号({})。常常在使用上容易混乱,弄不清楚。New采用New返回的是一个指针,即指向一个被初始化为0值得地址。p := new(int) // p is a address that point to value of int, value is zeroedp 是一个指针,指向一个类型为int的并被初始化为0的值。type SyncedBuffer struct { lock
2021-05-10 11:42:04 1674
原创 Golang中的Interface详解
Golang中的Interface详解InterfaceInterfaces in Go provide a way to specify the behavior of an object这是"Effective go" 中对interface的定义。Golang的多态是根据duck typing(你看着像,我就认为你是)的方式来实现。举个例子:func main() { fishObj := new(fish) dogObj := new(dog) var duckObj duck =
2021-05-08 16:22:35 1378
原创 一生的旅程
一口气看完了一生的旅程,迪士尼CEO Robert.Iger根据他多年职业生涯写了的一本书,Iger已于2020.2.26已经卸任CEO。里面的很多思想,以及管理团队的方法引人深思,具有很强的指导意义。做人原则真诚友善用公平的态度和同理心对待每一个人,每个人都有权利划定自己的界线,应该尊重他们的界线,认真倾听他们的讲述,并给予公平处事书中作者举了一个典型的例子,如何解雇或者从员工手中撤销权利?其实这个问题,也一直在我脑袋里盘旋,不好意识开口,约谈时顾及面子稀里糊涂,搞的最后大家心理积怨,得
2020-08-23 14:43:13 281
原创 《穷查理宝典》教会我的
近期花了一段时间阅读了这边书,从中得到了很多启发和思考。在生活中遇到困难,选择或者心理失衡的时候,记住这些普世的准则,能让我们坚定走向未来。长期学习每天早晨起来,争取比从前更聪明一点,认真做好你的任务,慢慢的你会有所进步,不会很快,每天挪一点,只要你足够长寿,到最后你就会得到所有应得的东西。人生是一场长跑,耐心做好手头的事情,保持健康,日积月累,就能得到好结果,不必纠结于眼前的焦虑对于手里拿着铁锤的人,每个问题都像钉子知识不应该局限于某一个学科,需要跨学科学习,打破学科之间所谓的壁垒
2020-08-18 13:42:50 292
转载 redis缓存雪崩,穿透,击穿
缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机。缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据库必然扛不住,它会报一下警,然后就挂了。此时,如果没有采用什么特别的方案来处理这个故障,DBA 很着急,重启数据库,但是数据库立马又被新的流量给打死了。这就是缓存雪崩。大约在 3 年前,国内比较知名的一个互联网公司,曾因为缓存事故,导致雪崩,后台系统全部崩溃,事故从当天下午持续到晚上凌晨 3~4 点,
2020-07-31 10:35:40 175
原创 编程小知识之C++内存操作
动态内存分配操作C++的动态内存管理,一直是很让人头疼的,一不小心就能出现内存泄漏和宕机,需要按照有创建必有销毁原则,配套使用,养成良好的编程习惯,才是尽量减少这类事情发生。继承于Cmalloc/free动态分配堆中内存,无初始化,可调用memset初始化,释放内存用freecalloc动态分配堆中内存,并初始化0,释放内存用freerealloc对malloc和calloc分配的内存,进行扩展,如果无法找到连续的内存块,可发生内存地址的迁移,产生数据拷贝,并释放掉老内存区域。free时.
2020-07-27 14:31:03 299
原创 编程小知识之一网打尽C++内存管理
一、C++内存管理c++内存管理主要以下几个区:栈存储函数内局部变量,函数结束可自动销毁,内存容量有限,但栈内存分配运算内置于处理器的指令集中,效率很高堆程序执行时通过new/malloc等动态分配内存,需手动销毁,如果忘记销毁,可产生内存泄漏,不过程序退后后,可由系统自动释放。32bit的机器,内存容量可达到64GB。静态存储区域存储静态/全局变量,在程序编译期就已经分配好相应内存,存在与程序的整个生命周期。这里我们引申一个概念,进程的内存管理分配。BSS段存储未初始化的静态/全
2020-07-20 14:12:02 114
原创 漫游RTP/RTCP协议(卷一)
一、概念1.1RTP/RTCP是什么RTP全名是Real-time Transport Protocol(实时传输协议)。它是IETF提出的一个标准,对应的RFC文档为RFC3550。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,即实时传输控制协议)。RTP用来为IP网上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTCP全名是Real-time Transport Co.
2020-07-07 16:37:17 717
原创 gcc/g++ 常用编译指令
一、简单编译#include <stdio.h>int main(int argc, char* argv[]){ printf("test\n"); return 0;}g++ main.cpp -o main二、链接相关库#include <stdio.h>#include <stdint.h>#include <stdlib.h> #include <string>#in
2020-06-30 15:59:49 730
原创 给你一个工具,轻松解决测试混音算法难?
一、制作PCMffmpeg -i 1.wav -f s16be -ar 44100 -acodec pcm_s16be output.rawffmpeg -f s16be -ar 44100 -ac 2 -acodec pcm_s16be -i test_mix_audio.pcm output.wav -y
2020-06-24 13:19:08 366
原创 视频帧、分辨率啥的不再懵
上一篇文章介绍了音频的相关知识,这边我们接着讲视频,比音频复杂一些,不过通过这篇文章,你应该会对视频的相关知识会有所了解,让我们开始吧!一、电视的成像原理1、CRT电视成像原理先让我们看看这些大家伙吧打开他看看打开我们可以看到后面有个长长的尾巴,这里隐藏的成像的秘密。首先我们要明白几个概念阴极射线管: 将电信号转换为光信号栅格图像学说:将一张图片分成横竖分成一个个小栅格,每个栅格显示一种颜色,拼接在一起就形成了一张图片CRT显示原理就是基于上面两个概念的,
2020-06-05 10:50:31 680
原创 声音被驯服的方方面面
一、声音产生原理首先我们必须认识到自然界中的声音是怎么产生?声音是由物体振动而产生的,振动对周围空气挤压,就会生成声波,声波通过空气传播,进入到我们耳朵,使我们听到声音,所以声音其实是一种波形。而我们通过对声波的采样,量化,编码,将声波从模拟信息转换为数字信号,生成数字数据,就是我们的音频裸数据,即PCM(Pulse Code Modulation)数据。二、音频基础概念分析下面我们就来分析一下,采样,量化,编码经常会涉及的一些概念。1、采样率(sampleRate)所谓
2020-05-28 10:22:44 404 1
原创 链表系列之经典问题
前文介绍了一些链表的基础知识,不熟悉的同学可以去看看,有了知识后,没有操作怎么行,所以从今天开始,给大家分析几个链表的经典问题,面试也是经常出现,废话不多说,我们一个个讲,重点补充一下,以下例子都是有链表头的,并都是用Golang。一、链表倒置这里介绍两种方法,头插入法和递归发。1、head插入发基本思想就是从头到尾遍历列表,每遍历一个节点,都插入到head后,直到链尾。看图:代码:type ListNode struct { value interface{} next
2020-05-26 13:43:26 275
原创 让你一次性明白算法复杂度
一、为什么需要复杂度分析首先提出一个问题,如何评估算法的好坏,有人可能会说直接放线上跑跑,或者写个测试用例做个benchmark,这些方法都正确,不过有以下几个缺点。1、测试依赖测试环境不同的测试环境,比如机器配置不同,所测试的结果也会不同,算法的评估结果是基于特定的环境,没有普适性2、测试依赖数据量的大小在算法的评估过程中,往往都是与数据量的大小成比例关系的,不同量级的数据,...
2020-05-08 15:25:27 357
原创 密码学应用(二) 之 模型应用
之前写了一篇密码学入门,看大家反馈还不错,所以根据之前的的经验,继续写一篇应用篇,算是一种延续。这篇文章我会按照几个在产线中的应用模型逐个介绍。通用模型这个模型公私钥由资源服务方管理平台统一生成,并颁布给使用方,使用方用于自己的服务,例如微信公众等平台都类似采用这种方式。这个模型公私钥都由用户方生成,用户一般通过账号密码登录资源方系统,将公钥注册进平台,这是典型的ssh验证,例如github等平台...
2018-04-29 16:21:27 1053
翻译 go的声明语法
简介刚接触go的人一定会有个疑惑,为什么go的声明语法与传统的C簇类语言不一样。本文我们将通过比较两种语言语法,来解释为啥go语言要这样做。C簇语法首先,我们来谈一谈C的语法,其采用了一种不常用且巧妙的方式,可称为”解方程式”的语法。一个表达式涉及了描述实例和类型定义。例如:int x;定义x是一个int:因为x具有int类型。通常情况,C声明一个新变量,都需要思考它是什么类型,将类型写在左侧,变量
2018-03-28 15:32:55 956
原创 数一数网络吞吐量
提出一个问题 假设有一台服务器配了千兆网卡,独占千兆带宽,一个业务数据包大小1MB,通过TCP协议发送,请问这台服务流量全部跑满,最大的支持多少吞吐量。大家可以先思考一下这个问题了解几个概念解决这个问题,有必要先了解一下问题中的几个概念。千兆网卡网卡我们都知道是一种提供计算机与传输介质的硬件接口。 千兆则是表示传输速率,一般传输速率是以bit/s为单位,表示每秒传输1bit的数据量。
2018-03-21 14:54:50 4183 1
原创 Vim使用XDebug支持Php调试
一、原理Php调试的方式有很多,最常用的就是通过打印来解决,打印带来的缺陷也比较明显,就是不够直观,而且繁琐,打的不准的话,会浪费很多时间,所以这里给大家介绍一种常用调试方式,利用xdebug来实现,这次我们将和Vim结合,具体原理如下:二、xdebug安装配置1、为php安装xdebug.so扩展wget https://xdebug.org/files/xdebug-2.5.4.tgztar...
2018-02-26 10:14:46 450
原创 密码学知识入门
一、安全问题出现现在越来越多的人利用互联网支付,转账等功能,方便之余,难免会心生疑问,账号会不会被人盗取?这就对数据安全提出了挑战,为了解决这个问题,数据的加密就显得异常重要了。二、基本概念加解密的过程就是发送方将明文通过密钥计算变成密文,接收方再将密文通过密钥计算变成可明文,从而保证在信息传输过程中的具备:可鉴别,完整,防泄漏。可鉴别:通过验证签名的方式,可以知道发送消息的人是否是可信赖的对方
2018-02-25 16:46:20 2583
原创 python多环境指南
在开发python时,时常会碰到版本问题,不过好在python在解决这个问题上,有一套简单易行的办法,那就是pyenv + virtualenv,今天就介绍给大家,下面都是在centos系统下进行的。概念pyenv:简单说是管理python版本的,可以实现一台机器轻松装多个版本,并且可以在各个版本之间自由切换。 virtualenv:在某个python版本下,分割出不同的第三方依赖库。保证各个环境
2017-12-14 18:17:07 480
原创 Java中使用PB教程
前言之前在写Netty的时候,说过要写一篇关于PB的应用,所以现在兑现承诺。在应用的过程中,发现了很多问题,本文主要介绍两个最关键的问题。PB如何与java项目融合,自动刷新编译,以及pb文件如何与其他项目共用,互不影响。java中如何实现pb的Extension概述ProtocolBuff 是 google 提出的的一种数据交换格式,跨语言,跨平台,可扩展。基于这种特性
2017-09-29 11:13:15 8911
原创 带你玩转Netty(三)之WebSocket
摘要前面两篇文章分别给大家介绍了原理篇,应用篇,这回给大家介绍WebSocket在Netty中的应用。什么是WebSocket传统的Http协议只能客户端发起通信,而不能做到服务端主动通知。这里可能有人说可以采用long polling,也就是客户端不断的向服务端请求,获取新数据,虽然能解决问题,但效率低下,浪费资源,只能说是笨办法。所以WebSocket就出现了。webSocket协议是2
2017-08-20 20:29:51 8840 1
原创 带你玩转Netty(二)
概述上篇给大家介绍了 Netty 的基本原理,这次主要给大家讲一下具体怎么用 Netty,主要分成两个方面客户端以及服务端实现
2017-08-05 18:50:20 519
原创 程序猿生活大爆炸
最近看了一组统计报告,蛮有意思的,程序猿的日常生活都由几大部分组成,占比如何,下面这些数据帮你了解你的生活,大家可以对号入座。感后感让我想起身边的的一个小插曲,公司年中大会,播了一个小视频来介绍项目,产品,设计,项目经理一一在视频里侃侃而谈,突然画风一变,全场哄然大笑,原来视频中程序猿在说话了,说实话形象,气质有比较才伤人,现实就是这般。最后建议大家工作之余别忘享受生活。欢迎关注微信公众
2017-07-29 21:54:04 570
原创 Codeigniter支持Redis缓存
一、前提条件原生支持Redis,需要CodeIgniter版本在3.0以上,目前我们用的是3.1.2二、实施方法1、安装phpreids扩展(https://github.com/phpredis/phpredis)phpize./configuremake && make install可能出现的问题:
2017-06-29 13:41:24 1395
原创 Vim教程之终极篇
大家周末快乐,通过前两篇的学习,多加练习,大家应该可以对vim游刃有余,不过它还是一个文本编辑器,对于编码而已,还差点作料,这篇文章就教你打造属于你的IDE。先上一张图:插件管理Vundlevim最强大的地方就是插件,不过在使用插件同时,如何更好的安装,移除,跨机器迁移插件呢,特别是跨机器,之前很多同事,都是将Vim下面的所有插件,打包导出拷贝,相当麻烦,所
2017-06-24 10:53:59 357
原创 Vim教程之进阶
前文给大家介绍了Vim的必须知道的基本用法,这篇主要给大家介绍一下常用的利器,让你用起来倍感顺畅。选择相关逐字/块选择: + 方向键(←↓↑→)逐行选择:V + 上下方向键(↓↑)排版相关快速对齐:采用逐行选择,选择你要对齐的行,然后 按下 =,具体指令如下:V
2017-06-19 10:55:20 395
原创 Vim教程之入门
前言今天正式开始我们《玩转Vim》知识分享,预计分成三个部分:Vim入门,Vim进阶,Vim实战,本人日常的开发,都是用Vim进行的,深深体会到Vim的便捷,所谓神器再说,天下我有。Vim历史80年代末,布莱姆·米勒从一个开源的vi复制Stevie开始,开发了Vim的1.0版本,完全复制了vi,那个时候的Vim是Vi IMitation(模拟)的简称。
2017-06-15 10:00:39 446
原创 Java的一些概念整理
一、关于Servlet简单点说 其实就是一个WEB服务端处理客户端请求的中间层接口。二、关于线程1、一般集成runnable or thread2、线程同步采用 synchronized三、关于异常java 提供许多异常类,具体查阅相关资料,这里要注意有以下几点1、try块最好针对异常模块,不要盲目大块2、尽量使用finally处理资源释放3、异
2015-06-22 14:44:54 984
原创 通用高性能服务框架解析
做了多年的后台服务,一直想将自己这么多年对高性能服务架构的一些粗浅认识写出来,一方面对自己这个阶段成长做个总结, 另一方面想通过这个与各位做一个交流,妄不吝赐教。一、最初对服务架构的概念最初接触服务端程序应该是2011年,当初基于服务架构的概念是基于这样一个模型这是最简单的一种C/S模型结构,客户端直接连接服务端,只能适用于对效率、并发量、扩展性要求低的环境,所以当请求量逐渐上
2015-03-05 10:11:55 2265
原创 FastDFS客户端(Python版)指南
最近做了一个分布式的项目用到了FastDFS,关于FastDFS这里就不阐述了,有兴趣了解的小伙伴,请到官网:http://bbs.chinaunix.net/forum-240-1.html。这里着重介绍FastDFS客户端(Python版),此版客户端已经用于实际项目,目前运行稳定。项目托管于git,地址:https://github.com/cosysun/FastDFSClient_Pyt...
2015-03-04 11:24:00 13337 8
原创 关于精益创业理念随想
初次接触这个概念,要从《精益创业》这本书说起,看完之后总想写点什么,一直在脑袋里面转,这几天就抽空把脑袋里面想的东西写出来,和大家分享一下,写到哪里是哪里,都是一些比较浅显的认识。控制风险从最小化开始“我是一个程序员,我有一个想法,我想把它完美的实现出来,然后优雅的展示在众人面前,得到热烈的掌声”,这是否是你曾经有过的想法,现在我可以告诉你,你的想法很理想,可是现实可残酷,有可能你做出来的
2014-11-09 11:12:00 1614
原创 关于C++的一个栈空间被占用问题的总结
一、事情起因一条线程调用了Map 的一个erase方法 结果dump了二、原因假设1、Map中的的数据被其他线程释放了,通过find验证了一下,不可能,数据还在,活生生的2、Map中的数据被覆盖了或者被改写了 分析结果:看了一下数据,都没错,字节也都对齐3、通过单步调试发现,在STL内部调用结尾释放指针是,所指的地址出现异常,正常情况
2014-04-26 21:22:55 1969
VC++的数据库操作类
2010-04-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人