일단 씻고 나가자

23.03.30 본문

Study/닥치는 대로 주워 담기

23.03.30

일단 씻고 나가자 2023. 3. 31. 01:55

2023. 03. 30 목요일

 

- [DB] NAME이라는 어트리뷰트를 기준으로 역순 정렬법?

: .. ORDER BY NAME DESC;

DESC DESCENDING의 약자이다.

 

 

- [DB] 조건의 부정은 어디에 어떻게? NULL을 검사하는 방법?

: WHERE NOT ~~;

WHERE 애트리뷰트 IS NOT NULL;

 

 

- [Java] 제곱근이 정수인지 판별하는 쉬운 방법?

: Math.pow((int)Math.sqrt(n), 2) == n;

 

 

- [Java] char 배열 스트림을 만드는 메서드?

: String str.chars();

str.chars().filter ~ 등으로 바로 스트림 관련 메서드를 연결하여 사용 할 수 있다.

 

 

- [Java] streamfilter에 해당하는 가장 첫 번째 요소를 찾는 메서드 2? 둘의 차이?

: findFirst() findAny()

IntStream.rangeClosed(1, 10).filter(n -> n%2 ==0).findFirst();/findAny(); 형태로 쓰이며

둘의 연산 결과는 가장 작은 홀수인 1이다. (Optional로 반환. 따라서 .orElse()를 뒤에 붙일 수 있다.)

 

두 메서드는 동일하게 처음 조건에 해당하는 값을 내보내지만, Anymulti thread 환경에서 병렬 형태의 처리 중 가장 먼저 찾은 쓰레드의 값을 내보내는 반면

Fisrt는 그럼에도 정보를 종합하여 stream의 순서를 고려하고 가장 앞 요소를 내보낸다.

https://codechacha.com/ko/java8-stream-difference-findany-findfirst/

 

 

- [Spring] AOP?

Aspect Oriented Programming. 관점 지향 프로그래밍. 기본적인 논리는 공통 관심 사항과 핵심 관심 사항을 분리하는 것이며, 핵심 관심 사항은 따로 내버려 두고, 원하는 내용을 한 클래스에 모아 적용할 범위를 설정하여 공통 관심 사항을 적용하는 것이다.

 

, 시간의 계산뿐 아니라 ProceedingJoinPoint가 설정한 메서드의 호출마다 인터셉트로 사이 사이에 실행되는 논리이다. 프록시라는 기술로 설정한 클래스에 대해 가짜 DI, Bean을 만들어서(복제, Class$$EnhancerBySpringCGLIB$$~~) 실행하고, (DI의 장점)

try 사이에 넣은 joinPoint.proceed()로 받은 진짜 메서드를 다시 실행하게 함으로써 빠져나갈 수 있도록 한다. argument의 내용 등등 여러 정보를 알 수 있다.

 

 

- [Spring] AOP의 사용 방법? 어노테이션?

AOP는 생성할 클래스에 @Aspect 어노테이션을 걸어주며, ProceedingJoinPoint라는 클래스를 매개변수로 받아 사용한다. 해당 클래스는 컴포넌트 스캔으로 @Component를 걸어주어도 되지만, 논리의 흐름 상 정형화된 방식인 Service 등과 달리 특별하고 코드를 읽는 사람에게 AOP를 쓴다고 보여주는 것이 좋기 때문에 @Bean으로 직접 생성하는 걸 추천한다. AOP 클래스는 System.currnetTimeMillis()의 메서드 처음과 끝에 선언해주고 try-finally로 똑같이 묶는다.

 

