Fragen zum neuen Java-Interview 2020 – Java Web (2)
1. Kann die Sitzung weiterhin verwendet werden, wenn der Client Cookies deaktiviert?
Cookie und Session werden im Allgemeinen als zwei unabhängige Dinge betrachtet. Session verwendet eine Lösung, die den Status auf der Serverseite verwaltet, während Cookie eine Lösung verwendet, die den Status auf der Clientseite verwaltet. Aber warum kann ich die Sitzung nicht erhalten, wenn ich Cookies deaktiviere? Da die Sitzung die Sitzungs-ID verwendet, um die Serversitzung zu ermitteln, die der aktuellen Konversation entspricht, und die Sitzungs-ID über Cookie weitergeleitet wird, entspricht das Deaktivieren von Cookies dem Verlust der Sitzungs-ID, und Sie erhalten keine Sitzung.
Angenommen, der Benutzer verwendet Session, wenn Cookies deaktiviert sind. Es gibt mehrere Möglichkeiten, dies zu erreichen:
Setzen Sie „session.use_trans_sid = 1“ in der php.ini Konfigurationsdatei“ oder aktivieren Sie beim Kompilieren die Option „--enable-trans-sid“, damit PHP die Sitzungs-ID automatisch seitenübergreifend weitergibt.
Übergeben Sie den Wert manuell über die URL und die Sitzungs-ID über das versteckte Formular.
Speichern Sie die Sitzungs-ID in einer Datei, Datenbank usw. und rufen Sie sie während des seitenübergreifenden Prozesses manuell auf.
2. Was ist der Unterschied zwischen Feder-MVC und Federbeinen?
1. Unterschiede in den Abfangmechanismen
Struts2 ist ein Abfangen auf Klassenebene. Bei der Integration mit Spring ist der ActionBean-Injektionsbereich von Struts2 .Prototyp und fügen Sie dann die Anforderungsdaten über Setter und Getter in die Eigenschaft ein. In Struts2 entspricht eine Aktion einem Anforderungs- und Antwortkontext. Beim Empfang von Parametern kann sie über Attribute empfangen werden. Dies zeigt, dass Attributparameter von mehreren Methoden gemeinsam genutzt werden. Eine Aktionsmethode in Struts2 kann einer URL entsprechen, ihre Klassenattribute werden jedoch von allen Methoden gemeinsam genutzt. Dies bedeutet, dass es nicht möglich ist, Anmerkungen oder andere Methoden zur Identifizierung ihrer Methode zu verwenden, und sie nur als mehrere Instanzen entworfen werden kann.
SpringMVC ist ein Abfangen auf Methodenebene. Eine Methode entspricht einem Anforderungskontext, sodass die Methode grundsätzlich unabhängig ist und exklusiven Zugriff auf Anforderungs- und Antwortdaten hat. Jede Methode entspricht gleichzeitig einer URL. Die Parameterübergabe wird direkt in die Methode eingefügt, was für die Methode einzigartig ist. Die Verarbeitungsergebnisse werden über ModeMap an das Framework zurückgegeben. Während der Spring-Integration verwendet SpringMVCs Controller-Bean standardmäßig den Singleton-Modus, sodass standardmäßig nur ein Controller für alle Anforderungen erstellt wird. Es sollten keine gemeinsamen Eigenschaften vorhanden sein, sodass es threadsicher ist. Wenn Sie den Standardbereich ändern möchten, ist dies erforderlich @Scope-Annotationsänderung hinzufügen.
Struts2 verfügt über einen eigenen Interceptor-Mechanismus. SpringMVC verwendet eine unabhängige Aop-Methode, wodurch die Anzahl der Konfigurationsdateien von Struts2 größer ist als die von SpringMVC.
(Verwandte Tutorials empfohlen: Java-Einstiegsprogramm )
2. Unterschiede in den zugrunde liegenden Frameworks
Struts2 wird mit Filter (StrutsPrepareAndExecuteFilter), SpringMVC ( DispatcherServlet ) wird mithilfe von Servlet implementiert. Der Filter wird initialisiert, nachdem der Container gestartet wurde; er stürzt ab, nachdem der Dienst gestoppt wurde, später als Servlet. Das Servlet wird beim Aufruf initialisiert, bevor Filter aufgerufen wird, und wird zerstört, nachdem der Dienst beendet wurde.
3. Leistung
Struts2 ist ein Abfangen auf Klassenebene, das alle Attributwertinjektionen laden muss basiert auf der Methode „Abfangen“, bei der eine Singleton-Modus-Bean zur Injektion geladen wird. Daher sind die Entwicklungseffizienz und Leistung von SpringMVC höher als bei Struts2.
4. Konfiguration
spring MVC und Spring sind nahtlos. Das Management und die Sicherheit dieses Projekts sind ebenfalls höher als bei Struts2.
3. Wie vermeide ich SQL-Injection?
PreparedStatement (einfache und effektive Methode)
Verwenden Sie reguläre Ausdrücke, um eingehende Parameter zu filtern
-
String-Filterung
Rufen Sie diese Funktion in JSP auf, um zu überprüfen, ob sie illegale Zeichen enthält
JSP-Seitenbeurteilungscode
4. Was ist ein XSS-Angriff und wie kann man ihn vermeiden?
XSS-Angriff wird auch CSS genannt, der vollständige Name ist Cross-Site-Script (Cross-Site-Scripting-Angriff). Das Prinzip besteht darin, dass der Angreifer bösartigen HTML-Code in eine Website mit XSS-Schwachstellen eingibt Wenn der Benutzer die Website durchsucht, wird dieser HTML-Code automatisch ausgeführt, um den Angriffszweck zu erreichen.
XSS-Angriffe ähneln SQL-Injection-Angriffen. Bei XSS-Angriffen werden SQL-Anweisungen als Benutzereingabe verwendet, um die Browsersteuerung zu steuern Erhalten Sie einige Benutzerinformationen. XSS ist eine häufige Schwachstelle in Webprogrammen. XSS ist eine passive Angriffsmethode, die auf der Clientseite eingesetzt wird.
Die allgemeine Idee der XSS-Prävention besteht darin, die Eingabe (und URL-Parameter) zu filtern und die Ausgabe zu kodieren.
(Empfohlenes Video-Tutorial: Java-Video-Tutorial)
5. Was ist ein CSRF-Angriff und wie kann man ihn vermeiden?
CSRF (Cross-Site-Request-Forgery) wird auch als One-Click-Angriff oder Session-Riding bezeichnet. Der vollständige chinesische Name lautet Cross-Site-Request-Forgery. Im Allgemeinen fälscht ein Angreifer eine Anfrage vom Browser des Benutzers und sendet sie an eine Website, für deren Besuch sich der Benutzer authentifiziert hat, sodass die Zielwebsite den Befehl empfängt, fälschlicherweise annimmt, dass es sich um den tatsächlichen Vorgang des Benutzers handelt, und den Befehl ausführt. Wird häufig verwendet, um Konten zu stehlen, Geld zu überweisen, falsche Nachrichten zu senden usw. Der Angreifer nutzt die Sicherheitslücke der Website zur Anforderungsüberprüfung aus, um einen solchen Angriff durchzuführen. Die Website kann bestätigen, dass die Anforderung vom Browser des Benutzers stammt, kann jedoch nicht überprüfen, ob die Anforderung von der wahren Absicht des Benutzers stammt.
So vermeiden Sie:
1. Überprüfen Sie das HTTP-Referer-Feld
Das Referer-Feld im HTTP-Header zeichnet die Quelladresse der HTTP-Anfrage auf. Unter normalen Umständen kommt die Anfrage zum Zugriff auf eine sicherheitsbeschränkte Seite von derselben Website, und wenn ein Hacker einen CSRF-Angriff darauf durchführen möchte, kann er die Anfrage im Allgemeinen nur auf seiner eigenen Website erstellen. Daher können CSRF-Angriffe durch die Überprüfung des Referrer-Werts abgewehrt werden.
2. Verifizierungscode verwenden
Verifizierungscode zu Schlüsseloperationsseiten hinzufügen Nach Erhalt der Anfrage kann der Hintergrund den Verifizierungscode beurteilen, um CSRF zu verhindern. Diese Methode ist jedoch nicht sehr benutzerfreundlich.
3. Token zur Anfrageadresse hinzufügen und überprüfen
Der Grund für den Erfolg des CSRF-Angriffs liegt darin, dass Hacker die Anfrage des Benutzers vollständig fälschen können und alle Benutzerüberprüfungsinformationen in der Anfrage vorhanden sind Cookies, sodass Hacker die eigenen Cookies des Benutzers direkt verwenden können, um die Sicherheitsüberprüfung zu bestehen, ohne die Überprüfungsinformationen zu kennen.
Um CSRF zu widerstehen, besteht der Schlüssel darin, Informationen in die Anfrage einzufügen, die Hacker nicht fälschen können, und diese Informationen sind im Cookie nicht vorhanden. Sie können der HTTP-Anfrage ein zufällig generiertes Token als Parameter hinzufügen und auf der Serverseite einen Interceptor erstellen, um das Token zu überprüfen. Wenn in der Anfrage kein Token vorhanden ist oder der Token-Inhalt falsch ist, wird davon ausgegangen, dass dies der Fall ist ein CSRF-Angriff und die Anfrage wird abgelehnt.
Diese Methode ist sicherer als die Überprüfung des Referrs. Das Token kann nach der Anmeldung des Benutzers generiert und in der Sitzung platziert werden. Anschließend kann das Token bei jeder Anfrage aus der Sitzung entnommen und mit dem eingetroffenen Token abgeglichen werden Vergleichen Sie die Anforderung. Die Schwierigkeit dieser Methode besteht jedoch darin, wie das Token in Form von Parametern zur Anforderung hinzugefügt wird.
Bei GET-Anfragen wird das Token an die Anfrageadresse angehängt, sodass die URL zu
http://url?csrftoken=tokenvalue
wird. Bei POST-Anfragen fügen Sie am Ende des Formulars
<input type="hidden" name="csrftoken" value="tokenvalue"/>Auf diese Weise wird das Token in Form eines Parameters zur Anfrage hinzugefügt.
Java-Interviewfragen besuchen.
Das obige ist der detaillierte Inhalt vonFragen zum neuen Java-Interview 2020 – Java Web (2). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

