国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Java JavaInterview Fragen H?ufige Java-Interviewfragen (mit Antworten)

H?ufige Java-Interviewfragen (mit Antworten)

Nov 26, 2019 pm 03:02 PM
java

H?ufige Java-Interviewfragen (mit Antworten)

Wie implementiert man eine Warteschlange mithilfe eines Arrays?

Wenn wir ein Array zum Implementieren einer Warteschlange verwenden, müssen wir auf das überlaufph?nomen achten. In diesem Fall k?nnen wir das Problem mithilfe der Schleife des Arrays l?sen, d. h. durch Verbinden Enden des Arrays. Verwenden Sie den vorderen Zeiger, um auf die erste Position der Warteschlange zu zeigen, und den hinteren Zeiger, um auf die letzte Position der Warteschlange zu zeigen. (Empfohlene Studie: Allgemeine Java-Interviewfragen)

Wenn eine innere Klasse auf eine lokale Variable zugreift, warum muss die Variable dann mit final ge?ndert werden?

Weil der Lebenszyklus anders ist. Lokale Variablen werden nach Beendigung der Methode zerst?rt, das innere Klassenobjekt wird jedoch nicht unbedingt zerst?rt. Dies führt dazu, dass die innere Klasse auf eine nicht vorhandene Variable verweist.

Der Compiler generiert also eine Kopie der lokalen Variablen in der inneren Klasse. Der Lebenszyklus dieser Kopie ist der gleiche wie der des inneren Klassenobjekts, sodass die oben genannten Probleme nicht auftreten.

Dies führt jedoch zu dem Problem, dass bei einer ?nderung einer der Variablen die Werte der beiden Variablen unterschiedlich sein k?nnen. Um dieses Problem zu l?sen, erfordert der Compiler, dass lokale Variablen endgültig ge?ndert werden müssen, um sicherzustellen, dass die beiden Variablen denselben Wert haben.

Nach JDK8 verlangt der Compiler nicht, dass lokale Variablen, auf die von inneren Klassen zugegriffen wird, endgültig ge?ndert werden müssen, lokale Variablenwerte k?nnen jedoch nicht ge?ndert werden (weder in Methoden noch in inneren Klassen), da sonst ein Kompilierungsfehler auftritt gemeldet. Wenn Sie Javap verwenden, um den kompilierten Bytecode anzuzeigen, k?nnen Sie feststellen, dass der Compiler final hinzugefügt hat.

long s = 499999999 * 499999999 Welchen Wert hat s im obigen Code?

Den Berechnungsergebnissen des Codes zufolge sollte der Wert von s -1371654655 sein. Dies liegt daran, dass die Berechnung des rechten Werts in Java standardm??ig den Typ int verwendet.

K?nnen nicht statische innere Klassen statische Methoden definieren?

public class OuterClass{
    private static float f = 1.0f;

    class InnerClass{
        public static float func(){return f;}
    }
}

Der obige Code verursacht einen Kompilierungsfehler, da nur statische innere Klassen statische Methoden definieren k?nnen.

Was ist der Unterschied zwischen Lock und Synchronized?

1. 使用方法的區(qū)別
- **Synchronized**:在需要同步的對(duì)象中加入此控制,`synchronized`可以加在方法上,也可以加在特定代碼塊中,括號(hào)中表示需要鎖的對(duì)象。
- **Lock**:需要顯示指定起始位置和終止位置。一般使用`ReentrantLock`類做為鎖,多個(gè)線程中必須要使用一個(gè)`ReentrantLock`類做為對(duì)象才能保證鎖的生效。且在加鎖和解鎖處需要通過`lock()`和`unlock()`顯示指出。所以一般會(huì)在`finally`塊中寫`unlock()`以防死鎖。
2. 性能的區(qū)別
`synchronized`是托管給JVM執(zhí)行的,而`lock`是java寫的控制鎖的代碼。在Java1.5中,`synchronize`是性能低效的。因?yàn)檫@是一個(gè)重量級(jí)操作,需要調(diào)用操作接口,導(dǎo)致有可能加鎖消耗的系統(tǒng)時(shí)間比加鎖以外的操作還多。相比之下使用Java提供的Lock對(duì)象,性能更高一些。但是到了Java1.6,發(fā)生了變化。`synchronize`在語義上很清晰,可以進(jìn)行很多優(yōu)化,有適應(yīng)自旋,鎖消除,鎖粗化,輕量級(jí)鎖,偏向鎖等等。導(dǎo)致在Java1.6上`synchronize`的性能并不比Lock差。
  - **Synchronized**:采用的是CPU悲觀鎖機(jī)制,即線程獲得的是獨(dú)占鎖。獨(dú)占鎖意味著 **其他線程只能依靠阻塞來等待線程釋放鎖**。而在CPU轉(zhuǎn)換線程阻塞時(shí)會(huì)引起線程上下文切換,當(dāng)有很多線程競(jìng)爭(zhēng)鎖的時(shí)候,會(huì)引起CPU頻繁的上下文切換導(dǎo)致效率很低。
  - **Lock**:用的是樂觀鎖方式。所謂樂觀鎖就是,**每次不加鎖而是假設(shè)沒有沖突而去完成某項(xiàng)操作,如果因?yàn)闆_突失敗就重試,直到成功為止**。樂觀鎖實(shí)現(xiàn)的機(jī)制就是`CAS`操作。我們可以進(jìn)一步研究`ReentrantLock`的源代碼,會(huì)發(fā)現(xiàn)其中比較重要的獲得鎖的一個(gè)方法是`compareAndSetState`。這里其實(shí)就是調(diào)用的CPU提供的特殊指令。
