对一门不是非常熟悉的语言是怎么面试的

news2024/11/18 3:32:38

公司是一个基础通讯类的公司,需要的职位是一个高级系统和软件工程师。

职位要求,是一个完全不怎么大众的语言:Elixir。

没听过,这就对了,这是一个函数式的语言,可以认为是 Erlang 的升级版本,Erlang 多用在交换机设备上的开发语言,这个语言其实还是比较小众的。

RabbitMQ 就是 Erlang 开发的,虽然 Erlang 在整个项目中的比例并不是很高。

2023-10-06_15-30-51

职位需求

这个职位的需求就是使用 Elixir 语言来处理 HTTP 的 API。

这个 API 主要是用户电子邮件相关的内容,我不知道为什么他们选择 Elixir,可能主要还是比较好和现有的系统保持一致吧。

面试

整个面试的时间是 1 个小时。

在这一个小时中主要聊了下对 HTTP 的请求,API 的调用是不是熟悉。不管用的是什么语言,只要你写过 API,这部分还是比较容易说清楚的。

下一步就是在线的 Coding 了,这个在线的代码也是非常简单的,唯一麻烦的地方是 Elixir,因为从来没有接触过这个语言,突然在平台上要用 Elixir 这个语言还是有点懵逼的。

好在示例程序什么都比较简单,就是对照下 API 的调用文档,利用模拟的环境写几个 API 接口。

只要有示例程序,要写其他的还是很简单就完成了,因为对 API 的写法,不管什么语言都差不多。

好在他们提供了一个 API 的示例程序。

在这部,都已经顺利完成了所有的代码,也正确没有问题。

随后他们就提出是不是给我一个回家做的题目,要求是完成这个题目,然后尽快提交给他们。

回家做题

对于给出的题目,稍后我在下面的文章中给出。

如果你是使用其他的比较高级的语言,这个应该没有什么问题,可以说是非常简单的。

但是 Elixir 是一个函数式的语言,同时循环是不可变的,在这里哪怕是一个循环都要折腾半天。

本着,既然我答应你回家试试了,那么我就抱着一定要做出来的想法来做的,也在规定的时间把代码提交了。

结果

大概 1 周后,收到了他们比较客气的拒绝信。

理由是找到了更加合适的人了。

点评

找到更加合适的人,这个不足为奇。因为 Elixir 这个语言实在是非常小众的语言,有比较大的学习曲线。

不是说,你今天开始看文档,明天就能全部看明白的那种。

这个语言没有好的集成 IDE 开发环境,代码写起来不是那么友好,高级语言非常容易实现的东西,Elixir 需要比较多的步骤才能完成。

其实,对公司本身来说,这次面试并没有什么负面评价。主要原因是,在投简历的时候没有仔细看看需要的语言,主要是看了 API 编程能力。

通常来说,这个都不是什么问题。

唯一感觉有点不好的是,公司方面对面试者的反馈比较差。在我提交代码到对方邮箱后,没有任何邮件说邮件已经收到了。完全不知道邮件是不是已经发送过去了或者他们在进行评估什么的。

一般来说,2 到 3 天没有消息的话,感觉都不会非常靠谱,所以也没有抱有太大希望。

只是希望的是,他们应该可以通过更好的沟通让整个流程更加好,可惜他们没有做到,有点把面试当儿戏的意思。

题目和解答

Program 1

Using input_data1.txt, complete the code in file program1.exs

You can install Elixir on a machine you work on, or you can
use Try It Online or something similar.
tio has an input section where you can paste in the input data.

input_data1.txt (3.6 KB)

源代码如下:

defmodule M do
  def read do
    IO.read(:stdio,:all)
  end

  def input_to_list( input ) do
    # turn single string into a list of input values
    String.split(input)
  end

  def calculate([head | tail], acc) do
    calculate( tail, head + acc )
  end
  
  # finish
  def calculate( [], acc ) do
	acc
  end
end


IO.inspect M.read() |> M.input_to_list |> M.calculate(0)

Program 2

Extending the technique of Program 1, write a program that
given 3 lists, selects the greatest even value at each iteration and
adds it to an accumulator. For example:

[ 5, 8, 9, 2, 4, 7 ]
[ 9, 1, 6, 7, 9, 6 ]
[ 4, 4, 8, 6, 2, 4 ]

sums the list:

[ 4, 8, 8, 6, 4, 6 ]

and a sum of 36

