본문 바로가기

공부 기록

(319)
비동기 프로그래밍, 비동기 I/O, 비동기 커뮤니케이션.. 비동기(asynchronous)라는 .. 참 많이 사용하는데요~ 각 맥락에 따른 의미를 설명합니다~ https://youtu.be/EJNBLD3X2yg Synchronous programming - 여러 작업(task)들을 순차적으로 실행하도록 개발 Asynchronous(비동기) programming - 여러 작업들을 독립적으로 실행하도록 개발 asynchronous programming != multithreading - asynchronous programming : 어러 작업을 동시에 실행하는 프로그래밍 방법론 - multithreading : asynchronous programming의 한 종류 - Asynchronous programming을 가능하게 하는 것 => multi-threads, non-block I/O - 백엔드 프로그래밍의 추세는 스레드를 적게 쓰면서도 non-block I..
[OS/공룡책] Chapter 3. 프로세스 - 프로세스 간 통신 프로세스 간 통신 - 프로세스가 시스템에서 실행 중인 다른 프로세스들과 데이터를 공유하지 않는 프로세스는 독립적이다. 프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받는다면 이는 협력적인 프로세스들이다. - 협력적 프로세스들은 데이터를 교환할 수 있는, 즉 서로 데이터를 보내거나 받을 수 있는 프로세스 간 통신(interprocess communication, IPC) 기법이 필요하다. - 프로세스 간 통신에는 기본적으로 두 가지 모델이 있다. => 공유 메모리와 메시지 전달 - 공유 메모리 모델 : 공유 메모리 영역을 구축할 때만 시스템 콜이 필요하며, 공유 메모리 영역이 구축되면 모든 접근은 일반적인 메모리 접근으로 취급되어 커널의 도움이 필요 없다. 메시지 전달 모델보다 더 빠르다..
Do it! 알고리즘 코딩테스트 with JAVA - (15) 이진 탐색 이진 탐색 - 데이터가 정렬돼 있는 상태에서 원하는 값을 찾아내는 알고리즘 - 대상 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 줄이면서 대상을 찾는다. - 시간 복잡도는 O(logN)이다. - 정렬 데이터에서 원하는 데이터를 탐색할 때 사용하는 가장 일반적인 알고리즘이다. 핵심 이론 - 오름차순으로 정렬된 데이터에서 아래의 4가지 과정을 반복하며, 내림차순이라면 조건을 반대로 하여 과정을 반복한다. 현재 데이터셋의 중앙값을 선택한다. 중앙값 > 타깃 데이터일 때 중앙값 기준으로 왼쪽 데이터셋을 선택한다. 중앙값 < 타깃 데이터일 때 중앙값 기준으로 오른쪽 데이터셋을 선택한다. 과정 1~3을 반복하다가 중앙값 == 타깃 데이터일 때 탐색을 종료한다. 문제 풀이 https://yuri..
Do it! 알고리즘 코딩테스트 with JAVA - (14) BFS(너비 우선 탐색) BFS(너비 우선 탐색) - 그래프를 완전 탐색하는 방법 중 하나 - 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘 - 탐색 시작 노드와 가까운 노드를 우선하여 탐색하므로 목표 노드에 도착하는 경로가 여러 개일 때 최단 경로를 보장한다. - 특징 : FIFO 탐색, 큐 자료구조를 이용한다. - 시간 복잡도는 O(V + E)이며, 여기서 V는 노드 수, E는 엣지 수를 말한다. BFS 과정 BFS를 시작할 노드를 정한 후 사용할 자료구조를 초기화한다. 큐에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 큐에 삽입한다. 큐 자료구조에 값이 없을 때까지 반복한다. 문제 풀이 https://yurison.tistory.com/555 [백준/자바] 1260 - DFS..
[JPA] 5장 - 연관관계 매핑 기초(1) - 단방향 연관관계 단방향 연관관계 - 객체 연관관계 : 회원 객체와 팀 객체는 단방향 관계다. => 회원은 Member.team 필드를 통해서 팀을 알 수 있지만 반대로 팀은 회원을 알 수 없다. - 테이블 연관관계 : 회원 테이블과 팀 테이블은 양방향 관계다. 회원 테이블의 TEAM_ID 외래 키를 통해서 회원과 팀을 조인할 수 있고 반대로 팀과 회원도 조인할 수 있다. - 객체 연관관계와 테이블 연관관계의 가장 큰 차이 - 참조를 통한 연관관계는 언제나 단방향이다. 객체 간에 연관관계를 양방향으로 만들고 싶으면 반대쪽에도 필드를 추가해서 참조를 보관해야 한다. => 정확히 이야기하면 이것은 양방향 관계가 아니라 서로 다른 단방향 관계 2개다. 객체 연관관계 VS 테이블 연관관계 정리 - 객체는 참조(주소)로 연관관계를..
[OS/공룡책] Chapter 3. 프로세스 - 프로세스 개념, 프로세스 스케줄링, 프로세스에 대한 연산 프로세스 개념 프로세스 - 프로세스란 실행 중인 프로그램이다. - 프로세스의 메모리 배치는 일반적으로 여러 섹션으로 구분된다. - 텍스트 섹션 : 실행 코드 - 데이터 섹션 : 전역 변수 - 힙 섹션 : 프로그램 실행 중에 동적으로 할당되는 메모리 - 스택 섹션 : 함수를 호출할 때 임시 데이터 저장 장소(예 : 함수 매개변수, 복귀 주소 및 지역 변수) - 스택 및 힙 섹션은 프로그램 실행 중에 동적으로 줄어들거나 커질 수 있다. 스택 및 힙 섹션이 서로의 방향으로 커지더라도 운영체제는 서로 겹치지 않도록 해야 한다. - 프로그램 그 자체는 프로세스가 아니다. - 프로그램은 명령어 리스트를 내용으로 가진 디스크에 저장된 파일(실행 파일이라고 불림)과 같은 수동적인 존재(passive entity)이다...
[10분 테코톡] 카프카의 탐색 알고리즘 https://youtu.be/By77aC9Oe3Q - 탐색 알고리즘 : 그래프의 모든 정점들을 특정한 순서에 따라 방문하는 알고리즘 그래프 - 정점과 간선으로 구성된, 한정된 자료구조 - 각각의 지점을 정점, 정점과 정점의 연결을 간선이라고 한다. DFS(깊이 우선 탐색) - 가장 직관적이고 구현하기 쉬운 탐색 방법 - 현재 정점과 연결된 정점들을 하나씩 갈 수 있는지 검사하고, 특정 정점으로 갈 수 있다면 그 정점에 가서 같은 행위를 반복한다. - 같은 정점을 다시 방문하지 않도록 정점에 방문했다는 것을 표시해준다. - 재귀 함수를 통해 구현한다. - 단점 : 재귀 함수를 이용하기 때문에 함수 호출 비용이 추가로 들어가며, 재귀 깊이가 지나치게 깊어지면 메모리 비용을 예측하기 어렵다. 최단 경로를 알..
Do it! 알고리즘 코딩테스트 with JAVA - (13) DFS(깊이 우선 탐색) DFS(깊이 우선 탐색) - 그래프 완전 탐색 기법 중 하나 - 그래프의 시작 노드에서 출발하여 탐색할 한 쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘 - 특징 : 재귀 함수로 구현되며,(스택 오버플로에 유의) 스택 자료구조를 이용하기도 한다. - 시간 복잡도는 O(V + E)이며, 여기서 V는 노드 수, E는 엣지 수를 말한다. 핵심 이론 - 한 번 방문한 노드를 다시 방문하면 안 되므로 노드 방문 여부를 체크할 배열이 필요하다. - 탐색 방식은 후입선출 특성을 가진다. DFS 과정 DFS를 시작할 노드를 정한 후 사용할 자료구조를 초기화한다. 스택에서 노드를 꺼낸 후 꺼낸 노드의 인접 노드를 다시 스택에 삽입한다.(방문 배열 체크) 스택 자료..