3. `ReentrantLock`:具有更好的可伸縮性:比如時(shí)間鎖等候、可中斷鎖等候、無塊結(jié)構(gòu)鎖、多個(gè)條件變量或者鎖投票。

Wie schneidet eine Float-Variable im Vergleich zu 0 ab?

Es gibt Folattypen und Doppeltypen. Die Wahrscheinlichkeit, dass diese Dezimaltypen direkt 0 sind, n?hert sich 0 unendlich, daher kann = nicht verwendet werden. Es sollte nach |x-0|

//用程序表示就是

fabs(x) < 0.00001f

Wie erstelle ich eine neue nicht statische innere Klasse?

Die innere Klasse muss Outer.Inner a sein, wenn sie deklariert wird, genau wie int a. Was die statische innere Klasse und die nicht statische innere Klasse new betrifft, gibt es einen kleinen Unterschied:

Outer.Inner a = new Outer().new Inner() (nicht statisch, es muss ein Outer-Objekt vorhanden sein, bevor die neue innere Klasse erstellt werden kann)

Outer.Inner a = new Outer.Inner( ) (statische innere Klasse)

Benennungsregeln für Java-Bezeichner

k?nnen Folgendes enthalten: Buchstaben, Zahlen, $, _ (Unterstrich), dürfen nicht mit einer Zahl beginnen und dürfen nicht Dies k?nnen Java-Schlüsselw?rter oder reservierte W?rter sein.

Welche Entwurfsmuster kennen Sie, die in JDK verwendet werden?

Dekorationsmodus: java.io

Singleton-Modus: Laufzeitklasse

Einfacher Factory-Modus: Integer.valueOf-Methode

Fliegengewichtsmodus: String Konstantenpool, Integer.valueOf(int i), Character.valueOf(char c)

Iteratormodus: Iterator

Verantwortungskettenmodus: Das übergeordnete Delegationsmodell von ClassLoader

Interpreter Modus: Regul?rer Ausdruck java.util.regex.Pattern

Wie ConcurrentHashMap Thread-Sicherheit gew?hrleistet

JDK 1.7 und früher:

ConcurrentHashMap erm?glicht mehrere ?nderungsvorg?nge Der Schlüssel liegt in der Verwendung der Lock-Separation-Technologie. Es verwendet mehrere Sperren, um ?nderungen an verschiedenen Teilen der Hash-Tabelle zu steuern. ConcurrentHashMap verwendet intern Segmente, um diese verschiedenen Teile darzustellen. Jedes Segment ist eigentlich eine kleine Hash-Tabelle und sie haben ihre eigenen Sperren. Mehrere ?nderungsvorg?nge k?nnen gleichzeitig ausgeführt werden, solange sie in verschiedenen Segmenten erfolgen.

JDK 1.8:

Obwohl Segment beibehalten wird, wurden seine Attribute vereinfacht, um mit ?lteren Versionen kompatibel zu sein.

Verwenden Sie beim Einfügen den CAS-Algorithmus: unsafe.compareAndSwapInt(this, valueOffset, Expect, Update). CAS (Compare And Swap) bedeutet, dass, wenn der in der ValueOffset-Position enthaltene Wert mit dem erwarteten Wert übereinstimmt, der Wert der ValueOffset-Position aktualisiert wird, um zu aktualisieren und true zurückzugeben. Andernfalls erfolgt keine Aktualisierung und es wird false zurückgegeben. Der Schlüssel oder Wert darf beim Einfügen nicht null sein

Es ?hnelt der HashMap von Java8. Die unterste Ebene besteht immer noch aus einem rot-schwarzen ?Array“-Baum Struktur speichert TreeBin-Objekte und kein TreeNode-Objekt;

CAS ist ein bekannter sperrenfreier Algorithmus. Hat ConcurrentHashMap also keine Sperren? Natürlich nicht. Wenn der Hash-Wert mit dem Kopfknoten der verknüpften Liste übereinstimmt, wird er dennoch synchronisiert und gesperrt, und die verknüpfte Liste wird gesperrt.

