전체 글 54

[OS] 동기화 및 Lock 관련 정리

동기화, 경쟁 조건, 임계영역 예시 : 하나의 객체를 두 개의 스레드가 접근할 때 생기는 일 경쟁 조건이 일어날 수 있는 상황을 없애기 위해 동기화를 해야하는데, 동기화를 하기 위해 임계 영역을 지정하고자 한다. 동기화 (Synchronization) 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지 하는 것 경쟁 조건 (Race condition) 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때, 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황 임계 영역 (Critical section) 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 진입해서 실행 가능한 영역 Critical section problem의 해결책이 되기 위한 조건 Mutual exclu..

[OS] Stack & Heap, 프로세스 & 스레드

Stack & Heap Stack 메모리 함수나 메소드가 호출될때 스택 프레임이 스택 메모리에 쌓인다 그 스택 프레임 안에 매개 변수와 지역 변수가 저장됨 Heap 메모리 모든 객체(Object)는 여기에 저장됨 참조 변수 객체의 메모리 주소값을 저장하는 변수 ex) Counter c = new Counter(); 프로세스, 스레드 프로그램 : 컴퓨터가 실행 할 수 있는 명령어의 집합 프로세스 : 컴퓨터에서 실행중인 프로그램 각각의 프로세스는 독립된 메모리 공간을 할당 받음 발전 순서 단일 프로세스 시스템 : CPU 하나에 한 개의 프로세스 동작 CPU 사용률이 좋지 않음 → 여러개 프로그램을 메모리에 올려놓고 동시에 실행! 멀티 프로그래밍 CPU 사용시간이 길어지면 다른 프로세스는 계속 대기 해야함 멀..

[Data Strucutre] 면접 질문 대비

힙 최대값 혹은 최소값을 빠르게 찾기 위한 이진 트리 최소 힙인 경우, 부모는 자식보다 값이 작고 최대 힙인 경우, 부모가 자식보다 값이 크다 힙의 삽입과 삭제는 O(log n) 만큼의 시간 복잡도를 가진다 이진탐색트리 왼쪽 자식은 부모 보다 작고, 오른쪽 자식은 부모보다 큰 이진트리가 이진 탐색 트리 삽입,검색,삭제가 모두 트리의 높이인 O(log n ~ N) 만큼의 시간복잡도를 가짐 시간 복잡도가 O(N)이 되는 상황인 편향된 트리를 방지하기 위해 자가 균형 트리를 사용함 자가 균형 트리 이진 탐색 트리는 시간 복잡도가 트리의 높이에 따라 결정되므로 편향 될경우 효율이 떨어짐 이를 방지하기위해 삽입과 삭제를 개선한 이진탐색트리를 자가균형트리라고 함 AVL 트리 , Red Black 트리가 있음 해시 ..

[Data Structure] Hash Table, Graph 정리

Hash Table Hash는 내부적으로 배열을 사용하여 데이터를 저장하기 때문에 빠른 저장속도를 갖는다 특정한 값을 search 할 때, 고유의 인덱스로 접근하게 되므로 O(1)이다. 그러나 인덱스로 저장되는 key값이 불규칙하다 그러므로 특별한 알고리즘을 사용하여 데이터와 연관된 고유한 숫자를 만들어 이를 인덱스로 사용한다. 그러므로 삽입,삭제(끼어든다는 개념이 없음)에 대해 추가적인 비용이 필요없다 Hash Function (=해시 함수, hash method) 해당 함수에 의해 반환된 데이터의 고유 숫자 값을 hashcode라고 한다 Collision : 서로 다른 두 개의 키가 같은 인덱스로 hashing 되면 같은 곳에 저장할 수 없게 된다. Collision이 일어나지 않은 좋은 hash f..

[Data Structure] Tree 관련 정리

