Giter Club home page Giter Club logo

daily_cs's Introduction

daily_cs's People

Contributors

usadev0813 avatar

Watchers

 avatar

daily_cs's Issues

라우터와 스위치의 차이에 대해 말씀해주세요

스위치는 데이터 링크(L2) 계층에서 작동하며 다양한 기기들을 동시에 연결할 수 있는 대에 목적이 있다.
라우터는 네트워크 계층(L3) 에서 작동하며 여러 네트워크를 동시에 연결할 수 있는 대에 목족이 있다.

기기 -> 허브 -> 스위치 -> 라우터 -> 인터넷

기기는 스위치를 통해 연결되고, 네트워크는 라우터를 통해 다른 네트워크로 연결 된다.

스위치 기능을 가진 라우터도 있는데 가장 큰 예시는 가정용 무선 라우터를 이용하여 여러 기기를 LAN선을 통해 인터넷 연결이 가능하다.

퀵 정렬(Quick Sort)의 구현 방식, 시간 복잡도, 공간복잡도, 장단점에 대해 설명해주세요

구현 방식:

퀵 정렬은 주어진 배열을 분할하는 과정부터 시작합니다. 배열에서 하나의 원소를 기준으로 선택합니다. 이를 피벗(pivot)이라고 부릅니다.
피벗을 기준으로 피벗보다 작은 원소들은 왼쪽으로, 피벗보다 큰 원소들은 오른쪽으로 분할합니다.
분할된 왼쪽 배열과 오른쪽 배열에 대해 동일한 분할 과정을 재귀적으로 반복합니다.
분할이 더 이상 불가능할 때까지 반복한 후, 분할된 부분 배열들을 합쳐 정렬된 배열을 얻습니다.

시간 복잡도:
퀵 정렬의 평균 시간 복잡도는 O(n log n)이며, 최악의 경우 O(n^2)까지 증가할 수 있습니다. 하지만 평균적으로 다른 정렬 알고리즘보다 빠른 성능을 보입니다.

공간 복잡도:
퀵 정렬의 공간 복잡도는 주어진 배열을 재귀적으로 분할하고 합병하는 과정에서 추가적인 공간을 필요로 하지 않습니다. 따라서 공간 복잡도는 O(log n)입니다.

장단점:

  • 장점:
    평균적으로 빠른 속도를 가집니다.
    추가적인 메모리 공간을 필요로 하지 않습니다.
    불안정한 정렬 알고리즘에 속하지 않으며, 원소의 순서를 유지합니다.
  • 단점:
    최악의 경우에는 시간 복잡도가 크게 증가할 수 있습니다.
    이미 정렬된 배열이나 거의 정렬된 배열의 경우에는 효율성이 떨어질 수 있습니다.
    재귀 호출을 사용하기 때문에 호출 스택의 크기가 커질 수 있습니다.

CISC와 RISC의 차이에 대해 설명해주세요

CISC (Complex Instruction Set Computer)

CISC란 연산에 처리되는 복잡한 명령어 집합을 수백 개 이상 탑재하고 있는 프로세서이다. 인텔 계열의 모든 프로세서는 CISC 프로세서이다. CISC는 다음과 같은 특징을 갖는다.

  1. 복잡하고 기능이 많은 명령어로 구성된 프로세서
  2. 복합 명령을 가짐으로써 하위 호환성을 확보
  3. 트랜지스터 집적에 있어 효율성이 떨어짐
  4. 전력 소모가 큼
  5. 속도가 느리고 가격이 비쌈
  6. 호환성이 절대적으로 필요한 PC 환경에 사용
  7. 명령어 해석에 필요한 회로가 복잡해 병렬 처리가 쉽지 않음

RISC (Reduced Instruction Set Computer)

RISC란 적은 수의 명령어를 수행하도록 설계된 마이크로프로세서이다. 복잡한 명령어를 제거하여 사용빈도가 높은 명령어 위주로 처리 속도를 향상한 프로세서이다. 컴퓨터의 실행 속도를 높이기 위해 복잡한 처리는 소프트웨어에게 맡기는 방법을 채택함. ARM 계열의 프로세서가 RISC 프로세서이다. RISC는 다음과 같은 특징을 갖는다.

  1. CPU의 명령어를 최소화하여 단순하게 제작된 프로세서
  2. 효율적이고 특화된 CPU 구조
  3. 하드웨어가 간단한 대신 소프트웨어가 복잡하고 크기가 커짐(컴파일러의 최적화가 요구됨)
  4. 하위 호환을 위해 에뮬레이션 방식을 채택, 호환성 부족
  5. 전력 소모가 적음
  6. 속도가 빠르고 가격이 저렴
  7. 용도에 최적화가 요구되는 환경에 사용
  8. 명령어의 길이가 같기 때문에 병렬 처리가 용이함

