일단 씻고 나가자
23.04.07 본문
2023. 04. 07 금요일
- 맨해튼 거리란?
: Manhattan distance. 택시 거리, L1 거리, 시가지 거리로 불리며
좌표계에서 대각선을 허용하지 않는 (상하좌우만 허용) 선분의 길이 합.
- [Java] Collection 의 sort가 람다식을 활용하는 방식?
: Collection의 sort는 List와 Comparator만을 매개변수로 받을 수 있다.
첫 인자에 list, 두 번째 인자에 comparator을 익명 클래스로 구현할 수 있으며,
따라서 두 번째 인자에 적는 람다식은 두 변수를 기준으로 compare() 함수를 구현하는 내용이 된다.
- [Java] Thread가 탄생부터 죽을 때까지 가질 수 있는 상태와 관련 함수?
: Thread는 기본적으로 JVM이 OS의 CPU 스케줄링처럼 각 thread를 빠르게 순차적으로 실행시키고 잠시 멈추게 하고를 반복한다.
Thread 객체가 생성되어 start() 메서드가 실행되면 Runnable 상태가 되며, Runnable과 running 상태를 반복한다. 다른 thread가 실행될 때는 잠시 blocked 상태가 되고, 강제로 해당 thread를 blocked 상태로 만드는 메서드는 sleep(), wait() 메서드가 있다.
sleep()은 해당 thread가 지정한 시간 동안 잠들어 있다가, 시간이 지나면 스스로 해제한다.
wait()는 다른 thread가 notify(), notifyAll()을 호출하기 전까진 깨어나지 못한다.
+) 어떤 thread가 wait 된다면 그 순간 모니터링 락을 놓게 된다.
yeild()는 thread가 죽을 때 다른 thread에게 자원을 양보해 조금 더 빠르게 활동할 수 있게 해준다.
join()은 특정 thread A에서 B.join()을 했다면, 호출 순간 A의 일을 멈추고 B의 할 일이 다 끝나서 죽을 때까지 기다린다.
+) blocked 상태 관련 suspend(), runnable 상태 관련 resume(), dead 상태 관련 stop() 메서드가 있었으나 현재는 버그와 여러 이상으로 deprecated 된 상태이다.
- [Regex] 원하는 문자를 찾기 위한 표현 식? 주의점?
: 기본적으로 원하는 문자를 정확히 적어주어야 하며, 띄어쓰기, 대소문자를 구분한다.
- [Regex] 문자열의 가장 앞과 끝을 표현하는 표현 식? 이스케이프?
: ^a 는 해당 문자열이 a로 시작하는지 알려준다.
a$ 는 해당 문자열이 a로 끝나는지 알려준다.
이스케이프는 특수한 의미를 가진 표현 식 기호가 실제 문자열이 포함되어 있는지 확인할 때 해당 특수한 의미를 해제하여 일반 기호로 바꿔주는 기호로, \^, \&, \\ 처럼 사용한다.
- [Git] merge의 두 가지 방법과 차이?
: 2-way-merge, 3-way-merge 두 가지가 있다.
2 way는 바뀌기 이전 코드인 base를 참고하지 않고 merge 하려는 대상 branch만 보고 결정. 3 way는 base 코드까지 참고하여 merge 하는 방식이다.
(빨간 부분은 conflict를 내는 부분.)
- [Spring] OOP를 잘 할 수 있는 2가지 키워드? SOLID란? SRP?
: 분류, 교체. (각 코드를 관련성 있게 분류 / 쓰던 라이브러리를 교체)
OOP를 잘하기 위한 원칙이 SOLID이다.
SRP는 Single Responsibility Principle. 단일 책임 원칙.
클래스 내부에 여러 가지 기능을 함께 두지 말고, 기능별로 분류하여 클래스를 나누는 원칙.
나누어 개발자 각자가 각자의 클래스를 다루면 conflict도 발생하지 않는다!
- 프로그램 카운터의 돌아가는 원리?
: Program Counter. (PC) 16-Bit Counter.
클럭이 튈 때마다 1씩 증가하는 레지스터. 레지스터이기 때문에 해당 내용을 수정할 수도 있다.
- 컨트롤 패널과 Accumulator, PC의 동작 관계?
: Accumulator의 주소는 PC에서 주고, 컨트롤 패널은 전체적인 RAM을 관리한다. (PC에도 clear 스위치가 있다.) 컨트롤 패널은 순차적인 주소에 계산, 혹은 명령에 필요한 값들을 작성하는 기능을 가진다. take over이라는 스위치로 1로 켜지면 RAM에 16진수 주소로 각 값들을 적고, 0이 되면 RAM을 더 이상 관리하지 않는다.
그 후 PC의 clear 스위치를 작동시켜 PC가 0이 되면, 컨트롤 패널이 작성했던 첫 주소로 접근하게 되고 값이 들어 있는 주소를 순차적으로 접근한다. 그런 주소들을 Accumulator에 전달해준다.
이러한 기능은 회로의 변경 없이, 순차적으로 메모리 공간에 데이터만 적으면 되게끔 하는 편의를 제공한다.
- 오토메이션? CPU에 명령을 쉽게 하는 방법?
보통 연산은 위의 그림과 같이 실행된다.
들어온 데이터 값과 명령어 세트를 함께 전달하면 명령과 연산이 더 쉬워질 것이다.
따라서 각각의 명령에 해당하는 값을 미리 세팅하고, 해당 명령이 필요할 때 주소로 접근하면 되겠다.
메모리를 분리하여, 명령어와 데이터를 같은 주소에 따로 담아서 PC가 튈 때마다 같은 주소의 한 세트로 접근하면 된다.
명령어 – 값으로 미리 설정된 명령어 집합을 Instruction Code, Operation Code, opcode라고 하며 이는 CPU 언어로 CPU 종류마다 다르다.