The lists to use are:

[184, 89, 960, 133, 239, 413, 425, 355, 636, 519, 430, 562, 296, 175, 471, 260, 279, 934, 667, 804, 954, 274, 833, 428, 912, 789, 76, 805, 522, 692, 139, 598, 943, 309, 954, 265, 958, 559, 722, 910, 388, 996, 716, 706, 291, 236, 593, 154, 103, 8, 319, 722, 863, 493, 384, 206, 696, 563, 276, 422, 642, 163, 926, 823, 608, 193, 713, 119, 141, 297, 99, 321, 976, 972, 46, 34, 719, 186, 446, 563, 139, 887, 729, 319, 679, 734, 565, 531, 210, 275, 113, 409, 384, 872, 442, 364, 757, 44, 332, 802, 389, 626, 15, 376, 143, 450, 362, 31, 847, 935, 103, 856, 700, 78, 904, 697, 453, 995, 420, 426, 1000, 264, 88, 384, 323, 322, 289, 383, 916, 460, 350, 29, 384, 421, 869, 462, 156, 362, 162, 757, 31, 450, 85, 850, 344, 864]
[112, 348, 854, 848, 27, 435, 103, 625, 477, 203, 513, 736, 638, 229, 517, 580, 476, 692, 124, 136, 257, 785, 415, 5, 332, 366, 124, 108, 864, 362, 272, 331, 20, 612, 532, 18, 487, 524, 266, 973, 642, 46, 174, 256, 37, 416, 424, 749, 532, 922, 279, 537, 268, 148, 981, 141, 334, 603, 570, 400, 4, 24, 789, 416, 475, 442, 485, 636, 151, 736, 162, 528, 52, 804, 793, 183, 734, 365, 595, 922, 187, 48, 365, 164, 47, 467, 63, 325, 250, 980, 970, 853, 716, 639, 382, 482, 241, 377, 753, 689, 108, 240, 261, 48, 478, 922, 648, 468, 33, 71, 670, 421, 727, 780, 873, 648, 416, 661, 655, 202, 745, 177, 264, 175, 284, 49, 333, 727, 668, 323, 593, 408, 693, 98, 332, 148, 634, 739, 703, 157, 359, 346, 90]
[915, 576, 254, 844, 744, 656, 149, 46, 883, 902, 636, 545, 978, 972, 572, 686, 927, 781, 463, 384, 450, 690, 322, 454, 686, 309, 56, 152, 622, 94, 579, 395, 964, 787, 886, 336, 606, 286, 880, 248, 337, 425, 590, 342, 980, 731, 541, 941, 788, 481, 753, 912, 100, 306, 414, 736, 360, 454, 52, 984, 420, 750, 839, 173, 450, 260, 189, 929, 659, 349, 664, 989, 219, 62, 566, 346, 150, 446, 838, 880, 644, 898, 662, 610, 688, 225, 519, 655, 489, 63, 492, 916, 762, 990, 273, 241, 925, 259, 138, 929, 769, 991, 981, 298, 437, 120, 627, 636, 107, 505, 80, 781, 13, 924, 901, 905, 507, 559, 48, 778, 444, 65, 312, 287, 804, 960, 573, 533, 52, 763, 188, 379, 709, 820, 334, 519, 992, 218, 550, 253, 812, 83, 620, 539, 404, 317, 966, 657, 630]

源代码如下:

defmodule M do
  def read do
    IO.read(:stdio,:all)
  end

  def input_to_list( input ) do
    # turn single string into a list of input values
    inputList = String.split(input, "\n")
    [head | tail] =inputList 
    list_1_str = head 
    [head | tail] = tail
    list_2_str = head 
    [head | tail] = tail
    list_3_str = head 

	#pattern = :binary.compile_pattern([" ", ", "])
	#IO.inspect(String.split("[1,2 3,4]", pattern))

	list_1_str = String.replace(list_1_str ,"[", "")
	list_1_str = String.replace(list_1_str ,"]", "")
	list_1_str = String.replace(list_1_str ," ", "")
	list_1 = String.split(list_1_str,[" ", ","])

	list_2_str = String.replace(list_2_str ,"[", "")
	list_2_str = String.replace(list_2_str ,"]", "")
	list_2_str = String.replace(list_2_str ," ", "")
	list_2 = String.split(list_2_str ,[" ", ","])

	list_3_str = String.replace(list_3_str ,"[", "")
	list_3_str = String.replace(list_3_str ,"]", "")
	list_3_str = String.replace(list_3_str ," ", "")
	list_3 = String.split(list_3_str ,[" ", ","])


	length_list = [0]
        length_list  = [length(list_1) | length_list ]
	length_list  = [length(list_2) | length_list ]
	length_list  = [length(list_3) | length_list ]
 	length_max = Enum.max(length_list )


	IO.inspect(length_max )

	list_1 = list_1
		|> append_if(length_max > length(list_1),"0")
	list_2 = list_2
		|> append_if(length_max > length(list_2),"0")
	list_3 = list_3
		|> append_if(length_max > length(list_3),"0")

