Schnittstelle-Entwicklungsschule: Analyse der Aufgaben für Minsk und ein neues Set in Moskau

Heute wurde eine neue Anmeldung eröffnet Yandex Interface Development School in Moskau. Die erste Ausbildungsstufe findet vom 7. September bis 25. Oktober statt. Studierende aus anderen Städten können aus der Ferne oder persönlich daran teilnehmen – das Unternehmen übernimmt die Reisekosten und die Unterbringung in einem Wohnheim. Die zweite, zugleich letzte Etappe dauert bis zum 3. Dezember und kann nur persönlich absolviert werden.

Mein Name ist Yulia Seredich, wir haben diesen Beitrag zusammen mit Sergei Kazakov geschrieben. Wir sind beide Schnittstellenentwickler im Minsker Büro von Yandex und Absolventen des SRI aus früheren Jahren.

Schnittstelle-Entwicklungsschule: Analyse der Aufgaben für Minsk und ein neues Set in Moskau

Anlässlich der Eröffnung der Registrierung in Moskau veröffentlichen wir eine Analyse der Einführungsaufgaben für die vorherige Schule – hier in Minsk.

Wenn Sie die Geschichte der SRI-Aufgaben verfolgen, haben wir von Jahr zu Jahr drei wichtige Fähigkeiten für einen Programmierer getestet:

  • Layout. Jeder Entwickler sollte in der Lage sein, Layouts zu erstellen. Es kommt nicht vor, dass Sie Onkel Seryozha haben, der für das gesamte Team entwirft, und Sie nur Drehbücher schreiben. Daher muss jeder Schüler zeigen, dass er weiß, wie man setzt.
  • JavaScript. Wenn es nur um das Layout gehen würde, hätten wir keine Schule für Schnittstellenentwicklung, sondern eine Schule für Layoutdesigner. Die wunderschön gestaltete Benutzeroberfläche muss wiederbelebt werden. Daher gibt es immer eine Aufgabe für JS, aber manchmal ist es auch eine Aufgabe für Algorithmen – wir lieben sie so sehr.
  • Problemlösung ist vielleicht die wichtigste Fähigkeit eines Entwicklers. Bei der Gestaltung von Schnittstellen verändern sich die Dinge sehr schnell. Es ist wie bei Lewis Carroll: „Man muss so schnell laufen, wie man kann, nur um an der gleichen Stelle zu bleiben, und um an eine andere Stelle zu gelangen, muss man doppelt so schnell laufen.“ Jeden Tag stoßen wir auf neue Technologien – wir müssen sie berücksichtigen und verstehen können. Daher haben wir in der dritten Aufgabe vorgeschlagen, Technologien zu verstehen, mit denen ein unerfahrener Entwickler normalerweise nicht vertraut ist.

Bei der Analyse jeder Aufgabe verraten wir Ihnen nicht nur die richtige Vorgehensweise, sondern auch häufige Fehler.

Aufgabe 1: Portfolio

An der ersten Aufgabe arbeiteten der Yandex.Collections-Designer Alexey Cherenkevich, der sich mit Layout auskennt, und sein Servicekollege, der Schnittstellenentwickler Sergey Samsonov.

Bedingung

Erstellen Sie eine Portfolio-Website: Erzählen Sie uns etwas über sich, Ihre Arbeit und Ihre Erwartungen an die Schule. Die Seite sollte möglichst dem vorgeschlagenen Layout entsprechen (Links zu Layouts: 1000px, 600px, 320px, Spezifikation). Da uns nur das Layout interessiert, verwenden Sie bitte kein JavaScript.

Bei der Prüfung berücksichtigen wir:

  • Einrückungsgrößen, Farbkorrektheit, Schriftstil, Schriftgröße;
  • semantisches Layout;
  • das Vorhandensein unterschiedlicher Zustände von Elementen: Anzeige von Schaltflächen und Links beim Bewegen des Cursors, Hervorhebung aktiver Eingabefelder usw.;
  • Cross-Browser-Kompatibilität (getestet in den neuesten Versionen gängiger Browser).

Der Vorteil wird sein:

  • Verwendung moderner CSS-Lösungen: Flexbox, Grid usw.;
  • Adaptives Layout;
  • Einsatz von Prä- und (oder) Postprozessoren, Assemblierung, Minimierung, Optimierung des Ausgabecodes;
  • HTML-Formularvalidierung, stilisierte Datei-Upload-Schaltfläche.

