Life is Hard

捡起了多年没有更新的博客,做项目或者有意思的东西会往上更新,尝试让自己输出。

几个有趣的面试概率问题汇总

最近经历了一些面试,总结了一些有意思的两个问题。他们用到的概率只是都很简单。但是想不到就是想不到。 ...

2018-09-23 · qhsong

两个C++小问题汇总

本文对近期使用C++的两个问题进行汇总。 ...

2018-01-07 · qhsong

C++指向成员函数指针

C++的语法总是会隐藏在一些边角上的语法,让你觉得还能这么干。最近在了解boost::bind的时候发现了这个语法,之前都不了解这个语法的。拿出来介绍一下,也算记录一下。这个语法在boost::bind还有Inside C++ Object Model中都有用到。 代码和表达均来自与ref[1]。 成员函数指针 废话不多说,上代码: class Foo { public: int f(string str) { cout<<"Foo::f()"<<endl; return 1; } }; int main() { int (Foo::*fptr)(string) = &Foo::f; Foo obj; (obj.*fptr)("str"); Foo *p = &obj; (p->*fptr)("str"); } 如上代码所示, int (Foo::*fptr)(string)定义了一个Foo类中的一个成员函数指针,其指向了Foo::f函数。相比起普通函数存放的是函数所指向的地址,其存放的是这个函数在类中相对的offset,这样只要是有相同的内存offset的均能互相转换。 所以要调用它,必须绑定在对应的class object的地址上,才能调用该函数。 ...

2017-10-15 · qhsong

使用Caddy快速搭建http2 proxy

Caddy介绍 Caddy是一个使用Golang开发的http服务器,其主打的特点就是快速支持https和HTTP2。本站的博客也是使用它搭建的,详细搭建过程可以参考这里。最近在其更新的0.10.7中,支持了Froward Proxy,Chrome浏览器也内建了对HTTP2 proxy的支持。 Caddy的Proxy支持一下功能: HTTP2 Proxy Probe resistance,当验证错误时,不会返回HTTP 407 错误。当有Probe进行探测时,其不会就直接暴露出自己是一个Proxy(实验阶段,比较有意思) Basic Auth IP hiding Servers PAC file ...

2017-09-24 · qhsong

sofa-pbrpc源码分析(1)

介绍 sofa-pbrpc是百度开源的一个C++ RPC库,使用Google Protobuf作为序列化协议,Asio网络库开发的一个C++ RPC库,现在有很多公司也都在使用。用他来学习boost::asio,C++11的一些新语法是个不错的选择。 计划会通过一系列的文章来研究这个库,并且学习他的一些用法,以及C++语法的笔记。 一个典型的服务器端程序如下所示: int main() { SOFA_PBRPC_SET_LOG_LEVEL(NOTICE); sofa::pbrpc::RpcServerOptions options; options.work_thread_num = 8; sofa::pbrpc::RpcServer rpc_server(options); if(!rpc_server.Start("0.0.0.0:12321")) { SLOG(ERROR, "start server failed"); return EXIT_FAILURE; } sofa::pbrpc::test::EchoServer *echo_service = new EchoServerImpl(); if (!rpc_server.RegisterService(echo_service)) { SLOG(ERROR, "register service failed!"); return EXIT_FAILURE; } rpc_server.Run(); rpc_server.Stop(); return EXIT_SUCCESS; } RpcServerOptions类里面主要是启动server的一些参数,位于rpc_server.h文件中,主要定义的是Server的启动参数,如工作线程数量、io_service 池大小、keep_alive时间等。 ...

2017-05-26 · qhsong

使用Caddy和Hugo构建个人博客

