> 헤드라인> 본문

3년 경력의 Java 프로그래머가 갖추어야 할 기술

-
풀어 주다: 2018-03-13 09:57:58
원래의
1559명이 탐색했습니다.

3년 경력의 자바 프로그래머가 갖추어야 할 능력은 자바 프로그래머들이 더욱 고민하는 부분일 것입니다. 아래 나열된 모든 사람이 모두 마스터할 수 있는 것은 아니지만, 더 많이 마스터할수록 결국에는 더 높은 평가와 급여를 받게 된다는 점을 여기서 설명하고 싶습니다.

1. 기본 구문

정적, 최종, 임시 등 키워드의 기능과 foreach 루프의 원리 등이 포함됩니다. 오늘 인터뷰에서 static 키워드가 무엇인지 물었는데, static 수정 변수와 수정 메소드에 답하시면 자격이 있다고 생각하겠습니다. static 블록에 답하시면 좋다고 생각하겠습니다. 나는 당신이 훌륭하다고 생각할 것입니다. 당신이 기술 연구에 매우 열정적이라는 것을 알 수 있기 때문에 정적 가이드 패키지에 대한 당신의 답변에 매우 만족할 것입니다.

가장 깊이 있었던 시간은 면접관이 Volatile 키워드의 기본 구현 원리에 대해 직접 물어봤던 기억이 납니다(그런데 면접과 면접을 당하는 것은 상대적인 것입니다. 면접관이 이 질문을 할 수도 있고 면접관이 그렇게 하도록 할 수도 있습니다) 면접관이 기술 공부를 좋아하는 사람이라 회사에 대한 좋은 인상을 갖게 해준다고 생각합니다. 저는 이 질문을 던진 회사를 최종적으로 선택했습니다. 질문이 단순할수록요. , 당신이 사람의 수준을 더 잘 볼 수 있을수록, 당신의 기술에 대한 다른 사람들의 고려의 대부분은 깊이 우선, 너비 두 번째에 기초한다는 것을 기억하십시오.

2. 수집

은 매우 중요하므로 꼭 물어봐야 합니다. 기본적으로 List, Map, Set 등 다양한 구현 클래스의 기본 구현 원리와 구현 클래스의 장단점에 대해 질문합니다.

컬렉션에 대해 마스터해야 할 것은 ArrayList, LinkedList, Hashtable, HashMap, ConcurrentHashMap 및 HashSet의 구현 원칙입니다. 질문에 유창하게 대답할 수 있다면 CopyOnWrite 컨테이너와 Queue를 마스터할 수 있다면 좋을 것입니다. 그리고 인터뷰에서 ConcurrentHashMap 질문을 많이 받는데, 아마도 이 수업이 많은 질문을 생성할 수 있기 때문일 것입니다. ConcurrentHashMap과 관련하여 네티즌들에게 세 가지 답변이나 연구 방향을 제공하겠습니다:

(1 )ConcurrentHashMap의 잠금 분할 기술.

(2) ConcurrentHashMap 읽기를 잠가야 하는지 여부와 그 이유.

(3) ConcurrentHashMap의 반복자는 강력한 일관성을 지닌 반복자인가 아니면 약한 일관성을 지닌 반복자인가?

3. 프레임워크

진부한 표현, 면접에서 꼭 물어봐야 하는 것. 일반적으로 그들은 당신의 프로젝트에 사용된 프레임워크에 대해 묻고 프레임워크를 사용하는 방법을 묻는 몇 가지 시나리오를 제공합니다. 예를 들어 Spring이 Bean을 초기화할 때 어떤 작업을 수행하려면 어떻게 해야 합니까? 빈을 파괴하고 싶다면, 어떻게 해야 하는지, MyBatis에서 $와 #의 차이 등은 모두 비교적 실용적입니다. 잘 축적하고 프레임워크의 세부 사항을 배우면 문제가 되지 않습니다.

위 질문에 잘 대답하면 면접관은 프레임워크의 구현 원칙에 대해 심층적인 질문을 자주 할 것입니다. 가장 많이 묻는 질문은 Spring AOP의 구현 원리이다. 물론, 어떻게 준비해야 할지 몰라도 두 문장이면 가능하다. 내가 만난 가장 변태적인 일은 나에게 Spring의 Bean 팩토리 구현의 UML 다이어그램을 그려달라고 요청하는 것이었다. 물론 나는 그런 심오한 질문에 대답할 수 없을 것이다/(ㄒoㄒ)/~~

4 , 데이터베이스

데이터베이스가 가장 많이 질문될 것입니다. 전체, 왼쪽 조인, 여러 인덱스 및 이들의 차이점과 같은 몇 가지 기본적인 사항에 대해서는 이야기하지 않겠습니다. 더 중요한 것은 데이터베이스 성능 최적화에 대해 아무것도 모른다면, 시간이 있으면 인터뷰 전에 하는 것이 좋습니다. 하루나 이틀 정도 시간을 내어 SQL의 기초와 SQL 최적화를 구체적으로 준비하세요.

