개발자 면접 공부 111

리틀 엔디안 vs 빅 엔디안

오늘은 리틀 엔디안 vs 빅 엔디안 에 대해서 공부하도록 하겠습니다. 엔디안 이란? 엔디안 은 컴퓨터 메모리와 같이은 1차원의 공간에서 여러 개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법을 특히 바이트 순서(Byte order) 라고 한다. 엔디안은 보통 큰 값이 앞에 나오는 빅-엔디안과 작은 값이 앞에 나오는 리틀-엔디안으로 나눌수 있으며, 두 경우에 속하지 않거나 둘을 모두 지원하는 것을 미들-엔디안이라 부릅니다. 빅-엔디안은 최상위 바이트부터 차례대로 저장하는 방식 리틀-엔디안은 최하위 바이트부터 차례대로 저장하는 방식 그럼 최상위 최하위란 무엇인가? 여기서 빅-엔디안은 사람이 숫자를 세는것처럼 큰 단위에 바이트가 앞에 오는 방식이고 리틀-엔디안은 그 반대로 작은 단위가 앞으..

SQL vs NoSQL

오늘은 SQL 과 NoSQL에 특징과 장,단점에 대해 공부하겠습니다. SQL 과 NoSQL SQL과 NoSQL은 보통 관계형이냐 아니냐에 따라 달라집니다. SQL은 보통 관계형 데이터 베이스라고 합니다. 그럼 반대인 NoSQL은 비 관계형 데이터 베이스입니다. 각각에 특징을 살펴 보도록 하겠습니다. SQL SQL은 관계형 DB입니다. RDBMS(Relational DataBase Management System) 에서 데이터를 저장, 수정, 삭제 및 검색이 가능합니다. RDBMS에는 핵심적인 특징이 있습니다. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 관계를 통해 여러 테이블에 분산된다. 여기서 스키마란 DB의 명세표라고 생각하면 쉽습니다. 데이터는 테이블에 레코드로 저장되는데, ..

쉐이더란? (사용 이유)

오늘은 왜 쉐이더를 사용하며 쉐이더에 대한 이해에 대해 공부하겠습니다. 쉐이더란?(Shader) 3D 컴퓨터 그래픽에서 최종적으로 화면에 출력하는 픽셀의 색을 정해주는 함수 쉐이더는 말 그대로 함수입니다. 조금 더 쉽게 설명하자면 Shader는 Shade + er 입니다. shader라는 영어의 정의는 색의 농담, 색조, 명암 효과를 주는 주체 라는 뜻이 있습니다. 렌더링 파이프라인 전에 포스팅 했던 렌더링 파이프 라인중에 각각 뒤에 쉐이더 라는 이름을 붙인 파이프 라인들을 소개했습니다. 지금 생각하고 계신게 맞습니다. 각각 파이프라인의 쉐이더들은 화면에 최종적으로 출력해주기 위해 각각 기능을 통해 나누었던 것 이였습니다. IA-> VS->hull shader(HS)->테셀레이션->Domaion Shad..

C++ 객체지향 언어 4가지 특징

오늘은 객체지향 언어 5가지 특징에 대해 공부하겠습니다. 개요 객체지향 언어는 실제 세상의 사물의 개념을 프로그램에서 객체라고 부르며 이러한 프로그램 기법은 프로그래머들에게 매우 직관적으로 표현할수 있어 좋습니다. 다만 절차지향 언어 보단 속도가 느리다는게 매우 단점입니다. 객체지향 언어의 4가지 특징에 대해 알아보도록 하겠습니다. 1. 캡슐화 캡슐화는 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것을 의미합니다. 캡슐화된 객체의 세부 내용이 외부에 은폐(정보 은닉)되어, 변경이 발생할 때 오류의 파급 효과가 적음 캡슐화된 객체들은 재사용이 용이 객체들 간의 메시지를 주고 받을 때 각 객체의 세부 내용은 알 필요가 없으므로 인터페이스가 단순해지고, 객체간의 결합도가 낮아짐 흔히 Class를 선언..

A* 알고리즘

오늘은 A*알고리즘의 대해 공부하겠습니다. A* 최단 경로 탐색 알고리즘 중 A* 알고리즘은 다익스트라 알고리즘의 확장 개념으로 만들어진 알고리즘입니다. 주로 게임에서 플레이어를 목표지점으로 이동시킬 때 사용하는 알고리즘으로 대표적인 그래프 탐색 알고리즘들과 A*의 차이점은 BFS 는 가중치가 없는 그래프에서 최단 경로를 찾는 완전 탐색 알고리즘 다익스트라는 가중치 그래프에서 시작 노드를 기준으로 모든 노드까지의 최단거리를 구하는 그리디 알고리즘입니다. 반면 A*는 가중치 그래프에서 시작 노드에서 목표 노드까지의 최단 경로만 구하려 하는 그리디 알고리즘 입니다. A*의 개념 A* 알고리즘은 휴리스틱 추정값을 통해 알고리즘을 개선할 수 있습니다. 이러한 휴리스틱 추정값을 어떤 방식으로 제공하느냐에 따라 얼..

쓰레드 풀링, 메모리 풀링

