¿Cómo superar con éxito una entrevista técnica de programador?

programación Aug 09, 2022

Introducción

 

¿Te estas preparando para tu primera entrevista como programador? ¿Te aterra un poco la cantidad de preguntas técnicas con las que puedan bombardearte?

¿Te estas preparando para tu primera entrevista como programador? ¿Te aterra un poco la cantidad de preguntas técnicas con las que puedan bombardearte?

¿Te estas preparando para tu primera entrevista como programador? ¿Te aterra un poco la cantidad de preguntas técnicas con las que puedan bombardearte?

 

Pregunta 1.-Hablando de programación orientada a objetos ¿Cuál es la diferencia entre una interfaz y una clase abstracta? 

 

Esta pregunta es una de las clásicas que la mayoría de los lideres técnicos pueden hacer a sus candidatos. Si tienes sólidas bases en programación orientada a objetos, esta pregunta no debería implicar mayor reto.

Al ser conceptos muy parecidos es posible que de primera mano sean difíciles de entender para algunos. De cualquier forma, repasemos algunos términos.

 

 

¿Qué es una clase abstracta? 

Una clase abstracta es un tipo de clase especial, que, a diferencia de las clases tradicionales, las clases abstractas por sí mismas no se pueden identificar con una entidad concreta. Su mismo nombre lo indica, son abstractas, no algo concreto. Recordemos que el objetivo del paradigma orientado a objetos es modelar entidades del mundo real de forma mas accesible y rápida.

Por lo tanto, el objetivo de las clases abstractas es representar entidades del mundo que poseen características en común para permitir crear otras clases derivadas (de la clase abstracta) que pueden ser más concretas. Quizá puede sonar confuso al principio, pero tratemos de aplicar un ejemplo:

Una clase abstracta que podríamos modelar del mundo real, puede ser una entidad vehículo y si te pones a pensar, un vehículo como tal es algo muy abstracto, pero es importante notar que todos los vehículos tienen acciones en particular como acelerar, frenar, etc. Esto puede ser útil si queremos crear una clase relacionada que herede de Vehículo y sobrescribir e implementar los métodos abstractos 

¿Qué es una interfaz? 

En programación orientada a objetos una interfaz es un mecanismo que obliga a nuestras clases que la incorporan a implementar los métodos que hemos definido en la interfaz. Es importante mencionar que una interfaz por si sola, no posee la implementación de estos métodos (el cómo hace las cosas) más bien intenta explicar de manera general como se va a comportar el método (el que hará). Por ejemplo, la interfaz definirá el nombre del método, el tipo de dato a regresar y sus parámetros, pero no va a poseer una definición explicita sobre como lo hará, como en un método tradicional.

¿Para qué me puede servir una interfaz?

Como habrás visto, la interfaz puede ser de gran ayuda cuando queremos forzar que determinadas clases tengan ciertos métodos. Un ejemplo puede ser una clase tipo CRUD, donde forzosamente tendrás métodos para Consultar, Crear, Borrar y Actualizar.

¿Cuál es la diferencia entre ambas?

Las interfaces normalmente solo definen el que se va hacer (el que) mas no la implementación explicita del método.

Una clase abstracta puede tener una definición explicita de un método.

Una interfaz permiten implementar herencia múltiple al implementar distintas interfaces.

Los métodos abstractos deben ser sobre escritos en la clase quien los herede.

 

Pregunta 2.-¿En que consiste la normalización en una base de datos? ¿Por qué es importante usarla?

 

La normalización es un proceso que consiste en aplicar una serie de reglas al momento de crear una base de datos relacional con el objetivo de reducir la redundancia de datos, lo que permite crear sistemas robustos y escalables.

El proceso de normalización consta de varias etapas ordenadas llamadas formas normales (FN) partiendo desde la primera forma normal (FM1) pudiendo llegar hasta la sexta (FM6)

Algunas de sus ventajas son:

  • Evita la redundancia de datos
  • Protege la integridad de los datos
  • Facilita el acceso e interpretación de los datos

 

Algunas reglas de las reglas que deben tenerse presentes durante la normalización:

  • Cada tabla debe tener un único nombre
  • No puede haber registros repetidos
  • Los datos en una columna deben ser del mismo tipo

 

