본문 바로가기

C++

(24)
알고리즘 면접 질문) "sort와 search의 관계를 설명해주세요" 관계 1. sort 는 search 전 할 수 있는 전처리 과정이다. 다음 기준으로 sort가 필요한지 아닌지 알 수 있다:> data에 대한 search가 1회성이다. -> linear search 사용.>> linear search의 검색 시간은 O(n) 이다. > data에 대한 search가 반복적이다. -> sort 후 binary search 사용>> binary search의 검색 시간은 O(log n) 이다. 그런데 sort에 드는 시간은 얼마일까?>  관계 2. 부록 1. sort 알고리즘 종류와 선택 기준 종류:O(n^2) 알고리즘: bubble, selection, insertionbubble: 왼쪽, 오른쪽 비교해서 왼쪽이 더 크면 오른쪽과 교체. 한 pass가 지나면 끝에 가장 큰..
자료구조 면접 질문) "array와 linked list 의 차이점을 말해주세요." 자료구조 선택 기준:시간 복잡도:삽입, 삭제, 탐색, 접근삽입이 중요한 기능 예시:로깅:std::deque - 여러 고정 크기의 array의 순서를 관리하는 map을 갖는 자료구조장점: 크기 초과 시 데이터 이동이 없음비교: std::vector는 크기 초과 시 전체 데이터 이동이 일어남. 최악의 경우 O(n) 걸림중간 삽입이 중요한 기능 예시:스케줄:std::list - doubly linked list장점: 중간 삽입이 O(1)비교: std::vector 는 연속적 메모리 사용. std::list 는 비연속적 메모리 사용검색이 중요한 기능 예시:캐싱 시스템:std::unordered_map - hash table장점: 검색이 O(1)array의 특징:시간 복잡도:검색 - O(n)할당된 메모리 공간 내..
C++ 면접 질문) "Perfect Forwarding이 뭔가요? 관련해서 사용한 경험 있으시면 말씀해주세요." Perfect Forwarding 소개:Perfect Forwarding은 템플릿에서 잘 사용되는 개념 입니다.예시:void function_name(int& lvalue) { std::cout - 위와 같은 경우에 템플릿으로 임의의 Type 을 받았을 때, function_name 을 호출하고 싶은데, 받은 Type이 lvalue 인지 rvalue 인지에 따라 다른 함수를 호출하고 싶으면 어떻게 할까?template void template_fuction(Type&& parameter) { // universal reference: 유니버셜 참조 function_name(std::forward(parameter); // std::forward: C++ 표준 라이브러리 utility 함수}- 위 코드..
C++ 면접 질문) "C++ 템플릿이 뭔가요? 관련해서 사용한 경험 있으시면 말씀해주세요." C++ 템플릿의 배경:C++ 는 statically typed language 이다compile 시점에 type 이 확정되어야 한다같은 동작을 하는 함수더라도 type 별로 함수를 코딩해야 했다Python 은 dynamically typed language 이다C++ 는 runtime overhead 를 최저로 줄였다Python 은 runtime 시점에 type 을 결정해야 하기 때문에 overhead 가 생긴다C++ 템플릿의 용도:틀을 만든다같은 동작을 하고, type 만 달라지는 경우에 재사용이 가능한 틀을 만든다필요한 것만 만든다 실제 type이 결정되고 생성이 필요한 함수만 만든다C++ 템플릿과 객체지향:객체지향의 다형성의 의미와 템플릿의 다형성 의미는 다르다:객체지향의 다형성 (동적): runt..
C++ 면접 질문) "람다 함수 형식을 설명해주세요." 형식:  [캡처](매개변수) -> 반환형 { 함수 본문 };int x = 10;[x](){ // x는 copy};[&x](){ // x는 reference};[=](){ // 로컬 변수, 글로벌 변수 copy};[&](){ // 로컬 변수, 글로벌 변수 reference};
C++ 면접 질문) "boost asio를 사용하여 어떻게 event-driven architecture를 구현하셨나요?" boost asio 소개:- boost 비동기 지원 라이브러리 io_context 소개:- 기본적으로 job queue를 관리하고 실행하는 단위라고 보면 됨- post, dispatch 함수를 통해 job 등록이 가능- 네트워크 소켓, 타이머, 파일 I/O 등 시스템 I/O 처리에 대한 callback 이 job인 경우 I/O 처리가 완료된 시점 job 등록됨- 즉, OS I/O 멀티플렉싱 활용 비동기 처리 가능: 특정 I/O 작업에 대한 callback 등록 필요  - OS I/O 멀티플렉싱: epoll, kqueue 등 을 사용하여 소켓에 데이터가 오거나 타이머가 만료된 이벤트를 감지 io_context 특징:- 내부적으로 job queue 관리  - job은 FIFO 순으로 처리됨- job이 비동기..
C++ 면접 질문) "어떤 때 reference 쓰고 어떤 때 value를 써야 할까요?" 매개변수로 어떤 때 reference를 쓰고 어떤 때 value를 쓰는지 먼저 말씀드릴께요.reference를 쓰는 기준:복사 비용이 클 때void sub_process(const std::string& text) { // read text without copying}원본 수정이 필요 할  때void modify_value(int& value) { value += 1; // access value by reference}value를 쓰는 기준:const reference 안쓰고 간결하게 사용 (복사 비용이 거의 없으므로)int use_without_using_const(int value) { return value + 1;}int use_using_const_safely(const int& valu..
C++ 면접 질문) "언제 Reference를 쓰고 언제 Pointer를 써야 할까요?" Reference와 Pointer의 차이점은 다음 글에서 알아보았습니다.C++ 면접 질문) "C++에서 Reference 와 Pointer의 차이점은?"언제 Reference를 쓰고 언제 Pointer를 써야 할 지 기준은 다음과 같습니다. 기준 1. Pointer가 굳이 필요없는 곳은 다 Reference 쓴다. Reference가 쓰이는 곳:함수 매개변수함수 반환값임시 객체아래 예시에서 임시 객체는 리터럴이 std::string 으로 객체 변환 되면서 생성됨임시 객체 (std::string) 는 stack에 저장됨임시 객체는 reference가 const 참조로 바인딩 한다면, reference가 사용되는한 임시 객체는 살려둠 (C++ 임시 객체 수면 연장 규칙)const std::string& ge..