하지만 데이터베이스에 대해서는 걱정하지 마세요. 회사에 부서가 많은 경우가 많습니다. 데이터베이스에 익숙하지 않고 기본 기술이 매우 뛰어나다면 그 중 90%가 당신을 먼저 채용할 것입니다. 데이터베이스 사용에 대한 요구 사항이 그다지 높지 않습니다.

5. 웹에 관한 몇 가지 질문

Java는 주로 웹 측면을 지향하므로 웹에 대한 몇 가지 질문도 질문해야 합니다.

제가 접한 가장 자주 묻는 두 가지 질문은 다음과 같습니다.

분산 세션의 여러 구현 방법에 대해 이야기해 보겠습니다.

자주 사용되는 네 가지 질문에 답할 수 있다면 당연히 면접관은 매우 만족할 것입니다.

또 다른 자주 묻는 질문은: 세션과 쿠키의 차이점과 연관성, 그리고 세션의 구현 원리에 대해 이야기해 보겠습니다. 이 두 가지 질문 외에도 web. 또한 get/post, 전달/리디렉션의 차이점, HTTPS 구현 원리 등 일부 세부 사항도 검토할 수 있습니다.

6. 데이터 구조 및 알고리즘 분석

프로그래머에게 데이터 구조 및 알고리즘 분석은 그렇지 않은 것보다 낫고 직장에서 확실히 유용할 수 있습니다. 배열과 연결 목록이 기본입니다. 스택과 큐는 더 심층적이지만 어렵지 않습니다. 더 중요한 트리는 AVL 트리와 레드-블랙 트리입니다. 이진 검색 트리가 무엇인지, 균형 트리가 무엇인지, AVL 트리와 레드-블랙 트리의 차이점을 알아야 합니다. 인터뷰 중에 면접관이 데이터베이스의 인덱스에 관해 저에게 말하면서 저에게 "인덱스를 구현하는 데 어떤 데이터 구조가 사용되는지 아십니까?"라고 물었던 기억이 납니다.

제가 사용한 해시 테이블에 대해 답변했는데, 틀렸습니다. 그는 다시 물었고, 왜 트리를 사용하는지 아십니까? 나는 해시 테이블에 더 많은 충돌이 있을 수 있기 때문에 수천만, 심지어 수억에 직면하여 검색의 시간 복잡도가 크게 증가할 수 있기 때문이라고 대답했습니다. 데이터. 트리는 비교적 안정적이며 기본적으로 원하는 데이터를 최대 20~30번 찾을 수 있음을 보장할 수 있습니다. 상대방은 이것이 완전히 정확하지 않다고 말했습니다. 마지막으로 우리는 이 문제를 교환했고 우리가 트리를 사용해야 하는 이유도 이해했습니다. 트리. 여기서는 다루지 않겠습니다. 여러분, 네티즌 여러분은 왜 인덱스를 트리를 사용하여 구현해야 한다고 생각하시나요?

알고리즘 분석은 모르거나 공부하기 싫으면 그냥 잊어버리세요. . 상대방이 나에게 Collections.sort 방법이 어떤 정렬 방법을 사용하는지 물었던 인터뷰를 기억합니다. 나는 3리터의 피를 토했습니다. 물론, 내가 지식이 풍부하고 알고리즘 분석에 대한 연구를 좀 했다는 것을 보여주기 위해(⊙﹏⊙)b, 그래도 여전히 버블정렬일지도 모른다고 말하고 있다. 물론 대답은 그렇지 않습니다. 관심 있는 네티즌은 향상된 병합 정렬 방법인 TimSort라는 정렬 방법을 사용하는 Collections.sort 메서드의 소스 코드를 살펴볼 수 있습니다.

7. Java Virtual Machine

놀랍게도 Java Virtual Machine은 매우 중요한 콘텐츠이므로 이러한 회사에서 이에 대해 질문을 받을 확률은 거의 0입니다. 아시다시피 저는 작년에 Java 가상 머신을 공부하는 데 많은 시간을 보냈습니다. 저는 Guang Zhou Zhiming 선생님의 "Java Virtual Machine에 대한 심층적인 이해: JVM 고급 기능 및 모범 사례"를 다섯 번 이상 읽었습니다.

본론으로 돌아가서, Java 가상 머신에 대해 질문하지는 않았지만 여전히 공부할 필요가 있다고 생각합니다. 간단히 개요를 작성하고 Java 가상 머신의 더 중요한 내용에 대해 이야기하겠습니다.

(1) Java 가상 머신 메모리 레이아웃

(2) GC 알고리즘 및 여러 가비지 수집기

(3) 상위 위임 모델인 클래스 로딩 메커니즘

