면접준비[프론트,백,데이터,CS]

[ C.S 지식 정리 ] CS 기초 지식 밑그림.

안다미로 : APP & Web3 & D.S 2024. 11. 1. 22:44

 

 

 

[ C.S 지식 정리 ] CS 기초 지식 밑그림.

 


 

∇ C.S 기초 지식 밑그림 그리기


목  차

1. 프로세스와 스레드의 차이
2. 스크립트 언어와 컴파일러 언어의 차이점
3. 동기와 비동기 장단점 비교
4. DB에서 인덱스를 사용하는 이유와 장단점
5. TCP, UDP 차이와 장단점
6. 오버라이딩 vs 오버로딩
7. 인터페이스 vs 추상화
8. 디자인 패턴이란?
9. MVC 패턴 설명
10. 자료구조 & 알고리즘

 

 


 

 

      1. 프로세스와 스레드 차이


 

 

※  프로세스 : 운영체제로부터 자원을 할당 받아서 실행.

 

                  = > 하나의 프로세스 안에서, 여러 스레드를 생성 가능.

                        - > 보통 프로세스는 코드/ 데이터/ 스택/ 힙 / 메모리 영역을 기반으로 실행.

 

 스레드     : 프로세스로부터 자원을 할당 받아서 실행. 

 

                  = > 각 스레드는 개별 스택을 가지고, 프로세스의 전역 메모리 공간을 공유하며 프로그램을 실행시킵니다.

                           - > 스레드는 프로세스 안에서 개별적인 스택을 가지고  코드/데이터/힙 영역을 공유하며 실행.

 

 


 

     2. 스크립트(인터프리터) 언어와 컴파일러 언어의 차이점.


 

       ∞ 스크립트(인터프리터) 언어

                : 코드가 실행되는 단계인 런타임에 문 단위 한 줄식 중간 코드인 바이트코드로 변환한 후 실행,!

 

                         - 인터프리터 과정이 반복 수행.

                                  ○ 인터프리터 단계와 실행 단곅가 분리되어 있지 않습니다.

                                  ○ 한 줄식 바이트코드로 변환하고 즉시 실행.

                                  ○ 따로 실행 파일을 생성하지 않습니다.

 

 

 

         ∞ 컴파일러 언어

                : 코드가 실행되기 전 단계인 컴파일 타임에,  소스코드 전체를 한번에 머신 코드로 변환한 후 실행!

                              -  실행 파일을 추가적으로 생성합니다.

 

                                  ○ 최적화 작업을 진행한 후, 실행파일을 생성하기 때문에 

                                       코드 실행 속도가 인터프리터 언어보다 빠릅니다.

                                  ○ 실행에 앞서서 컴파일은 단 한번만 수행합니다.

 

 

         ∞ 자바스크립트(JS)는 일반적으로 인터프리터 언어로 구분하지만,

             인터프리터와 컴파일러의 장점을 결합해 비교적 처리 속도가 느린 인터프리터의 단점을 해결했습니다.

 

         ∞ Python도 인터프리터 언어

 

 


      3. 동기(Synchronous)와 비동기(Asynchronous)의 차이와 장단점.


   

          ∇ 동기 ( Synchrounous )

 

 

                      - "동기"는 사전적으로, "동시에 일어난다"는 의미를 가지고 있습니다.

 

                      - 개발(프로그래밍) 측면에서, 동기는 실행(작업)이 순차적으로 진행되는 것을 의미합니다.

 

                            - > 즉, 한 작업이 시작&진행되고 있으면 해당 작업이 완전하게 완료될 때까지 

                                          다른 작업은 스탠바이 상태로 있어야 합니다.

 

                            - > 동기 방식은 호출한 함수 또는 작업이 반환*종료 될 때까지 

                                             다른 작업의 실행 흐름이 차단되는 특징이 있습니다.

 

                       - 장점 : 구성이 단순하고 순서대로 실행가능해서 실행구조가 예측이 가능합니다.

                                           일반적으로 간단고 직관적으로 코드를 작성하기 쉽습니다.

 

                      -  단점 : 여러 작업이 동시에 실행되어야하는 필요가 있는 경우,

                                   각 작업의 완료를 기다리는 동안 작업 시간이 소요되어 전체 프로세스의 성능이 저하될 수 있습니다.

                                      또한 하나의 작업이 지연되면, 다른 작업들도 연달아 지연되는 문제가 발생할 수 있습니다.

 

                      - 순차적으로 실행되어야 하는 작업이나 작업 간의 의존성이 높은 경우에 동기 방식이 적합합니다.

                            특정 작업이 반드시 완료된 후에 다음 작업을 수행해야 하는 경우.

 

 

              ∇ 비동기 ( Asynchronous ) 

 

 

                      - "비동기"는 사전적으로, "동시에 일어나지 않는다"는 의미를 가지고 있습니다.

 

                      - 프로그래밍에서 비동기는 작업이 독립적으로 실행되며,

                            실행되고 있는 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식을 의미합니다

                        즉!  비동기 방식은 작업이 시작되면,

                                   해당 작업이 완료될 때까지 기다리지 않고 다음 코드를 실행할 수 있습니다.

 

                      - 동시에 여러일을 수행할 수 있다는 점이 장점이고

                            프로그램은 작업이 완료되기를 기다리는 동안 다른 작업을 처리할 수 있으므로

                         전체적인 실행성능이 향상됩니다.

 

                      - 주로 I/O작업이나 네트워크 요청과 같이 시간이 오래 걸리는 작업에 유용합니다.

                      - 비동기 방식은 콜백(Callback), 프라미스(Promise), async/await 등의 매커니즘을 활용해

                             구현할 수 있습니다.

 

                      - 여러 작업을 동시에 처리해야 하는 경우나,

                           시간이 오래 걸리는 무거운 작업을 다른 작업과 병렬로 처리해야 하는 경우에 적합

 

 


 

      4. DB(데이터베이스)에서 인덱스를 사용하는 이유와 장단점


            - 인덱스는 데이터를 논리적으로 정렬해서, 검색과 정렬 등의 속도를 높이기 위해 사용합니다.

 

            - 데이터 삽입, 변경이 수시로 일어나면 매번 인덱스를 변경해야 하므로 

               성능 정하를 막기 위한 고려가 필요합니다.

 

            - React에서는 Key는 인덱스로 지정하면 안되는 경우가 많습니다.

 

 


      5. TCP, UDP 차이와 장단점


     

             - UDP  : 비연결형 프로토콜로 흐름제어, 오류제어를 하지 않음

             - TCP : 연결형 프로토콜로 흐름제어, 오류제어를 함.

 

             - UDP는 TCP처럼 종단간 연결설정 및 오류제어를 하지 않아서

                        송수신에 적은 데이터를 필요로 합니다.

 

            - TCP는 UDP보다 데이터 송수신에 신뢰성을 가집니다.

 

 


      6. 오버라이딩 vs 오버로딩


             - 오버라이딩 : "상위 클래스에 존재하는 메서드"를   "하위 클래스"에 맞게 재정의 하는 것

                                         - > 메서드 이름 및 파라미터수가 동일.

 

             - 오버로딩 : 두 메서드가 같은 이름을 가지고 있으나,  파라미터 수나 자료형이 다른 경우.

 

 


      7. 인터페이스  vs   추상화


            ○ 추상화  : 추상 클래스는 추상 메서드를 1개 이상 가지고 있는 클래스를 의미.

 

           ○ 인터페이스 : 상수와 메서드 선언 집합.

                                        - 정의된 메서드를 extends, implements 받은 곳에서 모든 구현을 강제.

                                        - 인터페이스는 인터페이스끼리 상속이 가능해, 여러 인터페이스 상속이 가능.

 


      8. 디자인 패턴이란?


              - 디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안.

 

              - 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진

                    다양한 해결책 중에서 실무적으로 인정된 모범 사례들입니다.

 

             - 이러한 디자인 패턴은 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 설계 원칙(SOLID)을 기반으로 구현

 


      9. MVC 패턴 이란


          - MVC패턴은 디자인 패턴 중 하나입니다.

 

          - MVC는 Model ,View, Controller의 약자입니다.

              하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 3가지의 역할로 구분한 패턴입니다.

 

              - 사용자가 Controller를 조작하면, Controller는 model를 통해서 데이터를 가져오고

                  데이터의 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 됩니다.

 

