1.-¿Qué es una clase y un objeto?
Clase: En POO es la abstracción de una idea en un componente en el cual se definen sus características
(atributos) y su comportamiento (métodos), es como un diseño del cual se podrán generar objetos.
Objeto: Seria como tal al resultado de crear una instancia de alguna clase ya definida. A través de este
podemos acceder a la funcionalidad atreves de sus métodos asi como de sus atributos.
2.-¿Qué es la herencia y el polimorfismo?
Herencia: La herencia se refiere a que pueden existir subclases de una clase cualquiera, se implementa a
través del uso de la palabra reservada extends, lo cual nos da la posibilidad de enriquecer nuestras clases con
otras ya existentes y crear una clase a partir de otra.
Polimorfismo: En POO se refiere a la idea de que una variable de referencia puede ser asignada a objetos de
diferentes clases siempre y cuando estén relacionadas entre ellas a través de la herencia. Los objetos como
tal no son polimórficos, las variables de referencia son las polimórficas. A través de una interfaz se puede
hacer referencia a diversas clases para diferentes propósitos.
3-¿Qué es el encapsulamiento?
Se refiere a la capacidad que se tiene acerca de los niveles de acceso de los componentes (datos).
Un ejemplo del uso de encapsulamiento es con el uso de los modificadores de acceso
Su objetivo es garantizar la integridad de los datos.
4.-¿Qué es la sobrecarga y la sobre escritura?
Overoadding: Se refiere a que un método heredado es sobre cargado cuando el nombre se conserva pero se
modifica en cantidad y/o en tipo sus parámetros de entrada.
Overriding: Se refiere a cuando una subclase declara en ella un método de su súper clase sin alterar la firma
del mismo, y le programa una rutina distinta.
5.-¿Para qué sirve la palabra reservada final?
En caso de ser usada en una Clase, entonces esta hace que dicha clase no acepte subclases de ella, es decir
no admite herencia.
Usada en métodos, lo que hace es indicar que dicho método no podrá ser sobre escrito.
Usada en atributos, indica que el atributo no puede ser modificado de valor después de que se inicializa, en
caso de que el atributo sea de tipo instancia este se inicializara en el constructor, en caso de que sea local
(automático, temporal) este será inicializado dentro del método.
6.-¿Para qué sirve la palabra reservada static?
Usada en atributos: nos indica que el atributo será de clase y no de instancia (es el mismo para todas las
instancias de esa clase). No mantiene su valor al serializarlo, es decir después del proceso de
desserializacion el atributo se inicializa con su valor por default. Se accede a él a través del operador punto.
Solo puede ser accedido por métodos o bloque estáticos.
Usada en métodos: Indica que el método es de clase, se accede a ellos por medio del operador punto, solo
puede invocar atributos y métodos estáticos, no puede hacer referencia al objeto utilizando los operadores this
y super y no pueden ser sobre escritos.
7.-¿Cuales son los modificadores de acceso en java?
Privados: Solo la propia clase puede acceder a dicho atributo o método marcado con private
Default: Es cuando no se pone explícitamente ningún modificador de acceso, solo la clase misma y las clases
que se encuentran al mismo nivel en el mismo package pueden acceder a los marcados con default.
Protegidos: La propia clase, las clases que están dentro del mismo package y cualquier subclase de la clase
contenedora de dicho atributo protected.
Publicos: Todos pueden acceder a dichos recursos.
8.-¿Qué es una clase abstracta y una interfaz?
Clase abstracta: No se conoce su funcionalidad al 100% ya que contiene tanto métodos concretos como
métodos abstactos. Son las clases que llevan la palabra reservada abstract antes de la palabra reservada
class. No puede ser instanciada directamente, tiene que ser a través de alguna de sus subclases. Sus
subclases están forzadas a implementar sus métodos abstactos. Puede ser declarada como abstracta aunque
no contenga métodos abstractos.
Interfaz: Esta marcada con la palabra reservada interfaz, solo contiene métodos abstractos y puede contener
atributos pero marcados con static y final
No se pueden crear instancias de las interfaces, se tienen que crear instancias de las clases que las
implementan a través del keyword implements.
Una interfaz puede extender de otra interfaz.
Las clases que implementan una interfaz están obligadas a implementar sus métodos abstractos, de no
hacerlo dicha clase debe ser declarada como abstract class
9.-¿Cuál es la diferencia entre una clase abstracta y una interfaz?
La principal diferencia es que la interfaz solo contiene firmas de métodos.
Y que la interfaz permite relacionar clases poco relacionas sin necesidad de generar herencias.
Para implementar la clase abstracta se usa extends y para implementar una interfaz se usa implements.
10.-¿Cuál es la diferencia de un String y un StringBuilder, cuando se utiliza una y otra?
String es inmutable (cualquier operación de modificación produce una instancia nueva) y StringBuilder es
mutable, se almacena en el heep de la memoria en java y se construye con una capacidad inicial de 16
caracteres, es mas rápida que StringBuffer debido a que is not synchronized is not thread safe, no se
recomienda en aplicaciones multi hilos.
StringBuffer es mutable, se almacena en el heep de la memoria en java y se construye con una capacidad
inicial de 16 caracteres, is synchronized is thread safe se usa en sistemas multi hilos.
11.-¿Cuales son las 3 interfaces principales en java para el manejo de colecciones?
List
Set
Queue
Sobre la pregunta anterior, ¿Cuáles son las principales diferencias entre estas?(Mencione 2
implementaciones de cada una)
Set, no permite duplicados, es necesario que se implementen los métodos equals y hashCode de los objetos
que serán agregados a la lista Set.
HashSet, se almacena en una tabla hash y es la mas eficiente aunque no garantiza el orden, es necesario
definir el tamaño inicial de la tabla para un rendimiento optimo
TreeSet, almacena los elementos ordenándolos en función de sus valores, los objetos que se almacenaran
deben implementar la interfaz Comparable.
LinkedHashSet, Almacena en una tabla hash pero en el orden en que se insertan
Nota: ninguna de las implementaciones son sincronizadas.
List, acepta duplicados
ArrayList
LinkedList, esta es una lista doblemente enlazada.
Nota: ninguna de las implementaciones son sincronizadas.
Queue, acepta duplicados
PriorityQueue los objetos que se almacenaran deben implementar la interfaz Comparable.
12.-¿Para qué sirve sobre-escribir los métodos equals y hashcode?
Sobre-escribimos el equals para poder comparar objetos en base a sus atributos.
Sobre-escribimos el hashCode complementa al método equals sirve para comparar objetos en una estructura
hash, cuando java compara dos objetos en estructuras de tipo Hash primero invoca al método hashCode y
luego a equals.
13.-¿Qué son las excepciones chequeadas y no chequeadas?(Checked and Unchecked exceptions)
UnChecked, son aquellas que tienen por superclase la clase RunTimeException son excepciones que ocurren
en tiempo de ejecución, NullPointerException, ArrayIndexOutOfBoundException,ArithmeticException
Checked, son aquellas que tienen como superclase la clase Exception, necesitan forzosamente ser
capturadas ya que son detectadas en tiempo de compilación de lo contrario el código no compila, ejemplo
seria un FileReader (IOException), lo relacionado a una conexion de BD.
14.-¿Puede existir un bloque finaly sin bloque catch?
Si
15.-¿Cómo se implementa la multi-herencia en java?
Por medio de las interfaces, cuando la clase implementa varias interfaces.
16.-¿Para qué sirven los genéricos en java?
Sirve para garantizar la integridad de datos atacando el Type Safety y asi ya no tener la necesidad de realizar
Casting.
Se usa para definir clases genéricas las cuales pueden recibir uno o varios parámetros dentro del operador
diamante <T,E,K,V,N,S,U,etc>
17.-¿Qué es una lambda?
Es al hecho de programar enfocado bajo el paradigma funcional, es una función anónima esta formada por la
siguiente estructura (param_1,param_2,param_n) -> { instrucción 1; instrucción M; return instrucción N };
18.-¿Qué es un stream?
Para esto se necesita programar bajo un paradigma Declarativo.
Los Streams son una secuencia de elementos que soportan operaciones de agregación, modificación, filtrado
secuencial y paralela.
19.-¿Para qué sirven las funciones map y reduce?
La función Map nos sirve para modificar el contenido del Stream
La función reduce en el API Stream nos sirve para convertir una lista de elementos en un único resultado.
Mencione al menos otras 3 funciones que pueden ser aplicadas a un stream
.map()
.filter()
.reduce()
.ifPresent()
.collect()
.flatMap()
20.-¿Qué patrones de diseño conoce y para qué sirven?
Singleton: sirve para garantizar una única instancia de alguna clase
1.- El constructor se declara privado
2.- Se crea una variable de referencia static del mismo tipo que la clase
3.- Se crea un bloque estático el asigna a la variable de referencia de tipo static anteriormente declarada con
una instancia de la clase.
4.- Se crea un método publico estático que retorne dicha variable de referencia.
21.- Explique el patrón MVC (Modelo Vista Controlado)
Se usa para separar por capas una aplicación WEB, en el Modelo se declaran las clases que contienen la
lógica de negocio y las clases de tipo entidad y las clases de conexión a DB, en la vista se colocan las JSP
con el contenido dinámico que será presentado al usuario final a través de un navegador WEB, y el
Controlador serian los servlets que son los encargados de recibir las peticiones en rutar a la clase de servicio
que realizaran la lógica de negocio y por ultimo hacer un requestDispacher a una JSP que desplegara los
resultados de forma visual al usuario final.
22.- Explique el patrón DAO(Data Access Object)
Es esencialmente para separar la lógica de negocio del acceso a datos.
23.- Define AOP (Programación Orientada a Aspectos)
Se utiliza para declarar rutinas que no son parte de la lógica de negocio, ejemplo declarar interceptores es
decir rutinas que se ejecutan de forma transversal que se repiten a lo largo de la ejecución del sistema.
24.-¿Qué es Spring y para qué sirve?
Es un framework que nos sirve para configurar el manejo de dependencias a través de un contenedor.
Esta basado en IOC e inyección de dependencias.
25-¿Qué es la inversión de control?
Es un principio de diseño de software en el que el flujo de ejecución se basa en que se especifican respuestas
deseadas a sucesos o solicitudes de datos concretas este principio se implementa mediante Inyeccion de
dependencias.
¿Qué es la inyección de dependencias?
Es la implementación del principio IOC
Es cuando se evita el uso del operador new para crear instancias de objetos dentro de determinadas
instancias de clases, mejor se le inyectan las referencias a dichos objetos por medio del constructor o por
medio métodos setters o por medio de la anotación @Autowired.
26.-Mencione al menos 3 anotaciones de spring y ¿para qué sirven?
@Component: Le indica a Spring que los objetos creados de dicha clase decorada con esta anotacion serán
administrados por el contenedor de Beans de Spring
@Configuration: Sirve para indicarle a Spring que esta es una clase de configuración donde declararemos los
Beans que serán administrados por el contenedor de Spring.
@Bean: Esta anotacion decora a métodos dentro de una clase decorada con @Component sirve para indicar
que lo que retorne dicho método será un Bean administrado por el contenedor de Spring.
@Controller: Es un estereotipo de @Component, sugiere que la clase funcionara como un controlador de
peticiones.
@Service: Es otro estereotipo para indicar que esta será una clase de servicio.
@Repository: Es otro estereotipo para indicar que es una clase con acceso a datos.
27.-¿Qué módulos de spring ha utilizado y para qué sirven?
SpringMVC
SpringJPA
SpringSecurity
SpringCore
SpringCloud
28.-¿Maneja configuración por xml, anotaciones o ambos enfoques?
Ambos enfoques
29.-¿Como se realiza la inyección por constructor y por setters?
<beans xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]
<bean id="dataSource" class="[Link]">
<property name="driverClassName" value="[Link]" />
<property name="url" value="jdbc:mysql://[Link]/" />
<property name="username" value="username" />
<property name="password" value="password" />
</bean>
<!-- Le decimos a Spring que inyecte por constructor -->
<bean id="dataBaseService"
class="[Link]">
<constructor-arg ref="dataSource" />
</bean>
<!-- Le decimos a Spring que inyecte por setter -->
<bean id="dataBaseServiceBySet"
class="[Link]">
<property name="dataSrc" ref="dataSource" />
</bean>
</beans>
30.- ¿Que es un dataSource y como se configura en Spring?
Es de hecho una simple fábrica de conexiones hacia la fuente de datos física.
31.-¿Para qué sirve Spring Boot?
Para agilizar el desarrollo de aplicaciones por medio del uso del framework Spring
32.-¿Qué es un servicio web?
Sirve para realizar la comunicación entre aplicaciones independientes entre ellas por medio de algún
protocolo.
33.-¿Cuál es la diferencia entre REST y SOAP?
El protocolo de comunicación en REST es por medio de peticiones HTTP y sus verbos
Por tanto REST nos permite la creación de servicios más ligeros y simples.
SOAP es un protocolo que nos permitirá realizar servicios web sin estado, a través de TCP y con un formato
XML, se basa en la definición de un contrato entre cliente y servidor.
34.-¿Cuando recomienda usar un enfoque y otro?
Es dependiendo de las necesidades del cliente, pero creo que con la API de Spring Security y OAUT2 se
solventa el problema de seguridad que tienen los RESTFull WS.
35.-¿Cuál es la diferencia entre GET, POST y PUT?
Nota: El principio de idempotencia aplicado a REST (realmente es a los verbos HTTP) nos dice que, la
ejecución repetida de una petición con los mismos parámetros sobre un mismo recurso tendrá el mismo
efecto en el estado de nuestro recurso en el sistema si se ejecuta 1 o N veces.
GET, este verbo es para obtener información (leer), idempotente
POST, este verbo es para insertar información(insert), ni idempotente
PUT, este verbo está destinado para actualizar información(update), idempotente
DELETE, verbo destinado para eliminar algún recurso, idempotente
36.-¿Qué ORM’s conoce(herramientas de mapeo objeto-relacional)?
Hibernate
iBatis
37-¿Qué es Hibernate y para qué sirve?
Framework de mapeo objeto – relacional basado en el protocolo JPA el cual es su implementación de dicho
protocolo.
38.-¿Cuál es la diferencia entre jpa y hibernate?
JPA es el protocolo y Hibernate es un framework que implementa dicho protocolo
39.-¿Cómo se llama el archivo de configuración de Hibernate y que es lo que se configura en este?
El archivo [Link] se usa solo si estás usando Hibernate puro.
conexión
dialecto
configuraciones en transacciones (ej. autoCommit)
datasources
entidades (archivos .[Link])
40.-¿Para qué sirve la anotación @Entity?
Para indicar que dicha clase será mapeada con alguna tabla de BD
41.-¿Cómo se realiza un mapeo bidireccional entre 2 tablas?
42.-¿Para qué sirve configurar como “eager” o “lazy” la carga de objetos relacionados?
43.-¿Qué servidores de aplicación ha utilizado?
GlassFish
Tomcat
WebLogic
44.-¿Qué bases de datos ha utilizado?
Oracle 11g
SqlServer
MySql
45.-¿Qué es un índice y para qué sirve?
Es una estructura de datos que mejora la velocidad de las operaciones, por medio de un identificador único de
cada fila de una tabla.
creado con el comando: create index
46.-¿Qué es una vista?
Es una consulta que se presenta como una tabla a partir de un conjunto de tablas en una base de datos
relacional es una tabla virtual.
creado con el comando: create view
47.-¿Cuál es la diferencia de un inner join, un left join y un outter join?
inner join: es el resultado de la intersección de dos tablas en base a un campo.
left join: da prioridad a la tabla que aparece en la clausula from, es para a completar datos que se encuentren
en la tabla que esta después de la instrucción left join, si no existe ninguna coincidencia para alguna de las
filas de la tabla de la izquierda, de igual forma todos los resultados de la primera tabla se muestran.
outter join: se encarga de mostrar todas filas de ambas tablas.
48.-¿Qué es maven y para qué sirve?
Es una herramienta que facilita el manejo y descarga de dependencias en un proyecto.
49.-¿Qué se configura en el archivo de configuración [Link]?
50.-¿Qué herramientas de integración continua ha utilizado?
GIT
SVN
51.-¿Ha utilizado linux?
Si
52.-¿Qué editor de texto utiliza?
VisualCode
Notepad++
54.- Describa cómo desplegar tomcat mediante línea de comandos.
start tomcat
55.-¿ Que es reflection y como se implementa?
Es el proceso de analizar y modificar todas las capacidades de una clase en tiempo de ejecución.
El API de Java reflection nos permite leer los metadatos de nuestras clases y trabajar con ellos.
56.-¿Describe la clase thread, indica los diferentes estados y explica sincronización?
Nuevo, Listo, Ejecutable, Espera, Dormido, Suspendido, Bloqueado, Muerto
Usando la palabra reservada synchronized en el recurso que se esta compartiendo y que necesita ejecutarse
por mas de un hilo, en caso de no tener acceso al código fuente del recurso compartido se declara un bloque
synchronized donde se envuelven las instrucciones que es necesario controlar el acceso.
57.-Describe la funcionalidad jndi
58.- Describe tipos primitivos
Son 8
Enteros: int, long, byte, short
Flotantes: float, doublé
Logicos: boolean
Texto: char
59.- Indica las características de los siguientes controles de flujo:
1.- for, se declara una variable de inicio, una condición y un incremento
2.- for(for each), se le conoce como for mejorado, se declara una variable del tipo que esta contenida en la
colección que vamos a recorre for(int x: nums) donde: int nums[] = {1,2,3,4}
3.- while, es un bucle el cual se ejecuta mientras se cumpla cierta condición.
4.- do... while, es lo mismo que el while pero con la única diferencia que se ejecuta por lo menos una primera
vez.
5.- switch, sentencia que se utiliza para ejecutar bloques de código en base a evaluar ordinales.
60.-Describe la funcionalidad y características de las siguientes clases:
.- scanner, sirve para ingresar datos a un programa hecho en java por medio de un teclado.
.- inputStream
.- StringTokenizer
.- Calendar
61.-Define los conceptos:
°ByteCode, Codigo intermedio, es el código maquina que se ejecuta sobre la JVM por lo cual para correr
cualquier programa escrito en java lo único que se necesita es descargar la JVM.
El código binario de Java para esta máquina virtual recibe el nombre de Bytecode. Este código binario de Java
es transformado a código binario de la máquina real por la máquina virtua a través de su compilador JIT (Just
in Time) en el momento de la ejecución.
°paquete, para facilitar la modularidad del código
°API, código que indica a las aplicaciones cómo pueden mantener una comunicación entre sí.
Nota:
La parte de la memoria PermGen(non Heap) es la que guarda los metadatos asi como las clases, atributos,
métodos y tipo de dato.
Y la parte Heap almacena las instancias de las clases atraves de la carga del classloader.