TestthepdfinanotherapptodetermineeiftheisueiswithTheFileoredge.2.Enablethebuilt-InpdfviewerByTurningOff "immerOpenpdffileSexTternal" und "DownloadPdffffiles" Inedgesetings

Methodenüberladung und Methodenüberladung sind zwei Mechanismen zur Implementierung des Polymorphismus in Java. 1. Die Methodenüberlastung erfolgt in derselben Klasse. Es erfordert denselben Methodennamen, jedoch unterschiedliche Parameterliste (Nummer, Typ oder Reihenfolge der Parameter), die zum Kompilieren des Zeitpolymorphismus gehört. Der Rückgabetyp kann unterschiedlich sein, kann aber nicht allein durch den Rückgabetyp überlastet werden. Es kann unterschiedliche Zugriffsmodifikatoren und Ausnahmegerklärungen geben. 2. Die Umschreibung der Methode tritt in der Erbschaftsbeziehung auf. Die Unterklasse bietet die spezifische Implementierung der vorhandenen Methoden der übergeordneten Klasse. Es erfordert die gleiche Methodensignatur und der Rückgabetyp ist kompatibel. Der Zugangsmodifikator kann nicht strenger sein. Es gehört zum Laufzeitpolymorphismus. Die Instanzmethode muss verwendet werden und das richtige Umschreiben kann durch die @Override -Annotation sichergestellt werden. Zusammen verbessern die beiden die Code -Lesbarkeit und Skalierbarkeit.

