일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- C
- 연결리스트
- 포인터
- 코딩테스트
- 컨테이너
- pytorch
- GraphQL
- RT scheduling
- 연결 리스트
- 브라우저
- 프론트엔드
- cors
- 릿코드
- 이진탐색
- vue3
- 프로세스
- RxJS
- 자바스크립트
- Machine Learning
- 웹팩
- APOLLO
- 자료구조
- 알고리즘
- 배열
- 프로그래머스
- 스택
- 큐
- 해시테이블
- 타입스크립트
- alexnet
- Today
- Total
목록분류 전체보기 (164)
프린세스 다이어리
1. git tag 추가하는 법 로컬 터미널에서 배포 나간 커밋을 복사해 가져와서 다음과 같은 순서로 입력한다. $ git tag v1.1.0 cb12cb102121cb121cc11a9ebfa4abeeaa53d78d -m "신규 기능 추가 어쩌고" $ git push origin v1.1.0 2. git tag 삭제하는 법(로컬, 원격) 앗 원격에 올리기까지 했는데 메시지나 버전 수정을 해야 한다면 다음과 같이 진행한다. $ git tag -d v1.1.0 $ git tag v1.1.0 cb12cb102121cb121cc11a9ebfa4abeeaa53d78d -m "기존 서비스 마이그레이션" $ git push origin v1.1.0 혹 아래와 같은 에러가 뜨면 터미널에서 원격 태그를 지우거나 깃랩 또..
1. 풀이 순서 문제 입력에 따라 2차원 배열을 만들어주는 함수를 하나 만든다.(makeGraph) dfsAll() 수행하여, dfs() 종료 시마다 현재 정점을 기록한다.(order) 위상정렬 결과를 얻기 위해 그 기록을 뒤집어서 결과를 도출한다.(order.reverse()) 추가로 DAG 조건에 부합하는지 검사하여 예외처리 한다. 2. 해답 const makeGraph = (numOfTest, words) => { // 1. 2차원 배열을 26*26 크기로 초기화해줌. let graph = Array.from(Array(26), () => Array(26).fill(0)); // 2. 들어온 단어들을 돌아줌. 이 케이스에서는 나름의 알파벳 순서대로 정렬돼 있으므로 지금거([j])랑 이전거([j-1=..
이전까지는 여러 스트림의 출력을 동시에 하나로 결합하는 방법 살펴봄. 이번 내용에서는 옵저버블 자체에서 다른 옵저버블을 방출하는 “중첩 옵저버블" 처리하는 방법 살펴볼 예정. 1. Intro (1) 중첩 옵저버블이란? const search = Rx.Observable.fromEvent(inputText, 'keyup') //... .map(query => sendRequest(testData, query)) // sendRequest는 비동기작업하는 옵저버블 // ... .subscribe(console.log) 사용자가 입력한 키워드를 포함하는 스트림을, 키워드에 대한 검색결과의 배열로 변환함. 근데 그 sendRequest 옵저버블 자체가 옵저버블 객체를 반환하는 상황. // sendRequest(..
회사 FE 스터디때 내 차례에서 발표한 내용 정리 옵저버블을 하나로 합치지 않는다면? 예: 마우스와 터치 동작에 대한 각각의 옵저버블 const mouseUp$ = Rx.Observable.fromEvent(document, 'mouseup'); const touchEnd$ = Rx.Observable.fromEvent(document, 'touchend'); 이 2개의 옵저버블을 개별적으로 구독할 수는 있겠지만 한계점이 있다. 동일한 코드일 가능성이 큰 구독 영역이 두 개 존재 둘 사이에 공유되어야 하는 모든 코드는 외부 공유 상태가 필요. 두 개의 구독을 추적해야 해서 잠재적인 메모리 누수 영역 하나 더 생김 → 둘은 유사한 이벤트를 방출하기 때문에, 단일 코드 블록으로 두 구독을 관리하는 게 낫다...
리눅스 시스템에서는 inode 방식을 사용하는 ext 파일 시스템을 주로 사용한다. inode 블록에는 파일의 권한, 소유자, 사이즈, 생성시간 등의 메타데이터를 담고 있다. 1. inode 블록에 담긴 정보들 1-1. 파일 내용 출력해보기 $ cat data.rtf desktop 디렉터리에 텍스트 편집기로 급조한 파일을 저장해 놓고, cat 명령어로 data.rtf의 내용을 화면에 출력해 보았다. cat 명령어를 사용하여 파일에 접근하면, 먼저 그 파일에 해당하는 inode 번호를 찾는다. inode 번호를 찾아 inode 블록에 접근하고, 그 내용에 접근하고, 그리고 데이터를 읽어서 화면에 출력해 준다. 1-2. 파일 메타데이터 출력해보기 $ ls -al data.rtf 이제 desktop 디렉터리의..
inode란 Linux/Unix의 파일 시스템에서 사용되는 자료구조를 말한다. inode 방식에는 크게 3가지 블록 타입이 있는데, 슈퍼 블록(super block), 아이노드 블록(inode block), 데이터 블록(data block)으로 나뉜다. 1. 슈퍼 블록 슈퍼 블록은 파일 시스템 전체를 대표하는 블록으로, 파일 시스템 정보 및 파티션 정보 등을 포함하고 있다. 리눅스 터미널에서 df 명령어를 치면 슈퍼블록 정보를 볼 수 있다. 파일 시스템이 뭐가 있는지, 512Byte짜리 블록이 몇 개인지, 사용되고 있는 용량과 남아있는 용량은 얼마인지, 각각의 파일 시스템은 어디에 마운티드 되어 있는지 등의 정보를 보여준다. 2. inode 블록 inode 블록은 inode가 모여 있는 공간이다. 모든 ..
1. 파일 시스템의 개념 파일 시스템이란 운영체제가 저장매체에 파일을 읽거나 쓰기 위한 자료구조 또는 알고리즘이다. 컴퓨터를 꺼도 데이터를 유지하기록 데이터의 크기나 위치 등을 약속하여 운영체제에서 읽도록 개발된 시스템이다. 초창기에는 데이터를 비트 단위로 주소를 매겨서 읽고 썼는데 이는 오버헤드가 크다는 단점이 있어, 블록 단위로 관리하기 시작하였다. 4KB 단위로 데이터를 관리하기 시작하면서 주소의 수가 줄어들었고, 블록마다 고유번호를 부여하면 읽고 쓸 수 있게 되었다. 그런데 이것 또한 초반에나 가능했지, 점차 데이터와 저장매체의 규모가 늘어나자마자 바로 일반 사용자가 관리하긴 힘들어지는 문제가 생기게 됐다. 일반 사용자가 파일을 관리하기 용이하도록, 파일을 추상적(논리적) 객체로 관리하기 시작했다..
#include #include #include #include int main() { int fd; fd = open("data.txt", O_RDONLY); if(fd == -1) { printf("Error: cannot open file\n"); /* 파일을 열지 못했으므로 종료 */ return 1; } else { printf("File opened and now close_\n"); close(fd); return(); } } 위와 같은 C언어 코드가 있다. 파일을 읽는 간단한 프로그램이다. 이 파일이 컴파일되면 실행파일의 사이즈는 1KB 남짓 될 것이다. 운영체제에서 실행을 하기 위해서는 반드시 프로세스가 만들어져야 한다. 이 프로세스가 차지하는 가상 메모리 영역은 1KB도 2KB도 아니고..