top 50 c interview questions with answers
프로그래밍 및 코딩에 대해 자주 묻는 기본 C # 인터뷰 질문 :
C #은 빠르게 성장하고 널리 사용되는 프로그래밍 언어입니다. 수요가 많고 다양하며 크로스 플랫폼도 지원합니다.
Windows뿐만 아니라 다른 많은 운영 체제에도 사용됩니다. 따라서 소프트웨어 테스팅 산업에서 어떤 직업을 갖기 위해서는이 언어에 대한 강한 이해가 매우 중요합니다.
아래에 나열된 것은 C #에 대해 가장 자주 묻는 질문 일뿐만 아니라 C # 집단에서 눈에 띄는 것으로 이해해야 할 매우 중요한 주제입니다.
C #은 방대한 주제이므로 모든 개념을 쉽게 다룰 수 있도록이 주제를 아래에 언급 된대로 세 부분으로 나누었습니다.
- 기본 개념에 대한 질문
- 배열과 문자열에 대한 질문
- 고급 개념
이 기사에는 인터뷰를 준비하는 데 도움이되도록 C # 인터뷰 질문과 거의 모든 중요한 주제를 간단한 용어로 다루는 50 가지 상위 C # 인터뷰 질문 세트가 포함되어 있습니다.
학습 내용 :
가장 인기있는 C # 인터뷰 질문 및 답변
기본 컨셉
Q # 1) 객체와 클래스는 무엇입니까?
대답: 클래스는 실시간 엔터티를 나타내는 데 사용되는 속성 및 메서드의 캡슐화입니다. 모든 인스턴스를 단일 단위로 모으는 데이터 구조입니다.
객체는 클래스의 인스턴스로 정의됩니다. 기술적으로는 변수, 배열 또는 컬렉션의 형태로 저장할 수있는 할당 된 메모리 블록 일뿐입니다.
Q # 2) 기본 OOP 개념은 무엇입니까?
답변 : 객체 지향 프로그래밍의 네 가지 기본 개념은 다음과 같습니다.
- 캡슐화 : 여기서 객체의 내부 표현은 객체 정의 외부의 뷰에서 숨겨집니다. 필요한 정보 만 액세스 할 수 있지만 나머지 데이터 구현은 숨겨져 있습니다.
- 추출: 객체의 중요한 동작과 데이터를 식별하고 관련없는 세부 사항을 제거하는 프로세스입니다.
- 계승 : 다른 클래스에서 새 클래스를 만드는 기능입니다. 부모 클래스에있는 개체의 동작을 액세스, 수정 및 확장하여 수행됩니다.
- 다형성 : 이름은 하나의 이름, 여러 형태를 의미합니다. 이름은 같지만 구현이 다른 여러 메서드를 사용하면됩니다.
Q # 3) 관리 코드와 비 관리 코드 란 무엇입니까?
대답: 관리 코드는 CLR (공용 언어 런타임)에 의해 실행되는 코드입니다. 즉, 모든 애플리케이션 코드는 .Net 플랫폼을 기반으로합니다. 내부적으로 가비지 수집기를 사용하여 사용하지 않는 메모리를 정리하는 .Net 프레임 워크 때문에 관리되는 것으로 간주됩니다.
비 관리 코드는 .Net을 제외한 다른 프레임 워크의 애플리케이션 런타임에서 실행되는 모든 코드입니다. 애플리케이션 런타임은 메모리, 보안 및 기타 성능 작업을 처리합니다.
Q # 4) 인터페이스 란 무엇입니까?
대답: 인터페이스는 구현이없는 클래스입니다. 여기에 포함 된 유일한 것은 메서드, 속성 및 이벤트의 선언입니다.
Q # 5) C #에는 어떤 종류의 클래스가 있습니까?
답변 : C #의 다양한 클래스 유형은 다음과 같습니다.
- 부분 클래스 : 구성원을 여러 .cs 파일로 나누거나 공유 할 수 있습니다. 키워드로 표시됩니다. 부분적.
- 봉인 된 클래스 : 상속 될 수없는 클래스입니다. 봉인 된 클래스의 멤버에 액세스하려면 클래스의 개체를 만들어야합니다. 키워드로 표시됩니다. 봉인 .
- 추상 클래스 : 개체를 인스턴스화 할 수없는 클래스입니다. 클래스는 상속 만 가능합니다. 하나 이상의 메소드를 포함해야합니다. 키워드로 표시됩니다. 요약 .
- 정적 클래스 : 상속을 허용하지 않는 클래스입니다. 클래스의 멤버도 정적입니다. 키워드로 표시됩니다. 공전 . 이 키워드는 컴파일러에게 정적 클래스의 우발적 인스턴스를 확인하도록 지시합니다.
Q # 6) C #에서 코드 컴파일을 설명하십시오.
답변 : C #의 코드 컴파일에는 다음 네 단계가 포함됩니다.
- 소스 코드를 C # 컴파일러로 관리 코드로 컴파일합니다.
- 새로 생성 된 코드를 어셈블리로 결합합니다.
- CLR (공용 언어 런타임)을로드합니다.
- CLR로 어셈블리 실행.
문 # 7) Class와 Struct의 차이점은 무엇입니까?
답변 : 다음은 Class와 Struct의 차이점입니다.
수업 | 구조 |
---|---|
상속 지원 | 상속을 지원하지 않습니다. |
Class is Pass by reference (참조 유형) | 구조는 Copy by Copy (값 유형)입니다. |
회원은 기본적으로 비공개입니다. | 구성원은 기본적으로 공개됩니다. |
크고 복잡한 물체에 적합 | 격리 된 소형 모델에 적합 |
메모리 관리를 위해 폐기물 수집기를 사용할 수 있습니다. | 가비지 수집기를 사용할 수 없으므로 메모리 관리가 없습니다. |
Q # 8) Virtual 방식과 Abstract 방식의 차이점은 무엇인가요?
대답: Virtual 메서드에는 항상 기본 구현이 있어야합니다. 그러나 필수는 아니지만 파생 클래스에서 재정의 할 수 있습니다. 다음을 사용하여 재정의 할 수 있습니다. 우세하다 예어.
Abstract 메서드에는 구현이 없습니다. 추상 클래스에 있습니다. 파생 클래스가 추상 메서드를 구현하는 것은 필수입니다. 안 우세하다 키워드는 사용할 수 있지만 여기서는 필요하지 않습니다.
Q # 9) C #의 네임 스페이스를 설명하십시오.
대답: 대규모 코드 프로젝트를 구성하는 데 사용됩니다. '시스템'은 C #에서 가장 널리 사용되는 네임 스페이스입니다. 자체 네임 스페이스를 생성 할 수 있으며 중첩 네임 스페이스라고하는 다른 네임 스페이스를 사용할 수도 있습니다.
키워드 '네임 스페이스'로 표시됩니다.
Q # 10) C #에서 'using'문은 무엇입니까?
대답: 'Using'키워드는 프로그램에서 특정 네임 스페이스를 사용하고 있음을 나타냅니다.
예를 들어, 시스템 사용
여기, 체계 네임 스페이스입니다. 콘솔 클래스는 시스템 아래에 정의되어 있습니다. 따라서 프로그램에서 console.writeline (“….”) 또는 readline을 사용할 수 있습니다.
Q # 11) 추상화를 설명하십시오.
대답: 추상화는 OOP 개념 중 하나입니다. 클래스의 필수 기능 만 표시하고 불필요한 정보를 숨기는 데 사용됩니다.
자동차의 예를 들어 보겠습니다.
자동차 운전자는 색상, 이름, 거울, 스티어링, 기어, 브레이크 등 자동차에 대한 세부 사항을 알아야합니다. 그가 알 필요가없는 것은 내부 엔진, 배기 시스템입니다.
따라서 Abstraction은 필요한 것이 무엇인지 알고 외부 세계에서 내부 세부 사항을 숨기는 데 도움이됩니다. 내부 정보를 숨기려면 다음을 사용하여 Private과 같은 매개 변수를 선언하면됩니다. 은밀한 예어.
Q # 12) 다형성을 설명 하시나요?
대답: 프로그래밍 방식으로 다형성은 동일한 방법이지만 다른 구현을 의미합니다. 컴파일 타임과 런타임의 두 가지 유형이 있습니다.
- 컴파일 타임 다형성 운영자 과부하에 의해 달성됩니다.
- 런타임 다형성 재정의함으로써 달성됩니다. 상속 및 가상 함수는 런타임 다형성 중에 사용됩니다.
예를 들어 ,클래스에 Void Add () 메서드가있는 경우 메서드를 오버로드하여 다형성이 이루어집니다. 즉, void Add (int a, int b), void Add (int add)는 모두 오버로드 된 메서드입니다.
Q # 13) C #에서 예외 처리는 어떻게 구현됩니까?
답변 : 예외 처리는 C #에서 네 가지 키워드를 사용하여 수행됩니다.
- 시험 : 예외를 검사 할 코드 블록을 포함합니다.
- 잡기 : 예외 핸들러의 도움으로 예외를 잡아내는 프로그램입니다.
- 드디어 : 예외 발생 여부에 관계없이 실행되도록 작성된 코드 블록입니다.
- 던지다 : 문제가 발생하면 예외를 발생시킵니다.
Q # 14) C # I / O 클래스 란 무엇입니까? 일반적으로 사용되는 I / O 클래스는 무엇입니까?
대답: C #에는 파일 생성, 삭제, 열기, 닫기 등과 같은 다양한 작업을 수행하는 데 사용되는 클래스로 구성된 System.IO 네임 스페이스가 있습니다.
일반적으로 사용되는 몇 가지 I / O 클래스는 다음과 같습니다.
- 파일 – 파일 조작에 도움이됩니다.
- StreamWriter – 스트림에 문자를 쓰는 데 사용됩니다.
- StreamReader – 문자를 스트림으로 읽는 데 사용됩니다.
- StringWriter – 문자열 버퍼를 읽는 데 사용됩니다.
- StringReader – 문자열 버퍼를 쓰는 데 사용됩니다.
- 통로 – 경로 정보와 관련된 작업을 수행하는 데 사용됩니다.
문 # 15) StreamReader / StreamWriter 클래스 란?
대답: StreamReader 및 StreamWriter는 네임 스페이스 System.IO의 클래스입니다. 각각 독자 기반 데이터 인 charact90을 읽거나 쓰고 싶을 때 사용합니다.
StreamReader의 일부 구성원은 다음과 같습니다. Close (), Read (), Readline ().
StreamWriter의 구성원은 다음과 같습니다. Close (), Write (), Writeline ().
Class Program1 { using(StreamReader sr = new StreamReader(“C:ReadMe.txt”) { //----------------code to read-------------------// } using(StreamWriter sw = new StreamWriter(“C:ReadMe.txt”)) { //-------------code to write-------------------// } }
Q # 16) C #의 소멸자는 무엇입니까?
대답: 소멸자는 메모리를 정리하고 리소스를 해제하는 데 사용됩니다. 그러나 C #에서는 가비지 수집기가 자체적으로 수행합니다. System.GC.Collect ()는 정리를 위해 내부적으로 호출됩니다. 그러나 때때로 소멸자를 수동으로 구현해야 할 수도 있습니다.
예를 들면 :
~Car() { Console.writeline(“….”); }
Q # 17) 추상 클래스 란 무엇입니까?
대답: Abstract 클래스는 abstract 키워드로 표시되는 클래스이며 Base 클래스로만 사용할 수 있습니다. 이 클래스는 항상 상속되어야합니다. 클래스 자체의 인스턴스를 만들 수 없습니다. 어떤 프로그램도 클래스의 객체를 생성하는 것을 원하지 않는다면, 그러한 클래스는 추상적으로 만들 수 있습니다.
추상 클래스의 모든 메서드는 동일한 클래스에 구현이 없습니다. 그러나 그들은 자식 클래스에서 구현되어야합니다.
예를 들면 :
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
추상 클래스의 모든 메서드는 암시 적으로 가상 메서드입니다. 따라서 virtual 키워드는 추상 클래스의 메소드와 함께 사용해서는 안됩니다.
Q # 18) 복싱과 개봉이란 무엇입니까?
대답: 값 유형을 참조 유형으로 변환하는 것을 Boxing이라고합니다.
예를 들면 :
int Value1-= 10;
//----권투------//
개체 boxedValue = Value1;
동일한 참조 유형 (boxing으로 생성됨)을 값 유형으로 다시 명시 적으로 변환하는 것이 호출됩니다. 개봉 .
예를 들면 :
// ———— UnBoxing —————— //
int UnBoxing = int (boxedValue);
버블 정렬 함수 C ++
Q # 19) Continue와 Break 문의 차이점은 무엇입니까?
대답: Break 문은 루프를 중단합니다. 루프를 종료하도록 프로그램을 제어합니다. Continue 문은 현재 반복 만 종료하도록 프로그램을 제어합니다. 루프를 끊지 않습니다.
Q # 20) finally와 finalize 블록의 차이점은 무엇입니까?
대답: 드디어 블록은 try 및 catch 블록 실행 후 호출됩니다. 예외 처리에 사용됩니다. 예외가 포착되었는지 여부에 관계없이이 코드 블록이 실행됩니다. 일반적으로이 블록에는 정리 코드가 있습니다.
finalize 메소드는 가비지 콜렉션 직전에 호출됩니다. 관리되지 않는 코드의 정리 작업을 수행하는 데 사용됩니다. 지정된 인스턴스가 이후에 호출되지 않을 때 자동으로 호출됩니다.
배열과 문자열
Q # 21) 어레이 란 무엇입니까? 단일 및 다차원 배열에 대한 구문을 제공합니까?
대답: 배열은 동일한 유형의 여러 변수를 저장하는 데 사용됩니다. 인접한 메모리 위치에 저장된 변수 모음입니다.
예를 들면 :
이중 숫자 = 새로운 double (10);
int () 점수 = 새로운 int (4) {25,24,23,25};
1 차원 배열은 변수가 단일 행에 저장되는 선형 배열입니다. 위 예 1 차원 배열입니다.
배열은 둘 이상의 차원을 가질 수 있습니다. 다차원 배열은 직사각형 배열이라고도합니다.
예를 들어 , int (,) numbers = new int (3,2) {{1,2}, {2,3}, {3,4}};
Q # 22) Jagged Array 란 무엇입니까?
대답: 가변 배열은 요소가 배열 인 배열입니다. 배열의 배열이라고도합니다. 단일 차원 또는 다중 차원이 될 수 있습니다.
int () jaggedArray = 새로운 int (4) ();
Q # 23) Array의 몇 가지 속성 이름을 지정하십시오.
답변 : 배열의 속성은 다음과 같습니다.
- 길이: 배열의 총 요소 수를 가져옵니다.
- IsFixedSize : 배열의 크기가 고정되어 있는지 여부를 알려줍니다.
- IsReadOnly : 배열이 읽기 전용인지 여부를 알려줍니다.
Q # 24) 어레이 클래스 란 무엇입니까?
대답: Array 클래스는 모든 배열의 기본 클래스입니다. 많은 속성과 메서드를 제공합니다. 네임 스페이스 시스템에 있습니다.
Q # 25) 문자열이란? 문자열 클래스의 속성은 무엇입니까?
대답: String은 char 객체의 모음입니다. C #에서 문자열 변수를 선언 할 수도 있습니다.
문자열 이름 = 'C # 질문';
C #의 문자열 클래스는 문자열을 나타냅니다. 문자열 클래스의 속성은 다음과 같습니다.
- 문자 현재 String에서 Char 객체를 가져옵니다.
- 길이 현재 String의 개체 수를 가져옵니다.
Q # 26) 이스케이프 시퀀스 란 무엇입니까? C #에서 일부 문자열 이스케이프 시퀀스의 이름을 지정합니다.
대답: 이스케이프 시퀀스는 백 슬래시 ()로 표시됩니다. 백 슬래시는 뒤에 오는 문자가 문자 그대로 해석되어야하거나 특수 문자임을 나타냅니다. 이스케이프 시퀀스는 단일 문자로 간주됩니다.
문자열 이스케이프 시퀀스는 다음과 같습니다.
- n – 개행 문자
- b – 백 스페이스
- \ – 백 슬래시
- '– 작은 따옴표
- ’’– 큰 따옴표
Q # 27) 정규식이란 무엇입니까? 정규 표현식을 사용하여 문자열을 검색 하시겠습니까?
대답: 정규식은 입력 세트와 일치하는 템플릿입니다. 패턴은 연산자, 구문 또는 문자 리터럴로 구성 될 수 있습니다. Regex는 문자열 구문 분석 및 문자열 대체에 사용됩니다.
예를 들면 :
*는 앞의 문자와 0 번 이상 일치합니다. 따라서 a * b 정규식은 b, ab, aab, aaab 등과 동일합니다.
Regex를 사용하여 문자열 검색 :
static void Main(string() args) { string() languages = { 'C#', 'Python', 'Java' }; foreach(string s in languages) { if(System.Text.RegularExpressions.Regex.IsMatch(s,'Python')) { Console.WriteLine('Match found'); } } }
위의 예는 언어 배열의 입력 집합에 대해 'Python'을 검색합니다. 입력에서 패턴이 발견되면 true를 반환하는 Regex.IsMatch를 사용합니다. 패턴은 일치하려는 입력을 나타내는 모든 정규식이 될 수 있습니다.
Q # 28) 기본 문자열 연산은 무엇입니까? 설명.
답변 : 몇 가지 기본적인 문자열 연산은 다음과 같습니다.
- 사슬 같이 잇다 : System.String.Concat을 사용하거나 + 연산자를 사용하여 두 문자열을 연결할 수 있습니다.
- 수정 : Replace (a, b)는 문자열을 다른 문자열로 바꾸는 데 사용됩니다. Trim ()은 문자열의 끝 또는 시작 부분을 트리밍하는 데 사용됩니다.
- 비교 : System.StringComparison ()은 대 / 소문자를 구분하거나 구분하지 않는 두 문자열을 비교하는 데 사용됩니다. 주로 두 개의 매개 변수, 원래 문자열 및 비교할 문자열을 사용합니다.
- 검색 : StartWith, EndsWith 메서드는 특정 문자열을 검색하는 데 사용됩니다.
Q # 29) 파싱이란 무엇입니까? 날짜 시간 문자열을 구문 분석하는 방법?
대답: 구문 분석은 문자열을 다른 데이터 유형으로 변환합니다.
예를 들면 :
문자열 텍스트 =“500”;
int num = int.Parse (텍스트);
500은 정수입니다. 따라서 Parse 메서드는 문자열 500을 고유 한 기본 유형, 즉 int로 변환합니다.
동일한 방법을 따라 DateTime 문자열을 변환합니다.
string dateTime =“2018 년 1 월 1 일”;
DateTime parsedValue = DateTime.Parse (dateTime);
고급 개념
Q # 30) 대리인이란 무엇입니까? 설명.
대답: Delegate는 메서드에 대한 참조를 보유하는 변수입니다. 따라서 함수 포인터 또는 참조 유형입니다. 모든 대리인은 System.Delegate 네임 스페이스에서 파생됩니다. Delegate와 참조하는 메서드는 모두 동일한 서명을 가질 수 있습니다.
- 대리인 선언 : 공개 대리자 void AddNumbers (int n);
대리자를 선언 한 후에는 대리자가 new 키워드를 사용하여 개체를 만들어야합니다.
AddNumbers an1 = 새로운 AddNumbers (number);
대리자는 대리자가 호출 될 때 내부적으로 호출되는 참조 메서드에 일종의 캡슐화를 제공합니다.
public delegate int myDel(int number); public class Program { public int AddNumbers(int a) { int Sum = a + 10; return Sum; } public void Start() { myDel DelgateExample = AddNumbers; } }
위의 예에서 정수 값을 매개 변수로 사용하는 myDel 대리자가 있습니다. Class Program에는 AddNumbers ()라는 대리자와 동일한 서명의 메서드가 있습니다.
델리게이트의 객체를 생성하는 Start ()라는 다른 메서드가있는 경우 델리게이트와 동일한 서명을 가지므로 객체를 AddNumbers에 할당 할 수 있습니다.
Q # 31) 이벤트 란?
대답: 이벤트는 응답해야하는 애플리케이션에 알림을 생성하는 사용자 작업입니다. 사용자 작업은 마우스 이동, 키 누르기 등이 될 수 있습니다.
프로그래밍 방식으로 이벤트를 발생시키는 클래스를 게시자라고하고 이벤트에 응답 / 수신하는 클래스를 구독자라고합니다. 이벤트에는 이벤트가 발생하지 않는 구독자가 하나 이상 있어야합니다.
델리게이트는 이벤트를 선언하는 데 사용됩니다.
Public delegate void PrintNumbers ();
이벤트 PrintNumbers myEvent;
Q # 32) 이벤트와 함께 델리게이트를 사용하는 방법은 무엇입니까?
대답: 델리게이트는 이벤트를 발생시키고 처리하는 데 사용됩니다. 항상 델리게이트를 먼저 선언 한 다음 이벤트를 선언해야합니다.
예를 보겠습니다.
Patient라는 클래스를 고려하십시오. 환자 클래스에서 환자의 사망 정보를 요구하는 보험 및 은행의 두 가지 다른 클래스를 고려하십시오. 여기에서 Insurance와 Bank는 구독자이고 Patient 클래스는 게시자가됩니다. 그것은 죽음 이벤트를 트리거하고 다른 두 클래스는 이벤트를 받아야합니다.
namespace ConsoleApp2 { public class Patient { public delegate void deathInfo();//Declaring a Delegate// public event deathInfo deathDate;//Declaring the event// public void Death() { deathDate(); } } public class Insurance { Patient myPat = new Patient(); void GetDeathDetails() { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetDeathDetails----------// myPat.deathDate += GetDeathDetails; } } public class Bank { Patient myPat = new Patient(); void GetPatInfo () { //-------Do Something with the deathDate event------------// } void Main() { //--------Subscribe the function GetPatInfo ----------// myPat.deathDate += GetPatInfo; } } }
문 # 33) 델리게이트에는 어떤 유형이 있습니까?
답변 : 다양한 유형의 대리인은 다음과 같습니다.
- 단일 대리인 : 단일 메서드를 호출 할 수있는 대리자입니다.
- 멀티 캐스트 대리인 : 여러 메서드를 호출 할 수있는 대리자입니다. + 및 – 연산자는 각각 구독 및 구독 취소에 사용됩니다.
- 일반 대리인 : 정의 할 대리자의 인스턴스가 필요하지 않습니다. Action, Funcs 및 Predicate의 세 가지 유형이 있습니다.
- 동작 – 위의 델리게이트 및 이벤트 예제에서 Action 키워드를 사용하여 델리게이트 및 이벤트의 정의를 대체 할 수 있습니다. Action 대리자는 인수에 대해 호출 할 수 있지만 결과를 반환하지 않는 메서드를 정의합니다.
공개 대리자 void deathInfo ();
공개 이벤트 deathInfo deathDate;
// 액션으로 바꾸기 //
공개 이벤트 액션 deathDate;
작업은 암시 적으로 대리자를 참조합니다.
-
- 기능 – Func 대리자는 인수에 대해 호출 할 수있는 메서드를 정의하고 결과를 반환합니다.
Func myDel 다음과 같다 델리게이트 bool myDel (int a, string b);
-
- 술부 – 인수에 대해 호출 할 수있는 메서드를 정의하고 항상 bool을 반환합니다.
myDel 술어 다음과 같다 델리게이트 bool myDel (string s);
문 # 34) 멀티 캐스트 대리인은 무엇을 의미합니까?
대답: 둘 이상의 메서드를 가리키는 델리게이트를 멀티 캐스트 델리게이트라고합니다. 멀티 캐스팅은 + 및 + = 연산자를 사용하여 수행됩니다.
Q # 32의 예를 고려하십시오.
두 명의 구독자가 있습니다. deathEvent, GetPatInfo , 및 GetDeathDetails . 따라서 우리는 + = 연산자를 사용했습니다. 그것은 언제든지 myDel 호출되면 두 가입자가 모두 호출됩니다. 델리게이트는 추가 된 순서대로 호출됩니다.
Q # 35) 이벤트에서 게시자 및 구독자를 설명하십시오.
대답: 게시자는 다른 유형의 다른 클래스의 메시지를 게시하는 클래스입니다. 메시지는 위의 질문에서 설명한대로 이벤트에 불과합니다.
로부터 예 Q # 32에서 Class Patient는 Publisher 클래스입니다. 이벤트를 생성하고 있습니다. deathEvent , 다른 클래스에서 수신합니다.
구독자는 관심있는 유형의 메시지를 캡처합니다. 예 Q # 32의 클래스 보험 및 은행은 구독자입니다. 그들은 이벤트에 관심이 있습니다 deathEvent 유형 빈 .
Q # 36) 동기 및 비동기 작업은 무엇입니까?
대답: 동기화는 주어진 시간에 하나의 스레드 만 리소스에 액세스 할 수있는 스레드로부터 안전한 코드를 만드는 방법입니다. 비동기 호출은 프로그램 흐름을 계속하기 전에 메서드가 완료 될 때까지 기다립니다.
동기 프로그래밍은 하나의 스레드 만 사용되기 때문에 사용자가 시간이 많이 걸리는 작업을 수행하려고 할 때 UI 작업에 나쁜 영향을 미칩니다. 비동기 작업에서는 호출 된 메서드가 특정 상황에서 작업을 완료하는 동안 프로그램이 다른 작업을 수행 할 수 있도록 메서드 호출이 즉시 반환됩니다.
C #에서 Async 및 Await 키워드는 비동기 프로그래밍을 달성하는 데 사용됩니다. 동기 프로그래밍에 대한 자세한 내용은 Q # 43을 참조하십시오.
Q # 37) C #에서 리플렉션이란 무엇입니까?
대답: 리플렉션은 런타임 중에 어셈블리의 메타 데이터에 액세스하는 코드의 기능입니다. 프로그램은 자신을 반영하고 메타 데이터를 사용하여 사용자에게 알리거나 동작을 수정합니다. 메타 데이터는 개체, 메서드에 대한 정보를 나타냅니다.
System.Reflection 네임 스페이스에는로드 된 모든 형식 및 메서드의 정보를 관리하는 메서드와 클래스가 포함되어 있습니다. 주로 Windows 응용 프로그램에 사용되며, 예를 들어 , Windows 양식에서 버튼의 속성을 봅니다.
클래스 리플렉션의 MemberInfo 개체는 클래스와 관련된 특성을 검색하는 데 사용됩니다.
리플렉션은 두 단계로 구현됩니다. 먼저 개체의 유형을 가져온 다음이 유형을 사용하여 메서드 및 속성과 같은 멤버를 식별합니다.
클래스 유형을 얻으려면 다음을 사용하면됩니다.
유형 mytype = myClass.GetType ();
클래스 유형이 있으면 클래스에 대한 다른 정보에 쉽게 액세스 할 수 있습니다.
System.Reflection.MemberInfo 정보 = mytype.GetMethod ( 'AddNumbers');
위의 문은 이름이있는 메서드를 찾으려고합니다. AddNumbers 수업에서 내 수업 .
Q # 38) 일반 클래스 란 무엇입니까?
대답: Generics 또는 Generic 클래스는 특정 데이터 유형이없는 클래스 또는 개체를 만드는 데 사용됩니다. 데이터 유형은 런타임 동안, 즉 프로그램에서 사용될 때 할당 될 수 있습니다.
예를 들면 :
따라서 위의 코드에서 처음에는 string과 int를 비교하는 2 개의 비교 메서드를 볼 수 있습니다.
다른 데이터 유형 매개 변수 비교의 경우 많은 오버로드 된 메소드를 생성하는 대신 일반 클래스를 생성하고 대체 데이터 유형, 즉 T를 전달할 수 있습니다. 따라서 T는 Main () 메소드에서 구체적으로 사용될 때까지 데이터 유형으로 작동합니다. .
Q # 39) 접근 자 속성 가져 오기 및 설정을 설명합니까?
대답: Get 및 Set를 접근 자라고합니다. 이는 속성에서 사용됩니다. 이 속성은 개인 필드의 값을 읽고 쓰는 메커니즘을 제공합니다. 해당 비공개 필드에 액세스하기 위해 이러한 접근자가 사용됩니다.
속성 가져 오기는 속성 값을 반환하는 데 사용됩니다.
속성 설정 접근자는 값을 설정하는 데 사용됩니다.
get 및 set 사용법은 다음과 같습니다.
Q # 40) 스레드 란 무엇입니까? 멀티 스레딩이란?
대답: 스레드는 실행될 수있는 일련의 명령으로, 프로그램이 동시 처리를 수행 할 수 있도록합니다. 동시 처리는 한 번에 둘 이상의 작업을 수행하는 데 도움이됩니다. 기본적으로 C #에는 스레드가 하나만 있습니다. 그러나 다른 스레드는 원래 스레드와 병렬로 코드를 실행하기 위해 생성 될 수 있습니다.
스레드에는 수명주기가 있습니다. 스레드 클래스가 생성 될 때마다 시작되고 실행 후 종료됩니다. System.Threading 스레드를 만들고 해당 멤버를 사용하기 위해 포함해야하는 네임 스페이스입니다.
스레드는 스레드 클래스를 확장하여 생성됩니다. 스타트() 메소드는 스레드 실행을 시작하는 데 사용됩니다.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C #은 한 번에 둘 이상의 작업을 실행할 수 있습니다. 이것은 다른 스레드에서 다른 프로세스를 처리하여 수행됩니다. 이를 MultiThreading이라고합니다.
다중 스레드 작업을 처리하는 데 사용되는 여러 스레드 메서드가 있습니다.
시작, 잠자기, 중단, 일시 중지, 재개 및 참여.
이러한 방법의 대부분은 자명합니다.
Q # 41) Thread Class의 속성 이름을 지정하십시오.
답변 : 스레드 클래스의 속성은 다음과 같습니다.
- 살아있다 – 스레드가 활성 일 때 True 값을 포함합니다.
- 이름 – 스레드 이름을 반환 할 수 있습니다. 또한 스레드의 이름을 설정할 수 있습니다.
- 우선 순위 – 운영 체제에서 설정 한 작업의 우선 순위 값을 반환합니다.
- IsBackground – 스레드가 백그라운드 프로세스 또는 포 그라운드 여야하는지 여부를 나타내는 값을 가져 오거나 설정합니다.
- ThreadState – 스레드 상태를 설명합니다.
문 # 42) 스레드의 다른 상태는 무엇입니까?
답변 : 스레드의 여러 상태는 다음과 같습니다.
- 시작되지 않음 – 스레드가 생성됩니다.
- 달리는 – 스레드가 실행을 시작합니다.
- WaitSleepJoin – 스레드는 sleep을 호출하고 호출은 다른 개체에서 대기하고 다른 스레드에서 join을 호출합니다.
- 매달린 – 스레드가 일시 중단되었습니다.
- 중단됨 – 스레드가 죽었지 만 중지 된 상태로 변경되지 않았습니다.
- 중지됨 – 스레드가 중지되었습니다.
문 # 43) Async 및 Await 란 무엇입니까?
대답: Async 및 Await 키워드는 C에서 비동기 메서드를 만드는 데 사용됩니다.
비동기 프로그래밍은 프로세스가 기본 또는 다른 프로세스와 독립적으로 실행됨을 의미합니다.
Async 및 Await의 사용법은 다음과 같습니다.
- 메서드 선언에는 Async 키워드가 사용됩니다.
- 카운트는 CalculateCount () 메서드를 호출하는 int 유형의 작업입니다.
- Calculatecount ()는 실행을 시작하고 무언가를 계산합니다.
- 내 스레드에서 독립적 인 작업이 수행 된 다음 await count 문에 도달합니다.
- Calculatecount가 완료되지 않으면 myMethod가 호출 메서드로 돌아가므로 주 스레드가 차단되지 않습니다.
- Calculatecount가 이미 완료된 경우 컨트롤이 await count에 도달하면 결과를 사용할 수 있습니다. 따라서 다음 단계는 동일한 스레드에서 계속됩니다. 단, 위의 경우 1 초 지연이 발생하는 상황은 아닙니다.
Q # 44) 교착 상태 란 무엇입니까?
대답: 교착 상태는 둘 이상의 프로세스가 서로 완료되기를 기다리고 있기 때문에 프로세스가 실행을 완료 할 수없는 상황입니다. 이것은 일반적으로 다중 스레딩에서 발생합니다.
여기서 공유 리소스는 프로세스에 의해 유지되고 다른 프로세스는 첫 번째 프로세스가이를 해제하기를 기다리고 있으며 잠긴 항목을 유지하는 스레드는 다른 프로세스가 완료되기를 기다리고 있습니다.
아래 예를 고려하십시오.
- 수행 작업은 objB에 액세스하고 1 초 동안 기다립니다.
- 한편 PerformtaskB는 ObjA에 액세스하려고합니다.
- 1 초 후 PeformtaskA는 PerformtaskB에 의해 잠긴 ObjA에 액세스하려고합니다.
- PerformtaskB는 PerformtaskA에 의해 잠긴 ObjB에 액세스하려고합니다.
이것은 교착 상태를 만듭니다.
Q # 45) 설명 L ock , 모니터 , 및 뮤텍스 스레딩의 개체.
대답: Lock 키워드는 주어진 시간에 하나의 스레드 만 코드의 특정 섹션에 들어갈 수 있도록합니다. 위에서 예 , lock (ObjA)는이 프로세스가 잠금을 해제 할 때까지 ObjA에 잠금이 설정되었음을 의미하며 다른 스레드는 ObjA에 액세스 할 수 없습니다.
Mutex는 잠금과 비슷하지만 한 번에 여러 프로세스에서 작동 할 수 있습니다. WaitOne ()은 잠금에 사용되며 ReleaseMutex ()는 잠금을 해제하는 데 사용됩니다. 그러나 Mutex는 획득하고 해제하는 데 시간이 걸리기 때문에 잠금보다 느립니다.
Monitor.Enter 및 Monitor.Exit는 내부적으로 잠금을 구현합니다. 잠금은 모니터의 단축키입니다. lock (objA)는 내부적으로 호출합니다.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q # 46) 경쟁 조건이란 무엇입니까?
연령: 경쟁 조건은 두 스레드가 동일한 리소스에 액세스하고 동시에 변경하려고 할 때 발생합니다. 리소스에 먼저 액세스 할 수있는 스레드는 예측할 수 없습니다.
두 개의 스레드 T1과 T2가 있고 X라는 공유 리소스에 액세스하려고 시도하는 경우 두 스레드가 모두 X에 값을 쓰려고하면 X에 마지막으로 기록 된 값이 저장됩니다.
문 # 47) 스레드 풀링이란 무엇입니까?
연령: 스레드 풀은 스레드 모음입니다. 이러한 스레드는 기본 스레드를 방해하지 않고 작업을 수행하는 데 사용할 수 있습니다. 스레드가 작업을 완료하면 스레드가 풀로 돌아갑니다.
System.Threading.ThreadPool 네임 스페이스에는 풀 및 해당 작업의 스레드를 관리하는 클래스가 있습니다.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
위의 줄은 작업을 대기열에 넣습니다. SomeTask 메소드에는 Object 유형의 매개 변수가 있어야합니다.
Q # 48) 직렬화 란 무엇입니까?
PC 용 무료 인공 지능 소프트웨어
대답: 직렬화는 코드를 이진 형식으로 변환하는 프로세스입니다. 일단 바이트로 변환되면 디스크 나 이러한 저장 장치에 쉽게 저장하고 쓸 수 있습니다. 직렬화는 코드의 원래 형식을 잃어 버리고 싶지 않을 때 주로 유용하며 나중에 언제든지 검색 할 수 있습니다.
(Serializable) 속성으로 표시된 모든 클래스는 이진 형식으로 변환됩니다.
이진 형식에서 C # 코드를 다시 가져 오는 과정을 역 직렬화라고합니다.
개체를 직렬화하려면 직렬화 할 개체가 필요합니다. 직렬화 된 개체 및 네임 스페이스 System.Runtime.Serialization을 포함 할 수있는 스트림에는 직렬화를위한 클래스가 포함될 수 있습니다.
Q # 49) Serialization의 유형은 무엇입니까?
답변 : 직렬화의 다른 유형은 다음과 같습니다.
- XML 직렬화 – 모든 공용 속성을 XML 문서로 직렬화합니다. 데이터가 XML 형식이므로 다양한 형식으로 쉽게 읽고 조작 할 수 있습니다. 클래스는 System.sml.Serialization에 있습니다.
- 비누 – 클래스는 System.Runtime.Serialization에 있습니다. XML과 유사하지만 SOAP를 이해하는 모든 시스템에서 사용할 수있는 완전한 SOAP 호환 봉투를 생성합니다.
- 이진 직렬화 – 모든 코드를 이진 형식으로 변환 할 수 있습니다. 공용 및 비공개 속성을 직렬화하고 복원 할 수 있습니다. 더 빠르고 더 적은 공간을 차지합니다.
Q # 50) XSD 파일이란 무엇입니까?
대답: XSD 파일은 XML 스키마 정의를 나타냅니다. XML 파일의 구조를 제공합니다. 이는 XML에 있어야하는 요소와 어떤 순서로, 어떤 속성이 있어야하는지 결정한다는 의미입니다. XML과 연관된 XSD 파일이 없으면 XML은 모든 태그, 속성 및 요소를 가질 수 있습니다.
Xsd.exe 도구는 파일을 XSD 형식으로 변환합니다. C # 코드를 직렬화하는 동안 클래스는 xsd.exe에 의해 XSD 호환 형식으로 변환됩니다.
결론
C #은 날마다 빠르게 성장하고 있으며 소프트웨어 테스트 산업에서 중요한 역할을합니다.
이 기사를 통해 인터뷰 준비가 훨씬 쉬워지고 대부분의 C # 주제에 대한 상당한 지식을 얻을 수있을 것입니다.
C # 인터뷰에 자신있게 맞설 준비가 되셨기를 바랍니다 !!