Heim Java JavaInterview Fragen Fragen zum neuen Java-Interview 2020 – Java Web (2)

Fragen zum neuen Java-Interview 2020 – Java Web (2)

Jun 16, 2020 pm 05:29 PM
java java web Interviewfragen

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.


Attribute im HTTP-Header anpassen und überprüfen

Diese Methode verwendet auch Token zur Überprüfung. Der Unterschied zur vorherigen Methode besteht darin, dass das Token hier nicht verwendet wird Platzieren Sie es als Parameter in der HTTP-Anfrage und fügen Sie es in ein benutzerdefiniertes Attribut im HTTP-Header ein. Über die XMLHttpRequest-Klasse können Sie das HTTP-Header-Attribut csrftoken allen Anforderungen dieses Typs gleichzeitig hinzufügen und den Token-Wert darin einfügen.

Dies beseitigt die Unannehmlichkeiten beim Hinzufügen eines Tokens zur Anforderung in der vorherigen Methode. Gleichzeitig wird die über XMLHttpRequest angeforderte Adresse nicht in der Adressleiste des Browsers aufgezeichnet, und es besteht kein Grund zur Sorge Token wird über den Referrer an andere Websites weitergegeben.

Wenn Sie weitere verwandte Interviewfragen erfahren möchten, können Sie die Spalte

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP-Tutorial
1506
276
Edge PDF -Viewer funktioniert nicht Edge PDF -Viewer funktioniert nicht Aug 07, 2025 pm 04:36 PM

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

Können Sie Methodenüberladen und Methoden in Java erklären? Können Sie Methodenüberladen und Methoden in Java erklären? Aug 06, 2025 am 07:41 AM

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.

Gehen Sie mit gutem Beispielionieren einer Subprozesse aus Gehen Sie mit gutem Beispielionieren einer Subprozesse aus Aug 06, 2025 am 09:05 AM

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.

Optimierung verschachtelter Forach -Schleifen für komplexe Datenstrukturen Optimierung verschachtelter Forach -Schleifen für komplexe Datenstrukturen Aug 06, 2025 pm 12:53 PM

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.

Bereitstellung einer Java -Anwendung in Kubernetes mit Docker Bereitstellung einer Java -Anwendung in Kubernetes mit Docker Aug 08, 2025 pm 02:45 PM

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

Python -Überprüfung, ob die Zeichenfolge Beispiel ist Python -Überprüfung, ob die Zeichenfolge Beispiel ist Aug 06, 2025 am 07:42 AM

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.

Wie implementieren Sie einen einfachen TCP -Client in Java? Wie implementieren Sie einen einfachen TCP -Client in Java? Aug 08, 2025 pm 03:56 PM

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

VS -Code -Verknüpfung, um sich auf das Explorer -Panel zu konzentrieren VS -Code -Verknüpfung, um sich auf das Explorer -Panel zu konzentrieren Aug 08, 2025 am 04:00 AM

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.

See all articles