다음은 모두 비교적 진보 된 질문이며, 면접관을 바꿀 수 있기 때문에 인터뷰 중에는 거의 요청받지 않습니다. 그러나 직접 연습 할 시간을 찾을 수 있습니다.
1. System.Exit (0)는 최종 블록의 실행을 건너 뜁니다
System.SetSecurityManager (New SecurityManager () {@override public void Checkexit (int status) {strash new ThreadDeath ();}}); try {system.exit (0); } 마침내 {system.out.println ( "마침내 블록에서"); } 이 코드가 드디어 블록에서 출력되는 이유는 무엇입니까? 스택 추적 정보가 인쇄되지 않은 이유는 무엇입니까?
2. String str = "Hello"; 여기서 Str는 문자열 객체입니다
C ++와 달리 Java의 변수는 기본 유형 또는 참조입니다. 변수는 객체가 될 수 없습니다. 이것은 다음과 같은 표현을 의미합니다.
문자열 str = "hello"; 문자열 text = "bye"; str == 텍스트; // 내용 대신 두 참조를 비교하십시오. str = 텍스트; // 텍스트 참조를 str에 할당합니다
대부분의 경우 실제로 큰 차이는 없지만 이와 같이 글을 쓰면 쉽게 혼란을 일으킬 수 있습니다.
최종 StringBuilder sb = new StringBuilder (); sb.append ( "Hello"); //이 참조는이 인스턴스가 아니라 최종 유형입니다. 방법 (SB); //이 인스턴스는 메소드를 통해 수정할 수 있지만이 변수는 수정할 수 없습니다.
3. Java 메모리 누출은 C ++ 프로그래머가 이해하는 것과 동일합니다.
Wikipedia에서 메모리 누출의 정의는 "컴퓨터 과학에서, 프로그램이 메모리 할당을 올바르게 관리하지 않으면 메모리 누출이 발생합니다. 객체 지향 프로그래밍에서는 메모리의 객체에 액세스 할 수없는 경우 메모리 누출입니다." 그러나 Java에서는 물체가 항상 도달 할 수 있으며 강한 참조가없는 물체는 지워질 것입니다. 메모리 누출이라는 용어는 Java에서 의미합니다. 메모리에는 존재하지 말아야 할 객체가 있으며 일반적으로 더 이상 사용되지 않는 일부 리소스는 여전히 컬렉션에 저장됩니다.
4. 멀티 스레드 프로그래밍은 어렵다
경험이 없다면 멀티 스레딩 프로그래밍은 실제로 어렵습니다. 많은 스레드에 많은 코드를 던져 실행하면 문제가 전혀 해결되지 않으면 엉망이 될 것입니다. 그러나 주문형 스레드 할당을 수행하고 스레드 간의 상호 작용을 제어하고 팀의 일부 구성원이 이해할 수있는 간단한 패턴을 사용하면 문제가 훨씬 간단 해집니다. 물론, 팀의 모든 사람이 당신의 규칙을 따라야하는 또 다른 도전이 있습니다.
5. 다른 작업 간의 다른 성능에 신경 쓰지 마십시오.
최근에 정수, 메모리 액세스, 모듈러스 및 콘솔에 출력이 추가되는 문제가 있다고 들었습니다. 이러한 각 작전은 이전 작업보다 느리게 느리지만이 사람은 가장 빠른 작업, 추가 작업을 최적화하고 더 비싼 작업으로 교체하려고합니다. 성능을 최적화하려면 값 비싼 작업을 저렴한 작업으로 교체하는 것이 좋습니다. 예를 들어 병목 현상이 하드웨어에있는 경우 하드 디스크에서 많은 파일을 읽어야하므로 문제가 전혀 없기 때문에 소프트웨어 코드를 수정하는 것은 쓸모가 없습니다.
6. 임의 숫자는 무작위입니다
임의 숫자의 특정 세트는 일부 패턴의 숫자와 같습니다. 이 기사에서 이미이 문제에 대해 이야기했습니다. 많은 사람들은 임의의 숫자 생성기에 의해 생성 된 숫자가 실제로 무작위가 아니라고 믿지 않습니다.
7. 플로팅 포인트는 임의의 오류를 생성하므로 피해야합니다.
동일한 작업의 경우 플로팅 포인트 번호는 매번 동일한 오류를 생성합니다. 오류는 예측 가능하므로 제어 할 수 있습니다. 당신이 무엇을할지 알고 결과를 반올림하는 것과 같은 몇 가지 간단한 규칙을 고수한다면, 부동 소수점 번호는 Bigdecimal보다 더 많은 실수를하지 않습니다. 또한 더 읽기 쉽고 100 배 이상 더 빠릅니다 (동시에 생성 된 쓰레기 물체가 적습니다).
8. 시간대는 영원합니다
이러한 오해의 이유는 시간이 변함에 따라 시간대가 변하기 때문입니다. 이것은 유럽/런던이 00:00 대신 1970/1/1 01:00임을 의미합니다. 왜? 런던은 1968 년부터 1971 년까지 2 년 동안 일광 절약 시간을 사용했기 때문입니다.
지난 몇 년 동안 많은 시간대가 바뀌 었습니다. 모스크바는 이스트 제 3 지구 (GMT+3) 였지만 이제는 이스트 네 번째 지구 (GMT+4) (2011 년 3 월 27 일부터 시작)입니다. 2010 년을 보면 East 3과 East 4라는 것을 알게 될 것입니다.
놀랍게도 몇 가지가 있습니다.
1721 년 스웨덴 2 월에는 30 일이 있습니다.
1751 년 영국의 첫날은 3 월 25 일이며 프랑스 뒤 11 일이었다.
미국이 Gregorian 달력을 채택한 후 수백 년을 거슬러 올라갑니다. 따라서 원래 기록 된 날짜는 두 달력으로 표현 될 수 있습니다 (일반적으로 두 날짜는 동시에 더 정밀하게 제공됩니다). 예를 들어, 조지 워싱턴의 생일은 1731 년 2 월 11 일부터 1732 년 2 월 22 일까지 바뀌 었습니다.
9. 스레드에서 비 휘발성 변수를 읽으면 최종적으로 업데이트 된 값을 읽을 수 있습니다.
이 문제는 며칠 전에 stackoverflow에서 두 번 나타났습니다. 일반적으로 JIT 컴파일러가 코드를 최적화 할 때이 스레드로 수정되지 않은 비 휘발성 유형의 필드를 인라인으로합니다. 이 코드가 컴파일되면 (-xx :+printcompilation으로 볼 수 있음) 다른 스레드 에서이 필드를 수정하면 결코 보이지 않을 수 있습니다. 임의의 동기화 블록 또는 인쇄 문을 추가하면이 최적화의 실행을 지연 시키거나 JIT 컴파일러를 방해 하여이 최적화를 수행하지 않도록 할 수 있습니다.
10. 자바 인터뷰 질문이 정확합니다
구식 (10 년 이상 업데이트되지 않고 현재 Java 버전과 접촉하지 않은 경우)이 많거나 잘못되었거나 잘못되었을 수도있는 Java 인터뷰 질문이 많이 있습니다. 불행히도,이 답변 중 어느 것도 확인하지 않고 전달되지 않았습니다.
여기서 동료 검토가 답을 검토하는 데 더 나은 작업을 수행하기 때문에 위의 StackoverFlow의 답변을 참조하겠습니다. 일반적으로 Rose India와 같은 웹 사이트에 가지 마십시오. 위의 답변은 우스운 품질입니다. 바닥에 도달하려면 위의 기사에서 철자 오류 (클래스 이름 및 전문 용어) 또는 잘못된 비고를 확인할 수 있습니다. 이러한 문제의 한 가지 이유는 이러한 오류를 해결하기위한 효과적인 피드백 메커니즘이 없기 때문입니다.
Java 인터뷰 질문을 추천하고 싶습니다.
가장 귀중한 50 가지 Java 인터뷰 질문은 Java 프로그래머 입학에 적합합니다.
10 클래식 Java 주요 방법 인터뷰 질문
Java (Super Classic)에서 가장 일반적인 10 가지 인터뷰 질문에 대해 토론하십시오.
Java 프로그래머에 대한 10 XML 인터뷰 질문이 공개됩니다
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.