自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(165)
  • 收藏
  • 关注

原创 WebRTC 源码下载 <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get

Retrying in 5 s ...

2022-08-05 17:45:12 1175 1

原创 C++ 之 auto推导遇到多态

#include <iostream>using namespace std;class Base {public: virtual void fun() { std::cout << "Base::fun()" << std::endl; }};class Derived : public Base {public: virtual void fun() { std::cout <<

2021-10-23 19:10:32 383

原创 C++ 之 std::numeric_limits 类模板

C++ 可以通过 std::numeric_limits 类模板来获取类型的最大值和最小值等,如:#include <iostream>#include <limits> // std::numeric_limitsusing namespace std;int main(int argc, char *argv[]) { std::cout << "long long max" << std::numeric_limits<long

2021-10-23 18:38:13 651

原创 Wireshark 基础用法

Wireshark 基础用法Wireshark 中的逻辑运算与:and 或 &&或:or 或 ||非:not 或 !Wireshark 中的判断语句等于:eq 或 ==小于:lt 或 <大于:gt 或 >小于等于:le 或 <=大于等于:ge 或 >=不等于:ne 或 !=Wireshark 按协议过滤stuntcpu...

2020-02-06 22:08:41 4257

原创 C++ 打印日志的宏

利用C++宏,可以很简单的编写出一个打印日志的语句代码// 文件名 log.hclass MyLog { public: ~MyLog() { ::std::cout << ::std::endl; } std::ostream& operator << (const char* s){ std::cout << ...

2019-09-16 14:04:07 964

原创 函数对象

函数对象(Lambdas)C++11允许定义内部函数,可以当做参数或者对象使用。格式和参数[capture](parameters) mutable throwSpec ->retType {statement}例如:[](int a, int b) -> int { return a + b; }[capture]:捕捉列表捕捉列表总是出现的lambda表达式的开始...

2019-09-15 16:11:30 164

原创 Linux查看某个程序占用的端口号

1. 首先查看程序的进程号例如程序名称为aaa,查询其运行进程号如下:minbo@mb ~> ps -aux | grep aaaminbo 16273 0.3 1.1 21475099312 92752 pts/2 Sl+ 10:18 0:01 ./aaa 则进程号就是16273。2. 查看进程所占端口号上面我们查到程序的进程号是16273,查询其占用端口号如下...

2019-08-21 13:48:45 25678

原创 grep时显示"匹配到二进制文件"

原因grep如果碰到\000 NUL字符,就会认为文件是二进制文件,而 grep 匹配 默认忽略二进制数据。所以要使用grep -a属性:不忽略二进制的数据。grep的-a或--text参数功能:将 binary 文件以 text 文件的方式搜寻数据解决grep -a file_namegrep --text file_name...

2019-06-26 10:04:39 26281

原创 CodeRunner激活

CodeRunner是个好东西,但是需要激活,网上搜到的激活码,需要断网才能破解成功,破解成功后,每次重新打开又要重新破解。猜测:CodeRunner在第一次打开时,会给系统发一条验证是否正确激活的消息,所以,修改hosts文件在hosts文件中,增加下面一行:127.0.0.1 coderunnerapp.com然后输入验证码,破解成功!注册码:AEAAA-AFHOO-4F7KD-...

2019-06-26 10:01:10 8944 9

原创 HAProxy 后启动报错“cannot bind UNIX socket [/var/lib/haproxy/stats]”解决

报错信息:-- Unit haproxy.service has begun starting up.5月 21 18:33:40 minbo.centos haproxy[16266]: Starting haproxy: [WARNING] 140/183340 (16277) : [/usr/sbin/haproxy.main()] Cannot raise FD limit to 16...

2019-05-21 18:40:32 3466

原创 数量不定的模板参数(Variadic Templates)

使用数量不定的模板参数(Variadic Templates)实现递归输出:#include <iostream>void print() { // 0个参数时候调用}template <typename T, typename... Types>void print(const T& firstArg, const Types&... args...

