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的地址上,才能调用该函数。

more>>

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

more>>

介绍

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时间等。

more>>

介绍

Hugo是一个强大的静态博客生成器,由spf13使用Golang开发。在性能和生成文章的速度上都不错。目前的版本是0.20.6,依然没有迈出1.0的大版本号。一直在用Hugo进行博客的写作。(半年多没有更新博客了,逃

Caddy同样也是一个由Golang开发的HTTP server,其最大的亮点就是内建了HTTPS和HTTP2的支持,同时自动能够向Let’s Encrypt申请证书。同时,支持Middleware的功能,使用Golang撰写的Middleware能够支持各种各样的功能,同时任何人都可以撰写自己的Middleware,个性化这个HTTP Server。

more>>

今年运气贼好,居然通过摩根的电话面试,邀请我到上海去面试。来回路费加上一晚上住宿费全包, 果断去啊。顺便还绕道到苏州看看晓良和学长, 去微软苏州信仰充值一波。

面试前一天9点的飞机,11点到上海虹桥。然后直接买票到苏州,苏州微软充值了一波信仰。 晚上9点从苏州回来,10点半到住的地方。

面试没有强制要求穿正装,但是还是推荐穿正装。我们面试的有10个人, 有2个没有穿正装,其他都是正装出席。第一次穿正装,非常不适应。 还以为公司内部上班大家都穿正装,结果到了之后发现并没有多少人穿正装。都和普通上班一样。 尽量找个住得近的地方,不要迟到。我们今天面试的时候有两个人就迟到了,不太好。

面试总共有3个环节,上来首先HR和部门的人会介绍面试安排,岗位区别。 仔细看了看JD,EE的开发有一部分侧重在基础架构,他们都是Java开发。 特别强调了如果想去C++就不要去EE。 同时强调所有的面试都是E文,不能和面试官说中文。

完了之后就开始做题,3道比较简单的算法题。这里一定要把题目阅读仔细, 我自己读题的时候不认真,最后一题附加题忽略了一个细节,导致最后一题崩盘。

完了之后就是3轮技术面试,摩根的技术面试非常有意思,3个面试官会商量好 各自问的领域。绝对不会问重复。每轮大概40分钟。

more>>

恩,截止到今天,算是把工作给签下来了。之前找了一段时间的运维开发,但是自己还是想去做开发,所以就滚去链家写PHP去了。

纠结了好几天什么都不想干,还是没有心仪的offer,要是有心仪的我就屁颠屁颠的去了。

感觉目前有倒闭的风险,也有说要上市的公司(又没有股份说个蛋,但还行了。先凑合过吧。

PHP是最好的语言,还是入了这个行。

选择还真是无比痛苦啊。。老老实实搬砖吧。感觉今年的失误在没有刷题上,下班回来就想睡觉,什么都不想干。以后要多刷题才是王道。

切记自己不要做死。

more>>

Yubikey 4 介绍

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

Yubikey 4功能

Yubikey 4主要有两个功能,一个功能是OTP和两步验证,另外一个功能是GPG smart card。

more>>

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账户下开服,不安全。除了第一步,其他请在另外非管理员账户下做。

more>>