본문 바로가기

Study/면접준비

[2주차] 면접질문정리 (스터디)

 

2024.01.22  ( 스터디 완료 )

랜덤 질문 5개씩 답변하기 

 


 

1. 1분자기소개 (타이머 재서 해보기*)

 

 

 

2. 프로젝트 협업 과정에서 힘들었던 점.

 

더보기

 

 - 디자인(CSS)에 대해 목업도 만들고 미리 설계를 했지만, 맡은 부분에 대해서 각자 진행하다 보니 세세한 부분까지    통일성있게 맞추는게 어려웠음.

 

 -  개개인이 코드 짜는 방식이 달라서 기능이 겹치는 경우 맞춰나가는 데에 시간이 오래 걸림.

   최대한 기존 팀원의 코드를 수정하지 않으면서 추가 기능을 결합시키려고 노력함.

 

 

 

 

3. Java에서 List와 Array의 차이점은?

 

더보기

 

데이터의 추가/삭제 속도, 데이터 조회 속도, 데이터 공간 크기 변동여부


 

* 배열 (Array)

 - 같은 타입의 변수들로 이루어진 유한 집합.

 - 고정된 크기를 가지며, 한 번 생성된 배열의 크기는 변경할 수 없음.

 - 각 배열 요소들 인덱스(index)를 통해 접근. (배열 요소 초기값은 0)

 

int[] array = new int[3];	// 배열 선언
array[0] = 2;			// 초기화
		
System.out.println(Arrays.toString(array)); // [2, 0, 0]

 

* 리스트 (List)

 - 크기가 동적으로 조절되는 컬렉션 인터페이스.

 - 객체를 저장하며, 제네릭스를 통해 다양한 타입의 객체를 담을 수 있음.

 

List<String> list = new ArrayList<>();	// 리스트 선언

System.out.println(list);		// []
System.out.println(list.size());	// 0

 

* List는 기본적으로 'Object' 클래스의 'toString()' 메서드를 상속받아 구현 => 바로 요소값 출력 가능.

 

 

 

 

4. AWS 혹은 클라우드 컴퓨팅이란?

 

더보기

 

* AWS (Amazon Web Services) 

아마존 닷컴에서 제공하는 클라우드 컴퓨팅 플랫폼.

 

 

* 클라우드 컴퓨팅 (Cloud Computing)

인터넷을 통해 컴퓨터 시스템, 저장소, 데이터베이스, 네트워크, 소프트웨어, 분석 및 인공지능 기능 등을 제공하는 컴퓨팅 서비스의 형태를 의미. 사용자는 필요에 따라 이러한 IT 자원들을 인터넷을 통해 요청 및 사용.


 

서비스모델 : Iaas, Paas, Saas


 

https://phyho.tistory.com/202 

 

[용어정리] AWS / 클라우드 컴퓨팅

* AWS (Amazon Web Services) 아마존 닷컴에서 제공하는 클라우드 컴퓨팅 플랫폼. * 클라우드 컴퓨팅 (Cloud Computing) 인터넷을 통해 컴퓨터 시스템, 저장소, 데이터베이스, 네트워크, 소프트웨어, 분석 및

phyho.tistory.com

 

 

 

 

5. 접근제어자의 종류와 특징.

 

더보기

 

* 접근 제어자 (access modifier)

정보 은닉(data hiding)을 위해 클래스 멤버에 대한 접근 권한을 지정하는 키워.

                                        필드, 메소드, 내부 클래스

 

 

 

1. private

 해당 클래스 멤버는 외부에 공개되지 않으며, 외부에서 직접 접근 불가능.

 (해당 객체의 public 메소드를 통해서만 접근 가능)

 

 

2. public

해당 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근 가능.

(public 메소드는 private 멤버와 프로그램 사이의 인터페이스 역할)

 

 

3. default 

접근 제어의 기본값. 접근 제어자가 지정되지 않으면 자동 지정되는 값.

같은 클래스 멤버/ 같은 패키지 멤버만 접근 가능.

 

 

 

4. protected

해당 멤버의 부모 클래스(parent class)에 대해서는 publice 멤버처럼 취급, 외부에서는 private 멤버처럼 취급.

같은 클래스 멤버 / 같은 패키지 멤버 / 상속받은 자식 클래스(child class) 멤버만 접근 가능.

 

 

 

* 참고*

 

 


 

[ 면접질문 by 즨 ]

 

 

 

6. DI, IoC, AOP 설명

 

더보기

 

스프링 프레임워크의 핵심 개념 => DI, IoC, AOP, PSA

 

 