해당 내용으로 작성한 함수 위에도 @Around() 어노테이션으로 적용되는 범위를 정할 수 있다. 통상 Around(“execution(* 패키지명.하위 디렉토리..*(..)” ) 방식으로 적으며, 뜻은 해당 패키지의 하위 클래스에 모두 적용하겠다는 뜻이다.

 

결과는 해당 패키지 클래스 메서드 명으로, 설정했던 milli의 차이와 함께 나온다.

 

+ 추가적으로 compile time에 진짜 자바코드를 박아 넣는 기술도 있대~

 

 

- [Java] Arrays.asList(Integer[])의 주의사항?

: asList로 생성한 list는 고정 되어 있어 원소를 제거할 수 없다.

(java.lang.UnsupportedOperationException 에러를 낸다.)

따라서 new ArrayList 생성자로 감싸주어야 정상 작동한다.

 

 

- [Git] git을 처음 innit하면 처음 생성되는 폴더는 무엇인가? 원리?

: git을 처음 innit하면 HEAD라는 파일이 생기고(바이너리 파일 x, 일반 텍스트 파일), 해당 파일은 .git/refs/heads/master을 가리킨다. 해당 파일에는 object id값이 있고, 그 값은 바로 가장 최근 commit한 객체를 가리킨다. 그 객체 내부에서 parents를 누르면 그 이전의 commit 객체로 향한다. , branch라는 것은 단지 ref 디렉토리 밑의 일반 txt 파일일 뿐이다. 다른 branchcheckout 한다면 HEAD 파일이 해당 branch로 바뀐다.

(refs/heads vim으로 txt파일을 만들어도, 해당 파일을 branch로 인식해서 branch를 입력했을 때 list에 존재한다.)

 

HEAD -> refs/heads/해당 branch-> 최근 commit object

해당 commit object를 연결하면 어떠한 파일이 디렉토리에 있는가를 알려주는 것은 tree 파일이 한다. (tree -> 파일 이름, 파일 내용을 가리키는 링크)

 

 

- [Java] DataInputStream으로 내용을 읽는 방법?

: 각각의 내용을 데이터 형에 맞게 읽어주는 메서드를 써야 한다.

DataInputStream in = new DataInputStream(new FileInputStream(“경로”));

in.readInt/Double/Boolean() 등등

 

 

- [Java] char 형태로 입출력 방법? System.in의 역할? 관련 클래스?

: 보통 클래스명이 Reader, Writer로 되어 있는 것들이 char 형태의 입출력 클래스이다.

System.in은 키보드에서 받는 입력을 담당한다. (System.out의 반환형은 PrintWriter 이다.)

 

예시로 new BufferedReader(new InputStreamReader(System.in))

BufferedReaderchar형태를 한 줄로 받아 작성하는 것을 도와주는 클래스이다.

BufferedReader가 생성자로 Reader 관련 클래스만을 받을 수 있고,

따라서 키보드의 입력을 받으려면 reader 관련 클래스 중 System.in을 받을 수 있는 클래스가 필요한데 그것의 역할을 하는 것이 Reader을 상속 받은 InputStreamReader인 것이다.

 

 

- [Java] IO.close()를 써야 하는가?

: 데이터의 누수도 누수지만, 자바 내부의 메모리 상에 임시 저장해놓고 한 번에 읽고 쓸 키워드이기 때문. 쓰기의 경우 여러번 쓸 것을 대비하여 메모리에 임시 저장 후 다 썼다!는 걸 알려주면 한 번에 쓰기 위함이고, 읽기의 경우 네트워크에서 데이터를 보낼 시에 데이터의 끝을 알리는 것을 담당한다. null을 반환할 수도 있겠지만 null은 연결 완전히 끊겼다는 것을 의미하기 때문에 사용할 수 없다.

 

 

- 클럭이란?

: 초당 계산 횟수. 최근 CPU2.5GHz로 나오는데,

1 GHz = 1,000 MHz = 1,000,000,000Hz이며 Hz는 최소 수행 단위이다.

따라서 2.5GHz2.5 * 100...00Hz 의 명령을 1초에 수행하는 CPU라는 뜻이다.

클럭은 순간적으로 전기를 빠르게 주어, 계산기들의 연산 시간이 맞지 않는 것을 대비한다.

 

 

- NOT 게이트의 원리? Oscillator? 오버클럭?

V쪽으로 전류가 흐르기 때문에 1, 왼쪽 스위치는 외부 스위치로 열려 있으므로 0이다.

하지만 전류가 흐르는 순간 외부 스위치를 누르고 있으면 자기장이 생겨 다시 V쪽의 스위치가 열리게 되고 그럼 10을 무한히 반복한다. 이런 회로를 Oscillator이라 한다.

그런 주기는 일정하고, 01의 한 쌍을 cycle이라 하며 주기는 한 사이클에 필요한 시간이다. 그런 주기가 1초에 실행되는 시간을 Hz라 한다. (1hertz == 1cycle. frequency)

 

오버클럭이란 CPU보다 높은 주기를 돌도록 하여 연산을 빠르게 하는 기술이다. 전기에 대한 부하가 심해지므로 열 때문에 쿨링 장치를 단다.

 

 

- 이진 탐색 트리란? 삽입, 삭제의 과정?

: Binary Search Tree. 왼쪽 자식은 부모보다 작고, 오른쪽 자식은 부모보다 큰 key를 유지한다. 중복된 key를 허용하지 않는다.

중위 순회 시 오름차순 정렬되는 특징이 있다.

탐색이 빠르지만(log N) 균형의 유지가 필요하다. 불균형 상태에선 (N)의 속도를 보인다.

 

삽입에선 그냥 트리를 타면서 작으면 왼쪽, 크면 오른쪽으로 가다가 leaf노드를 마주치면 그 노드의 자식이 되면 된다.

삭제에선 왼쪽 서브 트리에서 가장 큰 값, 혹은 오른쪽 서브 트리에서 가장 작은 값을 구하여 위치를 바꿔준다. (링크는 유지)

 

 

- 균형 이진 탐색 트리란?

: 들어오는 데이터의 크기별 순서에 따라 트리가 사향처럼 편향될 수 있다.

따라서 이를 균형 트리로 바꿔주고자 (탐색 시간의 보장을 위해) 노드의 삽입, 삭제에서 특수한 과정을 거치는 트리이다.

'Study > 닥치는 대로 주워 담기' 카테고리의 다른 글

23.04.03  (0) 2023.04.04
23.03.31  (0) 2023.04.01
23.03.29  (0) 2023.03.30
23.03.28  (0) 2023.03.29
23.03.27  (0) 2023.03.28