정리

두 방식은 서로 가지는 특징이 있기 때문에 누가 더 빠르다 할 수 없다.
최근에는 기존의 CISC방식은 RISC 방식의 특징을 도입하고 RISC 방식은 CISC방식의 특징을 도입하기 때문에
어떤 프로세서가 CISC방식이다 RISC방식이다를 명확하게 말할 수 없다.

참고로 내가 쓰고 있는 m2 맥북 air 은 ARM 프로세서(RISC)를 중심으로 설계된 실리콘칩 cpu다

프록시에 대해 설명해주세요

프록시는 "대리"의 의미로 인터넷과 관련하여 쓰이는 경우 빠른 액세스나 안전한 통신등을 확보하기 위한 중계서버를 "프록시 서버"라고 한다.
클라이언트와 web서버의 중간에 위치하고 있어, 대신 통신을 받아 주는 것이 프록시 서버이다.

프록시의 종류는 두가지가 있다

포워드 프록시

  • 클라이언트가 포워드 프록시에게 요청을 보내면, 프록시 서버는 해당 요청을 받아서 서버로 전달합니다. 클라이언트는 직접 서버와 통신하지 않고 포워드 프록시를 겅유하여 통신하게 됨.
  • 클라이언트의 요청을 필터링하고 보안 정책을 적용할 수 있으며, 캐싱을 통해 서버 응답 시간을 단축시키고 네트워크 대역폭을 절약할 수 있습니다.

리버스 프록시

  • 리버스 프록시는 주로 로드 밸런싱, SSL 종단 강화, 보안, 캐싱 등을 위해 사용됩니다. 클라이언트 요청을 여러 대의 서버로 분산시키는 로드 밸런싱 기능을 제공하며, SSL 암호화를 해제하거나 인증서를 관리하여 서버 보안을 강화할 수 있습니다. 또한, 캐싱을 통해 서버 부하를 줄이고 응답 속도를 향상시킬 수 있습니다.

참고 https://engineer-mole.tistory.com/288

Stack2개로 Queue를 구현해주세요.

Stack의 경우 LIFO로 값을 꺼내려하면 마지막에 들어온 요소를 반환하게 된다
Queue의 경우 FIFO로 값을 꺼내려하면 처음 들어온 요소가 반환하게 된다

이와 같은 성질을 이용하여
[1,2,3,4,5] 라는 값이 존재할때 Queue 같은 경우 값을 하나 꺼내게되면 처음들어온 5가 반환되어야한다.
이러한 형태를 두개의 Stack을 이용해 구현하려면

  1. 해당 값을 우선 stack1에 쌓는다. [1,2,3,4,5]
  2. 이 값들을 다시 stack2에 쌓는다(LIFO로 마지막에 들어온 1부터 5까지의 순번으로 쌓는다). [5,4,3,2,1]
  3. 그리고 stack2의 있는 값들을 peek하게 된다면 마지막에 들어온 5를 반환하게 된다.

완전 큐같다!

HashMap과 HashTable의 차이점에 대해 설명해주세요.

두 가지 자료구조 모두 자바의 Map 인터페이스를 상속받아 구현되어 데이터를 키와 값으로 관리하는 자료구조이다.

HashMap

  • key와 value에 null을 허용한다.
  • 동기화를 보장하지 않는다.

HashMap은 thread-safe하지 않아, 싱글 쓰레드 환경 에서 사용하는 게 좋다. 한편, 동기화 처리를 하지 않기 때문에 데이터를 탐색하는 속도가 빠르다.

HashTable

  • key와 value에 null을 허용하지 않는다.
  • 동기화를 보장한다.

HashTable은 thread-safe하기 때문에, 멀티 쓰레드 환경에서 사용할 수 있다. 이는 데이터를 다루는 메소드에 synchronized 키워드가 붙어 있다. 해당 키워드는 메소드를 호출하기 전에 쓰레드간 동기화 락을 건다. 그래서 멀티 쓰레드 환경에서도 데이터의 무결성을 부장한다. 그러나, 쓰레드간 동기화락은 매우 느린 동작이라는 단점이 있다.

정리

싱글 스레드 환경에서는 HashMap을 쓰고 멀티 쓰레드 환경이라면 HashTable이 아닌 ConcurrentHashMap을 쓰자ConcurrentHashMap은 Entry에 대해서만 락을 걸어 HashTable보다 데이터를 다루는 속도가 빠르다.
(HashTable은 쓰레드간의 동기화 락을 걸고, ConcurrentHashMap은 Entry, 즉 어떤 값에 락을 검.)

RDBMS와 Nosql의 차이점을 설명해주세요.

RDBMS

