CS

신입 개발자 면접 스터디 - 자바

yaini 2021. 5. 31. 13:53
반응형

작성완료 / 작성중

 

1. JAVA 특징

- 객체 지향 프로그래밍 언어

- JVM에서 실행되기 때문에, 플랫폼에 의존하지 않고 실행이 가능함

- 멀티 스레딩 지원

 

2. JVM

- 자바 바이트 코드를 실행하는 자바 가상 머신

- CPU나 운영체제의 종류와 무관하게 동작할 수 있게 한다.

- 자동으로 메모리 관리를 해줌

- Class Loader, GC, Runtime Data Area, Execute Engine 으로 나뉨

 

3. 자바의 멀티 스레딩

- Main Thread가 main 메소드를 실행하면서 시작

- Main Thread가 종료되더라도 실행 중인 스레드가 하나라도 있다면 프로세스는 종료되지 않는다.

 

4. 자바에서 Thread 생성 방법

1) new를 통해 thread 클래스 객체 생성 후 start 메서드를 통해 실행. Runnable 인터페이스를 구현한 클래스를 매개변수로 사용

2) thread 하위 클래스로 부터 생성 

 

5. 객체지향 언어 특징

- 상속: 부모클래스의 속성과 기능을 자식 클래스가 이어 받아 사용

- 캡슐화: 변수와 메소드를 클래스에 저장하여 사용, 정보 은닉 가능

- 다형성: 변수명, 함수명이 상황에 따라 다른 의미로 해석 가능, 오버라이딩/오버로딩 가능

- 추상: 인터페이스를 이용하여 필요한 정보만 표현하여 공통 속성, 기능을 묶어 이름을 붙임

 

6. 객체지향 언어와 절차지향 언어 차이점

1) 캡슐화, 다형성 상속을 지원하는가?

2) 데이터 접근 권한을 걸 수 있는가?

 

- 객체 지향 : 속성과 기능으로 나누어 실행, 코드 재활용성 높음, 설계 시간이 오래걸림- 절차 지향: 순차적으로 실행, 상대적으로 속도 빠름, 코드의 순서가 바뀌면 결과가 달라짐

-> 명령형 프로그래밍

 

* 함수형 언어?

- 순수 함수를 지향하는 프로그래밍 언어 (순수 함수: 같은 입력, 같은 출력)

- 불변성 지향, 변경 가능한 상태를 최대한 제거

-> 선언형 프로그래밍

 

7. 인터프리터와 컴파일러 차이점

컴파일

- 런타임 이전에 프로그래밍 언어를 기계어로 해석하는 작업 방식

- Assembly 언어로 변환하기 때문에 구동 시간이 오래 걸리지만 작동은 빠름

- OS 및 빌드 환경에 종속적

 

인터프리트

- 런타임 이후에 row단위로 해석하는 작업 방식

- 런타임 즉시 해석하기 때문에 실행시간은 느림

- OS 및 플랫폼에 종속되지 않음

 

8. 익명 함수란?

함수의 이름이 없는 함수

 

* 함수형 인터페이스: 메소드 하나만 가지고 있는 인터페이스 @FunctionalInterface

 

6. Stream API

- 컬렉션, 배열 등의 저장 요소를 하나씩 참조하며 함수형 인터페이스를 적용하여 반복적으로 처리할 수 있도록 해주는 기능

- 객체 집합.스트림 생성().중개연산().최종연산()

- 재사용 불가능

 

7. Collection 종류

목록성 데이터를 처리하는 자료구조

- List: 순서o

- Map: key-value 구조, 중복x, 순서x

- Set: key-value 구조에서 key가 value 값, 중복x, 순서x

- Stack/Queue: 순서o

 

* array와 차이: 정적 메모리 할당이 아닌 동적 메모리 할당

* ArrayList와 Vector 차이: ArrayList는 Thread safe하지 않고, Vector는 Thread safe하다.

* Map, HashMap 차이: key 값을 찾는 과정에서 HashMap은 hash table을 이용, Map은 red-black tree 알고리즘을 이용

 

8. Spring 과 Spring Boot 차이

 

