이론 공부! 12

[LDAP] Lightweight Directory Access Protocol 디렉토리 접근 프로토콜

LDAP(Lightweight Directory Access Protocol) 이란? 분산 디렉터리 서비스에 접근하기 위한 표준 프로토콜 디렉터리 서비스는 계층 구조로 조직화된 데이터를 저장하고 검색하기 위한 서비스를 제공 주로 조직의 사용자, 그룹, 자원과 같은 정보를 관리하기 위해 사용 특징 디렉터리 서비스: 정보를 계층 구조로 저장하여 검색이 용이하도록 함. ou / cn 등의 식별자를 통해 디렉토리 내에서 검색이 용이하도록 함 경량: 단순하고 빠른 성능을 갖춘 프로토콜. LDAP이 경량인 이유 : 단순한 메세지 형식의 프로토콜, TCP/IP 통신이라 데이터 전송에 발생하는 오버헤드가 최소화, 데이터 인덱싱을 통해 검색이 용이해짐 클라이언트-서버 모델: LDAP 클라이언트가 LDAP 서버에게 정보를..

[디자인패턴] 템플릿 메서드 패턴 과 전략 패턴의 비교

새로 입사한 회사에서 프로그래밍 중 제가 템플릿 메서드 패턴과 전략 패턴을 구분 없이 사용하고 있다 라는 피드백을 받았습니다. 사실 디자인 패턴에 대해 공부를 해보지 않았기 때문에 이 기회를 삼아 한번 정리해보고자 합니다. 제가 회사에서 보았던 코드는 아래와 같이 입력된 값에 의해서 구현체가 달라지는 상황이 었습니다. 아래 코드를 보고 무슨 패턴이지? 라고 생각이 드신다면 이 글을 보시며 함께 공부하면 좋겠습니다! public class Main { public static void main(String[] args) { String input = "a"; Strategy strategy; if (input.equals("a")) { strategy = new StrategyClass1(); } else..

[네트워크] OSI 4 Layer에 따른 각 계층 정리

OSI 7 Layer Application Presentation Session Transport Network Data Link Physical L7 - 응용계층 대표적인 프로토콜 : HTTP, DHCP, SMTP, FTP DNS, 소켓 프로그래밍 DNS (Domain Name Serive) 거대한 분산 디비 DNS Query flow : 컴퓨터 - Local DNS - (1.Root DNS // 2. TLD DNS // 3.Authoratative DNS) L4 - 전송 계층 Port 관련 : TCP(Transmission Control Protocol) , UDP(User Datagram Protocol) End to End Connections and Reliability TCP, UDP form..

[OS] 면접 질문 대비

운영체제란? 시스템의 자원과 동작을 관리하는 소프트웨어 프로세스, 저장장치, 네트워킹, 사용자, 하드웨어를 관리 메모리 구조 Code : 실행할 프로그램의 코드 Data : 전역 변수, 정적 변수 할당 Stack : 지역 변수, 매개 변수 (컴파일 타임에 크기가 결정됨) Heap : 사용자의 데이터 동적 할당 (런타임에 크기가 결정됨) 프로세스, 스레드 프로세스 : 실행중인 프로그램 (= 여러개의 스레드로 구성된 실행체) 독립된 영역이므로 메모리와 CPU를 프로세스 마다 할당 받음 스레드 : 프로세스 안의 실행 단위 프로세스 안에서 메모리와 CPU를 공유해서 사용한다 CPU 스케쥴러 ready queue에 있는 프로세스에 대해 CPU 할당 받는 방법 비선점 스케쥴링 (순서를 뺏지 않음) FCFS(Fisr..

[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..