일단 씻고 나가자
23.04.13 본문
2023. 04. 13 목요일
- [Regex] range를 정하는 방식이 아닌, 이스케이프를 이용한 방법들?
: 캐릭터 클래스. 영어, 숫자와 ‘_’ 기호까지 정규식을 지정할 수 있다.
기본적으로 지정하는 문자가 소문자일 땐 해당하는 것, 대문자일 땐 해당하지 않는 것을 판별한다.
\w // word. 영어, 숫자, ‘_’ 기호를 모두 선택한다. == [A-z0-9__]
\w* // 공백과 특수문자를 제외한 모든 문자를 지정한다. 특수문자는 ‘_’만 포함한다.
\W // Not word. w에서 해당되지 않는 모든 것을 선택한다.
\d // digit. 숫자만을 선택한다. == [0-9]
\D // Not Digit. 숫자가 아닌 영어와 특수기호를 선택한다.
\b // word boundary. 위치에 따라 해당 위치에 패턴이 있는지 판별한다.
예를 들어 \b\w 는 모든 단어의 앞 글자를 선택하고,
\w\b는 모든 단어의 뒷 글자를 선택한다. (\b\w\b 는 한 글자인 단어만 판별.)
\B // Not boundary. b에서 설정될 나머지 부분을 선택한다.
(\B.\B는 첫, 마지막 글자 외의 단어 내부를 모두 선택한다.)
\A // 전체 문장의 시작. \A... 라면 전체 문장 제일 앞 3글자를 선택.
\Z // 전체 문장의 끝. ...\Z 라면 전체 문장 제일 끝 3글자를 선택.
+) \A, \Z와 ^, $의 차이는 전자는 전체 문장에서의 앞, 뒤를 판별하고
후자는 각 줄의 앞, 뒤를 선택한다.
- [Regex] Assertions이란? 사용 방법?
: 해당 패턴에 맞는 것을 채택하지만, 선택한 문자는 포함시키지 않는 의미.
(?= 패턴) 으로 적는다.
예를 들어 \w+(?=X) 의 식이라면, X를 포함한 패턴을 찾지만 해당 패턴에서 X를 포함하진 않는다.
- [Java] 특정 자료구조를 빼고 sort 하고를 반복해야 할 때 좋은 클래스? 내림, 오름차순?
: Heap의 구조는 데이터를 넣을 때 이미 sort를 하므로 시간이 절약.
자바에선 (util) PriorityQueue<>를 제공하며, 기본적으로 min Heap 구조를 가져 poll() 하면 가장 작은 값이 나온다. (오름차순)
이를 내림차순으로 바꾸려면, PQ는 comparator을 지원하기 때문에 객체 생성 시에
PriorityQueue<Generic> pq = new PriorityQueue((x, y) -> Generic.compare(y, x))처럼
역순으로 선언해주면 된다.
- [Effective Java] Instance화를 막는 방법?
: 어떤 인스턴스를 막아야 하는 util class에 대하여, 단순히 클래스 내부의 어떤 private 변수가 필요한 경우엔 까먹고 객체를 생성해서 가져오려고 할 경우가 있다.
그런 사항을 막기 위해 애초에 생성자를 private으로 막아두고, 그때마다 에러 메세지를 보며 상기할 수 있게 코드를 짜자.
- [Git] fork란? clone이란?
: github에 올라와 있는 어떤 프로젝트를 복제하여 나의 프로젝트로 만든다. 단, 해당 프로젝트를 직접 수정할 수 있는 것이 아니라 복사해서 가져왔을 뿐이므로 혼자만 수정하고 사용할 수 있다.
원격저장소의 내용을 local 저장소로 가져오고 싶다면 git clone 주소 디렉토리 라고 적으면 옮겨진다.
- [Spring] SOLID 외에 지킬 두 가지 원칙?
: KISS (Keep It Simple Stupid) - 배웠다고 너무 생각하고 구조 짜지 말고 일단 해라.
YAGNI (You Ain’t Gonna Need It) - 쓰지 않는 클래스는 지워라. 협업하는 사람들이 내가 만든 쓸모없는 클래스에 신경 쓰고 유지보수를 하여 리소스를 낭비한다.
- 쉘이란?
: Shell. 커널 윗단에 붙어 운영체제라 총칭으로 불리는 프로그램. (일종의 응용 프로그램)
운영체제의 사용법 (Interface)을 제공하는 프로그램. 유저는 쉘을 통해 운영체제에게 명령한다.
쉘은 터미널 환경(CLI)과 GUI 두 가지 종류로 분류한다.
터미널 환경이란 cmd에서 어떤 명령을 하게 시키는 명령어를 쉘이 제공.
GUI는 Graphic User Interface로 일반 마우스를 사용하여 누르고 모니터에 나오는 기능.
개발자는 터미널 환경에도 익숙해져야 한다. 예를 들면 서버에서는 터미널에 리눅스의 bash프로그램도 쉘이며 현업에서 주로 사용된다.
- 시스템 콜이란? 포팅? API? 언어별 시스템 콜을 사용하는 방법?
: System call. (== 시스템 호출 인터페이스) 쉘과 커널이 통신할 수 있게 하는 커널이 제공하는 인터페이스. 쉘이 커널에 무언가를 요청할 때 시스템 콜을 이용한다.
시스템 콜은 함수 형태이며 C에서 사용하는 함수와 흡사하다. 이는 다른 언어에서도 가능한데, 자바를 예로 들면 개발자가 선언한 함수를 받으면 JDK가 해당 OS의 시스템 콜을 호출해준다. 이렇게 각 언어별 운영체제를 동작시키게끔 해주는 것을 포팅이라 한다.
이렇게 개발자에게 각 시스템 콜을 제공해주는 함수 및 라이브러리를 제공하여 응용 프로그램을 만들게끔 하는 것이 API (Application Programming Interface)이다.
시스템 콜은 운영체제마다 다르므로 어떤 프로그램을 운영체제별로 다운로드 해야 해당 프로그램이 운영체제에 맞는 시스템 콜을 올바르게 사용할 수 있는 것이다.
- 사용자 모드와 커널 모드란? CPU가 모드를 사용하는 방법?
: 컴퓨터에 접근하여 파일 입출력을 하거나 자원을 사용하는 것은 응용 프로그램에서 직접 접근하게 된다면 보안 문제를 야기할 수 있다. 그를 막기 위해 응용 프로그램은 컴퓨터에 영향을 미치는 어떤 중요한 작업 시마다 커널에게 요청을 하게 되고, 그것을 사용자 모드와 커널 모드라 한다.
CPU에 전달되는 모든 명령어는 레벨 모드를 함께 적어놓게 되어 있다. CPU는 해당 레벨을 보고 해당 작업이 레벨에 맞는 적합한 명령이라면 실행, 아니라면 취소한다. 이 기능을 CPU 자체에서 제공한다. 이를 CPU Protection Ring이라 칭한다. 보통은 3과 0만 사용한다.
시스템 콜은 커널 모드에서만 실행된다. 즉. API로 제공되는 함수는 Kernel 모드에서 실행되며, 그 외의 코드는 사용자 모드에서 실행된다.
어느 어플리케이션이 특정 기능을 쓰면 팝업이 뜨게 되고, 허용한다면 해당 권한을 0으로 높여서 기억하고 있다가 해당 기능을 요청하면 실행한다.
- 백트래킹이란? 관련 용어?
: Backtracking. 모든 경우의 수를 탐색하다가, 최적해가 아니라는 판단이 들면 더 이상 구하지 않는 방법.
유망 Promising : (최적)해가 될 가능성이 있는 경우.
가지치기 Pruning : 해가 될 가능성이 없는 경우 해당 노드를 제외하는 것.
백 트래킹 Backtracking : 유망하지 않은 쪽으로 가지 않고 되돌아오는 것.