집 >백엔드 개발 >C#.Net 튜토리얼 >19개의 C/C+ 면접 질문 중 몇 개나 올바르게 답할 수 있나요? - 개인 기사 Sifu
C와 C++의 차이점은 무엇인가요? 답변: C++는 C를 기반으로 클래스를 추가합니다. C는 구조화된 언어이며 알고리즘과 데이터 구조에 중점을 둡니다. 소프트웨어 엔지니어의 인터뷰 루틴은 모두 동일합니다. 이번 질문과 다음 번에도 마찬가지입니다.
질문 1: 간단한 언어로 C++가 무엇인지 알려주세요.
답변: C++는 C 언어를 기반으로 개발된 객체 지향 프로그래밍 언어로 널리 사용됩니다. C++는 객체 지향 프로그래밍, 일반 프로그래밍, 절차적 프로그래밍 등 다양한 프로그래밍 패러다임을 지원합니다. 광범위한 프로그래밍 분야를 가지고 있으며 시스템 개발, 엔진 개발 및 기타 응용 분야에서 자주 사용됩니다. 프로그래머가 사용하는 가장 강력한 프로그래밍 언어 중 하나입니다. 클래스, 캡슐화, 오버로딩 및 기타 기능!
질문 2: C와 C++의 차이점은 무엇인가요?
답변: C++는 C를 기반으로 클래스를 추가합니다. C는 구조화된 언어이며 알고리즘과 데이터 구조에 중점을 둡니다. C 프로그램을 설계할 때 가장 먼저 고려해야 할 사항은 출력을 얻기 위한(또는 프로세스(트랜잭션) 제어를 구현하는) 프로세스를 통해 입력(또는 환경 조건)을 어떻게 계산하는가이며, C++의 경우 가장 먼저 고려해야 할 사항은 이 모델은 해당 문제 영역에 적합할 수 있으므로 객체의 상태 정보를 획득하여 출력 또는 프로세스(트랜잭션) 제어를 달성할 수 있습니다. 편집자는 C 언어/C++ [627, 012, 464] 학습을 위한 학습 스커트를 추천합니다. 전문가든 초보자든, 직업을 바꾸고 싶든, 업계에 합류하고 싶든, 함께 배우고 배울 수 있습니다! 스커트 내부에는 개발툴이 있고, 유용한 정보와 기술정보가 많이 공유됩니다!
질문 3: 객체 지향(OOP)이란 무엇인가요?
답변: 객체 지향은 현실 세계를 이해하고 추상화하기 위한 방법이자 아이디어이며, 수요 요소를 객체로 변환하여 문제를 해결하는 아이디어입니다.
질문 4: 다형성이란 무엇인가요?
답변: 다형성은 동일한 작업, 기능 또는 프로세스가 여러 유형의 개체에 적용되어 서로 다른 결과를 얻을 수 있음을 의미합니다. 동일한 메시지를 수신할 때 서로 다른 객체가 서로 다른 결과를 생성할 수 있는 현상을 다형성이라고 합니다.
질문 5: 디자인 패턴을 이해하시나요? 간단한 예를 들어주실 수 있나요?
답변: 디자인 패턴은 대부분의 사람들에게 알려져 있고 반복적으로 사용되는 분류되고 목록화된 코드 디자인 경험의 집합입니다.
예를 들어, 싱글톤 패턴은 클래스에 인스턴스가 하나만 있도록 보장하고 이에 액세스할 수 있는 전역 액세스 지점을 제공합니다.
적용 대상: 클래스가 하나의 인스턴스만 가질 수 있고 고객이 잘 알려진 액세스 포인트에서 이에 액세스할 수 있는 경우 이 단일 인스턴스가 서브클래싱을 통해 확장 가능해야 하고 고객이 코드 인스턴스를 변경하지 않고 확장을 사용할 수 있어야 하는 경우 .
예를 들어, 팩토리 패턴은 객체 생성을 위한 인터페이스를 정의하고 하위 클래스가 인스턴스화할 클래스를 결정할 수 있도록 합니다. 팩토리 메소드를 사용하면 클래스의 인스턴스화가 하위 클래스로 연기됩니다.
적용 대상: 클래스가 생성해야 하는 객체의 클래스를 모르는 경우, 클래스가 자신이 생성하는 객체를 하위 클래스에서 지정하기를 원하는 경우, 클래스가 객체 생성 책임을 여러 도우미 하위 클래스에 위임하는 경우 그리고 어떤 도우미 하위 클래스가 대리자인지에 대한 정보를 지역화하려고 합니다.
질문 6: STL 라이브러리를 사용해 본 적이 있나요? 일반적인 STL 컨테이너는 무엇입니까? 어떤 알고리즘이 사용되었나요?
답변: STL은 컨테이너와 알고리즘이라는 두 부분으로 구성됩니다. (중요한 것은 이 둘을 결합하는 Iterator입니다.)
데이터가 저장되는 컨테이너입니다. 배열 등
STL에서 컨테이너는 순차 컨테이너와 연관 컨테이너라는 두 가지 범주로 나뉩니다.
직렬 컨테이너, 그 안의 요소가 반드시 순서대로 되어 있을 필요는 없지만 모두 정렬될 수 있습니다. 예: 벡터, 목록, deque, 스택, 큐, 힙, 우선순위_큐, slist
연관 컨테이너, 내부 구조는 기본적으로 균형 잡힌 이진 트리입니다. 소위 연관이란 각 요소에 키 값과 실제 값이 있고 요소가 특정 규칙에 따라 저장된다는 것을 의미합니다. 예: RB-트리, 세트, 맵, 멀티세트, 멀티맵, 해시테이블, hash_set, hash_map, hash_multiset, hash_multimap.
설명으로 각각 하나를 선택하세요.
벡터: 저장 공간을 동적으로 할당하는 컨테이너입니다. C++의 배열과 달리 배열에 의해 할당된 공간은 정적이며 할당 후에 변경할 수 없지만 벡터는 공간을 자동으로 재할당(확장)합니다.
set: 내부 요소는 요소의 키 값에 따라 자동으로 정렬됩니다. 맵과 다르게 키값은 실제값이고, 맵은 다른 키값과 실제값을 동시에 가질 수 있다.
정렬, 복사 등의 알고리즘 및 컨테이너별 알고리즘. 이 점은 너무 많이 소개할 필요는 없으며 주로 아래 반복자의 내용에 따라 다릅니다.
Iterator는 STL의 핵심입니다. Iterator는 컨테이너의 내부 구조를 노출하지 않고 컨테이너에 포함된 다양한 요소에 순서대로 액세스하는 방법을 제공합니다. 컨테이너와 알고리즘을 분리하여 독립적으로 설계할 수 있습니다.
질문 7: 데이터 구조가 알려질까요? 프로젝트 개발 과정에서 주로 사용되는 것은 무엇입니까?
답변: 배열, 연결 목록 및 트리(드물게)는 주로 데이터 구조에 사용되며 스택 및 큐 개념도 사용됩니다.
질문 8: const를 아시나요? 그 기능을 설명하십시오.
답변:
1.const는 클래스의 멤버 변수를 수정하여 멤버 상수를 나타내며 수정할 수 없음을 나타냅니다.
2. const 수정 함수는 이 함수 내에서 클래스의 데이터 멤버를 수정하지 않고 다른 비 const 멤버 함수를 호출하지 않을 것을 약속합니다.
3. const가 함수 오버로딩을 구성하는 경우 const 객체는 const 함수만 호출할 수 있고, non-const 객체는 non-const 함수를 먼저 호출합니다.
4.const 함수는 const 함수만 호출할 수 있습니다. const가 아닌 함수는 const 함수를 호출할 수 있습니다.
5. 클래스 외부에 정의된 Const 멤버 함수는 정의와 선언 모두에서 const 수정자가 필요합니다.
질문 9: 클래스의 정적 변수는 언제 초기화되나요? 함수의 정적 변수는 언제 초기화되나요?
답변: 클래스의 정적 멤버 변수가 이미 존재하며 클래스가 인스턴스화되기 전에 메모리가 할당됩니다. 함수의 정적 변수는 이 함수가 실행될 때 초기화됩니다.
질문 10: 힙과 스택의 차이점은 무엇인가요? 힙 및 스택 수명주기?
정답:
1. 스택 공간 할당의 차이점:
1. 스택(운영 체제): 운영 체제에 의해 자동으로 할당 및 해제되며, 함수 매개변수 값, 로컬 변수 값 등이 저장됩니다.
2. 힙(운영 체제): 일반적으로 프로그래머가 할당하고 해제하지 않으면 OS에서 재활용할 수 있습니다. 프로그램이 종료됩니다. 할당 방법은 연결 목록과 유사합니다.
2. 스택 캐싱 방법의 차이점:
1. 스택은 일반적으로 호출 시 저장 공간에 있으며 호출이 완료된 후 즉시 해제됩니다. 두 번째 수준 캐시에서 수명 주기는 가상 머신의 가비지 수집 알고리즘에 의해 결정됩니다(고아 개체가 되면 재활용될 수 없음). 따라서 이러한 개체를 호출하는 속도는 상대적으로 느립니다.
3. 스택 데이터 구조의 차이점:
Heap(데이터 구조): 힙은 다음과 같이 트리로 간주될 수 있습니다.
Stack(데이터 구조): 선입, 후출 데이터 구조.
질문 11: 캡슐화, 상속 및 다형성에 대해 설명하세요.
답변:
1. 캡슐화:
캡슐화는 객체 지향 프로그래밍을 실현하는 첫 번째 단계입니다. 캡슐화는 데이터나 함수를 단위(우리는 클래스라고 함)로 수집하는 것입니다.
캡슐화의 의미는 코드(데이터)가 실수로 파괴되는 것을 방지하거나 보호하는 것입니다.
2. 상속:
상속은 주로 코드 재사용을 실현하고 개발 시간을 절약합니다.
하위 클래스는 상위 클래스로부터 일부 항목을 상속받을 수 있습니다.
3. 다형성
다형성: 동일한 작업이 다른 객체에 작용하고 다른 해석을 가지며 다른 실행 결과를 생성할 수 있습니다. 런타임 시 기본 클래스에 대한 포인터를 통해 파생 클래스의 메서드를 호출할 수 있습니다.
질문 12: 포인터와 참조의 차이점은 무엇인가요?
답변:
참조는 null일 수 없으며 포인터는 비어 있을 수 있습니다.
"sizeof reference"는 가리키는 변수(객체)의 크기를 가져오는 반면, "sizeof 포인터"는 포인터 자체의 크기를 가져옵니다. 포인터와 참조(++) 연산 의미가 다릅니다.
포인터는 여러 수준을 가질 수 있지만 참조는 한 수준만 될 수 있습니다(int **p;는 허용되지만 int &&a는 불법입니다)
9. 메모리 할당의 관점에서 볼 때: 프로그램은 포인터 변수에 대해 메모리 영역을 할당하는 반면 참조는 메모리 영역을 할당할 필요가 없습니다.
답변: 동적 저장소 할당 기능을 사용하여 동적으로 열린 공간은 사용 후에도 해제되지 않습니다. 결과적으로 메모리 단위가 항상 점유되어 메모리 누수가 발생합니다.
mallocing 시 free인지 확인해야 합니다.
동적으로 할당된 메모리에는 포인터를 할당하지 않는 것이 가장 좋습니다.
질문 14: 일반적으로 사용되는 정렬 알고리즘에는 어떤 것이 있나요? 여러 정렬 알고리즘의 장점과 단점을 간략하게 설명하세요.
답변: 선택, 버블, 고속, **, 힐, 병합, 스택 정렬 등
1. 퀵 정렬: 버블 정렬을 개선한 것입니다.
장점: 빠르고 데이터 이동이 적음
단점: 안정성이 부족함
2. 병합: 분할 정복 정렬, 안정적인 정렬 알고리즘으로 일반적으로 전체적으로 무질서하지만 로컬로 정렬된 배열에 사용됩니다.
장점: 고효율 O(n), 안정적
단점: 더 많은 메모리를 차지합니다
질문 15: new와 malloc의 차이점은 무엇인가요?
답변:
1. malloc과 free는 C++/C 언어의 표준 라이브러리 함수이고, new/delete는 C++의 연산자입니다. 둘 다 동적 메모리를 적용하고 메모리를 해제하는 데 사용할 수 있습니다.
2. 내부 데이터 유형이 아닌 개체의 경우, Maloc/Free만으로는 동적 개체의 요구 사항을 충족할 수 없습니다. 객체는 생성될 때 자동으로 생성자를 실행해야 하며, 객체가 죽기 전에 자동으로 소멸자를 실행해야 합니다.
3. malloc/free는 연산자가 아닌 라이브러리 함수이므로 컴파일러의 제어 권한에 속하지 않습니다. 생성자 및 소멸자 실행 작업은 malloc/free에 부과될 수 없습니다. 따라서 C++ 언어에는 동적 메모리 할당 및 초기화 작업을 완료할 수 있는 new 연산자와 메모리 정리 및 해제 작업을 완료할 수 있는 delete 연산자가 필요합니다. 신규/삭제는 라이브러리 함수가 아닙니다.
4. C++ 프로그램은 C 함수를 호출하는 경우가 많지만 C 프로그램은 동적 메모리 관리를 위해 malloc/free만 사용할 수 있습니다.
5. New는 malloc 플러스 생성자의 실행으로 간주될 수 있습니다. new의 포인터는 유형 정보를 직접 전달합니다. Malloc은 void 포인터를 반환합니다.
질문 16: TCP와 UDP 통신의 차이점은 무엇인가요? IOCP란 무엇입니까?
답변:
1.TCP는 연결형, UDP는 연결형
2.TCP는 보장, UDP 전송은 보장되지 않음
3.TCP는 비효율적, UDP는 고효율
4.TCP 입니다 스트림 기반, UDP는 데이터 패킷 기반
5.TCP는 중요한 데이터를 전송하고 UDP는 중요하지 않은 데이터를 전송합니다
IOCP는 I/O Completion Port의 약자로 중국어로 번역하면 I/O Completion Port입니다.
IOCP는 애플리케이션에 I/O 이벤트를 효율적으로 알릴 수 있는 비동기 I/O API입니다.
select() 또는 다른 비동기 메서드를 사용하는 것과 달리 소켓[소켓]은 완료 포트와 연결되어 있으며 일반 Winsock 작업을 계속할 수 있습니다. 그러나 이벤트가 발생하면 운영 체제에 의해 완료 포트가 대기열에 추가됩니다. 그런 다음 애플리케이션은 이 완료 포트에 대해 코어 계층을 쿼리할 수 있습니다.
질문 17: 동기식 IO와 비동기식 IO의 차이점은 무엇인가요?
답변:
A. 동기화
소위 동기화는 함수 호출이 실행될 때 결과를 얻을 때까지 호출이 반환되지 않음을 의미합니다.
이 정의에 따르면 실제로 대부분의 함수는 동기식으로 호출됩니다(예: sin isdigit 등).
그러나 일반적으로 동기 및 비동기에 관해 이야기할 때는 특히 다른 구성 요소의 협력이 필요하거나 완료하는 데 일정 시간이 걸리는 작업을 의미합니다.
가장 일반적인 예는 SendMessage입니다.
특정 창으로 메시지를 보내는 기능입니다. 상대방이 메시지를 처리할 때까지 반환되지 않습니다.
상대방이 처리를 마친 후 메시지 처리 함수에서 반환한 값을 호출자에게 반환하는 함수입니다.
B. 비동기
비동기의 개념은 동기화의 반대입니다.
비동기 프로시저 호출이 실행되면 호출자는 결과를 즉시 얻지 못합니다.
이 호출을 실제로 처리하는 컴포넌트는 호출이 발생한 후 상태 및 알림을 통해 호출자에게 알리거나 콜백 함수를 통해 호출을 처리하는 것입니다.
질문 18: C++의 정적 함수와 정적 변수를 설명하시겠습니까?
답변:
(1) 클래스 정적 데이터 멤버는 컴파일 타임에 생성되고 초기화됩니다. 클래스의 객체가 생성되기 전에 존재하며 어떤 객체에도 속하지 않지만 비정적 클래스 멤버 변수는 객체에 속합니다. . 클래스의 정적 데이터 멤버 복사본은 하나만 있으며 이 복사본은 이 클래스의 모든 개체에서 공유됩니다.
(2) 클래스 정적 멤버 함수는 특정 객체가 아닌 클래스 전체에 속하며 클래스의 모든 객체에서 공유됩니다.
1. 정적 멤버 변수는 유사한 객체 간의 정보 공유를 구현합니다.
2. 정적 멤버는 클래스 외부에 저장되며 포함되지 않은 클래스의 크기를 찾습니다.
3. 정적 멤버는 네임스페이스의 클래스에 속하는 전역 변수이며 데이터 영역의 rw 세그먼트에 저장됩니다.
4. 정적 멤버는 클래스 외부에서만 초기화할 수 있습니다.
5. 클래스 이름(객체가 생성되지 않은 경우에도) 또는 객체를 통해 액세스할 수 있습니다.
1. 정적 멤버 함수의 의미는 정보를 공유하고 데이터를 전달하는 것이 아니라 정적 데이터 멤버를 관리하고 정적 데이터 멤버의 캡슐화를 완료하는 것입니다.
2. 정적 멤버 함수는 정적 데이터 멤버에만 액세스할 수 있습니다. 이유: 비정적 멤버 함수의 경우 this 포인터는 호출 시 매개변수로 전달됩니다. 정적 멤버 함수는 개체가 아닌 클래스에 속하며 이 포인터가 없습니다.
질문 19: 기억에 대한 당신의 이해에 대해 알려주세요.
답변:
1. 스택 - 컴파일러에 의해 자동으로 할당 및 해제됨
2. 힙 - 일반적으로 프로그래머가 해제하지 않으면 OS에 의해 재활용될 수 있음 프로그램
3. 글로벌 영역(정적 영역), 글로벌 변수와 정적 변수가 함께 저장되고, 초기화된 글로벌 변수와 정적 변수가 한 영역에 있고, 초기화되지 않은 글로벌 변수와 초기화되지 않은 정적 변수가 또 다른 인접한 영역에 있습니다. - 프로그램 종료 후 공개
4. 상수를 위한 특별한 공간도 있습니다. - 프로그램이 종료되고 바이너리 코드가 저장되어 있는
5 프로그램 코드 영역이 해제됩니다.
함수 본문에 정의된 변수는 대개 스택에 있고, malloc, calloc, realloc 등 메모리를 할당하는 함수에 의해 할당된 변수는 힙에 있습니다. 전역변수는 모든 함수의 몸체 외부에서 정의되며, static 수식어를 추가한 후에는 어디에 있든 전역영역(정적영역)에 저장되며, 모든 함수의 몸체 외부에서 정의된 정적변수는 파일 내에서도 유효합니다. 다른 파일로 확장할 수 없습니다. 함수 본문에 정의된 static은 함수 본문 내에서만 유효함을 의미합니다. 또한 함수의 "adgfdf"와 같은 문자열이 상수 영역에 저장됩니다.
관련 기사:
관련 동영상:
PHP 직장을 휩쓴 인터뷰 질문에 대한 자세한 비디오 튜토리얼
위 내용은 19개의 C/C+ 면접 질문 중 몇 개나 올바르게 답할 수 있나요? - 개인 기사 Sifu의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!