Baidu-Interviews, insbesondere das erste Interview, sind insgesamt nicht schwierig. Die ersten beiden Runden technischer Interviews erfordern handgeschriebenen Code. Zu den Hauptkategorien gehören Sprachgrundlagen, Entwurfsmuster, Algorithmusgrundlagen und Datenbanken. Das Wichtigste ist das Fundament, das Fundament, das Fundament. Es deckt ein breites Themenspektrum ab, aber es sind alles Dinge, die ein Programmierer wissen sollte und sollte. Die Antworten dienen nur als Referenz. (Der Artikel stammt aus dem Internet)
Jetzt haben wir 10 Fragen wie folgt zusammengestellt:
1 Was ist das Integer-Overflow-Problem in PHP?
2 um OOP zu verstehen
3. Ihr Verständnis von Designmustern und MVC
Der Unterschied zwischen HTTP-Protokoll 1.0 und 1.1 und kurz über das HTTP-Protokoll sprechen
5. Sprechen Sie kurz über den Rewrite-Mechanismus in Apache und den URI-Routing-Mechanismus im PHP-Framework
6. MySQL-Indexmechanismus, Prinzipien der Verwendung zusammengesetzter Indizes
7 InnoDB
Sprechen Sie kurz über den Schnellsortierungsalgorithmus
9. Grundlegende Verwendung von awk, sed, sort (untersucht mit Beispielen)
10 und redis
= ======================================== ======
【1】Was ist das Ganzzahlüberlaufproblem in PHP?
Die Wortlänge der Ganzzahlzahlen von PHP hängt von der Plattform ab. Der größte Integer-Typ beträgt mehr als zwei Milliarden, tatsächlich ist er 2 hoch 31, und das Minimum ist -2 hoch 31. PHP unterstützt keine vorzeichenlosen Ganzzahlen. Wenn eine Zahl den Bereich einer Ganzzahl überschreitet, wird sie automatisch als Gleitkommazahl interpretiert. Wenn das Ergebnis der durchgeführten Operation den Integer-Bereich überschreitet, wird auch Float zurückgegeben. (Was ist mit dem Ganzzahlüberlauf in Java und C)
[2] Wie man OOP versteht
OOP, objektorientierte Programmierung, umfasst drei Aspekte: Vererbung und Kapselung, Polymorphismus, das grundlegendste ist Abstraktion.
Vererbung, also Erweiterbarkeit, erweitert die Funktionen einer vorhandenen übergeordneten Klasse durch Unterklassen.
Die Kapselung erfordert, dass von außen nicht nach Belieben auf die internen Daten des Objekts zugegriffen werden kann, d. h. die spezifische Implementierung in der Klasse ist nicht erforderlich, solange der Benutzer die spezifische interne Implementierung kennt was es tut und wie man es benutzt.
Polymorphismus ist die Abstraktion und Schnittstelle einer Klasse, die Fähigkeit derselben Klasse, mehrere Objekttypen zu verarbeiten.
In Wirklichkeit kann alles, was wir sehen, als Objekt betrachtet werden, und dann können sich Klassen durch weitere Abstraktion in Klassen zu vielen ähnlichen Objekten entwickeln. Um ein einfaches Beispiel zu geben: Abstrahieren Sie ein Haus, das wir sehen, in eine ROOM-Klasse, einschließlich grundlegender Türen, Fenster, Tische und anderer Objekte sowie Funktionen wie den Ein- und Ausgang von Personen. Jetzt erben wir die ROOM-Klasse als Klassenzimmer, das Türen, große Fenster, Tische und Stühle sowie nur ein Schwarz-Weiß-System und ein Podium umfasst, auf dem Lehrer und Klassenkameraden am Unterricht teilnehmen können. Jetzt instanziieren wir diese Classroom-Klasse als Classroom_621-Objekt, einschließlich zwei Türen, vier großen Fenstern, 30 Tischen und Stühlen, und einige Schüler nehmen an Mao Zedong-Kursen teil.
【3】Ihr Verständnis von Designmustern und MVC
Model-View-Controller, Modell, Ansicht, Controller Wenn Sie an MVC denken, denken Sie an JAVA, denn JAVA ist ein MVC ist eine vollständig orientierte Objektsprache und erschien erstmals in Smalltalk. Sein Kern besteht darin, die Ansicht vom Datenmodell zu trennen, sodass verschiedene Programme unterschiedliche Anzeigen haben können.
Modell bezieht sich auf die von Programmierern geschriebenen Funktionen, Algorithmen und Datenmodelle, die wir als Systemgeschäftslogikschicht bezeichnen.
Ansicht, d. h. grafische Front-End-Oberfläche. Wird den Benutzern angezeigt.
Controller, hauptsächlich verantwortlich für die Bearbeitung von Anfragen, die Weiterleitung und das Laden von Ansichten.
Entwurfsmuster sind, um es ganz klar auszudrücken, die Zusammenfassung und Klassifizierung der Code-Design-Erfahrung. Entwurfsmuster wurden erstmals in der Bauindustrie verwendet, darunter hauptsächlich 23 Entwurfsmuster Wird für die objektorientierte prozedurale Programmierung verwendet. Befolgen Sie mehrere Entwurfsprinzipien: Öffnungs- und Schließprinzip, Einzelverantwortungsprinzip, Liskov-Substitutionsprinzip, Abhängigkeitsinjektion, Schnittstellentrennung, Dimit-Prinzip, Bevorzugung der Zusammensetzung gegenüber der Vererbung usw. Es umfasst drei Kategorien: Schöpfungsmodell, Strukturmodell und Verhaltensmodell.
【4】Der Unterschied zwischen HTTP-Protokoll 1.0 und 1.1 und kurz auf das HTTP-Protokoll eingehen
HTTP, Hypertext Transfer Protocol. Es definiert die Kommunikationsregeln zwischen dem Browser und dem Server. Das HTTP-Protokoll basiert auf dem TCP-Protokoll von TCP/IP. Zu seinen Funktionen gehören der C/S-Modus, einfache Anfragen (GET/POST/HEAD) und Flexibilität (kann beliebige übertragen). Datentyp HTML, XML, JSON, benutzerdefiniert usw.), keine Verbindung (pro Verbindung wird nur eine Anfrage verarbeitet und die Verbindung wird vom Zeitpunkt der Anforderungsausgabe bis zum Erhalt des 200-Status getrennt), zustandslos.
Die Untersuchung des HTTP-Protokolls umfasst hauptsächlich Wissenspunkte wie Antwortnachrichtenformat, Anforderungsnachrichtenformat, Statuscode usw.
Im Allgemeinen besteht ein HTTP-Protokoll aus drei Teilen: Startzeile, Header und Text.
[Antwortnachrichtenformat]
HTTP/1.1 200 0K
Connectlon:close
Datum: Do, 13. Okt. 2005 03:17:33 GMT
Server: Apache/2.0.54 (Unix)
Zuletzt – Nodifiziert: Mo, 22. Juni 1998 09;23;24 GMT
Inhalt – Länge: 682l
Inhalt – Typ: Text/HTML
Diese Antwortnachricht ist in drei Teile unterteilt: eine anfängliche Statuszeile (Statuszeile), einen Header und eine Abhängigkeit, die das angeforderte Objekt selbst enthält. Die Statuszeile besteht aus drei Feldern: Protokollversionsfeld, Statuscodefeld und Begründungsphrasenfeld.
[Nachrichtenformat anfordern]
GET /somedir/page.html HTTP/1.1
Host:www.chinaitlab.com
Verbindung:schließen
User-agent:Mozilla/4.0
Accept-sprache:zh-cn
(zusätzliche Wagenrücklauf- und Zeilenvorschubzeichen)
Die Anforderungsnachricht ist eine Zeile wird als Anforderungszeile bezeichnet, und nachfolgende Zeilen werden als Kopfzeilen bezeichnet. Die Anforderungszeile enthält drei Felder: Methodenfeld, URL-Feld und HTTP-Versionsfeld.
[Statuscode] Siehe http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
1xx Nachricht
2xx Erfolg
3xx-Umleitung
4xx-Anfragefehler
5xx-Serverfehler
[Allgemeine Statuscodes]
200 OK. Die Anfrage war erfolgreich und die von der Anfrage erwarteten Antwortheader oder Datenkörper werden mit dieser Antwort zurückgegeben.
300 Multiple Choices. Es gibt mehrere Optionen zum Anfordern von Ressourcen, z. B. das Anfordern von Texten auf Französisch, Englisch usw.
301 Dauerhaft verschoben. Zeigt an, dass die angeforderte Webseite dauerhaft an einen neuen Speicherort verschoben wurde
302 Gefunden. Gibt den Zustand an, in den die Seite zurückkehrt, wenn ein vorübergehender Sprung ausgeführt wird.
304 Nicht geändert. Die zwischengespeicherten Ressourcen des Clients sind die neuesten, sodass der Client den Cache verwenden muss.
400 Ungültige Anfrage. Ungültige Anforderung.
403 Verboten. Die Anfrage wurde vom Server abgelehnt.
404 Nicht gefunden. Dies bedeutet, dass der Server die angeforderte Webseite nicht finden kann. Eine Webseite, die auf dem Server nicht vorhanden ist, gibt häufig einen HTTP-Statuscode zurück.
500 Interner Serverfehler.
503 Dienst nicht verfügbar. Der Server kann derzeit keine Anfragen bearbeiten, der Dienst wird jedoch zu gegebener Zeit wiederhergestellt.
504 Gateway-Timeout. Ähnlich wie Status 408, aber die Antwort kommt von einem Gateway oder Proxy, bei dem beim Warten auf eine Antwort von einem anderen Server eine Zeitüberschreitung aufgetreten ist.
505 HTTP-Version wird nicht unterstützt. Die HTTP-Protokollversion wird nicht unterstützt.
[5] Lassen Sie uns kurz über den Rewrite-Mechanismus in Apache und den URI-Routing-Mechanismus im PHP-Framework sprechen
1) Beim URL-Rewriting geht es eigentlich darum, die vom Benutzer angeforderte URL über den Browser zu übertragen Im Hintergrund weist Apache die Anforderung auf den tatsächlichen Ressourcenpfad gemäß den vorkonfigurierten Umschreibungsregeln hin. Um es ganz klar auszudrücken: Es ist ein schlampiger Trick, den tatsächlichen Pfad umzuformen und Benutzern den Zugriff darauf zu ermöglichen der Nutzen davon.
1. SEO. Machen Sie dynamische URLs statisch, um den Appetit von Suchmaschinen zu befriedigen.
2. Zugangskontrolle. Beispielsweise ist es für den Client nach dem Umschreiben der Regeln schwierig, die Art des Hintergrundprogramms zu bestimmen.
3. URL-Umleitung. Wenn eine Website ihren Domänennamen ändert oder eine Alias-URL hinzufügt, kann sie über Regeln problemlos auf die URL verweisen, auf die zugegriffen werden soll.
mod_rewrite verwendet reguläre Ausdrücke, um die URL eingehender Anfragen dynamisch zu ändern. Es kann URLs Dateisystempfaden oder eine URL einer anderen zuordnen. Es verwendet eine unbegrenzte Anzahl von Regeln zum Bearbeiten von URLs, und jede Regel kann eine unbegrenzte Anzahl zusätzlicher Bedingungen enthalten. Sie können es auf viele Arten erkennen, z. B. anhand von Servervariablen, Umgebungsvariablen, HTTP-Headern, Zeitstempeln usw.
mod_rewrite verwaltet den gesamten URL-Pfad, einschließlich des Pfadinformationsteils. Eine Rewrite-Regel kann in http.conf oder .htaccess festgelegt werden. Der von einer Rewrite-Regel generierte Pfad kann eine Anforderungszeichenfolge oder die Verarbeitung interner Unterroutinen, die Umleitung externer Anforderungen oder das Eindringen interner Proxys umfassen.
2) Der URI-Routing-Mechanismus im PHP-Framework ähnelt dem Apache-Rewriting und umfasst im Allgemeinen Platzhalter und reguläre Regeln. Ermöglicht Benutzern die Umleitung (Neuzuordnung) von URI-Handlern. Legen Sie Ihre eigenen Routing-Regeln fest.
[6] MySQLs Indexierungsmechanismus, Prinzipien für die Verwendung zusammengesetzter Indizes
(Das Buch „MySQL in a Simple Way“ erklärt die Verwendung von Indizes ausführlicher)
Im Allgemeinen Bücher Das Inhaltsverzeichnis des Buches stellt den Indexierungsmechanismus vor, einschließlich der Tatsache, dass einige Bücher über spezielle Schnellsuchanhänge verfügen, die dem Index einer Datenbank sehr ähnlich sind.
Die Indizes von MySQL umfassen 4 Kategorien: Primärschlüsselindex (Primärschlüssel), eindeutiger Index (unique), regulärer Index (index) und Volltextindex (fullindex).
Index aus Tabellenname anzeigen; - Den Index in der Tabelle anzeigen
Status wie „Handler_read%“ anzeigen – Die Verwendung des Index anzeigen
Zusammengesetzter Index, folgen Sie im Allgemeinen dem Präfix ganz links Prinzip, wie zum Beispiel die drei Spalten a b c von table_a, um einen zusammengesetzten Index zu erstellen
Index ind_table_a für table_a(a,b,c) erstellen);
Dann werden nur a oder a,b verwendet in der Bedingung oder in Fällen wie a, b, c wird der neu erstellte zusammengesetzte Index verwendet.
【7】MySQL-Tabellentypen und der Unterschied zwischen MyISAM und InnoDB
Gemeinsame MySQL-Tabellentypen (d. h. Speicher-Engines)
zeigen Sie Engines an, um unterstützte Tabellentypkonfigurationen anzuzeigen. Zu den gebräuchlichsten gehören: MyISAM/Innodb/Memory/Merge/NDB
Unter diesen sind MyISAM und Innodb die beiden am häufigsten verwendeten Tabellentypen, jeder mit seinen eigenen Vorteilen. Wir können den Tabellentyp auswählen, der zu uns passt auf unsere Bedürfnisse.
[MyISAM]
1) Jeder Datenbankspeicher enthält 3 Dateien: .frm (Tabellendefinition), MYD (Datendatei), MYI (Indexdatei)
2) Datendateien oder Indexdateien können auf mehrere Festplatten verweisen
3) Die Standard-Engine von Linux, Win ist standardmäßig InnoDB
4) Vermeiden Sie bei nicht-transaktionalen Typen den zusätzlichen Overhead von Transaktionstypen
5) Geeignet für auswahl- und einfügeintensive Tabellen
6) Der Standard-Sperrplanungsmechanismus von MyISAM ist die Schreibpriorität, die über LOW_PRIORITY_UPDATES festgelegt werden kann
7) Datendateien vom Typ MyISAM Das Kopieren in verschiedenen Betriebssystemen ist sehr wichtig und erleichtert die Bereitstellung.
[Innodb]
1) Für Transaktionsanwendungen
2) Geeignet für aktualisierungs- und löschintensive Vorgänge. Beim Ausführen von „select count(*) from table“ muss InnoDB die gesamte Tabelle scannen, um zu berechnen, wie viele Zeilen vorhanden sind, aber MyISAM muss lediglich die Anzahl der gespeicherten Zeilen lesen. Beachten Sie, dass die Operationen der beiden Tabellen identisch sind, wenn die count(*)-Anweisung eine Where-Bedingung enthält. Beim DELETE FROM table erstellt InnoDB die Tabelle nicht neu, sondern löscht sie Zeile für Zeile.
3) Einführung von Sperren auf Zeilenebene und Fremdschlüsseleinschränkungen
4) InnoDB unterstützt keine Indizes vom Typ FULLTEXT
[8] Erläutern Sie kurz den Schnellsortierungsalgorithmus
Grundidee: Teilen Sie die zu sortierende Sequenz durch einen Sortierdurchgang in zwei Teile auf, wobei ein Teil kleinere Datensätze aufweist als der andere Teil, und sortieren Sie dann die beiden Teile schnell getrennt weiter, um eine Reihenfolge zu erreichen.
Algorithmus-Implementierung: Es gibt zwei Zeiger niedrig und hoch, die Anfangswerte sind niedrig = 1, hoch = n, und der Basiswert ist der Schlüssel (normalerweise wird der erste ausgewählt), und dann wird zuerst begonnen die obere Position und gehen Sie vorwärts, suchen Sie den ersten Datensatz, der kleiner als der Schlüssel ist, und tauschen Sie ihn mit dem Schlüssel aus. Suchen Sie dann rückwärts von der unteren Position, finden Sie den ersten Datensatz, der größer als der Schlüssel ist, und tauschen Sie ihn mit dem Basiswert aus. Wiederholen Sie den Vorgang, bis niedrig = hoch .
Im ersten Sortierergebnis ist der Datensatzwert vor dem Schlüssel kleiner als der Datensatzwert nach dem Schlüssel.
11 25 9 3 16 2 //Wählen Sie 11 als Schlüssel
2 25 9 3 16 11
2 11 9 3 16 25
2 3 9 11 16 25
【9】Grundlegende Verwendung von awk, sed, sort (mit Beispielen untersucht)
[Beispiel]: Es gibt den folgenden Dateitest, bitte zählen Sie die Anzahl der Vorkommen von Jede URL wird mithilfe einer Shell erreicht.
a www.baidu.com 20:00
b www.qq.com 19:30
c www.baidu.com 14:00
d www.baidu.com 23:00
e www.qq.com 20:30
f www.360.com 20:30
Katzentest| -F'' '{print $2}' |sort |. uniq -c |. sort -rn
【10】Die Verwendung und das Verständnis von Memcached und Redis
Memcached und Redis sind beide gleich Das In-Memory-Speichersystem von key-Value speichert Suchergebnisse über Hash-Tabellen, um einen leistungsstarken Caching-Mechanismus zu erreichen. Stark frequentierte Websites wie Sinas Weibo und Taobao müssen diese Dinge nutzen.
Das Folgende ist ein Einleitungsauszug aus der Enzyklopädie. Die konkrete Praxis und Verwendung wird später im Detail vorgestellt.
Memcache ist ein leistungsstarkes verteiltes Speicherobjekt-Caching-System, das eine einheitliche, große Hash-Tabelle im Speicher verwaltet und zum Speichern von Daten in verschiedenen Formaten, einschließlich Bildern, Videos und Dateien, verwendet werden kann Suchergebnisse usw. Einfach ausgedrückt werden die Daten in den Speicher abgerufen und dann aus dem Speicher gelesen, wodurch die Lesegeschwindigkeit erheblich verbessert wird.
Redis ist ein Schlüsselwertspeichersystem. Ähnlich wie Memcached unterstützt es relativ mehr gespeicherte Werttypen, einschließlich String (String), Liste (verknüpfte Liste), Set (Satz) und Zset (geordneter Satz).
Off-topic:
Der gesamte Interviewprozess fühlte sich sehr gut an und ich hatte das Gefühl, dass die Interviewer recht locker waren. Nicht so arrogant wie andere sagten. Baidus Interviews sind offen, und während des gesamten Interviewprozesses besprechen Menschen in der Nähe Probleme und Pläne.