#	IO.inspect(list_1)
#	IO.inspect(list_2)
#	IO.inspect(list_3)


	lx =[list_1 | []]
	lx =[list_2 | lx]
	lx =[list_3 | lx]
	

	lx_1 = Enum.zip(lx)


	l = Enum.map(lx_1 , fn n ->
	 max_even(Tuple.to_list(n))
	end)

	IO.inspect(l)

  end


defp append_if(list, condition, item) do
  if condition, do: list ++ [item], else: list
end



  def max_even(list) do
   evenList = 	list
	|> Enum.map(&String.to_integer/1)
	|> Enum.filter(&rem(&1, 2) == 0)

   if Enum.empty?(evenList ) do
	0
   else 
	evenList 
	|> IO.inspect
	|> Enum.reduce(&max/2)
	|> IO.inspect
   end
  end



  def calculate([head | tail], acc) do

#IO.inspect(acc)
#IO.inspect(tail)
    calculate(tail, head + acc)
  end
  
  # finish
  def calculate( [], acc ), do: acc
end




#IO.puts M.calculate(["1", "2", "3"], 0)

IO.inspect M.read() |> M.input_to_list |> M.calculate(0)

如觉得代码比较难读的话,可以直接下载我们的附件,在附件中有题目说明,测试数据和源代码。

Snag_14e674c

上图是网站上的运行结果。

对一门不是非常熟悉的语言是怎么面试的 - 求职路上 - iSharkFly

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15073-2014 铸造钛及钛合金 知识梳理

声明 本文是学习GB-T 15073-2014 铸造钛及钛合金.pdf而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了铸造钛及钛合金的牌号、代号和化学成分,以及化学成分分析方法。 本标准适用于机加石墨型、捣实型、金属型和熔模精…

BootstrapBlazor企业级组件库:前端开发的革新之路

作为一名Web开发人员,开发前端我们一般都是使用JavaScript,而Blazor就是微软推出的基于.Net平台交互式客户Web UI 框架,可以使用C#替代JavaScript,减少我们的技术栈、降低学习前端的成本。 而采用Blazor开发,少不了需…

[SWPUCTF 2021 新生赛]sql - 联合注入

这题可以参考文章:[SWPUCTF 2021 新生赛]easy_sql - 联合注入||报错注入||sqlmap 这题相比于参考文章的题目多了waf过滤 首先,仍然是网站标题提示参数是wllm 1、fuzz看哪些关键字被过滤:空格、substr、被过滤 2、?wllm-1/**/union/**/selec…

【Java】CompletableFuture学习记录

目录 介绍创建异步对象计算完成时回调方法handle 方法线程串行化方法两任务组合 - 都要完成两任务组合 - 一个完成多任务组合 介绍 业务场景:查询商品详情页的逻辑比较复杂,有些数据还需要远程调用,必然需要花费更多的时间。 假如商品详情页…

socket网络编程中设置socket选项的ioctlsocket、setsockopt和WSAIoctl函数的使用(附源码)

VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...)https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...&a…

AI发展历史

一、AI的发展历史 二、AI发展的第五阶段 (一)、第一阶段 1.艾伦图灵与模仿游戏 艾伦•图灵(Alan Turing,1912~1954)是英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。二战中协助军…

vue重修004【下部】

文章目录 版权声明非父子通信event bus 事件总线实现步骤代码演示 非父子通信-provide&inject语法注意代码演示 v-model原理表单类组件封装& v-model 简化代码.sync修饰符语法代码示例 ref 和 $refs语法代码演示 异步更新 & $nextTick引子$nextTick演示 版权声明 …

javaee ssm框架项目添加分页控件

搭建ssm框架项目 参考上一篇博文 添加分页控件 引入依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schema…

关联规则挖掘(下):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