2019-05-05 23:51:56 748

原创 C++ new和delete实际执行了什么

new 操作先分配memory再调用ctorComplex* pc = new Complex(1,2);被转换成3步:(1)void* mem = operator new(sizeof(Complex)); //分配内存 operator new内部就是调用malloc()分配内存(2)Complex* pc = static_cast<Complex*>(mem...

2019-05-05 23:39:09 652

原创 Linux C++ 程序占cpu%问题排查

Linux C++ 程序占cpu%问题排查缘起对一个服务(room_status_server)进行了一些优化,并顺便修改了部分配置文件,重启后用top命令观察,发现该程序cpu几乎占到了100%。初步判断发现这个问题后,想到前两天还上线了该服务,立马去线上看了看,还好线上是正常的。那么问题肯定是刚才的修改导致的!把线上的版本拿过来运行,看到还是cpu几乎占到了100%,那很大可能是配...

2019-04-19 17:01:09 8621 4

原创 如何让一个C++函数不抛出异常

1. 尝试一如果一个fun()调用funA(),funA()可能会抛出异常,那么想让fun()不抛出异常,fun()就得catch funA()的所有异常,并且不要继续往上throw。#include <iostream>using namespace std;int funA(int a) { std::cout << "funA : " << a...

2019-03-29 13:43:43 1998

原创 Java基础整理

Java基础整理1. Java的优点简单在某些方面功能特别强,比如界面和网络Java无sizeif运算符,因为所有数据类型的长度和表示是固定的,与平台无关,这是Java的一个特点goto和const不是Java变编程语言中使用的关键字Java中标识符组成比C++多了“$”,它的用法和“_”的用法相同Java的转义字符“\”\ddd:表示1到3位8进制数据所表示的字符(ddd)...

2019-01-22 19:52:07 774

原创 C++版本比较函数