Die Aufgabe ist ziemlich umfangreich, sodass Sie überspringen können, was nicht funktioniert. Dadurch verringert sich Ihre Punktzahl geringfügig, Sie können Ihr Wissen aber trotzdem unter Beweis stellen. Wenn Sie fertig sind, senden Sie uns zwei Links – zu Ihrem Portfolio und den Quellcode auf GitHub.

Die im Auftrag vorgeschlagenen Layouts umfassten nicht nur Bildschirme für Mobilgeräte, Tablets und Desktops, sondern auch reale Spezifikationen.

Um möglichst viel Objektivität in das Ergebnis der Prüfung der ersten Aufgabe zu bringen, gab es für diese Prüfung viele Kriterien.

Kriterien

Gestaltete Website. Das scheint offensichtlich, aber einige Leute haben einige Blöcke komplett übersprungen – entweder wollten sie Zeit sparen, oder sie konnten sie nicht machen. Das Layout lässt sich grob in vier Hauptbildschirme unterteilen: den Hauptbildschirm mit einem Avatar, einen Block mit einer Liste der Erwartungen an SRI, einen Block mit einem Portfolio und einen Block mit Kontaktinformationen. Sie könnten in Abschnitten oder einfach mit Divs erstellt werden, Hauptsache, alle vier Blöcke sind verfügbar.

Übereinstimmung des Layouts mit dem Layout. Der Designer hat eine separate Spezifikation erstellt (einschließlich Farben, Typografie, Schaltflächenzustände usw.), um es den Kandidaten einfacher zu machen. Unten gab es einen Hinweis auf die Einrückungen und Funktionen des ersten Bildschirms. Ich war sehr zufrieden mit den Jungs, die alle Wünsche des Designers berücksichtigt haben: Beispielsweise sollte der erste Bildschirm nicht kleiner als die Höhe des Ansichtsfensters sein.

Adaptives Layout - Dies ist der Fall, wenn die Benutzeroberfläche nicht nur so gestaltet ist, dass bei drei Auflösungen alles Pixel für Pixel im Layout ist. Auch in Zwischenzuständen sollte das Layout nicht auseinanderfallen. Einige haben vergessen, die maximale Breite des Containers zu begrenzen und alles auf 1920 Pixel zu setzen, einige haben die Hintergründe durcheinander gebracht, aber insgesamt haben die Kandidaten diese Aufgabe gut gemeistert.

Semantisches Layout. „Wie oft haben sie der Welt gesagt“, dass der Link so gestaltet sein sollte , der Button – als . Glücklicherweise erfüllten die meisten Kandidaten auch diese Anforderung. Nicht jeder hat die versteckte Liste in den Erwartungen des SRI erkannt, weshalb sie div-Tags verwendet, aber so schlimm ist das nicht. Es gab einen Kandidaten, der alle ihm bekannten semantischen Tags einfügte – dort, wo es nötig war und wo es nicht nötig war. Zum Beispiel anstelle einer Liste - und . Schließlich geht es bei der Semantik darum, die Zusammensetzung Ihrer Seite und den Zweck jedes Blocks zu verstehen (die Mehrheit hat es hier geschafft) sowie die Verwendung von Prä- und/oder Postprozessoren (einige haben es hier geschafft, obwohl dies der Fall ist). war auch in den Punkten - am häufigsten verwendeten sie weniger und scss).

Arbeitsschieber. In der Aufgabe haben wir geschrieben, dass JS nicht verwendet werden kann. Hier wurde die Fähigkeit zur Problemlösung getestet – aus einem Haufen konnte ein Schieberegler hergestellt werden Und . Die ganze Magie geschieht auf der Selektorebene #button-N:checked ~ .slider-inner .slider-slides. Wenn wir auf eines der Eingabe-Kontrollkästchen klicken, wechselt es in den aktivierten Zustand. Das können wir uns zunutze machen und dem Container mit den Folien die benötigte Übersetzung zuweisen: transform: Translate(-33%). Sie können die Implementierung des Schiebereglers sehen hier.

Dropdown-Listen. Hier kam es auch darauf an und ein ähnlicher Selektor: .accordion-item input:checked ~ .accordion-item__content. Sie können die Umsetzung sehen hier.

