📒 Tech Note

    [C#] 컴파일러와 인터프리터

    [C#] 컴파일러와 인터프리터

    기술 면접 단골 질문 중에 하나죠. 프로그래밍 언어 뭐 써봤나요? 어떤 종류인지 혹시 아시나요? 여러개 종류별로 비교해서 설명해주세요. 프로그래밍 언어는 실행 방식에 따라서 크게 두가지로 분류합니다. 하나는 컴파일러 언어, 다른 하나는 인터프리터 언어 라고 합니다. 컴파일러 언어로 코드를 작성하면 소스 파일을 컴파일해서 바로 컴퓨터가 이해할 수 있는 기계어로 코드를 작성해서 실행 파일로 만듭니다. CPU가 이 실행 파일을 바로 작동시키기 때문에 속도가 빠른 장점이 있는 반면 운영체제가 다르면 호환되지 않을 확률이 높습니다. 우리가 알고 있는 예시로 C++, Visual C++, Object C, Java, C 등이 있습니다. 인터프리터 언어는 컴파일러 언어와 달리 소스 파일을 실행하면 해석 엔진 프로그램..

    [LeetCode] 153. Find Minimum in Rotated Sorted Array

    [LeetCode] 153. Find Minimum in Rotated Sorted Array

    *알고리즘 스터디에 참여하면서 Blind 75 LeetCode Questions 목록에 있는 문제를 풀이합니다. https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/ Find Minimum in Rotated Sorted Array - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 해설 오름차순으로 정렬된 길이가 n인 배열이 1번에서 n번 회전한다고 가정합니다. 예를 들어 배열 nums =..

    [LeetCode] 152. Maximum Product Array

    [LeetCode] 152. Maximum Product Array

    *알고리즘 스터디에 참여하면서 Blind 75 LeetCode Questions 목록에 있는 문제를 풀이합니다. https://leetcode.com/problems/maximum-product-subarray/ Maximum Product Subarray - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 해설 숫자 배열이 주어지고, 연속되고 빈 배열이 아닌 부분 배열 중 곱의 값이 가장 큰 것을 찾아 return 한다. 앞서 해설했던 53. Maximum..

    [번역] 14가지 패턴으로 코딩 인터뷰 완전 정복하기

    [번역] 14가지 패턴으로 코딩 인터뷰 완전 정복하기

    *이번 포스팅은 "14 Patterns to Ace Any Coding Interview Question" 을 번역한 내용입니다. 코딩 인터뷰를 준비하는 과정은 많은 개발자들이 불안에 떨게 만듭니다. 엄청난 양의 내용을 커버해야하고, 개발자가 실제 업무하는 일과는 무관하게 느껴지기 때문에 스트레스를 가중합니다. 이런 이유 때문에 개발자들 사이에서는 수백가지의 인터뷰 문제들을 LeetCode같은 사이트를 이용해서 공부하는게 일상이 되었습니다. 불안한 개발자들이 인터뷰 전에 가장 많이하는 질문은 보통 내가 연습 문제 충분히 많이 풀었나? 더 해야하나? 입니다. 이런 이유 때문에 이번 글을 통해서 각 질문들의 기저에 깔려있는 패턴들을 다뤄보려고 합니다. ⎯ LeetCode에서 수백개의 문제를 풀면서 고통받지..

    [Python] GIL, Global Interpreter Lock이란?

    [Python] GIL, Global Interpreter Lock이란?

    안녕하세요, 개발자 하댑입니다. 오늘은 파이썬 멀티스레드를 사용하려고 한다면 알아야하는 GIL에 대해 알아보겠습니다. 파이썬의 경우 단순히 멀티스레딩을 코드로 구현해서 테스팅을 해보면 멀티스레딩의 연산 속도가 성능이 나쁜 것을 확인할 수 있습니다. 이런 결과가 나오는 이유는 바로 CPython Global Interpreter Lock, 즉 GIL이 적용되기 때문입니다. Global Interpreter Lock, GIL이 뭔데? Python Wiki에서는 다음과 같이 설명합니다. CPython에서 GIL은 파이썬 코드(bytecode)를 실행할 때에 여러 스레드를 사용할 경우, 단 하나의 스레드만 파이썬 객체에 접근할 수 있도록 제한하는 mutex 이다. 그리고 이 lock이 필요한 이유는 CPytho..

    [LeetCode] 53. Maximum Subarray

    [LeetCode] 53. Maximum Subarray

    *알고리즘 스터디에 참여하면서 Blind 75 LeetCode Questions 목록에 있는 문제를 풀이합니다. https://leetcode.com/problems/maximum-subarray/ Maximum Subarray - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제 해설 입력 값으로 nums 라는 배열이 들어오고, 배열에는 최소 하나의 정수가 존재한다. 배열 원소들 중 연속되는 subarray의 합이 최대가 되는 값을 찾아 return 해야 한..

    [운영체제] IPC(Inter-Process Communication, 프로세스 간 통신)란?

    [운영체제] IPC(Inter-Process Communication, 프로세스 간 통신)란?

    IPC(Inter-Process Communication)란? 프로세스 간의 통신을 위한 메커니즘을 의미합니다. 프로세스는 원래 독립적으로 존재하는데, 상황에 따라서 프로세스끼리 협력해야하는 경우가 있습니다. 이렇게 프로세스 간의 통신을 커널 영역에서 IPC라는 내부 프로세스간 통신을 제공하고, 이를 통해 프로세스끼리 자원과 데이터 공유할 수 있습니다. 프로세스 개념에 대한 자세한 내용은 다음 글을 참고해주세요. [운영체제] 프로세스란? 프로세스(Process)란? 프로세스는 실행중인 프로그램을 뜻합니다. 여기서 프로그램은 명령어들의 모음을 포함하는 디스크에 저장된 파일을 의미합니다. 프로그램이 실행되면, 프로그램의 명령어 metleeha.tistory.com IPC가 필요한 이유 정보 공유: 여러 사용..

    [운영체제] 프로세스란?

    [운영체제] 프로세스란?

    프로세스(Process)란? 프로세스는 실행중인 프로그램을 뜻합니다. 여기서 프로그램은 명령어들의 모음을 포함하는 디스크에 저장된 파일을 의미합니다. 프로그램이 실행되면, 프로그램의 명령어들과 데이터가 메모리에 쌓이고 이를 프로세스라고 정의합니다. 프로세스의 메모리 구조 각 프로세스는 고유의 메모리 주소를 가지고 있다. Code 영역 (Text 영역): 프로그램을 실행시키는 명령어들이 위치하는 공간 Data 영역: 전역변수, static 변수들이 위치하는 공간 Heap 영역: 동적할당을 위한 메모리 공간 Stack 영역: 지역변수, 파라미터(함수에 전달되는 인자), 주소값 등이 위치하는 공간 프로세스 상태 (Process State) 프로세스가 실행되면 프로세스의 상태가 변화한다. New(생성): 프로..

    [JS] 메시지 큐와 이벤트 루프 (Message Queue and Event Loop)

    [JS] 메시지 큐와 이벤트 루프 (Message Queue and Event Loop)

    자바스크립트의 특징 자바스크립트는 기본적으로 싱글 쓰레드 기반 언어이기 때문에 호출 스택이 하나이고, 한번에 한 가지 일만 처리할 수 있습니다. 자바스크립트를 작동시키는 엔진은 메모리힙(Memory Heap)과 콜스택(CallStack)을 동작시킵니다. 하지만 자바스크립트로 AJAX처리나 setTimeOut, addEventListener 등 함수를 이용해 비동기적 작업 처리가 가능합니다. 이런 작업이 가능한 이유는 자바스크립트 런타임이 메모리힙과 스택으로만 이뤄진 것이 아니라 브라우저에서 제공하는 Web API와 Event Queue와 Event Loop라는 것이 존재하기 때문입니다. 메시지 큐 메시지 큐는 자료구조 큐(Queue) 기반으로 구서오디어 있습니다. LIFO(Last in First Out..

    [운영체제] 동기와 비동기, 블로킹과 논블로킹

    [운영체제] 동기와 비동기, 블로킹과 논블로킹

    동기(Synchronous)와 비동기(Asynchronous) 동기/ 비동기는 주로 어플리게이션에서 다뤄지는 개념이며, 다음 작업이 요청되는 시간과 관련이 있다. 동기(Synchronous) 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청된다. 함수를 호출하는 곳에서 호출되는 함수가 결과를 반환할 때까지 기다린다. 작업 완료 여부를 계속해서 확인한다. 비동기(Asynchronous) 현재 작업의 응답이 끝나지 않은 상태에서 다음 작업이 요청된다. 함수를 호출하는 곳에서 결과를 기다리지 않고, 다른 함수(callback)에서 결과를 처리한다. 작업 완료 여부를 확인하지 않는다. 자바스크립트는 Single Thread 기반의 언어로 한번에 한 명력씩만 수행된다. 따라서 시간이 많이 걸리는 작업을 진행하는..