int VersionCompare(string v1, string v2) { uint32_t vnum1 = 0; uint32_t vnum2 = 0; for (int i = 0,j = 0; (i &lt; v1.length() || j &lt; v2.length()); ) { while (i &lt; v1.length() &...

2018-12-27 13:53:51 638

原创 struct/class对象初始化(C++11)

C++11提供了新的初始化struct和class属性的方法,但是仅能初始化公有成员变量。代码如下:#include &lt;iostream&gt;#include &lt;map&gt;using namespace std;class Test { public: // private和protected 下面的初始化方式不可用 uint32_t a; uint64_t...

2018-12-26 19:43:27 3095

原创 muduo定时任务取消问题

1. 基础熟悉muduo中执行定时任务有三个方法:EventLooprunAt、runAfter和runEvery。runAt:某个时间执行任务runAfter:某段时间后执行任务runEvery:定时循环执行任务这两个函数的原型: TimerId runAt(const Timestamp&amp; time, TimerCallback&amp;&amp; cb); ...

2018-11-28 17:59:31 326

原创 C++智能指针

1. 智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成:堆内存泄露(忘记释放)二次释放程序发生异常时内存泄露2. 理解智能指针从较浅的层面看,智能指针是利用了一种叫做RAII(资源获取...

2018-11-28 10:11:21 189

原创 线程变量 pthread_key_t

线程存储:Thread Specific Data线程存储作用大家都知道,在多线程程序中,所有线程共享进程中的变量。现在有一全局变量,所有线程都可以使用它,改变它的值。而如果每个线程希望能单独拥有它,那么就需要使用线程存储了。表面上看起来这是一个全局变量,所有线程都可以使用它,而它的值在每一个线程中又是单独存储的。这就是线程存储的意义。线程存储是实现同一个线程中不同函数间共享数据的一种很好...

2018-11-27 14:02:55 1766

原创 MVC、MVP和MVVM模式

1. MVC模式MVC组成视图(View):用户界面控制器(Controller):业务逻辑模型(Model):数据保存MVC通信过程Wiew传送指令到ControllerController完成业务逻辑后,要求Model改变状态Model将新的数据发送到View,用户得到反馈用户进行操作时,MVC可以分成两种方式,一种是通过View接受指令,传递给Controller...

2018-11-24 18:03:23 290

原创 iTerm2 设置某个关键字高亮

比如我要添加ERROR这个关键字一直高亮。设置方法:preferences -&amp;gt; Profiles -&amp;gt; Advanced然后点击 Edit点`+`然后输入要加入的关键字,选择Action为Highlight Text完成截图如下1iTerm2 设置某个关键字高亮比如我要添加ERROR这个关键字一直高亮。设置方法:preferences -&amp;gt; Profile...

2018-11-24 15:25:27 6004 1

原创 iTerm2 安装 fish

1. 安装brew install fish2. 设置打开 Iterm 2 自动开启 Fishecho &quot;/usr/local/bin/fish&quot; | sudo tee -a /etc/shellschsh -s /usr/local/bin/fish

2018-11-24 15:21:30 1727

原创 protobuf 八进制转义序列转中文

protobuf 八进制转义序列转中文protobuf字符串在终端打印出来是八进制转义序列,是不能直接看到中文内容,使用下面脚本进行转义。注意:使用python2执行代码# -*- coding: UTF-8 -*-import osdef Str8Decode(srt): ret = srt.decode('string_escape') return retdef Run...

2018-11-23 17:10:54 5188 1

原创 muduo的EventLoop.runAfter()的一次错误使用记录

muduo的EventLoop.runAfter()的一次错误使用记录问题出现项目中使用loop.runAfter(60, …)设置一个定时任务,但是发现预期的效果没有出现,总是感觉定时任务调用时已经过了60秒,很奇怪,加了打印,发现:loop.runAfter(60, ...), 实际调用时已经过了107~108秒loop.runAfter(90, ...), 实际调用时已经过了154~...

2018-10-26 16:30:31 515

原创 Linux服务器定时校准

Linux服务器定时校准校准命令Linux服务器运行一段时间后,就会发现时间有了误差,可以使用以下命令校准:ntpdate ntp1.aliyun.com定时校准上面的命令是可以校准,但是每天都要执行嘛(发现测试机每天2秒多的误差),怎么可以一劳永逸的解决问题?可以使用/etc/crontab实现定时,这个文件是linux的系统定时调度文件,在系统启动后会加载这个文件。文件内容:...

2018-10-26 16:23:23 2117 1

原创 Boost中计时器(timer)的使用

Boost中计时器(timer)的使用#include &lt;iostream&gt;#include &lt;boost/timer.hpp&gt;int main() { boost::timer t; std::cout &lt;&lt; "max " &lt;&lt; t.elapsed_max()&lt;&lt; "s" &lt;&lt

2018-09-08 17:59:49 2040

原创 mac环境boost安装和配置

mac环境boost安装和配置mac安装boost安装命令brew install boost安装的过程中会显示安装的位置:/usr/local/Cellar/boost/1.67.0_1minbo:homebrew minbo$ brew install boostWarning: boost 1.67.0_1 is already installed and ...

2018-09-08 17:07:12 4922

原创 RPC

RPC上世纪80年代由 Bruce Jay Nelson 提出。概念 RPC(Remote Procedure Call)远程过程调用 R:Remote 遥远的 P:Procedure 程序、过程 C:Call 调用 俗话:调用遥远的程序RPC结构UserUser-stubRPCRuntimeServer-stubServer这 5...

2018-08-26 22:42:39 184

原创 std::ref和std::cref使用

std::ref和std::cref解释std::ref 用于包装按引用传递的值。 std::cref 用于包装按const引用传递的值。为什么需要std::ref和std::crefbind()是一个函数模板,它的原理是根据已有的模板,生成一个函数,但是由于bind()不知道生成的函数执行的时候,传递进来的参数是否还有效。所以它选择参数值传递而不是引用传递。如果想引用传...

2018-08-09 20:42:44 30437 5

原创 std::string::npos的使用

std::string::nposstd::string::npos是一个常熟,它等于size_type类型可以表示的最大值,用来表示一个不存在的位置,类型一般是std::container_type::size_type。定义static const size_type npos = -1;#include &lt;iostream&gt;int main(int a...

2018-08-06 15:56:54 37284 3

原创 boost::noncopyable使用

boost::noncopyable为什么要boost::noncopyable在c++中定义一个类的时候,如果不明确定义拷贝构造函数和拷贝赋值操作符,编辑器会为我们自动生成。 但是有时候我们不需要类的复制语义,希望禁止复制类的实例。这时一个很经典的C++惯用语法,只要私有化拷贝构造函数和拷贝赋值操作函数即可。 boost中的noncopyable为实现不可拷贝类提供了简单清晰的解...

2018-07-23 13:59:06 3378

原创 Charles破解(全平台)

在线生成charles.jar文件:Charles 在线破解工具替换charles.jar文件完成

2018-06-25 13:32:12 315

原创 telnet虚拟机No route to host的解决方法

#telnet虚拟机No route to host的解决方法## 问题知道虚拟机的ip地址,而且可以ping的通:```[minbo@ares ~]$ ping 192.168.62.110PING 192.168.62.110 (192.168.62.110) 56(84) bytes of data.64 bytes from 192.168.62.110: icmp_seq=1 ttl=...

2018-06-08 15:30:04 30796

原创 结识protobuf

## protobuf概述&gt; Google Protocol Buffer&gt; 一种语言无关、平台无关、扩展性好的用于通信协议、数据存储的结构化数据串行方法。&gt; 可以在不影响向后兼容的情况下随意给数据结构增加字段,旧有的数据会忽略 新的字段。所以如果使用ProtocolBuffer作为通信协议,你可以无须担心破坏 现有代码的情况下扩展协议。## 为什么不用 XML?Protocol...

2018-05-20 14:52:28 224

原创 代码整洁之道

有意义的命名避免误导做有意义的区分使用读的出来的名称避免使用编码避免思维映射类名:类名和对象名应该是名词或名词短语,不应当是动词。避免使用Manager、Processor、Data或Info这样的类名。方法名:方法名应当是动词或动词短语,别扮可爱:如果名称太耍宝,那就只有同作者一般有幽默感的人才能记得住。每个概念对应一个词别用双管词使用解决方案领域名词使用源自所涉问题领域的

2018-04-23 19:19:07 232

原创 C++中 =defaule 和 =delete 使用

编译器默认为一个类生成的默认函数默认构造函数默认析构函数默认拷贝构造函数默认赋值函数移动构造函数移动拷贝函数class DataOnly {public: DataOnly () // default constructor ~DataOnly () // destructor ...

2018-04-22 01:24:42 34320 3

原创 C++ 中new handler的使用

当operator new没有能力为你分配出你所申请的memory,会抛出一个std::bad_alloc exception。某些老版本的编译器则是返回0。 也可以让编译器不抛出异常,只返回0,做法:`new (nothrow)Foo;C++在抛出异常之前(不止一次)调用一个由程序员知道的handle。(C++在new失败的时候,会调用程序要指定的函数) 形式为: t...

2018-04-22 00:24:09 1250

原创 谈谈const

const member functions (常量成员函数) 告诉编译器,该成员函数不能改变类的成员变量 项目 const object(常量对象 data members不能改变) non-const object(非常量对象 data members可以改变) const member functions(保证不更改data members) ye...

2018-04-21 21:27:12 233

原创 自己管理C++内存(内存池)

内存管理的目的:提高速度,降低空间浪费率 减少malloc的使用。(可以先分配一大块,再一点一点的使用) 较少cookie的使用。 版本一#include &lt;iostream&gt;using namespace std;class Screen {public: Screen(int x):i(x) {} int get() {...

2018-04-20 00:07:43 836

空空如也

空空如也

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

TA关注的人

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