Verfügbarkeit der Zustände :hover, :active und :focus*. Ein sehr wichtiger Punkt. Davon hing der Komfort bei der Interaktion mit der Schnittstelle ab. Der Benutzer sollte stets eine Rückmeldung zu seinen Aktionen erhalten. Dieses Item wurde während der gesamten Interaktion mit dem Fragebogen überprüft. Wenn ich auf die Schaltfläche „Anrufen“ geklickt habe und optisch nichts passiert ist (obwohl die Anfrage gesendet wurde), ist das schlecht, denn dann werde ich immer wieder darauf klicken. Als Ergebnis werden zehn Anfragen verschickt und ich werde zehnmal zurückgerufen. Wir dürfen nicht vergessen, dass mobile Geräte keine Maus haben, was bedeutet, dass es keinen Hover geben sollte. Und noch ein Punkt, der diejenigen nicht berührte, die den Punkt zur Semantik erfüllten. Wenn es sich bei Ihrem Steuerelement nicht um ein interaktives Element handelt, bleibt der Cursor standardmäßig, wenn Sie mit der Maus darüber fahren. Es sieht sehr unordentlich aus, auch wenn Sie eine Reaktion auf Hover geschrieben haben. Unterschätzen Sie nicht den Cursor: Zeiger.

Animationen. Es ist wichtig, dass alle Reaktionen mit den Elementen reibungslos verlaufen. Nichts im Leben ist augenblicklich, daher reichten die Übergänge beim Schweben und im aktiven Modus aus, um die Benutzeroberfläche angenehmer zu gestalten. Nun, diejenigen, die den Schieberegler und die Listen animiert haben, sind im Allgemeinen großartig.

Einsatz modernster Technologie. Viele Leute haben Flex verwendet, aber niemand hat die Aufgabe mit Grid gelöst. Der Punkt wurde gezählt, wenn Flex richtig eingesetzt wurde. Wenn irgendwo aufgrund dieser Flexionen das Layout auseinanderfiel, erhielten Sie leider keine zusätzlichen Punkte.

Formularvalidierung. Es war lediglich erforderlich, das erforderliche Attribut zu jeder Eingabe des Formulars hinzuzufügen. Wir haben denjenigen Punkte hinzugefügt, die das E-Mail-Feld als E-Mail bestätigt haben.

Gestalten Sie die Schaltfläche zum Hochladen von Dateien. Wir erwarteten eine Kombination wie: und Datei auswählen . Als nächstes mussten wir die Eingabe ausblenden und die Beschriftung formatieren. Es gibt noch eine andere übliche Methode: Machen Sie eine transparente Eingabe und platzieren Sie sie über der Schaltfläche. Aber nicht alle Browser erlauben Styling , und eine solche Lösung kann nicht als vollständig browserübergreifend bezeichnet werden. Und es ist semantisch korrekter, ein Etikett zu erstellen.

Cross-Browser-Kompatibilität. Wir haben überprüft, ob in den beiden neuesten Versionen moderner Browser (ohne IE – die Teilnehmer hatten Glück) sowie in Safari auf iPhones und Chrome auf Androids alles in Ordnung war.

Im Gegenteil, wir haben Punkte abgezogen, wenn jemand JS oder Bootstrap verwendet hat: Beides würde den Zweck der gesamten Aufgabe zunichte machen. Darüber hinaus erhielten Teilnehmer mit Bootstrap nicht nur ein Minus, sondern verloren auch viele Punkte für Semantik und implementierte Elemente.

Diejenigen, die ihre Seite irgendwo im Internet hosteten, hatten keinen besonderen Vorteil – aber die Rezensenten waren sehr froh, dass sie keine Repositories herunterladen und lokal auf ihrem Computer ausführen mussten. Das war also ein Plus für das Karma.

Die erste Aufgabe war vor allem für den Schüler sehr nützlich. Diejenigen, die wir nicht angenommen haben, haben jetzt einen vorbereiteten Lebenslauf – Sie können ihn stolz allen Antworten beifügen oder auf Ihren gh-Seiten veröffentlichen.

Aufgabe 2: Transportweg

Der Autor der Aufgabe ist der Leiter der Suchschnittstellengruppe Denis Balyko.

Bedingung

Hast du eine Sternenkarte? Es zeigt den Namen jedes Sterns sowie die Entfernung von ihm zu anderen Sternen in Lichtsekunden an. Implementieren Sie die Lösungsfunktion, die drei Argumente annehmen sollte: ein Objekt, in dem die Schlüssel die Namen der Sterne sind und die Werte die Entfernungen zu den Sternen (Einbahnverkehr im Weltraum) sowie die Namen von sind die Start- und Endpunkte des Pfades – Start bzw. Ziel. Die Funktion sollte die kürzeste Entfernung vom Startstern zum Zielstern und den zu befolgenden Weg zurückgeben.

