如何快速准备面试,这将对算法和信息处理技术产生疑问?

向哈勃所有读者致以问候! 我的名字叫Yuri。我从事高技术,Oracle,Microsoft和其他领域的教学已有20多年了,还为各种业务客户创建,开发和支持已加载的信息系统。 今天,我想告诉您当前的方向:有关数据处理技术的访谈。

在接受这种计划的采访时,雇主向申请人询问与传统编程有关的技术是没有用的。 因此,我将流行地告诉您如何仅在一个与信息处理语言相关的狭窄区域中准备面试,即处理长整数 (长算术)和识别以长整数描述的现实世界对象的信息属性。

1.有关数据处理技术问题的访谈通常是由一组分析人员和开发人员进行的,这些团队以前在开发声明性,命令性,面向对象和功能性语言方面经验丰富。

挑战。 通过一段程序定义一种编程语言。



因此,首先,您需要为问题做准备-在选择的语言中什么已经很好,潜在的雇主会感兴趣什么? 顺便说一句,列表可能因版本而异,因库而异,因实施而异。



挑战。 哪些语言支持长整数算术?

你有没有想过 样本清单:
  • C,C ++-libgmp库
  • Common Lisp-不限制整数的长度
  • Erlang-内置数字类型(整数())
  • Go-从大型库中键入Int和Rat。
  • Haskell-整数整数类型
  • Java-类java.math.BigInteger(1997年2月)
  • OCaml-num库
  • Pascal / Delphi-MPArith库
  • Perl-Bignum和Bigrat模块
  • PHP-BCMath模块
  • Python-内置长型(自创建该语言以来,1991年2月)
  • Ruby-类型Bignum
  • Scala-BigInt类
  • 方案-使用R6RS
  • .NET语言-System.Numerics.BigInteger类(大约在十年前出现在.NET Framework 4.0中)


2.如果雇主事先准备了一份清单,则有必要隔离将在面试中讨论的语言的共同部分。

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

在大型和超大型信息系统中,最经常执行许多完全常规的操作:各种排序,按特定标准进行搜索,图形上的算法,不同性质的集合上的优化问题,构造具有不确定属性的对象的任务。 但是,由于任务的规模,最简单的排序可能需要一个月,而搜索可能需要一周。 一个大概的理解任务。

挑战。 窗户外面是桦树。 正如您的同事所计算的,其上有100,000片叶子,根部树干的直径为60厘米。 用任何数学符号记录指定的参数。 并证明其适用性:与同事通信,因为他们想砍树。 或用于计算机处理他的图像。



3.关于数学部分的几句话。 在生活中,我们很少超越普通算术的界限。 我们单位使用代数和数学分析的成果。 让以下陈述帮助您记住(甚至不是肤浅的)实际使用的被遗忘的知识。

挑战。 为什么电话号码这么长时间是五位或六位数字? 给定一系列数字-哪个不是完整的正方形? 您所在城市有多少辆公交车有全平方号? 您知道多少个质数(最多100个)? 从1到100的所有数字的百分比是多少? 假设2、3、5、7为素数,找到最多100个素数。您必须执行多少个算术运算? 以两种方式解决MS Excel上的相同问题以进行自检。

挑战。 在实践中如何使用凸起和凹陷? 给出2-3个使用凸凹度的示例。



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

挑战。 在第1段中,用上述一种编程语言编写扩展的欧几里得算法。 不需要用什么语言完成? 怎么了

5.建议了解面试的方向:您将自己编写算法还是必须维护一组第三方算法,这些算法最终将被整理?

挑战。 根据主治医师在受训者笔记本上用笔制作的记录集,有必要以计算机化的方式识别要预约的患者。 我可以给实习生什么建议?



6.如果隐含选择采访语言,则最好采用一种更为标准化的语言,以免访问者在对话期间不希望改变任务的条件。

挑战。 在过去的25年中,出现了多少种Pascal语言版本? 指出每个版本的优点和缺点。



7.建议至少参加一个关于算法及其在给定主题领域中如何实现为现成的信息解决方案的研讨会。

挑战。 诗人问了你一个问题:考虑到这位作家的诗词词库,他能写一首诗《尤金·奥涅金》吗。 为此问题提供两种解决方案。

8. 程序员资源具有培训处理科学信息和编写复杂算法的能力的任务。 下面我们介绍“正面”解决方案,但这不是最佳解决方案,只是从高级编程语言的角度说明情况。 由于任务文本本身的措词不够准确,因此您的答案可能与该任务的作者所给出的答案不一致。

欧拉项目中的第 489任务


Gab是最小的非负整数 n为此 GCDn3+bn+a3+b具有最大的价值。
举个例子 G1,1=5GCDn3+1n+13+1达到最大值 7n=5并在处具有较小的值 0n<5。 让 Hmn=ΣGab1am1bn
众所周知 H55=128878H1010=32936544。 找 H181900

挑战。 幸运的是,这是在欧拉项目中很少解决的任务。 根据给定的程序文本,找到算法的优点和缺点并进行指定。 该程序可以在一个工作日内解决此问题吗? 如何加速? 指出任务中的错误(如果有)。 找到“ 很大选项 。 如何限制?

如果您无法解决,请再说几句话。
如果我们谈论的是局部最大值,那么答案应该更少,但是经过计算,突然发现我们正在谈论的是全局最大值,这不是问题所在。
然而,有人怀疑 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=28225197; GCDn3+1447n+13+1447=14133211n=14131040

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


All Articles