ASCII, Unicode

인코딩이란, 사용자가 입력한 문자나 기호를 컴퓨터가 이용할 수 있는 신호로 만드는 것을 말한다. 아스키코드(American Standard Code for Information Interchange) 가장 처음 만들어진 인코딩방식이다. 숫자와 문자를 매칭시키는 국제적 규칙이다. 패리티 비트를 제외하고, 128개의 문자조합을 제공하는 7비트 부호로 구성된다.(패리티 비트는 데이터의 에러를 탐지하기 위해 사용한다. 일곱자리의 이진수에서 ‘1’이 홀수개라면 끝에 1을, ‘1’이 짝수개라면 끝에 0을 덧붙인다. 아주 정밀하진 않지만 패리티 비트를 이용해 어느 정도의 에러를 탐지할 수 있다.) 아스키코드만으로는 영어만 표현 가능하며 각 나라별 언어를 표현할 수 없다는 단점이 있다.

스핀락 vs 뮤텍스 vs 세마포어 vs 모니터

동기화(Synchronization)란 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 말한다. 상호 배제(Mutual Exclusion)란 동시 프로그래밍에서 공유 불가능한 자원의 동시 사용을 피하기 위해, 즉 동기화를 위해 사용되는 알고리즘을 말한다. 상호 배제는 락(Lock)을 사용해서 달성할 수 있다. 1 2 3 4 5 6 do { acquire lock // 여러 프로세스/스레드가 lock을 획득하기 위해 경합 [critical section] // lock을 획득한 프로세스/스레드만 임계 영역에서 실행함 release lock // 작업을 끝내고, lock을 반환함 remainder section } while(true) 스핀락(Spinlock) 1 2 3 4 5 6 7 8 9 10 11 12 13 volatile int lock = 0; // global void critical() { while(test_and_set(&lock) == 1); // lock을 획득하려는 시도를 함 [.

블로킹, 논블로킹

블로킹(Blocking), 논블로킹(Non-blocking)은 프로그램의 제어 흐름과 작업 처리 방식에 관련된 개념이다. 블로킹/논블로킹은 작업을 요청했을 때, 작업이 즉시 완료되지 않더라도 제어권을 넘겨주는지 여부로 구분한다. 블로킹(Blocking) 개념: 작업을 요청한 후, 그 작업이 완료될 때까지 제어권을 반환하지 않고 기다리는 방식. 특징 작업 스레드가 종료될 때가지 요청을 한 스레드는 차단된다. 이러한 단점을 보완하기 위해 멀티 쓰레딩 기법을 통해 추가 쓰레드를 할당할 수 있다. CPU 대비 많은 수의 쓰레드를 사용하는 것은 비효율적이다. 컨텍스트 스위칭으로 인한 쓰레드 전환 비용 발생 메모리 사용에 있어서 오버헤드 발생 쓰레드 풀에서의 응답 지연 문제 발생 예시 전통적인 파일 I/O나 네트워크 I/O 작업.

추상클래스 vs 인터페이스

추상클래스 자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 한다. 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 해준다. 추상 클래스는 이를 상속할 각 객체들의 공통점을 찾아 추상화시켜 놓은 것으로, 상속 관계를 타고 올라갔을 때 같은 부모 클래스를 상속하며 부모 클래스가 가진 기능들을 구현해야 할 경우 사용한다. 인터페이스 인터페이스는 상속 관계를 타고 올라갔을 때 다른 조상 클래스를 상속하더라도, 같은 기능이 필요할 경우 사용한다.

자바 제네릭(Generics)

제네릭이란 JDK 1.5부터 도입한 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. 제네릭이 갖는 의미는 ‘일반화’이다. 그리고 자바에서 그 일반화의 대상은 자료형이다. 용어 Box<T> 클래스에서 사용된 T를 가리켜 ‘타입 매개변수(Type Parameter)’라 한다. 메소드의 매개변수와 유사하게 자료형 정보를 인자로 전달받는 형태이기 때문이다. <>안에 전달되는 것을 가리켜 ‘타입 인자(Type Argument)’라 한다. 타입 매개변수 T에 전달되는 인자로 바라보고 그렇게 이름을 지어준 것이다. Box<Apple> aBox = new Box<Apple>(); -> Box<Apple>을 가리켜 ‘매개변수화 타입(Parameterized Type)’이라 한다.

프록시 서버

포워드 프록시(Forward Proxy) 일반적으로, 프록시 서버라고 하면 포워드 프록시를 의미한다. 포워드 프록시란 클라이언트와 인터넷 사이에 프록시가 위치해서 클라이언트 대신 서버에 요청을 보내주는 형태를 말한다. 포워드프록시를 통해 얻는 이점은 다음과 같다. 로컬 네트워크와 인터넷 사이 오가는 트래픽을 제어할 수 있다. 예를 들어 초등학교 안에서 학생들이 부적절한 콘텐츠를 브라우징하는 것을 막기 위해서 포워드 프록시를 사용할 수 있다. 포워드 프록시는 대개 캐싱 기능이 있으므로 어떤 콘텐츠가 빈번하게 사용된다면 월등한 성능 향상을 가져올 수 있다.