본문 바로가기

Knowledge47

여러 사이트 참고한 예상질문 정리 - 종합 보호되어 있는 글 입니다. 2022. 8. 17.
String, StringBuffer, StringBuilder 연산횟수가 많아지거나 멀티쓰레드, Race condition 등 상황이 자주 발생하면, 각 클래스의 특징을 이해하고 상황에 맞게 사용해야한다. String 과 StringBuffer , StringBuilder 의 차이점은 불변의 속성을 갖는 것이다 String str = "hello"; str = str + " world"; String 은 불변이기 때문에, "hello world"는 새로운 메모리 영역을 가리키게 되고, str 에 남아있는 "hello" 는 GC 에 의해 사라진다. 따라서, 자주 변하는 문자열을 사용할 때는 String 을 사용하는 것은 메모리를 많이 사용하기 때문에 지양하는 것이 좋다. 이러한 문제를 해결하려면, StringBuffer / StringBuilder 를 사용해야 한다... 2022. 8. 17.
컴파일과 인터프린터 컴파일러와 인터프린터는 사람이 이해할 수 있는 고급언어로 작성된 소스 코드를, 기계가 이해할 수 있는 기계어로 번역 후 프로그램을 실행하는 것이다. 차이점에 대해 알아보자. 하드웨어 실행시간(비교) 번역시간(비교) 메모리 대표언어 컴파일러 종속적O 빠르다 느리다 많이사용 JAVA, C, C++ 인터프리터 종속적X 느리다 빠르다 비교적 적게 사용 Pyhon, JavaScript 컴파일러 - 하드웨어에 종속적 - 고급언어를 한번에 번역을 한다. - 줄 단위로 해석하는 인터프리터에 비해 번역시간이 오래걸린다. - 컴파일러는 한번 실행하면 실행파일이 생성되어, 다음 실행을 할때는 기존에 생성되었던 실행파일을 실행하기 때문에, 인터프리터에 비해 실행 시간이 빠르다. - 전체 코드를 검사한 후 실행하기 때문에, 실.. 2022. 8. 17.
해시(Hash)란 무엇인가? HashMap을 사용하면서 Hash란 것을 사용하고 있었는데, 조금 더 자세히 알아볼 수 있는 시간이 된 것 같다. 해시(Hash) - 데이터를 다루는 기법 중 하나로 검색과 저장이 아주 빠르게 진행 - Key Value 값이 한쌍으로 존재하고, key의 값이 인덱스로 변환된다. - 키에 대한 해싱값을 구하는 과정을 hashing(해싱) 이라고 한다. - 시간복잡도는 O(1) 에 수렴 충돌(Collusion) 키에 대한 해시값이 같은 경우( 이미 해시 버킷이 사용중인 경우) 를 뜻한다. 같은 인덱스 끼리 덮어씌어지어 먼저 저장된 데이터는 지워진다 충돌을 해결하는 방법 충돌이 일어나는 이유는 해시알고리즘이 잘 짜여져 있지 않기 때문이다. 해시의 장점은 빠른 데이터 접근인데, 충돌이 많으면 최대 검색시간이 .. 2022. 8. 16.
시간복잡도란 무엇인가? 다른방법은? 복잡도(Complexity) 1. 알고리즘 성능을 나타내는 척도 2. 시간 복잡도(Time Complexity) - 알고리즘의 필요 연산 횟수 - 빅오(Big-O Notation) 표기법을 통해 나타낸다. 3. 공간 복잡도(Space Complexity) - 알고리즘의 필요 메모리 (MB단위) 4. 시간 복잡도와 공간 복잡도는 Trade-off 관계 - 메모리를 많이사용하면 시간 복잡도를 줄일 수 있다 - 반비례관계 시간 복잡도의 속도를 비교하면 위의 사진과 같다. 빠름 O(1) < O(log N) < O(N) < (O N log N) < O(N^2) < O(2^N) 느림 Big-O 이외에도 Big-Omega 와 Big-Theta Notaion 등이 존재한다. Big-O notation 은 상한선을 기준.. 2022. 8. 13.
block I/O VS non-block I/O 개념 block I/O 와 non-block I/O 가 어떻게 동작하는지 알아본다. block I/O - I/O 작업을 요청한 프로세스/스레드는 요청이 완료될 때까지 블락됨(기다림) 스레드가 read blocking system call 을 실행하게 되면 블락된다 커널에서는 read I/O를 실행한다. 시간이 지나고 응답을 주면 커널이 응답을 받고 data를 커널에서 user로 옮긴다. 위 과정을 거치고 스레드는 깨어나서 다시 일을 진행한다. non-block I/O - 프로세스/스레드를 블락시키지 않고 요청에 대한 현재 상태를 즉시 리턴 스레드가 read non-blocking system call 을 실행한다. 커널모드로 컨택스트 스위칭이 되고, 커널에서는 read I/O 작업을 실행한다. 그리고 바로 리.. 2022. 8. 11.
상속과 구현의 차이 상속(Extends) 이란? - 자식이 부모의 특징을 상속받아 사용한다는 특징을 가지고 있다. - 코드의 재사용성을 높이고 코드의 중복성을 최소화 할 수 있다. - 자식이 원하는 특징을 추가 및 확장이 가능하다. 구현(Implements) 이란? - 특정 인터페이스를 클래에서 구현한다. - 인터페이스에서 정의한 메서드에 강제력이 생긴다. - 인터페이스를 구현한 클래스에서 인터페이스의 메서드를 재정의해서 구현해야 한다. - 인터페이스의 내용이 바뀌면 이를 구현하는 모든 클래스의 코드가 변경되어야 한다. 다중 상속은 불가능하지만 다중 구현은 가능하다. 상속과 구현에 대해 알아보던 중, 스프링에서는 상속을 사용하기보다 대부분 구현을 사용하는데 왜 그럴까??? 라는 의문이 들어 추가로 찾아보았다. 상속의 단점과.. 2022. 8. 9.
데이터베이스와 파일처리 시스템의 차이 파일시스템 - 파일을 저장 장치에 저장하고 사용하기 위한 일종의 규칙이나 체계를 의미 - 파일의 이름을 붙이고, 쉽게 파일에 접근할 수 있도록 파일과 관련된 기능을 수행하는 시스템 데이터 정의가 응용 프로그램에 내포되어있다. 프로그램에서 데이터를 접근하고 조작하는 것 이외에 별도의 제어가 없다. 위의 2가지는 큰 단점을 가지고 있다. 1. 데이터 간 불일치가 발생할 수 있다. - 중복된 데이터의 제어 할 수 없다. - 일부의 데이터가 변경된다고 하면, 중복된 데이터 간의 불일치가 발생할 수 있다. 2. 다수 사용자를 위한 동시성 제어가 제공되지 않는다. - 혼자 데이터베이스를 접근하는 것처럼 인식하도록 하는 동기화가 제공되지 않는다. 3. 데이터 독립성이 없어서 유지보수 비용이 크다. - 파일의 구조가 .. 2022. 8. 9.
여기저기 참고한 예상질문 정리 - 네트워크 보호되어 있는 글 입니다. 2022. 7. 27.