· new & malloc 차이
new 는 초기화가 자동으로 이루어진지고 초기화가 가능하다
malloc 은 초기화를 해주어야하며 그렇지 않으면 쓰레기 값이 들어가고 메모리 할당시에 사이즈(타입)를 지정해주어야한다
· Call by value & Call by reference
값 호출 - 얉은 복사 직접적인 값수정이 안됨
주소 호출 - 깊은 복사 직접적인 값 수정가능
· const 변수형 const 변수
const 변수형 - 해당 대상체의 주소변경을 막음
const 변수 - 해당 대상체의 값의 변경을 막는것
· 가상함수 테이블
virtual 함수가 정의된 클래스가 있으면 컴파일시에 가상함수 테이블을 생성하게되고
가상함수의 주소가 저장되고 가상함수 호출시 가상함수 테이블을 참조하여 호출된다
· Class
우리가 실생활에 사물로 인식되는것을 만드는 틀이라고 생각 설계도 개념
· OOP
Object-oriented programming
다형성 상속 캡슐 은닉
객체지향프로그래밍
· 다형성
상속을 통한 클래스에서 오버라이드를 하여 재정의 하는것
· Virtual void test() = 0;과 Virtual void test(); 차이점
순수 가상함수와 가상함수의 차이이며
순수가상함수는 인터페이스만 넘기기위한것이며 순수가상함수의 상속받은 클래스는 해당 가상함수를 구현을 해주어야한다
가상함수는 내부구현이포함 될수있다
· override와 overload 각각 설명, 차이점
오버라이드는 상속받은 클래스에서 함수를 재정의
오버로딩은 같은 함수이름에 인자나 반환타입이 다른것
· 다중상속 문제점
해당 클래스의 컨트롤이 어렵고 코딩의 난이도가 올라가며
소멸자 호출시점에 제대로된 소멸자를 호출하지 않게될수있다
· 인터페이스와 추상클래스
추상클래스는 생성자, 멤버 변수, 일반 메소드'를 자유롭게 포함할 수 있으며, 여기에 1개 이상의 추상 메소드가 포함되어져 있으면 된다.
인터페이스는 순수가상함수로만 이루어져있다.
· 가상함수
virtual 키워드가 붙는 함수이며 상속받은 클래스에서 재정의용도로 쓰인다
런타임 시점에 값이 결정된다
· Volatile
휘발성. 인터렙트 또는 OS IO 에 의해 변경될 여지가 있는 곳에 사용함 코드가 꼭 실행되어야하는 부분에 사용
· Atomic
휘발성
멀티쓰레드 환경에서 동기화 시켜주는 키워드처음 선언시에 초기화가 가능하고 이후에는 증감 또는 가감만 가능하다.
· 소멸자에 virtual 쓰는 이유
상속을 받을경우 부모 클래스의 포인터로부터 자식클래스를 호출할때 virtual 이 되어있지않으면 소멸자도 함수로 보기에 소멸자를 호출할경우 부모의 소멸자가 호출된다 부모의 소멸자가 호출되기에 정확한 인스턴스의 소멸자 호출을 위해서 쓰인다
· 암시적 변환 (static_cast)
형변환을 할때 코드단계에서 오류검출을 해줌
· 스마트 포인터
unique, shared, weak 등이있으며
유니크는 단일 메모리할당으로 소유권을 가지게된다
shared 는 특정객체를 참조하는 스마트포인터가 몇개인지 내부에 카운트값이 증가되고 해제시에 감소한다
weak_ptr은 서로의 객체가 shared로 참조시에 카운트가 절대로 0이 되지 않기에 shared_ptr 인스턴스 사이의 순환 참조를 제거하기 위해서 사용됩니다.
· strcmp 함수 구현
문자열 비교
아스키값으로 비교 한다
<자료구조>
· 싱글 링크드리스트 작성
· 스택과 큐 설명
스택은 FILO로 구조로 먼저 들어온것이 먼저 적재되어 쌓이고 나중에들어온것을 먼저 꺼내게됩니다
큐는 일종의 터널같은것으로써 선입선출구조입니다
· vector와 list 차이점
벡터는 메모리할당은 연속으로 하여서 배열처럼 사용할수있고
리스트는 그렇지않다 벡터는 메모리할당을 미리 해두기때문에 삽입경우는 리스트보다 빠르지만 삭제의 경우는 벡터는
클리어시에 메모리 해제는 되지 않는다 특수하게 메모리를 해제해주어야한다
순서 상관없거나 순차적인 경우는 벡터가 빠르다 중간위치의 값이 추가삭제 경우는 리스트가 더 좋다
· Binary Search Tree
이진트리 검색으로
· Priority Queue/Heap
· Array와 List 차이점
배열은 크기가 고정되어있고 값이 삭제되어도 배열의 공간이 남아있다 삽입삭제보단 검색에 유리 인덱스접근
리스트는 추가 삽입삭제가 용이하다 동적이다
· AVL Tree
균형트리
· Red-Black Tree
· Map과 Hash_Map 차이
map 은 레드블랙트리를 통해 검사를 하고 정렬을함 O(log n)
hashmap은 hash table 을 사용하고 정렬을 하지않음 속도는 O(1) 큰데이터에 용이
· Map, List
map은 검색에용이 추가 메모리할당시 2배의 공간이 필요하며 메모리 복사가 일어남
list 는 삽입삭제가 많은경우용이 포인터로 접근 순차접근이라 검색이 느림
<알고리즘>
· Sort 알고리즘들
삽입 선택 버블 퀵 ....등등
· Topological Sort와 Minimum Spanning Tree
· 다익스트라 알고리즘
· A* 알고리즘
열린 리스트와 닫힌 리스트 에 해당 노드의 경로를 계산하여
추적하는 알고리즘
· Prim's 알고리즘
· Kruskal 알고리즘 (Shortest Path)
· FSM
유한상태기계.
자신이 취할수있는 상태들을 가지고있고 하나의 상태만을 가질수있다.
간단하게는 Switch 문과 If문으로 처리가가능하다.
자세한 사항은 http://icecola89.blogspot.com/2016/05/c.html 참고바랍니다.
<네트워크>
· IOCP
I/O Completion Port
쓰레드풀을 사용하며 특정 프로세스가 완료될시에 해당 정보를 큐에 담아두고
대기중인 쓰레드가 해당 작업을 들고가서 overlapped 로 지정한 기능으로 처리하는 시스템
· Critical Section
커널객체를 사용하지 않고 유저객체를 사용 빠름
한번에 하나의 쓰레드의 실행을 허용함
뮤텍스도 동일하며 뮤텍스는 다중프로세스 실행방지에 흔히쓰임 소유권을 가지고있음(화장실)
세마포어는 지정된 수의 여러개의 쓰레드 실행 동기화가 가능함 데드락방지로 유효(은행)
· 데드락
교착상태를 말한다.
한정된 자원을 여러곳에서 소유권을 요청할때 발생
아래의 4가지로 예방 및 해결이 가능하다. 또는 교착상태를 감지후 회복하는 방법도 있다.
1) 상호 배제 (Mutual exclusion) 부정
- 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
2) 점유 대기 (Hold and wait) 부정
- 프로세스가 실행되기 전 필요한 모든 자원을 할당한다.
3) 비선점 (No preemption) 부정
- 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
4) 순환 대기 (Circular wait) 부정
- 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.
· 트랜잭션
프로세스가 도중에 문제가 발생시에 진행한 내용을 롤백 시키는 것
try catch 가 가장 흔한예
· Roll back
트랜잭션이 발생하였을경우 진행한 과정을 다시 돌리는것
· Commit
DB에 해당 내용을 적용 하는것 트랜잭션 과정을 완료했다 알리며 저장하는것
· DB 정규화
데이터 파편화를 재정렬 하는것 중복을 줄이고 무결성 향상
· TCP/UDP
tcp 는 안정성 보장 속도가 느림 데이터가 손실시에 재요청 4hand shake
udp 는 속도가 빠르지만 데이터 손실이 발생할수 있다. 헤더의 check sum 을 통해 최소한의 오류검증만한다
<기타>
· 프로세스 메모리 영역
커널 | 데이터 코드 스택 힙 순으로 되어있다.
요즘에는 하드웨어 성능이 좋아져서 딱히 신경쓸일이 없을거같지만예전 메모리가 지금 처럼 넉넉하지 않을시에는 힙영역의 경우 스택영역이랑 서로의 방향으로 증가되기에 힙의 영역이 늘어나면 스택쪽 영역이랑 겹치게되어 문제가 될수 있었다.
· 그래픽스 파이프라인
오류나 문제 또는 잘못된 내용이 있을시에는 답글 부탁드립니다.
'프로그래밍' 카테고리의 다른 글
압축 구조 (0) | 2019.02.21 |
---|---|
error LNK2019 (1) | 2014.11.27 |
디버깅 단축키 (0) | 2014.11.07 |
mysql connector C++ visualstudio cmake (0) | 2014.11.03 |
cmake 사용법 (0) | 2014.10.27 |