반응형 노트44 [CS 노트] : Hash table에서 Collistion 해결하기 Hash table에서 Collision 해결 방법은? 대표적인 방법으로 2개가 있다. open addressing 충돌 발생 시 규칙에 따라 table의 비어있는 slot을 찾는다. slot를 찾는 방법은 3가지가 있다. Linear Probing Quadratic Probing Double Hashing separete chaining linked list를 사용한다. 충돌 발생 시 노드(slot)을 추가해 데이터를 저장한다. Open addressing 충돌이 발생하면 규칙에 따라 table의 비어있는 slot을 찾는다. linked List나 tree를 사용하지 않는다. 때문에 separate chaining에 비해 메모리를 적게 사용한다. Linear Probing, 선형 조사법 충돌이 발생한 .. 2022. 4. 9. [CS 노트] : Hash table에 대해서 Hash table이란? 효율적인 탐색을 위한 자료구조로 key-value 쌍의 데이터를 입력받는다. Hash function h에 key값을 넣어 얻은 해시값h(k)를 위치로 지정해 키,벨류 데이터 쌍을 저장하고 저장,삭제,검색의 시간복잡도는 O(1)이다. Direct address table를 미리 알아보자 직접 주소화 테이블은 Key 값을 index에 저장하는 방식인데 문제는 메모리 공간이 낭비된다. 예를 들면 key 값이 1000부터 시작하면 1부터 999까지는 비어 있게 된다. 또, 다양한 자료형을 담을 수 없다는 문제도 있는데 String으로 들어온 경우 Key 값을 바로 index로 사용하는 특성상 활용이 불가능하다는 문제가 있다. 이런 단점을 보완하는 게 Hash table이다. Hash .. 2022. 4. 8. [오류 노트] : (code=exited, status=14) / mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb / mongod.service: failed with result 'exit-code'. 문제 MongoDB를 잘 못 종료했나.. 문제가 있어서 다시 실행하려고 했으나 아래와 같은 오류가 떴다. .lock 파일도 삭제하고 다시 실행하도 또 .lock파일이 생기고, 여러 방법으로 껐다 켜도 mongo가 실행되지 않았다. mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb (code=exited, status=14) mongod.service: failed with result 'exit-code'. 해결 sudo chown -R mongodb:mongodb /var/lib/mongodb sudo chown mongodb:mongodb /tmp/mongodb-27017.sock sudo service mongod.. 2022. 4. 7. [CS 노트] : 이진 탐색 트리에 대해서 이진 탐색 트리 BST, 이진 탐색 트리 이진 탐색 트리는 정렬된 트리로 왼쪽 자식 노드는 부모 노드보다 작은 값을, 오른쪽 자식 노드는 부모 노드보다 큰 값을 가지고 있는 구조이다. 이진 탐색 트리의 시간 복잡도는 모두 O(logn)이고 worst case인 경우 즉, 한 쪽으로 치우친 트리가 되었을 경우에만 O(n)이 된다. 이진 탐색 트리로 조회를 할 경우엔? 조회하는 데이터를 루트 노드와 비교하고 작으면 왼쪽, 크면 오른쪽으로 보낸다. 이것을 반복해서 쭉 내리고 값이 같은 경우를 찾으면 된다. 이 과정이 O(logn)의 시간 복잡도가 걸리게 된다. 이진 트리는? 이진 트리는 모든 노드의 자식 노드의 수가 2 이하인 트리를 이진 트리라고 한다. 이진 탐색 트리의 worst case 이진 탐색 트리는.. 2022. 4. 6. [오류 노트] : Could not find any META-INF/persistence.xml file in the classpath 문제 H2 데이터베이스로 JPA실습을 하려고 했는데 아래와 같은 오류로 Main 메서드가 실행이 안 되었다. Could not find any META-INF/persistence.xml file in the classpath 해결 경로를 체크해 보면 되는데 실수로 META-INF를 META_INF로 만들었다. 경로를 잘 확인해 보자. 2022. 4. 6. [오류 노트] : Command failed with error 48 (NamespaceExists): 'Collection already exists. 문제 멜론 프로젝트를 하면서 MongoDB에 저장된 인기 차트 데이터 중 "방탄소년단"을 "BTS"로 변경하려고 했는데 아래와 같은 오류가 떴다. Command failed with error 48 (NamespaceExists): 'Collection already exists. 해결 해당 Collection이 이미 존재해서 그렇다. 매번 삭제해 주거나 삭제 로직을 만들어주면 된다. protected boolean dropCollection(String colNm) { boolean res = false; if (mongodb.collectionExists(colNm)) { mongodb.dropCollection(colNm); res = true; } return res; } 함수를 추가해 컬렉션이 .. 2022. 4. 5. [오류 노트] : Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 문제 MongoDB와 Mariadb를 연동하는데 아래와 같은 문구가 떴다. 서버 시작이 안 되었다. Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set 해결 spring.jpa.database=mysql application.properties 위와 같이 코드를 적어줬다. JPA를 사용해 보려고 build.gradle에 추가해 주었는데 어떤 DB를 사용할 것인지 정의해 줘야하는 것 같다. 일단 Mariadb를 사용하긴 하는데 자동완성에 안 떠서 mysql로 설정해 주었다. 나중에 안 돌아가면 이 부분을 다시 mariadb로 설정해 줘봐야겠다. 어차피 둘 다 호환되니까 안 될 것 같지는 않다. 2022. 4. 4. [오류 노트] : Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. ItW 문제 우분투,ubuntu에서 방화벽 설정을 하려고 했는데 apt install firewalld firewalld 설치를 하라고 떴다. 설치를 하려고 키워드를 입력하니 아래와 같은 오류가 뜨면서 진행이 안 되었다. Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. ItW 해결 sudo rm /var/lib/dpkg/lock* sudo dpgk --configure -a sudo apt update apt install firewalld 위와 같이 오류가 뜬 곳을 지워주고 다시 설정을 해주고 정상적으로 다운로드가 되었다. 2022. 4. 3. [CS 노트] : Queue와 Priority Queue 비교 Queue와 Priority Queue를 비교하라 큐는 먼저 들어간 데이터가 먼저 나오는 형식이고 우선순위 큐는 들어간 순서와 상관없이 우선순위가 높은 데이터가 먼저 나오게 된다. 때문에 큐의 push, pop의 시간 복잡도는 O(1)이지만 우선순위 큐의 push, pop의 시간 복잡도는 O(logn)이 된다. 우선순위 큐와 힙 우선순위 큐는 Heap과 같다고 볼 수 있다. 힙은 완전이진트리 구조이다. 이 힙은 Max Heap과 Min Heap이 있다. Max Heap은 각 노드에 저장된 값이 자식 노드의 값 보다 크거나 같아야 하고 Min Heap은 반대로 각 노드의 저장된 값이 자식 노드의 값보다 작거나 같아야한다. 힙은 트리 구조로 이루어져 있고 트리는 보통 Linked List로 구현하지만 힙은 .. 2022. 4. 2. [CS 노트] : Queue 2개를 사용해 Stack을 구현하라 두 개의 큐를 사용해 하나의 스택을 구현하려면 데이터가 두 개의 큐를 잘 왔다갔다 하게 만들면 된다. 1-2-3-4순으로 넣고 역시 FIFO이기 때문에 1-2-3-4순으로 나온다. 하지만 여기서 다 빼지 않고 1-2-3까지만 빼고 다른 큐에 넣어두고 4를 남겨두는 것이다. 그럼 A큐에는 4만 있고 B큐에는 1-2-3이 있는 상태인데 이때 A큐의 4를 POP해주면 된다. 이런 방식을 반복해서 하면 큐 2개로 스택을 구현하는 것과 같게 되는 것이다. 기출로 대비하는 개발자 전공면접 [CS 완전정복] 을 참고해서 공부하였습니다. 2022. 4. 1. [CS 노트] : Stack으로 Queue를 구현하기 두 개의 Stack를 통해 Queue를 구현할 수 있다. 데이터를 종이컵이라고 생각하고 종이컵 쌓기로 설명을 해 본다. 종이컵1,2,3,4를 A스택과 B스택을 사용해 큐를 만들어야 한다. 먼저, 큐는 종이컵이 1-2-3-4로 들어가고 1-2-3-4로 나오게 된다. 스택으로 큐를 구현하는 방법은 간단하다. 먼저 A스택에 종이컵을 push하여 1-2-3-4순서대로 넣는다. 그리고 다시 A스택에 있는 종이컵을 POP하여 B스택에 PUSH를 해 준다. 그럼 A스택에서 종이컵4가 먼저 나오게 되고 B스택에는 종이컵4가 맨 아래에 들어간다. 그 다음은 종이컵3이 pop되고 B스택에서는 종이컵3이 PUSH된다. 결국 B스택에는 종이컵4-3-2-1 순서로 쌓이게 되고 이 상태에서 pop을하면 1-2-3-4 순서대로 나.. 2022. 3. 31. [CS 노트] : Queue에 대해서.. Queue가 무엇인가? 큐는 FIFO(선입선출)의 자료구조이다. 시간복잡도는 enqueue(데이터 넣기), dequeue(데이터 빼기) 둘 다 O(1)이다.(맨 뒤에서 데이터를 넣고, 맨 앞에서 데이터를 빼기 때문이다.) 보통 Cache 구현이나 프로세스 관리, 너비우선탐색(BFS) 등이 있다. 구현 방식은 Array Based queue와 List Based가 있다. Array Based queue는 메모리를 넣고 빼다 보면 메모리 낭비가 발생하게 되고 이것을 방지하기 위해 Circular queue 형식으로 구현하게 된다. FIFO가 맨 뒤에서 넣고 맨 앞에서 빼내게 되는데 앞 칸에서 데이터를 빼내고 난 뒤에 당겨지지 않아 앞에 빈 메모리 공간이 생기게 된다. 이게 많아지면 결국 메모리 낭비가 되는데.. 2022. 3. 30. [CS 노트] : Array와 Linked List를 비교하면 어떤가? Array는 연속적으로 데이터를 저장하고 Linked List는 Node로 이루어져 있어 각 노드가 다음 노드를 가리키고 있어 논리적으로 연속적인 데이터 구조이다. 때문에 조회나 삭제 시 시간 복잡도가 다른데 데이터 조회는 Array는 O(1), Linked List는 O(n)으로 Array가 빠르고 삽입이나 삭제는 Array는 O(n), Linked List는 O(1)로 Linked List가 더 빠르다. 기출로 대비하는 개발자 전공면접 [CS 완전정복] 을 참고해서 공부하였습니다. 2022. 3. 29. [CS 노트] : Linked List에 대해서.. Linked List는 tree, graph 등 다른 자료 구조를 구현할 때 사용되는 기본적인 자료구조로Node 구조체로 이루어져있으며 이 Node는 다음 Node의 주소 값을 가지고 있다. Linked List는 물리적인 메모리에서는 비연속적으로 저장되자만 Node의 특성(다음 Node의 주소를 가지고 있음)을 통해 논리적인 연속성을 가지게 된다. Linked List는 데이터가 추가될 때 메모리를 할당한다. 즉, 메모리를 좀 더 효율적으로 사용할 수 있는 장점이 있다. Node는 다음 주소 값을 가지고 있는데 첫 번째 노드는 head라는 포인터로 가리키고 있고 마지막 노드가 가리키는 주소는 NULL을 표시한다. Array 처럼 메모리 연속성을 유지하지 않아도 되므로 메모리 사용이 자유로운데 다음 주소.. 2022. 3. 28. [CS 노트] : Dynamic Array에 대해서.. Dynamic Array는 저장 공간이 가득차면 가변적으로 사이즈를 조절하여 데이터를 저장하는 자료 구조로 저장 공간이 고정되어 있는 Static Array의 한계를 보안하기 위해 만들어졌다. 기존에 선언된 데이터 크기만큼 저장을 하다가 메모리를 초과하게 되면 resize가 발생되고 새롭게 확장된 크기의 배열을 생성해 데이터를 모두 옮긴다. 이와 같은 점이 장점으로 미리 사이즈를 고민할 필요가 없다. resize를 하는 대표적인 방법은 Doubling이 있다. 이 Doubling은 데이터를 추가하다 메모리가 초과하면 기존 크기의 두배 크기의 배열을 선언하고 데이터를 옮기는 방법이다. 기출로 대비하는 개발자 전공면접 [CS 완전정복] 을 참고해서 공부하였습니다. 2022. 3. 27. [CS 노트] : Array에 대해서.. Array는 메모리에 연속적이고 순차적으로 미리 할당된 크기만큼 저장하는 자료 구조이다. Array는 고정된 저장 공간과 데이터를 순차적으로 저장하는 특징이 있고, lookup(검색할 범위에서 값을 찾은 뒤 출력 등)과 append(추가 작업)가 빨라 조회하는 작업에서 유리하다. Array는 고정된 저장 공간을 가지고 있어서 메모리 낭비가 발생할 수 있고 반대로 Overhead가 발생할 수도 있는 문제를 가지고 있다. Overhead가 발생했을 때 선언된 크기보다 더 큰 값으로 Array를 선언하고 데이터를 옮겨주면 된다.(Dynamic Array) 근데 만약, 처음부터 데이터의 크기를 예측할 수 없을 떄에는 Array를 사용하지 말고 Linked List를 사용하면 된다. 기출로 대비하는 개발자 전공면.. 2022. 3. 26. [오류 노트] : git: 'create' is not a git command. See 'git --help'.The most similar command is reset 문제 git create vite frontend -- --template react 위 명령어로 react 프로젝트를 생성하려는 도중에 아래와 같은 오류가 떴다. git: 'create' is not a git command. See 'git --help'. The most similar command is reset 해결 npm create vite frontend -- --template react 첫 명령어가 git이 아닌, npm이다. 익숙함을 경계하자.. 혹시 찾을 사람이 있을까봐 올려둔다. 2022. 3. 25. [오류 노트] : detecting mongodb server feature compatibility version failed와 mongo server error (mongoqueryexception): query failed with error code 13 and error message 'command find requires authentication' on server IP:27017 문제 CentOS에서 MongoDB를 설치하고 Studio 3T에 외부접속을 하려고 했는데 detecting mongodb server feature compatibility version failed 오류와 mongo server error (mongoqueryexception): query failed with error code 13 and error message 'command find requires authentication' on server IP:27017 이런 오류가 떴다. 해결 vi /etc/mongod.conf 파일에서 #security: #authorization : enabled security 부분을 주석처리하고 MongoDB PID를 조회하여 kill하고 다시 재실행 해주고.. 2022. 3. 22. [질문 노트] : 개발 설계 산출물 작성하는 방법 메뉴구조도 구현할 프로그램 메뉴 구조를 문서화 기능의 뼈대가 되는 문서 메뉴구조도 항목은 사이트맵의 항목으로 생각하면 된다. 프로그램인지 페이지인지 구분을 해야 한다. 프로그램명세서 구현할 프로그램들을 문서화 한 파일이다. 예를 들어 JSP 프로그램이라 생각하면 된다. 회원관리 회원가입 회원정보 수정 로그인 로그아웃 메뉴구조도를 확장시켜 디테일하게 적어준 것이라고 보면 된다. 프로그램 ID를 보고 화면설계서에서 ID를 비교해서 어떻게 구현할지 참고한다. 프로그램 ID는 유일한 값으로 중복되지 않게 작성한다. DB 작업은 CRUD를 체크해 작성한다. C : INSERT R : SELECT U : UPDATE D : DELETE WBS(Work Breakdown Structure) PM이 가장 중요하게 생각.. 2022. 3. 10. [오류 노트] : Error while powering on: Virtualized performance counters require at least one available functioning counter. Module 'VPMC' power on failed. Failed to start the virtual machine. 문제 Error while powering on: Virtualized performance counters require at least one available functioning counter. Module 'VPMC' power on failed. Failed to start the virtual machine. VMWare를 통해 Ubuntu 접속을 하려고 하는데 위와 같은 에러 메시지가 뜨면서 접속이 안 되는 문제가 생겼다. 해결 먼저 생성한 VMWare Ubuntu 파일을 열어준다. 잘 모르겠다면 아마 ISO 이미지 파일이 있는 곳으로 가면 될 것이다. 나는 git bash를 활용해 파일을 확인했고 확장자가 .vmx 인 파일을 vi 명령어를 통해 열어준다. 아래로 내리다 보면 vpmc.en.. 2022. 2. 18. [오류 노트] : proxy: listen tcp4 0.0.0.0:80: bind: address alr eady in use sudo /etc/init.d/apache2 stop 문제 Error response from daemon: driver failed programming external connectivity on e ndpoint mywebserver (): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address alr eady in use 도커(docker)에서 컨테이너를 시작하려고 docker start mywebserver를 했는데 위와 같은 오류가 떴다. 80포트가 사용중인 게 문제였다. 해결 sudo /etc/init.d/apache2 stop 전에 실험삼아 돌렸던 아파치가 문제였다. 아파치를 종료해 주었더니 정상적으로 돌아왔다. 2022. 2. 13. 이전 1 2 3 다음 반응형