1. 자바 플레이 그라운드 with TDD, 클린 코드
- 미학습
2. 혼자서 공부하는 컴퓨터 구조 + 운영체제
* 보조기억장치
- 하드 디스크(HDD)
- 대표적인 보조기억 장치중 하나
- 자기적인 방식으로 데이터를 저장해 자기 디스크(magnetic disk)라고도 부른다.
- 플래터 : 실질적으로 데이터가 저장되는 곳. 자기물질로 덮여 수많은 N극과 S극을 저장. 양면 사용
- 스핀들모터 : 플래터를 회전시키는 부품
- 헤드 : 플래터에 데이터를 읽고 쓰는 부품
- 액츄에이터 암(디스크암) : 헤드의 위치 조정
- 위 그림처럼 플래터는 한 장이 아닌 여러장을 겹친 상태
- 섹터 : HDD의 가장 작은 전송 단위
- 트랙 : 플래터를 동심원으로 나누었을 때 원중 하나
- 실린더 : 여러겹의 플래터에 같은 트랙이 위치한 곳을 모아 연결한 논리적 단위(원통모양)
- 디스크암의 이동때문에 연속된 정보를 저장하기에 실린더가 유용(디스크 암을 움직이지 않고 데이터 작성 가능)
- 탐색 시간 : 찾으려는 데이터가 저장된 트랙으로 헤드가 움직인 시간
- 회전 지연 : 헤드가 있는 곳으로 플래터를 회전
- 전송 시간 : HDD와 메모리간 데이터 전송시간
- 플래시 메모리
- 셀 : 플래시 메모리에 데이터를 저장하는 가장 작은 단위
- 셀에 몇 비트를 저장하느냐에 따라 SLC, MLC, TLC로 나눌 수 있다.
SLC(Single Level Cell) | - 한 개의 셀에 한 개의 비트 저장 가능 - 비트의 빠른 입출력, 용량이 적기에 용량 대비 가격이 높음 - 수명이 길고 고성능 |
MLC(Multiple) | - 한 개의 셀에 두 개의 비트 저장 가능 - SLC보다 큰 용량 , SLC대비 느림, 가격 저렴 |
TLC(Triple) | - 한 개의 셀에 세 개의 비트 저장 가능 - MLC보다 큰 용량, 느림, 저렴 |
- 페이지 -> 블럭 -> 플레인 -> 다이 (왼쪽에서 오른쪽 순으로 모여 만들어짐)
- 페이지의 상태는 Free, Valid, Invalid 3개가 존재
- Free는 데이터가 저장되어 있지 않은 상태
- Valid는 유효한 데이터가, Invalid는 쓰레기 데이터라고 불리는 유효하지 않은 데이터를 저장
- HDD와 달리 데이터를 덮어 쓸 수 없다.
- 데이터를 읽고, 쓰는 단위는 페이지, 삭제 및 수정은 블록 단위로
- 필요 없는 데이터를 지우기 위해서 가비지 컬렉션이랑 기능을 제공(Valid상태의 페이지들만 새로운 블록에 옮기고 기 존 블록은 삭제)
* RAID(Redundat Array of Independent Disks)
- 정의
- 보조 기억장치에는 수명이 존재 -> 데이터 저장의 불안전성
- 한 개의 대용량 보조기억장치 성능 < 여러개의 보통 용량의 보조기억장치 성능
- 크게 위 두가지 이유로 탄생한 것이 RAID -> 여러개의 보조기억장치를 하나인 논리적 보조기억장치로 사용
구분 | 특징 |
RAID0 | - 여러개의 보조기억장치에 데이터를 분산 시키는 가장 기본적인 방법 - 한 개의 보조기억장치만 고장나도 다른 모든 보조기억장치의 정보를 읽는데 문제가 발생 - 데이터가 스트라이핑되면서 데이터를 읽고 쓰는 속도가 향상 |
RAID1 | - RAID0의 문제의 해결책으로 등장 - HDD에 저장되는 데이터의 복사본을 같이 저장(미러링) - 데이터는 안전하나, 낭비되는 저장공간이 많아짐 -> 비용증가 - RAID0보다 낮은 속도 |
RAID4 | - RAID1과 달리 전체 복사본 대신 오류 검출,복구를 위한 정보인 패리티 비트를 저장 |
RAID5 | - RAID4에서 패리티 정보 저장시 병목현상이 발생 -> 패리티 정보를 여러 HDD에 분산 저장 |
RAID6 | - RAID5와 기본적인 원리는 같으나 서로 다른 두개의 패리티 정보를 저장해 안정성을 강화 - RAID5보단 느린 성능 |
3. 알고리즘
- 현대오토에버 코딩테스트
- 면접을 보게 된다면 복기를 위해 문제 풀이에대해 간략하게 적어보자
- 1번 -> 아스키코드를 활용한 문자 위치 변경
- 2번 -> 기준이 되는 문자열과 나머지 문자열 배열의 문자 비교, 문자열 오름차순 정렬 필요
- ArrayList대신 우선순위큐를 사용, StringBuilder 초기화 sb.setLength(0);
- 3번 -> int형 배열의 같은 요소를 찾기위해 이분탐색(Arrays.binarySearch)를 이용(시간 복잡도 고려)
- 두개의 배열에서 구간별 최대값을 찾음. 단,처음과 끝의 예외적인 상황을 고려하여 else if으로 처리
- Pair class 굳이 안만들어도 됐음 인덱스만 저장해도 충분했음
'TIL' 카테고리의 다른 글
TIL - 0221 (0) | 2023.02.21 |
---|---|
TIL - 0220 (0) | 2023.02.20 |
TIL - 0217 (0) | 2023.02.17 |
TIL - 0216 (0) | 2023.02.16 |
TIL - 0215 (0) | 2023.02.15 |