오늘은 쓰레드 풀링에 대해 공부하도록 하겠습니다. 쓰레드 풀링 풀이란 연못이라는 뜻 입니다. 저희가 익히 알고있는 게임 스타크래프트 에서도 스포닝 풀 이라는 건물이 있습니다. 이것을 번역하면 산란못으로 풀 = 못 -> 연못 이라는 뜻이 있고 실제로 건물 자체가 초록색 연못이 가운데 있습니다. 그럼 왜 쓰레드 풀링을 사용하는지 이유를 알아봅시다. 쓰레드 풀에 대한 이해 쓰레드의 생성과 소멸은 시스템에 많은 부담 때문에 빈번한 쓰레드의 생성과 소멸은 피해야 성능이 향상됨 따라서 쓰레드 풀을 유지하는 것은 성능 향상에 도움이 됨 쓰레드의 재활용 기법 ( 할당된 일을 마친 쓰레드를 소멸시키지 않음, 쓰레드 풀이라는 큐에 저장시켜놓고 다시 꺼내 쓰는 개념) 즉, 쓰레드의 생성과 소멸에 필요한 비용을 지불하지 않겠..

블로킹(Blocking), 논 블로킹(Non-Blocking), 동기(Sync), 비동기(ASync)

오늘은 블로킹, 논 블로킹 추가로 동기, 비동기에 대해 알아보겠습니다. 동기&비동기 vs 블로킹&논블록킹 개념 차이 이 개념들을 처음 접하거나 컴퓨터 공학에 대해 잘 모르는 사람은 이 개념들이 서로 뭔가 연관이 있는 것으로 오해하기 쉽다. 아무래도 동기와 블록킹, 비동기와 논블록킹의 작동 매커니즘이 더 직관적이기 때문에 많은 사람들이 이 개념들을 같은것 혹은 비슷한 것으로 오해하고 있다. 이 두가지 개념은 서로 전혀 다른 곳에 초점을 맞춘 개념들이므로 서로 직접적인 관련은 거의 없다고 봐도 된다. 단지 조합하여 사용되는 것 뿐이다. 다음의 두 용어를 짚고 넘어야 한다. -제어권 : 제어권은 자신(함수)의 코드를 실행할 권리 같은 것이다. 제어권을 가진 함수는 자신의 코드를 끝까지 실행 한 후, 자신을 호..

IOCP 서버

오늘은 IOCP서버에 대해 알아보겠습니다. IOCP IOCP는 Window 환경에서 작동하는 제일 흔히 쓰이는 논 블로킹 프로세스이다. 최소한의 쓰레드로 최대한의 효율을 뽑을 수 있다. 이름의 뜻을 알아보자. IOCP는 IO Completion Port의 약자로 입출력 완료 포트라는 뜻이다. 여기서 사용하는 Port는 통신에서 사용하는 포트와 비슷한 의미로 어떤 항구, 그러니깐 목적지라는 의미이다. 하지만 직접적으로 통신에서 사용하는 포트와는 전혀 다른 포트로 처음 공부할 때는 혼란이 올수 있다. 그럼 논 블로킹이란 무엇인가? 블로킹 vs 논 블로킹 처리되어야 하는 작업이, 전체적인 작업 '흐름' 을 막느냐 안막느냐에 대한 관점 제어권이 누구한테 있는것느냐의 관심 블록킹(Blocking) 자신의 작업을 ..

다익스트라 vs BFS

오늘은 다익스트라(dijkstra)와 BFS의 차이점을 공부하겠습니다. 다익스트라 vs BFS 둘다 그래프 탐색 알고리즘 입니다. 두개의 차이점은 다음과 같습니다. 정점 V 간선 E 비교 다익스트라 BFS 사용 이유 가중치가 있는 그래프 탐색 가중치가 없는 그래프 탐색 시간 복잡도 O(VlogE) O(VlogE) 탐색 방법 간선이 음수가 아닌 탐색 최단 거리 탐색(가중치 비용이 있음) 너비 탐색을 하여 최단 거리 탐색(가중치 비용이 없음) 위와 같은 그림일 경우 BFS로 2번까지의 최단거리를 구할경우 0->(1,2)->3으로 BFS는 탐색하므로 매우 부적합 다익스트라는 0->1->3->2가 가능

C++ RAII

오늘은 RAII에 대해서 공부하도록 하겠습니다. RAII란? RAII는 Resource acquisition is initalization의 약자입니다. 직역을 해보면 "자원 획득을 초기화한다." 입니다. 이 RAII는 C++설계 패턴중 하나입니다. 설계 패턴인데 무슨 설계이면 동적인 프로그래밍을 위해 new라는 키워드를 사용해 힙 메모리에 할당을 받습니다.(자원 획득) 하지만 이러한 할당받고 관리를 해주는 것은 프로그래머에 일입니다.(java, C#같이 가비지 컬렉터가 있는거 제외) 해당 메모리 공간을 잘활용하면 매우 좋은 효과를 보겠지만 예기지않은 exception을 만나거나 다양한 이유로 할당받은 메모리를 해제하지 못하면 memory leak(메모리 누수)가 발생됩니다. 그럼 이런 생각을 할수 있습..