Funktionssignatur:

const solution = function(graph, start, finish)  {
    // Ваше решение
} 

Beispiel-Eingabedaten:

const graph = {
  start: { A: 50, B: 20 },
  A: { C: 40, D: 20 },
  B: { A: 90, D: 90 },
  C: { D: 160, finish: 50 },
  D: { finish: 20 },
  finish: {}
};
const start = 'start';
const finish = 'finish'; 

Beispielausgabe:

{
    distance: 90,
    path: ['start', 'A', 'D', 'finish']
} 

Hinweis: Das Lösungsgerüst befindet sich im Ordner src/. Legen Sie Ihre Lösung in „solution.js“ ab.

Die Überprüfung der zweiten Aufgabe war die automatisierteste und objektivste. Die meisten Leute vermuteten, dass es notwendig sei, den Dijkstra-Algorithmus zu implementieren. Diejenigen, die seine Beschreibung gefunden und den Algorithmus in JS implementiert haben, sind gut gemacht. Bei der Überprüfung der Aufgabenstellung sind wir jedoch auf viele Arbeiten mit den gleichen Fehlern gestoßen. Wir durchsuchten das Internet nach Codefragmenten und fanden einen Artikel, aus dem Teilnehmer den Algorithmus kopierten. Es ist lustig, dass viele Leute den Code aus dem Artikel zusammen mit den Kommentaren des Autors kopiert haben. Solche Arbeiten erhielten eine niedrige Bewertung. Wir verbieten nicht die Verwendung irgendwelcher Quellen, aber wir möchten, dass sich jemand mit dem, was er schreibt, auseinandersetzt.

Kriterien

Für Tests wurden Hauptpunkte vergeben. Manchmal war klar, dass die Jungs am Repository herumspielten, Ordner umbenennten und die Tests einfach deshalb fehlschlugen, weil sie die erforderlichen Dateien nicht finden konnten. Dieses Jahr haben wir versucht, solchen Leuten zu helfen und alles für sie an seinen Platz zurückgebracht. Aber nächstes Jahr planen wir, auf ein Wettbewerbssystem umzusteigen, und das wird uns nicht mehr verziehen.

Es gab auch „menschliche“, manuelle Kriterien. Beispielsweise das Vorhandensein eines einzelnen Codestils. Niemand hat Punkte für die Verwendung von Tabulatoren statt Leerzeichen abgezogen oder umgekehrt. Eine andere Sache ist es, wenn Sie einfache Anführungszeichen mit doppelten Anführungszeichen nach einer Ihnen bekannten Regel abwechseln und Semikolons nach dem Zufallsprinzip platzieren.

Die Klarheit und Lesbarkeit der Lösung wurden gesondert berücksichtigt. Auf allen Konferenzen der Welt heißt es, dass 80 % der Arbeit eines Programmierers darin besteht, den Code anderer Leute zu lesen. Sogar Schulkinder durchlaufen Code-Reviews – von ihren Kuratoren und untereinander. Dieses Kriterium hatte also erhebliches Gewicht. Es gab Werke, in denen es keine Variablen gab, die länger als ein Zeichen waren – bitte tun Sie das nicht. Die Kommentare der Teilnehmer waren sehr ermutigend – mit Ausnahme derjenigen, die mit den Kommentaren von Stella Chang identisch waren.

Das letzte Kriterium ist das Vorhandensein von Autotests. Nur wenige Leute haben sie hinzugefügt, aber für alle wurde es zu einem riesigen Plus in ihrem Karma.

Die richtige Entscheidung:

const solution = function(graph, START, FINISH)  {
    // Всё не бесплатно в этом мире
    const costs = Object.assign({[FINISH]: Infinity}, graph[START]);

    // Первая волна родительских нод
    const parents = { [FINISH]: null };
    Object.keys(graph[START]).reduce((acc, child) => (acc[child] = START) && acc, parents)

    const visited = [];
    let node;

    // Ищем «дешёвого» родителя, отмечаем пройденные
    do {
        node = lowestCostNode(costs, visited);
        let children = graph[node];
        for (let n in children) {
            let newCost = costs[node] + children[n];

            // Ещё не оценена или нашёлся более дешёвый переход
            if (!costs[n] || costs[n] > newCost) {
                costs[n] = newCost;
                parents[n] = node;
            }
        }
        visited.push(node);
    } while (node)

    return {
        distance: costs[FINISH],
        path: optimalPath(parents)
    };

    // Возврат назад по самым «дешёвым» родителям
    function optimalPath(parents) {
        let optimalPath = [FINISH];
        let parent = parents[FINISH];
        while (parent && parent !== START) {
            optimalPath.push(parent);
            parent = parents[parent];
        }
        optimalPath.push(START);
        return optimalPath.reverse();
    }

    // Минимальная стоимость из текущей ноды среди непросмотренных
    function lowestCostNode(costs, visited) {
        return Object.keys(costs).reduce((lowest, node) => {
            if (lowest === null || costs[node] < costs[lowest]) {
                if (!visited.includes(node)) {
                    lowest = node;
                }
            }

            return lowest;
        }, null);
    };
};

