In diesem Artikel stellen wir Ihnen einige der beliebtesten Front-End-Interviewfragen von ByteDance zum Thema Computernetzwerke vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Hinweis: Die (xx) Zahl vor jeder Frage gibt die Häufigkeit dieser Frage an. Diese Computernetzwerkgrundlage basiert auf den Fragen und entsprechenden Antworten und Referenzlinks, die aus über 30 Front-End-Interviews zusammengestellt wurden . Warten. Der Inhalt des Artikels wird von der Person zusammengestellt, die das Angebot erhalten hat.
Der HTTP-Cache ist in starken Cache und ausgehandelten Cache unterteilt:
Überprüfen Sie zunächst, ob der starke Cache verfügbar ist, indem Sie Cache-Control verwenden. Lesen Sie es dann direkt Caching
Wenn nicht, treten Sie in die Verhandlungs-Cache-Phase ein und initiieren Sie eine HTTP-Anfrage. Der Server prüft, ob die Ressource aktualisiert ist, indem er bedingte Anforderungsfelder wie If-Modified-Since und If enthält -None-Match:
Wenn die Ressource aktualisiert wird, geben Sie die Ressource und den Statuscode 200 zurück
Wenn die Ressource nicht aktualisiert wird, weisen Sie den Browser an, den Cache direkt zu verwenden, um die Ressource abzurufen
1xx: Zeigt an, dass sich das Protokoll derzeit in einem Zwischenstatus befindet und nachfolgende Anforderungen erforderlich sind.
2xx: Zeigt an, dass die Anforderung erfolgreich war.
3xx: Zeigt an, dass der Umleitungsstatus erforderlich ist eine neue Anfrage.
4xx: Zeigt an, dass die Anfrage erfolgreich ist 200 Anforderungserfolg gibt es eine Antwortkörper
LÖSCHEN: Daten löschen
() F: Was verstehen Sie unter Computernetzwerken
Zuerst befinden sich beide Parteien im Status GESCHLOSSEN, dann beginnt der Server, einen bestimmten Port abzuhören und wechselt in den Status LISTEN.
Dann initiiert der Client aktiv eine Verbindung, sendet SYN und wechselt dann zu SYN -SENT selbst, seq = x
Nachdem der Server es empfangen hat, gibt er SYN seq = y und ACK ack = x + 1 (für das vom Client gesendete SYN) zurück, wird zu SYN-REVD
und Dann sendet der Client erneut ACK seq = x + 1, ack = y + 1 wird an den Server übergeben und wechselt in den Status EASTABLISHED. Wenn der Server ACK empfängt, wechselt er ebenfalls in den Status ESTABLISED. Daher muss die Serialisierung von ACK um eins erhöht werden. Alles, was eine Peer-Bestätigung erfordert, verbraucht die Serialisierung von TCP-Nachrichten. Warum nicht zweimal?
Die Empfangsfähigkeit des Kunden kann nicht bestätigt werden.
Wenn der Client zuerst eine SYN-Nachricht sendet, diese aber im Netzwerk bleibt, geht TCP davon aus, dass das Paket verloren gegangen ist, überträgt es dann erneut und die Verbindung wird mit zwei Handshakes hergestellt. Warten Sie, bis der Client die Verbindung schließt. Wenn das Paket jedoch später beim Server ankommt, empfängt der Server es, sendet die entsprechende Datentabelle und stellt die Verbindung her. Zu diesem Zeitpunkt hat der Client jedoch die Verbindung geschlossen, was zu einer Verschwendung von Verbindungsressourcen führt.
Warum nicht viermal?
Mehr als vier Mal ist in Ordnung, aber drei Mal ist genug p, Der Status ändert sich in FIN-WAIT-1
Nachdem der Server ihn empfangen hat, sendet er eine ACK-Bestätigung, ack = p + 1, und wechselt dann in den CLOSE-WAIT-StatusNachdem der Client sie empfangen hat , es wechselt in den FIN-WAIT-2-Status
Warten Sie nach einer Weile, bis die Daten verarbeitet werden, senden Sie FIN und ACK erneut, seq = q, ack = p + 1, treten Sie in die LAST-ACK-Phase ein Nachdem der Client die FIN erhalten hat, nachdem der Client die FIN erhalten hat, geben Sie TIME_WAIT ein (warten Sie auf 2MSL) und senden Sie dann ACK an den Server ack = 1 + 1
Nachdem der Server die FIN erhalten hat, wechselt er in den GESCHLOSSENEN Zustand
Der Client muss zu diesem Zeitpunkt noch auf zwei MSLs warten. Wenn er diese nicht erhält, zeigt die erneute Sendeanforderung des Servers an, dass die Bestätigung erfolgreich angekommen ist. Nach dem Winken wechselt der Client in den Status GESCHLOSSEN erneut gesendet werden. Warum müssen Sie auf 2MSL (Maximum Segment Lifetime) warten? Wenn eine neue Anwendung verwendet wird, werden nutzlose Datenpakete empfangen, was zu einer Verwirrung der Datenpakete führt. Daher ist es am sichersten, auf das Senden aller Datenpakete durch den Server zu warten, bevor eine neue Anwendung gestartet wird.
1 MSL sorgt dafür, dass die letzte ACK-Nachricht der aktiven Abschlusspartei in vier Wellen endlich den Peer erreichen kann
1 MSL sorgt dafür, dass der Peer das ACK nicht erhält, dann kann die erneut übertragene FIN-Nachricht ankommen
**Wenn es dreimal ist, werden ACK und FIN auf der Serverseite in einer Welle kombiniert. Eine so lange Verzögerung kann verhindern, dass eine TCP-FIN die Serverseite erreicht, und der Client sendet sie dann erneut FIN
Referenzinformationen
https://zhuanlan.zhihu.com/p/86426969
Wissen Sie etwas über TCP-Schiebefenster?
In der TCP-Verbindung muss TCP für Sender und Empfänger die gesendeten Daten in den
Sendepufferbereichund die empfangenen Daten in den Empfangspufferbereich stellen. Es kommt häufig vor, dass der Absender zu viel sendet und der Empfänger dies nicht verarbeiten kann. Daher ist eine Flusskontrolle erforderlich, bei der das Senden des Absenders über die Größe des Empfangspuffers gesteuert wird. Wenn der Empfangspuffer der anderen Partei voll ist, kann sie nicht weiter senden. Dieser Flusskontrollprozess erfordert die Aufrechterhaltung eines Sendefensters auf der Sendeseite und eines Empfangsfensters auf der Empfangsseite. TCP-Schiebefenster werden in zwei Typen unterteilt:
Sendefenster.
Essence Different
Ajax, also asynchrones JavaScript und XML, ist eine Webentwicklungstechnologie zum Erstellen interaktiver Webanwendungen Websocket ist ein neues Protokoll von HTML5, das Echtzeitkommunikation zwischen Browsern und Servern ermöglicht
Websocket ist eine lange Verbindung, die Sitzung wird immer aufrechterhalten.
Ajax wird nach dem Senden und Empfangen getrennt Front-End- und Back-End-Daten
Ajax Nicht-Echtzeit
AJAX-Client initiiert
WebSocket-Server und Client pushen sich gegenseitig
Kennen Sie WebSocket?https://www.jianshu.com/p/3fc3646fad80
HTTP Wie implementiert man eine lange Verbindung? Ab wann tritt eine Zeitüberschreitung auf?
Durch die Einstellung Connection: keep-alive im Header (Anfrage- und Antwortheader) wird das HTTP1.0-Protokoll unterstützt, aber ab dem HTTP1.1-Protokoll ist die Verbindung lang Verbindung standardmäßigtcp_keepalive_intvl = 15
tcp_keepalive_probes = 5
tcp_keepalive_time = HTTP Es gibt keine langen und kurzen Links, nur TCP-lange TCP-Verbindungen können einen TCP-Link wiederverwenden Initiieren Sie mehrere HTTP-Anfragen, was den Ressourcenverbrauch reduzieren kann. Wenn Sie beispielsweise einmal HTML anfordern, müssen Sie möglicherweise auch nachfolgende JS/CSS/Bilder usw. anfordern.
Referenzlink
?
fetch entspricht der Trennung von Bedenken, verwendet Promise, API ist häufiger vorhanden, unterstützt Async/AWAITFrage: Wie stellt TCP wirksame Übertragungs- und Überlastungskontrollprinzipien sicher?
langsamer Startschwellenwert + Stauvermeidung.
Zur Staukontrolle im Allgemeinen TCP behält hauptsächlich zwei Kernzustände bei:
Überlastungsfenster (cwnd)
Dann wird ein relativ konservativer langsamer Startalgorithmus verwendet, um sich langsam an das Netzwerk anzupassen. Während der ersten Übertragungsperiode stellen Sender und Empfänger zunächst eine Verbindung durch einen Drei-Wege-Handshake her, bestimmen die Größe ihrer jeweiligen Empfangsfenster und Initialisieren Sie dann die Überlastung auf beiden Seiten des Fensters, und nach jeder RTT-Runde (Empfänger- und Sendeverzögerung) verdoppelt sich die Größe des Überlastungsfensters, bis der Schwellenwert für den langsamen Start erreicht ist.
Dann beginnen wir mit der Vermeidung von Überlastungen, indem wir das Überlastungsfenster in jeder RTT-Runde verdoppeln und nun in jeder Runde eins hinzufügen.
Schnelle Neuübertragung
Wenn während des TCP-Übertragungsvorgangs ein Paketverlust auftritt, sendet die empfangende Seite eine wiederholte Bestätigung. Beispielsweise geht das 5. Paket verloren, 6 und 7 werden erreicht und dann die empfangende Seite 5, 6 und 7 senden alle die ACK des vierten Pakets. Zu diesem Zeitpunkt erhält der Absender 3 doppelte ACKs. Wenn er erkennt, dass das Paket verloren gegangen ist, wird er sofort erneut übertragen, ohne auf RTO zu warten (Timeout-Neuübertragungszeit).
Selektive Neuübertragung: Fügen Sie optional das SACK-Attribut zum Nachrichtenkopf hinzu, markieren Sie die Pakete, die über den linken und rechten Rand angekommen sind, und übertragen Sie dann die Pakete, die nicht angekommen sind, erneut.
Schnelle Wiederherstellung
Wenn Das sendende Ende erhält nach 3 doppelten ACKs einen Paketverlust und ist in einen Überlastungszustand des aktuellen Netzwerkzustands eingetreten. Anschließend tritt es in die Phase der schnellen Wiederherstellung ein:
Reduziert den Überlastungsschwellenwert auf die Hälfte des Überlastungsfensters
Dann wird die Größe des Überlastungsfensters zum Überlastungsschwellenwert
Dann vergrößert sich das Überlastungsfenster linear, um sich an die Netzwerkbedingungen anzupassen
dient dazu, eine Prüfanfrage zu senden, um festzustellen, welche Einschränkungen eine Anfrage für eine bestimmte Zieladresse haben muss, und dann die eigentliche Anfrage entsprechend den Einschränkungen zu senden.
Zum Beispiel wird die Vorabprüfung auf domänenübergreifende Ressourcen zuerst mit der OPTIONS-Methode von HTTP gesendet. Wird zur Bearbeitung domänenübergreifender Anfragen verwendet
Flexibel und skalierbar. Es gibt keine Einschränkungen, dass Leerzeichen Wörter und Zeilenumbrüche trennen. Es können nicht nur Texte, sondern auch beliebige Ressourcen wie Bilder und Videos übertragen werden
Anwendungsschicht
Sitzungsschicht
Netzwerkschicht
(3) Frage: Wie gewährleistet das TCP-Protokoll Zuverlässigkeit und warum ist UDP unzuverlässig?
Programmiervideo
! !