cs 메모장

2024-06-07 면접질문정리 / msa / 함수형 프로그래밍/ 메모리구조의 4가지 영역/ Array와 ArrayList / 배열과 연결리스트의 장단점

nakgopsae 2024. 6. 10. 02:53

토막상식 !

vo == 객체 그자체 값 / dto는 객체에 들어가는 데이터를 감싸는 오브젝트


msa에 대해 설명해주세요

기존의 사용하던 하나의 어플리케이션에 모든 비즈니스 로직을 통째로 모아놓은 구조인
모놀리틱 시스템의 단점을 극복하기 위한 방식으로 
애플리케이션의 여러개의 작은 서비스를 독립적으로 분할하여 개발하고 배포되는 방식입니다

- 장점
- 각 서비스별 소스코드 수정이 쉽다
- 수정된 서비스에만 배포 가능하여 배포시 전체서비스가 중단이 없다
- 장애시 해당 서비스만 한정되어 전쳊넉인 장애로 확장될 가능성이 적다

- 단점
- 각 서비스간 통신이 필요하며 연결구축 및 관리의 복잡성이 증가한다 
- (서비스간 api호출을 통한 연결방식으로 통신비용이 들고 개발시 테스트 하기 어렵다)
- 초기 개발 및 통신에 시간이 소요됩니다

함수형 프로그래밍에 대해 설명하세요

함수형 프로그래밍 이란 프로그래밍 패러다임 중 하나로 
순수함수와 불변성을 강조하며 프로그램의 상태변경을 최소화 하는것입니다
수학적 함수에 개념에 기반을 두고 있으며 가변데이터를 멀리하고 코드의 간결성/모듈성/예측가능성을 높일 수 있습니다

- 순수 함수 : 동일한 입력에 대해 항상 동일한 출력을 반환하고 외부 상태나 가변데이터를 변경하지 않는다
예측이 가능하고 테스트 디버깅에 유리하다

- 불변성 : 데이터의 불변성을 강조하여 데이터를 한 번 생성하면 변경하지않고 새로운 데이터를 생성하여
상태를 관리한다 프로그램의 상태변화를 최소화 하고 예측가능 동작을 보장한다

- 가변데이터 최소화: 가변 데이터를 피하고 불변객체를 사용함으로 프로그램의 안정성과 병행성을 개선한다
가변상태의 버그를 줄일수있다

- 고차함수: 함수를 다른 함수의 인자로 전달하거나 반환값으로 사용할 수 있는 고차 함수를 활용한다
코드의 재사용성과 유연성을 높일수있다

- 함수 조합: 작은 함수를 조합하여 더 큰 함수를 만든다 코드의 모듈성과 재사용성을 높인다 

- 지연평가: 필요한 시점 까지 계산을 미룬다 효율적인 성능과 자원 관리를 도모한다

 


메모리 구조의 4가지 영역에 대해 설명하세요

메모리는 크게 code/ data/ heap/ stack 의 영역으로 나누어진다

- code영역 : 개발자가 작성한 코드가 저장되는 영역이다 컴파일 된 후 기계어 형태로 저장되어 집니다
cpu는 코드영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다

- data영역: 프로그램의 전역변수와 정적변수가 저장되는 영역입니다
프로그램시작과 함께 할당되며 프로그램이 종료되면 소멸합니다

- heap영역: 동적으로 할당되는 메모리를 저장하는 공간입니다
개발자가 프로그램실행중 필요에 따라 메모리를 동적으로 할당하고 해제할수있습니다
//가비지컬렉터 참조되지 않은 객체를 알아서 메모리에서 정리

- stack영역:함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다

 

//관련개념 

 

// 메모리란 - 컴퓨터 주 기억장치를 말하며 작업을 수행하는 동안 필요한 데이터를 임시로 저장하는 장소입니다 


Array와 ArrayList의 차이에 대해 설명하세요

둘의 차이는 길이를 조정가능한가 입니다 

Array는 고정된 길이이고 ArrayList는 가변가능한 길이를 가집니다

Array는 초기화시 메모리에 할당되어 속도가 빠르고
ArrayList는 데이터의 추가 및 삭제시 메모리를 재할당 하여 Array보다 속도가 느립니다

배열과 연결리스트의 장단점에 대해 설명하세요

배열: 정적자료구조로 고정된 크기를 가지고 연속된 메모리주소를 할당 받습니다
그렇기에 인덱스를 가지고 임의 접근이 가능합니다

- 장점
- 인덱스를 사용해 빠른 요소 접근이 가능하여 배열의 특정위치에 있는 접근은 O(1) 시간복잡도로 빠릅니다

- 단점
- 배열 중간에 요소를 삽입/삭제 할 경우 이후 모든 요소들이 이동해야 하므로 시간복잡도O(n)입니다

연결리스트: 동적 자료구조로 크기가 가변가능합니다 
연속된 메모리 주소를 할당받지 않고 노드를 가지며 노드의 데이터가 다음 데이터의 주소를 가르킵니다 

- 장점
- 노드를 추가/삭제 할때 해당 노드의 앞뒤 포인터만 수정하면 되므로 시간복잡도가O(1)입니다

- 단점
- 연결리스트는 노드순서를 따라 가야하므로 특정 위치의 요소에 접근 하는 시간 복잡도는 O(n)입니다