Erlang笔试题

服务端开发工程师笔试题

30分钟内完成以下题目

一、Erlang有哪些运算符?

算术运算符:+ - * / div rem 
比较运算符:=:= == =/= /= > >= < =< 
逻辑运算符:and andalso or orelse
位运算符:bsl bsr
位逻辑运算符:band bor bxor bnot 

二、请写出Erlang条件表达式、循环。

if ... ->
        ...;
    true ->
        ...
end.

case ... of
    ... ->
        ...;
    ... ->
        ...
end.

F(Re, 0) -> Re;
F(Re, N) -> 
    R = Fun(Re),
    F(R, N -1).

三、如何匹配binary从第3字节开始的一个32位有符号整数?

<<_:2/binary, Char:1/integer, Int:31/integer, _>> = Bin.
Char1则结果是-Int,否则就是Int。

四、请举例替换二进制字符串中的指定字符串。

把<<"abcdef">>中的abc替换成xyz:
{B1, B2} = split_binary(<<"abcdef">>, 3),
list_to_binary(["xyz", B2]).

五、怎么使用Erlang语言实现Key和Value的存储?

1,进程字典:put(key, value)
2,ets表:ets:new(abc, [named_table]).  ets:insert(abc, {a,b}).

六、跨进程通信的方式有哪些,跨节点呢?

跨进程通信:erlang:send(Dest, Msg), erlang:send_after(Time, Dest, Msg), 
        gen_server:cast(pid(), Msg), gen_server:call(pid(), Msg).
跨节点通信:erlang:send({RegName, Node}, Msg), erlang:send_after(Time, {RegName, Node}, Msg), 
        rpc:cast(Node, Mod, Fun, Args), rpc:call(Node, Mod, Fun, Args).

七、有哪些调试程序的方法?如何判断erlang节点内进程的性能瓶颈?

调试方法:1、打印;2、转储至文件(lib_misc:dump/2);3、使用错误记录器。
判断进程性能:先使用etop查到了cpu占用时间较多的进程id,然后可以使用eprof进行进一步的分析
参考[erlang性能分析及进程监控工具](https://blog.csdn.net/huang1196/article/details/38660325)

八、请简述一下服务器线上出问题处理的流程。

优先保证玩家的正常游戏行为,如果服务器挂了先重启,同时立刻根据日志、后台记录和反馈查bug,及时更新。

九、你以前做过的游戏地图机制是怎样的?战斗是怎么保证实时性的?

将玩家的可见区域作为一个九宫格,每个玩家的战斗信息广播给九宫格内的玩家。使用状态同步机制保证实时性。

十、请简述战斗技能实现的思路(如技能的作用对象范围的计算方法,玩家与环境的通信方式)。

技能作用范围是在九宫格内根据技能作用区域(如圆形、方形等)计算九宫格内处于作用区域里的对象,圆形可根据原点坐标和半径判断,方形可根据某个定点、角度、长宽来计算。

十一、描述你认为的场景怪物寻路最高效的算法。


这是某游戏公司笔试题,我之前没做过游戏行业,上面关于游戏的几道题有点懵,其余的题目还是比较基础的,希望对大家有帮助=^_^=

你可能感兴趣的:(Erlang,其他)