最近的一次面试经历

最近项目解散了,我离开了公司,出来找工作。在我更新简历后,有hr找到我面试,是我喜欢的公司,我欣然接受了。hr给我定了岗位,我觉得也可以。

本来我想等面几家公司后,有经验了再面这家公司,可就这么巧合。

一面

很快,hr帮我预约了一面,是视频面试。

等到快面试的时候,hr联系我改期,说是其中一位面试官临时有事。

我电脑关机,准备去吃饭。有人打电话给我,原来是另外一位面试官,问我没来面试的事,我跟他说hr改期了。他表示不好意思,他没有收到通知,误会了。我跟他说没事的。

第二天,hr帮我重新预约了一面。

面试真的要开始了,我提前5分钟进入视频会议室,看到已有一位面试官在里面。他看到我,主动跟我打招呼,跟我抱歉之前的事。

紧接着,他说,另外一个面试官应该是准点才来,让我稍等下。

我点点头,说,“没事的,我也是提前进来的”。

很快,另外一位面试官进来了。

我们互相问候一声后,我开始自我介绍:“我叫陈伟琪,我…”

突然,他打断了我,说:“跳过这个环节吧,我们提问题,你回答。我看过你简历,简历附带的博客我也看了,我就先问你了解的这些技术吧”。

我有点惊愕,但很快反应过来,说:“好的”。虽然我以前附带博客地址,但几乎很少有人注意到。
继续阅读最近的一次面试经历

Google Protobuf协议分析

protobuf 是google开源的一个序列化框架,类似xml,json,最大的特点是基于二进制,比传统的XML表示同样一段内容要短小得多。还可以定义一些可选字段,用于服务端与客户端通信。前面几篇文章说了protobuf的用法,看到网上也没有分析protobuf协议的文章,就利用一些时间写了 protobuf 的协议分析。

protobuf协议核心思想
基于128bits的数值存储方式(Base 128 Varints)
数据表示方式:每块数据由接连的若干个字节表示(小的数据用1个字节就可以表示),每个字节最高位标识本块数据是否结束(1:未结束,0:结束),低7位表示数据内容。(可以看出数据封包后体积至少增大14.2%)

数字1的表示方法为:0000 0001,这个容易理解
数字300的表示方法为:1010 1100 0000 0010
继续阅读Google Protobuf协议分析

Erlang集群IP及端口管理

erlang集群是依靠epmd维护的,epmd是erlang集群节点间端口映射的守护进程,负责维护集群内的节点连接,提供节点名称到IP地址及端口的解析服务。

epmd 自定义端口号

epmd端口配置
默认情况下,epmd绑定在4369端口。但是,端口固定的话,容易遭受攻击,可能导致新节点的认证失败而无法启动,或无法加入集群。或者要在一台机器上部署不同的erlang集群,希望不会互相干扰。
epmd -daemon -port 5000
如果想用调试模式启动 epmd,使用 epmd -d -port 5000

另外,epmd通常伴随着erlang节点启动时自动启动,无须手动处理,所以,这里也可以通过修改erl启动参数以达到自动调整epmd端口。
erl -name hello@127.0.0.1 -epmd “epmd -port 5000 -daemon” 
继续阅读Erlang集群IP及端口管理

在erlang项目使用protobuf

protobuf是google的一个序列化框架,类似XML,JSON,其特点是基于二进制,比XML、JSON表示同样一段内容要短小得多,还可以定义一些可选字段,广泛用于服务端与客户端通信。文章将着重介绍在erlang中如何使用protobuf。

首先google没有提供对erlang语言的直接支持,所以这里使用到的第三方的protobuf库(erlang_protobuffs
继续阅读在erlang项目使用protobuf

Erlang消息选择性接收特性

从 rabbitMQ 代码中找到 gen_server2 , 对gen_server进行了一些优化。看到前辈写的博文也提到这个,引发了我的思考。见 gen_server2 – OTP gen_server优化版 。

gen_server2 引发的思考

正如 litaocheng 所说的:
gen_server 和 gen_server2 最大的不同是:
gen_server2 收到任何一条消息放到外部的队列中,当VM内部消息队列为空后,才进行消息处理,继续循环
gen_server 收到任何一条消息后,立即进行处理,处理完成后继续循环
继续阅读Erlang消息选择性接收特性