9. XML Beans와 Autowired 특징

EJB

각 클래스 간의 의존도가 생기기 때문에 유지보수에 불편한 점이 생겨 생긴 것이 Annotation

 

10. 어노테이션 종류

- Built-in, Meta, Custom

 

* AOP(관심지향 프로그래밍)

 

11. Reflection

Class, Constructor, Method, Field의 정보를 가져오고 변경할 수 있도록하는 JAVA API

 

12. JPA

 

13. Garbage Collection

 

14. 클래스/객체/인스턴스

 

15. 예외 처리 방법과 각 차이점

- try/catch: 복구형

- throw: 회피형

- catch: 전환형 

 

16. Checked Exception vs Unchecked Exception

 

17. 자바 실행 과정

 

18. 자바에서 동기화하는 법

 

19. method reference 

 

20. default method

인터페이스 내부에서도 default를 사용해 선언한 메소드

기존에 존재하던 인터페이스를 이용하여 클래스를 만들고 있는데, 인터페이스를 보완하는 과정에서 추가할 때 사용

 

21. optional class

 

22. upcasting vs downcasting

- upcasting: 자식클래스가 부모클래스로 캐스팅, 부모 클래스 속성/기능에만 접근 가능, 다형성을 위해 사용

- downcasting: 부모 클래스가 자식클래스로 캐스팅, 명시적으로 타입을 지정해주어야 함

 

* casting: 형변환

* 객체 타입을 구분하기 위해 instanceof 연산자 사용

 

23. 기본형 vs 참조형

기본 타입

- byte, short, char, int, float, double, boolean

- 크기가 작고 고정적, stack에 저장

참조 타입

- class, array, interface, enumeration

- new를 통해 생성

- 데이터 크기가 가변적, heap에 저장

- 더 이상 참조하는 변수가 없을 때 가비지 컬렉션에 의해 파괴

 

24. int vs short

 

25. StringBuilder vs StringBuffer

 

26. VO, DTO, POJO

- VO: 내부 속성 값을 변경할 수 없는 Read-Only 특성을 가진 객체, 변경없이 값으로 취급할 객체

- DTO: 계층 간 데이터 교환을 위해 사용하는 객체 (private 변수, setter, getter로 구성)

- POJO: 순수하게 getter, setter 메소드로 이루어진 Value Object 성의 Bean (상속, 인터페이스, 어노테이션 x)

- DAO: DB에 엑세스 하는 객체

 

* POJO 사용 이유? - 가장 일반적인 형태로 코드를 작성함으로써 코드에 대한 테스트 작업을 좀 더 유연하게 할 수 있음

 

27. Java Beans, EJB Beans 

 

28. Persistance Framework

- SQL Mapper

ex) MyBatis, JDBC

 

- ORM

ex) JPA, Hibernate

 

29. IoC Container

 

30. swagger

 

31. Rest API

 

32. Maven vs Gradle

Maven - pom.xml 을 이용하여 관리

gradle - maven과 달리 변수, 조건문으로 로직 구현이 가능, 속도 향상 

 

 

 


참고

https://gem1n1.tistory.com/27
https://honbabzone.com/java/java-thread/
Ready-For-Tech-Interview/[Java] 객체지향 프로그래밍 개념.md at master · WooVictory/Ready-For-Tech-Interview · GitHub
https://st-lab.tistory.com/151
Tech_interview/README.md at main · SSAFY-CS-STUDY/Tech_interview · GitHub
https://jins-dev.tistory.com/entry/Compiler-%EC%99%80-Interpreter-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://jeong-pro.tistory.com/165
https://www.crocus.co.kr/1553
GitHub - WooVictory/Ready-For-Tech-Interview: 💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻
https://m.blog.naver.com/weekamp/186678831
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ksw6169&logNo=221621730236
https://jethro.tistory.com/entry/%ED%8E%8C-map%EA%B3%BC-hashmap%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://codechacha.com/ko/reflection/
https://madplay.github.io/post/java-upcasting-and-downcasting
https://hyojun123.github.io/2019/04/18/gradleAndMaven/
https://siyoon210.tistory.com/95

 

반응형