如何快速准备有关算法和技术问题的面试

向哈勃所有读者致以问候! 我叫Yuriy。我一直在教授高科技,Oracle,Microsoft等20多年,并为各种商业客户创建,开发和支持已加载的信息系统。 今天,我想告诉您当前的方向:有关数据处理技术的访谈。 您可以在此处找到此帖子的俄语版本。

对于雇主来说,向申请人询问传统编程技术确实没有任何意义。 这就是为什么我要告诉您如何仅在一个与信息处理语言有关的狭窄区域中准备面试的原因,即对长整数 (长算术)的处理以及对现实世界对象的信息属性的识别,用长整数描述。

1.通常进行数据处理技术面试,以雇用以前在声明性,命令性,面向对象和功能性语言方面具有开发经验的分析师和开发人员团队。

工作任务 通过以下程序片段确定编程语言。



首先,您需要回答以下问题:所选语言中的哪些功能可能是相关的,并将吸引潜在的雇主? 取决于此,列表可能因版本而异,因库而异,因实施而异。



工作任务 哪些语言支持长整数算术?

准备回答了吗? 这是一个建议的列表:
  • C,C ++-libgmp库
  • 通用Lisp-不限制整数的位宽
  • Erlang内置数字类型(整数())
  • 大库中的Go-Int和Rat类型。
  • Haskell内置整数类型
  • Java-java class.math.BigInteger(1997年2月)
  • OCaml-num库
  • Pascal-Delphi-MPArith库
  • Perl模块bignum和bigrat
  • PHP模块BCMath
  • Python是内置的long类型(自从1991年2月创建该语言以来)
  • Ruby-类型Bignum
  • Scala-BigInt类
  • 使用R6RS的方案
  • .NET语言-系统类.Numerics.BigInteger(大约十年前在.NET Framework 4.0中引入)


2.如果雇主已经有现成的清单,则有必要挑选出将在面试中讨论的语言的一般部分。

工作任务 您认为,从雇主的角度来看,最流行的语言是什么? 在这里,您可以查看基于统计信息的答案。

通常在大型和超大型信息系统中执行许多此类常规操作。 有不同类型的排序,搜索特定条件,图上的算法,不同性质的集合上的优化问题,设计具有不确定属性的对象的任务。 但是由于这些任务的规模,最简单的排序可能需要一个月,搜索可能需要一周。 请参阅下面的任务以获得更好的理解。

工作任务 想象一下,您办公室外面有一棵白桦树。 根据您的同事计算,上面有10万片叶子,树干根部的直径为60厘米。 用任何数学符号写这些参数。 证明其适用性:a)在砍伐树木时与同事进行书面交流,b)对图像进行计算机处理。



3.关于面试的数学部分的几句话。 在现实生活中,我们很少超越普通算术的范围。 我们中有些人利用代数和分析的成就。 因此,我决定添加一些现实生活中的问题,以使您的头脑适应。

工作任务 为什么电话号码这么长的五到六位数? 有一个数字列表-其中哪些不是完整的正方形? 您镇上有多少辆公交车的号码只包含完整的正方形? 您知道几百个素数? 它们在1到100的数字行中所占的百分比是多少? 假设2、3、5、7是质数,根据这个事实求出不超过100的质数。您将要进行多少次算术运算? 通过两种方式以自检方式解决MS Excel中的同一问题。

工作任务 实际中如何使用凸凹? 给出2-3个凸凹度用法的示例。



4.有时有必要浏览系统/语言/库集的文档,以及作者/制造商提供的深入和扩展的技术说明示例。 如果您打算调用非标准库,则特别有必要。

工作任务 在步骤1中,使用上述一种编程语言编写扩展的Euclid算法。 怎么了

5.很高兴了解面试的方向:如果您希望自己编写算法,或者必须维护一组第三方算法,可能稍后再引入适当的顺序?

工作任务 首席医疗官的见习笔记上有笔记。 有必要将该注释计算机化,以便正确地安排患者。 您对实习生有何建议?



6.如果隐含选择面试语言,最好选择一种更加标准化的语言,这样访调员就不会有很大的可能性在谈话过程中改变任务的条件。