Führen Sie den untergeordneten Prozess mit dem Betriebssystem/EXEC -Paket aus, erstellen Sie den Befehl über exec.Command, führen Sie ihn jedoch nicht sofort aus. 2. Führen Sie den Befehl mit .output () aus und fangen Sie Stdout an. Wenn der Exit-Code ungleich Null ist, return exec.exiterror; 3. Verwenden Sie .Start (), um den Prozess ohne Blockierung zu starten, mit .stdoutpipe () in Echtzeit aus der Ausgabe von Ausgang zu streamen; V. 5. Exec.EexitEerror muss verarbeitet werden, um den Ausgangscode und den Stderr des fehlgeschlagenen Befehls zu erhalten, um Zombie -Prozesse zu vermeiden.

Um verschachtelte für Schleifen zu optimieren, sollten zuerst redundante Iterationen vermieden werden, und die zeitliche Komplexität kann von O (N × m) auf O (n m) reduziert werden. Zweitens, wenn die Struktur nicht wirklich hierarchisch ist, sollten die Daten mithilfe von Methoden wie SelectMany abgeflacht werden. Drittens herausspringen oder unnötige Verarbeitung durch bedingte Beurteilung überspringen; Viertens wählen Sie geeignete Datenstrukturen wie Wörterbuch- oder Hash -Mengen aus, um die Suchffizienz zu verbessern. Fünftens kann eine Parallelisierung mit Vorsicht verwendet werden, wenn die Operationen unabhängig und zeitaufwändig sind. Sechstens, um eine komplexe Logik in unabhängige Methoden oder Abfragen zu extrahieren, um die Lesbarkeit und Wartbarkeit zu verbessern. Der Kern der Optimierung besteht darin, die Komplexität zu verringern, Daten vernünftig zu organisieren und immer die Notwendigkeit des Verschachtelns zu bewerten und letztendlich einen effizienten, klaren und erweiterbaren Code zu erreichen.

