Erlang 面试和笔试题

  • Erlang 的垃圾回收机制(gc)原理?
    https://www.erlang-solutions.com/blog/erlang-garbage-collector.html

  • Erlang 的调度机制?
    英文版: https://hamidreza-s.github.io/erlang/scheduling/real-time/preemptive/migration/2016/02/09/erlang-scheduler-details.html
    中文版: https://szpzs.oschina.io/2016/12/11/erlang-scheduler-details/
    Erlang 调度模块: http://erlang.org/doc/man/scheduler.html

  • Erlang 的监控树,重启策略?
    http://erlang.org/doc/design_principles/sup_princ.html

  • gen_server:info 、gen_server:cast、gen_server:call 对应在什么情况下使用
    http://erlang.org/doc/design_principles/gen_server_concepts.html
    https://learnyousomeerlang.com/clients-and-servers

  • Erlang 的进程通信和节点通信?
    进程通信: http://www.cnerlang.com/article/bingfa/40.html
    节点通信: https://congleetea.github.io/blog/2017/04/12/erlang-node-communication/

  • Erlang 的epmd?
    https://blog.csdn.net/mituan1234567/article/details/52767290

  • 简单描述erlang 这门语言的优秀的地方?
    摘自维基百科

    • 并行程序设计 在语言中,可以借由spawn/*函数,将特定的函数设置为独立的进程,之后可以做跨进程通信。
    • 函数式程序设计 由于Erlang早期以Prolog开发制成,受语言特性影响,即成为函数式语言。
    • 单次赋值 每个变量只能跟数据绑一次,所以,不像一般程序设计语言的变量可以多次指定为不同的值。单次赋值的好处是状态单纯,使程序容易阅读。
    • 及早求值或严格求值 Erlang基本求值策略为计算机语言中及早求值之特性。而且,可以借由明确使用无参数的λ表达式,将特定函数设置为惰性求值策略。
    • 动态数据类型与类型系统 有编译时期的类型检查系统支持。
    • 快速失败 在运行时期发生的错误,会由错误位置提交消息,发生错误的进程立刻停止执行。借由进程通讯机制,可以自动传递错误、捕捉错误,使其他进程能够帮助处理错误。
    • 代码热更新 由于Erlang是函数语言,可以撰写特定的程序结构,制作即时更换新版函数的机制。
    • 脚本语言 Erlang实现提供了脚本运行方式。
  1. Erlang 的查看内存的几种方式?
    https://blog.csdn.net/erlib/article/details/8914959
  2. 是否了解smp? 有smp支持的erlang?
    smp(Symmetric multiprocessing): 使用操作系统线程实现多个调度器,利用多核多CPU的优势,可以把实现的细节对开发者隐藏起来,可以不用修改代码,甚至不用重新编译就可以使用,可以有非常灵活的启动选择和运行时调整。
    有 smp支持的erlang vm 有1 - 1024个scheduler每个Scheduler运行于一个独立的操作系统线程,操作系统决定它是否要在不同的核上面运行。由于多个Scheduler从同一个公共运行队列中去除需要运行的erlang进程和IO任务,所以对共享数据进行锁保护
  3. ETS 和DETS的区别?
    ETS是存储在内存的。数据是临时的,效率高
    DETS是存储在磁盘的。数据是持久的。所以效率低
  4. ETS表类型set、ordered_set、bag、duplicate_bag的各个底层实现算法?
    ets表的底层是由哈希表实现的,不过ordered_set例外,它是由平衡二叉树实现的
  5. 进程和线程的区别?
    地址空间:多个线程同属于一个进程,它们的共享该进程的地址空间,而各个进程之间是独立的地址空间。
    资源拥有:同理,各个进程之间的资源是独立的,而同一个进程的线程共享本进程的资源比如内存,I/O,cpu等。
    执行过程:每一个独立的进程都有自己的程序入口,独立运行,但是线程不能独立运行,必须依赖应用程序,
    线程是处理器调度的基本单位,进程和线程都可以并发执行。
    线程执行开销小,不利于资源的管理和保护,线程一般在smp 机器上运行。
    进程执行开销大,可以很好的进行资源的管理和保护,进程可以跨机器前移
  6. 递归和尾递归的区别?
    递归: 不断调用自身函数,直到遇见结束条件。
    函数调用自身,称为递归。如果尾调用自身,就称为尾递归
    递归时如果N足够大,可能造成栈溢出,但是两种递归各有优势,当Sum的数据很复杂,尾递归效率就会受到限制,总之具体情况,选择合适的递归。
  7. tuple 和 list的区别,为什么有list了,还要tuple?
    erlang有两种复合结构,tuple和list,两者的区别是tuple子元素的个数是固定不变的,声明后就不能改变了;而list是可变的,可以通过[H|T]来取出或插入新元素
  8. 洗牌算法?
-module(shuffle).

-compile(export_all).

shuffle([]) -> [];
shuffle(L) when is_list(L) ->
	Tuple = list_to_tuple(L),
	shuffle(Tuple, length(L)).

shuffle(NewRandT, 0) -> tuple_to_list(NewRandT);
shuffle(RandT, Len) ->
	Rand = rand:uniform(Len),	
	LenVal = element(Len, RandT),
	RandVal = element(Rand, RandT),

	NewLen = setelement(Len, RandT, RandVal),
	NewRandT = setelement(Rand, NewLen, LenVal),
	shuffle(NewRandT, Len - 1).

  1. 一家游戏公司的大部分笔试题: https://blog.csdn.net/joke_king/article/details/78471923
  2. Erlang 实现1到n的质数?
    https://blog.csdn.net/jiefengchen/article/details/52329158
  3. erlang实现斐波那契数列,快速排序?
    斐波那契
-module(fib).
-compile(export_all).

getfib(N, X, Y) when N<3 -> 
	Y; 
getfib(N, X, Y) -> 
	getfib(N-1, Y, X+Y).

快速排序

-module(qsort).
-export([qsort/1]).
 
qsort([]) -> [];
qsort([H | T]) ->
	qsort([X || X <-T, X < H]) ++ [H] ++ qsort([Y || Y <- T, Y >= H]).
  1. 你看过什么开源项目?
    这个有得说就行,比如MQTT,Zeromq等等
  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值