继上一部分往下
- 一、OTP相关
- 二、定时器
- 三、运算符
- 五、Erlang有哪些运算符
- 六、请写出Erlang条件表达式、循环
- 七、如何匹配binary(二进制位也就是字节,默认的话是比特位)从第三字节开始的
- 八、请举例替换二进制字符串中的指定字符串
- 九、怎么使用Erlang语言实现Key和Value的存储
- 十、跨进程通信、跨节点(服务器)通信方式有哪些
- 十一、请简述一下服务器上线出问题处理的流程
- 十二、有哪些调试程序的方法?如何判断erlang节点内进程的性能瓶颈?
- 十三、你以前做过的游戏地图机制是怎样的?战斗是怎么保证实时性的?
- 十四、请简述战斗技能实现的思路(如技能的作用对象范围的计算方法,玩家与环境的通信方式)
- 十五、描述你认为的场景怪物寻路最高效的算法。
- 十六、分别用尾递归、lists模块、列表解析找出0-9的偶数
- 十七、写一个函数,功能如下:
- 十八、尾递归实现 1+2+3+...100
- 十九、求hd(tl(tl([1,2,3,4,5,6])))的值
- 二十、[1,4,9] = [X * X || X <- [1,2,3,4,5], _ * _] ,成立的表达式?[列表速构就是集合]
- 二十一、[1, 3, 5] = [X || X <- [1,2,3,4,5,6], _*_],该表达式成立的条件是什么?
- 二十二、实现keytake(Key, N, TupleList1) -> {value, Tuple, TupleList2} | false
- 二十三、求运行test()的输出
- 二十四、[A, B, C | T] = "abclovegamexxx",求A、B、C、T的值。
- 二十五、求test()的返回值
- 二十六、求该程序所有可能的输出
- 二十七、求[{X, Y} || X <- [1, 2, 3], Y <- [1, 2, 3], X >= Y]的值。(答:[{1,1},{2,1},{2,2},{3,1},{3,2},{3,3}])
- 三十一、设计一个背包系统,提供增加、查找、排序等功能,请设计数据结构
- 三十二、用erlang实现将二进制数据转为16进制表示的字符串
- 三十三、gen_server:cast和erlang:send()都可以向指定进程发消息,有什么区别
- 三十四、en_server远程call一个节点方法的过程
- 三十五、gen_server:call({Name, Node}, Request)可以call远程节点进程,和call(Node, M, F, A)有什么区别?
- 三十六、时间函数
- 三十七、数据类型
- 三十八、ETS表
- 三十九、进程相关
- 四十、消息发送
- 四十一、起应用流程
- 四十二、socket编程
一、OTP相关
- gen_server:cast和erlang:send都可以向进程发送消息,有什么区别?
答:gen_server:cast底层调用的就是erlang:send,消息格式为{’$gen_cast’, Request},但是加上了no_connect如果没连接上,就返回false - spawn和apply的区别
答:spawn是创建进程、apply是过程调用。spawn一般是spawn(Fun)或者spawn(M,F,A),apply(M,F,A) - 四大行为模式
答:gen_server、gen_fsm、gen_event、supervisor
1)gen_server:start、handle_cast、handle_call、handle_info、terminate、code_change
2)gen_fsm
3)gen_event
4)supervisor
- start and start_link
start创建的进程是一个独立的gen_server进程
start_link创建的进程是是监控进程的子进程,有link关系
类似的又spawn和spawn_link、proc_lib:start和proc_lib:start_link
二、定时器
- gen_server实现定时
答:1秒后会超时,调用handle_info,无限循环调用handle_info,info为‘timeout’
-define(Time, 1000).
init([]) ->
{
ok, State, ?Time}.
handle_info(Info, State) ->
io:format("timeout 1seconds .. ~p~n", [Info]),
{
noreply, State, ?Time}.
- send_after定时器
答:erlang:send_after是BIF函数,它们吧计时器挂在进程自己身上,so尽量使用erlang:send_after
- erlang:send_after和erlang:start_time的区别
三、运算符
1 == 1.0 返回 true
1 =:= 1.0 返回false
1 /= 1.0 返回false
1 =/= 1.0 返回true
(0 == 0) or (1/0 > 2) 返回exception error
(0 == 0) orelse (1/0 >2 ) 返回true
true or ok 返回bad argument
true orelse ok 返回true
true and ok 返回bad argument
true andalso ok 返回ok
true andalso ok andalso false 返回bad argument
true andalso true andalso ok 返回ok
1 div 2 返回0
1 rem 2 返回1
1 / 1 返回1.0
not (1 > 2) 返回true
11 xor10 返回01(异或相同为假不同为真)
true xor true 返回false(相同为假,不同为真)
2#11 bor 2#10 返回3(或运算,1与任何都等于1,00为0)
2#11 band 2#10 返回2(与运算,1与1等于1,其他为0)
2#10 bxor 2#10 返回0(异或,相同为假,不同为真)
bnot 2#10 返回-3(一元 not 位运算,全部为真并且负值)
2#10 bsl 1 返回4
2#10 bsr 1 返回1
五、Erlang有哪些运算符
算术运算符:+、 -、 *、 /、 div、 rem
比较运算符:==、=:=、=/=、>=、 =<
逻辑运算符 : and or andalso orelse
位运算符: bsl、bsr
位逻辑运算符: band bor bxor bnot(与,或,异或,全部为真且负或正)
六、请写出Erlang条件表达式、循环
if
... ->
xxxxx;
true