(4) Java 메모리 모델

(5) 규칙보다 먼저 발생함

(6)휘발성 키워드 사용 규칙

면접에서는 쓸모가 없을지 모르지만, 훌륭한 사람이 되기 위해서는 필수입니다.

8. 디자인 패턴

원래 굉장히 중요한 내용인 줄 알았는데, 알고 보니 알리바바 B2B 사업부 면접에서 딱 한 번만 질문을 받았는데, 데코레이터 패턴에 대한 질문이었습니다.

물론 인터뷰를 위해 그렇게 실용적으로 배울 수는 없습니다. 디자인 패턴은 여전히 직장에서 매우 중요하고 유용합니다. 23가지 디자인 패턴 중 일반적으로 사용되는 10가지 패턴에 집중하세요. 인터뷰는 크게 세 가지 방향이 있습니다.

(1) 프로젝트에 어떤 디자인 패턴을 사용하고 어떻게 사용하는지.

(2) 일반적으로 사용되는 디자인 패턴의 장점과 단점을 알아보세요.

(3) 일반적인 디자인 패턴의 UML 다이어그램을 그릴 수 있습니다.

9. 멀티스레딩

이것도 꼭 물어봐야 할 질문입니다. 3년의 실무 경험 때문에 기본적으로 멀티스레딩을 어떻게 구현하는지 묻지 않고 Thread와 Runnable의 차이점과 연관성, Thread를 시작하면 어떻게 되는지 등 좀 더 심도 있는 질문을 하도록 하겠습니다. 여러 번, 스레드의 상태가 무엇인지. 물론 이것은 가장 기본적인 것에 불과하다. 놀랍게도 나는 여러 인터뷰에서 거의 동시에 같은 질문을 받았고, 다른 방식으로 질문을 받았다.

요약하면 다음과 같습니다.

4개의 스레드(Thread1, Thread2, ThreaD3 및 Thread4)가 각각 4개의 디스크 C, D, E 및 F의 크기를 계산한다고 가정합니다. 모든 스레드가 계산되어 전달됩니다. 어떻게 구현해야 할까요?

똑똑한 네티즌들이 이 질문에 대한 답을 갖고 있을까요? 어렵지 않습니다. java.util.concurrent에 사용할 수 있는 기성 클래스가 있습니다.

또한 자주 묻는 질문이기도 합니다. 일반적으로 사용되는 스레드 풀은 몇 가지입니까? 이러한 유형의 스레드 풀 간의 차이점과 연결은 무엇입니까? 몇 가지 특정 시나리오를 통해 이 시나리오에 사용하기에 더 적합한 스레드 풀 종류에 대해 답할 수 있습니다.

마지막으로 이번 인터뷰에서는 질문이 많지 않았지만 멀티 스레드 동기화와 잠금도 중점적으로 다루었습니다. 동기화와 재진입 잠금의 차이점, 동기화 잠금의 일반적인 방법과 정적 잠금 방법, 교착 상태의 원리와 문제 해결 방법 등

10.JDK 소스코드

높은 연봉을 받고 싶다면 JDK 소스코드를 꼭 읽어보세요. 위의 내용은 특정 시나리오와 관련이 있을 수도 있습니다. JDK 소스 코드는 단지 이를 자세히 살펴보기 위한 것입니다. 인터뷰 중 JDK 소스코드에 대한 질문을 많이 받았는데, 가장 까다로운 질문은 String의 hashCode() 메소드가 어떻게 구현되는지 묻는 질문이었습니다. 다행히 저는 보통 String 소스코드를 많이 읽고 대략적인 답변을 해주었습니다.

JDK 소스 코드에 대해서는 실제로 요약할 것이 없습니다. 순전히 개인에 따라 다릅니다. 더 중요한 소스 코드를 요약해 보겠습니다.

(1) List, Map 및 Set 구현 클래스의 소스 코드

(2) 소스 ReentrantLock 및 AQS의 코드

( 3) AtomicInteger의 구현 원리는 주로 CAS 메커니즘을 설명하고 CAS 메커니즘을 사용하여 AtomicInteger를 구현하는 방법을 설명합니다.

(4) 스레드 풀의 구현 원리

(5) 객체 클래스와 각 메소드의 역할

사실 꽤 까다롭습니다. 작년 내내 JDK에서 중요한 클래스의 소스 코드를 연구했는데, 물론 시간과 노력이 많이 들었습니다. 단지 인터뷰에 대처하기 위해서가 아닙니다.

마지막으로, 관심이 있고 시간이 있다면 서비스 지향 시스템이자 대규모 분산 아키텍처에 필수적인 SOA와 RPC를 공부하고 공부하는 것이 좋습니다. 그들은 모든 질병을 치료할 수 있는 생명을 구하는 처방입니다. 시도와 테스트를 거쳤습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!