Grüße an alle Leser von Habr! Mein Name ist Yuri. Ich unterrichte seit mehr als 20 Jahren Hochtechnologien, Oracle, Microsoft und andere und erstelle, entwickle und unterstütze geladene Informationssysteme für verschiedene Geschäftskunden. Heute möchte ich Ihnen die aktuelle Richtung erläutern: Interviews zu Datenverarbeitungstechnologien.
Bei Interviews mit einem solchen Plan ist es für den Arbeitgeber nutzlos, den Antragsteller nach Technologien zu fragen, die mit der traditionellen Programmierung zusammenhängen. Daher werde ich Ihnen im Volksmund erklären, wie Sie sich auf ein Interview in nur einem engen Bereich im Zusammenhang mit Informationsverarbeitungssprachen vorbereiten können, nämlich der
Verarbeitung langer Ganzzahlen (lange Arithmetik) und der Identifizierung von Informationseigenschaften von Objekten der realen Welt, die in langen Ganzzahlen beschrieben werden.
1. Interviews mit Fragen zu Datenverarbeitungstechnologien werden normalerweise mit einer Reihe von Analysten- und Entwicklerteams durchgeführt, die zuvor Erfahrung in der Entwicklung deklarativer, imperativer, objektorientierter und funktionaler Sprachen hatten.
Herausforderung. Definieren Sie eine Programmiersprache durch ein Programm.

