분류 전체보기 (189) 썸네일형 리스트형 자료구조 면접 질문) "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++ 면접 질문) "빌드 시 컴파일러에서 일어나는 과정에 대해 설명해주세요." 빌드 과정은 크게 전처리, 컴파일, 어셈블, 링크 단계로 나뉩니다. 전처리 단계에서 컴파일러는 다음과 같은 일을 합니다:소스 코드 내 #로 시작하는 전처리 지시문 처리 하여 전처리된 코드 생성#include // iostream 이라는 파일 내용을 다시 전처리 후 복붙#define VALUE 10 // 코드 내 모든 "VALUE" 가 "10" 으로 다시 타이핑됨const int value = VALUE; // 예) const int value = 10 으로 변경됨#ifdef, #ifnedf, #endif 등 // 조건부로 일부 코드를 컴파일러가 못 보게 함.#ifndef HEADER_GUARD_H // 예) 헤더가드#define HEADER_GUARD_H#endif // HEADER_GUARD_H 컴파.. 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.. 이전 1 2 3 4 ··· 24 다음