자바 어플리케이션 실행 과정
→ 컴파일러가 자바소스를 바이트 코드로 변환합니다. Class Loader가 바이트 코드를 런타임 데이터 영역에 로드시키구요. 로딩된 바이트 코드가 실행엔진에 의해서 실행되게 됩니다.
자바 메모리 구조
→ 크게 다섯가지 영역으로 구성되어 있습니다. 우선 스레드별로 PC Register, JVM Stack, 그리고 Native Method Stack이 있구요, 스레드 공통 영역으로는 heap과 MethodArea가 있습니다.
PC Register는 현재 수행중인 JVM 명령어가 들어가 있구요. JVM Stack은 호출된 메소드의 매개변수, 지역변수, 리턴정보들이 저장됩니다. Native Method Stack은 자바외의 언어인 C나 C++같은 것들을 수행하기 위한 영역이구요. .Method Area영역은 클래스별로 전역변수 정적변수 메소드 정보들이 저장되게 됩니다. 마지막으로 Heap 여 영역은 런타임중 생성되는 인스턴스들이 동적으로 할당되는 곳 입니다.
가비지 컬렉션
→ GC는 JVM에서 메모리를 관리해주는 모듈입니다. Heap메모리를 재활용 하기 위해서 더이상 참조되지 않는 객체들을 메모리에서 제거하는 역할을 수행합니다. 개발자가 직접 메모리를 정리하지 않아도 되어서 개발 생산성이 향상되는 장점이 있지만, Mark and Sweep이라는 과정에서 참조되지 않는 객체를 찾는 과정이 있는데, 이때에 스레딩이 잠깐 중단되어서 성능이 떨어진다는 단점이 있습니다.
객체지향 프로그래밍
추상클래스 vs 인터페이스
1️⃣ 기초
📌 JDK와 JRE의 차이점은 무엇입니까? 📌 ==와 equals의 차이점은 무엇입니까? 📌 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 합니다, 그렇죠? 📌 자바에서 final의 기능은 무엇입니까? 📌 자바에서 Math.round(-1.5)는 무엇을 의미합니까? 📌 String은 기본 데이터 타입입니까? 📌 자바에서 문자열을 조작하는 클래스는 무엇이 있습니까? 각 클래스의 차이점은 뭘까요? 📌 String str ="i"와 String str = new String("i")가 동일합니까? 📌 문자열을 반전시키는 가장 좋은 방법은 무엇인가요? 📌 String 클래스의 일반적인 메서드는 무엇이 있나요? 📌 추상 클래스에서 추상 메서드는 필수적인가요? 📌 보통의 클래스와 추상 클래스의 차이는 무엇인가요? 📌 final은 추상 클래스를 수정할 때 사용할 수 있나요?
2️⃣ Container
📌 자바 컨테이너란 무엇인가요? 📌 Collection과 Collections의 차이는 무엇인가요? 📌 List, Set, Map의 차이점을 말해주세요. 📌 HashMap과 Hashtable의 차이는 무엇인가요? 📌 각각 어떤 상황에서 HashMap과 TreeMap을 선택하나요? 📌 HashMap 구현 원칙은 무엇인가요? 📌 HashSet 구현 원칙은 무엇인가요? 📌 ArrayList와 LinkedList의 차이점은 무엇인가요? 📌 Array에서 List로 전환하려면 어떻게 해야하나요? 📌 ArrayList와 Vector의 차이점을 말해주세요. 📌 Array와 ArrayList의 차이점을 말해주세요. 📌 Queue에서, poll()과 remove()의 차이는 무엇인가요? 📌 thread-safe한 컬렉션 클래스들은 무엇이 있을까요? 📌 iterator란 무엇인가요? 📌 iterator의 사용 목적은 무엇인가요? 어떤 특징이 있죠? 📌 iterator와 listIterator의 차이는 무엇인가요?
3️⃣ multi-threading
📌 병렬과 동시성의 차이점을 말해주세요. 📌 스레드와 프로세스의 차이를 말해주세요.. 📌 데몬 스레드는 무엇인가요? 📌 스레드를 만드는 방법을 나열해주세요. 📌 runnable과 callable의 차이는 무엇인가요? 📌 스레드의 여러가지 상태에 대해 말해주세요. 📌 sleep()과 wait()의 차이는 무엇인가요? 📌 notify()와 notifyAll()의 차이는 무엇인가요? 📌 thread run()과 tnread start()의 차이는 무엇인가요? 📌 스레드 풀을 생성할 수 있는 여러가지 방법을 말해주세요. 📌 스레드 풀의 상태에 대해 말해주세요. 📌 스레드 풀에서 submit()과 execute()의 차이는 무엇인가요? 📌 자바 프로그램에서 멀티 스레드 작업의 안전성을 어떻게 보장할 수 있을까요?
4️⃣ reflection
📌 reflection이란 무엇인가요? 📌 자바 직렬화란 무엇인가요? 어떤 상황에서 필요한가요? 📌 동적 프록시란 무엇인가요? 📌 동적 프록시는 어떻게 사용하나요?
5️⃣ object copy
📌 복사가 사용되는 이유는 무엇인가요? 📌 객체 복사는 어떻게 할 수 있나요? 📌 깊은 복사와 얕은 복사의 차이를 말해주세요.
6️⃣ Java Web
📌 jsp와 servlet의 차이점은 무엇인가요? 📌 jsp를 기본 제공하는 객체는 무엇이 있나요? 📌 4개의 jsp scope에는 무엇이 있나요? 📌 세션과 쿠키의 차이는 무엇인가요? 📌 세션 과정을 설명해주세요. 📌 쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까요? 📌 스프링 MVC와 struts의 차이는 무엇인가요? 📌 SQL Injection을 피할 수 있는 방법을 설명해주세요. 📌 XSS 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요. 📌 CSRF 공격이 무엇이고, 어떻게 피할 수 있는지 설명해주세요.
7️⃣ 예외 클래스
📌 throw와 throws의 차이는 무엇인가요? 📌 final, finally, finalise의 차이는 무엇인가요? 📌 try-catch-finally에서 생략할 수 있는 부분이 무엇인가요? 📌 catch가 반환되면 finally가 실행되나요? 📌 exception 클래스의 예시를 말해주세요.
8️⃣ internet
📌 301과 302 상태 코드의 의미와 차이는 무엇인가요? 📌 forward와 redirect의 차이는 무엇인가요? 📌 tcp와 udp의 차이점을 말해주세요. 📌 왜 tcp는 3 handshakes를 필요로 하나요? 왜 2개가 아니죠? 📌 tcp packet은 어떻게 생성되나요? 📌 OSI 7계층에 대해서 설명해주세요. 📌 get과 post요청의 차이를 말해주세요. 📌 어떻게 도메인 간의 요청이 작동하나요? 📌 JSONP의 구현 원칙은 무엇인가요? 📌 디자인 패턴에 대해 말해주세요. 📌 알고 있는 디자인 패턴이 있으신가요? 📌 추상 팩토리와 심플 팩토리의 차이가 무엇인가요?
9️⃣ Spring
📌 스프링 사용의 장점은 무엇인가요? 📌 AOP란 무엇인가요? 📌 IOC란 무엇인가요? 📌 스프링의 메인 모듈은 무엇인가요? 📌 가장 많이 사용되는 의존성 주입 방법은 무엇인가요? 📌 스프링 빈은 thread-safe 한가요? 📌 스프링은 얼마나 많은 bean scope를 유지할 수 있나요? 📌 스프링 auto-assembles 빈을 위한 방법들을 말해주세요. 📌 스프링 트랜잭션을 구현하기 위한 다양한 방법을 말해주세요. 📌 스프링 트랜잭션 고립이란 무엇인가요? 📌 스프링 mvc의 런타임 flow는 무엇인가요? 📌 스프링 mvc 컴포넌트는 무엇이 있나요? 📌 @RequestMapping은 어떤 역할을 하나요? 📌 @Autowired의 기능은 무엇인가요?