전체 글 98

스레드와 멀티태스킹 서술형 풀어보기

1. ‘프로세스의 스레드의 차이 점이 무엇인지 설명해보라’. 스레드가 왜 프로세스보다 나은 실행 단위인지가 잘 드러나도록 진지하게 설명하라. 2. 스레드의 컨텍스트란 어떤 정보를 말하는가? 그리고 이 정보는 어디에 저장되는가? 3. 스레드의 주소 공간에 대해 1) 스레드의 주소 공간은 어디에 만들어지는가? 2) 하나의 스레드가 실행되기 위해 주어지는 주소 공간은 어떤 영역으로 나뉘는가? 각각에 대 해 간단히 설명하라. 3) 이 중에서 다른 스레드와 공유하지 않고 스레드만 사용하는 공간은 무엇인가? 4. 프로세스 1에 속한 스레드에서 프로세스2가 속한 스레드로 컨텍스트 스위칭이 일어나는 경 우가, 프로세스1에 속한 다른 스레드로 컨텍스트 스위칭되는 경우에 비해 추가적으로 더 필요 한 작업은 무엇인가? 5...

요구사항 보고 ERD작성 및 논리적 스키마 도출 방법

문제 제기 프로젝트를 하면서 경험한 일 입니다. 요구사항에 분명히 기재되어 있는 사실 혹은 요구사항에 반영을 미처 못해 실제 설계 과정에서 누락된다면 추후에 데이터베이스를 구축하여 운용할 때 관리해야 할 사실들을 저장하지 못하는 경우가 발생합니다. 예를들어 회원이 삭제된다면 외래키로 갖고 있던 주문 테이블이 문제가 생기기 때문에 회원을 완전 삭제하는 대신 status 필드명을 추가하여 상태만 변경하는 식으로 문제를 해결해야 합니다. 하지만 저는 이러한 문제가 생길지 예상하지 못하여 회원테이블에 status필드명을 추가하지 않았고 추후에 이 문제를 발견하여 테이블을 나중에 수정을 하게 되었습니다. 규모가 작은 프로젝트에서는 뭐 이러한 문제가 생겨도 그때 그냥 바로바로 테이블을 수정하지 뭐 이런 마인드가 별..

[백준 9466] 텀프로젝트

이 문제는 DFS 알고리즘을 사용하여 사이클을 이루지 않는 사람의 수를 구하는 문제 입니다. 내 풀이 방향그래프에서의 사이클이 존재하는 지의 여부는 간선 구분을 통해 판정할 수 있습니다. 사이클이 존재한다는 것은 역방향 간선의 여부와 동치인데 그전에 역방향간선에 대해 간단하게 살펴보자면 그래프에서 Ti부터 DFS알고리즘을 돌리면 트리형태를 띠게됩니다. 그러한 트리를 DFS 스패닝 트리라고 합니다. (Tm, Tj)의 간선은 스패닝트리의 자손에서 선조로 연결된 간선인 역방향 간선입니다. 그래서 사이클이 있는 그래프를 깊이우선탐색을 할 경우 무슨일이 벌어질지 생각해보면 쉽게 이해를 할 수 있습니다. 사이클에 포함된 정점 중 깊이 우선 탐색과정에서 처음만나는 정점을 u(Tj)라고 합시다. dfs(u)는 u에서 ..

Algorithm/BOJ 2023.06.03

프로세스와 프로세스 관리 서술형 풀어보기

