일단 씻고 나가자
23.04.12 본문
2023. 04. 12 수요일
- 블루레이 디스크란?
: 디지털 데이터를 저장할 수 있도록 개발된 대용량 광디스크의 규격.
기존 CD나 DVD보다 용량이 커 높은 해상도의 화질과 음질을 담을 수 있다.
- 양자 컴퓨터란?
: 반도체를 구성하는 회로의 간격이 10나노미터까지 줄어듦으로 회로 간 상호 간섭을 피할 수 없는 한계를 극복할 수 있는, 양자 역학의 원리를 채용한 컴퓨터.
양자 컴퓨터는 일반 컴퓨터의 비트 대신 큐비트(qubit)를 사용하여, 데이터가 0 혹은 1이 아닌 존재할 수도, 아닐 수도 있는 형태로 계산한다.
- 니블이란?
: nibble. 1byte의 절반인 4bit이다. 2^4 = 16이므로 하나의 십육진수와 일치하여 hex digit이라 불리기도 한다.
- 2의 보수 계산법은?
: 2진수로 표현된 양수 값을 상반된 음수 값(* -1)의 이진수 값을 표현하기 위한 계산법.
계산 방법은 각 bit의 NOT -> +1이다.
예를 들어 0111 (7) 의 경우 각 비트를 모두 NOT한 값은 1000이고, +1 하면 1001이 된다.
- JK 플립플롭이란?
: RS 플립플롭에서 금지된 입력 (11 : set과 reset 동시)을 토글로 바꾸어 동작하도록 만들어진 플립플롭이다. 토글이란 ON, OFF처럼 두 가지의 상태만 존재하는 전환을 의미한다.
RS 에서 00이면 상태가 유지되는 한편 토글을 실행하면 00의 결과에서 반대를 출력한다.
- IPC란?
: Inter Process Communication. 독립된 프로세스 간 통신이 안 되는 것을 해결하기 위해,
커널 영역에서 IPC라는 내부 프로세스 간 통신을 제공한다.
- flag 레지스터란?
: 산술 연산 결과의 상태를 보여주는 flag bit들이 모인 레지스터이다. 상태 플래그와 컨트롤 플래그가 있다.
- 마이크로 연산이란?
: 레지스터에서 또 다른 레지스터, 혹은 레지스터 내부에서 데이터를 조작하는 것.
하나의 클럭 시간 동안 실행되는 기본 동작. (shift, count, clear, load)
- CPU 디자인이란? BUS를 사용하지 않을 시 걸리는 시간과, 버스를 구성하는 방법?
: CPU 내에서 디바이스들 간의 상호 연결 방법. 직접 연결 시 장치 수의 제곱 시간복잡도가 나오며, 버스를 사용 시 효율이 좋아짐.
버스 구성 방법으로는 멀티 플렉서(MUX)와 상태 버스 버퍼가 있는데,
멀티 플렉서는 스위치로 원하는 위치의 레지스터의 데이터를 받을 수 있으며
상태 버스 버퍼는 디코더를 통하여 신호는 항상 오지만 켜고 끔으로 enable 값을 처리하는 데에 차이가 있다.
https://afterdawncoding.tistory.com/23
- 비트 연산 6개 설명?
: Logical Shift Left/Right // 별다른 처리 없이 한 칸씩만 shift. 나머진 0.
Arithmetic Shift Left/Right // Left – 오른쪽 끝 0으로. Right – 왼쪽 끝 부호와 동일.
ROtation Left/Right // 마지막 혹은 처음 비트를 끝에 옮김.
- 마이크로 명령어 5가지 모드?
- 시리얼 통신이란?
: Serial communication interface. 데이터 송수신에는 직렬, 병렬이 있는데, 병렬은 각 비트를 하나씩 나누어 한 번에 보낼 수 있지만 직렬은 한 줄로 한 비트씩 차례차례 보낸다.
이는 키보드의 내용이 레지스터로 옮겨갈 때도 동일하다.
- [Effective Java] Singleton pattern을 유지하는 방법들?
1. public static final 객체 생성, private 생성자
2. private static final 객체 생성, private 생성자, public static getInstance()
3. pirvate static 객체 생성, private 생성자, public static synchronized getInstance()
// DB와 연결하는 객체가 필요한 경우, 특정 시간이 지났을 때 연결이 끊어진다고 하면 필요할 때마다 getInstance 내에서 null일 경우 new 객체를 생성하고 return하여 비용을 아낌.
4. class 대신 enum으로 클래스 생성.
// 직렬화, reflection 상황 등에서 안전. 상속도 안 되고, 실무에선 거의 안 쓰임.
- [Spring] ISP란?
: Interface Segregation Principle. SRP는 클래스가 단일 책임을 져야 한다는 내용이었다면, ISP는 Interface도 단일 책임을 져야 한다는 내용이다. Interface에 구현해야 할 메서드가 너무 많다면 그 interface를 구현하는 클래스는 사용하지도 않는 메서드를 아무 내용도 없이 구현해야 하는 문제가 생긴다. 구현체가 커지면 conflict 가능성도 생긴다.
따라서 단일 책임을 갖는 인터페이스를 구현하여, 사용하는 클래스는 여러 개의 인터페이스를 다중 구현하면 된다. 인터페이스를 다중 구현한다면 해당 클래스의 역할에 대해 빠르게 파악할 수 있다는 장점이 있다.
- [Spring] DIP란?
: Dependency Inversion Principle. 하위 모듈의 변경이 상위 모듈의 변경을 요구하는 의존성을 끊어내야 한다. 개발 중 사용하던 라이브러리를 변경해야 할 일이 생길 때, 이전 코드가 해당 라이브러리에 너무 의존하고 강 결합이 되어 있다면 코드의 수정 사항이 너무 커진다.
예를 들어 어떤 라이브러리를 사용하고 있다면, 해당 라이브러리의 함수를 개발 내용에 직접 사용하지 않고 사이에 인터페이스를 하나 두어서 모든 클래스가 해당 인터페이스를 바라보게 한다면 라이브러리의 교체가 있을 때 인터페이스의 내용을 고침으로 유지보수가 쉬워진다.
- 운영체제란?
: 기본적으론 기능을 하는 프로그램. 따라서 여러 회사가 니즈에 맞춰서 개발한 여러 운영체제가 있다. (windows, mac, linux..) OS 윗단에서 실행되는 프로그램과 구분하기 위하여, OS 윗단에서 실행되는 프로그램은 응용 프로그램이라 칭한다.
조금 더 정확히 운영체제는 커널(Kernel)을 의미한다. 운영체제의 코어는 kernel이고, 거기에 여러 라이브러리나 프로그램이 붙어서 구성하는 것이다.
통상 계층을 사용자(user) - 응용 프로그램(application) - 운영체제 (operating system) - 하드웨어 (hardware)로 나눈다.
+) 안드로이드는 Linux의 순수한 kernel 위에 여러 Java 및 코어 라이브러리를 합친 것이고 운영체제가 아니다.
- [Java] 람다식의 생성 의의? 람다식을 썼을 때 JVM의 추론 방법?
: 자바는 매개변수로 함수를 넣을 수 없으므로 해당 불편함을 해결하고자 함수형 프로그래밍인 람다를 탄생시켰다.
람다식의 기본 요소는 함수형 인터페이스이므로, 어떤 객체의 생성자에 람다식을 쓰게 되면 JVM은 해당 객체가 생성자로 어떤 인터페이스를 받을 수 있는지 본 후에 해당 인터페이스의 구현 함수를 매칭시킨다.
- [Regex] 중괄호를 활용하는 수량자의 기본 사용 방법?
: 중괄호를 활용하여 해당 패턴이 몇 번 반복되는지 수로 명시할 수 있다.
.{1} // 모든 문자를 가리킴.
a{1,3} // a가 1~3 횟수 반복한 문자를 가리킴.
[a-z]{1, } // 소문자가 1번 이상 반복한 문자를 가리킴.
- [Regex] 수량자 뒤의 ‘?’ 역할?
: 기본적으로 모든 수량자는 탐욕적(greedy) 수량자이다. 뒤에서부터 검사하여 가장 큰 덩어리의 매칭을 찾으려 하기 때문이다.
하지만 수량자 뒤에 ‘?’가 붙는 순간 게으른(lazy) 수량자가 된다. 게으른 수량자는 앞에서부터 검사하며 조건에 맞는 최소의 덩어리를 찾는다.
.*? // 0개의 문자를 검색
.+? // 1개의 문자를 검색
.?? // 0개의 문자를 검색
.{1, } // 1개의 문자를 검색.
이처럼 게으른 수량자는 범위가 지정되지 않은 곳에서 자주 쓰인다.