Una entrevista puede ser incomoda, sin embargo, como todo en la vida, entre mejor se este preparado, uno se sentirá mas seguro de si mismo y los resultados serán mejores.
Los conceptos que se presentan a continuación te ayudarán con la parte básica de una entrevista como desarrollador Java, de igual manera, estos conceptos aplican en cualquier lenguaje orientado a objetos, como lo es C#, entre otros.
A veces las estructuras de datos son la solución a todo el problema.
Quieres remover duplicados? Utiliza un HashSet
Interface – Tipo abstracto que solo admite métodos abstractos. Usualmente es utilizado para especificar el comportamiento de la clase que lo implementará.
Abstract class – Es una clase abstracta que puede tener métodos abstractos y métodos con implementación, al igual que la interfaz ayuda a especificar el comportamiento de la clasa que debe implementar esta clase abstracta.
Overriding – Permite a una subclase o clase hija implementar el método con el comportamiento necesario para ese escenario, el comportamiento de la clase padre o “super class” será ignorado. El método debe tener el mismo nombre, parametros que acepta, el mismo tipo de retorno.
Overloading – Es un método con el mismo nombre que otro método existente pero que puede aceptar mas o menos paramétros.
Static – Esta palabra reservada es utilizada para el uso de memoria.
- Variable -> Variable de clase (Class variable)
- Method -> Método de clase (Class method)
Final – Es una palabra reservada que puede aplicarse a una variable, método o una clase.
- Variable -> Variable constante, el valor es asignado y no puede cambiarse.
- Método -> No permite la sobre-escritura (overriding).
Classes -> No permite la herencia (Inheritance), la clase no podrá tener un comportamiento distinto.
Modificadores de acceso
- Public -> Todos pueden verlo y accesar a el.
- Protected -> Acceso solo a la clases en el mismo paquete (Package) y clases hija/sub-clases.
- Default -> Acceso a clases en el mismo paquete (package).
- Private -> Acceso solo permitido en la misma clase (También a través de reflection, pero esa es otra historia…).
Immutable
- Son estas clases que no puede ser modificadas una vez que han sido creadas.
- Todos los campos de una clase inmutable (immutable) deben ser “final”.
“Un buen código es alto en cohesión y bajo en acoplamiento (coupling)”
Cohesión: Una sola tarea, un solo objetivo.
Acoplamiento (Coupling): Relación o dependencia entre clases.
Collections
Interfaces
List
- Orden de inserción.
- Acceso a través de indices.
- Permite duplicados.
- Permite elementos null y puede tener muchos objetos null.
Set
- Objetos únicos sin un orden en especifico.
- No permite duplicados.
- Permite un element null.
Map
- Objetos que se almacenan en pares Key-value.
- Solo un element key null.
- Permite multiples valores nulls.
Estructuras de Datos
(Implementaciones de las Interfaces)
“A veces las estructuras de datos son la solución a todo el problema.
Quieres remover duplicados? Utiliza un HashSet
Quieres organizar los datos para busquedas veloces? Utiliza un b-treeLa lista continúa….”
List interface
ArrayList – Proporciona acceso a través de índices.
LinkedList – Una relación hacia el elemento previo y el siguiente element, permite agregar y eliminar elementos de una forma sencilla.
Vector – Vector es la versión sincronizada de ArrayList.
Time Complexity
Map interface
HashMap – Estructura key-value non-synchronized.
HashTable – Estructura key-value synchronized.
LinkedHashMap – Garantiza el orden de inserción.
TreeMap – Mantiene un orden por clasificación (sort order), por default es orden natural de menor a mayor.
Time Complexity
Set interface
HashSet
- Objeto para guardar elementos.
- Es rápido.
- O(1) para funciones de inserción (add), busqueda (contains) y borrado (remove) debido a la función hash distribuye los elementos uniforme en los la tabla hash.
LinkedHashSet
- Mantiene orden de inserción.
- Es el Segundo en desempeño, casi similar a HashSet.
TreeSet
- Es una implementación de SortedSet.
- Mantiene los elementos en un orden por clasificación (sort order), definida por una interface Comparable o Comparator.
- Es un poco mas lento debido a la operación de ordenamiento que debe efectuar en cada insercción.
- No permite elementos null y lanza la excepción throw java.lang.NullPointerException cuando intentas insertar un elemento null.
- O(log*n): Insertar (add), remover (remove), buscar (contains).
Time Complexity
Resumen
Las clases collection utilizadas habitualmente son descritas en la tabla de abajo.