先浅谈一下erlang。首先erlang确实是门高效简洁的语言。erlang在国内主要是做游戏和消息通宵这两块。其中游戏撑起了一大片天,不乏很多游戏公司去名校校招。然而谁都没听过它,故此校招方面笔试面试题都是c c++ java的基础题和算法题,只要基础一般能抗压就能过。社招方面游戏的话都是一些erlang的问题(下面会列出一些)和抗压(懂的自然懂)方面的了解,一般有点erlang经验的话工作还是很好找的,如果不会erlang之前是java c++游戏后端的话大一点的公司也接受转。社招如果是做消息通讯的,会erlang是绝对的加分项,更多要求的是对各种协议原理代码优化方面的,收别的语言转erlang的挺多。欢迎入坑。
(这里主要是提出问题,答案其实都能搜到,面试官也会随机引申问题的,关键是能不能得到他想要的回答)
1.笔试题
一般erlang游戏公司是不会让人做题的,但是还是有几家,题会出几道c基础题,然后叫你用erlang实现二叉树 链表等数据结构,用erlang实现排序算法等,照着c翻译过来就行
2.OTP相关
必问的一块。常见的有问四大行为是哪些,常用场景是什么,会问一点相关函数的常用参数选项(一般就到这)gen_servery又是四大行为中着重问的。再深一点会问到怎么大概实现这个行为(变态的会让人撸gen_server源码)
3.定时器
定时器的实现方式,erlang:send_after,erlang:start_timer,这两个函数的区别,自己写个loop帧循环检测。把定时器附加在自己进程和单独起一个定时器管理进程的优缺点,哪种定时器一般附着在自己身上,哪种一般统一管理。
4.ets,进程state,进程字典
这是常用的存储临时数据的三种方式,各自优缺点 ,效率。ets的参数选项。
5.发送消息的方式
!,跨进程通信: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).
6.二进制匹配相关
一般是让你取出第几个字节的数据,类似这种匹配就行<<_:2/binary, Char:1/integer, Int:31/integer, _>> = Bin.
7.递归
1加到100写个递归函数之类的
8、调试程序的方法
主要是打印控制台输出调试。还可以转储存文件,使用错误记录器,idea编辑器的话还可以断点(没用过)
9.排查内存 定位性能瓶颈 优化等
工具有etop cprof等
转:erlang 内存被大量占用,跟踪过程 - hongmao - 博客园
10.热更流程,原理
11.游戏地图机制
九宫格 灯塔等。消息优化,过滤消息,筛选消息,模糊消息等(没必要或者类似重复的消息都删了就能减少很多的消息传递)
12.技能的具体实现
13.服务器出现问题,线上处理流程
保证大部分玩家正常游戏的情况下,查日志 后台记录 反馈问题,和策划商量解决方案补偿方案
14.功能复用性的设计
比如都是类似的签到活动,只是奖励配置不一样。封装成一个行为,在获取奖励的时候重写一下这个回调函数。如果经常变动那就采用MFA的方式。
15.Erlang 的垃圾回收机制原理
16.erlang启动参数
17.跨服怎么设计的
18.合服流程
19.数据库相关
mysql,mongo常见选项和问题。db缓存策略
20.网络相关
如果公司是用ranh cowboy等开源库的话回问一点相关的,如果是公司内部写的会问问基本原理什么的。
如果是公司要的是业务仔,基本上只会追着你问你实现的功能的具体做法,比如什么排行榜,交易,场景活动等。
最后的碎碎念,看到这已经可以关闭了。erlang确实是挺好的,奈何生活是无奈的。别的语言转erlang是十分容易的,erlang要想转出去就难了。祝大家都能找到一份不错的工作。