Der Unterschied zwischen Thread.sleep() & Thread.yield()&Thread.wait()

Sowohl sleep() als auch yield() geben die CPU frei.

sleep() kann Threads mit niedriger Priorit?t eine Chance zur Ausführung geben. Natürlich kann es auch Threads mit derselben Priorit?t eine Chance geben, und yield() kann nur Threads mit derselben Ausführungsm?glichkeit geben Priorit?t eine Chance zur Ausführung Es besteht eine Chance zur Ausführung.

Thread.sleep und Thread.yield() führen nicht dazu, dass sich das Sperrverhalten ?ndert. Wenn der aktuelle Thread die Sperre besitzt, l?sst Thread.sleep den Thread die Sperre nicht frei. Wenn es Ihnen hilft, sich daran zu erinnern, k?nnen Sie einfach denken, dass die sperrenbezogenen Methoden in der Object-Klasse definiert sind, sodass der Aufruf von Thread.sleep das sperrenbezogene Verhalten nicht beeinflusst.

Thread.sleep und Object.wait unterbrechen den aktuellen Thread. Unabh?ngig davon, welcher Thread angehalten ist, bedeutet dies, dass er keine CPU-Ausführungszeit mehr ben?tigt. Das Betriebssystem weist anderen Threads Ausführungszeit zu. Der Unterschied besteht darin, dass nach dem Aufruf von wait andere Threads notify/notifyAll ausführen müssen, um die CPU-Ausführungszeit zurückzugewinnen.

Was ist der Unterschied zwischen Arraylist und Linkedlist?

Sowohl ArrayList als auch LinkedList implementieren die List-Schnittstelle, es gibt jedoch einige Unterschiede zwischen ihnen.

(1) ArrayList ist eine Datenstruktur, die auf einem von Array unterstützten Index basiert und daher wahlfreien Zugriff auf Elemente erm?glicht.

(2) Im Vergleich zu ArrayList ist das Einfügen, Hinzufügen und L?schen eines Elements m?glich schneller sein

(3) LinkedList verbraucht mehr Speicher als ArrayList, da jeder Knoten in LinkedList die Referenz des vorherigen und folgenden Knotens speichert

Das obige ist der detaillierte Inhalt vonH?ufige Java-Interviewfragen (mit Antworten). 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
1502
276
Wie gehe ich mit Transaktionen in Java mit JDBC um? Wie gehe ich mit Transaktionen in Java mit JDBC um? Aug 02, 2025 pm 12:29 PM

Um JDBC -Transaktionen korrekt zu verarbeiten, müssen Sie zun?chst den automatischen Komiti -Modus ausschalten und dann mehrere Vorg?nge ausführen und schlie?lich entsprechend den Ergebnissen festlegen oder rollen. 1. Nennen Sie Conn.SetAutoCommit (False), um die Transaktion zu starten. 2. Führen Sie mehrere SQL -Operationen aus, z. B. einfügen und aktualisieren. 3. Rufen Sie Conn.Commit () an, wenn alle Vorg?nge erfolgreich sind, und rufen Sie Conn.Rollback () auf, wenn eine Ausnahme auftritt, um die Datenkonsistenz zu gew?hrleisten. Gleichzeitig sollten Try-with-Ressourcen verwendet werden, um Ressourcen zu verwalten, Ausnahmen ordnungsgem?? zu behandeln und Verbindungen zu schlie?en, um Verbindungsleckage zu vermeiden. Darüber hinaus wird empfohlen, Verbindungspools zu verwenden und Save -Punkte zu setzen, um teilweise Rollback zu erreichen und Transaktionen so kurz wie m?glich zu halten, um die Leistung zu verbessern.

Wie arbeite man mit Kalender in Java? Wie arbeite man mit Kalender in Java? Aug 02, 2025 am 02:38 AM

Verwenden Sie Klassen im Java.Time -Paket, um das alte Datum und die Kalenderklassen zu ersetzen. 2. Erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit durch LocalDate, LocalDatetime und Local Time; 3. Erstellen Sie ein bestimmtes Datum und eine bestimmte Uhrzeit mit der von () Methode; 4.. Verwenden Sie die Plus/Minus -Methode, um die Zeit nicht zu erh?hen und zu verkürzen. 5. Verwenden Sie ZonedDatetime und zoneId, um die Zeitzone zu verarbeiten. 6. Format und analysieren Sie Datumszeichenfolgen über DateTimeFormatter; 7. Verwenden Sie sofortige, um bei Bedarf mit den alten Datumstypen kompatibel zu sein. Die Verarbeitung der Datum in der modernen Java sollte der Verwendung von Java.Timeapi vorrangig machen, was klare, unver?nderliche und linear ist