* DI (Dependency Injection) 의존성 주입                        결합도 감소

 - 객체 지향 프로그래밍에서 소프트웨어 컴포넌트 간의 의존관계를 느슨하게 만들기 위한 디자인 패턴.

 - 객체 간의 의존 관계를 코드 내에서 정의하는 것이 아니라 외부에서 주입하는 방식

=> 코드를 유연성, 재사용성을 높여 유지보수성을 향상, 테스트 용이성 향상.

 

 

* IoC (Inversion of Control) 제어의 역전

 - 프레임워크가 프로그램의 제어 흐름을 가짐.

 - 스프링에서는 개발자 대신 스프링 IoC 컨테이너가 이러한 객체들의 생성/생명주기를 관리.

                                                                                             빈(Bean)    라이프사이클                                                                      

 

* 빈(Bean) : 스프링 컨테이너에 의해 생성/관리되는 객체.  (싱글톤 패턴)

 

 

* AOP (Aspect-Oriented Programming)

 - 핵심 로직과 부가 로직을 분리하여 독립적으로 관리하고 유지보수하는 프로그래밍 방식.

            코드에서 공통적으로 발생하는 부분

 - 공통기능을 모듈화하여 중복성을 줄이고 재사용성을 높임.

 

 

 

* 참고 (국비수업) *

 

 

 

7. Stringbuffer와 Stringbuilder 차이

 

더보기

 

동기화 (Synchronization) 지원 여부 차이가 있음. (멀티 스레드에서의 안정성)

 


 

String이 불변성(Immutable)의 특성을 가지고 있는 반면,

StringBuffer, StringBuilder 는 가변성(mutable)의 특성을 가진다.


* StringBuffer ( java.lang 패키지 )

 - String 클래스의 인스턴스는 한 번 생성되면 값을 변경할 수 없지만

   StringBuffer 클래스의 인스턴스는 값의 변경, 추가, 제가 가능. ( append(), insert() 메소드 등.. )

 - 내부적으로 buffer라고 하는 독립적인 공간을 가짐. => 공간의 낭비가 없고 문자열 연산 속도 빠르다.

 - buffer(데이터 공간)의 크기는 기본값은 16개의 문자 저장 가능, 생성자를 통해 크기 별도 설정 가능. 

 - 동기화를 지원 => 멀티 스레드 환경에서 안전.

 

 

* StringBuilder

 - StringBuffer 와 동일

 - 동기화를 지원하지 않음. => 속도는 더 빠름.


 

 문자열 연산이 빈번한 경우 String보다 StringBuffer / StringBuilder 를 사용하고, 

 멀티 스레드 환경에서는 StringBuffer 를 사용하는 것이 안전.


 

 * String의 + 연산은 컴파일 시에 new StringBuilder.append.toString 으로 변환되어 처리된다고 한다. *

 

 

 

* 코드참고( StringBuffer ) *

더보기

 

String 처럼 문자열을 저장. (크기는 기본공간 16에 +5 로 21이 된다_ capacity() )

StringBuffer str = new StringBuffer("Hello");
	
System.out.println(str);   // Hello
System.out.println(str.capacity());	// 21

 

문자열을 추가해보면 기존 문자열에도 새 문자열이 추가되어 함께 바뀐다. (같은 메모리 주소를 참조)

StringBuffer str = new StringBuffer("Hello");
		
System.out.println(str);			// Hello world
System.out.println(str.append(" world"));	// Hello world

 

 

 

 

8. 프로세스와 쓰레드 차이

 

더보기

 

* 프로세스 (Process)

 - 운영체제에서 실행 중인 프로그램(program)의 인스턴스.

 - 각 프로세스는 독립적 메모리 공간을 할당받아 서로 영향을 미치지 않음.

                           실행 중인 코드, 데이터, 시스템 자원 포함

 

 

* 스레드 (thread)

 - 프로세스 내에서 실행되는 작업 단위. (모든 프로세스에는 한 개 이상의 스레드가 존재)

 - 같은 프로세스 안의 여러 스레드들은 각각 Stack만 따로 할당받고, 주소공간/자원 공유.

                                                                                                                힙공간

 

* 프로그램 (Program) : 어떤 작업을 위해 실행할 수 있는 파일.

* 멀티스레드 프로세스 (multi-threaded process)두 개 이상의 스레드를 가지는 프로세스.

 

 