Pregunta 3: ¿Qué es un motor de persistencia? 

 

Un ORM (Object Relational Mapping) es una técnica empleada para consumir una base de datos relacional dentro de una aplicación escrita en el paradigma orientada a objetos. La finalidad es disponer de un mecanismo basado en objetos para manipular la información de la base de datos y aprovechar las ventajas de la programación orientada a objetos como la herencia y polimorfismo.

Ventajas de estos motores de persistencia

  • Acelerar el desarrollo de apps evitando escribir código repetitivito en operaciones relacionadas con la base de datos
  • Al ser un mecanismo intermediario entre la base de datos y la aplicación, puede aportar una capa de seguridad adicional a practicas mal intencionadas.

 

Pregunta 4: ¿Cuál es la diferencia entre la sobrecarga y sobre escritura de métodos?

 

En programación orientada a objetos, la sobrecarga de métodos se refiere a tener más de una versión de un método (mismo nombre) pero pudiendo variar sus parámetros. Por ejemplo, podríamos tener una sobrecarga de un método llamadoObtener Cliente que pueda recibir argumentos completamente diferentes:

ObtenerCliente(int clave)

ObtenerCliente(string nombre)

Por el contrario la sobre escritura de métodos como su nombre lo indica sobrescribe la funcionalidad de un método existente que previamente hemos heredado de una clase base. Dependiendo de la tecnología que estemos utilizando es la manera en la que se puede realizar. 

 

Pregunta 5: ¿Cuál es la finalidad de un constructor?

 

Nuevamente hablando de programación orientada a objetos, un constructor es un método especial que se ejecuta siempre que creamos un nuevo objeto de una clase dada. La finalidad del constructor es inicializar atributos internos o valores necesarios de nuestra clase.

Al tener un lugar destinado para inicializar atributos y variables, se crean restricciones que mejoran la seguridad de nuestra aplicación. 

 

Pregunta 6: ¿Cómo definirías la arquitectura de un nuevo proyecto de software? Justifica tu respuesta.

 

En este punto, no hay una respuesta única y debes utilizar tu sentido común y observar con ojo critico para plantear una respuesta coherente.

Pero imaginemos que sigues el patrón que la mayoría de los Frameworks te obligan a implementar: El patrón Modelo Vista Controlador.

La finalidad de este modelo es separar las responsabilidades de cada componente de tal manera que se cumpla uno de los principios para crear software escalable: Evitar la dependencia entre componentes y en la medida de lo posible que cada componente este diseñado únicamente para una responsabilidad.

El modelo es la capa que va interactuar con nuestros datos así mismo proveyendo un mecanismo seguro y controlado para el manejo de los mismo.

Por otro lado tenemos la vista, que es el componente con el que van interactuar nuestros usuarios finales. En este contexto podemos referirnos a una pagina en HTML, una pantalla de una app, etc.

Finalmente, el controlador que sirve de intermediario entre la vista y el modelo. El controlador captura  las peticiones de los usuarios desde la vista y define reglas de negocio, además de enviar y recibir información desde el modelo.

 

Pregunta 7: ¿Qué es la cohesión y el acoplamiento? 

Uno de los aspectos mas complicados a la hora de desarrollar software es decidir como designar las diferentes responsabilidades que tendrá la APP.

Para ello nos vamos a referir a dos conceptos estrechamente relacionados: La cohesión y el acoplamiento.

La cohesión es la medida que indica el grado de responsabilidad que un componente esta diseñado para una única responsabilidad.

Por otro lado el acoplamiento es el grado de dependencia entre diferentes componentes dentro de una aplicación.

Siempre que estemos creando software debemos buscar que nuestras apps tengan una alta cohesión y un bajo acoplamiento. Es decir que en la medida de lo posible cada componente este diseñado únicamente para una única responsabilidad y exista una baja dependencia entre otros componentes. 

 

 Conclusión

Estas fueron solo algunas de las preguntas técnicas mas comunes durante una entrevista para un programador junior. ¿Conoces alguna otra? Escríbeme en los comentarios ;)