블로그
전체 92024. 10. 27.
1
CS_전공지식_스페셜미션
function quickSort(arr, left, right) { if (left = left + 1 && arr[rightStartIndex].count >= pivot) { rightStartIndex--; } if (leftStartIndex 실행결과 캡처:
알고리즘 · 자료구조
2024. 10. 27.
1
[3주차] 발자국
강의수강이번 3주차 강의에서는 정렬과 동적프로그래밍, 메모리, 가상메모리, 입출력 장치, 파일시스템에 대해 배웠다. 여러 정렬방식들이 다 비슷한 듯 달라서 강의를 들으면서 조금 헷갈리기도 하였다. 완벽한 숙지를 위해 강의를 다 듣고 나서 여러 번 복습을 해야겠다고 생각했다. 미션미션을 진행하면서 한 주 동안 들었던 강의들을 다시 한번 더 되짚어 볼 수 있어서 좋았다. 처음 강의를 들었을 때보다 조금 더 이해가 되는 걸 느낄 수 있었다. 어떤 방법을 쓰는 것이 더 좋은지 생각해봄으로써 그 방법에 대해 더 깊이 이해할 수 있었다.
알고리즘 · 자료구조
2024. 10. 27.
1
CS_전공지식_마지막미션
운영체제 1.메모리의 종류는 어떤 것들이 있나요? 각 메모리의 특징도 함께 적어주세요. 레지스터-가장 빠른 기억장소로 cpu내에 존재, 휘발성 메모리, cpu를 구분할 때 32비트, 64비트라고 하는데 이것이 레지스터를 의미, cpu는 계산을 할 때 메인 메모리에 있는 값을 레지스터로 가져와서 계산, 계산 결과는 다시 메인 메모리에 저장캐시-레지스터와 메인 메모리 사이에 존재, 메인 메모리에 있는 값을 레지스터로 옮기려면 한참 걸리기 때문에 필요할 것 같은 데이터를 미리 가져오는데, 미리 가져온 데이터를 저장하는 곳메인메모리-실제 운영체제와 다른 프로세스들이 올라가는 공간, 전환이 공급되지 않으면 데이터가 지워지기 때문에 휘발성 메모리보조 저장장치( ssd, 하드디스크)-가격이 저렴하고 전원이 공급되지 않아도 데이터가 지어지지 않는 비휘발성 메모리 2.사용자 프로세스가 메모리의 운영체제 영역에 침범하지 못하도록 만든 레지스터는 어떤 레지스터일까요? 경계 레지스터입니다. 3.메모리 할당 방식에서 가변 분할 방식과 고정 분할 방식의 장단점은 뭔가요? -가변 분할 방식장점: 메모리의 연속된 공간에 할당되기 때문에 더 크게 할당돼서 낭비되는 공간인 내부단편화가 없다.단점: 외부단편화가 발생한다. -고정 분할 방식장점: 구현이 간단하고 오버헤드가 적다.단점: 내부단편화가 발생한다. 4.CPU 사용률을 올리기 위해 멀티프로그래밍을 올렸지만 스왑이 더 많이 이루어져 CPU 사용률이 0%에 가까워 지는 것을 뭐라고 할까요? 스레싱입니다. 5.HDD나 SSD는 컴퓨터를 실행시키는데 꼭 필요한 걸까요? 이유를 함께 적어주세요.hdd는 속도가 느리고 hdd를 넣을 큰 공간이 필요하다는 단점이 있지만, 계속해서 저장되어 있어야 하는 데이터들이 있기 때문에 컴퓨터를 실행시키는데 꼭 필요하다고 생각합니다. ssd는 데이터를 덮어 쓸 수가 없고, 똑같은 자리에 데이터를 써야 한다면 데이터를 지워야 하는 횟수가 정해져 있다는 단점이 있지만, hdd처럼 큰 공간이 필요하지 않고, 자석을 갖다대도 훼손되지 않으며, 속도가 빠르다는 장점이 있어 컴퓨터를 실행시키는데 꼭 필요하다고 생각합니다. 다 각자의 장단점이 있기에 둘다 사용해서 장단점을 보완하면 더 좋은 성능의 컴퓨터를 만들 수 있다고 생각합니다. 6.파일을 삭제해도 포렌식으로 파일을 복구할 수 있는 이유가 무엇일까요? 파일시스템은 효율적으로 관리하기 위해 빈 공간을 모아둔 free block list를 가지고 있습니다. 특정 파일을 삭제한다면 파일 시스템은 모든 정보를 지우는 것이 아니라 파일 테이블의 헤더를 지우고 free block list에 추가합니다. 이렇게 처리하면 사용자는 파일이 삭제된 것처럼 느껴지는데, 사용했던 데이터는 남아있기 때문에 포렌식으로 파일을 복구할 수 있습니다. 자료구조와 알고리즘 지금까지 배운 5개의 정렬 알고리즘의 장단점과 시간 복잡도를 적어주세요.- 버블정렬장점: 이해와 구현이 간단단점: 성능이 좋지 않음시간 복잡도: O(n^2)-선택정렬장점: 버블정렬과 마찬가지로 이해와 구현이 간단단점: 버블정렬과 마찬가지로 성능이 좋지 않음시간 복잡도: O(n^2)-삽입정렬장점: 버블정렬, 선택정렬과 마찬가지로 이해와 구현이 간단단점: 버블, 선택정렬과 마찬가지로 성능이 좋지 않음시간 복잡도: O(n^2)-병합정렬장점: 성능이 좋음단점: 이해와 구현이 어려움시간 복잡도: O(nlogn)-퀵정렬장점: 병합정렬과 동일단점: 병합정렬과 동일시간 복잡도: 평균적으로 세타(nlogn), 최악의 경우 O(n^2)메모리가 부족한 시스템에서 어떤 문제를 해결하는데 재귀로 쉽게 구현이 가능할 것 같습니다. 여러분이라면 메모이제이션과 타뷸레이션 중 어떤 걸 이용하실 건가요? 이유를 함께 적어주세요. 메모이제이션은 재귀를 통해 문제를 하향식으로 해결합니다. 재귀만 이용한다면 성능에 문제가 발생하는데 이를 계산 결과를 저장하는 것으로 보완했습니다. 메모이제이션은 많은 메모리를 사용하여 성능을 향상시킵니다. 따라서 재귀가 직관적일 때는 메모이제이션을 사용합니다. 재귀가 직관적이지 않을 땐 상향식 조건인 타뷸레이션을 이용해 메모리도 절약하고 속도도 빠르게 해결할 수 있습니다. 메모리가 부족한 시스템이지만 재귀로 쉽게 구현이 가능할 것 같으므로 메모이제이션을 사용하는 것이 좋을 것 같다고 생각합니다.
알고리즘 · 자료구조
2024. 10. 11.
0
[2주차] 발자국
강의 수강이번 2주차에는 데이터 리포지토리를 개발하고 테스트 코드를 작성하고, 성능을 개선하는 것과 클래스를 생성하고 DTO 개발, 리포지토리, 서비스 개발과 서비스 테스트 코드를 작성하는 것을 배웠다.이번 주차 강의를 들으면서 가장 뿌듯했던 점은 강의를 밀리지 않고 모두 맞춰 수강했다는 점이다. 아쉬웠던 점은 아직 코드들이 어떻게 연결되고 하는 지 완벽하게 이해한 것은 아니기 때문에 추가적으로 공부를 해야 함을 느꼈다는 것이다. 강의를 들으면서 테스트 코드를 작성하다 오류가 발생하였었는데 원인을 모르겠어서 질문을 통해 해결했다. 테스트 코드에 문제가 있는 것은 아니고 프로덕션 코드에 문제가 있었는데 엔티티간 cascade 옵션이 설정되지 않아 발생한 것이었다. cascade Type은 영속성의 전이에 대한 설정인데, 영속성 컨텍스트에 특정 엔티티가 PERSIST, MERGE, REMOVE, DETACH 등이 될 때 그 엔티티와 연관된 다른 엔티티도 똑같이 상태를 전이할 지 말 지에 대한 것이었다. 미션이번 미션은 REST API 설계하기였다. 아직 java나 강의에서 사용하는 방식에 대해 익숙하지 않은 상황이라 테이블 설계를 간단하게 했어서, 설계할 api도 많지 않았던 것 같다. 지난 미션 때 마크다운 작성 방식을 구글링하여 했어서 이번에도 그때 그 내용을 참고하여 readme파일에 작성하였다. 나중에 조금 더 익숙해진 다음에는 테이블도 확장시켜서 조금 더 많은 서비스들을 제공할 수 있게끔 해보고 싶단 생각이 들었다.
백엔드
2024. 10. 11.
1
[2주차] 발자국
강의수강이번 2주차 강의에서는 재귀와 정렬에 대해 배웠다. 개념적인 부분들을 듣고 나서 직접 코드를 작성하여 구현해보니 이해가 더 잘 되고 좋았다. 저번 주차 때에 강의가 밀리면서 다음 주차 부터는 밀리지 않도록 해야 겠다고 했는데, 이번에는 밀리지 않고 들어야 할 강의들을 제 때에 맞춰 모두 수강하여 뿌듯했다. 미션for함수를 자꾸 재귀함수를 구현하는 데 사용하게 되어 어려움을 겼었다. 강의를 다시 한번 더 복습하고 작성하기도 하고, 기존 강의에서 구현했었던 다른 재귀함수들 코드를 보면서 점차 어떻게 구현해야 될 지 알게 되었다. 다른 질문들도 강의를 들을 때는 이해했었는데 막상 질문을 보니 어떻게 설명해야 할 지 딱 떠오르지 않아 강의를 복습하고 나서야 다시 작성할 수 있었다.
알고리즘 · 자료구조
2024. 10. 11.
1
CS_전공지식_두번째미션
운영체제 1. FIFO 스케줄링의 장단점이 뭔가요?장점은 단순하고 직관적입니다. 단점은 한 프로세스가 끝나야 다음 프로세스가 실행되기 때문에 먼저 도착한 프로세스의 실행 시간이 길고, 나중에 도착한 프로세스의 실행 시간이 짧아도 먼저 도착한 프로세스의 실행이 다 끝날 때 까지 기다려야 합니다. 입출력 작업이 있을 때, cpu는 입출력 작업이 끝날 때까지 쉬고 있기 때문에 cpu 사용률이 떨어지게 됩니다. 2. SJF를 사용하기 어려운 이유가 뭔가요?첫 번째 문제는 어떤 프로세스가 얼마나 실행될 지 모른다는 것입니다. 두 번째 문제는 버스트 타임이 긴 프로세스는 아주 오랫동안 실행 되지 않을 수도 있다는 것입니다. SJF는 버스트 타임이 짧은 프로세스를 먼저 실행하기 때문에 중간에 버스트 타임이 짧은 프로세스들이 계속 들어오게 된다면 버스트 타임이 긴 프로세스는 계속해서 뒤로 밀려나게 됩니다. 3. RR 스케줄링에서 타임 슬라이스가 아주 작으면 어떤 문제가 발생할까요?타임 슬라이스가 아주 작으면 컨텍스트 스위칭이 너무 자주 일어나게 되고, 타임 슬라이스에서 실행되는 프로세스 처리량보다 컨텍스트 스위칭을 처리하는 양이 더 많아져 오버헤드가 너무 커집니다. 4. 운영체제가 MLFQ에서 CPU Bound Process와 I/O Bound Process를 어떻게 구분할까요?cpu를 실행하는 프로세스가 실행하다가 스스로 반납하면 cpu 사용이 적은 것이므로 이는 I/O Bound Process일 확률이 큽니다. cpu를 실행하는 프로세스가 실행하다가 타임 슬라이스에 의해 cpu 사용을 뺏기면 cpu 사용이 많은 것이므로 CPU Bound Process일 확률이 큽니다. 5. 공유자원이란무엇인가요?프로세스 간 통신을 할 때, 공동으로 이용하는 변수나 파일들을 말합니다. 6. 교착상태에 빠질 수 있는 조건은 어떤 것들을 충족해야 할까요?'총 4가지 조건이 있는데 하나라도 충족하지 않으면 교착상태가 일어나지 않습니다.첫 번째는 상후배제입니다. 어떤 프로세스가 리소스를 점유했다면 이 리소스는 다른 프로세스에게 공유될 수 없습니다.두 번째는 선점입니다. 어떤 프로세스가 리소스를 점유하고 있다면 다른 프로세스는 이 리소스를 뺏을 수 없습니다.세 번째는 점유와 대기입니다. 어떤 프로세스가 리소스를 점유하고 있을 때, 다른 프로세스는 이 리소스를 원하고 있어야 합니다.네 번째는 원형 대기입니다. 점유와 대기를 하는 프로세스들의 관계가 원형을 이루어야 합니다. 자료구조와 알고리즘 1. 재귀함수에서 기저조건을 만들지 않거나 잘못 설정했을 때 어떤 문제가 발생할 수 있나요?함수가 본래의 목적대로 작동하지 않을 수 있습니다. 함수가 계속해서 실행되어 메모리가 다 차면 종료가 되어 버려 함수를 통해 얻으려던 값을 얻지 못할 수 있습니다. 2. 0부터 입력 n까지 홀수의 합을 더하는 재귀 함수를 만들어보세요.function sumOdd(n){ // 재귀 로직 if(n == 0){ return 0; }else if(n % 2 != 0){ return sumOdd(n - 1) + n; }else{ return sumOdd(n - 1); } } console.log(sumOdd(10)) // 25
알고리즘 · 자료구조
2024. 10. 06.
1
[1주차] 발자국
강의수강이번 1주차 강의를 수강하면서 자료구조들을 구현해보고 운영체제와 프로세스 쓰레드 등을 배웠다. 학교에서 강의를 들었을 때 제대로 이해하지 못했던 부분들을 다시 한번 더 되새겨 볼 수 있었다. 한번 더 배워보니 처음에 들었을 때보다 조금 더 이해가 되는 것 같았다. 하루 치 들어야 할 강의는 꼭 그 하루에 다 들어서 미션을 할 때에도, 강의를 이해하는 데에도 더 여유가 생기도록 해야겠다고 생각했다.미션미션을 하면서 강의를 들을 때는 이해를 했었는데 막상 미션의 질문들을 보니 바로 떠오르지는 않아서 봤었던 강의를 다시 한번 더 복습하게 되었다. 그래도 다시 한번 더 들으니 그리 어렵지 않게 미션을 해낼 수 있었던 것 같다.
알고리즘 · 자료구조
2024. 10. 06.
0
[1주차] 발자국
강의 수강이번 1주차 동안 강의를 통해 웹 개발 이론 지식들, 프로젝트를 만드는 방법, 개발 환경 구성, git 사용 방법, 기본적인 엔티티 개발에 대해 배웠다.일주일 동안 강의를 듣고 실습을 진행하면서, 2-3일 분량을 하루에 몰아서 들어야 했었는데 밀리다 보니 확실히 조급한 마음이 많이 들었다. 그러다 보니 강의를 온전히 이해하는 데에도 어려움을 느끼곤 했다. 다음 주 강의를 들을 때에는 밀리지 않고 하루에 들어야 하는 강의를 꼭 들어야겠다고 생각했다. 그래도 밀린 양을 주차 내에는 모두 해내어 뿌듯하기도 했다. 미션이번 미션은 1:N 테이블 설계하기, 깃허브 리포지토리 만들기였다.처음에는 미션을 제대로 이해하지 못했지만, 디스코드 채널에 질문을 함으로써 미션에 대해 정확히 이해할 수 있었다. 초반에는 미션을 진행하는 것이 그저 막막하게만 느껴졌는데, 참고 자료들을 보기도 하고, 다른 러너분들이 올리신 것들과 강의에서 진행한 실습을 참고하면서 어떻게 해야 하는지 어느 정도 감을 잡아나가게 되었다.
백엔드
2024. 10. 03.
1
CS_전공지식_첫번째미션
운영체제 while(true){ wait(1); // 1초 멈춤 bool isActivated = checkSkillActivated(); // 체크 }위 코드는 1초 마다 플레이어가 스킬을 사용했는지 체크하는 코드입니다.이 방식은 폴링방식입니다.1초마다 체크하기 때문에 성능에 좋지 않습니다.이를 해결하기 위한 방식으로 어떤 걸 이용해야 할까요?폴링 방식의 단점을 보완한 인터럽트 방식을 사용할 수 있습니다. 인터럽트는 다음과 같은 과정으로 진행됩니다. cpu가 입출력 관리자에게 입출력 명령을 내리고 다른 작업을 합니다. 입출력 관리자가 입출력이 완료됐을 때 cpu에게 신호를 주고 cpu는 그 신호를 받아서 인터럽트 서비스 루틴을 실행시켜 작업을 완료합니다. 2. 프로그램과 프로세스가 어떻게 다른가요?프로그램은 하드디스크 등과 같은 저장장치에 저장된 명령문의 집합체입니다. 프로세스는 간단하게 실행 중인 프로그램이라고 할 수 있습니다. 하드디스크에 저장된 프로그램이 메모리에 올라갔을 때 실행 중인 프로그램을 프로세스라고 부릅니다. 3. 멀티프로그래밍과 멀티프로세싱이 어떻게 다른가요?멀티 프로그래밍은 메모리에 여러 개의 프로세스가 올라온 것이고, 멀티프로세싱은 cpu가 여러 개의 프로세스를 처리하는 것입니다. 4. 운영체제는 프로세스를 관리하기 위해서 어떤 것을 사용하나요?운영체제는 여러 개의 프로세스를 전부 관리하고 공평하게 실행시켜야 합니다. 프로세스가 만들어지면 운영체제는 해당 프로세스의 정보를 가지고 pcb라는 것을 만들고 저장합니다. pcb들은 연결리스트라는 자료 구조로 저장됩니다. 운영체제는 프로세스가 종료되면 연결리스트에서 해당 pcb를 제거합니다. 이러한 과정으로 운영체제는 프로세스를 관리하기 위해서 pcb를 사용합니다. 5. 컨텍스트 스위칭이란 뭔가요?컨텍스트 스위칭은 프로세스를 실행하는 중에 다른 프로세스를 실행하기 위해 기존에 실행중이던 프로세스를 저장하고 실행할 프로세스의 상태값으로 교체하는 것입니다. 자료구조와 알고리즘 1. 여러분은 교실의 학생 정보를 저장하고 열람할 수 있는 관리 프로그램을 개발하려고 합니다.이 때 여러분이라면 학생의 정보를 저장하기 위한 자료구조를 어떤 걸 선택하실 건가요?이유를 함께 적어주세요.덱을 선택할 것입니다. 교실의 학생은 보통 가나다 순으로 번호를 부여받습니다. 새로 들어오는 학생이 들어와 있는 학생 보다 뒷 번호를 받을 수도 있고 앞 번호를 받을 수도 있기 때문에 양쪽에서 데이터를 삽입할 수 있는 덱이 가장 적절할 것 같습니다. 2. 여러분은 고객의 주문을 받는 프로그램을 개발하려고 합니다. 주문은 들어온 순서대로 처리됩니다. 이 때 여러분이라면 어떤 자료구조를 선택하실 건가요? 이유를 함께 적어주세요.큐를 선택할 것입니다. 큐는 먼저 들어온 데이터를 먼저 처리합니다. 이는 먼저 들어온 주문이 가장 먼저 나가야 하는 주문을 받는 프로그램과 동일한 처리 과정이라 생각하기 때문입니다.
컴퓨터 구조