Relational DataBase Managment System

  • 관계형 데이터 베이스 관리 시스템이다.
  • 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태(행, 열)로 표현하는 데이터 베이스
  • 다른 테이블들과 관계를 맺고 모여있는 집합체이다.
  • 관계를 나타내기 위해 외래 키(foreign key)를 사용한 테이블 간 Join 가능

NoSQL

Not Only SQL

  • RDBMS와 달리 테이블 간 관계를 정의하지 않는다.
  • 빅데이터의 등장으로 인한 트래픽이 기하급수적으로 증가함에 따라 RDBMS의 단점인 성능을 향상시키기 위해 등장함.
  • NoSQL은 Key-Value, Document, Wide Column, Graph 등과 같은 형식으로 데이터를 저장할 수 있다.
    (몽고디비는 Document Database)

언제사용?

RDBMS는 데이터 구조, 스카마가 명확하고 중복된 데이터가 없으며 update가 잦은 시스템에서 사용 (전통적인 웹 어플리케이션)
NoSQL은 정제되지 않은 데이터나 대량의 데이터 및 데이터 update가 자주 일어나지 않는경우에 사용 (실시간 로그 처리)

URL과 URI의 차이에 대해 설명해주세요.

URL

Uniform Resource Identifier

네트워크 상에서 통합 자원(리소스)의 위치를 나타내기 위한 규약
웹 사이트 주소(www.google.com) + 컴퓨터 네트워크 상의 자원(https)

URI

Uniform Resource Locator

통합 자원 식별자로써 인터넷상의 리소스 자원 자체를 식별하는 고유한 문자열(www.google.com)

URL과 URI의 차이점

URL = 식별자 + 위치, URI 식별자

  • www.google.com은 URI 이다. 리소스의 이름만 나타내기 때문
  • https://www.google.com은 URL이다. 리소스의 이름과 더불어 어떻게 도달할 수 있는지 프로토콜이 함께 있기 때문.
  • URL은 URI이지만 URI가 URL인 것은 아님. (URI가 좀 더 포괄적인 개념)

image

cpu 스케쥴링 알고리즘의 종류와 각각에 대해 아는대로 설명해주세요.

운영체제는 CPU 스케줄링을 통해 Ready Queue에 있는 어떤 프로세스에 CPU를 할당할 것인지를 결정한다.

  • 선입 선처리 스케쥴링 : CPU를 먼처 요청하는 프로세스가 CPU를 먼저 할당받는다.
  • 최단 작업 우선 스케줄링 : CPU가 이용 가능해지면, 가능 작은 next CPU burst를 가진 프로세스에 CPU를 할당한다.
  • 라운드 로빈 스케줄링 : 각 프로세스에 일정시간을 할당하고, 할당된 시간이 지나면 그 프로세스는 잠시 보류한 뒤 다른 프로세스에게 기회를 주는 방식.
  • 우선순위 스케줄링 : CPU를 가장 높은 우선순위를 가진 프로세스에 할당한다

페이징과 세그멘테이션을 사용하는 이유와 차이점에 대해 알려주세요

두 기법 모두 운영체제에서 메모리를 더 효율적으로 관리하고 프로세스 간의 충돌을 방지하기 위해 사용되는 기법이다.

페이징

  • 프로세스의 주소 공간을 고정된 사이즈의 페이지 단위로 나누어 물리적 메모리에 불연속적으로 할당하는 방식
  • 메모리는 Frame이라는 고정크기로 분할되고, 프로세스는 Page라는 고정크기로 분할됨
  • 페이지와 프레임은 크기가 같음
  • 페이지와 프레임을 대응시키는 Page mapping 과정이 필요하며 paging table을 생성해야 함
  • 연속적이지 않은 공간도 활용할 수 있기 때문에 외부 단편화 문제 해결
  • 페이지 테이블에는 각 페이지 번호와 해당 페이지가 할당된 프레임의 시작 물리 주소를 저장

! 프로세스의 크기가 페이지 크기의 배수가 아닐 경우 마지막 페이지에 내부 단편화가 발생하고 페이지의 크기가 클수록 내부 단편화가 커짐
(페이지 단위를 작게하면 내부 단편화 문제도 해결할 수 있겠지만 page mapping 과정이 많아지므로 효율이 떨어짐)

세그멘테이션

  • 프로세스를 서로 크기가 다른 논리적인 블록 단위인 세그먼트로 분할하여 메모리에 할당
  • 각 세그먼트는 연속적인 공간에 저장
  • 세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때 빈 공간을 찾아 할당하는 기법
  • 페이징과 마찬가지로 mapping을 위한 segment table 필요

! 프로세스가 필요한 메모리 공간만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하면 생기는 외부 단편화 문제가 발생할 수 있음

차이점

  • paging은 고정 크기를 가짐
  • segmentation은 가변 크기를 가짐
  • paging은 내부 단편화 발생 가능, segmentation은 외부 단편화 발생 가능

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.