hoon's bLog

면접에서 나올법한 자바 면접 질문 정리 본문

잡동사니

면접에서 나올법한 자바 면접 질문 정리

개발한기발자 2021. 1. 21. 13:19
반응형

List와 Map의 차이점
List와 Map은 데이터를 저장한다는 공통점을 가졌지만, 데이터를 저장하는 구조가 다릅니다.
List는 배열로 되어 있어 데이터를 순차적으로 표현할 때 유리한 자료 구조입니다.
반면에 맵은 특정 데이터를 표현할 때 유리한 자료 구조입니다.

동기식(Synchronous) / 비동기식(Asynchronous)
동기식은 어떤 동작이 완전히 끝나고 제어를 반납하는 방식이며,
비동기식은 동작이 끝나지 않아도 일단 제어권을 반납하고 할 일을 계속하는 방식입니다.
이메일의 예로, 만명 중 한 명에게 메일을 보내는 시간을 1초라고 할 때, 
동기식의 경우는 발행을 누르면 1초당 한명씩 보내게 되며,

10000초가 걸리는 동안 기다려야 합니다.
비동기식의 경우, 발행을 누르면 이메일을 보내는 시스템에 만 명에게

이메일을 보내라고 위임하는 것으로, 시스템이 일을 처리하는 동안 전송완료의 메시지를 받고,

백그라운드에서 메일을 보내는 것입니다.

선택 정렬(Selection Sort)
주어진 리스트에 최소값을 찾아 맨 앞에 위치한 값과 교체하며 리스트를 반복해 교체하는 알고리즘

삽입 정렬(Inserttion Sort)
자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여,
자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘

버블 정렬(Bubble Sort)
매번 연속된 두 개 인덱스를 비교하여, 정한 기준의 값을 뒤로 넘겨 정렬하는 알고리즘

머지 정렬(Merge Sort)
분할 정복 알고리즘의 종류로 큰 문제를 반으로 쪼개, 문제를 해결해 나가는 방식으로,
배열의 크기가 1보다 작거나 같을 때까지 반복해 정렬하는 알고리즘

퀵 정렬(Quick Sort)
분할 정복 알고리즘의 종류로 pivot을 선정하여 pivot을 기준으로 좌측과 우측으로,
pivot보다 작은 값을 왼쪽, pivot보다 큰 값을 오른쪽으로 재배치를 하고,
계속하여 분할하여 정렬하는 알고리즘
* pivot : 리스트 가운데서 고른 하나의 원소

클래스 / 인스턴스 / 객체
클래스로부터 객체를 만드는 과정을 인스턴스화, 클래스로부터 만들어진 객체가 인스턴스입니다.
클래스는 객체를 프로그램적으로 만들기 위한 설계코드(객체들의 집합)입니다.
객체는 소프트웨어에 구현할 대상입니다.

함수와 메서드
함수와 메서드는 특정한 로직을 처리하는 점에서 의미는 같습니다.
절차 지향 언어에서 사용하는 것은 함수, 객체지향 언어에서 사용하는 것은 메서드입니다.
일반적으로 fucntion A(){...} 으로 감싸져 있는 것은 함수,
클래스 내에서 속해 사용하는 것이 메서드 입니다.

Finalize method -> finalizer
최상위 클래스인 object 클래스에는 finalize라는 이름의 protected 메서드가 있다.
이 메서드는 JVM이 자원의 누수를 막기 위해 실행하는 가비지 컬렉션이 수행될 때,
더 이상 사용하지 않는 자원에 대한 정리를 진행하기 위해 호출되는 종료 메서드입니다.
JVM이 그 객체가 가지고 있는 메모리가 반환되기 전에 이것을 수행합니다.
클래스의 객체가 더이상 사용되지 않으면 JVM의 가비지 컬렉터가 메모리에서,

객체를 없애기 전에 finalizer()를 호출합니다.
어쩔 수 없이 사용해야하는 경우, super.finalize()를 호출해야 합니다.
성능 저하 문제를 가져올 수 있으므로, 조심히 사용해야 합니다.

try / catch / final
try : 예외처리 문으로 try는 예외가 발생할 가능성 있는 범위를 지정하는 블록
catch : 예외가 발생하면 catch 블럭을 수행
finally : try, catch에 상관없이 무조건 수행해야 하는 경우

