이상 현상- 이상 현상이란, 테이블을 잘못 설계하여 삽입/삭제/수정 연산을 할때 데이터 무결성에 문제가 생기는 현상 - 정규화를 거치지 않은 테이블에서 발생할 수 있음 삽입 이상- 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야 테이블에 추가가 가능한 현상- ex) 대학교 학생들을 대상으로 이름, 나이, 학교 성적을 저장하는 테이블이 있다고 가정한다 하지만 신입생들은 학교 성적이 없기 때문에 테이블에 null이 들어가야 한다. 갱신 이상- 중복된 데이터 중 일부만 수정되어 데이터 불일치가 발생하는 경우- ex) 한 테이블에 여러 값을 저장하면 튜플이 겹치는 부분이 발생하는데 이때 값을 한 튜플만 바꾸면 겹치는 튜플과 데이터 무결성 문제가 발생한다. 삭제 이상- 어떤 정보를 삭제하면, 의도하지 않은 정보..
랜덤 IO와 순차 IO- 하드 디스크와 같은 기계 장치의 성능은 별로 좋지 않음- 순차 IO : 디스크에 연속적으로 저장되어 있는 데이터를 읽는 것- 랜덤 IO : 디스크에 랜덤으로 저장되어 있는 데이터를 읽는 것- 당연히 순차 IO 성능이 훨씬 좋음 인덱스란?개념- 데이터베이스에서 특정 컬럼의 데이터를 빠르게 검색할 수 있게 만들어주는 것으로, 책의 목차라고 생각하면 됨- 내부적으로 컬럼 값과 레코드의 주소를 key-value 값으로 묶어놓음 동작 방식 예시- B-트리를 예시로 들면 SELECT * FROM USER WHERE ID = 2 라는 쿼리가 실행되고, ID에 인덱스가 걸려있다고 가정- 트리 구조로 저장되어 있기 때문에 O(logn)으로 ID=2임을 찾고 해당 주소로 가서 값을 반환더보기추가 ..
파일시스템과 데이터베이스의 차이점1. 파일시스템은 파일 위치를 통해서 데이터를 찾지만 데이터베이스는 쿼리문을 통해 데이터를 찾습니다.2. 파일시스템은 트렌젝션 개념이 없어서 작업의 원자성이 보장되지 않습니다. 그래서 파일을 옮기다가 멈추면 파일의 일부분만 옮겨지기도 한다. 하지만 데이터베이스는 트렌젝션 개념이 있기 때문에 원자성이 보장된다. 데이터베이스의 특징데이터베이스는 4가지 특징이 있습니다.1. 실시간 접근입니다. 수시적이고 정형화 되지 않은 쿼리에 대해서 실시간으로 대응이 가능2. 계속적 변화입니다. 삽입(C), 갱신(U), 삭제(D)로 항상 최신 데이터 유지3. 동시 공용입니다. 서로 다른 데이터의 동시 사용 뿐만 아니라 같은 데이터의 동시 사용도 지원4. 내용에 의한 참조입니다. 데이터 값..
JSCODE 모의면접에 참여하게된 계기당장 면접을 앞둔 상황은 아니었지만, 면접을 준비하는 방식으로 CS를 공부하면 내가 무엇을 모르고 있는지 더 정확히 파악할 수 있을 것이라 생각했습니다. 또한, 고등학생 때 수능을 준비하며 다른 사람에게 배운 내용을 설명할 때 기억이 오래 남았던 경험이 떠올라, 효과적인 학습을 위해 면접 스터디에 참여하게 되었습니다. 스터디를 통해 개인적으로 성장한점 면접 경험이 적어 막연한 불안감이 있었지만, 스터디를 통해 면접에 대한 개인적인 노하우를 쌓을 수 있어 자신감이 생겼습니다. 또한, 애매하게 알고 있었던 자바의 이론적 내용을 확실하게 잡고 갈 수 있어서 좋았습니다. 느낀점 앞으로 CS 공부를 할 때 면접 형식의 스터디를 활용해야겠다고 느꼈습니다. 이렇게 공부하면 모르는..
💡 가비지 컬렉션이란?- 메모리 관리 기술로 JVM의 Heap 영역에서 동적으로 할당했던 메모리를 주기적으로 제거하여 메모리를 관리 (자바기준)- 메모리 제거 대상은 어떤 곳에서도 참조되고 있지 않는 Unreachable 객체이다. (장점)1. 개발자가 메모리 관리를 신경 쓰지 않고 로직에만 집중 할수 있다. (단점)1. 메모리가 언제 제거되는지 알기 힘들어 제어 할수 없다. 2. 가비지 컬렉터가 동작하는 동안은 다른 동작을 멈추기 때문에, 성능상 문제가 있다. (Stop the world) 💡 가비지 컬렉션의 동작 방식- 어떤 방식으로 Unreachable 객체를 솎아 낼까?Mark And Sweep 알고리즘 1. 식별 과정(Mark) : 그래프 순회를 통해 어떤 객체들이 참조되고 있는지 식별한다..
💡 동시성과 병렬성- 둘다 멀티 태스킹을 처리하는 방식이지만, 다르다. (동시성)- 동시성은 여러 작업이 시간을 나누어 마치 동시에 실행되는 것 처럼 보이는 기술- 멀티태스킹을 예시로 들수 있음 (하나의 코어로 여러개의 작업을 쪼개 실행하는 기술)- SW 관점 (병렬성)- 병렬성은 실제 물리적으로 여러 작업을 동시에 실행하는 것- 여러 코어가 실제로 작업을 동시에 실행 - HW 관점 💡 가시성 문제와 원자성 문제- 둘다 병렬 프로그래밍에서 발생하는 문제로, 동시성 이슈의 주범이다. (가시성 문제 - Visibility)- 멀티스레드 환경에서 한 스레드에서 변경된 데이터가 다른 스레드에서 즉시 보이지 않는 문제이다.- 발생 이유는 각 스레드는 독립적인 CPU 캐시에 변경된 데이터를 저장하고, 나중에 ..
💡 JCF란?- JCF(Java Collection FrameWork) : 자료 구조 종류의 형태들을 자바 클래스로 구현한 모음집- JCF의 계층 구조➜ List, Queue, Set과 달리 Map은 두개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 클래스와는 분리되어 있다.➜ Vector, Stack, HashTable과 같은 클래스들은 레거시 임으로 사용 하지 않는다 💡 List 인터페이스 (ArrayList., LinkedList, Vector)- 순서가 있는 데이터 집합- 같은 요소의 중복 저장 허용- 배열과 마찬가지로 index로 접근- List vs 배열 : 리스트는 자료형 크기가 고정이 아니라 데이터 양에 따라 동적으로 늘어났다 주는것에 반해 배열은 고정되어 있다.- 내부적..
💡 String literal과 new String(””) 차이- String 리터럴은 String constant pool 이라는 영역에 저장 (자바는 문자 리터럴을 특별히 관리)- String constant pool 은 동일한 문자열에 대해서는 하나의 참조를 재사용- new String(””) 은 매번 새로운 String 객체를 Heap 영역에 저장String str1 = new String("Hello"); String str2 = "Hello"; String str3 = "Hello";System.out.println(str1.equals(str2)); // (1) true System.out.println(str1 == str2); // (2) false System.out.println(s..