일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 개발
- IT
- 컴퓨터과학
- 컴퓨터공학
- 공채
- 신입
- Effective Java
- 스프링
- 운영체제
- Public
- spring
- 자바
- 메모리
- 프로그래밍
- 스터디
- 깃허브
- 디지털
- 알고리즘
- 이펙티브 자바
- 세마포어
- 뮤텍스
- 정보처리기사
- github
- 신입사원
- package-private
- 깃
- OS
- 우리카드
- CS
- java
- Today
- Total
목록CS스터디 (20)
주니어 개발자 성장기
개요 '식사하는 철학자 문제'라고 하며 철학자는 1. 밥먹기 2. 생각하기 2가지 일을 할 수 있다. 반면 젓가락의 갯수(공유자원)는 제한되어 있다. 이 문제의 해결법을 코드로 살펴보자. Solution A Initialization /* 최초 값은 모두 1이다. */ semaphore chopstick[5]; 철학자는 5명으로 가정하고 젓가락은 5개가 있다고 가정하자. Philosopher i(i번째 철학자) do { //왼쪽, 오른쪽 젓가락을 잡는 연산 P(chopstick[i]); P(chopstick[(i + 1) % 5]); //식사 eat(); //왼쪽, 오른쪽 젓가락 놓는 연산 V(chopstick[i]); V(chopstick[(i + 1) % 5]); think(); } while(1);..
문제 상황 주로 데이터베이스에서 발생하는 문제이다. 한 프로세스가 DB에 Write 중일 때 다른 프로세스가 접근하면 안된다. Read는 동시에 여럿이 해도 된다. 해결법 Writer가 DB에 접근 허가를 아직 얻지 못한 상태에서는 모든 대기중인 Reader들을 다 DB에 접근하게 해준다. Writer는 대기 중인 Reader가 하나도 없을 때 DB 접근이 허용된다. 일단 Writer가 DB에 접근 중이라면 Reader들은 접근이 금지된다. Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다. 여기서 Shared Data는? DB 자체 readcount - 현재 DB에 접근 중인 Reader의 수 두 가지 동기화 변수(세마포어) Mutex 공유 변수 readcount를 접근하는 코드(cri..
Bounded Buffer Problem (유한 버퍼 문제) Producer-Consumer Problem(생산자-소비자 문제) 이라고도 한다. Producer 데이터를 버퍼에 삽입 Consumer 데이터를 버퍼에서 제거 여기서 Shared Data는? 버퍼 자체 버퍼 조작 변수(empty와 full 버퍼의 시작 위치) 문제의 원인 다수의 Producer / Consumer가 버퍼에 데이터를 삽입, 제거할 수 있기 때문이다. 버퍼 자체의 경쟁 상황 발생 버퍼가 가득 차거나 빌 경우 추가/삭제가 불가능함을 알아야 한다. 두 가지 세마포어가 필요 Mutual exclusion shared data의 동기화 때문에 Binary semaphore가 필요 (2번 스텝) 다수의 주체가 동시에 버퍼를 변경할 수 없도..
싱글톤 패턴 구현 스프링의 도움 없이 순수 자바로 싱글톤 패턴을 구현해보자. 영문 위키피디아에 따르면 구현 절차는 간단하게 다음과 같다. 다른 객체에 의해서 초기화되는 것을 방지하기 위해 모든 생성자를 private 으로 선언한다. 인스턴스에 대한 참조(reference)를 반환하는 정적(static) 메서드를 제공한다. 위의 절차에 따라 구현하는 방법이 크게 5가지가 있다. 결론부터 말하자면, 가장 바람직한 모델은 5번 Bill Pugh 구현과 Enum 구현이다. 그럼 차례대로 직접 구현해보자. 1. Eager Initialization Eager Initialization은 클래스 로딩 단계에서 인스턴스를 생성하는 방법이다. // 싱글톤 객체 public class EagerSingletonServ..
디자인 패턴이란? In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. 출처: 위키피디아 소프트웨어 설계 중 특정한 상황에서 흔히 일어나는 문제들에 대한 일반적이고 재사용 가능한 해결책이라고 할 수 있다. 수천가지의 디자인 패턴들이 존재하지만 제일 유명한 것은 "Gang of Four" design patterns 에 나온 23가지 디자인 패턴들이다. 싱글톤 패턴 싱글톤 패턴은 하나의 클래스가 오직 하나의 인스턴스만을 갖는 것을 보장하는 생성 디자인 패턴(creational de..
트리란? 계층적 구조를 나타내는 자료구조로, 부모-자식 관계의 노드들의 집합 대용량 데이터를 저장하기 용이한 자료구조다. Why? 탐색이 아주 빠르기 때문이다. 선형 자료구조와 달리 탐색의 시간 복잡도를 O(log N)로 줄일 수 있다. (단, 삽입 삭제의 최소 O(log N)의 시간 복잡도를 갖는다.) 트리의 구성요소 Node Edge Sibling Subtree Root node Leaf Node(Terminal Node) Level Height, Degree 이진 트리(Binary Tree) 모든 노드가 최대 2개의 서브 트리를 갖는 트리 모든 노드의 차수가 2 이하인 트리 이진트리의 서브트리는 이진트리라는 재귀적 정의를 갖고 있다. 특징 노드 개수가 n이면 엣지의 개수는 n-1 높이가 h인 이진 ..