Kubernetes安装部署 1

本文主要描述kubernetes的安装部署&#xff0c;kubernetes的安装部署主要包括三个关键组件&#xff0c;其中&#xff0c;包括kubeadm、kubelet、kubectl&#xff0c;这三个组件的功能描述如下所示&#xff1a; Kubeadm 用于启动与管理kubernetes集群 Kubelet 运行在所有集群的…

[晕事]今天做了件晕事21;设置代理访问网站的时候需注意的问题

今天在家上班&#xff0c;设置好VPN&#xff0c;通过代理来访问公司内部的一个系统浏览器的反应如下&#xff1a; Hmmm… can’t reach this page ***.com refused to connect. 这个返回的错误&#xff0c;非常的具有迷惑性&#xff0c;提示的意思&#xff1a;拒绝链接&#xf…

Kaggle - LLM Science Exam(二):Open Book QAdebertav3-large详解

文章目录 前言&#xff1a;优秀notebook介绍三、Open Book Q&A3.1 概述3.2 安装依赖&#xff0c;导入数据3.3 数据预处理3.3.1 处理prompt3.3.2 处理wiki数据 3.4 使用faiss搜索获取匹配的Prompt-Sentence Pairs3.5 查看context结果并保存3.6 推理3.6.1 加载测试集3.6.2 定…

模型压缩部署概述

模型压缩部署概述 一&#xff0c;模型在线部署 1.1&#xff0c;深度学习项目开发流程 1.2&#xff0c;模型训练和推理的不同 二&#xff0c;手机端CPU推理框架的优化 三&#xff0c;不同硬件平台量化方式总结 参考资料 一&#xff0c;模型在线部署 深度学习和计算机视觉…

POJ 3264 Balanced Lineup 线段树 / 平方分割

一、题目大意 给出一个长度为 n&#xff08;n<50000) 数组 arr&#xff0c;进行Q次查询&#xff08;Q<200000&#xff09;&#xff0c;每次查询的内容为数组arr在 [L , R] 的切片的极差&#xff08;最大元素 - 最小元素&#xff09; 二、解题思路 1、线段树 区间极差…

[每周一更]-(第65期):Docker容器监控工具推荐

Docker 容器化监控工具用于监视和管理 Docker 容器的性能、资源使用情况、日志、事件和状态等。以下是一些常用的 Docker 容器监控工具&#xff1a; Docker 自带的监控功能: Docker Stats: Docker 内置的命令&#xff0c;用于实时显示运行中容器的资源使用情况&#xff0c;包括…

QGIS文章五——对遥感影像进行土地类型分类-选择遥感影像

关于下载遥感影像的地方有很多&#xff1a; 1、国家综合地球观测数据共享平台&#xff08;https://www.chinageoss.cn/&#xff09; 2、地理空间数据云&#xff08;https://www.gscloud.cn/&#xff09; 3、美国地质勘探局官网&#xff08;https://earthexplorer.usgs.gov/&…

RabbitMQ之Direct(直连)Exchange解读

目录 基本介绍 使用场景 springboot代码演示 演示架构 工程概述 RabbitConfig配置类&#xff1a;创建队列及交换机并进行绑定 MessageService业务类&#xff1a;发送消息及接收消息 主启动类RabbitMq01Application&#xff1a;实现ApplicationRunner接口 基本介绍 在r…

【多线程进阶】CAS实现及应用

文章目录 前言1. 什么是 CAS2. CAS 是如何实现的3. CAS 有哪些应用3.1 实现原子类3.2 实现自旋锁 4. CAS 中 ABA 问题4.1 ABA 问题是什么4.2 ABA 引发的问题4.3 解决方案 总结 前言 上文讲解 synchronized 当提到自旋锁时, 讲到当其他线程进入竞争, 偏向锁状态被消除, 就会进入…

简单聊一聊公平锁和非公平锁,parallel并行流

目录 一、降低锁的粒度&#xff0c;将synchronized关键字不放在方法上了&#xff0c;改为synchronized代码块。二、先区分一下公平锁和非公平锁1、公平锁2、非公平锁3、公平锁的优缺点&#xff1a;4、非公平锁的优缺点&#xff1a; 三、是否对症下药四、IntStream.rangeClosed是…

C++ - C++11历史 - 统一列表初始化 - aotu - decltype - nullptr - C++11 之后 STL 的改变

C的发展史了解 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。 不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标…