본문 바로가기

기술면접12

운영체제 프로세스와 스레드의 차이프로세스는 실행중인 프로그램을 뜻합니다. 스택, 힙, 데이터, 코드로 이루어져있고 각 프로세스들은 이 자원을 공유하지 않는다. 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.그리고 스레드는 프로세스의 실행의 단위입니다. 프로세스 내에서 스택만 할당받고, 그 이외의 메모리 영역을 다른 스레드와 공유하기 때문에 다른 스레드의 실행 결과를 즉시 확인할 수 있습니다. 멀티 프로세스와 멀티 스레드의 특징멀티 프로세스는 프로세스들 간의 자원을 공유하지 않습니다. 그렇기 때문에 차지하는 메모리가 멀티 스레드에 비해 크지만, 한 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 미치지 않는다는 특징이 있습니다.멀티 스레드는 스택 외에 다른 자원들을 다른 스레드와 공유합니다. 그렇기 때문에.. 2024. 7. 3.
동기와 비동기 / Deadlock 동기/비동기 : 요청한 작업에 대해 완료여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점 블로킹/논블로킹: 단어 그대로 현재 작업이 block 되느냐, 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점 보통 비동기 특징을 성능과 연관지어 말한다. 왜냐하면 요청한 작업에 대해 완료여부를 신경쓰지 않고 자신의 그 다음 작업을 수행한다는 것은, I/O 작업과 같은 느린 작업이 발생할 때, 기다리지 않고 다른 작업을 처리하면서 동시에 처리하여 멀티 작업을 진행할 수 있기 떄문이다. 이는 전반적인 시스템 성능 향상에 도움을 줄 수 있다. 데드락 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태. '교착상태'라고도 하며 시스템적으로 한정된 자원을 여러곳에서 사용하려고 할 때 발생한다... 2024. 4. 22.
Promise, asyc/await, Hoisting Promise 자바스크립트 프로미스는 비동기 프로그래밍의 근간이 되는 기법 중 하나이다. 프로미스를 사용하면 콜백 함수를 대체하고, 비동기 흐름을 쉽게 제어할 수 있다. 프로미스 객체는 비동기 작업의 최종완료 또는 실패를 나타내는 Array 나 Object처럼 독자적인 객체라고 보면 된다. 비동기 작업이 끝날 때까지 결과를 기다리는것이 아니라, 결과를 제공하겠다는 '약속'을 반환한다는 의미에서 Promise라 명명 지어졌다고 한다. 비동기는 다같이 땅 해서 달리는거 동기는 릴레이 달리기. 바톤을 넘겨줘야 코드 실행가능~~ async/await Hoisting 2024. 4. 17.
Array & LinkedList / Stack & Queue Array와 LinkedList 배열과 링크드리스트는 데이터를 저장하고 관리하는데 사용되는 두 가지 기본적인 자료구조이다. 배열 연속된 메모리 공간에 데이터를 저장한다. 인덱스를 사용해 원소에 빠르게 접근할 수 있다. 고정된 크기를 가지며, 크기변경이 어렵다. 미리 할당된 메모리 크기를 초과하면 새로운 메모리 공간을 할당하고 데이터를 복사해야합니다. 원소를 삽입하거나 삭제할때, 원소들을 이동시켜야 하므로 시간이 오래 걸릴 수 있습니다. 메모리 사용이 효율적이다. 각 원소는 인덱스로 접근되며, 추가적인 메모리를 사용하지 않는다. 링크드 리스트 각 노드가 데이터와 다음 노드에 대한 참조포인터를 포함하며, 노드들이 연속되지 않은 메모리 공간에 저장된다. 원소에 접근하기 위해서 리스를 순차적으로 탐색해야 한다... 2024. 4. 15.
[JS] 선택정렬 / 버블정렬 선택정렬 배열에서 최솟값을 찾은 후, 최솟값과 맨앞에 위치한 값과 교체한다. 두번째 회전에서는 맨앞에 위치한 값을 제외한 최솟값을 찾아서 계속 바꿔주는 방법이다. 하나의 원소만 남을때까지 위의 과정을 반복한다. //마지막 숫자는 자동으로 정렬되기때문에 숫자 -1만큼 반복 function selectionSort(arr) { for (let i = 0; i < arr.length - 1; i++) { min = i; for (let j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } if (i !== min) { let swap = arr[min]; arr[min] = arr[i]; arr[i] = swap; } console.l.. 2024. 4. 9.
객체지향 프로그래밍 / 클래스형, 함수형의 차이 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요? 객체 지향 프로그래밍: 컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 객체 지향 프로그래밍의 장, 단점은? 장점 코드 재사용이 용이 남이 만든 클래스를 가져와 이용 가능, 상속을 통해 확장할 수 있다. 유지보수가 쉬움 절차 지향 프로그래밍에서는 코드를 수정할때 일일이 찾아 수정해야 하는 반면 객체 지향 프로그래밍에서는 수정해야 할 부분이 클래스 내부에 멤버 변수 혹은 메서드로 존재하기 때문에 해당 부분만 수정하면 된다. 대형 프로젝트에 적합 클래스 단위로 모듈화 시켜서 개발할 수 있으므로 대형 프로젝.. 2024. 4. 5.
http, https / OSI 7계층 http, https 의 차이점 HTTP(hyperText Transfer Protocol)의 약자로 웹 상에서 웹 서버 및 웹브라우저 상호간의 데이터 전송을 위한 응용계층 프로토콜을 의미한다. 과거에는 www상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용되었다. 현재에는 이미지, 비디오, 음성 등 거의 모든 형식의 데이터를 전송할 수 있다. http는 기본적으로 통신규약임. 사용자가 클라이언트, 즉 브라우저 등으로 서버에 요청을 보내면 클라이언트의 요청을 받은 서버는 특정 자원에 대한 정보를 제공하거나 작업을 처리하게 된다. http 요청 메시지와 응답 메시지는 일정한 형식을 갖추어 데이터를 통신하게 된다. 컴퓨터간 상호 이해할수있는 형식인 셈이다. http는 1. 무상태성 2. 비연결성이라는 대.. 2024. 4. 4.
JWT, 토큰인증, OAuth JWT, Refresh, Access Token에 대해서 설명해주세요. 보통 서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다. 토큰 기반 인증 시스템은 클라이언트가 서버에 접속을 하면 서버에서 해당 클라이언트에게 인증되었다는 의미로 토큰을 부여한다. 기존의 세션기반 인증은 서버가 파일이나 데이터베이스에 세션정보를 가지고 있어야하고 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드가 발생한다. 하지만 토큰은 세션과는 달리 서버가 아닌 클라이언트에 저장되기때문에 메모리나 스토리지 등 을 통해 세션을 관리했던 서버의 부담을 줄여준다. JWT(JSON Web Token) 인증에 필요한 정보들을 암호화시킨 JSON 토큰 JWT 기반 인증은 JWT토큰을 HTTP 헤더에 .. 2024. 4. 2.
대용량 트래픽 발생시 대응, ORM 사용시 쿼리가 복잡해진다면? 대용량 트래픽 발생 시 어떻게 대응해야 하나요? 먼저 서버는 왜 터질까? 서버 = 외부로부터 들어오는 요청을 받아 처리해주고 응답을 주는 프로그램이 돌아가는 어떤 컴퓨터 서버 또한 처리속도와 한계가 CPU, 메모리, 저장장치에 영향을 받는다는 말 웹 서버라는 프로세스가 있다면, 그 프로세스 안에는 다수의 요청을 시분할 처리하기 위한 스레드들이 있다. 스레드가 아무리 많아도 결국 task를 처리하는건 cpu이기 때문에 처리속도에는 한계가 있다. 또한 모든 task를 동시에 처리할 수 없기떄문에 결국 task를 큐에 넣어 순차적으로 처리하게 되는데, 이 큐는 메모리에 존재한다. 즉, 요청을 들어오는 족족 큐에 넣다보면 메모리 오버플로우가 날 수 있다는 것이다. 웹 서버는 결국 프로그램인데 메모리 오버플로우가.. 2024. 4. 1.