Daher müssen Sie sich zunächst auf die Frage vorbereiten: Was ist in der gewählten Sprache bereits gut, was könnte einen potenziellen Arbeitgeber interessieren? Übrigens kann die Liste von Version zu Version, von Bibliothek zu Bibliothek, von Implementierung zu Implementierung variieren.
Herausforderung. Welche Sprachen unterstützen Arithmetik mit langen ganzen Zahlen?
Hast du gedacht Beispielliste:- C, C ++ - libgmp Bibliothek
- Common Lisp - begrenzt nicht die Länge von ganzen Zahlen
- Erlang - eingebauter numerischer Typ (integer ())
- Geben Sie Int und Rat aus der großen Bibliothek ein.
- Haskell - Integer Integer Type
- Java - Klasse java.math.BigInteger (Februar 1997)
- OCaml - num Bibliothek
- Pascal / Delphi - MPArith-Bibliothek
- Perl - Bignum - und Bigrat - Module
- PHP - BCMath Modul
- Python - eingebauter langer Typ (seit die Sprache erstellt wurde, Februar 1991)
- Ruby-Typ Bignum
- Scala - BigInt Klasse
- Schema - mit R6RS
- .NET-Sprachen - Klasse System.Numerics.BigInteger (erschien vor fast 10 Jahren in .NET Framework 4.0)
2. Wenn der Arbeitgeber im Voraus eine Liste erstellt hat, müssen die gemeinsamen Teile der Sprachen, die im Interview besprochen werden, isoliert werden.
Herausforderung. Was sind Ihrer Meinung nach aus Sicht des Arbeitgebers die beliebtesten Sprachen?
Hier sehen Sie die Antwort basierend auf Statistiken.
In großen und extragroßen Informationssystemen werden am häufigsten eine Reihe von Routineoperationen ausgeführt: verschiedene Sortierungen, Suchen nach bestimmten Kriterien, Algorithmen in Diagrammen, Optimierungsprobleme bei Mengen unterschiedlicher Art, Aufgaben beim Erstellen von Objekten mit undefinierten Eigenschaften. Aufgrund des Umfangs der Aufgabe kann die einfachste Sortierung jedoch einen Monat und die Suche eine Woche dauern. Eine ungefähre Aufgabe des Verstehens.
Herausforderung. Vor dem Fenster steht eine Birke. Darauf, wie Ihre Kollegen berechnet haben, 100.000 Blätter, beträgt der Durchmesser des Stammes an der Wurzel 60 Zentimeter. Notieren Sie die angegebenen Parameter in einer beliebigen mathematischen Notation. Und beweisen Sie seine Eignung: für die Korrespondenz mit einem Kollegen, weil er den Baum fällen will. Oder für die Computerverarbeitung seines Bildes.
3. Ein paar Worte zum mathematischen Teil. Im Leben gehen wir selten über die Grenzen der gewöhnlichen Arithmetik hinaus. Einheiten von uns nutzen die Errungenschaften der Algebra und der mathematischen Analyse. Die folgenden Aussagen helfen Ihnen, sich auch nicht oberflächlich daran zu erinnern, wo das vergessene Wissen praktisch genutzt wird.
Herausforderung. Warum waren Telefonnummern so lange fünf- oder sechsstellig? Bei einer Reihe von Zahlen - welche ist kein volles Quadrat? Wie viele Busse in Ihrer Stadt haben volle Quadratnummern? Wie viele Primzahlen bis zu 100 kennen Sie? Wie viel ist ein Prozentsatz aller Zahlen von 1 bis 100? Sei 2, 3, 5, 7 Primzahlen, finde die Anzahl der Primzahlen bis 100. Wie viele arithmetische Operationen mussten Sie ausführen? Lösen Sie dasselbe Problem in MS Excel zum Selbsttest auf zwei Arten.
Herausforderung. Wie werden Ausbuchtungen und Konkavitäten in der Praxis eingesetzt? Nennen Sie 2-3 Beispiele für die Verwendung von Konvexität-Konkavität.
4. Manchmal ist es notwendig, die Dokumentation für das System / die Sprache / den Satz von Bibliotheken durchzugehen, Beispiele aus ausführlichen und erweiterten technischen Beschreibungen des Autors / Herstellers selbst. Dies ist insbesondere erforderlich, wenn Sie nicht standardmäßige Bibliotheken aufrufen möchten.
Herausforderung. Schreiben Sie den erweiterten euklidischen Algorithmus in einer der oben in Programm 1 angegebenen Programmiersprachen. In welcher Sprache muss das nicht gemacht werden? Und warum?
5. Es ist ratsam, die Richtung des Interviews zu verstehen: Schreiben Sie die Algorithmen selbst oder müssen Sie eine Reihe von Algorithmen von Drittanbietern warten, die eventuell in Ordnung gebracht werden müssen?
Herausforderung. Gemäß den Aufzeichnungen des Chefarztes, die mit einem Stift auf dem Notizbuch des Auszubildenden erstellt wurden, muss computergestützt ermittelt werden, für welchen Patienten die Termine vereinbart wurden. Was kann ich dem Praktikanten raten?
6. Wenn die Wahl der Interviewsprache impliziert ist, ist es besser, eine standardisiertere zu wählen, damit der Interviewer nicht den Wunsch hat, die Bedingungen der Aufgaben während des Gesprächs zu ändern.
Herausforderung. Wie viele Versionen der Pascal-Sprache sind in den letzten 25 Jahren erschienen? Geben Sie die Stärken und Schwächen jeder Version an.
7. Es ist ratsam, an mindestens einem Seminar über Algorithmen und deren Implementierung in vorgefertigte Informationslösungen in einem bestimmten Themenbereich teilzunehmen.
Herausforderung. Der Dichter hat Ihnen eine Frage gestellt: Kann er ein Gedicht „Eugene Onegin“ schreiben, das den poetischen Thesaurus dieses Autors berücksichtigt? Geben Sie zwei Lösungen für dieses Problem an.
8. Die
Ressource für Programmierer hat Aufgaben zum Trainieren der Fähigkeit, wissenschaftliche Informationen zu verarbeiten und komplexe Algorithmen zu programmieren. Im Folgenden stellen wir die Lösung „frontal“ vor, sie ist jedoch nicht optimal und nur eine Aussage über den Zustand aus Sicht einer Programmiersprache auf hoher Ebene. Aufgrund des unzureichend genauen Wortlauts des Aufgabentextes selbst stimmen Ihre Antworten möglicherweise nicht mit den Antworten der Autoren dieser Aufgabe überein.
Lass
Ist die kleinste nicht negative ganze Zahl
für welche
hat den größtmöglichen Wert.
Zum Beispiel
, als
erreicht den Maximalwert
bei
und hat kleinere Werte bei
. Lass
für
,
.
Es ist bekannt, dass
und
. Finden
.
Herausforderung. Glücklicherweise ist dies eine sehr selten gelöste Aufgabe im Euler-Projekt. Finden Sie gemäß dem angegebenen Programmtext die Stärken und Schwächen des Algorithmus und geben Sie sie an. Kann dieses Programm dieses Problem an einem Arbeitstag lösen? Wie kann es beschleunigt werden? Geben Sie gegebenenfalls Fehler in der Aufgabe an. Finden Sie die
Option "
sehr groß ". Wie ist es begrenzt?
Noch ein paar Worte, wenn Sie es nicht lösen konnten.Wenn wir über lokale Maxima gesprochen haben, sollten die Antworten geringer sein, aber nach Berechnungen stellt sich plötzlich heraus, dass es sich um globale Maxima handelt, über die der Text des Problems kein Wort enthält.
Und doch besteht der Verdacht, dass für jeden . Welches wird den Autoren des Problems passen?
Code für eine Beispiellösungpublic 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. Ich wünsche Ihnen ein gutes Interview!
UPD Bevor wir die
englische Version des Artikels veröffentlichen , geben wir einige nicht triviale
Verhältnisse gefunden nach tiefer Modernisierung der obigen Lösung. Bei der Berechnung bis zu
.
;;
;;
;;
.