介绍 Hugo是一个强大的静态博客生成器,由spf13使用Golang开发。在性能和生成文章的速度上都不错。目前的版本是0.20.6,依然没有迈出1.0的大版本号。一直在用Hugo进行博客的写作。(半年多没有更新博客了,逃 Caddy同样也是一个由Golang开发的HTTP server,其最大的亮点就是内建了HTTPS和HTTP2的支持,同时自动能够向Let’s Encrypt申请证书。同时,支持Middleware的功能,使用Golang撰写的Middleware能够支持各种各样的功能,同时任何人都可以撰写自己的Middleware,个性化这个HTTP Server。 ...

2017-04-30 · qhsong

Yubikey 4 入手心得和折腾体会

Yubikey 4 介绍 Yubikey是国外一家公司出的用来做OTP的一个硬件设备,同时它也是一个GPG 的smart card。买它的原因是因为公司需要我们使用Github的人都最好有一个GPG Key对我们的Commit做个签名,而证书的管理是个难题,证书拷过来拷过去的也就没有什么安全性可言了。这东西在Tuna那边已经被安利了好久了,于是就买了。结果发现玩的根本停不下来,太有意思了。OTP功能到哪里都适用,最近都把我的ssh登陆换成了使用Yubikey来认证,感觉比我那个证书登陆不知道高到那里去了。 Yubikey 4功能 Yubikey 4主要有两个功能,一个功能是OTP和两步验证,另外一个功能是GPG smart card。 ...

2016-10-15 · qhsong

在Centos7.3下开设一个饥荒服务器

Centos7.2下建立饥荒服务器 坑爹的Klei,2年前把新建服务器的方式换了,然后饥荒wiki上不更新。找了很久才找到教程,主要参考: Klei论坛Linux配置教程(配置文件有问题) 知名博主ttionya(配置文件主要参考) Klei论坛关于配置文件解释 思路上来说,主要需要先安装Steam,然后通过Steam安装DST(Don’t Starve Together)。然后进行相关配置文件,然后run就好了。要新建一个服务器需要开启2个DST实例,每个实例大概需要500-600M内存,再加上其他mod啊什么乱七八糟的,建议在2G内存服务器上开服。1G内存的服务器基本开不起来。CPU倒不是太大问题,基本上单核也就能吃得消。 忘了说了,请不要在root账户下开服,不安全。除了第一步,其他请在另外非管理员账户下做。 ...

2016-10-03 · qhsong

从男人开始学习bash(1)

man是大家经常用的命令,但是学习bash的时候有很多书。今天发现man bash是一个不错的资源,摘抄一些供大家学习。 脚本加载顺序 When bash is invoked as an interactive login shell, or as a non-interactive shell with the –login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The –noprofile option may be used when the shell is started to inhibit this behavior. When a login shell exits, bash reads and executes commands from the files ~/.bash_logout and /etc/bash.bash_logout, if the files exists. When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the –norc option. The –rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc. 当bash作为一个交互式的登陆程序启动时,首先会读取/etc/profile里的内容,然后依次找~/.bash_profile, ~/.bash_login, and ~/.profile。退出时,也是执行/.bash_logout ,/etc/bash.bash_logout。当以不登陆的shell启动时,就执行~/.bashrc。 ...

2016-08-30 · qhsong

使用Gns3和EXOS进行网络模拟

gns3是一个开源的网络模拟器,类似PacketTracer。它支持很多种设备,可以把Docker container、Virtual box、VMware以及思科各种系列(除了Nexus系列)的交换机和路由器导入到模拟器中,进行网络组网测试。目前有很多家公司都在用它来进行网络模拟。它也可以用于CCNA考试里的网络模拟。 安装 gns3可以安装在多个操作系统中,支持Windows,Linux,OSX等,具体安装文档参见这里。它分为两部分,一部分是模拟器的核心部分,另外一部分是Gui作为客户端,是用Qt写的。直接安装的话就是安装它的all-in-one的版本,将两个部分安装到一起。 当然,这两个部分也可以分别安装。我比较推荐的是将模拟器核心安装到虚拟机中,官方提供了VirtualBox和VMware的Ovf文件,可以直接作为模板导入到虚拟机中。安装时不推荐安装到VMware player中,一定要安装在Vmware Workstation里面,因为Player的网络功能太差,很多东西功能后面没法用。可以直接到这里下载对应版本的客户端和服务器。它对Ubuntu系列的支持比较好,Redhat系列支持不太好,很多包都还是不可用,不推荐在CentOS下安装。 它同时还可以将服务器部分部署到ESXi中,具体我没试过,如果主机是Doker的话,在ESXi中应该很方便。但是如果主机是VirtualBox或者Vmware的话,ESXi可能便利性可能没那么高。 安装完成之后就可以按照文档提示导入相关的镜像和主机即可,所有的配置都在GNS3 preferences中完成。 如果你觉得思科的交换机用的不爽,有一些高级功能没有的话,你可以试试EXOS的交换机镜像。安装方法在这里。这个文档总结了Gns3常用的安装方法,可以看看。 在配置Docker时,如果是在虚拟机里面,则需要去虚拟机里面安装Docker images。EXOS包含很多高级功能,如LLDP,DCBX。 ...

2016-08-15 · qhsong