top 50 c interview questions with answers
Preguntas frecuentes de la entrevista básica de C # sobre programación y codificación:
C # es un lenguaje de programación que ha crecido rápidamente y también se usa ampliamente. Tiene una gran demanda, es versátil y también es compatible con plataformas cruzadas.
No solo se usa para Windows sino para muchos otros sistemas operativos. Por lo tanto, es muy importante tener un conocimiento sólido de este idioma para poder desempeñar cualquier trabajo en la industria de pruebas de software.
A continuación, se enumeran no solo un conjunto de preguntas más frecuentes de C #, sino también algunos temas muy importantes que deben entenderse para destacar entre la multitud de la población de C #.
Como C # es un tema amplio, para facilitar el tratamiento de todos los conceptos, he dividido este tema en tres partes, como se menciona a continuación:
- Preguntas sobre conceptos básicos
- Preguntas sobre matrices y cadenas
- Conceptos avanzados
Este artículo incluye un conjunto de las 50 preguntas y respuestas principales de la entrevista de C # que cubren casi todos sus temas importantes en términos simples, con el fin de ayudarlo a prepararse para su entrevista.
Lo que vas a aprender:
Preguntas y respuestas más populares de la entrevista C #
Conceptos básicos
P # 1) ¿Qué es un objeto y una clase?
Responder: La clase es una encapsulación de propiedades y métodos que se utilizan para representar una entidad en tiempo real. Es una estructura de datos que reúne todas las instancias en una sola unidad.
El objeto se define como una instancia de una clase. Técnicamente, es solo un bloque de memoria asignado que se puede almacenar en forma de variables, matriz o colección.
P # 2) ¿Cuáles son los conceptos fundamentales de POO?
Respuesta: Los cuatro conceptos fundamentales de la programación orientada a objetos son:
- Encapsulamiento : Aquí, la representación interna de un objeto está oculta a la vista fuera de la definición del objeto. Solo se puede acceder a la información requerida mientras que el resto de la implementación de datos está oculta.
- Abstracción: Es un proceso para identificar el comportamiento crítico y los datos de un objeto y eliminar los detalles irrelevantes.
- Herencia : Es la capacidad de crear nuevas clases a partir de otra clase. Se realiza accediendo, modificando y ampliando el comportamiento de los objetos en la clase padre.
- Polimorfismo : El nombre significa, un nombre, muchas formas. Se logra al tener múltiples métodos con el mismo nombre pero diferentes implementaciones.
P # 3) ¿Qué es el código administrado y no administrado?
Responder: El código administrado es un código que ejecuta CLR (Common Language Runtime), es decir, todo el código de la aplicación se basa en la plataforma .Net. Se considera administrado debido al marco .Net que utiliza internamente el recolector de basura para limpiar la memoria no utilizada.
El código no administrado es cualquier código que se ejecuta en tiempo de ejecución de la aplicación de cualquier otro marco además de .Net. El tiempo de ejecución de la aplicación se ocupará de la memoria, la seguridad y otras operaciones de rendimiento.
P # 4) ¿Qué es una interfaz?
Responder: La interfaz es una clase sin implementación. Lo único que contiene es la declaración de métodos, propiedades y eventos.
P # 5) ¿Cuáles son los diferentes tipos de clases en C #?
Respuesta: Los diferentes tipos de clases en C # son:
- Clase parcial: Permite que sus miembros se dividan o compartan con varios archivos .cs. Se denota con la palabra clave Parcial.
- Clase sellada: Es una clase que no se puede heredar. Para acceder a los miembros de una clase sellada, necesitamos crear el objeto de la clase. Se denota con la palabra clave Sellado .
- Clase abstracta : Es una clase cuyo objeto no se puede instanciar. La clase solo se puede heredar. Debe contener al menos un método. Se denota con la palabra clave resumen .
- Clase estática : Es una clase que no permite la herencia. Los miembros de la clase también son estáticos. Se denota con la palabra clave estático . Esta palabra clave le dice al compilador que compruebe si hay instancias accidentales de la clase estática.
P # 6) Explique la compilación de código en C #.
Respuesta: La compilación de código en C # incluye los siguientes cuatro pasos:
- Compilar el código fuente en código administrado por el compilador C #.
- Combinando el código recién creado en ensamblados.
- Cargando Common Language Runtime (CLR).
- Ejecución del montaje por CLR.
Q #7) ¿Cuáles son las diferencias entre una clase y una estructura?
Respuesta: A continuación se muestran las diferencias entre una clase y una estructura:
Clase | Estructura |
---|---|
Apoya la herencia | No admite herencia |
La clase se pasa por referencia (tipo de referencia) | La estructura se pasa por copia (tipo de valor) |
Los miembros son privados de forma predeterminada | Los miembros son públicos por defecto |
Bueno para objetos complejos más grandes | Bueno para pequeños modelos aislados |
Puede utilizar un recolector de residuos para la gestión de la memoria. | No se puede usar el recolector de basura y, por lo tanto, no hay administración de memoria |
P # 8) ¿Cuál es la diferencia entre el método virtual y el método abstracto?
Responder: El método virtual siempre debe tener una implementación predeterminada. Sin embargo, puede anularse en la clase derivada, aunque no es obligatorio. Puede anularse mediante el anular palabra clave.
Un método abstracto no tiene implementación. Reside en la clase abstracta. Es obligatorio que la clase derivada implemente el método abstracto. Un anular La palabra clave no es necesaria aquí, aunque se puede utilizar.
P # 9) Explicar los espacios de nombres en C #.
Responder: Se utilizan para organizar grandes proyectos de código. 'Sistema' es el espacio de nombres más utilizado en C #. Podemos crear nuestro propio espacio de nombres y también podemos usar un espacio de nombres en otro, que se denomina espacios de nombres anidados.
Se indican con la palabra clave 'espacio de nombres'.
P # 10) ¿Qué es la instrucción 'using' en C #?
Responder: La palabra clave 'Using' indica que el programa está utilizando el espacio de nombres en particular.
Por ejemplo, usando el sistema
Aquí, Sistema es un espacio de nombres. La clase Console se define en System. Entonces, podemos usar console.writeline ('….') O readline en nuestro programa.
P # 11) Explique la abstracción.
Responder: La abstracción es uno de los conceptos de POO. Se utiliza para mostrar solo las características esenciales de la clase y ocultar información innecesaria.
Tomemos un ejemplo de un automóvil:
El conductor del automóvil debe conocer los detalles del automóvil, como el color, el nombre, el espejo, la dirección, el cambio, el freno, etc. Lo que no necesita saber es un motor interno, un sistema de escape.
Entonces, la abstracción ayuda a saber qué es necesario y a ocultar los detalles internos del mundo exterior. El ocultamiento de la información interna se puede lograr declarando tales parámetros como Privado usando el privado palabra clave.
P # 12) ¿Explica el polimorfismo?
Responder: Programáticamente, polimorfismo significa el mismo método pero diferentes implementaciones. Es de 2 tipos, tiempo de compilación y tiempo de ejecución.
- Polimorfismo en tiempo de compilación se logra mediante la sobrecarga del operador.
- Polimorfismo en tiempo de ejecución se logra anulando. Las funciones de herencia y virtual se utilizan durante el polimorfismo en tiempo de ejecución.
Por ejemplo ,Si una clase tiene un método Void Add (), el polimorfismo se logra sobrecargando el método, es decir, void Add (int a, int b), void Add (int add) son todos métodos sobrecargados.
P # 13) ¿Cómo se implementa el manejo de excepciones en C #?
Respuesta: El manejo de excepciones se realiza mediante cuatro palabras clave en C #:
- tratar : Contiene un bloque de código para el que se comprobará una excepción.
- captura : Es un programa que detecta una excepción con la ayuda del controlador de excepciones.
- finalmente : Es un bloque de código escrito para ejecutarse independientemente de si se detecta una excepción o no.
- Lanzar : Lanza una excepción cuando ocurre un problema.
P # 14) ¿Qué son las clases de E / S de C #? ¿Cuáles son las clases de E / S más utilizadas?
Responder: C # tiene un espacio de nombres System.IO, que consta de clases que se utilizan para realizar varias operaciones en archivos como crear, eliminar, abrir, cerrar, etc.
Algunas clases de E / S de uso común son:
- Archivo - Ayuda a manipular un archivo.
- StreamWriter - Se utiliza para escribir caracteres en una secuencia.
- StreamReader - Se utiliza para leer caracteres en una secuencia.
- StringWriter - Se utiliza para leer un búfer de cadena.
- StringReader - Se utiliza para escribir un búfer de cadena.
- Camino - Se utiliza para realizar operaciones relacionadas con la información de la ruta.
Q #15) ¿Qué es la clase StreamReader / StreamWriter?
Responder: StreamReader y StreamWriter son clases de espacio de nombres System.IO. Se utilizan cuando queremos leer o escribir charact90, datos basados en Reader, respectivamente.
Algunos de los miembros de StreamReader son: Cerrar (), Leer (), Readline ().
Los miembros de StreamWriter son: Cerrar (), Escribir (), Línea de escritura ().
|_+_|P # 16) ¿Qué es un destructor en C #?
Responder: Destructor se usa para limpiar la memoria y liberar los recursos. Pero en C # esto lo hace el recolector de basura por sí solo. System.GC.Collect () se llama internamente para limpiar. Pero a veces puede ser necesario implementar destructores manualmente.
Por ejemplo:
|_+_|P # 17) ¿Qué es una clase abstracta?
Responder: Una clase abstracta es una clase que se indica mediante una palabra clave abstracta y solo se puede utilizar como clase base. Esta clase siempre debe heredarse. No se puede crear una instancia de la clase en sí. Si no queremos que ningún programa cree un objeto de una clase, entonces esas clases pueden hacerse abstractas.
Cualquier método de la clase abstracta no tiene implementaciones en la misma clase. Pero deben implementarse en la clase infantil.
Por ejemplo:
|_+_|Todos los métodos de una clase abstracta son implícitamente métodos virtuales. Por lo tanto, la palabra clave virtual no debe usarse con ningún método en la clase abstracta.
P # 18) ¿Qué son el boxeo y el unboxing?
Responder: La conversión de un tipo de valor en un tipo de referencia se denomina Boxing.
Por ejemplo:
int Valor1 - = 10;
//----Boxeo------//
objeto boxedValue = Value1;
La conversión explícita del mismo tipo de referencia (creado por boxeo) de nuevo al tipo de valor se llama Desembalaje .
Por ejemplo:
// ———— UnBoxing —————— //
int UnBoxing = int (boxedValue);
html5 preguntas y respuestas de la entrevista pdf
P # 19) ¿Cuál es la diferencia entre Continuar y Interrumpir la declaración?
Responder: La declaración de ruptura rompe el ciclo. Hace el control del programa para salir del bucle. La instrucción Continue hace que el control del programa salga solo de la iteración actual. No rompe el bucle.
P # 20) ¿Cuál es la diferencia entre el bloque finalmente y el finalizar?
Responder: finalmente El bloque se llama después de la ejecución del bloque try and catch. Se utiliza para el manejo de excepciones. Independientemente de si se detecta una excepción o no, este bloque de código se ejecutará. Por lo general, este bloque tendrá un código de limpieza.
El método finalize se llama justo antes de la recolección de basura. Se utiliza para realizar operaciones de limpieza de código no administrado. Se llama automáticamente cuando una instancia determinada no se llama posteriormente.
Matrices y cadenas
P # 21) ¿Qué es una matriz? ¿Dar la sintaxis para una matriz unidimensional y multidimensional?
Responder: Una matriz se usa para almacenar múltiples variables del mismo tipo. Es una colección de variables almacenadas en una ubicación de memoria contigua.
Por ejemplo:
números dobles = nuevo doble (10);
int () score = new int (4) {25,24,23,25};
Una matriz unidimensional es una matriz lineal donde las variables se almacenan en una sola fila. Sobre ejemplo es una matriz unidimensional.
Las matrices pueden tener más de una dimensión. Las matrices multidimensionales también se denominan matrices rectangulares.
Por ejemplo , int (,) números = nuevo int (3,2) {{1,2}, {2,3}, {3,4}};
P # 22) ¿Qué es una matriz irregular?
Responder: Una matriz irregular es una matriz cuyos elementos son matrices. También se denomina matriz de matrices. Puede ser de una o varias dimensiones.
int () jaggedArray = nuevo int (4) ();
P # 23) Nombra algunas propiedades de Array.
Respuesta: Las propiedades de una matriz incluyen:
- Longitud: Obtiene el número total de elementos de una matriz.
- IsFixedSize: Indica si la matriz tiene un tamaño fijo o no.
- IsReadOnly : Indica si la matriz es de solo lectura o no.
P # 24) ¿Qué es una clase de matriz?
Responder: Una clase Array es la clase base para todas las matrices. Proporciona muchas propiedades y métodos. Está presente en el sistema de espacio de nombres.
P # 25) ¿Qué es una cadena? ¿Cuáles son las propiedades de una clase String?
Responder: Una cadena es una colección de objetos char. También podemos declarar variables de cadena en c #.
string name = “Preguntas de C #”;
Una clase de cadena en C # representa una cadena. Las propiedades de la clase de cadena son:
- Caracteres obtener el objeto Char en la cadena actual.
- Largo obtiene el número de objetos en la cadena actual.
P # 26) ¿Qué es una secuencia de escape? Nombre algunas secuencias de escape de cadena en C #.
Responder: Una secuencia de escape se indica con una barra invertida (). La barra invertida indica que el carácter que le sigue debe interpretarse literalmente o es un carácter especial. Una secuencia de escape se considera un solo carácter.
Las secuencias de escape de cadenas son las siguientes:
- n - Carácter de nueva línea
- b - Retroceso
- \ - Barra invertida
- ' - Una frase
- ’’ - Doble cotización
Q # 27) ¿Qué son las expresiones regulares? ¿Buscar una cadena usando expresiones regulares?
Responder: La expresión regular es una plantilla para coincidir con un conjunto de entradas. El patrón puede constar de operadores, construcciones o caracteres literales. Regex se utiliza para analizar cadenas y reemplazar cadenas de caracteres.
Por ejemplo:
* coincide con el carácter anterior cero o más veces. Entonces, a * b regex es equivalente a b, ab, aab, aaab y así sucesivamente.
Buscando una cadena usando Regex:
|_+_|El ejemplo anterior busca 'Python' en el conjunto de entradas de la matriz de idiomas. Utiliza Regex.IsMatch que devuelve verdadero en caso de que el patrón se encuentre en la entrada. El patrón puede ser cualquier expresión regular que represente la entrada que queremos hacer coincidir.
P # 28) ¿Cuáles son las operaciones básicas con cadenas? Explique.
Respuesta: Algunas de las operaciones básicas con cadenas son:
- Concatenar : Se pueden concatenar dos cadenas mediante System.String.Concat o mediante el operador +.
- Modificar : Reemplazar (a, b) se usa para reemplazar una cadena con otra cadena. Trim () se utiliza para recortar la cadena al final o al principio.
- Comparar : System.StringComparison () se utiliza para comparar dos cadenas, ya sea una comparación que distingue entre mayúsculas y minúsculas o no. Toma principalmente dos parámetros, la cadena original y la cadena para comparar.
- Buscar : Los métodos StartWith, EndsWith se utilizan para buscar una cadena en particular.
P # 29) ¿Qué es el análisis? ¿Cómo analizar una cadena de fecha y hora?
Responder: El análisis convierte una cadena en otro tipo de datos.
Por ejemplo:
texto de cadena = '500';
int num = int.Parse (texto);
500 es un número entero. Entonces, el método Parse convierte la cadena 500 en su propio tipo base, es decir, int.
Siga el mismo método para convertir una cadena DateTime.
string dateTime = '1 de enero de 2018';
DateTime parsedValue = DateTime.Parse (dateTime);
Conceptos avanzados
P # 30) ¿Qué es un delegado? Explique.
Responder: Un delegado es una variable que contiene la referencia a un método. Por tanto, es un puntero de función o un tipo de referencia. Todos los delegados se derivan del espacio de nombres System.Delegate. Tanto el Delegado como el método al que se refiere pueden tener la misma firma.
- Declarar un delegado: delegado público void AddNumbers (int n);
Después de la declaración de un delegado, el delegado debe crear el objeto utilizando la nueva palabra clave.
AddNumbers an1 = new AddNumbers (número);
El delegado proporciona una especie de encapsulación al método de referencia, que será llamado internamente cuando se llame a un delegado.
|_+_|En el ejemplo anterior, tenemos un delegado myDel que toma un valor entero como parámetro. El programa de clase tiene un método de la misma firma que el delegado, llamado AddNumbers ().
Si hay otro método llamado Start () que crea un objeto del delegado, entonces el objeto se puede asignar a AddNumbers ya que tiene la misma firma que la del delegado.
P # 31) ¿Qué son los eventos?
Responder: Los eventos son acciones del usuario que generan notificaciones a la aplicación a las que debe responder. Las acciones del usuario pueden ser movimientos del mouse, pulsaciones de teclas, etc.
Programáticamente, una clase que genera un evento se llama editor y una clase que responde / recibe el evento se llama suscriptor. El evento debe tener al menos un suscriptor, de lo contrario, ese evento nunca se genera.
Los delegados se utilizan para declarar eventos.
Delegado público void PrintNumbers ();
Event PrintNumbers myEvent;
cómo abrir archivos swf con adobe flash player
P # 32) ¿Cómo usar los delegados con eventos?
Responder: Los delegados se utilizan para generar eventos y manejarlos. Siempre se debe declarar primero un delegado y luego se declaran los eventos.
Veamos un ejemplo:
Considere una clase llamada Paciente. Considere otras dos clases, Seguro y Banco, que requieren información sobre la muerte del Paciente de la clase del paciente. Aquí, el seguro y el banco son los suscriptores y la clase Paciente se convierte en el editor. Activa el evento de muerte y las otras dos clases deberían recibir el evento.
|_+_|Q #33) ¿Cuáles son los diferentes tipos de delegados?
Respuesta: Los diferentes tipos de delegados son:
- Delegado único : Un delegado que puede llamar a un solo método.
- Delegado de multidifusión : Un delegado que puede llamar a varios métodos. Los operadores + y - se utilizan para suscribirse y darse de baja respectivamente.
- Delegado genérico : No requiere que se defina una instancia del delegado. Es de tres tipos, Acción, Funciones y Predicado.
- Acción - En el ejemplo anterior de delegados y eventos, podemos reemplazar la definición de delegado y evento usando la palabra clave Acción. El delegado de acción define un método al que se puede llamar en argumentos pero no devuelve un resultado
Delegado público void deathInfo ();
Evento público deathInfo deathDate;
// Reemplazo con acción //
Evento público Acción deathDate;
La acción se refiere implícitamente a un delegado.
-
- funciones - Un delegado de Func define un método al que se puede llamar con argumentos y devuelve un resultado.
Func myDel es lo mismo que delegate bool myDel (int a, string b);
-
- Predicado - Define un método al que se puede llamar con argumentos y siempre devuelve el bool.
Predicado myDel es lo mismo que delegate bool myDel (cadena s);
Q #34) ¿Qué significan los delegados de multidifusión?
Responder: Un Delegado que apunta a más de un método se denomina Delegado de multidifusión. La multidifusión se logra utilizando el operador + y + =.
Considere el ejemplo de Q # 32.
Hay dos suscriptores para deathEvent, GetPatInfo , y GetDeathDetails . Y, por tanto, hemos utilizado el operador + =. Significa siempre que el myDel se llama, se llama a ambos suscriptores. Los delegados serán llamados en el orden en que se agreguen.
P # 35) Explique a los editores y suscriptores en eventos.
Responder: Publisher es una clase responsable de publicar un mensaje de diferentes tipos de otras clases. El mensaje no es más que Evento como se discutió en las preguntas anteriores.
Desde el Ejemplo en Q # 32, Class Patient es la clase Publisher. Está generando un evento deathEvent , que es recibido por las otras clases.
Los suscriptores capturan el mensaje del tipo que les interesa. Nuevamente, desde el Ejemplo de Q # 32, el seguro colectivo y el banco son suscriptores. Están interesados en el evento deathEvent de tipo vacío .
P # 36) ¿Qué son las operaciones sincrónicas y asincrónicas?
Responder: La sincronización es una forma de crear un código seguro para subprocesos donde solo un subproceso puede acceder al recurso en un momento dado. La llamada asincrónica espera a que se complete el método antes de continuar con el flujo del programa.
La programación síncrona afecta gravemente a las operaciones de la interfaz de usuario cuando el usuario intenta realizar operaciones que requieren mucho tiempo, ya que solo se utilizará un hilo. En la operación Asíncrona, la llamada al método regresará inmediatamente para que el programa pueda realizar otras operaciones mientras el método llamado completa su trabajo en ciertas situaciones.
En C #, las palabras clave Async y Await se utilizan para lograr la programación asincrónica. Consulte la pregunta 43 para obtener más detalles sobre la programación síncrona.
P # 37) ¿Qué es la reflexión en C #?
Responder: La reflexión es la capacidad de un código para acceder a los metadatos del ensamblado durante el tiempo de ejecución. Un programa reflexiona sobre sí mismo y utiliza los metadatos para informar al usuario o modificar su comportamiento. Los metadatos se refieren a información sobre objetos, métodos.
El espacio de nombres System.Reflection contiene métodos y clases que gestionan la información de todos los tipos y métodos cargados. Se utiliza principalmente para aplicaciones de Windows, Por ejemplo , para ver las propiedades de un botón en un formulario de Windows.
El objeto MemberInfo de la reflexión de la clase se utiliza para descubrir los atributos asociados con una clase.
La reflexión se implementa en dos pasos, primero, obtenemos el tipo de objeto y luego usamos el tipo para identificar miembros como métodos y propiedades.
Para obtener el tipo de una clase, simplemente podemos usar,
Escriba mytype = myClass.GetType ();
Una vez que tenemos un tipo de clase, se puede acceder fácilmente a la otra información sobre la clase.
System.Reflection.MemberInfo Info = mytype.GetMethod ('Agregar números');
La declaración anterior intenta encontrar un método con nombre AddNumbers en la clase mi clase .
P # 38) ¿Qué es una clase genérica?
Responder: La clase Genérica o Genérica se utiliza para crear clases u objetos que no tienen ningún tipo de datos específico. El tipo de datos se puede asignar durante el tiempo de ejecución, es decir, cuando se utiliza en el programa.
Por ejemplo:
Entonces, del código anterior, vemos 2 métodos de comparación inicialmente, para comparar string e int.
En el caso de otras comparaciones de parámetros de tipos de datos, en lugar de crear muchos métodos sobrecargados, podemos crear una clase genérica y pasar un tipo de datos sustituto, es decir T. Entonces, T actúa como un tipo de datos hasta que se usa específicamente en el método Main () .
Q # 39) ¿Explica las propiedades de Obtener y Establecer Accesor?
Responder: Get y Set se denominan Accessors. Estos son utilizados por Propiedades. La propiedad proporciona un mecanismo para leer y escribir el valor de un campo privado. Para acceder a ese campo privado, se utilizan estos accesos.
Obtener propiedad se usa para devolver el valor de una propiedad
El descriptor de acceso Establecer propiedad se utiliza para establecer el valor.
El uso de get y set es el siguiente:
Q # 40) ¿Qué es un hilo? ¿Qué es el subproceso múltiple?
Responder: Un hilo es un conjunto de instrucciones que se pueden ejecutar, lo que permitirá a nuestro programa realizar un procesamiento simultáneo. El procesamiento concurrente nos ayuda a realizar más de una operación a la vez. De forma predeterminada, C # tiene solo un hilo. Pero los otros hilos se pueden crear para ejecutar el código en paralelo con el hilo original.
El hilo tiene un ciclo de vida. Comienza siempre que se crea una clase de subproceso y finaliza después de la ejecución. Sistema.Threading es el espacio de nombres que debe incluirse para crear hilos y usar sus miembros.
Los subprocesos se crean ampliando la clase de subproceso. Comienzo() El método se usa para comenzar la ejecución del hilo.
|_+_|C # puede ejecutar más de una tarea a la vez. Esto se hace manejando diferentes procesos por diferentes hilos. Esto se llama MultiThreading.
Hay varios métodos de subprocesos que se utilizan para manejar operaciones de subprocesos múltiples:
Iniciar, dormir, cancelar, suspender, reanudar y unirse.
La mayoría de estos métodos se explican por sí mismos.
P # 41) Nombra algunas propiedades de la clase Thread.
Respuesta: Algunas propiedades de la clase de hilo son:
- IsAlive - contiene el valor Verdadero cuando un hilo está activo.
- Nombre - Puede devolver el nombre del hilo. Además, puede establecer un nombre para el hilo.
- Prioridad - devuelve el valor priorizado de la tarea establecida por el sistema operativo.
- IsBackground : Obtiene o establece un valor que indica si un hilo debe ser un proceso en segundo plano o en primer plano.
- ThreadState - describe el estado del hilo.
Q #42) ¿Cuáles son los diferentes estados de un hilo?
Respuesta: Los diferentes estados de un hilo son:
- Sin iniciar - Se crea el hilo.
- Corriendo - El hilo inicia la ejecución.
- EsperaDuermeÚnete - Las llamadas a los hilos se suspenden, las llamadas esperan en otro objeto y las llamadas se unen a otro hilo.
- Suspendido - El hilo ha sido suspendido.
- Abortado - El hilo está muerto pero no se ha cambiado al estado detenido.
- Interrumpido - El hilo se ha detenido.
Q #43) ¿Qué son Async y Await?
Responder: Las palabras clave Async y Await se utilizan para crear métodos asincrónicos en C.
La programación asincrónica significa que el proceso se ejecuta independientemente de los procesos principales o de otro tipo.
El uso de Async y Await se muestra a continuación:
- La palabra clave asincrónica se utiliza para la declaración del método.
- El recuento es de una tarea de tipo int que llama al método CalculateCount ().
- Calculatecount () inicia la ejecución y calcula algo.
- Se realiza un trabajo independiente en mi hilo y luego se alcanza la declaración de espera de conteo.
- Si el Calculatecount no está terminado, myMethod volverá a su método de llamada, por lo que el hilo principal no se bloquea.
- Si el Calculatecount ya está terminado, entonces tenemos el resultado disponible cuando el control alcanza el tiempo de espera. Entonces, el siguiente paso continuará en el mismo hilo. Sin embargo, no es la situación en el caso anterior donde está involucrado el Retardo de 1 segundo.
Q # 44) ¿Qué es un interbloqueo?
Responder: Un interbloqueo es una situación en la que un proceso no puede completar su ejecución porque dos o más procesos están esperando que el otro termine. Esto suele ocurrir en subprocesos múltiples.
Aquí, un proceso retiene un recurso compartido y otro proceso está esperando que el primer proceso lo libere y el hilo que contiene el elemento bloqueado está esperando que se complete otro proceso.
Considere el siguiente ejemplo:
- Realizar tareas accede a objB y espera 1 segundo.
- Mientras tanto, PerformtaskB intenta acceder a ObjA.
- Después de 1 segundo, PeformtaskA intenta acceder a ObjA que está bloqueado por PerformtaskB.
- PerformtaskB intenta acceder a ObjB que está bloqueado por PerformtaskA.
Esto crea Deadlock.
Q # 45) Explique L ock , Monitores , y Mutex Objeto en Threading.
Responder: La palabra clave de bloqueo asegura que solo un hilo pueda ingresar a una sección particular del código en un momento dado. En lo de arriba Ejemplo , lock (ObjA) significa que el bloqueo se coloca en ObjA hasta que este proceso lo libera, ningún otro hilo puede acceder a ObjA.
Mutex también es como un bloqueo, pero puede funcionar en varios procesos a la vez. WaitOne () se usa para bloquear y ReleaseMutex () se usa para liberar el bloqueo. Pero Mutex es más lento que bloquear, ya que lleva tiempo adquirirlo y liberarlo.
Monitor.Enter y Monitor.Salir implementan el bloqueo internamente. un candado es un atajo para monitores. lock (objA) llama internamente.
|_+_|P # 46) ¿Qué es una condición de carrera?
Años: La condición de carrera ocurre cuando dos subprocesos acceden al mismo recurso e intentan cambiarlo al mismo tiempo. No se puede predecir el hilo que podrá acceder al recurso primero.
Si tenemos dos subprocesos, T1 y T2, y están intentando acceder a un recurso compartido llamado X. Y si ambos subprocesos intentan escribir un valor en X, se guardará el último valor escrito en X.
Q #47) ¿Qué es Thread Pooling?
Años: El grupo de subprocesos es una colección de subprocesos. Estos hilos se pueden utilizar para realizar tareas sin perturbar el hilo principal. Una vez que el hilo completa la tarea, el hilo regresa al grupo.
El espacio de nombres System.Threading.ThreadPool tiene clases que administran los subprocesos en el grupo y sus operaciones.
|_+_|La línea anterior pone en cola una tarea. Los métodos SomeTask deben tener un parámetro de tipo Object.
P # 48) ¿Qué es la serialización?
Responder: La serialización es un proceso de conversión de código a su formato binario. Una vez que se convierte a bytes, se puede almacenar y escribir fácilmente en un disco o en cualquier dispositivo de almacenamiento. Las serializaciones son principalmente útiles cuando no queremos perder la forma original del código y se puede recuperar en cualquier momento en el futuro.
Cualquier clase que esté marcada con el atributo (Serializable) se convertirá a su forma binaria.
El proceso inverso de recuperar el código C # de la forma binaria se llama Deserialización.
Para serializar un objeto, necesitamos que el objeto sea serializado, una secuencia que puede contener el objeto serializado y el espacio de nombres System.Runtime.Serialization puede contener clases para serialización.
P # 49) ¿Cuáles son los tipos de serialización?
Respuesta: Los diferentes tipos de serialización son:
- Serialización XML - Serializa todas las propiedades públicas al documento XML. Dado que los datos están en formato XML, se pueden leer y manipular fácilmente en varios formatos. Las clases residen en System.sml.Serialization.
- JABÓN - Las clases residen en System.Runtime.Serialization. Similar a XML pero produce un sobre completo compatible con SOAP que puede ser utilizado por cualquier sistema que entienda SOAP.
- Serialización binaria - Permite convertir cualquier código a su forma binaria. Puede serializar y restaurar propiedades públicas y no públicas. Es más rápido y ocupa menos espacio.
P # 50) ¿Qué es un archivo XSD?
Responder: Un archivo XSD significa Definición de esquema XML. Proporciona una estructura para el archivo XML. Significa que decide los elementos que debe tener el XML y en qué orden y qué propiedades deben estar presentes. Sin un archivo XSD asociado con XML, el XML puede tener etiquetas, atributos y elementos.
La herramienta Xsd.exe convierte los archivos al formato XSD. Durante la serialización del código C #, xsd.exe convierte las clases al formato compatible con XSD.
Conclusión
C # crece rápidamente día a día y juega un papel importante en la industria de pruebas de software.
Estoy seguro de que este artículo hará que su preparación para la entrevista sea mucho más fácil y le dará una buena cantidad de conocimiento de la mayoría de los temas de C #.
¡Espero que esté listo para enfrentar cualquier entrevista de C # con confianza!
Lectura recomendada
- Preguntas y respuestas de la entrevista
- Preguntas y respuestas de la entrevista de prueba ETL
- Las 50 preguntas y respuestas más populares de la entrevista CCNA
- Las 51 preguntas y respuestas principales de la entrevista de Bootstrap
- Más de 20 preguntas y respuestas de entrevistas .NET
- Más de 50 preguntas y respuestas principales de entrevistas de base de datos
- Algunas preguntas y respuestas complicadas sobre pruebas manuales
- Las 25 mejores preguntas y respuestas de la entrevista de pruebas ágiles