면접 공부
Java7 이전에는 제너릭 타입(List, Map등...)에 타입 추론이 불가했다.
따라서 같이 표현을 해야했다.
// java 7 이전
List<T> arr = new ArrayList<T>;
// java 7 이후
List<T> arr = new ArrayList<>;
하지만 Java 7 이상부터 타입 추론이 가능해졌다.
또 단일 catche 블록에서 여러개의 예외처리(Exception) 가능하다
실제로 라이브러리 배포중 java6에서 password exception이 안잡히는 현상이 발생했다.
구조를 보니 multi 로 exception을 잡고 있었고 결국 이를 분리해야했음... 하지만 7 이상부터는 이런 문제가 발생하지 않는다.
그럼 Java 7과 8의 차이는 뭘까?
가장 큰 차이는 바로 Lambda Expression이다.
Java 8 이전에 if문이 많으면 if 지옥에 빠졌다.
하지만 8 이상부터는 lambda의 stream().filter를 사용하면 간단하게 조건 처리를 할 수 있다.
만약 검색조건이 4가지라면 if 16번을 해야하지만 filter를 쓰면 조건 4개에 대해서만 filter 처리 하면 됨.
그리고 LocalDateTime 이 추가되었다. 8 이전에는 Calendar를 사용해야 했는데 이게 어쩔땐 날짜가 정상 출력되고 어쩔땐 또 이상해서 값 수정을 했어야 했다.. 실제로 특정 시간에 크롤링 하게 구현했었는데 작동되지 않아 확인했더니 Calendar로 되어 있었다...
오버로딩 vs 오버라이딩
신입 단골 질문
오버라이딩 - 부모 메서드 재정의 하는것, 반환값, 매개변수 같아야함.
오버로딩 - 이름은 같으나 타입, 매개변수가 다름 예를 들어 생성자 생성할때 A(name), A(name, age) 이런 차이
java VS c++
자바와 c++은 객체지향 언어라는 공통점이 있지만 메모리 관리에서 차이가 난다.
1. 자바는 자동으로 jvm에서 메모리 관리를 한다.(가비지 컬렉터) 하지만 c++은 개발자가 메모리 관리 해야함..
그래서 pointer가 위험한데 smart_pointer 사용하면 자동으로 메모리 관리가 가능함.
2. 자바는 다중 상속이 불가능하지만 c++은 가능하다.(인터페이스로 다중 상속 같이 가능하긴함)
3. 기본적으로 자바는 객체를 call by reference, c++ call by value 방식으로 보냄.
c++ 자료형 크기
char 1byte
short 2byte
int 4byte
float 4byte
double 8byte
long 4byte
long long 8byte
java 자료형 크기
char 2byte
short 2byte
int 4byte
float 4byte
double 8byte
long 8byte
HTTP METHOD에 대해 설명
GET, POST, PUT, DELETE가 있다.
GET은 정보를 요청하기 위해 사용한다.
POST는 리소스를 생성하거나 업데이트를 할때 서버에 데이터를 전송할 때 사용한다.
GET은 캐시가 되지만 POST는 캐시가 되지 않습니다. 또한 GET은 브라우저에 기록되지만 POST는
기록되지 않습니다.
상태 코드 종류
200, 404, 400, 503 입니다.
200은 정상요청을 의미합니다.
400은 BadRequest 즉 클라이언트가 잘못된 요청을 할 때 발생합니다.
404는 서버에서 리소스를 찾을 수 없을 때 발생합니다.
503은 서버가 요청을 처리할 준비가 되지 않은 상태이며 유지 보수를 위해 작동이 중단되거나 과부하가 걸린
서버일 경우 발생합니다.
프로세스와 스레드의 차이.
프로세스가 스레드보다 위 단계입니다.
프로세스는 자원을 할당받는 작업의 단위이고 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다. 스레드는 자원을 공유합니다. 스레드는 컨텍스트 스위칭이 발생해도 자원을 공유함.
따라서 부담이 거의 없지만 프로세스는 공유하는 데이터가 없으므로 큰 부담이 된다.
RDB와 NoSQL의 차이는?
RDB는 정해진 스키마가 존재합니다. 스키마란 테이블을 정의한 제약 규정입니다. NoSQL은 스키마가 없기 때문에 데이터 구조 변화가 자유롭고 데이터 분산이 용이합니다. 하지만 데이터 중복이 발생하거나 변경시 연산이 오래 걸립니다.
DB에서 인덱스 잘 사용하면 좋은점
DB에서 인덱스를 잘 사용하면 검색 성능에 큰 영향을 미칩니다. 실제로 이전 기업에서 MS SQL에서
PostgreSQL로 전환후 마이그레이션 작업을 하는데 인덱스 설정을 하지 않았어도 기존에는 1분이면 되는게
10분이 넘어가도 안끝나는 작업이 있었습니다. 이를 인덱스 설정해줘서 해결했던 기억이 납니다.
가비지 컬렉터
개발자가 동적으로 할당한 메모리 영역중 더이상 쓰지 않는 걸 해제하는 기능
Full GC도?
자바의 메모리는 Young Old Perm 세개로 나뉨. 이중 Perm은 거의 사용하지 않고 Yong Old 주로 쓴다.
객체는 처음에 Young에 있다가 Old로 넘어가는데 Old가 꽉차면 Full GC가 발동하며 앱에 부하가 걸려 성능이 저하될 수 있습니다.
병렬
리뷰 크롤링 구현할때 사용해본적 있습니다. 쓰레드풀 이용해 사용했습니다.
뮤텍스 vs 세마포어
둘다 동기화 도구지만 차이가 있음.
뮤텍스는 자원에 대한 접근을 동기화하기 위해 사용되는 상호배제 기술이다. key 기반으로 오직 하나의 쓰레드만이 동일한 시점에 뮤텍스를 얻어 임계 영역에 들어갈 수 있다. 그리고 오직 이 쓰레드만이 뮤텍스 해제가 가능함.
세마포어는 시그널링 메커니즘이라는 점에서 차이가 있음. 락을 걸지 않은 쓰레드도 락을 해제할 수 있다는 차이!세마포어의 카운트가 0보다 작거나 같아질 경우 락이 발생함.