工作任务 在过去的25年中,已经创建了多少个Pascal版本? 指定每个版本的优点和缺点。



7.最好参加至少一个关于算法及其在给定主题领域中所选信息产品中的实现的研讨会。

工作任务 诗人问您,考虑到其作者的词库,他是否有可能写诗《尤金·奥涅金》。 为此问题提供两种解决方案。

8.程序员现场,有一些任务来训练处理科学信息和编程复杂算法的能力。 下面我们给出一个“正面”的解决方案,但这不是最佳的。 从高级编程语言的角度来看,这只是条件的表述。
请注意以下事实:尽管所有作者都在努力解决问题,但仍然存在一些错误。 因此可以讨论发生的问题。

欧拉项目的第 489任务


Gab是最小的非负整数 n为此 GCDn3+bn+a3+b被最大化。
例如 G1,1=5因为 GCDn3+1n+13+1达到最大值 7n=5,对于 0n<5
Hmn=ΣGab1am1bn
给你 H55=128878H1010=32936544

H181900

工作任务 幸运的是,这是在欧拉项目上很少解决的问题。 根据程序文本,找到算法的优点和缺点并进行指定。 该程序能否在工作日内解决此问题? 如何加速? 指定任务中的错误(如果有)。 找到参数“ verylargenumber ”。 它受什么限制?

如果您无法解决,请再说几句话
如果我们谈论的是局部最大值,那么答案应该更少,但是经过计算之后,突然发现我们正在谈论的是全局最大值,问题正文中未提及。 然而,有人怀疑 GCDn3+1444n+13+1444=1在任何 n。 会怎样 n适合作者的问题?

示例解决方案的代码
public class Start { static BigInteger[] GcdExtended(BigInteger a, BigInteger b) { BigInteger res[] = new BigInteger[3]; if (b == BigInteger.valueOf(0)) { res[0] = a; res[1] = BigInteger.valueOf(1); res[2] = BigInteger.valueOf(0); return res; } res = GcdExtended(b,a.divideAndRemainder(b)[1]); BigInteger s = res[2]; res[2] = res[1].subtract((a.divideAndRemainder(b)[0]).multiply(res[2])); res[1] = s; return res; } public static void main(String[]args) throws IOException { BigInteger i; BigInteger j; int n,n1; BigInteger temp; BigInteger temp1; BigInteger count; FileWriter fileWriter = new FileWriter("c:/temp/terribleanswer.txt"); n1=1; count=BigInteger.ZERO; i=BigInteger.ZERO; j=BigInteger.ZERO; temp1=BigInteger.ZERO; temp=BigInteger.ZERO; for (int a=1;a<19;a++) { for (int b=1;b<1901;b++) { for(n=1;n<;n++) { j=((BigInteger.valueOf(n)).pow(3)); j=j.add(BigInteger.valueOf(b)); i=(((BigInteger.valueOf(n)).add(BigInteger.valueOf(a))).pow(3)); i=i.add(BigInteger.valueOf(b)); int comparevalue = j.compareTo(i); if (comparevalue==0) { temp=GcdExtended(i,j); } else if (comparevalue == 1) { temp=GcdExtended(j,i); } else { temp=GcdExtended(i,j); } int compareTemp = temp.compareTo(temp1); if (compareTemp == 1) { temp1=temp; n1=n; continue; } } String fileContent = a + ";" + b +";"+ temp1 +";"+ n1 + "\n"; temp1=BigInteger.ZERO; count=count.add(BigInteger.valueOf(n1)); n1=1; try { fileWriter.append(fileContent); } catch (IOException e) { } } } String fileContent = count + "\n"; try { fileWriter.append(fileContent); } catch (IOException e) { } fileWriter.close(); } } 


9.祝您顺利通过面试!

UPD专门针对该文章的英文版的发布,我们给出了在上述解决方案进行深度现代化之后发现的一些平凡的关系。 计算时 n=$500,000,00
GCDn3+1444n+13+1444=56298673n=28147170; GCDn3+1445n+13+1445=14094169n=14092001; GCDn3+1446n+13+1446=56454733n=$2822519; GCDn3+1447n+13+1447=14133211n=14131040

Source: https://habr.com/ru/post/zh-CN445002/


All Articles