top 50 c interview questions with answers
Często zadawane podstawowe pytania do wywiadów w języku C # dotyczące programowania i kodowania:
C # to język programowania, który szybko się rozwinął i jest również szeroko stosowany. Jest bardzo poszukiwany, wszechstronny i obsługuje również wiele platform.
Jest używany nie tylko w systemie Windows, ale w wielu innych systemach operacyjnych. Dlatego bardzo ważne jest, aby dobrze rozumieć ten język, aby dostać się na jakąkolwiek pracę w branży testowania oprogramowania.
Poniżej wymieniono nie tylko zestaw najczęściej zadawanych pytań dotyczących języka C #, ale także kilka bardzo ważnych tematów, które należy zrozumieć, aby wyróżnić się z tłumu populacji języka C #.
Ponieważ C # to obszerny temat, aby ułatwić odniesienie się do wszystkich pojęć, podzieliłem ten temat na trzy części, jak wspomniano poniżej:
- Pytania dotyczące podstawowych pojęć
- Pytania dotyczące tablic i łańcuchów
- Zaawansowane koncepcje
Ten artykuł zawiera zestaw 50 najważniejszych pytań i odpowiedzi do wywiadów C #, obejmujących w prostych słowach prawie wszystkie ważne tematy, aby pomóc Ci przygotować się do rozmowy kwalifikacyjnej.
Czego się nauczysz:
Najpopularniejsze pytania i odpowiedzi do wywiadów w języku C #
Podstawowe koncepcje
P 1) Co to jest obiekt i klasa?
Odpowiedź: Klasa to hermetyzacja właściwości i metod używanych do reprezentowania encji w czasie rzeczywistym. Jest to struktura danych, która łączy wszystkie instancje w jednej jednostce.
Obiekt jest zdefiniowany jako wystąpienie klasy. Z technicznego punktu widzenia jest to tylko blok przydzielonej pamięci, który można przechowywać w postaci zmiennych, tablicy lub kolekcji.
P # 2) Jakie są podstawowe koncepcje OOP?
Odpowiedź: Cztery podstawowe koncepcje programowania obiektowego to:
- Kapsułkowanie : Tutaj wewnętrzna reprezentacja obiektu jest ukryta przed widokiem poza definicją obiektu. Można uzyskać dostęp tylko do wymaganych informacji, podczas gdy reszta implementacji danych jest ukryta.
- Abstrakcja: Jest to proces identyfikacji krytycznego zachowania i danych obiektu oraz eliminacji nieistotnych szczegółów.
- Dziedzictwo : Jest to możliwość tworzenia nowych klas z innej klasy. Odbywa się to poprzez uzyskiwanie dostępu, modyfikowanie i rozszerzanie zachowania obiektów w klasie nadrzędnej.
- Wielopostaciowość : Nazwa oznacza jedno imię, wiele form. Osiąga się to poprzez posiadanie wielu metod o tej samej nazwie, ale różnych implementacjach.
P # 3) Co to jest kod zarządzany i niezarządzany?
Odpowiedź: Kod zarządzany to kod wykonywany przez CLR (Common Language Runtime), czyli cały kod aplikacji jest oparty na platformie .Net. Jest uważany za zarządzany ze względu na strukturę .Net, która wewnętrznie wykorzystuje moduł odśmiecania pamięci do czyszczenia nieużywanej pamięci.
Kod niezarządzany to dowolny kod, który jest wykonywany przez środowisko wykonawcze aplikacji w dowolnej innej strukturze poza .Net. Środowisko wykonawcze aplikacji zajmie się pamięcią, bezpieczeństwem i innymi operacjami wydajnościowymi.
P # 4) Co to jest interfejs?
Odpowiedź: Interfejs to klasa bez implementacji. Jedyne, co zawiera, to deklaracja metod, właściwości i zdarzeń.
Pytanie 5) Jakie są różne typy klas w języku C #?
Odpowiedź: Różne typy klas w języku C # to:
- Klasa częściowa: Pozwala swoim członkom na dzielenie lub udostępnianie wielu plików .cs. Jest oznaczony słowem kluczowym Częściowy.
- Klasa zamknięta: Jest to klasa, której nie można dziedziczyć. Aby uzyskać dostęp do członków zapieczętowanej klasy, musimy utworzyć obiekt tej klasy. Jest oznaczony słowem kluczowym Zapieczętowany .
- Klasa abstrakcyjna : Jest to klasa, której obiekt nie może zostać utworzony. Klasa może być tylko dziedziczona. Powinien zawierać co najmniej jedną metodę. Jest oznaczony słowem kluczowym abstrakcyjny .
- Klasa statyczna : Jest to klasa, która nie pozwala na dziedziczenie. Członkowie klasy są również statyczni. Jest oznaczony słowem kluczowym statyczny . To słowo kluczowe mówi kompilatorowi, aby sprawdzał wszelkie przypadkowe wystąpienia klasy statycznej.
Q # 6) Wyjaśnij kompilację kodu w C #.
Odpowiedź: Kompilacja kodu w C # obejmuje następujące cztery kroki:
- Kompilowanie kodu źródłowego do kodu zarządzanego przez kompilator C #.
- Łączenie nowo utworzonego kodu w zestawy.
- Ładowanie środowiska uruchomieniowego języka wspólnego (CLR).
- Wykonywanie zestawu przez CLR.
Pytanie 7) Jakie są różnice między klasą a strukturą?
Odpowiedź: Poniżej podano różnice między klasą a strukturą:
Klasa | Struct |
---|---|
Obsługuje dziedziczenie | Nie obsługuje dziedziczenia |
Klasa jest przekazywana przez odwołanie (typ referencyjny) | Struktura jest przekazywana przez kopię (typ wartości) |
Członkowie są domyślnie prywatni | Członkowie są domyślnie publiczni |
Dobre dla większych, złożonych obiektów | Dobre dla małych izolowanych modeli |
Może używać pojemnika na odpady do zarządzania pamięcią | Nie można użyć modułu wyrzucania elementów bezużytecznych, a zatem nie ma zarządzania pamięcią |
P # 8) Jaka jest różnica między metodą wirtualną a metodą abstrakcyjną?
Odpowiedź: Metoda Virtual musi zawsze mieć domyślną implementację. Można go jednak przesłonić w klasie pochodnej, chociaż nie jest to obowiązkowe. Można go zastąpić przy użyciu nadpisanie słowo kluczowe.
Metoda abstrakcyjna nie ma implementacji. Znajduje się w klasie abstrakcyjnej. Klasa pochodna musi koniecznie implementować metodę abstrakcyjną. Na nadpisanie słowo kluczowe nie jest tutaj konieczne, chociaż można go użyć.
Q # 9) Wyjaśnij przestrzenie nazw w C #.
Odpowiedź: Służą do organizowania dużych projektów kodu. „System” to najczęściej używana przestrzeń nazw w języku C #. Możemy stworzyć własną przestrzeń nazw, a także możemy używać jednej przestrzeni nazw w innej, nazywanej zagnieżdżonymi przestrzeniami nazw.
Są one oznaczone słowem kluczowym „przestrzeń nazw”.
P # 10) Co to jest instrukcja „using” w C #?
Odpowiedź: Słowo kluczowe „Using” oznacza, że dana przestrzeń nazw jest używana przez program.
Na przykład, przy użyciu System
Tutaj, System jest przestrzenią nazw. Klasa Konsola jest zdefiniowana w obszarze System. Możemy więc użyć w naszym programie console.writeline („….”) Lub readline.
Q # 11) Wyjaśnij abstrakcję.
Odpowiedź: Abstrakcja jest jedną z koncepcji OOP. Służy do wyświetlania tylko podstawowych cech klasy i ukrywania niepotrzebnych informacji.
Weźmy przykład samochodu:
Kierowca samochodu powinien znać szczegóły dotyczące samochodu, takie jak kolor, nazwa, lusterka, układ kierowniczy, przekładnia, hamulec itp. To, czego nie musi wiedzieć, to wewnętrzny silnik, układ wydechowy.
Tak więc abstrakcja pomaga wiedzieć, co jest konieczne i ukrywać wewnętrzne szczegóły przed światem zewnętrznym. Ukrywanie informacji wewnętrznych można osiągnąć deklarując takie parametry jako Prywatne za pomocą pliku prywatny słowo kluczowe.
P # 12) Wyjaśnij polimorfizm?
Odpowiedź: Programowo Polimorfizm oznacza tę samą metodę, ale różne implementacje. Istnieją 2 typy, czas kompilacji i środowisko wykonawcze.
- Polimorfizm w czasie kompilacji osiąga się poprzez przeciążenie operatora.
- Polimorfizm w czasie wykonywania osiąga się przez nadpisanie. Funkcje dziedziczenia i wirtualne są używane podczas polimorfizmu środowiska wykonawczego.
Na przykład ,Jeśli klasa ma metodę Void Add (), polimorfizm uzyskuje się przez przeciążenie metody, to znaczy void Add (int a, int b), void Add (int add) są metodami przeciążonymi.
Q # 13) W jaki sposób obsługa wyjątków jest implementowana w języku C #?
Odpowiedź: Obsługa wyjątków odbywa się za pomocą czterech słów kluczowych w języku C #:
- próbować : Zawiera blok kodu, dla którego zostanie sprawdzony wyjątek.
- złapać : Jest to program, który przechwytuje wyjątek przy pomocy programu obsługi wyjątków.
- Wreszcie : Jest to blok kodu napisany do wykonania niezależnie od tego, czy wyjątek został przechwycony, czy nie.
- Rzucać : Zgłasza wyjątek, gdy wystąpi problem.
P # 14) Co to są klasy we / wy C #? Jakie są najczęściej używane klasy I / O?
Odpowiedź: C # ma przestrzeń nazw System.IO, składającą się z klas, które są używane do wykonywania różnych operacji na plikach, takich jak tworzenie, usuwanie, otwieranie, zamykanie itp.
Niektóre powszechnie używane klasy we / wy to:
- Plik - Pomaga w manipulowaniu plikiem.
- StreamWriter - Służy do zapisywania znaków w strumieniu.
- StreamReader - Służy do odczytywania znaków w strumieniu.
- StringWriter - Służy do odczytu bufora ciągów.
- StringReader - Służy do pisania buforu ciągów.
- Ścieżka - Służy do wykonywania operacji związanych z informacjami o ścieżce.
Pytanie nr 15) Co to jest klasa StreamReader / StreamWriter?
Odpowiedź: StreamReader i StreamWriter to klasy przestrzeni nazw System.IO. Są używane, gdy chcemy czytać lub zapisywać odpowiednio charact90, dane z czytnika.
Niektórzy członkowie StreamReader to: Close (), Read (), Readline ().
Członkami StreamWriter są: 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-------------------// } }
P # 16) Co to jest Destructor w C #?
Odpowiedź: Destructor służy do czyszczenia pamięci i zwalniania zasobów. Ale w C # jest to wykonywane samodzielnie przez moduł odśmiecania pamięci. System.GC.Collect () jest wywoływana wewnętrznie w celu oczyszczenia. Ale czasami może być konieczne ręczne zaimplementowanie destruktorów.
Na przykład:
~Car() { Console.writeline(“….”); }
P # 17) Co to jest klasa abstrakcyjna?
Odpowiedź: Klasa abstrakcyjna to klasa oznaczona słowem kluczowym abstract i może być używana tylko jako klasa podstawowa. Ta klasa powinna być zawsze dziedziczona. Nie można utworzyć instancji samej klasy. Jeśli nie chcemy, aby jakikolwiek program tworzył obiekt klasy, to takie klasy mogą być abstrakcyjne.
Żadna metoda w klasie abstrakcyjnej nie ma implementacji w tej samej klasie. Ale muszą być zaimplementowane w klasie potomnej.
Na przykład:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Wszystkie metody w klasie abstrakcyjnej są niejawnie metodami wirtualnymi. Dlatego słowo kluczowe virtual nie powinno być używane z żadnymi metodami w klasie abstrakcyjnej.
P # 18) Co to jest boks i rozpakowywanie?
Odpowiedź: Konwersja typu wartości na typ referencyjny nosi nazwę Boxing.
Na przykład:
int Wartość1 - = 10;
//----Boks------//
object boxedValue = Wartość1;
Wywoływana jest jawna konwersja tego samego typu referencyjnego (utworzonego przez opakowanie) z powrotem do typu wartości Rozpakowanie .
Na przykład:
// ———— Odblokowywanie —————— //
int UnBoxing = int (boxedValue);
jak uruchamiać pliki .jar w systemie Windows
P # 19) Jaka jest różnica między instrukcjami Continue i Break?
Odpowiedź: Instrukcja Break przerywa pętlę. Sprawia, że kontrola programu wychodzi z pętli. Instrukcja Continue sprawia, że program sterujący wychodzi tylko z bieżącej iteracji. Nie przerywa pętli.
P # 20) Jaka jest różnica między blokiem ostatecznym a zakończeniem?
Odpowiedź: Wreszcie blok jest wywoływany po wykonaniu bloku try and catch. Służy do obsługi wyjątków. Niezależnie od tego, czy wyjątek zostanie przechwycony, czy nie, ten blok kodu zostanie wykonany. Zwykle ten blok będzie zawierał kod czyszczący.
finalize jest wywoływana tuż przed czyszczeniem pamięci. Służy do wykonywania operacji czyszczenia niezarządzanego kodu. Jest wywoływana automatycznie, gdy dana instancja nie jest później wywoływana.
Tablice i ciągi
P # 21) Co to jest tablica? Podać składnię pojedynczej i wielowymiarowej tablicy?
Odpowiedź: Tablica służy do przechowywania wielu zmiennych tego samego typu. Jest to zbiór zmiennych przechowywanych w ciągłej lokalizacji pamięci.
Na przykład:
liczby podwójne = nowe podwójne (10);
int () score = new int (4) {25,24,23,25};
Tablica jednowymiarowa to tablica liniowa, w której zmienne są przechowywane w jednym wierszu. Powyżej przykład to jednowymiarowa tablica.
Tablice mogą mieć więcej niż jeden wymiar. Tablice wielowymiarowe są również nazywane tablicami prostokątnymi.
Na przykład , int (,) numbers = new int (3,2) {{1,2}, {2,3}, {3,4}};
P # 22) Co to jest postrzępiona tablica?
Odpowiedź: Tablica postrzępiona to tablica, której elementami są tablice. Jest również nazywany tablicą tablic. Może mieć jeden lub wiele wymiarów.
int () jaggedArray = new int (4) ();
Q # 23) Nazwij niektóre właściwości Array.
Odpowiedź: Właściwości tablicy obejmują:
- Długość: Pobiera całkowitą liczbę elementów w tablicy.
- IsFixedSize: Informuje, czy rozmiar tablicy jest stały, czy nie.
- IsReadOnly : Informuje, czy tablica jest tylko do odczytu, czy nie.
P # 24) Co to jest klasa macierzy?
Odpowiedź: Klasa Array jest klasą bazową dla wszystkich tablic. Zapewnia wiele właściwości i metod. Jest obecny w systemie przestrzeni nazw.
Q # 25) Co to jest ciąg? Jakie właściwości ma klasa String?
Odpowiedź: Ciąg to zbiór obiektów typu char. Możemy również zadeklarować zmienne łańcuchowe w języku C #.
string name = „C # pytania”;
Klasa ciągów w C # reprezentuje ciąg. Właściwości klasy string to:
- Znaki pobierz obiekt Char w bieżącym łańcuchu znaków.
- Długość pobiera liczbę obiektów w bieżącym łańcuchu.
P # 26) Co to jest sekwencja ucieczki? Nazwij niektóre sekwencje ucieczki String w C #.
Odpowiedź: Sekwencja ucieczki jest oznaczona ukośnikiem odwrotnym (). Ukośnik odwrotny wskazuje, że znak następujący po nim powinien być interpretowany dosłownie lub jest to znak specjalny. Sekwencja ucieczki jest traktowana jako pojedynczy znak.
Sekwencje ucieczki ciągów są następujące:
- n - Znak nowego wiersza
- b - Backspace
- \ - Ukośnik wsteczny
- ’- pojedynczy cudzysłów
- '' - Cudzysłów
P # 27) Co to są wyrażenia regularne? Wyszukać ciąg przy użyciu wyrażeń regularnych?
Odpowiedź: Wyrażenie regularne to szablon pasujący do zestawu danych wejściowych. Wzorzec może składać się z operatorów, konstrukcji lub literałów znakowych. Regex służy do analizowania ciągu znaków i zastępowania ciągu znaków.
Na przykład:
* dopasowuje poprzedni znak zero lub więcej razy. Zatem a * b regex jest równoważne z b, ab, aab, aaab i tak dalej.
Wyszukiwanie ciągu za pomocą 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'); } } }
Powyższy przykład wyszukuje hasło „Python” w zestawie danych wejściowych z tablicy języków. Używa Regex.IsMatch, który zwraca wartość true w przypadku, gdy wzorzec zostanie znaleziony na wejściu. Wzorzec może być dowolnym wyrażeniem regularnym reprezentującym dane wejściowe, które chcemy dopasować.
P # 28) Jakie są podstawowe operacje na łańcuchach? Wyjaśniać.
Odpowiedź: Niektóre z podstawowych operacji na łańcuchach to:
- Powiązać : Dwa ciągi mogą być łączone przy użyciu System.String.Concat lub przy użyciu operatora +.
- Modyfikować : Zastąp (a, b) służy do zamiany ciągu na inny. Trim () służy do przycinania łańcucha na końcu lub na początku.
- Porównać : System.StringComparison () służy do porównywania dwóch ciągów, z uwzględnieniem wielkości liter lub bez rozróżniania wielkości liter. Zwykle pobiera dwa parametry, oryginalny ciąg i łańcuch do porównania.
- Szukaj : StartWith, EndsWith metody są używane do wyszukiwania określonego ciągu.
P # 29) Co to jest parsowanie? Jak przeanalizować ciąg daty i godziny?
Odpowiedź: Parsowanie konwertuje ciąg na inny typ danych.
Na przykład:
string text = „500”;
int num = int.Parse (tekst);
500 to liczba całkowita. Tak więc metoda Parse konwertuje ciąg 500 na swój własny typ podstawowy, tj. Int.
Wykonaj tę samą metodę, aby przekonwertować ciąg DateTime.
string dateTime = '1 stycznia 2018 r.';
DateTime parsedValue = DateTime.Parse (dateTime);
Zaawansowane koncepcje
P # 30) Kim jest delegat? Wyjaśniać.
Odpowiedź: Delegat to zmienna, która przechowuje odwołanie do metody. Stąd jest to wskaźnik funkcji lub typ referencyjny. Wszyscy delegaci pochodzą z przestrzeni nazw System.Delegate. Delegat i metoda, do której się odwołuje, mogą mieć ten sam podpis.
- Deklarowanie delegata: delegat publiczny void AddNumbers (int n);
Po zadeklarowaniu delegata obiekt musi zostać utworzony przez delegata przy użyciu słowa kluczowego new.
AddNumbers an1 = new AddNumbers (liczba);
jak obsługiwać wyskakujące okienko w selenium webdriver
Delegat zapewnia rodzaj hermetyzacji metody referencyjnej, która zostanie wewnętrznie wywołana, gdy zostanie wywołany delegat.
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; } }
W powyższym przykładzie mamy delegata myDel, który przyjmuje wartość całkowitą jako parametr. Klasa Program ma metodę o tej samej sygnaturze co delegat, zwaną AddNumbers ().
Jeśli istnieje inna metoda o nazwie Start (), która tworzy obiekt delegata, wówczas obiekt można przypisać do AddNumbers, ponieważ ma taki sam podpis jak delegat.
P # 31) Co to są wydarzenia?
Odpowiedź: Zdarzenia to akcje użytkownika, które generują powiadomienia dla aplikacji, na które musi ona odpowiedzieć. Czynnościami użytkownika mogą być ruchy myszy, naciśnięcie klawisza i tak dalej.
Programowo klasa wywołująca zdarzenie jest nazywana wydawcą, a klasa, która odpowiada / odbiera zdarzenie, nazywana jest subskrybentem. Zdarzenie powinno mieć co najmniej jednego subskrybenta, w innym przypadku to zdarzenie nigdy nie jest zgłaszane.
Delegaci służą do deklarowania zdarzeń.
Pełnomocnik publiczny void PrintNumbers ();
Wydrukowane numery zdarzeń myEvent;
P # 32) Jak używać delegatów w przypadku wydarzeń?
Odpowiedź: Delegaci służą do zgłaszania zdarzeń i obsługi ich. Zawsze należy najpierw zadeklarować delegata, a następnie zadeklarować zdarzenia.
Zobaczmy przykład:
Rozważ zajęcia o nazwie Pacjent. Rozważ dwie inne klasy, Ubezpieczenia i Bank, które wymagają informacji o zgonie pacjenta z klasy pacjentów. Tutaj ubezpieczenie i bank są subskrybentami, a klasa Pacjent staje się wydawcą. Wywołuje zdarzenie śmierci, a pozostałe dwie klasy powinny otrzymać zdarzenie.
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; } } }
Pytanie # 33) Jakie są różne typy delegatów?
Odpowiedź: Różne typy delegatów to:
- Pojedynczy delegat : Delegat, który może wywołać jedną metodę.
- Delegat multiemisji : Delegat, który może wywoływać wiele metod. Operatory + i - służą odpowiednio do subskrybowania i anulowania subskrypcji.
- Delegat ogólny : Nie wymaga zdefiniowania instancji delegata. Istnieją trzy typy: Action, Funcs i Predicate.
- Akcja - W powyższym przykładzie delegatów i wydarzeń możemy zamienić definicję delegata i zdarzenia za pomocą słowa kluczowego Action. Delegat Action definiuje metodę, którą można wywołać dla argumentów, ale nie zwraca wyniku
Delegat publiczny void deathInfo ();
Zdarzenie publiczne deathInfo deathDate;
// Zamiana na Action //
Wydarzenie publiczne Akcja deathDate;
Akcja niejawnie odwołuje się do delegata.
-
- Funkcje - Delegat Func definiuje metodę, która może być wywoływana na argumentach i zwraca wynik.
Func myDel jest taki sam jak delegate bool myDel (int a, string b);
-
- Orzec - Definiuje metodę, którą można wywołać na argumentach i zawsze zwraca wartość bool.
Predicate myDel jest taki sam jak delegate bool myDel (string s);
Pytanie # 34) Co oznaczają delegaci multiemisji?
Odpowiedź: Delegat wskazujący na więcej niż jedną metodę nazywany jest delegatem multiemisji. Multiemisja odbywa się za pomocą operatora + i + =.
Rozważmy przykład z języka Q # 32.
Jest dwóch subskrybentów deathEvent, GetPatInfo , i GetDeathDetails . Dlatego użyliśmy operatora + =. Oznacza to, że zawsze myDel wywoływana jest wywołanie obu abonentów. Delegaci będą wywoływani w kolejności, w jakiej są dodawani.
Q # 35) Wyjaśnij wydawcom i subskrybentom w wydarzeniach.
Odpowiedź: Wydawca to klasa odpowiedzialna za publikowanie wiadomości różnych typów innych klas. Przesłanie to nic innego jak wydarzenie, o którym mowa w powyższych pytaniach.
Z Przykład w Q # 32 klasa Pacjent to klasa wydawcy. Generuje wydarzenie deathEvent , który otrzymują inne klasy.
Abonenci przechwytują wiadomość typu, która ich interesuje. Ponownie z pliku Przykład Q # 32, ubezpieczenie klasowe i bank są abonentami. Są zainteresowani wydarzeniem deathEvent typu unieważnić .
P # 36) Co to są operacje synchroniczne i asynchroniczne?
Odpowiedź: Synchronizacja to sposób na utworzenie kodu bezpiecznego dla wątków, w którym tylko jeden wątek może uzyskać dostęp do zasobu w danym momencie. Wywołanie asynchroniczne czeka na zakończenie metody przed kontynuowaniem przepływu programu.
Programowanie synchroniczne źle wpływa na operacje interfejsu użytkownika, gdy użytkownik próbuje wykonać czasochłonne operacje, ponieważ zostanie użyty tylko jeden wątek. W operacji asynchronicznej wywołanie metody natychmiast zwróci się, tak aby program mógł wykonać inne operacje, podczas gdy wywoływana metoda kończy swoją pracę w określonych sytuacjach.
W języku C # słowa kluczowe Async i Await są używane do programowania asynchronicznego. Spójrz na Q # 43, aby uzyskać więcej informacji na temat programowania synchronicznego.
P # 37) Co to jest odbicie w C #?
Odpowiedź: Odbicie to zdolność kodu do uzyskiwania dostępu do metadanych zestawu w czasie wykonywania. Program dokonuje refleksji i wykorzystuje metadane do informowania użytkownika lub modyfikowania jego zachowania. Metadane odnoszą się do informacji o obiektach, metodach.
Przestrzeń nazw System.Reflection zawiera metody i klasy, które zarządzają informacjami o wszystkich załadowanych typach i metodach. Jest używany głównie w aplikacjach Windows, Na przykład , aby wyświetlić właściwości przycisku w formularzu Windows.
Obiekt MemberInfo odbicia klasy służy do odnajdywania atrybutów skojarzonych z klasą.
Odbicie jest realizowane w dwóch etapach, najpierw pobieramy typ obiektu, a następnie używamy typu do identyfikacji elementów członkowskich, takich jak metody i właściwości.
Aby uzyskać typ klasy, możemy po prostu użyć,
Wpisz mytype = myClass.GetType ();
Gdy mamy już typ klasy, można łatwo uzyskać dostęp do innych informacji o klasie.
System.Reflection.MemberInfo Info = mytype.GetMethod („AddNumbers”);
Powyższa instrukcja próbuje znaleźć metodę o nazwie AddNumbers w klasie moja klasa .
P # 38) Co to jest klasa ogólna?
Odpowiedź: Klasa Generics lub Generic służy do tworzenia klas lub obiektów, które nie mają określonego typu danych. Typ danych można przypisać w czasie wykonywania, tj. Gdy jest używany w programie.
Na przykład:
Tak więc z powyższego kodu widzimy początkowo 2 metody porównujące, aby porównać ciąg i int.
W przypadku porównywania parametrów innych typów danych, zamiast tworzyć wiele przeciążonych metod, możemy utworzyć klasę generyczną i przekazać zastępczy typ danych, tj. T. Tak więc T działa jako typ danych, dopóki nie zostanie specjalnie użyty w metodzie Main () .
P # 39) Wyjaśnij właściwości Get and Set Accessor?
Odpowiedź: Pobieranie i ustawianie nazywane są akcesoriami. Są one wykorzystywane przez Properties. Właściwość zapewnia mechanizm odczytu, zapisu wartości pola prywatnego. Aby uzyskać dostęp do tego prywatnego pola, używane są te metody dostępu.
Get Property służy do zwracania wartości właściwości
Metoda dostępu Set Property służy do ustawiania wartości.
Sposób użycia funkcji get and set jest następujący:
P # 40) Co to jest wątek? Co to jest wielowątkowość?
Odpowiedź: Wątek to zestaw instrukcji, które mogą zostać wykonane, co umożliwi naszemu programowi przetwarzanie współbieżne. Jednoczesne przetwarzanie pomaga nam wykonywać więcej niż jedną operację naraz. Domyślnie C # ma tylko jeden wątek. Ale inne wątki można utworzyć w celu wykonywania kodu równolegle z oryginalnym wątkiem.
Wątek ma cykl życia. Rozpoczyna się za każdym razem, gdy tworzona jest klasa wątku i kończy się po wykonaniu. System.Threading jest przestrzenią nazw, którą należy uwzględnić, aby tworzyć wątki i używać ich członków.
Wątki są tworzone przez rozszerzenie klasy wątku. Początek() służy do rozpoczęcia wykonywania wątku.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # może jednocześnie wykonywać więcej niż jedno zadanie. Odbywa się to poprzez obsługę różnych procesów przez różne wątki. Nazywa się to wielowątkowością.
Istnieje kilka metod wątków używanych do obsługi operacji wielowątkowych:
Start, Sleep, Abort, Suspend, Resume i Join.
Większość z tych metod nie wymaga wyjaśnień.
Q # 41) Nazwij niektóre właściwości klasy wątku.
Odpowiedź: Niewiele właściwości klasy gwintu to:
- Żyje - zawiera wartość True, gdy wątek jest aktywny.
- Nazwa - Może zwrócić nazwę wątku. Można również ustawić nazwę wątku.
- Priorytet - zwraca priorytetową wartość zadania ustawioną przez system operacyjny.
- IsBackground - pobiera lub ustawia wartość, która wskazuje, czy wątek powinien być procesem w tle, czy pierwszym planem.
- ThreadState - opisuje stan wątku.
Pytanie nr 42) Jakie są różne stany wątku?
Odpowiedź: Różne stany wątku to:
- Unstarted - Utworzono wątek.
- Bieganie - Wątek rozpoczyna wykonywanie.
- WaitSleepJoin - Wątek wywołuje stan uśpienia, połączenia oczekują na inny obiekt i wywołuje złączenie w innym wątku.
- Zawieszony - Wątek został zawieszony.
- Niedonoszony - Wątek jest martwy, ale nie został zmieniony w stan zatrzymany.
- Zatrzymany - Wątek został zatrzymany.
Pytanie # 43) Co to jest Async and Await?
Odpowiedź: Słowa kluczowe Async i Await służą do tworzenia metod asynchronicznych w języku C.
Programowanie asynchroniczne oznacza, że proces przebiega niezależnie od procesów głównych lub innych.
Użycie Async and Await jest pokazane poniżej:
- Do deklaracji metody używane jest słowo kluczowe Async.
- Liczba jest zadaniem typu int, które wywołuje metodę CalculateCount ().
- Calculatecount () rozpoczyna wykonywanie i coś oblicza.
- Niezależna praca jest wykonywana na moim wątku, a następnie zostanie osiągnięta instrukcja liczby oczekujących.
- Jeśli Calculatecount nie zostanie zakończone, myMethod powróci do swojej metody wywołującej, więc główny wątek nie zostanie zablokowany.
- Jeśli Obliczanie jest już zakończone, to wynik jest dostępny, gdy kontrola osiągnie liczbę oczekujących. Więc następny krok będzie kontynuowany w tym samym wątku. Nie ma to jednak miejsca w powyższym przypadku, w którym występuje opóźnienie 1 sekundy.
P # 44) Co to jest impas?
Odpowiedź: Zakleszczenie to sytuacja, w której proces nie jest w stanie ukończyć swojego wykonania, ponieważ co najmniej dwa procesy czekają na zakończenie. Zwykle ma to miejsce w przypadku wielowątkowości.
Tutaj współdzielony zasób jest przetrzymywany przez proces, a inny proces czeka na zwolnienie pierwszego procesu, a wątek zawierający zablokowany element czeka na zakończenie innego procesu.
Rozważ poniższy przykład:
- Wykonywanie zadań uzyskuje dostęp do objB i czeka przez 1 sekundę.
- W międzyczasie PerformtaskB próbuje uzyskać dostęp do ObjA.
- Po 1 sekundzie PeformtaskA próbuje uzyskać dostęp do ObjA, który jest zablokowany przez PerformtaskB.
- PerformtaskB próbuje uzyskać dostęp do ObjB, który jest zablokowany przez PerformtaskA.
To tworzy impas.
Q # 45) Wyjaśnij L. ock , Monitory , i Mutex Obiekt w wątkach.
Odpowiedź: Słowo kluczowe lock zapewnia, że w danym momencie tylko jeden wątek może wprowadzić określoną sekcję kodu. W powyższym Przykład , lock (ObjA) oznacza, że blokada jest umieszczona na ObjA, dopóki ten proces go nie zwolni, żaden inny wątek nie ma dostępu do ObjA.
Mutex jest również jak blokada, ale może działać jednocześnie w wielu procesach. WaitOne () służy do blokowania, a ReleaseMutex () służy do zwalniania blokady. Ale Mutex jest wolniejszy niż blokowanie, ponieważ jego zdobycie i zwolnienie zajmuje trochę czasu.
Monitor.Enter i Monitor.Exit implementują wewnętrzną blokadę. kłódka to skrót dla monitorów. lock (objA) wywołuje wewnętrznie.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
P # 46) Co to jest stan wyścigu?
Lata: Stan wyścigu występuje, gdy dwa wątki uzyskują dostęp do tego samego zasobu i próbują go zmienić w tym samym czasie. Nie można przewidzieć wątku, który jako pierwszy będzie mógł uzyskać dostęp do zasobu.
Jeśli mamy dwa wątki, T1 i T2, i próbują one uzyskać dostęp do współdzielonego zasobu o nazwie X. A jeśli oba wątki spróbują zapisać wartość w X, ostatnia wartość zapisana w X zostanie zapisana.
Pytanie nr 47) Co to jest pula wątków?
Lata: Pula wątków to zbiór wątków. Wątków tych można używać do wykonywania zadań bez zakłócania wątku podstawowego. Gdy wątek zakończy zadanie, wątek wraca do puli.
Przestrzeń nazw System.Threading.ThreadPool zawiera klasy, które zarządzają wątkami w puli i jej operacjami.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
Powyższa linia kolejkuje zadanie. Metody SomeTask powinny mieć parametr typu Object.
P # 48) Co to jest serializacja?
Odpowiedź: Serializacja to proces konwersji kodu do jego formatu binarnego. Po przekonwertowaniu na bajty można go łatwo przechowywać i zapisywać na dysku lub innych tego typu urządzeniach magazynujących. Serializacje przydają się głównie wtedy, gdy nie chcemy utracić oryginalnej formy kodu i możemy je odzyskać w dowolnym momencie w przyszłości.
Każda klasa oznaczona atrybutem (Serializable) zostanie przekonwertowana na swoją postać binarną.
Odwrotny proces odzyskiwania kodu C # z formy binarnej nazywa się deserializacją.
Aby serializować obiekt, potrzebujemy serializacji obiektu, strumienia, który może zawierać serializowany obiekt i przestrzeń nazw System.Runtime.Serialization może zawierać klasy do serializacji.
P # 49) Jakie są rodzaje serializacji?
Odpowiedź: Różne typy serializacji to:
- Serializacja XML - Serializuje wszystkie właściwości publiczne do dokumentu XML. Ponieważ dane są w formacie XML, można je łatwo odczytywać i przetwarzać w różnych formatach. Klasy znajdują się w System.sml.Serialization.
- MYDŁO - Klasy znajdują się w System.Runtime.Serialization. Podobny do XML, ale tworzy pełną kopertę zgodną z SOAP, z której może korzystać każdy system, który rozumie protokół SOAP.
- Serializacja binarna - Umożliwia konwersję dowolnego kodu do postaci binarnej. Może serializować i przywracać właściwości publiczne i niepubliczne. Jest szybszy i zajmuje mniej miejsca.
Q # 50) Co to jest plik XSD?
Odpowiedź: Plik XSD oznacza definicję schematu XML. Daje strukturę dla pliku XML. Oznacza to, że decyduje o elementach, które powinien mieć XML, w jakiej kolejności i jakie właściwości powinny być obecne. Bez pliku XSD skojarzonego z XML, XML może mieć dowolne tagi, dowolne atrybuty i dowolne elementy.
Narzędzie Xsd.exe konwertuje pliki do formatu XSD. Podczas serializacji kodu C # klasy są konwertowane na format zgodny z XSD przez xsd.exe.
Wniosek
C # rozwija się szybko z dnia na dzień i odgrywa ważną rolę w branży testowania oprogramowania.
Jestem przekonany, że ten artykuł znacznie ułatwi Ci przygotowanie do rozmowy kwalifikacyjnej i dostarczy sporą wiedzę na temat większości tematów C #.
Mam nadzieję, że byłbyś gotowy, aby z całą pewnością stawić czoła każdemu wywiadowi C #!
rekomendowane lektury
- Pytania i odpowiedzi do wywiadu
- ETL Pytania i odpowiedzi podczas rozmowy kwalifikacyjnej testującej
- 50 najpopularniejszych pytań i odpowiedzi do wywiadów CCNA
- 51 najpopularniejszych pytań i odpowiedzi do wywiadów Bootstrap
- Ponad 20 pytań i odpowiedzi do wywiadów .NET
- Top 50+ baz danych pytań i odpowiedzi do wywiadów
- Niektóre trudne pytania i odpowiedzi do testowania ręcznego
- 25 najlepszych pytań i odpowiedzi na rozmowę z testami zwinnymi