Containerisierte Java-Anwendung: Erstellen Sie eine Dockerfile, verwenden Sie ein grundlegendes Bild wie Eclipse-Temurin: 17-Jre-Alpine, kopieren Sie die JAR-Datei und definieren Sie den Startbefehl, erstellen Sie das Bild über Dockerbuild und führen Sie lokal mit Dockerun aus. 2. Drücken Sie das Bild in die Containerregistrierung: Verwenden Sie Dockertag, um das Bild zu markieren und zu Dockerhub und anderen Registern zu drücken. Sie müssen sich zuerst bei DockerLogin anmelden. 3.. Bereitstellen in Kubernetes: Schreiben Sie die Bereitstellung. Yaml, um die Bereitstellung zu definieren, die Anzahl der Replikate, Containerbilder und Ressourcenbeschränkungen festlegen und den Dienst schreiben.yaml zum Erstellen zu erstellen

ISDIGIT () ist nur für positive Ganzzahlen anwendbar und unterstützt keine Dezimalstellen, negative Zahlen und wissenschaftliche Notationsmethoden. 2. isnumeric () unterstützt mehr Unicode -Zahlen wie Brüche, unterstützt jedoch keine Dezimalpunkte und negativen Vorzeichen; 3.. Ersetzen Sie in Kombination durch ISDIGIT können Ganzzahlen und Dezimalstellen beurteilen, unterstützt jedoch keine wissenschaftlichen Notationsmethoden. 4. Versuchs-Versuch-Float-Konvertierung ist die allgemeinste Methode, die Ganzzahlen, Dezimalstellen, negative Zahlen und wissenschaftliche Notationsmethoden unterstützt und für allgemeine Szenarien empfohlen wird. 5. Regelmäßige Ausdrücke können das Zahlenformat genau steuern, sind jedoch kompliziert zu schreiben und fördern zu Fehlern. Zusammenfassung: Die praktischste Methode ist die vierte Methode, die einfach und umfassend verschiedene numerische Formen unterstützt und mit einem vollständigen Satz endet.

Importjava.ioandjava.net.socketfori/oandsocketcommunication.2.CreateSocketObjectToConnectTotheserverusednameAnDport.3.useprintSertosendDataviaoutputStreamandBufferedReadereadServerresponSfrend

In VSCODE können Sie das Panel- und Bearbeitungsbereich durch Abkürzungsschlüssel schnell wechseln. Um zum linken Explorer -Feld zu springen, verwenden Sie die Strg -Verschiebung E (Windows/Linux) oder CMD Shift E (MAC). Kehren Sie in den Bearbeitungsbereich zurück, um Strg `oder ESC oder Strg 1 ~ 9 zu verwenden. Im Vergleich zum Mausbetrieb sind Tastaturverknüpfungen effizienter und unterbrechen den Codierungsrhythmus nicht. Weitere Tipps sind: Strg KCtrl E Fokus -Suchkästchen, F2 -Datei umbenennen, Datei löschen, die Öffnungsdatei eingeben, Pfeilschlüssel erweitern/kollapten.
