a.hashCode() 용도는 무엇인가요? a.equals(b)와 무슨 관련이 있나요?
hashCode() 메서드는 객체의 정수형 해시 값에 해당합니다. Hashtable, HashMap, LinkedHashMap 등과 같은 해시 기반 컬렉션 클래스에서 일반적으로 사용됩니다. 특히 equals() 메소드와 밀접한 관련이 있습니다. Java 사양에 따르면 equal() 메서드를 사용하여 동일한 두 객체는 동일한 해시 코드를 가져야 합니다.
바이트 스트림과 문자 스트림의 차이점(추천 학습: java 면접 질문)
A에게 바이너리 데이터 조각은 하나씩 특정 장치로 출력되거나 특정 장치에서 바이너리 데이터 조각이 하나씩 읽혀집니다. 입력 및 출력 장치가 무엇이든 이러한 작업을 통일된 방식으로 완료해야 합니다.
추상적인 방식으로 설명합니다. 해당 추상 클래스는 OutputStream 및 InputStream입니다. 이들은 모두 바이트에서 작동합니다.
컴퓨터의 모든 것은 궁극적으로 바이너리 바이트 형태로 존재합니다. 자주 사용되는 중국어 문자의 경우 먼저 해당 바이트를 가져온 다음 해당 바이트를 출력 스트림에 씁니다.
읽을 때 가장 먼저 읽는 것은 바이트인데, 문자로 표시하려면 바이트를 문자로 변환해야 합니다. 이러한 요구가 널리 퍼져 있기 때문에 Java는 특별히 문자 스트림 래퍼 클래스를 제공합니다.
기본 장치는 항상 바이트 데이터만 허용합니다. 때로는 기본 장치에 문자열을 쓰려면 쓰기 전에 문자열을 바이트로 변환해야 합니다. 문자 스트림은 바이트 스트림을 위한 래퍼입니다. 문자 스트림은 문자열을 내부적으로 바이트로 변환한 다음 이를 기본 장치에 씁니다. 이는 문자열을 쓰거나 읽을 수 있는 약간의 정보를 제공합니다. IO 장치가 편리합니다.
문자를 바이트로 변환할 때 인코딩 문제에 주의해야 합니다. 문자열을 바이트 배열로 변환하면 실제로는 특정 인코딩된 바이트 형식의 문자로 변환되고 그 반대도 마찬가지이기 때문입니다. 읽기 때문에.
Java 직렬화란 무엇이며 Java 직렬화를 구현하는 방법은 무엇인가요? 아니면 직렬화 가능 인터페이스의 역할을 설명해 주세요.
우리는 때때로 Java 객체를 바이트 스트림으로 전송하거나 바이트 스트림에서 Java 객체로 복원합니다. 예를 들어 Java 객체를 하드 디스크에 저장하거나 다음으로 전송합니다. 이 과정에서 우리는 Java 객체를 특정 형식의 바이트 스트림으로 변환하는 코드를 직접 작성하여 전송할 수 있습니다.
그러나 jre 자체에서 이를 지원하기 위해 OutputStream의 writeObject 메소드를 호출할 수 있습니다. 이렇게 하면 컴파일된 클래스가 writeObject 메소드에 의해 작동될 수 있도록 javac 특수 처리가 컴파일 중에 수행됩니다. 이를 직렬화라고 합니다.
직렬화해야 하는 클래스는 직렬화 가능 인터페이스를 구현해야 합니다. 이 인터페이스는 메소드를 구현할 필요가 없는 미니 인터페이스입니다. 직렬화 가능을 구현하는 것은 단지 객체를 직렬화할 수 있다는 것을 표시하기 위한 것입니다.
예를 들어 웹 개발에서 개체가 Session에 저장되어 있는 경우 Tomcat은 다시 시작할 때 Session 개체를 하드 디스크에 직렬화해야 하며 이 개체는 직렬화 가능 인터페이스를 구현해야 합니다. 객체가 분산 시스템을 통해 네트워크를 통해 전송되는 경우 전송되는 객체는 직렬화 가능 인터페이스를 구현해야 합니다.
JVM 로딩 클래스 파일의 원리 메커니즘을 설명하시겠습니까?
JVM에서 클래스 로딩은 ClassLoader와 그 하위 클래스인 Java ClassLoader에 의해 구현됩니다. 중요한 Java 런타임 시스템 구성 요소입니다. 런타임 시 클래스 파일에서 클래스를 찾고 로드하는 일을 담당합니다.
힙과 스택의 차이점은 무엇인가요?
Java 메모리는 두 가지 범주로 나누어집니다. 하나는 스택 메모리이고 다른 하나는 힙 메모리입니다. 스택 메모리는 프로그램이 메소드에 들어갈 때 이 메소드 내부에 지역 변수를 저장하기 위해 이 메소드에 대한 전용 저장 공간이 할당된다는 의미입니다. 이 메소드에 할당된 스택도 해제됩니다. 따라서.
힙은 스택과 다른 기능을 갖는 메모리로 일반적으로 현재 메소드 스택에 없는 데이터를 저장하는 데 사용됩니다.
예를 들어 new를 사용하여 생성된 개체는 힙에 배치되므로 메서드가 종료되어도 사라지지 않습니다. 메서드의 지역 변수가 final로 수정된 후에는 스택 대신 힙에 배치됩니다.
GC란 왜 있나요?
GC는 가비지 컬렉션(Gabage Collection)을 의미하며, 프로그래머가 메모리 처리가 용이합니다. 문제가 발생하거나 잊어버리거나 잘못된 메모리 회수로 인해 프로그램이나 시스템이 불안정해지거나 충돌이 발생할 수도 있습니다.
Java에서 제공하는 GC 함수는 메모리 자동 회수 목적을 달성하기 위해 객체가 범위를 초과하는지 자동으로 감지할 수 있습니다. Java 언어는 할당된 메모리를 해제하는 명시적인 작업 방법을 제공하지 않습니다.
가비지 수집의 장점과 원칙. 그리고 2가지 재활용 메커니즘을 고려해보세요.
Java 언어의 주목할만한 특징은 C++ 프로그래머에게 가장 까다로운 메모리 관리 문제를 해결하는 가비지 수집 메커니즘의 도입입니다. 이를 통해 Java 프로그래머는 프로그램을 작성할 때 더 이상 메모리 관리를 고려할 필요가 없습니다. 가비지 수집 메커니즘으로 인해 Java의 개체에는 더 이상 "범위"라는 개념이 없습니다. 개체에 대한 참조에만 "범위"가 있습니다.
가비지 수집은 메모리 누수를 효과적으로 방지하고 사용 가능한 메모리를 효과적으로 사용할 수 있습니다.
가비지 수집기는 일반적으로 별도의 하위 수준 스레드로 실행됩니다. 예측할 수 없는 상황에서 오랫동안 사용되지 않았거나 사망한 메모리 힙의 개체를 지우고 재활용합니다. 한 개체 또는 모든 개체의 가비지 컬렉션입니다.
재활용 메커니즘에는 세대별 복사 가비지 수집, 표시된 가비지 수집 및 증분 가비지 수집이 포함됩니다.
가비지 컬렉터의 기본 원리는 무엇인가요? 가비지 수집기가 즉시 메모리를 회수할 수 있나요? 가비지 수집을 수행하도록 가상 머신에 적극적으로 알릴 수 있는 방법이 있습니까?
GC의 경우 프로그래머가 객체를 생성하면 GC는 객체의 주소, 크기 및 사용법을 모니터링하기 시작합니다. 일반적으로 GC는 방향성 그래프를 사용하여 힙의 모든 개체를 기록하고 관리합니다.
이런 방식으로 어떤 개체가 "접근 가능"하고 어떤 개체가 "접근 불가능"한지 결정됩니다. GC가 일부 개체에 "접근할 수 없음"을 확인하면 GC는 이러한 메모리 공간을 회수해야 합니다.
프로그래머는 System.gc()를 수동으로 실행하여 GC 실행을 알릴 수 있지만 Java 언어 사양에서는 GC 실행을 보장하지 않습니다.
Java에서 throw와 throw의 차이점은 무엇인가요?
throw는 java.lang.Throwable 클래스의 인스턴스화 개체를 던지는 데 사용됩니다. 즉, 다음과 같은 키워드 throw를 통해 예외를 던질 수 있습니다. :
throw new IllegalArgumentException(“XXXXXXXXX″)
throw의 역할은 메소드 선언 및 서명의 일부입니다. 메소드는 호출자가 처리할 수 있도록 해당 예외를 발생시킵니다. Java에서는 처리되지 않은 확인된 예외가 있으면 throws 절에서 강제로 선언됩니다.
Java에서 메모리 누수가 발생하나요? 간략하게 설명해 주세요.
먼저 메모리 누수가 무엇인지 설명하세요. 소위 메모리 누수란 프로그램에서 더 이상 사용하지 않는 개체나 변수가 메모리에 자리잡고 있음을 의미합니다. Java에는 개체가 더 이상 참조되지 않을 때 개체가 가비지 수집기에 의해 메모리에서 자동으로 지워지는 것을 보장할 수 있는 가비지 수집 메커니즘이 있습니다.
Java는 가비지 수집 관리를 위해 방향성 그래프를 사용하므로 참조 순환 문제를 제거할 수 있습니다. 예를 들어 서로 참조하는 두 개체가 있는 경우 루트 프로세스에 액세스할 수 없는 한 GC도 가능합니다. 재활용하세요.
Java의 메모리 누수: 수명이 긴 개체가 수명이 짧은 개체에 대한 참조를 보유할 때 메모리 누수가 발생할 가능성이 있습니다. 비록 수명이 짧은 개체는 더 이상 필요하지 않습니다. 재활용 중입니다. 이는 Java에서 메모리 누수가 발생하는 시나리오입니다.
일반인의 관점에서 보면 프로그래머는 객체를 생성하고 이 객체를 다시는 사용하지 않을 수 있지만 이 객체는 항상 참조됩니다. 즉, 이 객체는 쓸모가 없지만 가비지 수집기에 의해 재활용될 수 없습니다. 이는 Java 메모리에서 발생할 수 있는 일입니다. 누수상황.
예를 들어, 캐시 시스템에서는 객체를 로드하여 캐시(예: 전역 지도 객체)에 넣은 다음 다시 사용하지 않습니다. 이 객체는 항상 캐시에 의해 참조되지만 그렇지 않습니다. 더 오래 사용됩니다.
위 내용은 기본 Java 면접 질문 (4)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!