Aufgabe 3: Veranstaltungskalender

Es wurde von den Schnittstellenentwicklern Sergey Kazakov und Alexander Podskrebkin erstellt.

Bedingung

Schreiben Sie einen Minikalender, um Ihren Zeitplan anzuzeigen. Sie können jeden Zeitplan wählen, den Sie möchten. Zum Beispiel der Zeitplan der Frontend-Konferenzen im Jahr 2019.

Der Kalender sollte wie eine Liste aussehen. Weitere Gestaltungsvorgaben bestehen nicht. Ermöglichen Sie die Einrichtung von Terminerinnerungen 3, 7 und 14 Tage im Voraus. Nach dem ersten Download aus dem Internet sollte sich der Kalender öffnen und offline funktionieren.

Nützliche Ressourcen

Zeitplan der Frontend-Konferenz:
confs.tech/javascript?topics=javascript%2Bcss%2Bux

Servicemitarbeiter:
Developer.mozilla.org/ru/docs/Web/API/Service_Worker_API/Using_Service_Workers
Developers.google.com/web/fundamentals/primers/service-workers

Benachrichtigungs-API:
Developer.mozilla.org/ru/docs/Web/API/Notifications_API

Die dritte Aufgabe war am interessantesten zu testen, da es so viele mögliche Lösungen gab, jede mit ihren eigenen. Wir haben geprüft, wie der Kandidat mit unbekannten Technologien umgeht – ob er recherchieren kann, ob er seine Lösungen testet.

Kriterien

Gefalteter Kalender. Ja, es musste noch angelegt werden. Es gab auch diejenigen, die die Bedingung zu wörtlich nahmen und keine einzige Zeile CSS-Code einfügten. Es sah nicht sehr attraktiv aus, aber wenn alles funktionierte, sanken die Punkte nicht.

Abrufen einer Liste von Ereignissen aus einer Quelle. Da es sich hierbei nicht um eine Layoutaufgabe handelt, wurde die Liste der darin enthaltenen Ereignisse nicht gezählt. Sie können eine Konferenz jederzeit absagen, verschieben oder eine neue hinzufügen. Daher war es notwendig, Daten von außen zu empfangen und das Layout basierend auf dem empfangenen JSON zu rendern. Es war wichtig, die Daten auf irgendeine Weise zu erhalten (mit der Fetch-Methode oder mit XMLHttpRequest). Wenn eine Person ein Polyfill zum Abrufen hinzufügte und ihre Auswahl in der Readme-Datei markierte, wurde dies als Plus gewertet.

Registrierung von Servicemitarbeitern ohne Fehler und nach dem ersten Download offline arbeiten. Hier ist ein Beispiel Servicemitarbeiter mit Zeitplan-Caching beim ersten Start. Details zu Servicemitarbeitern, ihren Fähigkeiten und der Art und Weise, mit ihnen zusammenzuarbeiten (Strategien für die Arbeit mit Caches, Offline-Arbeiten) finden Sie hier.

Möglichkeit, eine Erinnerung einzurichtensodass es tatsächlich nach 3, 7, 14 Tagen funktioniert. Es war notwendig, die Benachrichtigungs-API zu verstehen, Link zu dem war genau richtig. Wir hatten nicht damit gerechnet, dass eine konkrete Implementierung prüfen würde, ob es Zeit für einen Push ist. Jede funktionierende Option wurde akzeptiert: Speicherung in localStorage, IndexDB oder regelmäßige Abfrage durch einen Servicemitarbeiter. Es war sogar möglich, einen Push-Server zu erstellen (hier). Beispiel), aber es würde offline nicht funktionieren. Ebenso wichtig war es, einen Push zu erhalten, nachdem die Seite geschlossen – und nach einiger Zeit geöffnet – wurde. Wenn die Erinnerung gleichzeitig mit dem Schließen der Seite verstummte, wurde die Lösung nicht gezählt. Es ist cool, wenn die Jungs an die Rezensenten gedacht haben und es möglich gemacht haben, jetzt einen Push zu bekommen – um nicht 3 Tage warten zu müssen.

