c++
dong_beijing
向大牛们学习
展开
-
linux服务器gcore排查问题步骤
info symbol 0x008f625c 看该内存对应的函数。其中0x9007 即 790端口,为十进制的1936端口。cat /var/log/mcelog 看看系统信息。data -d @1709193878 看看时间戳。dmesg -T 看看硬件设备。原创 2024-03-16 17:15:44 · 690 阅读 · 0 评论 -
【CSDN竞赛第五期】“三而竭”采用等比求和公式法的思考
1、CSDN竞赛第五期的”三而竭”采用等比求和公式法的错误分析2、对CSDN写代码比赛平台的一点建议原创 2022-09-12 11:21:14 · 429 阅读 · 0 评论 -
用swig完成多语言支持
阅读freeswitch代码时,发现有个languages的mod,其中的作用为,支持java、python等多语言。采用的跨语言的工具叫做swig,Simplified Wrapper and Interface Generator。这个工具的大致工作方法是1、生成c或cpp的包装文件xx_wrap.cpp,生成某语言的调用文件,比如xx.py。2、用xx_wrap.cpp和工作函数,生成动态库xx.so。3、python工程通过xx.py调用xx.so.具体操作如下:1、编写ex原创 2020-07-24 16:59:34 · 393 阅读 · 0 评论 -
海思Hi3559A支持单帧多slice解码的方法配置(不花屏不卡顿)
Hi3559A中,默认单帧最多支持16个slice,解码时通过:cat /proc/umap/vdec可以查询到MaxVPS MaxSPS MaxPPS MaxSlice以上是与H.264、H.265解码相关的内存分配参数。如果用默认参数,对于单帧多slice和频繁gop的情况,会出现花屏和卡顿,解决方法是修改sample_comm_vdec.c在SAMPLE_COMM_VDEC_Start函数中,增加VDEC_PRTCL_PARAM_S ProtocolParam的设原创 2020-06-17 14:20:16 · 1792 阅读 · 0 评论 -
求全图的所有最短路径-floyd算法(弗洛伊德算法)
如果需要求出每两点之间的最短路,不必调用n次Dijkstra(边权均为正)或者bellman-ford(有负权)。有一个更简单的方法可以实现——Floyd-Warshall算法,以下代码熟记即可,即i到j的最短路径,是i到j的直连或者通过任意k中转的最短路径:for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) d[i][j] =原创 2020-06-06 23:11:42 · 1172 阅读 · 0 评论 -
vs的atomic和linux的stdatomic.h的原子操作的基本用法
作为引用计数的计数器,操作如下:#include <atomic>#include <iostream>using namespace std;int main(){ atomic_uint refcount; atomic_init(&refcount, 1);//初始化为1 int cur = atomic_load(&refcou...原创 2020-03-17 16:50:11 · 3021 阅读 · 0 评论 -
RC4流加密的基本流程
1、由随机数生成16位根密钥k2、通过+,-和位置移动,把16位密钥k扩充为256位的中间变量S和T3、根据明文的长度Length,生成Length长度的密钥流K4、按Length,将密钥流K和明文按字符异或。具体代码如下://参考huangyimo博客,《RC4加密算法的原理及实现》#include <vector>#include <iostream...原创 2020-03-15 10:08:50 · 1788 阅读 · 0 评论 -
H264编码的整数DCT的测试代码
整数DCT的作用是变换编码,提取信号特征。H264的整数DCT分两步:1、DCT整数部分变换;2、DCT实数部分变换。实数部分和量化在一起进行,可以统一损失精度,也可以降低运算复杂度。整数部分用蝶形变换,代码如下:#include <iostream>using namespace std;#define BLOCK_SIZE 4int block[BLOC...原创 2020-02-19 23:14:59 · 873 阅读 · 1 评论 -
leetcode 1335. Minimum Difficulty of a Job Schedule的解法(二维动态规划)
题目大意:把这个数组分为d份,每份至少为1个元素,每份的最大值为这份的值,求所有份的和的最小值。本题用工作计划的形式表达了一下,份数用天数表示,每份的值用工作量表示。题目思路:求最小值问题,用动态规划dp。详细思路:按天数和工作量两个变量,构造递归式dp[天数][完成的任务数量] = 工作量的最小值:1、按照工作量:即1天完成k个任务,为dp[1][k]=max{dp[1][k-1...原创 2020-01-27 08:56:37 · 1158 阅读 · 0 评论 -
c++中stl的map的[]取下标运算符需要慎用
代码如下:unordered_map un;for(auto it=un.begin();it!=un.end();++it){ int th =it->first+k; auto itf=un.find(th); if(itf != un.end()) //if(un[it原创 2017-09-14 23:19:35 · 2716 阅读 · 0 评论 -
搭建git的局域网服务器
一、准备环境linux服务器主机选择ubuntu系统,上面需要有ssh服务器,最好有一个专门的账户来管理git的仓库。(1)安装ssh sudo apt-get install openssh-server查看是否安装成功. ps -ef|grep sshd如果有sshd的进程,表示ssh服务打开。(2) 建立git账户adduser gitserver这里用户名就原创 2017-09-21 11:29:44 · 2266 阅读 · 0 评论 -
leetcode 695. Max Area of Island 解法
这是一道求2维图像最大面积的经典题,采用的是深度优先搜索的思路。原题的例子是:Example 1:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0原创 2017-10-08 23:42:11 · 458 阅读 · 0 评论 -
leetcode 684. Redundant Connection解法
Example 1:Input: [[1,2], [1,3], [2,3]]Output: [2,3]Explanation: Original tree will be like this: 1 / \2 - 3Example 2:Input: [[1,2], [1,3], [3,1]]Output: [3,1]Explanation: Original t原创 2017-09-26 13:53:13 · 1802 阅读 · 0 评论 -
x264编译到ffmpeg的方法
1 下载x264并编译git clone git://git.videolan.org/x264.git./configure --enable-shared --enable-static --prefix=/usrmake -j8make install解释一下,指定/usr的话,安装好,不用配置路径。j8的目的是编译起来,用8路进行make,节省编译时间2原创 2017-10-27 16:51:48 · 2905 阅读 · 0 评论 -
nginx的守护进程学习
ngx_int_t ngx_daemon(ngx_log_t *log){ int fd; switch (fork()) { case -1: ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, "fork() failed"); return NGX_ERROR; case 0:原创 2017-11-07 10:37:19 · 2568 阅读 · 0 评论 -
Quic协议在Voip的应用。
quic,voip.rtp,udp原创 2017-10-14 00:32:56 · 1352 阅读 · 3 评论 -
libquic的编译方法
从github上,clone最新版的libquic,放到指定的文件夹目录下面,比如/root/webstream/quic/libquic-master下。# cd /root/webstream/quic/libquic-master# mkdir build/# cd build/# cmake ..# make -j 4可以在/root/webstream/quic原创 2017-10-15 09:08:50 · 6125 阅读 · 4 评论 -
nginx无锁机制的学习
在nginx中,广泛应用了CAS(compare-and-swap)操作来完成进程同步。包括ngx_spinlock,ngx_trylock,ngx_rwlock_wlock,ngx_shmtx_trylock,ngx_shmtx_lock等各种锁,均由ngx_atomic_cmp_set的CAS操作来实现。CAS操作作为原子操作,在linux上最低的支持版本是GCC4.1,API是原创 2017-11-10 17:44:59 · 922 阅读 · 0 评论 -
nginx的spinlock的学习
在nginx中,广泛使用了CAS来进行各个线程,各个进程的同步访问,而单独用CAS并不能最优的实现同步的功能,需要封装一个更合理的设计。那么spinlock就设计出来了,采用了大部分用户态,偶尔内核态的方法,对频繁访问的数据进行了锁操作。voidngx_spinlock(ngx_atomic_t *lock, ngx_atomic_int_t value, ngx_uint_t spin原创 2017-11-17 23:37:37 · 364 阅读 · 0 评论 -
leetcode 729与731. My Calendar II的通用解题思路
日程安排问题,即同一时间段内不能有超过n个的事件同时发生,均可以采用imos法来解决,具体方法如下:class MyCalendar {public: MyCalendar() { } bool book(int start, int end) { rec[start]++; rec[end]原创 2017-11-21 16:29:13 · 1503 阅读 · 0 评论 -
leetCode 745. Prefix and Suffix Search的思路
这个题目考察的是数据库设计的基本思路。原题目的大意是设计一个数据过滤器,能找到匹配给定前缀和后缀的下标。最开始写了个无脑的判断前缀和后缀的方法,如下class WordFilter {public: WordFilter(vector words) { for(int i=0;i<words.size();i++) { //原创 2017-12-10 23:27:23 · 705 阅读 · 0 评论 -
git的基本流程
git的基本流程原创 2017-12-12 13:39:27 · 378 阅读 · 0 评论 -
742. Closest Leaf in a Binary Tree的思路
题目大意是,找到最临近给定节点的叶节点,例如 1 / \ 2 3 / 4 / 5 / 6给定2的话,最近的是3,给定4的话,最近的是6。思路:题目中,树的结构并不利于寻找答案,需要把树的结构转换成图,然后通过广度优先搜索,可原创 2017-12-13 10:30:14 · 442 阅读 · 0 评论 -
c++中字符串和整数转换的方法
通过sstream的转换,类似于c语言的sprintf方法,同样可以格式化输入,比sprintf的优点在于,还可以将string转换回int。#include #include using namespace std;int main(){ std::stringstream sstr; //string to int string s="1原创 2017-12-05 12:14:10 · 294 阅读 · 0 评论 -
vim写c/c++的经验总结
vim的配置与使用经验原创 2017-12-25 14:33:24 · 4207 阅读 · 0 评论 -
智能指针weak_ptr的核心源码实现
weakptr的作为弱引用指针,其实现依赖于counter的计数器类和share_ptr的赋值,构造,所以需要把counter和share_ptr也简单实现一下。counter对象的目地就是用来申请一个块内存来存引用基数,简单实现如下:class Counter{ public: Counter():s(0),w(0){}; int s; int w;};s是share_ptr的...原创 2018-03-10 00:40:47 · 7926 阅读 · 8 评论 -
c/c++在linux开发so的基本流程
由于动态链接库在保持接口不变的前提下,可以独立更新,符合模块化开发的思想,而且.so可以通过回调函数的形式,对主程序进行异步的通知,所以在中型的c/c++项目中,编写so是一个不错的选择。so的示例代码如下,PrintHello.cpp:#include <iostream>using namespace std;// 将函数名作为指针的格式为:int (*ptr)(char *s...原创 2018-03-26 12:21:55 · 2265 阅读 · 0 评论 -
git的ignore文件在c++下的编写
在文件夹根目录下新建.gitignore编辑该文件*.d*.obj*.o*.tlog*.lastbuildstate*.idb*.pdb*~*.swp然后开始share project,添加到git进行管理。另外一种思路的方法是通过排除的方式:*!*.c!*.cpp!*.cxx!*.cc!*.h!Makefile!.gitignore这...原创 2018-04-09 09:09:14 · 4186 阅读 · 1 评论 -
webrtc的(audio_device_impl.cc:326): Audio device initialization failed.报错处理
详细报错信息为:(audio_device_pulse_linux.cc:1606): failed to connect context, error=-1(audio_device_pulse_linux.cc:151): failed to initialize PulseAudio(audio_device_impl.cc:326): Audio device initializati...原创 2018-06-11 16:47:24 · 2695 阅读 · 0 评论 -
webrtc开启默认h264编解码的方法。
加入编译的路径:export PATH="$PATH:/root/webrtc_all/depot_tools" 在./build/config/chrome_build.gni中 is_chrome_branded改为true,编译支持rtc_use_h264ninja -C out/Debug就可以了...原创 2018-06-11 16:49:29 · 3492 阅读 · 1 评论 -
webrtc在c++环境下开发方法
(1)在官方网站下下载webrtc。(2)下载depot_tools,并配进环境变量,比如:在.bashrc添加export PATH=/root/webrtc_all/depot_tools/:$PATH(3)编译:gn gen out/linux/ninja -C out/linux/以上可以完成webrtc的原生操作。添加自己程序的方法:(4)在src/video下面新建test.cc,内...原创 2018-05-30 00:01:14 · 11339 阅读 · 0 评论 -
用remove_if来优雅的删除vector的元素
定义一个类:class car {public: int speed;};定义一个容器:vector<car> cars;删除cars中,speed大于100的carcars.erase( std::remove_if(std::begin(cars), std::end(cars), is_n), std::end(cars) );其中is_n的定义:bool is_n(...原创 2018-06-23 22:58:17 · 2060 阅读 · 0 评论 -
leetcode 861. Score After Flipping Matrix
题目的意思是,把一个二维0,1 nxm的矩阵,看成n个二进制数(m位),经过任意次行/列的01翻转,求这n个数和的最大值。这道题是典型的换维思考的题目,分两步来做,(1)通过行翻转使每一个数的首位为1,(2)通过列翻转得到每一列的最大值。代码如下:class Solution {public: int matrixScore(vector<vector<int>>...原创 2018-07-01 23:37:59 · 840 阅读 · 1 评论 -
c++关于素数的处理(筛选法)
素数又叫质数,即只能被1和自身整除的数,所以除了2以外的所有偶数都不是素数。这个数若不是素数,那么必然有两个因子,两个因子相等的时候,即是这个数的开方,否则,我们求较小的那个数,比较省计算资源,计算的方法如下:bool isPrime(int n){ if(n == 1) return false; if(n == 2) return true; if(n%2==0&&am...原创 2018-07-09 00:01:53 · 3244 阅读 · 0 评论 -
linux的c/c++的运行报错“terminate called after throwing an instance of 'std::system_error'”的处理
报错场景是编译的时候没问题,但是运行的时候会报错:terminate called after throwing an instance of 'std::system_error'原因是基本是编译的时候忘了加 -pthread或者-lpthread了。...原创 2018-07-07 22:24:10 · 35731 阅读 · 8 评论 -
用c++11做单例模式
#include <iostream>#include <mutex>using namespace std;template<class T>class Singleton{public: template<class... Params> static void init(Params&&... params) ...原创 2018-07-07 22:46:08 · 1073 阅读 · 0 评论 -
c++的sort函数用lamda表达式自定义排序
sort函数,可以自定义compare的方法或者重载>来完成自定义排序,而lamda表达式,也可以完成这个功能,测试代码如下:#include <iostream>#include <vector>#include <algorithm>using namespace std;class A{public: A(int _a,int _b)...原创 2018-07-15 22:31:21 · 37189 阅读 · 0 评论 -
webrtc在发送端缓存RTP包的方法
(1)rtp包的发送: 在rtp_sender.cc中,SendToNetwork方法中,每次发包前,都在packet_history_中进行备份,代码如下:bool RTPSender::SendToNetwork(std::unique_ptr<RtpPacketToSend> packet, StorageTy...原创 2018-07-21 13:29:14 · 1930 阅读 · 0 评论 -
在openssl中对SM2的公私钥进行加解密的验证
在上一篇文章中《通过openssl生成sm2的公私钥的方法》介绍了如何在openssl系统中生成公私钥对,如何对生成的公私钥对进行验证呢?在ecparam.c中,添加加解密的代码就可以了,还在《通过openssl生成sm2的公私钥的方法》添加公钥的地方,432行,在生成公钥之后,添加代码如下: i = PEM_write_bio_ECPrivateKey(out, ...原创 2018-08-03 17:03:10 · 17592 阅读 · 1 评论 -
openssl采用sm2进行自签名的方法
自签名有两种方法:1 用自己会话生成的私钥,来签发自己的csr生成证书,也可以直接生成私钥和证书2 自己做一个CA.1,2的差别在于私钥的生成和存活的时间.以1的方法如下:生成私钥./openssl ecparam -genkey -name SM2 -out priv.key生成证书./openssl req -new -x509 -sha256 -key ...原创 2018-08-05 00:41:37 · 15208 阅读 · 2 评论