Tree 비선형 자료구조 계층적 관계 (Hierarchical Relationship) 구성요소들 Node(노드) : 트리를 구성하고있는 각각의 요소를 의미한다 Edge(간선) : 트리를 구성하기 위해 노드와 노드를 연결하는 선을 의미한다 Root Node(루트 노드) : 트리구조에서 최상위에 있는 노드를 의미한다 Terminal Node(=leaf Node, 단말 노드) : 하위에 다른 노드가 연결되어있지 않은 노드를 의미한다 Internal Node(내부 노드, 비단말 노드) : 단말 노드를 제외한 모든 노드, 루트 노드를 포함한다. Binary Tree (이진 트리) 루트노드를 중심으로 두 개의 서브 트리로 나뉘어 진다. 나뉘어진 서브 트리도 모두 이진 트리여야한다. 공집합도 이진 트리이다. (=노..

[Data Structure] Array, ArrayList, Stack, Queue

Array vs Array List Array 가장 기본적인 자료구조로 논리적 저장순서와 물리적 저장순서가 동일하다. Index로 element에 접근할 수 있으므로 Big-O(1)에 해당한다. Random Access가 가능하다 삭제 또는 삽입은 시간이 더 걸린다 element에 접근 → 동작 필요 : O(1) + a 두 경우 모두 빈공간 혹은 추가 공간에 대한 shift가 필요하기 때문에 O(n)이 필요 Linked List 삭제와 삽입에 대한 추가 시간 할애를 해결하기 위해 Linked List를 사용한다. 각각 원소들은 자기 자신 다음에 어떤 원소가 오는 지만 기억하고있다. ⇒ 그래서 중간에 끼워넣든 빼든 상관없기때문에 삭제와 삽입이 O(1)이다. 그러나 원하는 위치를 찾기 위해서는 Searchi..

[JAVA 개발 지식] 면접 질문 대비

컴파일 과정에 대해 설명해보라 개발자가 .java파일을 생성한다 build를 한다. java compiler의 javac의 명령어를 통해 바이트코드(.class)를 생성 (Compiler) class loader를 통해 jvm내로 로드 (Interpreter) 실행 엔진을 통해 컴퓨터가 읽을수 있는 기계어로 해석되어 Runtime Data Area에 배치 Runtime Data Area : JVM 메모리 영역 (Heap + Stack + PC 레지스터 등) JVM 메모리 구조 스레드별 : PC register , JVM Stack , Native Method Stack PC 레지스터 : 현재 수행중인 JVM 명령어가 들어가 있고 다음 명령어의 주소를 가지고있다 JVM Stack : 호출된 메소드의 매개변..

[개발 지식] 객체 지향 4대 특징과 설계 원칙

객체지향 프로그래밍 - Object Oriented Programming 현실 세계의 사물과 같이 객체를 만들고, 객체에서 필요한 특징을 뽑아 프로그래밍 수행 4대 특징 추상화(Abstraction) 객체들의 공통적인 특징을 뽑아 이름을 붙이는 것 캡슐화(Encapsulation) 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터 및 기능을 하나로 묶은 것 내부에서 정보 은닉을 통해 내부 결합도는 높이고 외부에서는 결합도를 낮추기 위함 정보를 객체안에 포함시키고, 그 정보에 대한 직접적인 접근은 허용하지 않고, 인터페이스를 통해 외부에서 접근 할 수 있도록 함. ex) 접근 제어자 : public, private 상속(Inheritance) 상위 개념의 특징을 하위 개념이 물려 받음 상위 클래스..

[C++ http 통신] boost/beast 라이브러리 설치 및 사용 방법 (feat.오류 해결을 위해 찾아 떠나는 여행)

C++에서 HTTP 통신 하기가 아주 쉽지않지만 boost 라이브러리를 많이 사용한다고 하여 사용방법을 구글링 하며 찾아보았다. boost 라이브러리 설치 방법 (Window 기준) https://github.com/boostorg/boost , 본 링크에서 boost 라이브러리를 .zip 파일로 다운받아 압축을 해제한다 "bootstrap.bat" 이름의 배치파일을 실행한다. 혹시나 VSCODE로만 컴파일하고자 하였다면 vswhere.exe 파일이 없다고 오류가 날 수 도 있다. 본인은 여러시도를 해보다가 visual studio를 설치하였다.... 그러니 오류 해결 "bootstrap.bat" 로 인해 b2.exe파일이 생성된다. b2.exe파일을 실행시키면 본 라이브러리를 사용할 준비는 되었다. (..

개발/C++ 2022.08.15

[C# - MariaDB] Multi line Insert 함수

DB에 data를 insert할 때, 한번에 insert 해야하는 개수가 적다면 하나씩 하나씩 insert 구문을 작성 후 "ExecuteNonQuery" 메소드를 실행하면 되었다. 그러나 개수가 점점 많아지면 많아질 수록 동작시간이 기하급수적으로 늘었고 주기적으로 Query문을 실행 하는 Timer의 주기 동안에도 Insert 구문이 다 실행되지 않아 DB Connection이 끊기는 등의 오류가 발생하였다. 해당 문제를 해결하기 위해 BulkInsert를 검색하여 찾아보았지만 DataTable로 구현해놓지 않은 과거의 나에게 발목이 잡혀 BulkInsert는 뛰어넘고 다른 방법을 찾던중, Heidi SQL이라는 프로그램에서 "데이터베이스에서 SQL로 내보내기" 기능을 사용하면 아래의 사진과 같이 한 ..

개발/C# 2022.06.25