top 50 c interview questions with answers
Perguntas mais frequentes da entrevista básica em C # sobre programação e codificação:
C # é uma linguagem de programação que cresceu rapidamente e também é amplamente usada. É muito procurado, versátil e também oferece suporte a plataformas cruzadas.
Não é usado apenas para Windows, mas muitos outros sistemas operacionais. Portanto, é muito importante ter um bom conhecimento dessa linguagem para conseguir qualquer emprego na indústria de Teste de Software.
A seguir, listados não são apenas um conjunto de perguntas mais frequentes sobre C #, mas também alguns tópicos muito importantes a serem compreendidos para se destacar na multidão da população C #.
Como C # é um tópico vasto, para facilitar a abordagem de todos os conceitos, dividi este tópico em três partes, conforme mencionado abaixo:
- Perguntas sobre conceitos básicos
- Perguntas sobre Arrays e Strings
- Conceitos Avançados
Este artigo inclui um conjunto das 50 principais perguntas e respostas da entrevista C # cobrindo quase todos os seus tópicos importantes em termos simples, a fim de ajudá-lo a se preparar para a entrevista.
O que você aprenderá:
Perguntas e respostas mais populares para entrevistas em C #
Conceitos Básicos
P # 1) O que é um objeto e uma classe?
Responda: Classe é um encapsulamento de propriedades e métodos usados para representar uma entidade em tempo real. É uma estrutura de dados que reúne todas as instâncias em uma única unidade.
O objeto é definido como uma instância de uma classe. Tecnicamente, é apenas um bloco de memória alocado que pode ser armazenado na forma de variáveis, array ou coleção.
P # 2) Quais são os conceitos OOP fundamentais?
Resposta: Os quatro conceitos fundamentais da Programação Orientada a Objetos são:
- Encapsulamento : Aqui, a representação interna de um objeto está oculta da vista fora da definição do objeto. Apenas as informações necessárias podem ser acessadas, enquanto o restante da implementação de dados fica oculto.
- Abstração: É um processo de identificar o comportamento crítico e os dados de um objeto e eliminar os detalhes irrelevantes.
- Herança : É a capacidade de criar novas classes de outra classe. Isso é feito acessando, modificando e estendendo o comportamento dos objetos na classe pai.
- Polimorfismo : O nome significa, um nome, muitas formas. Isso é obtido por ter vários métodos com o mesmo nome, mas implementações diferentes.
P # 3) O que é código gerenciado e não gerenciado?
Responda: Código gerenciado é um código executado por CLR (Common Language Runtime), ou seja, todo o código do aplicativo é baseado na plataforma .Net. É considerado como gerenciado por causa da estrutura .Net que usa internamente o coletor de lixo para limpar a memória não utilizada.
Código não gerenciado é qualquer código executado pelo tempo de execução do aplicativo de qualquer outra estrutura além de .Net. O tempo de execução do aplicativo cuidará da memória, segurança e outras operações de desempenho.
P # 4) O que é uma interface?
Responda: Interface é uma classe sem implementação. A única coisa que contém é a declaração de métodos, propriedades e eventos.
Q # 5) Quais são os diferentes tipos de classes em C #?
Resposta: Os diferentes tipos de classe em C # são:
- Aula parcial: Ele permite que seus membros sejam divididos ou compartilhados com vários arquivos .cs. É denotado pela palavra-chave Parcial.
- Classe selada: É uma classe que não pode ser herdada. Para acessar os membros de uma classe selada, precisamos criar o objeto da classe. É denotado pela palavra-chave Selado .
- Aula abstrata : É uma classe cujo objeto não pode ser instanciado. A classe só pode ser herdada. Deve conter pelo menos um método. É denotado pela palavra-chave resumo .
- Classe estática : É uma classe que não permite herança. Os membros da classe também são estáticos. É denotado pela palavra-chave estático . Esta palavra-chave diz ao compilador para verificar se há ocorrências acidentais da classe estática.
Q # 6) Explique a compilação de código em C #.
Resposta: A compilação de código em C # inclui as quatro etapas a seguir:
- Compilar o código-fonte em código gerenciado pelo compilador C #.
- Combinando o código recém-criado em assemblies.
- Carregando o Common Language Runtime (CLR).
- Executando a montagem por CLR.
Q # 7) Quais são as diferenças entre uma classe e uma estrutura?
Resposta: Abaixo estão as diferenças entre uma classe e uma estrutura:
Aula | Struct |
---|---|
Suporta herança | Não suporta herança |
A classe é passada por referência (tipo de referência) | Struct é passado por cópia (tipo de valor) |
Os membros são privados por padrão | Os membros são públicos por padrão |
Bom para objetos complexos maiores | Bom para pequenos modelos isolados |
Pode usar coletor de resíduos para gerenciamento de memória | Não é possível usar o coletor de lixo e, portanto, nenhum gerenciamento de memória |
Q # 8) Qual é a diferença entre o método Virtual e o método Abstract?
Responda: O método Virtual deve sempre ter uma implementação padrão. No entanto, ele pode ser substituído na classe derivada, embora não seja obrigatório. Ele pode ser substituído usando o sobrepor palavra-chave.
Um método Abstract não possui uma implementação. Ele reside na classe abstrata. É obrigatório que a classe derivada implemente o método abstrato. A sobrepor a palavra-chave não é necessária aqui, embora possa ser usada.
Q # 9) Explique os namespaces em C #.
Responda: Eles são usados para organizar grandes projetos de código. “System” é o namespace mais amplamente usado em C #. Podemos criar nosso próprio namespace e também usar um namespace em outro, que é chamado de namespaces aninhados.
Eles são indicados pela palavra-chave “namespace”.
P # 10) O que é a instrução “using” em C #?
Responda: A palavra-chave “Usando” indica que o namespace específico está sendo usado pelo programa.
Por exemplo, usando sistema
Aqui, Sistema é um namespace. A classe Console é definida em Sistema. Portanto, podemos usar o console.writeline (“….”) Ou readline em nosso programa.
Q # 11) Explique a abstração.
Responda: Abstração é um dos conceitos OOP. É usado para exibir apenas os recursos essenciais da classe e ocultar informações desnecessárias.
Vejamos um exemplo de um carro:
O motorista do carro deve saber os detalhes sobre o carro, como cor, nome, espelho, direção, marcha, freio, etc. O que ele não precisa saber é um motor interno, sistema de escapamento.
Assim, a Abstração ajuda a saber o que é necessário e a esconder os detalhes internos do mundo externo. Ocultar as informações internas pode ser conseguido declarando esses parâmetros como Privados usando o privado palavra-chave.
Q # 12) Explique o polimorfismo?
Responda: Programaticamente, polimorfismo significa o mesmo método, mas implementações diferentes. É de 2 tipos, tempo de compilação e tempo de execução.
- Polimorfismo de tempo de compilação é obtido pela sobrecarga do operador.
- Polimorfismo de tempo de execução é alcançado substituindo. As funções de herança e virtual são usadas durante o polimorfismo de tempo de execução.
Por exemplo ,Se uma classe tem um método Void Add (), o polimorfismo é obtido sobrecarregando o método, ou seja, void Add (int a, int b), void Add (int add) são métodos sobrecarregados.
P # 13) Como o tratamento de exceções é implementado em C #?
Resposta: O tratamento de exceções é feito usando quatro palavras-chave em C #:
- tentar : Contém um bloco de código para o qual uma exceção será verificada.
- pegar : É um programa que captura uma exceção com a ajuda do manipulador de exceções.
- finalmente : É um bloco de código escrito para ser executado independentemente de uma exceção ser detectada ou não.
- Lançar : Lança uma exceção quando ocorre um problema.
Q # 14) O que são classes C # I / O? Quais são as classes de E / S comumente usadas?
Responda: C # tem namespace System.IO, que consiste em classes que são usadas para realizar várias operações em arquivos, como criação, exclusão, abertura, fechamento, etc.
Algumas classes de I / O comumente usadas são:
- Arquivo - Ajuda na manipulação de um arquivo.
- StreamWriter - Usado para escrever caracteres em um fluxo.
- StreamReader - Usado para ler personagens em um stream.
- StringWriter - Usado para ler um buffer de string.
- StringReader - Usado para escrever um buffer de string.
- Caminho - Usado para realizar operações relacionadas às informações do caminho.
Q # 15) O que é a classe StreamReader / StreamWriter?
Responda: StreamReader e StreamWriter são classes do namespace System.IO. Eles são usados quando queremos ler ou gravar charact90, dados baseados em Reader, respectivamente.
Alguns dos membros do StreamReader são: Close (), Read (), Readline ().
Os membros do StreamWriter são: 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) O que é um destruidor em C #?
Responda: Destrutor é usado para limpar a memória e liberar os recursos. Mas em C # isso é feito pelo coletor de lixo sozinho. System.GC.Collect () é chamado internamente para limpeza. Mas às vezes pode ser necessário implementar destruidores manualmente.
Por exemplo:
~Car() { Console.writeline(“….”); }
Q # 17) O que é uma classe abstrata?
Responda: Uma classe Abstract é uma classe denotada pela palavra-chave abstract e pode ser usada apenas como uma classe Base. Esta classe sempre deve ser herdada. Uma instância da própria classe não pode ser criada. Se não quisermos que nenhum programa crie um objeto de uma classe, então essas classes podem ser abstratas.
Qualquer método na classe abstrata não possui implementações na mesma classe. Mas eles devem ser implementados na classe filha.
Por exemplo:
abstract class AB1 { Public void Add(); } Class childClass : AB1 { childClass cs = new childClass (); int Sum = cs.Add(); }
Todos os métodos em uma classe abstrata são métodos implicitamente virtuais. Portanto, a palavra-chave virtual não deve ser usada com nenhum método na classe abstrata.
Q # 18) O que são boxing e unboxing?
Responda: A conversão de um tipo de valor em tipo de referência é chamada de Boxe.
Por exemplo:
Valor1 int - = 10;
//----Boxe------//
objeto boxedValue = Value1;
A conversão explícita do mesmo tipo de referência (criada por encaixotamento) de volta para o tipo de valor é chamada Unboxing .
Por exemplo:
// ———— UnBoxing —————— //
int UnBoxing = int (boxedValue);
como eu abro um arquivo json?
Q # 19) Qual é a diferença entre Continue e Break Statement?
Responda: A instrução Break quebra o loop. Faz o controle do programa para sair do loop. A instrução Continue faz com que o controle do programa saia apenas da iteração atual. Não interrompe o ciclo.
Q # 20) Qual é a diferença entre bloco final e bloco final?
Responda: finalmente bloco é chamado após a execução do bloco try e catch. É usado para tratamento de exceções. Independentemente de uma exceção ser detectada ou não, este bloco de código será executado. Normalmente, este bloco terá um código de limpeza.
O método finalize é chamado antes da coleta de lixo. É usado para realizar operações de limpeza de código não gerenciado. Ele é chamado automaticamente quando uma determinada instância não é chamada posteriormente.
Matrizes e Strings
Q # 21) O que é um Array? Fornece a sintaxe para uma matriz única e multidimensional?
Responda: Um Array é usado para armazenar várias variáveis do mesmo tipo. É uma coleção de variáveis armazenadas em um local contíguo da memória.
Por exemplo:
números duplos = novo duplo (10);
int () score = new int (4) {25,24,23,25};
Uma única matriz dimensional é uma matriz linear onde as variáveis são armazenadas em uma única linha. Acima exemplo é uma matriz dimensional única.
Os arrays podem ter mais de uma dimensão. As matrizes multidimensionais também são chamadas de matrizes retangulares.
Por exemplo , int (,) números = novo int (3,2) {{1,2}, {2,3}, {3,4}};
Q # 22) O que é uma matriz Jagged?
Responda: Uma matriz Jagged é uma matriz cujos elementos são matrizes. Também é chamado de array de arrays. Pode ter dimensões simples ou múltiplas.
int () jaggedArray = new int (4) ();
Q # 23) Nomeie algumas propriedades de Array.
Resposta: As propriedades de um Array incluem:
- Comprimento: Obtém o número total de elementos em uma matriz.
- IsFixedSize: Informa se o tamanho da matriz é fixo ou não.
- IsReadOnly : Informa se a matriz é somente leitura ou não.
Q # 24) O que é uma classe Array?
Responda: Uma classe Array é a classe base para todos os arrays. Ele fornece muitas propriedades e métodos. Ele está presente no sistema de namespace.
P # 25) O que é uma corda? Quais são as propriedades de uma classe String?
Responda: Uma String é uma coleção de objetos char. Também podemos declarar variáveis de string em c #.
nome da string = “Perguntas C #”;
Uma classe de string em C # representa uma string. As propriedades da classe string são:
- Chars obtém o objeto Char na String atual.
- Comprimento obtém o número de objetos na String atual.
Q # 26) O que é uma sequência de escape? Nomeie algumas sequências de escape de String em C #.
Responda: Uma sequência de Escape é denotada por uma barra invertida (). A barra invertida indica que o caractere que segue deve ser interpretado literalmente ou é um caractere especial. Uma sequência de escape é considerada um único caractere.
As sequências de escape da string são as seguintes:
- n - caractere de nova linha
- b - Backspace
- \ - Barra invertida
- ' - Citação única
- '' - Citação dupla
Q # 27) O que são expressões regulares? Pesquisar uma string usando expressões regulares?
Responda: A expressão regular é um modelo para corresponder a um conjunto de entrada. O padrão pode consistir em operadores, construções ou literais de caracteres. Regex é usado para analisar e substituir a sequência de caracteres.
Por exemplo:
* corresponde ao caractere anterior zero ou mais vezes. Portanto, a * b regex é equivalente a b, ab, aab, aaab e assim por diante.
Pesquisando uma string usando 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'); } } }
O exemplo acima procura por “Python” no conjunto de entradas da matriz de linguagens. Ele usa Regex.IsMatch, que retorna verdadeiro caso o padrão seja encontrado na entrada. O padrão pode ser qualquer expressão regular que representa a entrada que desejamos corresponder.
P # 28) Quais são as operações básicas de string? Explicar.
Resposta: Algumas das operações básicas de string são:
- Concatenar : Duas strings podem ser concatenadas usando um System.String.Concat ou usando o operador +.
- Modificar : Replace (a, b) é usado para substituir uma string por outra string. Trim () é usado para aparar a string no final ou no início.
- Comparar : System.StringComparison () é usado para comparar duas strings, seja uma comparação que diferencia maiúsculas de minúsculas ou não. Principalmente leva dois parâmetros, string original e string para ser comparado.
- Procurar : Os métodos StartWith e EndsWith são usados para pesquisar uma string específica.
P # 29) O que é análise? Como analisar uma string de data e hora?
Responda: A análise converte uma string em outro tipo de dados.
Por exemplo:
string text = “500”;
int num = int.Parse (texto);
500 é um número inteiro. Portanto, o método Parse converte a string 500 em seu próprio tipo base, ou seja, int.
Siga o mesmo método para converter uma string DateTime.
string dateTime = “1º de janeiro de 2018”;
DateTime parsedValue = DateTime.Parse (dateTime);
Conceitos Avançados
Q # 30) O que é um Delegado? Explicar.
Responda: Um Delegado é uma variável que contém a referência a um método. Portanto, é um ponteiro de função ou tipo de referência. Todos os delegados são derivados do namespace System.Delegate. Delegate e o método a que se refere podem ter a mesma assinatura.
como abrir arquivo .apk
- Declarando um delegado: delegado público void AddNumbers (int n);
Após a declaração de um delegado, o objeto deve ser criado pelo delegado usando a nova palavra-chave.
AddNumbers an1 = novo AddNumbers (número);
O delegado fornece um tipo de encapsulamento para o método de referência, que será chamado internamente quando um delegado for chamado.
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; } }
No exemplo acima, temos um delegado myDel que recebe um valor inteiro como parâmetro. A classe Program tem um método com a mesma assinatura do delegado, chamado AddNumbers ().
Se houver outro método chamado Start () que cria um objeto do delegado, o objeto pode ser atribuído a AddNumbers, pois tem a mesma assinatura do delegado.
P # 31) O que são eventos?
Responda: Os eventos são ações do usuário que geram notificações para o aplicativo ao qual ele deve responder. As ações do usuário podem ser movimentos do mouse, pressionamento de tecla e assim por diante.
Programaticamente, uma classe que gera um evento é chamada de publicador e uma classe que responde / recebe o evento é chamada de assinante. O evento deve ter pelo menos um assinante, senão esse evento nunca é gerado.
Delegados são usados para declarar eventos.
Delegado público void PrintNumbers ();
Event PrintNumbers myEvent;
P # 32) Como usar delegados com eventos?
Responda: Delegados são usados para gerar eventos e tratá-los. Sempre um delegado precisa ser declarado primeiro e, em seguida, os eventos são declarados.
Vejamos um exemplo:
Considere uma classe chamada Paciente. Considere duas outras classes, Seguro e Banco, que requerem informações de óbito do paciente da classe de paciente. Aqui, Seguro e Banco são os assinantes e a classe Paciente torna-se o Editor. Ele aciona o evento de morte e as outras duas classes devem receber o evento.
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; } } }
Q # 33) Quais são os diferentes tipos de delegados?
Resposta: Diferentes tipos de Delegados são:
- Delegado Único : Um delegado que pode chamar um único método.
- Delegado Multicast : Um delegado que pode chamar vários métodos. Os operadores + e - são usados para assinar e cancelar, respectivamente.
- Delegado Genérico : Não requer que uma instância do delegado seja definida. É de três tipos, ação, função e predicado.
- Açao - No exemplo acima de delegados e eventos, podemos substituir a definição de delegado e evento usando a palavra-chave Action. O delegado de ação define um método que pode ser chamado em argumentos, mas não retorna um resultado
Delegado público void deathInfo ();
Evento público deathInfo deathDate;
// Substituindo por Ação //
Evento público Action deathDate;
Ação se refere implicitamente a um delegado.
-
- funções - Um delegado Func define um método que pode ser chamado em argumentos e retorna um resultado.
Func myDel é o mesmo que delegar bool meuDel (int a, string b);
-
- Predicado - Define um método que pode ser chamado em argumentos e sempre retorna o bool.
Predicado myDel é o mesmo que delegar bool myDel (string s);
Q # 34) O que significam os Delegados de multicast?
Responda: Um Delegado que aponta para mais de um método é chamado de Delegado Multicast. O multicast é obtido usando o operador + e + =.
Considere o exemplo da Q # 32.
Existem dois assinantes para deathEvent, GetPatInfo , e GetDeathDetails . E, portanto, usamos o operador + =. Significa sempre que o myDel é chamado, ambos os assinantes são chamados. Os delegados serão chamados na ordem em que forem adicionados.
Q # 35) Explique editores e assinantes em eventos.
Responda: Publisher é uma classe responsável por publicar uma mensagem de diferentes tipos de outras classes. A mensagem nada mais é do que Evento, conforme discutido nas perguntas acima.
De Exemplo na Q # 32, Class Patient é a classe Publisher. Está gerando um evento deathEvent , que é recebido pelas outras classes.
Os assinantes captam a mensagem do tipo em que estão interessados. Mais uma vez, a partir do Exemplo da Q # 32, Classe de Seguros e Banco são Assinantes. Eles estão interessados no evento deathEvent do tipo vazio .
Q # 36) O que são operações síncronas e assíncronas?
Responda: A sincronização é uma forma de criar um código thread-safe onde apenas um thread pode acessar o recurso a qualquer momento. A chamada assíncrona aguarda a conclusão do método antes de continuar com o fluxo do programa.
A programação síncrona afeta negativamente as operações da IU quando o usuário tenta realizar operações demoradas, pois apenas um thread será usado. Na operação assíncrona, a chamada do método retornará imediatamente para que o programa possa realizar outras operações enquanto o método chamado conclui seu trabalho em certas situações.
Em C #, as palavras-chave Async e Await são usadas para obter a programação assíncrona. Consulte a Q # 43 para obter mais detalhes sobre a programação síncrona.
Q # 37) O que é reflexão em C #?
Responda: Reflexão é a capacidade de um código de acessar os metadados do assembly durante a execução. Um programa reflete sobre si mesmo e usa os metadados para informar o usuário ou modificar seu comportamento. Metadados referem-se a informações sobre objetos, métodos.
O namespace System.Reflection contém métodos e classes que gerenciam as informações de todos os tipos e métodos carregados. É usado principalmente para aplicativos do Windows, Por exemplo , para ver as propriedades de um botão em formato de janela.
O objeto MemberInfo da reflexão da classe é usado para descobrir os atributos associados a uma classe.
A reflexão é implementada em duas etapas, primeiro, obtemos o tipo do objeto e, em seguida, usamos o tipo para identificar membros, como métodos e propriedades.
Para obter o tipo de uma classe, podemos simplesmente usar,
Digite mytype = myClass.GetType ();
Uma vez que temos um tipo de aula, as outras informações sobre a aula podem ser facilmente acessadas.
System.Reflection.MemberInfo Info = mytype.GetMethod (“Adicionar Números”);
A afirmação acima tenta encontrar um método com nome AddNumbers na aula minha classe .
Q # 38) O que é uma classe genérica?
Responda: A classe Genérica ou Genérica é usada para criar classes ou objetos que não possuem nenhum tipo de dados específico. O tipo de dados pode ser atribuído durante o tempo de execução, ou seja, quando é usado no programa.
Por exemplo:
Portanto, a partir do código acima, vemos 2 métodos de comparação inicialmente, para comparar string e int.
No caso de outras comparações de parâmetros de tipo de dados, em vez de criar muitos métodos sobrecarregados, podemos criar uma classe genérica e passar um tipo de dados substituto, ou seja, T. Portanto, T atua como um tipo de dados até que seja usado especificamente no método Main () .
Q # 39) Explique as propriedades Get e Set Accessor?
Responda: Get e Set são chamados de Accessors. Eles são usados por Propriedades. A propriedade fornece um mecanismo para ler e gravar o valor de um campo privado. Para acessar esse campo privado, esses acessadores são usados.
Get Property é usado para retornar o valor de uma propriedade
O acessador Set Property é usado para definir o valor.
O uso de get e set é o seguinte:
Q # 40) O que é um Tópico? O que é multithreading?
Responda: Um Thread é um conjunto de instruções que podem ser executadas, o que permitirá que nosso programa execute processamento simultâneo. O processamento simultâneo nos ajuda a fazer mais de uma operação por vez. Por padrão, C # tem apenas um segmento. Mas as outras threads podem ser criadas para executar o código em paralelo com a thread original.
Thread tem um ciclo de vida. Ele começa sempre que uma classe de thread é criada e é encerrado após a execução. System.Threading é o namespace que precisa ser incluído para criar threads e usar seus membros.
Threads são criados estendendo a classe Thread. Começar() método é usado para iniciar a execução do thread.
//CallThread is the target method// ThreadStart methodThread = new ThreadStart(CallThread); Thread childThread = new Thread(methodThread); childThread.Start();
C # pode executar mais de uma tarefa por vez. Isso é feito lidando com diferentes processos por diferentes threads. Isso é chamado de MultiThreading.
Existem vários métodos de thread que são usados para lidar com operações multi-threaded:
Iniciar, Dormir, Abortar, Suspender, Retomar e Entrar.
A maioria desses métodos é autoexplicativa.
Q # 41) Nomeie algumas propriedades da classe de thread.
Resposta: Algumas propriedades da classe de thread são:
- Está vivo - contém o valor True quando um thread está ativo.
- Nome - Pode retornar o nome do tópico. Além disso, pode definir um nome para o tópico.
- Prioridade - retorna o valor priorizado da tarefa definida pelo sistema operacional.
- IsBackground - obtém ou define um valor que indica se um thread deve ser um processo em segundo plano ou primeiro plano.
- ThreadState - descreve o estado do thread.
Q # 42) Quais são os diferentes estados de um Thread?
Resposta: Os diferentes estados de um tópico são:
- Não iniciado - O tópico é criado.
- Correndo - Thread inicia a execução.
- WaitSleepJoin - Chamadas de thread em espera, chamadas em espera em outro objeto e chamadas entrando em outro thread.
- Suspenso - O tópico foi suspenso.
- Abortado - O thread está morto, mas não mudou para o estado parado.
- Parado - O tópico parou.
Q # 43) O que são Async e Await?
Responda: As palavras-chave Async e Await são usadas para criar métodos assíncronos em C.
A programação assíncrona significa que o processo é executado independentemente do processo principal ou de outros processos.
O uso de Async e Await é mostrado abaixo:
- A palavra-chave Async é usada para a declaração do método.
- A contagem é de uma tarefa do tipo int que chama o método CalculateCount ().
- Calculatecount () inicia a execução e calcula algo.
- O trabalho independente é feito em meu segmento e, em seguida, a instrução de contagem de espera é alcançada.
- Se Calculatecount não for concluído, myMethod retornará ao seu método de chamada, portanto, o thread principal não será bloqueado.
- Se o Calculatecount já estiver concluído, teremos o resultado disponível quando o controle atingir a contagem de espera. Portanto, a próxima etapa continuará no mesmo tópico. No entanto, não é a situação no caso acima, em que o Atraso de 1 segundo está envolvido.
Q # 44) O que é um Deadlock?
Responda: Um Deadlock é uma situação em que um processo não consegue concluir sua execução porque dois ou mais processos estão aguardando a conclusão um do outro. Isso geralmente ocorre em multi-threading.
Aqui, um recurso compartilhado está sendo retido por um processo e outro processo está aguardando que o primeiro processo o libere e o encadeamento que contém o item bloqueado está aguardando a conclusão de outro processo.
Considere o exemplo abaixo:
- Executar tarefas acessa objB e aguarda 1 segundo.
- Enquanto isso, PerformtaskB tenta acessar ObjA.
- Após 1 segundo, PeformtaskA tenta acessar ObjA que está bloqueado por PerformtaskB.
- PerformtaskB tenta acessar ObjB que está bloqueado por PerformtaskA.
Isso cria um impasse.
Q # 45) Explique L ock , Monitores , e Mutex Objeto em Threading.
Responda: A palavra-chave de bloqueio garante que apenas um thread possa entrar em uma seção específica do código a qualquer momento. No acima Exemplo , bloqueio (ObjA) significa que o bloqueio é colocado no ObjA até que este processo o libere, nenhum outro thread pode acessar o ObjA.
Mutex também é como um bloqueio, mas pode funcionar em vários processos ao mesmo tempo. WaitOne () é usado para bloquear e ReleaseMutex () é usado para liberar o bloqueio. Mas Mutex é mais lento do que o bloqueio, pois leva tempo para adquiri-lo e liberá-lo.
Monitor.Enter e Monitor.Exit implementam o bloqueio internamente. um bloqueio é um atalho para monitores. lock (objA) chamadas internamente.
Monitor.Enter(ObjA); try { } Finally {Monitor.Exit(ObjA));}
Q # 46) O que é uma condição de corrida?
Anos: A condição de corrida ocorre quando dois threads acessam o mesmo recurso e estão tentando alterá-lo ao mesmo tempo. O segmento que será capaz de acessar o recurso primeiro não pode ser previsto.
Se tivermos dois threads, T1 e T2, e eles estiverem tentando acessar um recurso compartilhado chamado X. E se ambos os threads tentarem escrever um valor em X, o último valor escrito em X será salvo.
Q # 47) O que é Thread Pooling?
Anos: O pool de threads é uma coleção de threads. Esses threads podem ser usados para realizar tarefas sem perturbar o thread principal. Depois que o encadeamento conclui a tarefa, o encadeamento retorna ao pool.
O namespace System.Threading.ThreadPool tem classes que gerenciam os threads no pool e suas operações.
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(SomeTask));
A linha acima coloca uma tarefa na fila. Os métodos SomeTask devem ter um parâmetro do tipo Object.
Q # 48) O que é serialização?
Responda: A serialização é um processo de conversão de código em seu formato binário. Depois de convertido em bytes, pode ser facilmente armazenado e gravado em um disco ou em qualquer dispositivo de armazenamento. As serializações são úteis principalmente quando não queremos perder a forma original do código e ele pode ser recuperado a qualquer momento no futuro.
Qualquer classe marcada com o atributo (Serializable) será convertida em sua forma binária.
O processo reverso de obter o código C # de volta da forma binária é chamado de desserialização.
Para serializar um objeto, precisamos que o objeto seja serializado, um fluxo que pode conter o objeto serializado e o namespace System.Runtime.Serialization pode conter classes para serialização.
Q # 49) Quais são os tipos de serialização?
Resposta: Os diferentes tipos de serialização são:
- Serialização XML - Serializa todas as propriedades públicas para o documento XML. Como os dados estão no formato XML, eles podem ser facilmente lidos e manipulados em vários formatos. As classes residem em System.sml.Serialization.
- SABÃO - As classes residem em System.Runtime.Serialization. Semelhante ao XML, mas produz um envelope completo compatível com SOAP que pode ser usado por qualquer sistema que entenda SOAP.
- Serialização Binária - Permite que qualquer código seja convertido em sua forma binária. Pode serializar e restaurar propriedades públicas e não públicas. É mais rápido e ocupa menos espaço.
P # 50) O que é um arquivo XSD?
Responda: Um arquivo XSD significa XML Schema Definition. Ele fornece uma estrutura para o arquivo XML. Isso significa que ele decide os elementos que o XML deve ter e em que ordem e quais propriedades devem estar presentes. Sem um arquivo XSD associado ao XML, o XML pode ter qualquer marca, qualquer atributo e qualquer elemento.
A ferramenta Xsd.exe converte os arquivos para o formato XSD. Durante a serialização do código C #, as classes são convertidas em formato compatível com XSD por xsd.exe.
Conclusão
C # está crescendo rapidamente a cada dia e desempenha um papel importante na indústria de teste de software.
Tenho certeza de que este artigo tornará sua preparação para a entrevista muito mais fácil e lhe dará um bom conhecimento da maioria dos tópicos do C #.
Espero que você esteja pronto para enfrentar qualquer entrevista C # com confiança !!
Leitura recomendada
- Perguntas e respostas da entrevista
- Perguntas e respostas da entrevista de teste de ETL
- As 50 perguntas e respostas mais populares da entrevista do CCNA
- 51 principais perguntas e respostas da entrevista de bootstrap
- Mais de 20 perguntas e respostas da entrevista em .NET
- Mais de 50 perguntas e respostas para entrevistas em bancos de dados
- Algumas perguntas e respostas complicadas de testes manuais
- 25 melhores perguntas e respostas da entrevista de teste do Agile