상호 영향을 끼치는 구조

 

                   ∂ 모델(Model)

                         - 애플리케이션의 정보, 데이터를 나타냅니다.

                         - db, 처음 정의하는 상수, 초기화값, 변수 등등을 의미합니다.

                                또한 이러한 Data, 정보들의 가공을 책임지는 컴포넌트들을 말합니다.

                         - 값과 기능을 가지고 있어서 비즈니스 로직을 수행하게 됩니다.

                         - 컨트롤러와 뷰에 의존하지 않아야 합니다.

 

 

 

                   ∂ 뷰 (VIEW)

                         - input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타냅니다.

                         - 다시 말해 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다.

                         - 데이타를 기반으로 사용자들이 볼 수 있는 화면입니다.

                         - 모든 사용자에게 동일하게 보여줘야하는 부분 - >   비즈니스 로직이 없습니다.

                         - 뷰는 모델에만 의존해야하고, 컨트롤러에 의존하면 안됩니다.

                         - 뷰가 모델로부터 데이터를 받을 때는 사용자마다 다르게 보여줄 필요가 있는 데이터에  대해서만 받는다.

 

 

 

                   ∂ 컨트롤러(Controller)

                         - 데이터와 사용자인터페이스 요소들을 잇는 다리역할을 합니다.

                         - 즉, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.

 


      10.자료구조 & 알고리즘