Vergleich von Java Frameworks: Spring Boot vs Quarkus gegen Micronaut Vergleich von Java Frameworks: Spring Boot vs Quarkus gegen Micronaut Aug 04, 2025 pm 12:48 PM

Pre-Formancetartuptimemoryusage, QuarkusandmicronautleadduToCompile-Time-foringandgraalvSupport, WithQuarkusofttenperformLightBetterin serverloser Szenarien.2. Thyvelopecosystem,

Verst?ndnis von Netzwerkports und Firewalls Verst?ndnis von Netzwerkports und Firewalls Aug 01, 2025 am 06:40 AM

Networkportsandfirewallsworktogethertoenablecommunicationwhileensuringsecurity.1.Networkportsarevirtualendpointsnumbered0–65535,withwell-knownportslike80(HTTP),443(HTTPS),22(SSH),and25(SMTP)identifyingspecificservices.2.PortsoperateoverTCP(reliable,c

Wie funktioniert die Müllsammlung in Java? Wie funktioniert die Müllsammlung in Java? Aug 02, 2025 pm 01:55 PM

Die Müllsammlung von Java (GC) ist ein Mechanismus, der automatisch den Speicher verwaltet, der das Risiko eines Speicherlecks verringert, indem unerreichbare Objekte zurückgeführt werden. 1.GC beurteilt die Zug?nglichkeit des Objekts aus dem Stammobjekt (z. B. Stapelvariablen, aktive Threads, statische Felder usw.) und nicht erreichbare Objekte als Müll markiert. 2. Basierend auf dem markierten Algorithmus markieren Sie alle erreichbaren Objekte und l?schen Sie nicht markierte Objekte. 3.. Verfolgen Sie eine Generationskollektionsstrategie: Die neue Generation (Eden, S0, S1) führt h?ufig MollGC aus; Die ?lteren Menschen erzielen weniger, dauert jedoch l?nger, um MajorGC durchzuführen. MetaPace speichert Klassenmetadaten. 4. JVM bietet eine Vielzahl von GC -Ger?ten: SerialGC ist für kleine Anwendungen geeignet; ParallelgC verbessert den Durchsatz; CMS reduziert sich

Verwenden von HTML `Input` -Typen für Benutzerdaten Verwenden von HTML `Input` -Typen für Benutzerdaten Aug 03, 2025 am 11:07 AM

Durch die Auswahl des richtigen HTMlinput -Typs kann die Datengenauigkeit verbessert, die Benutzererfahrung verbessert und die Benutzerfreundlichkeit verbessert werden. 1. W?hlen Sie die entsprechenden Eingabetypen gem?? dem Datentyp aus, z. B. Text, E -Mail, Tel, Nummer und Datum, die automatisch überprüft und an die Tastatur anpassen k?nnen. 2. Verwenden Sie HTML5, um neue Typen wie URL, Farbe, Reichweite und Suche hinzuzufügen, die eine intuitivere Interaktionsmethode bieten k?nnen. 3.. Verwenden Sie Platzhalter und erforderliche Attribute, um die Effizienz und Genauigkeit der Formulierung zu verbessern. Es sollte jedoch beachtet werden, dass der Platzhalter das Etikett nicht ersetzen kann.

Vergleich von Java -Build -Werkzeugen: Maven vs. Gradle Vergleich von Java -Build -Werkzeugen: Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

GradleStheBetterChoiceFormostnewProjectsDuetoitSuperiorFlexibilit?t, Leistung und ModerntoolingSupport.1.GRADLE'SGROOVY/KOTLINDSLISMORECONCISEANDEIPRESSIVETHANMANMANBOSEXML.2.GRAGRECONCISEANDEPRPRESSIVETHANMAVENSVOSEXML.2.

Gehen Sie mit einer Beispielverschiebung erkl?rt Gehen Sie mit einer Beispielverschiebung erkl?rt Aug 02, 2025 am 06:26 AM

Auf Defer wird verwendet, um bestimmte Vorg?nge auszuführen, bevor die Funktion zurückgibt, z. B. die Reinigungsressourcen. Die Parameter werden sofort bewertet, wenn sie aufgeschoben werden, und die Funktionen werden in der Reihenfolge von Last-In-First-Out (LIFO) ausgeführt. 1. Mehrere Defers werden in umgekehrter Reihenfolge der Erkl?rungen ausgeführt. 2. h?ufig für die sichere Reinigung wie das Schlie?en von Dateien verwendet; 3. Der benannte Rückgabewert kann ge?ndert werden; V. 5. Vermeiden Sie den Missbrauch von Verschiebungen in Schleifen, um Ressourcenleckage zu verhindern. Die korrekte Verwendung kann die Sicherheit und die Lesbarkeit der Code verbessern.

See all articles