Möglichkeit, ein Symbol auf dem Desktop zu platzieren (PWA). Wir haben das Vorhandensein der Datei überprüft manifest.json mit den richtigen Symbolen. Einige Leute haben diese Datei erstellt (oder in CreateReactApp generiert) – aber nicht die richtigen Symbole hinzugefügt. Beim Installationsversuch trat dann ein Fehler wie „Es wird ein anderes Symbol benötigt“ auf.

Codestil und Projektstruktur. Wie in der zweiten Aufgabe haben wir uns einen einzelnen Codestil angesehen (auch wenn dieser nicht mit unserem übereinstimmte). Einige Leute haben Linters angeschraubt – das ist großartig.

Konsolenfehler. Wenn es direkt in der Konsole einen Hinweis gab, dass etwas nicht stimmte, und der Teilnehmer nicht darauf geachtet hat, haben wir Punkte abgezogen.

Ergebnisse

Das Lustige an den Entscheidungen der Teilnehmer:

  • Ein Fragebogen enthielt den folgenden Text: „Ein befreundeter Programmierer hat mir geholfen, eine React-Anwendung zusammenzustellen. Ich bombardierte ihn mit Fragen zum Wie und Warum, und er erzählte es mir. Es hat mir sehr gut gefallen, ich möchte mehr darüber erfahren.“ Wir haben uns von ganzem Herzen für diese Bewerbung stark gemacht, aber leider war der Freund des Kandidaten nicht sehr hilfreich, damit die Bewerbung funktionierte.
  • Ein Kandidat hat einen Link an GitHub gesendet, wo sich das RAR-Archiv befand – es ist schwierig, dazu einen Kommentar abzugeben. 🙂
  • Ein anderer Kandidat gab im Kommentar zur ersten Zeile der Datei „solution.js“ ehrlich zu, dass er den Algorithmus kopiert hatte.

Wir haben Bewerbungen von 76 Kandidaten erhalten und 23 Personen ausgewählt. Fragebögen wurden uns nicht nur aus Minsk, sondern auch aus Moskau, St. Petersburg und sogar Tatarstan zugesandt. Einige der Jungs überraschten uns mit ihren aktuellen Berufen: Einer von ihnen ist Gerichtsmediziner, der andere Medizinstudent.

Das Ergebnis war eine interessante Verteilung der Erfolgsquoten bei der Erledigung von Aufgaben. Die erste Aufgabe erledigten die Teilnehmer mit durchschnittlich 60 %, die zweite mit 50 % und die dritte erwies sich als die schwierigste und wurde mit durchschnittlich 40 % erledigt.

Auf den ersten Blick sehen die Aufgaben komplex und zeitaufwändig aus. Der Grund liegt nicht darin, dass wir so viele Kandidaten wie möglich aussortieren wollen. Während des Studiums werden die Studierenden mit realen Aufgaben konfrontiert – einem Chat führen, Yandex.Music für Kinder oder Yandex.Weather für wetterabhängige Menschen. Dafür benötigen Sie eine Startbasis.

Ich erinnere mich, dass ich vor zwei Jahren meine SRI-Aufnahmeaufgabe sah und dachte, dass ich sie nie lösen würde. Das Wichtigste in diesem Moment ist, sich hinzusetzen, die Bedingungen sorgfältig zu lesen und mit der Arbeit zu beginnen. Es stellt sich heraus, dass die Bedingungen fast 80 % der Lösung enthalten. Beispielsweise haben wir in der Bedingung der dritten Aufgabe (der schwierigsten) Links zu Servicemitarbeitern und der Benachrichtigungs-API auf MDN hinzugefügt. Studierende, die den Inhalt der Links studiert haben, haben es ohne Schwierigkeiten abgeschlossen.

Ich würde diesen Artikel wirklich gerne von Kandidaten lesen, die planen, in Zukunft an der SRI teilzunehmen, die nicht an der Minsker Schule zugelassen werden konnten oder mit anderen Prüfungsaufgaben beginnen. Wie Sie sehen, ist dies durchaus möglich. Sie müssen nur an sich glauben und sich alle Tipps der Autoren anhören.

Source: habr.com

Kommentar hinzufügen