* Java Thread

 - 자바에는 프로세스가 존재하지 않고 스레드만 존재, JVM에 의해 관리(운영체제 독립).

 - Thread 클래스 / Runnable 인터페이스를 통해 스레드 생성.

 - 'synchronized' 로 스레드 간의 동기화 지원.

 

 

 

 

9. 자바에 대해 말해봐라 (장단점 특징 등)

 

더보기

 

  객체지향 프로그래밍 언어로, JVM(Java Virtual Machine) 을 통해 다양한 운영체제에서 실행할 수 있음.

  =>  Write Once, Run Anywhere (WORA)

 

[ 특징(장점) ]

 - 객체지향 프로그래밍 언어 (Object-oriented proramming language) _상속, 캡슐화, 추상화, 다형성

 - 플랫폼 독립성 (Platform Independence) _ JVM 을 통해 동작하기 때문에 운영체제에 독립적

 - 자동 메모리 관리 (Garbage Collector) _ JVM의 메모리 구조의 Heap 영역의 메모리를 관리.

 - 다양한 클래스 라이브러리(Library) 제공.

 - 멀티스레드(Multi Thread) 지원.

 - 동적 로딩(Dynamic Loading) 지원

    => 프로그램 실행 시 모든 클래스를 로딩하지 않고, 필요한 시점에 클래스 로딩하여 사용.

 

 

 

 [ 단점 ]

- 백엔드에 적합한 언어.

- 성능 (JVM의 컴파일 과으로 실행속도가 상대적으로 느림)

- 많은 메모리 공간 차지

- 코드가 복잡함.

 

 

* 참고 (국비수업) *

 

 

 

10. db정규화가 무엇인지

 

더보기

 

* 정규화 (Normalization)

데이터베이스 설계 과정에서 중복을 최소화하고 데이터 무결성을 유지하기 위해 테이블을 구조화하는 프로세스.

 

 

[ 정규화 과정 ]

1. 제 1정규화 : 각 컬럼이 원자값(Atomic Value)을 갖도록 테이블을 분해. 하나의 속성- 하나의 값

2. 제 2정규화 : 1을 만족, 비주요 속성이 기본키에 완전 함수 종속 되도록 테이블을 분해.

3. 제 3정규화 : 2를 만족, 비주요 속성 기본키에 이행적으로 종속되지 않도록 테이블을 분해.

4. BCNF 정규화 : 3을 만족, 모든 결정자가 후보키가 되도록 테이블을 분해.      // 보통 여기까지 진행?

5. 제 4정규화 : BCNF를 만족, 다치 종속성이 제거되도록 테이블을 분해.

6. 제 5정규화 : 4를 만족, 조인 종속성을 해결하여 테이블을 분해.

 

메인이 원자

분적 함수 종속 제거

행적 함수 종속 제거

정자이면서 후보키가 아닌 것 제거

치 종속 제거

인 종속성 이용


 

* 결정자(determinant set) : 함수의 종속관계에서 다른 속성의 값을 결정하는 속성. (기본키, 후보키)

* 종속자(dependent attribute) : 함수의 종속관계에서 다른 속성(결정자)에 값이 결정되는 속성.


 

* 종속성 (Dependency) : 하나의 속성 값이 다른 속성 값에 의존하는 관계.

 

1. 완전 함수 종속 (Fully Functional Dependency)

 A가 B에 대해 완전 함수 종속 : 특정한 A값은 항상 하나의 B의 값과 대응.

                                             (A의 어떠한 부분 집합도 B에 대한 정보를 결정하는 데에 기여하지X)

 

2. 부분 함수 종속 (Partial Functional Dependency)

 A가 B에 대해 부분 함수 종속 : A의 어떤 부분집합이 B에 대해 완전 함수 종속.

                                             (A의 일부 속성이 B에 대한 정보를 결정하는 데에 충분) 

 

3. 다치 종속 (Multi-valued Dependency)

 A ->> B : B가 A에 다치 종속. (A가 B를 다치 결정)

                A가 B에 종속되어 있지만, A의 각 값이 여러개의 B의 값에 대응될 수 있을 때.

 

4. 조인 종속 (Join Dependency)

A라는 릴레이션을 B와 C로 분해했다가 다시 조인했을 때 A가 된다면 A는 조인 종속성이 있다고 함.

 

5. 이행 함수 종속 (Transitive Functional Dependency)

A -> B, B -> C 일 때 A -> C 가 성립.

 

 

 

* 참고 *

 

 


 

 

PYOJI STUDY (notion.site)

 

PYOJI STUDY | Notion

표해현·최지은 CS지식 및 면접 대비 구술 스터디

elly-developer.notion.site