배열과 컬렉션(리스트)
배열은 크기가 정해져 있습니다.
크기가 확정된 경우에 사용되고, 인덱스를 가지며 인덱스는 변경되지 않습니다.
Array는 정적인 길이를 제공하는 배열입니다.(List보다 삽입/삭제가 느림.)

DDL(Data Definition Language)

: 테이블 구조를 정의하는 데 사용되는 명령어
 (ex. CREATE, ALTER, DROP 등)
DML(Data Manipulation Language)

: 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어
 (ex. SELECT, INSERT, DELETE, UPDATE 등)
DCL(Data Control Language)

: 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
 (ex. GRANT, REVOKE 등)
TCL(Transaction Control Language)

: 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 트랜잭션(작업 단위) 별로 제어하는 명령어
 (ex. COMMIT, ROLLBACK SAVEPOINT 등)

인덱스(Index)
인덱스란 검색속도를 높이기 위해 사용하는 기술로,
책으로 비유하자면 Full Scan은 책을 한 장씩 넘기면서 찾는 방식이고,
Index는 찾는 페이지를 바로 찾을 수 있는 방식입니다.

inner / outer join
Inner join : 교집합의 개념으로, 두 개의 테이블에 공통된 값을 조회
outer join : 합집합의 개념으로, left, right, full로 나뉘고, left와 right의 경우 모든 결과를 조회한 후,

반대쪽에 매칭 되는 값이 없어도 보여주는 join,

full은 모든 결과를 조회하고 양쪽에 매칭 되는 값이 없어도 보여주는 join

HTTP / HTTPS
http의 경우 서버로 전송하는 정보들을 보안장치 없이 그대로 전송하여,
해커가 입력한 정보를 모두 볼 수 있게 됩니다.
https는 http와 SSL(Secure Socket Layer)이라는 보안 소켓 계층 프로토콜과 합친 것으로,
서버로 전송하는 정보를 암호화 하기에 보안성이 높습니다.
https를 사용하는 홈페이지는 SSL 인증서를 발급받아 사용합니다.
인증서를 통해 신뢰할 수 있는 사이트임을 확인 할 수 있는 대신,
보안 기능이 추가 되다 보니 http보다 느리다는 점이 있습니다.

SDK
Software Development Kit의 약자로, 개발을 위한 클래스, 컴파일러, 실행 도구,
디버깅 툴, 예제 코드, 튜토리얼 등을 모아놓은 환경을 제공하는 것입니다.

뮤텍스 / 세마포어
프로세스 혹은 스레드 간의 통신 시에 shared memory 등을 쓰는 경우,

하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우 문제가 발생할 수 있습니다.
이를 제어하기 위해 스레드에서는 뮤텍스를, 프로세스에서는 세마포어를 사용합니다.
뮤텍스는 상호 배제로, Critical Section을 가진 스레드의 Running Time이 서로 겹치지 않도록
각각 단독으로 실행하게 하는 기술입니다.
세마포어는 리소스 상태를 나타내는 카운터로 공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼,

동시에 사용자가 접근하여 사용할수 있습니다.
스레드가 하나의 자원을 공유함에 따라 데이터 일관성 문제가 생기는데 synchronized 처리를 해줌으로써,
하나의 스레드만 접근할 수 있도록 합니다.

교착상태(Dead Lock) : 두개 이상의 프로세스나 스레드가 서로 자원을 기다리면서 무한히 기다리는 상태입니다.

교착상태(데드락) 피하는 방법
상호배제 : 하나의 자원을 특정 시기에 하나의 프로세스 / 스레드만 소유할 수 있는 형태
자원점유 : 하나의 자원을 소유하고 다른 프로세스 혹은 스레드의 자원을 요청하는 상태
선취 불가능 : 하나의 프로세스/스레드에게 주어진 자원은 해당 프로세스/스레드가

스스로 놓기 전에는 놓게 만들 수 없는 상태
순환 대기 : 두 개의 프로세스 / 스레드의 경우, A->B, B->C, C->A에게 서로 자원을

요청하고 기다리는 상황으로 서로 꼬리를 물고 기다리는 상황

출처 : kim-hoya.tistory.com/38

728x90
반응형

'잡동사니' 카테고리의 다른 글

Java 면접 질문 | 자바 관련 개념정리  (0) 2021.01.05
주식관련공부 블로그  (0) 2020.12.30