해쉬 테이블

  • key: value로 저장하는 데이터 구조
  • 키를 통해 바로 데이터를 받아올 수 있어 속도가 획기적으로 빨라짐
  • 해쉬 : 임의 값을 고정 길이로 변환하는것
  • 해쉬 테이블 : 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조
  • 해쉬 함수 : 키에 대해 산술 연산을 이용해 데이터 위치를 찾을 수 있는 함수
  • 해쉬 값 / 해쉬 주소 : 키를 해싱 함수로 연산해서 해쉬 값을 알아내고 이를 기반으로 해뷔 테이블에서 해당 키에 대한 데이터 위치를 일관성있게 찾을 수 잇음
  • 슬롯 : 한 개의 데이터를 저장할 수 있는 공간
  • 저장할 데이터에 대해 키를 추출할 수 있는 별도 함수도 존재할 수 있음

 

  • 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리
  • 완전 이진 트리 : 노드를 삽임할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리
    = 최대값과 최소값을 찾으려면 O(log n)이 걸림 <=> 배열의 경우 O(n)
    항상 루트노드를 가지고 오기때문에 다른 값을 찾아볼 필요가 없음
    = 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야하는 경우 많이 사용
  • 각 노드의 값은 해당 노드의 자식 노드가 가진 값보다 크거나 같다.

 

 

 힙과 이진 탐색 트리의 차이

 @ 공통점 : 힙과 이진 탐색 트리는 모두 이진 트리

 

차이점

  • 이진 탐색 트리 : 왼쪽자식노드부터 하나씩 채워나간다. (왼쪽 자식 노드의 값이 가장 작고, 그 다음 부모 노드, 그 다음 오른쪽 자식 노드 값이 가장 큼)
  • 힙 : 각 노드의 값이 자식 노드보다 크거나 같음
    - 힙 : 왼쪽 자식 노드 or 오른쪽 자식 노드 어느 쪽이 더 큰지 모름
  • 이진 탐색 트리 : 탐색을 위한 구조
  • 힙 : 최대/최소값 검색을 위한 구조

 


버블 정렬

  • 인접한 데이터를 비교해서 앞에 있는 데이터보다 작은경우 바꾸어줌
  • 반복문이 두개인경우 O(n^2), 최악의 경우 n*(n-1)/2
  • 완전 정렬이 되어있는 경우 최선은 O(n)
  • 데이터의 길이 : n (n만큼 반복을 2번함)

삽입 정렬

  • 두번째 인덱스부터 시작
  • 해당 인덱스 앞에 있는 데이터부터 비교해서 key값이 더 작으면 B값을 뒤 인덱스로 복사
  • 이를 키 값이 더 큰 데이터를 만날때까지 반복, 그리고 큰 데이터를 만난 위치 바로 뒤에 key값을 이동
  • 반복문이 두 개 O(n^2)
  • 최악인 경우 n*(n-1)/2
  • 완전 정렬인 경우 O(n)

선택 정렬

  • w주어진 데이터 중 최소값을 찾음
  • 해당 최소값을 데이터 맨 앞에 위치한 값과 교체
  • 맨 앞의 위치를 뺀 나머지 데이터를 동일한 방법으로 반복
  • 반복문이 두 개 O(n^2)
  • 최악인 경우 n*(n-1)/2