1. 운영체제는 프로그램을 적재하여 프로세스를 만든다. 3장 전체를 공부한 결과 프로세스를 만든다는 의미가 무엇인지 나름대로 긴 3줄로 설명하라. 2. 다음과 같이 동적 할당받은 후 반환하지 않고 종료하는 응용프로그램을 작성하였다. int main() { char* p = (char*)malloc(100000); .... // free(p); exit(0); } (1) 이 프로그램이 실행 중에 malloc(100000)를 호출하면 물리 메모리에 100000 바이트가 할 당되는가? 가상 주소 공간에서 할당되는가? (2) 포인터 변수 p의 값이 30000이다. 30000 번지는 가상주소인가 물리 주소인가? (3) 만일 malloc(100000)가 메모리가 부족하다고 NULL을 리턴한다면 그것은 물리 메모리 ..

말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 3편

https://babgeuleus.tistory.com/67 말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 2편 https://babgeuleus.tistory.com/59 말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 1편 개요 프로젝트를 진행하면서 가끔씩 service부분에서 @Transaction이 readOnly=true로 되어있어 현재 수행하는 babgeuleus.tistory.com 이전 시간에는 트랜잭션의 장애와 로그 회복기법에 대해 배웠습니다. 이번 시간에는 병행 제어에 대해 배우겠습니다. 문제의식 데이터베이스 관리 시스템은 여러 사용자가 데이터베이스를 동시에 공유할 수 있도록 여러 개의 트랜잭션이 동시에 수행되는 병행수행을 지원합니다. 병행수행은 실제로 여러 트랜..

말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 2편

https://babgeuleus.tistory.com/59 말만 들어도 어려워 보이는 트랜잭션에 대해 자세히 살펴보자 1편 개요 프로젝트를 진행하면서 가끔씩 service부분에서 @Transaction이 readOnly=true로 되어있어 현재 수행하는 작업 단위(save,update등)가 불가능하다는 오류가 발생했다는 에러코드가 뜹니다. 물론 제가 babgeuleus.tistory.com 이전 시간에는 트랜잭션의 특성과 상태에 대해 공부를 하였습니다. 이번 시간에는 장애와 회복에 대해 공부를 해보겠습니다. 장애와 회복 회복이란 장애가 발생하였을 때 데이터베이스를 장애가 발생하기 전의 일관된 상태로 복구시키는 것을 말합니다. 그렇다면 장애는 어떤 유형을 말하는 걸까요? 1. 트랜잭션 장애 트랜잭션의 논..

14주차 CafeMate 주문 관리 프로세스 구현

어느새 인증 구현, 메뉴구현에 이어 가장 중요하다 싶은 주문 관리 페이지를 만들어 보도록 하겠습니다. 시나리오 1. 고객이 주문을 했을 때, 직원이 주문 등록 페이지에서 쉽게 주문 정보를 입력한다. 2. 직원은 간단한 폼을 사용하여 필요한 정보(이름,연락처,주문내역 등)을 입력하도록 한다. 3. 주문 등록 페이지에 주문 상태(조리중, 조리완료, 배달중,배달완료)를 등록하고 추후 변경할 수 있도록 합니다. 4. 메뉴 품절정보를 표시하여 직원들이 주문시 품절된 품목을 확인할 수 있도록 합니다. 일단 UI를 보면 로직을 짜기 쉽기에 이런식으로 만들면 될듯 합니다. 다시 정확하게 컨트롤러에 넘길 데이터를 알기 위해 주문 테이블 스키마를 자세히 살펴보겠습니다. 그리고 팀원이 짠 OrderService 코드중 주문..

이벤트 처리기가 동적으로 생성된 요소에 이벤트를 처리 못했던 이유

https://babgeuleus.tistory.com/58 14주차 CafeMate 주문 관리 프로세스 구현 babgeuleus.tistory.com 다음 글에서 진행중 메뉴들을 동적으로 받아오고 동적으로 받아온 메뉴들에 +와 -버튼에 클릭이벤트를 달아주었습니다. 문제 제기 //+버튼 구현 $(".increase-qty").click(function() { console.log("도착"); let menuValue = $(this).attr("id").replace("-plus", ""); let menuPrice = parseInt($(this).data("price")); let currentQty = parseInt($("#" + menuValue + "-qty").val()); $("#" + m..

공부방/jQuery 2023.05.24

시스템호출과 인터럽트 서술형 풀어보기

1. 사용자 공간과 커널 공간에 대해 1) 사용자 공간과 커널 공간에는 각각 무엇이 적재되는가? 2) 사용자 공간과 커널 공간을 두는 이유는 무엇인지 최소 3줄 정도로 기술하라. 2. 사용자 모드와 커널 모드에 대해 1) 사용자 모드와 커널 모드를 간단히 설명하라. 2) 사용자 모드와 커널 모드로 나눈 이유는? 3) 어떤 경우에 CPU가 사용자 모드에서 커널 모드로 바뀌는가? 경우를 나열하고 설명하라. 3. 32비트 Windows 운영체제에서 사용자 영역의 크기를 2GB로 정하였을 때, 응용프로그램 과 라이브러리에 관해 답하라. 1) 여러분이 작성한 응용프로그램의 크기란 어떤 크기를 말하는가? 다른 말로 무엇을 합친 크 기인가? 2) 응용프로그램에서 printf()를 호출한다고 하자. printf() 함..

[백준 15486] 퇴사2

https://www.acmicpc.net/problem/15486 남은 N일 동안 최대한 많은 상담을 하려고 한다. 쉽게 생각해보면 day[상담을 잡은 날] = ? //?: ex=3 상담을 잡은 날 + day[상담을 잡은 날] =>ex) 1+array[1] = 1+3 = 4 // 4일째부터 가능 result+=profit[상담을 잡은 날] 일단 가장먼저 생각나는 dfs를 이용한 완전탐색으로 풀어보면 #include #include #include using namespace std; int N; int day[1500001]; int profit[1500001]; int maxRes = -10000; void dfs(int 상담날짜,int 총금액) { int 금액 = profit[상담날짜]; 총금액 +..

Algorithm/BOJ 2023.05.23