Una guía para el futuro desarrollador de Java. Entrevista y carrera. Entrevistas para desarrolladores de Java intermedio Preguntas frecuentes sobre entrevistas de Java

Me mude a otra ciudad, consigo un trabajo, voy a entrevistas. Me pareció que las preguntas que se hacen allí, aunque conocidas, sin embargo, reunidas, pueden ayudar a prepararse y sentirse más seguros.

Preguntas para comprender los principios de la construcción de un DBMS.
1. ¿Cuál es la primera forma normal y el proceso de normalización? ¿Cuáles son las formas normales?
2. ¿Cuál es el significado del índice DBMS, cómo se organizan, cómo se almacenan? ¿Cómo implementarías la misma funcionalidad? La última pregunta se hace si no hay una comprensión clara de los índices.
3. Dibuje una relación Muchos a Muchos. Por ejemplo: tablas Autores y Libros. Un autor puede tener varios libros y un libro puede estar escrito por varios autores. Redacte una consulta SQL para seleccionar libros de un autor específico.

Preguntas básicas sobre Java.
4. Se sabe que la clase base en Java es Object. ¿Qué métodos puedes nombrar?
5. Cuéntanos qué son equals y hashCode. ¿Qué reglas y convenciones existen para la implementación de estos métodos? ¿Cuándo se aplican?
6. Cuéntenos acerca de los métodos de esperar, notificar, notificarTodos. ¿Cómo se usan, cuándo, por qué se necesitan? ¿Qué es sincronizado?
7. ¿Qué es finalizar? ¿Por qué es necesario? ¿Qué puedes decir sobre el recolector de basura y sus algoritmos?
8. ¿Por qué el método clon se declara protegido? ¿Qué se necesita para implementar la clonación?
9. ¿Qué son los modificadores (acceso y otros)? ¿Qué es volátil y transitorio? ¿Para qué y en qué casos sería posible usar default?

Marco de colección de Java
10. ¿Cuáles son las interfaces de colección en Java? Explique en qué se diferencian.
11. ¿Qué implementaciones de estas interfaces conoce?
12. ¿Cuál es la diferencia entre ArrayList y LinkedList? ¿Cómo se organizan? Cuándo deben usarse.
13. ¿Cuál es la diferencia entre HashMap y TreeMap? ¿Cómo se configuran y cómo funcionan? ¿Qué pasa con el tiempo de acceso a los objetos, qué dependencias?
14. ¿Qué es Hashtable, en qué se diferencia de HashMap? Hasta la fecha, ha quedado obsoleto, ¿cómo se sigue utilizando la funcionalidad deseada?

Excepciones
15. ¿Qué es una excepción? ¿Qué tipos de excepciones conoce, en qué se diferencian?
16. ¿Se puede proponer un rompecabezas con bloques try-catch-finally y la pregunta de qué se devolverá o qué excepción finalmente se dejará pasar?

Algoritmos
17. ¿Qué algoritmos de clasificación conoces? ¿Qué tipo de algoritmos conoces?
Además, aquí son posibles varias preguntas adicionales sobre la estimación de la complejidad de los algoritmos, su comparación entre sí.

Patrones de diseño.
18. ¿Está familiarizado con algún patrón de diseño?
19. Escribe un Singleton... Y con carga diferida. ¿Qué pasa si necesita ser seguro para subprocesos? ¿Cuándo es peor la carga diferida?
20. ¿Qué puedes decir sobre MVC? Dibuja un diagrama y explica cómo funciona MVC.

Una serie de preguntas para entender la suite tecnológica J2EE.
21. ¿Qué es un servlet, jsp, su diferencia?
22. ¿Qué es Ajax? ¿Cómo se organiza fundamentalmente esta tecnología?
23. ¿Qué es un ORM, cómo se puede traducir y cómo debería funcionar?

Tareas simples para escribir algoritmos.
24. Escribe una función para calcular el factorial.
25. Dada una función para calcular los números de Fibonacci, se sabe que funciona. Encuentra el error lógico. Estime la complejidad del algoritmo resultante.
26. Invierta la cuerda.
27. Calcula el promedio de la matriz.

Es útil recordar que cuando no se sienta muy seguro, no necesita decir palabras adicionales. Dices una palabra extra, y ellos se aferran a ella, desenrollan la cadena. Exageran cosas de las que no están muy seguros. Esta habilidad de las personas, de aferrarse, debe usarse, pero a tu favor ;-)

Conocimiento y comprensión... las cosas son bastante diferentes, así que
- los diferentes algoritmos, como la clasificación, deben ser escritos por usted mismo, incluso de un libro de texto. Vea cómo se diferencian entre sí, compare su complejidad.
- es útil observar diferentes utilidades y bibliotecas, los principios de agrupar clases en paquetes y el estilo de escribir código, comentando. Puede ayudar mucho a comprender los modificadores de acceso, la organización del proyecto.
- al comprender algo específico, puede ayudar a los que saben menos. Vaya a cualquier foro e intente responder preguntas de interés para el tema. En la discusión, puedes tomar algo para ti. Puedes escribir un artículo corto. Por supuesto, es necesario entender bien el tema.
Cualquier trabajo destinado a mejorar las propias calificaciones será visible para un entrevistador competente y no se dejará sin atención. Lo único que necesita para hablar honestamente, no subestime sus capacidades y habilidades.
Para tener algún tipo de punto de referencia para capacitarse o desarrollarse como especialista, puede mirar algo similar a esto.

En realidad, las preguntas enumeradas anteriormente son del nivel de Desarrollador Junior, tal como lo imagino. En algún lugar, tal vez más profundamente, en algún lugar menos, pero como un hecho - Junior.

Cada solución crea nuevos problemas.

Esta sección está dedicada a las preguntas que se pueden hacer al pasar una entrevista para un puesto de programador Java.

El objetivo es recopilar no solo preguntas (hay muchas en Internet), sino también respuestas en un solo lugar.

Para la atribución, lea en la página principal de la sección Entrevista

  1. ¿Cuántas palabras clave están reservadas por el idioma, cuáles son estas palabras, cuáles no se usan?
  2. ¿De qué caracteres puede consistir un nombre de variable (identificador correcto)?
  3. ¿Qué significa la palabra "inicialización"?
  4. ¿Cuáles son los principales grupos de tipos de datos?
  5. ¿Qué tipos primitivos conoces?
  6. ¿Qué sabe sobre la conversión de tipos de datos primitivos? ¿Hay alguna pérdida de datos? ¿Es posible convertir tipos booleanos?
  7. ¿Qué valores son las variables inicializadas por defecto?
  8. ¿Cómo se pasa el valor de una variable (por referencia/valor)?
  9. ¿Qué sabes sobre la función principal, cuáles son los requisitos previos para su definición?
  10. ¿Qué operaciones lógicas y operadores conoces?
  11. ¿Cuál es la diferencia entre la notación de operadores lógicos cortos y largos?
  12. ¿Qué es una tabla de verdad?
  13. ¿Qué es un operador de selección ternario?
  14. ¿Qué operaciones aritméticas unarias y binarias conoces?
  15. ¿Qué operaciones bit a bit conoces?
  16. ¿Cuál es el rol y las reglas para escribir una declaración de selección (cambio)?
  17. ¿Qué ciclos conoces, cuáles son sus diferencias?
  18. ¿Qué es una "iteración de un bucle"?
  19. ¿Qué parámetros tiene el bucle for, se pueden omitir?
  20. ¿Qué declaración se usa para detener el ciclo inmediatamente?
  21. ¿Qué declaración se usa para pasar a la siguiente iteración del bucle?
  22. ¿Qué es una matriz?
  23. ¿Qué tipos de arreglos conoces?
  24. ¿Qué sabes acerca de las clases contenedoras?
  25. ¿Qué es el embalaje automático (boxing/unboxing)?

  1. Nombre los principios de OOP y describa cada uno.
  2. Defina el término "clase".
  3. ¿Qué es un campo/atributo de clase?
  4. ¿Cómo organizar adecuadamente el acceso a los campos de clase?
  5. Defina el término "constructor".
  6. ¿Cuál es la diferencia entre los constructores predeterminados, los constructores de copia y un constructor con parámetros?
  7. Que modificaciones del nivel de acceso conoces, cuéntanos sobre cada una de ellas.
  8. Cuéntenos sobre las características de una clase con un solo constructor privado.
  9. ¿Qué dicen las palabras clave “esto”, “super”, dónde y cómo se pueden usar?
  10. Defina el término "método".
  11. ¿Qué es una firma de método?
  12. ¿Qué métodos se llaman sobrecargados?
  13. ¿Pueden los métodos no estáticos sobrecargar los estáticos?
  14. Cuéntanos sobre los métodos de anulación.
  15. ¿Puede un método tomar un número diferente de parámetros (argumentos de longitud variable)?
  16. ¿Es posible reducir el nivel de acceso/tipo de devolución al anular un método?
  17. ¿Cómo acceder a los métodos anulados de la clase principal?
  18. ¿Qué son las transformaciones de arriba hacia abajo y de abajo hacia arriba?
  19. ¿Cuál es la diferencia entre anular y sobrecargar?
  20. ¿Dónde se pueden inicializar los campos estáticos/no estáticos?
  21. ¿Por qué se necesita el operador instanceof?
  22. ¿Por qué somos necesarios y qué son los bloques de inicialización?
  23. ¿Cuál es el orden de llamar a los constructores y bloques de inicialización de dos clases: un niño y su antepasado?
  24. ¿Dónde y para qué se usa el modificador abstracto?
  25. ¿Es posible declarar un método abstracto y estático al mismo tiempo?
  26. ¿Qué significa la palabra clave estática?
  27. ¿A qué construcciones de Java se aplica el modificador estático?
  28. ¿Qué sucede si ocurre una excepción en un bloque estático de código?
  29. ¿Es posible sobrecargar un método estático?
  30. ¿Qué es una clase estática, cuáles son las características de su uso?
  31. ¿Cuáles son las características de inicializar variables estáticas finales?
  32. ¿Cómo afecta el modificador estático a una clase/método/campo?
  33. ¿Qué significa la palabra clave final?
  34. Defina el término "interfaz".
  35. ¿Cuáles son los modificadores predeterminados para los campos y métodos de la interfaz?
  36. ¿Por qué un método de interfaz no puede declararse final o estático?
  37. ¿Qué tipos de clases hay en Java (anidadas, etc.)
  38. Cuáles son las características de crear clases anidadas: simples y estáticas.
  39. ¿Qué sabes sobre las clases anidadas, por qué se usan? Clasificación, casos de uso, violación de encapsulamiento.
  40. ¿Cuál es la diferencia entre clases anidadas e internas?
  41. ¿Qué clases se llaman anónimas?
  42. ¿Cómo acceder a un campo de una clase externa desde una clase anidada?
  43. ¿Cómo se puede acceder a la variable local de un método desde una clase anónima declarada en el cuerpo de este método? ¿Hay alguna restricción en tal variable?
  44. ¿Cómo se relaciona cualquier clase personalizada con la clase Object?
  45. Cuéntanos sobre cada uno de los métodos de la clase Object.
  46. ¿Qué es el método equals()? ¿En qué se diferencia de la operación ==?
  47. Si desea anular equals(), ¿qué condiciones deben cumplirse para el método anulado?
  48. Si se anula equals(), ¿hay algún otro método que deba anularse?
  49. ¿Cuál es la peculiaridad de los métodos hashCode y equals? ¿Cómo se implementan los métodos hashCode y equals en la clase Object? ¿Qué reglas y convenciones existen para la implementación de estos métodos? ¿Cuándo se aplican?
  50. ¿Qué método devuelve una representación de cadena de un objeto?
  51. ¿Qué sucede si anula equals sin anular hashCode? ¿Qué problemas pueden surgir?
  52. ¿Hay alguna guía sobre qué campos se deben usar al calcular el código hash?
  53. ¿Crees que habrá algún problema si el objeto que se usa como clave en el hashMap cambia el campo que participa en la definición de hashCode?
  54. ¿Cuál es la diferencia entre una clase abstracta y una interfaz, en qué casos la usarás?
  55. ¿Es posible acceder a variables de clase privada y, de ser así, cómo?
  56. ¿Qué es volátil y transitorio? ¿Para qué y en qué casos sería posible usar default?
  57. Expansión de modificadores al heredar, anular y ocultar métodos. Si una clase padre tiene un método privado, ¿puede el hijo ampliar su visibilidad? ¿Qué pasa si está protegido? ¿Y para reducir la visibilidad?
  58. ¿Tiene sentido declarar un método como privado final?
  59. ¿Cuáles son las características de la inicialización de la variable final?
  60. ¿Qué sucede si el único constructor de clase se declara final?
  61. ¿Qué es la finalización? ¿Por qué es necesario? ¿Qué puedes decir sobre el recolector de basura y sus algoritmos?
  62. ¿Por qué el método de clonación se declara como protegido? ¿Qué se necesita para implementar la clonación?
  63. ¿Conoces algún patrón de diseño?
  64. Escribe un Singleton... Pero con carga diferida. ¿Qué pasa si necesita ser seguro para subprocesos? ¿Cuándo es peor la carga diferida?
  65. ¿Qué puedes decir sobre MVC? Dibuja un diagrama y explica cómo funciona MVC.
  66. Escribe una función para calcular el factorial.
  67. Dada una función para calcular los números de Fibonacci, se sabe que funciona. Encuentra el error lógico. Estime la complejidad del algoritmo resultante.

  1. Definir "exclusión"
  2. ¿Cuál es la jerarquía de las excepciones?
  3. ¿Puedo/debo manejar los errores de jvm?
  4. ¿Cuáles son las formas de manejar las excepciones?
  5. ¿Qué significa la palabra clave throws?
  6. ¿Qué tiene de especial el bloque finalmente? ¿Se cumple siempre?
  7. ¿Puede no haber un bloque catch cuando se capturan excepciones?
  8. ¿Podría pensar en una situación en la que el bloque finalmente no se ejecutaría?
  9. ¿Puede un solo bloque catch capturar múltiples excepciones (de las mismas y diferentes ramas de herencia)?
  10. ¿Qué sabe acerca de las excepciones controladas y no controladas (marcadas/no marcadas)?
  11. ¿Qué tiene de especial RuntimeException?
  12. ¿Cómo escribir su propia excepción ("personalizada")? ¿Qué motivos te guiarán al elegir el tipo de excepción: marcada / no marcada?
  13. ¿Qué operador le permite forzar el lanzamiento de una excepción?
  14. ¿Existen condiciones adicionales para un método que podría generar una excepción?
  15. ¿Puede el método principal lanzar una excepción al exterior y, de ser así, dónde se manejará esta excepción?
  16. Si una declaración de devolución está contenida tanto en un bloque catch como en un bloque finalmente, ¿cuál es "más importante"?
  17. ¿Qué sabes sobre OutOfMemoryError?
  18. ¿Qué sabes sobre SQLException? ¿Qué tipo de marcado o no marcado es, por qué?
  19. ¿Qué es un error? En cuyo caso se utiliza Error. Da un ejemplo de Error.
  20. ¿Qué construcción se usa en Java para el manejo de excepciones?
  21. Supongamos que hay un bloque try-finally. Se lanzó una excepción en el bloque de prueba y la ejecución se movió al bloque de finalización. El bloque finalmente también lanzó una excepción. ¿Cuál de las dos excepciones "lanzará" del bloque try-finally? ¿Qué sucede con la segunda excepción?
  22. Supongamos que hay un método que puede lanzar IOException y FileNotFoundException, ¿en qué orden deberían ir los bloques catch? ¿Cuántos bloques catch se ejecutarán?

  1. Defina el término "colección".
  2. Enumere los beneficios de usar colecciones.
  3. ¿Qué tipo de datos pueden almacenar las colecciones?
  4. ¿Qué es la jerarquía de la colección?
  5. ¿Qué sabes sobre las colecciones de listas?
  6. ¿Qué sabes de las colecciones Set?
  7. ¿Qué sabes sobre las colecciones de Queue?
  8. ¿Qué sabes sobre las colecciones de mapas, cuál es su diferencia fundamental?
  9. Nombre las implementaciones principales de List, Set, Map.
  10. ¿Qué implementaciones de SortedSet conoces y cuáles son sus características?
  11. ¿Cuáles son las diferencias/similitudes entre List y Set?
  12. ¿Cuál es la diferencia/común entre las clases ArrayList y LinkedList? ¿Cuándo es mejor usar ArrayList y cuándo es mejor usar LinkedList?
  13. ¿Cuándo es razonable usar una matriz en lugar de una ArrayList?
  14. ¿En qué se diferencia ArrayList de Vector?
  15. ¿Qué sabes sobre la implementación de las clases HashSet y TreeSet?
  16. ¿Cuál es la diferencia entre HashMap y TreeMap? ¿Cómo se configuran y cómo funcionan? ¿Qué pasa con el tiempo de acceso a los objetos, qué dependencias?
  17. ¿Qué es Hashtable, en qué se diferencia de HashMap? Hasta la fecha, ha quedado obsoleto, ¿cómo se sigue utilizando la funcionalidad deseada?
  18. ¿Qué pasa si ponemos dos valores en un Map con la misma clave?
  19. ¿Cómo es el orden de los objetos en el conjunto de la colección, cómo ordenar la colección?
  20. Defina el término "iterador".
  21. ¿Qué funcionalidad proporciona la clase Collections?
  22. ¿Cómo obtener una colección no modificable?
  23. ¿Qué colecciones se sincronizan?
  24. ¿Cómo obtener una colección sincronizada de una no sincronizada?
  25. ¿Cómo obtener una colección de solo lectura?
  26. ¿Por qué Map no hereda de Collection?
  27. ¿Cuál es la diferencia entre iterador y enumeración?
  28. ¿Cómo se implementa el bucle foreach?
  29. ¿Por qué no hay un método iterator.add() para agregar elementos a una colección?
  30. ¿Por qué la clase de iterador no tiene un método para obtener el siguiente elemento sin mover el cursor?
  31. ¿Cuál es la diferencia entre Iterator y ListIterator?
  32. ¿Cuáles son las formas de iterar a través de todos los elementos de una lista?
  33. ¿Cuál es la diferencia entre las propiedades a prueba de fallas y a prueba de fallas?
  34. ¿Qué debo hacer para evitar lanzar una ConcurrentModificationException?
  35. ¿Qué es una pila y una cola, cuéntanos cuáles son sus diferencias?
  36. ¿Cuál es la diferencia entre las interfaces Comparable y Comparator?
  37. ¿Por qué las colecciones no heredan las interfaces Cloneable y Serializable?

  1. ¿Qué clases de "cadenas" conoces?
  2. ¿Cuáles son las principales propiedades de las clases de "cadena" (sus características)?
  3. ¿Es posible heredar el tipo de cadena, por qué?
  4. Defina el término concatenación de cadenas.
  5. ¿Cómo convertir cadena a número?
  6. ¿Cómo comparar el valor de dos cadenas?
  7. ¿Cómo invertir una cadena?
  8. ¿Cómo funciona la comparación de dos cadenas?
  9. ¿Cómo recortar espacios al final de una cadena?
  10. ¿Cómo reemplazar un carácter en una cadena?
  11. ¿Cómo obtener parte de una cadena?
  12. Defina el término "grupo de cadenas".
  13. ¿Qué método le permite seleccionar una subcadena en una cadena?
  14. ¿Cómo dividir una cadena en subcadenas por un delimitador dado?
  15. ¿Qué método se llama para convertir una variable en una cadena?
  16. ¿Cómo averiguar el valor de un carácter particular de una cadena, sabiendo su número ordinal en la cadena?
  17. ¿Cómo encontrar el carácter requerido en una cadena?
  18. ¿Es posible sincronizar el acceso a filas?
  19. ¿Qué hace el método interno()?
  20. ¿En qué se diferencian las clases String, StringBuffer y StringBuilder y qué tienen en común?
  21. ¿Cuál es la forma correcta de comparar valores de cadena de dos objetos diferentes de tipo String y StringBuffer?
  22. ¿Por qué la cadena es inmutable y finalizada en Java?
  23. ¿Por qué es preferible una matriz de caracteres a una cadena para el almacenamiento de contraseñas?
  24. ¿Por qué una cadena es una clave popular en un HashMap en Java?
  25. Escriba un método para eliminar un carácter dado de una cadena.

  1. ¿Cuáles son los tipos de flujos de E/S?
  2. Nombre los antepasados ​​principales de los flujos de E/S.
  3. ¿Cuáles son las similitudes y diferencias entre los siguientes flujos: InputStream, OutputStream, Reader, Writer?
  4. ¿Qué sabes sobre RandomAccessFile?
  5. ¿Cuáles son los modos de acceso a archivos?
  6. ¿En qué paquetes están las clases de flujo?
  7. ¿Qué sabes sobre las clases de superestructura?
  8. ¿Qué clase adicional le permite leer datos del flujo de bytes de entrada en el formato de tipos de datos primitivos?
  9. ¿Qué clase adicional le permite acelerar la lectura/escritura mediante el uso de un búfer?
  10. ¿Qué clases le permiten convertir secuencias de bytes en secuencias de caracteres y viceversa?
  11. ¿Qué clase está diseñada para trabajar con elementos del sistema de archivos (EFS)?
  12. ¿Qué carácter es el separador al especificar la ruta al EFS?
  13. ¿Cómo seleccionar todos los EFS de un determinado directorio por un criterio (por ejemplo, con una determinada extensión)?
  14. ¿Qué sabes sobre la interfaz FilenameFilter?
  15. ¿Qué es la serialización?
  16. ¿Cuáles son las condiciones para una serialización “segura” de un objeto?
  17. ¿Qué clases le permiten archivar objetos?

  1. Defina el término "proceso".
  2. Defina el término "flujo".
  3. Defina el término "sincronización de subprocesos".
  4. ¿Cómo interactúan los programas, procesos y subprocesos?
  5. ¿Cuándo es recomendable crear múltiples hilos?
  6. ¿Qué puede pasar si dos hilos ejecutan el mismo código en un programa?
  7. ¿Qué sabes del hilo principal del programa?
  8. ¿Cuáles son las formas de crear y ejecutar subprocesos?
  9. ¿Qué método inicia un hilo para su ejecución?
  10. ¿Qué método describe la acción de un hilo durante la ejecución?
  11. ¿Cuándo completa un hilo su ejecución?
  12. ¿Cómo sincronizar el método?
  13. ¿Cómo forzar la detención de un hilo?
  14. Defina el término "hilo daemon".
  15. ¿Cómo crear un hilo demonio?
  16. ¿Cómo obtener el hilo actual?
  17. Defina el término "monitor".
  18. ¿Cómo pausar la ejecución de un hilo?
  19. ¿En qué estados puede estar una corriente?
  20. ¿Qué es el monitor cuando se llama al método estático y no estático?
  21. ¿Qué es el monitor al ejecutar una sección de código de método?
  22. ¿Qué métodos le permiten sincronizar la ejecución de hilos?
  23. ¿Qué método pone un subproceso en modo inactivo?
  24. ¿Cuál es la funcionalidad de los métodos de notificación y notificación a todos?
  25. ¿Qué hace el método de unión?
  26. ¿Cuáles son las condiciones para llamar al método de espera/notificación?
  27. Defina el término "bloqueo mutuo".
  28. ¿Cuál es la diferencia entre los métodos de interrupción, interrumpido e isInterrupted?
  29. ¿En qué caso se lanzará una InterruptedException, qué métodos pueden lanzarla?
  30. modificadores volátiles y el método yield().
  31. Paquete java.util.concurrent
  32. Hay algún método que realiza la operación i++. Variable i de tipo int. Se supone que el código se ejecutará en un entorno de subprocesos múltiples. ¿Se debe sincronizar el bloque?
  33. ¿Qué se usa como mutex si el método se declara estático sincronizado? ¿Es posible crear nuevas instancias de una clase mientras se ejecuta un método sincronizado estático?
  34. Supongamos que se produjo una RuntimeException en el método de ejecución que no se detectó. ¿Qué pasará con la corriente? ¿Hay alguna forma de saber que se ha producido una excepción (sin envolver todo el cuerpo de la ejecución en un bloque de prueba y captura)? ¿Hay alguna manera de recuperar el hilo después de que esto haya sucedido?
  35. ¿Qué herramientas estándar de Java usaría para implementar un grupo de subprocesos?
  36. ¿Qué es un ThreadGroup y por qué es necesario?
  37. ¿Qué es un ThreadPool y por qué es necesario?
  38. ¿Qué es un ThreadPoolExecutor y por qué es necesario?
  39. ¿Qué son los "tipos atómicos" en Java?
  40. ¿Por qué se necesita la clase ThreadLocal?
  41. ¿Qué es un Ejecutor?
  42. ¿Qué es ExecutorService?
  43. ¿Por qué se necesita ScheduledExecutorService?
Esta lista de más de 300 preguntas (sin respuestas) se encontró en http://becomejavasenior.com/. Otros autores se enumeran allí.

58489 Vistas totales 15 Vistas hoy

Vistas: 38 283

  • ¿Qué es la programación orientada a objetos?
  • ¿Qué es un objeto?
  • Mencione los principios básicos de la programación orientada a objetos.
  • ¿Qué es la herencia?
  • ¿Qué es el polimorfismo? ¿Qué manifestaciones del polimorfismo en Java conoces?
  • ¿Qué es la encapsulación?
  • ¿Qué es la abstracción?
  • ¿Cuáles son las ventajas de los lenguajes de programación orientados a objetos?
  • ¿Cómo mejora el desarrollo de software el uso de un enfoque orientado a objetos?
  • Hay una expresión "es" y "tiene". ¿Qué significan en términos de principios de programación orientada a objetos? ¿Cuál es la diferencia entre composición y agregación?
  • ¿Qué quiere decir con polimorfismo, encapsulación y enlace dinámico?

núcleo java.

  • ¿Cuál es la diferencia entre JRE, JVM y JDK?
  • Describir los modificadores de acceso en Java.
  • ¿Qué es el acceso a nivel de paquete?
  • ¿En qué se diferencia una clase abstracta de una interfaz? ¿Cuándo usarías una clase abstracta y cuándo usarías una interfaz?
  • ¿Puede un objeto acceder a una variable de clase privada? ¿Si es así, cómo?
  • ¿Para qué sirven los bloques estáticos en Java?
  • ¿Es posible sobrecargar un método estático?
  • Háblanos de las clases internas. ¿Cuándo los usarás?
  • ¿Cuál es la diferencia entre variable de instancia y variable estática? Dar un ejemplo.
  • Dé un ejemplo cuando pueda usar un método estático.
  • Cuéntenos sobre las clases de cargador y la carga dinámica de clases.
  • ¿Cuál es el propósito del operador "afirmar" en Java?
  • ¿Por qué algunas interfaces no definen métodos en absoluto?
  • ¿Cuál es la principal diferencia entre String, StringBuffer, StringBuilder?
  • Cuéntame sobre los flujos de E/S de Java.
  • ¿Qué es la memoria Heap and Stack en Java?
  • ¿Cuál es la diferencia entre la memoria Stack y Heap en Java?
  • ¿Cuéntanos sobre el modelo de memoria en Java?
  • ¿Cómo funciona el recolector de basura?
  • Cuéntanos sobre la fundición de tipos. ¿Qué es la degradación y la promoción? ¿Cuándo obtienes una ClassCastException?
  • ¿Qué es una clase estática, cuáles son las características de su uso?
  • Cómo acceder a un campo de la clase externa desde una clase anidada.
  • ¿Qué tipos de clases anidadas hay? ¿Para qué se usan?
  • ¿Es posible cambiar al anular un método?
  • Modificador de acceso
  • tipo de retorno
  • Tipo o número de argumento
  • Nombre del argumento
  • ¿Cambiar el orden, la cantidad o eliminar la sección de lanzamientos por completo?
  • ¿Qué es el autoboxeo?
  • ¿Qué son los genéricos?
  • ¿Cuál es el verdadero propósito de usar tipos genéricos en Java?
  • ¿Cómo se pasan las variables a los métodos, por valor o por referencia?
  • ¿Qué métodos tiene la clase Object?
  • Reglas para anular el método Object.equals().
  • Si desea anular equals(), ¿qué condiciones deben cumplirse para el método anulado?
  • ¿Cuál es la relación entre hashCode y equals?
  • ¿Cómo se implementan los métodos hashCode y equals en la clase Object?
  • ¿Qué sucede si anula equals sin anular hashCode? ¿Qué problemas pueden surgir?
  • ¿Hay alguna guía sobre qué campos se deben usar al calcular el código hash?
  • ¿Para qué sirve el método hashCode()?
  • Reglas para anular el método Object.hashCode().
  • Cuéntanos sobre la clonación de objetos. ¿Cuál es la diferencia entre la clonación superficial y profunda?
  • Reglas para anular el método Object.clone().
  • ¿Dónde y cómo puedes usar un constructor privado?
  • ¿Qué es un constructor predeterminado?
  • Describa el método Object.finalize().
  • ¿Cuál es la diferencia entre las palabras final, finalmente y finalizar?
  • Describir la jerarquía de las excepciones.
  • ¿Qué tipos de excepciones en Java conoces, en qué se diferencian?
  • ¿Qué es una excepción marcada y no marcada?
  • ¿Cómo crear su propia excepción sin marcar?
  • ¿Qué son las excepciones Unchecke?
  • ¿Qué es un error?
  • Describe cómo funciona el bloque try-catch-finally.
  • ¿Es posible usar un bloque try-finally (sin catch)?
  • ¿El bloque finalmente se ejecuta siempre?
  • ¿Cuáles son las características de la clase String? ¿Qué hace el método interno ()?
  • ¿Es posible heredar el tipo de cadena, por qué?
  • ¿Por qué una cadena es una clave popular en un HashMap en Java?
  • Defina el término concatenación de cadenas.
  • ¿Cómo invertir una cadena?
  • ¿Cómo comparar el valor de dos cadenas?
  • ¿Cómo recortar espacios al principio y al final de una cadena?
  • Defina el término "grupo de cadenas".
  • ¿Es posible sincronizar el acceso a filas?
  • ¿Cuál es la forma correcta de comparar valores de cadena de dos objetos diferentes de tipo String y StringBuffer?
  • ¿Por qué la cadena es inmutable y finalizada en Java?
  • Escriba un método para eliminar un carácter dado de una cadena.
  • ¿Qué es la reflexión?
  • ¿Qué sucede con el recolector de basura (GC) si ocurre una excepción durante la ejecución del método finalize() de algún objeto?
  • ¿Qué es la internacionalización, la localización?
  • ¿Qué son las anotaciones en Java?
  • ¿Qué funciones realiza Anotación?
  • ¿Qué anotaciones integradas en Java conoces?
  • ¿Qué hacen las anotaciones @Retention, @Documented, @Target y @Inherited?
  • ¿Qué hacen las anotaciones @Override, @Deprecated, @SafeVarargs y @SuppressWarnings?
  • ¿Qué ciclo de vida de anotación se puede especificar con @Retention?
  • ¿Qué elementos se pueden anotar, cómo especificarlo?
  • ¿Cómo crear tu Anotación?
  • ¿Qué tipos de atributos se permiten en las anotaciones?
  • ¿Qué es JMX?
  • ¿Qué beneficios ofrece JMX?
  • ¿Qué más puede hacer JMX además del control remoto?
  • ¿Qué es MBean?
  • ¿Qué tipos de MBeans hay?
  • ¿Qué es el servidor MBean?
  • ¿Qué mecanismos proporcionan seguridad en la tecnología Java?
  • ¿Cuáles son algunas de las comprobaciones que realiza el verificador de bytecode de Java?
  • ¿Qué sabes sobre el "administrador de protección" en Java?
  • ¿Qué es JAS?
  • ¿Qué es la refactorización?

Marco de colecciones de Java.

  • ¿Qué es una colección?
  • Nombre las principales interfaces de las colecciones y su implementación.
  • ¿En qué se diferencia ArrayList de LinkedList? ¿En qué casos es mejor usar la primera y en cuáles la segunda?
  • ¿Cuál es la diferencia entre HashMap y Hashtable?
  • ¿En qué se diferencia ArrayList de Vector?
  • ¿Cómo se comparan los elementos de la colección?
  • Organice las siguientes interfaces en una jerarquía: List, Set, Map, SortedSet, SortedMap, Collection, Iterable, Iterator, NavigableSet, NavigableMap.
  • ¿Por qué el mapa no es una colección mientras que la lista y el conjunto son una colección?
  • Defina el término "iterador".
  • ¿Qué sabes sobre la interfaz iterable?
  • ¿Cómo convertir HashSet a ArrayList en una línea?
  • ¿Cómo convertir ArrayList a HashSet en una línea?
  • ¿Cómo iterar sobre todas las claves de Map dado que Map no es Iterable?
  • ¿Cómo iterar sobre todos los valores de Map dado que Map no es iterable?
  • ¿Cómo iterar sobre todos los pares clave-valor en Map dado que Map no es iterable?
  • ¿Qué es la "clasificación" de SortedMap, además del hecho de que toString() imprime todo en orden?
  • ¿Cómo copiar elementos de cualquier colección a una matriz en una sola llamada?
  • Implemente una diferencia simétrica de dos colecciones usando los métodos de colección (addAll(), removeAll(), retainAll()).
  • Comparar Enumeración e Iterador.
  • ¿Cómo se relacionan Iterable e Iterator?
  • ¿Cuál es la relación entre Iterable, Iterator y "for-each" introducido en Java 5?
  • Compara Iterator y ListIterator.
  • ¿Qué sucede si llamo a Iterator.next() sin "preguntar" a Iterator.hasNext()?
  • ¿Qué sucede si llamo a Iterator.next() antes de llamar a Iterator.hasNext() 10 veces? ¿Me faltan 9 artículos?
  • Si tengo una colección y un iterador secundario, ¿cambiará la colección si llamo a iterator.remove()?
  • Si tengo una colección y un iterador hijo, ¿cambiará el iterador si llamo a collection.remove(..)?
  • ¿Por qué agregaron ArrayList si ya había un Vector?
  • La implementación de la clase ArrayList tiene los siguientes campos: Objeto elementData, int size. Explique por qué necesita almacenar el tamaño por separado cuando siempre puede tomar elementData.length.
  • ¿LinkedList es una lista de enlaces simples, enlaces dobles o enlaces cuádruples?
  • ¿Cuál es el peor momento para el método container() para un elemento que está en una LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • ¿Cuál es el peor momento para el método container() para un elemento que está en una ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O( N*N) )?
  • ¿Cuál es el peor momento para el método Add() de LinkedList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • ¿Cuál es el peor momento para un método add() de ArrayList (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N))?
  • ¿Cuántos elementos se asignan en la memoria cuando se llama a ArrayList.add()?
  • ¿Cuántos elementos se asignan en la memoria cuando se llama a LinkedList.add()?
  • ¿Estime la cantidad de memoria para almacenar una primitiva de tipo byte en LinkedList?
  • ¿Estime la cantidad de memoria para almacenar una primitiva de tipo byte en ArrayList?
  • Agrego un elemento al medio de la Lista: list.add(list.size()/2, newElem). ¿Para quién es más lenta esta operación, para ArrayList o para LinkedList?
  • ¿Cómo iterar los elementos de LinkedList en orden inverso sin usar la obtención lenta (índice)?
  • ¿Cómo obtener una Lista con todos los elementos excepto el primero y el último 3 con una llamada de la Lista?
  • ¿Pueden diferentes objetos en la memoria (ref0 != ref1) tener ref0.hashCode() == ref1.hashCode()?
  • ¿Pueden diferentes objetos en la memoria (ref0 != ref1) tener ref0.equals(ref1) == true?
  • ¿Pueden diferentes referencias al mismo objeto en memoria (ref0 == ref1) tener ref0.equals(ref1) == false?
  • Hay una clase Point(int x, y;). ¿Por qué un código hash de la forma 31 * x + y es preferible a x + y?
  • Si la clase Point(int x, y;) es "correcta" para implementar el método equals (devuelve ref0.x == ref1.x && ref0.y == ref1.y), pero crea el código hash como int hashCode( ) (return x;), ¿se colocarán dichos puntos correctamente y se recuperarán del HashSet?
  • equals() genera una relación de equivalencia. ¿Cuál de las propiedades tiene tal relación: conmutatividad, simetría, reflexividad, distributividad, asociatividad, transitividad?
  • ¿Es posible implementar equals(Object that) (return this.hashCode() == that.hashCode()) así?
  • equals requiere verificar que el argumento (equals(Object that)) sea del mismo tipo que el objeto mismo. ¿Cuál es la diferencia entre this.getClass() == that.getClass() y esa instancia de MyClass?
  • ¿Es posible implementar el método equals de la clase MyClass de esta manera: class MyClass (public boolean equals(MyClass that) (return this == that;))?
  • ¿Funcionará HashMap si todas las claves devuelven int hashCode() (devuelve 42;)?
  • ¿Por qué agregaron HashMap si ya había un Hashtable?
  • Según Knuth y Kormen, hay dos implementaciones principales de la tabla hash: basada en direccionamiento abierto y basada en el método de encadenamiento. ¿Cómo se implementa HashMap? ¿Por qué hicieron eso (en tu opinión)? ¿Cuáles son los pros y los contras de cada enfoque?
  • ¿Cuántos clics de enlace ocurren cuando haces HashMap.get (clave) en una clave que está en la tabla?
  • ¿Cuántos objetos nuevos se crean cuando agrega un elemento nuevo a un HashMap?
  • ¿Cómo funciona un HashMap cuando intenta almacenar dos elementos en él mediante claves con el mismo hashCode, pero para lo cual es igual a == falso?
  • HashMap puede degenerar en una lista incluso para claves con diferentes hashCode. ¿Cómo es esto posible?
  • ¿Cuál es el peor momento para un método get(key) para una clave que no está en la tabla (O(1), O(log(N)), O(N), O(N*log(N)), O(N*N ))?
  • ¿Cuál es el peor momento para un método get(key) para una clave que está en una tabla (O(1), O(log(N)), O(N), O(N*log(N)), O (N*N))?
  • Explique el significado de los parámetros en el constructor HashMap(int initialCapacity, float loadFactor).
  • ¿Cuál es la diferencia entre HashMap e IdentityHashMap? ¿Para qué sirve IdentityHashMap? ¿Cómo puede ser útil implementar la serialización o la clonación?
  • ¿Cuál es la diferencia entre HashMap y WeakHashMap? ¿Para qué sirve WeakHashMap?
  • WeakHashMap usa WeakReferences. ¿Por qué no crear un SoftHashMap en SoftReferences?
  • WeakHashMap usa WeakReferences. ¿Por qué no crear un PhantomHashMap en PhantomReferences?
  • Cree un HashSet a partir de un HashMap (solo use claves múltiples, no valores múltiples).
  • Hacer HashMap de HashSet (HashSet >).
  • Compare las interfaces java.util.Queue y java.util.Deque.
  • ¿Quién extiende a quién: Queue extiende a Deque o Deque extiende a Queue?
  • ¿Por qué LinkedList implementa List y Deque?
  • ¿Cuál es la diferencia entre las clases java.util.Arrays y java.lang.reflect.Array?
  • ¿Cuál es la diferencia entre las clases java.util.Collection y java.util.Collections?
  • Escriba un programa sin subprocesos que haga que una colección arroje una ConcurrentModificationException.
  • ¿Qué es el "comportamiento de fallo rápido"?
  • ¿Existe una clase especial java.util.EnumSet para conjuntos de enumeraciones? ¿Para qué? ¿Por qué a los autores no les gustó HashSet o TreeSet?
  • java.util.Stack: se considera "obsoleto". ¿Qué se recomienda para reemplazarlo? ¿Por qué?
  • ¿Qué colección implementa la disciplina de servicio FIFO?
  • ¿Qué colección implementa la disciplina de servicio FILO?
  • Proporcione un ejemplo cuando una colección lanza una UnsupportedOperationException.
  • ¿Por qué no puedes escribir "ArrayList números = nueva lista de matrices ();" pero puede "Lista números = nueva lista de matrices ();"?
  • LinkedHashMap: ¿qué es esta "bestia"? ¿Qué hay de LinkedList y qué hay de HashMap?
  • LinkedHashSet: ¿qué es esta "bestia"? ¿Qué hay de LinkedList y qué hay de HashSet?
  • Dicen que es fácil hacer un caché simple con "política de invalidación" en LinkedHashMap, ¿sabes cómo?
  • ¿Qué te permite hacer PriorityQueue?
  • ¿Cuáles son las diferencias entre java.util.Comparator y java.lang.Comparable?

Java 8.

  • ¿Qué es un enlace simbólico?
  • ¿Cuál es la diferencia entre E/S y NIO?
  • ¿Qué funciones de NIO conoces?
  • ¿Cuáles son los tipos de flujos de E/S?
  • Nombre las principales clases de flujos de entrada/salida.
  • ¿En qué se diferencian OutputStream, InputStream, Writer, Reader y qué tienen en común?
  • ¿Qué subclases de la clase base InputStream sabes para qué sirven?
  • ¿Qué sabes sobre RandomAccessFile?
  • ¿Qué modos de acceso a archivos tiene RandomAccessFile?
  • ¿Cuáles son las subclases de la clase base OutputStream y sabe para qué sirven?
  • ¿Para qué se utiliza PushbackInputStream?
  • ¿Para qué se utiliza SequenceInputStream?
  • ¿Qué subclases de la clase base Reader sabes para qué sirven?
  • ¿Qué subclases de la clase base Writer sabes para qué sirven?
  • ¿Qué es la ruta absoluta y la ruta relativa?
  • ¿En qué paquetes están las clases de flujo?
  • ¿Qué sabes sobre las clases de superestructura?
  • ¿Qué clase adicional le permite leer datos del flujo de bytes de entrada en el formato de tipos de datos primitivos?
  • ¿Qué clase adicional le permite acelerar la lectura/escritura mediante el uso de un búfer?
  • ¿Qué clases le permiten convertir secuencias de bytes en secuencias de caracteres y viceversa?
  • ¿Cuál es la diferencia entre la clase PrintWriter y la clase PrintStream?
  • ¿Qué clase está diseñada para trabajar con elementos del sistema de archivos?
  • ¿Qué carácter es el delimitador al especificar una ruta en el sistema de archivos?
  • ¿Qué métodos de la clase File conoces?
  • ¿Qué sabes sobre la interfaz FileFilter?
  • ¿Qué clases le permiten archivar objetos?

  • ¿En qué objeto ocurre la sincronización cuando se llama a un método sincronizado estático?
  • ¿Para qué se utiliza la palabra clave volátil, sincronizada, transitoria y nativa?
  • ¿Qué significa prioridad de subprocesos?
  • ¿Qué son los hilos daemon en Java?
  • ¿Qué significa calmar la corriente?
  • ¿En qué estados puede estar un hilo en java? ¿Cómo funciona realmente una transmisión?
  • ¿Cuál es la diferencia entre las dos interfaces para implementar tareas Runnable y Callable?
  • ¿Diferencias entre CyclicBarrier y CountDownLatch?
  • ¿Qué es una condición de carrera?
  • ¿Cómo detener un hilo?
  • ¿Qué sucede cuando ocurre una excepción en un hilo?
  • ¿Qué es una variable ThreadLocal?
  • ¿Qué es FutureTask?
  • ¿Diferencia entre interrumpido e isInterrupted?
  • ¿Por qué se llama a los métodos de espera y notificación en un bloque sincronizado?
  • ¿Qué es un grupo de subprocesos?
  • ¿Diferencias entre livelock y deadlock?
  • ¿Cómo verificar si un hilo tiene un bloqueo?
  • ¿Cómo obtener un volcado de hilo?
  • ¿Qué configuración de JVM se usa para controlar el tamaño de la pila de un subproceso?
  • ¿Diferencias entre sincronizado y ReentrantLock?
  • ¿Qué es un semáforo?
  • ¿Qué sucede si la cola del grupo de subprocesos ya está llena y envía una tarea?
  • ¿Diferencias entre los métodos de envío () y ejecución () de un grupo de subprocesos?
  • ¿Qué es un método de bloqueo?
  • ¿Qué es ReadWriteLock?
  • ¿Qué es el bloqueo doble comprobado de Singleton?
  • ¿Qué es el marco Fork/Join?
  • La Fuerza es un río del que muchos pueden beber, y el entrenamiento Jedi no es la única forma de aprovecharlo". -Luke Skywalker Todas las colecciones de libros quedaron atrás. Cuál de ellos leer, qué no, depende de usted. Ahora solo te queda un objetivo: conseguir un trabajo y construir una carrera sin pisar un rastrillo. El último artículo se divide en secciones: - Antes del trabajo - Entrevista - Durante el trabajo Hay mucho de mi opinión personal en esta parte, así que no saque las frases de contexto y trátelas como una conversación franca con un viejo amigo :).

    Antes del trabajo

    A continuación se encuentran los diez clichés más populares que surgen cuando el alma se siente atraída por la programación, pero ciertas circunstancias interfieren con la persona. Mi tarea es tratar de detener su suspicacia y prepararlo para una forma positiva de pensar. Si estás leyendo este artículo, ¡estás más lejos de lo que crees! Mentalmente, ya está donde debe estar, y si ya ha leído algunos libros, ya ha recorrido la mitad del camino. Por lo tanto, deja de dudar: esta es la suerte de los débiles. ¡Solo adelante! ¿Ya mejor? ¡Entonces vamos! "No tengo educación" Cuando entré en la academia de una de las grandes empresas de subcontratación, los entrevistadores me insinuaron amablemente que no estaban interesados ​​en el diploma en absoluto, por lo que las preguntas eran específicas: programación orientada a objetos y Java básico. Por supuesto, encontrará vacantes donde la disponibilidad de los mismos. la educación será un requisito claro. Solo quiero decir que su ausencia no es un obstáculo en estos días. Muchas oficinas extranjeras solicitan BS / MS Computer Science o, atención, experiencia relevante. ¿No es convincente? Tal vez se sienta alentado por el hecho de que no tengo una educación técnica;), pero esto no me impidió en absoluto adquirir experiencia en grandes empresas. Pregúntame ahora, ¿qué haría si pudiera rebobinar la cinta? Por supuesto, iría a KPI/NAU, pero no me apenaría demasiado si no entro. Deja de enloquecer por esto. El tiempo pasará, puedes obtener una costra a los 40 si quieres, pero por ahora, concéntrate en convertirte en un desarrollador junior aquí y ahora. "Habrá gente más inteligente que yo" Siempre habrá personas más inteligentes, más inteligentes, más flexibles, más talentosas que tú, y cualquier trabajo no es una excepción. Este hecho absolutamente no le da derecho a desviarse de la meta. Tal vez en algún lugar del otro lado del mundo haya un niño de Japón que multiplica y divide números más rápido que tú, y una abuela de la República Checa escribe en el teclado de un teléfono móvil más rápido que cualquier adolescente. Pero no piensas en eso, ¿verdad? Entonces, ¿por qué debería preocuparse por las personas con las que trabajará cuando se establezca? De alguna manera, tus futuros colegas te superarán, de alguna manera te perderán. ¡Esto esta bien! Tachar. "No creo que pueda" Bueno, antes que nada, nadie dijo que sería fácil, pero esto no significa en absoluto que tu objetivo no sea factible. Nada le impide simplemente intentarlo, incluso si actualmente trabaja como contador o asistente de ventas. Ven después de un día de trabajo y siéntate a estudiar. Si después de un tiempo ve algún progreso, es una señal de que se está moviendo en la dirección correcta. ¡No pares! Si estás aunque sea un poco interesado en esto y te lo dan, entonces no conozco un solo punto que pueda convencerme de que no eres digno de ello. "Soy perezoso" La pereza es sólo una falta de motivación. Si nota que la mayor parte de su tiempo libre, en lugar de estudiar y no pelear por el curso, está estúpidamente haciendo basura, me apresuro a notificarle que, muy probablemente, el trabajo de un programador no es suyo. Al menos no ahora. Algunos llaman a la pereza un pecado, una enfermedad, el cólera de la edad moderna junto con la obesidad. Deje este negocio a los histéricos de carrera. En mi opinión, todo alrededor en esta vida está saturado con la ilusión de la lucha y la competencia: quién es más alto, quién es más fuerte, quién es más rico. Quién tiene un auto más genial, quién tiene un salario más alto en el equipo, quién presiona la barra con más fuerza en el gimnasio, cuál de las chicas se casó antes y tuvo hijos: esto te enferma, como la comida rápida maloliente. La gente dejó de vivir y disfrutar la vida, persiguiendo sus sueños, cambiando su zona de confort por una elección entre Pepsi y Coca-Cola. Para mí, la pereza es buena, es simplemente maravillosa. Esta es una función protectora ordinaria de su cuerpo para ahorrar tiempo y energía en cosas que son inútiles para él. Una persona fue creada para ser libre, así que si eres perezoso, deja de intentar levantar el trasero del sofá, tal vez ahora esté en su lugar :). "Voy allí por el dinero" Si reunimos a los desarrolladores y decimos: de ahora en adelante, su salario será de 3-4k hryvnias para cualquier nivel, y los probadores seguirán recibiendo las mismas tarifas, entonces la pregunta será diferente: no cuántos serán bombardeados, sino cuántos. Los programadores después de esta noticia seguirán siendo solo programadores. Mucha gente ingresa a TI debido a la masa. Salario traducido de dólares, quesos y una DSLR cara. No importaba cuánto trabajara con la gente, las conversaciones sobre esto siempre se me escapaban. No digo que esto sea malo, solo quiero que no trates de persuadirte a ti mismo de que te estás alejando de objetivos puramente espirituales para cambiar el mundo para mejor. Antes de conseguir un trabajo como junior, sabía cuáles eran los salarios de los seniors, los líderes técnicos, e incluso los medios, y estos pensamientos solo me inspiraron: en mi época, antes de trabajar como programador, solo podía soñar con tales cifras. Llama a estas cosas por su nombre propio y deja de avergonzarte de ello. "No creo que sea mío"¿De quién entonces? Ya sabes, es fácil de comprobar. Abra el primer volumen de Hortsmann y comience a leer, escribiendo el código de los ejemplos. Si no estás aburrido y no estás marcando tiempo en el mismo capítulo para la segunda semana, deja tus dudas. El estudio de las especialidades técnicas es una cosa consistente. No puede ir a B sin conocer A, pero siempre tendrá la oportunidad de retroceder un capítulo y fortalecer la base. Avanzar. "Hay muchos como yo" Siempre hay competencia por un lugar. No discuto, por ejemplo, ahora esta cifra es de 300-400 probadores sin experiencia, o incluso más para un lugar. Sí, esta es una amarga verdad, pero, por otro lado, incluso con tales indicadores, no puedo encontrar un elemento suficientemente serio. ¡Sí, al menos 100500 en su lugar! Siempre tienes la oportunidad de ganar experiencia en tus proyectos: crea algún tipo de servicio, un programa de escritorio, usa todo el stack que conoces, y ya estás dando saltos, y el resto, aparte de enviar tu currículum, no haces nada. demás. “Nadie responde a mi currículum” En continuación del párrafo anterior. Lo más probable es que para los futuros especialistas en TI sin experiencia, poder escribir un hermoso currículum sea bueno, pero cuando hay muchas personas para una vacante, muchos currículums son muy similares entre sí: por supuesto, puede enviar una foto con un escote (si es una niña) o escribe muchas tecnologías , que usted mismo conoce solo de Wikipedia. En ambos casos, a RR.HH. simplemente no le importará: si debe haber una persona en la vacante del proyecto que, por ejemplo, conozca AWS, entonces buscará AWS en el currículum. Tener en cuenta otro punto importante, como las recomendaciones de los compañeros. Este es el dolor de cualquier persona que no tenga tales conocidos, porque la mayor parte de los jóvenes se toma de allí (si la persona, por recomendación, no es un idiota, por supuesto). Usualmente, enfatizo, una persona activa adecuada que está lista para aprender, e incluso para comer, es tomada para el puesto de junior. Y si tal candidato falla, es más probable que usted sea el próximo. Bueno, mientras el resto está siendo entrevistado, tienes muchas áreas en las que puedes refrescarte: código abierto, acertijos en Internet y tal vez trabajo independiente. “No pasaré la entrevista / Quiero trabajar en una empresa específica” Sí, lo más probable es que la primera entrevista sea un fracaso, pero la experiencia que obtienes no tiene precio. Con cada entrevista posterior, se volverá más seguro e ingenioso. Como ahora recuerdo mi primera... ¡¿Dios, de qué tontería estaba hablando?! Qué vergüenza fue irme detrás de él (recuerdo a ese ghoul que me sonrió en la cara), pero cuando llegué a casa y lo pensé, me di cuenta de que era una lección maravillosa. Después de él, todos los eventos similares posteriores estuvieron imbuidos de tranquilidad y confianza. Nadie murió, están buscando gente como yo, así que vendré. ¡Cree en ti mismo! Si desea específicamente a una determinada empresa, creo que no le revelaré un truco popular en nuestro entorno, pero aún así: antes de organizar una reunión con esta oficina, realice una entrevista con los competidores antes de esto. Tal vez le ofrezcan algo que no rechazará, o las condiciones serán más abruptas. De una cosa estoy segura: no te arrepentirás. "Soy bueno en este trabajo" Ya sabes, hay un viejo dicho: Le mieux est I'enneini du bien ("Lo mejor es enemigo de lo bueno"). Tal vez tu trabajo no sea el peor lugar, pero sí, el jefe es una cabra, ¿y qué? O, por ejemplo, el tercer año sin bono, pero con un salario estable, especialmente porque ya tengo más de 30 años. Hasta cierto punto, puede ser así, solo recuerda que tienes una vida y no debes gastarla en desengaños, por una comodidad imaginaria, cuando hay tantas cosas interesantes alrededor, y la vida entera no es suficiente para entender. No tengas miedo de ser mejor, no tengas miedo de ser mejor. No escuches a nadie, ve a la meta persistentemente si sabes que esto es lo que realmente quieres hacer. ¡No tengas miedo de cambiar!

    Entrevista

    En general, puedes encontrarlo todo en Internet o preguntar con amigos, pero creo que no será superfluo. A continuación se muestra un ejemplo de una entrevista para un desarrollador de Java junior como sería ahora si yo fuera el entrevistador. Las preguntas pueden ser cualquier cosa, solo traté de recolectar algo promedio para el hospital. Finjamos que tienes suerte. Esquema estándar Paso 1. Te llama una reclutadora y concertas una entrevista con ella, por ejemplo, mañana a las 11:00. Paso 2 Llegas temprano, ya que lo más probable es que las 11:00 no sea la hora para ti, sino para los desarrolladores, que tienen algún tipo de habitación reservada en la que serás torturado. Es de buena educación que cualquier reclutador advierta sobre esto. Paso 3 De hecho, a partir del paso 3, todos los puntos se pueden mezclar, porque las entrevistas se pueden realizar de diferentes maneras. Por ejemplo, aquí se le puede preguntar sobre cosas básicas, de dónde es, por qué está con nosotros, etc. Es posible que HR mismo pueda hacer esto y, por supuesto, es posible que en inglés. Correcto, depende de la empresa. Etapa 4 Está invitado a una sala de reuniones, donde tendrá una conversación con una, dos, tres personas, una de las cuales será un líder técnico o senior que trabajará con usted en el futuro, entre el resto puede haber un Scrum master, otros desarrolladores o HR's. Te entrevistan un rato, luego te dan la mano y te sueltan. Paso 5 Tal vez sea al día siguiente, o tal vez inmediatamente después del paso 4: tendrá una conversación con un cliente extranjero (si lo hay), o tal vez él mismo realice una entrevista. Como puedes ver, hay muchas opciones. En algún lugar hay clientes, en algún lugar también hay una entrevista telefónica. Este es solo un ejemplo. Ejemplo de una entrevista técnica para un desarrollador Java Junior Realmente lo siento por los subdesarrolladores que leen algo inteligente para ahogarse / aplastar / presumir frente al solicitante de una entrevista. Si ve que una persona así está frente a usted y siente presión y tensión por parte de él, envíelo inmediatamente a tres divertidos, porque después de un pasaje exitoso con este cretino, tendrá que trabajar. No desperdicies tus preciosos nervios. La entrevista, en primer lugar, debe realizarse con el objetivo de averiguar qué sabe el candidato, y no qué no sabe. Naturalmente, si necesita una persona que sepa algo específico, pregúntele, no lo atormente con cosas inútiles que no usa en el proyecto. ¡Sé humano, después de todo! A continuación se presentan preguntas aproximadas que pueden surgir en una entrevista. 5 preguntas para cada tecnología. Programación orientada a objetos 1. Da un ejemplo de polimorfismo de la vida real. ¿Cuales son los beneficios? ¿Defectos? Escribe un código sencillo. 2. ¿Qué es una interfaz? ¿Clase abstracta? ¿Para qué necesitamos interfaces si estúpidamente puedes escribir todo con clases (una pequeña provocación)?. Lo mismo es cierto para una clase abstracta. ¿Cuáles son los métodos predeterminados en Java 8? 3. Construya una jerarquía de clases en un ejemplo específico de una base de datos o programa imaginario (hay una lista de diferentes clases de trabajadores de la base de datos) y la interacción entre ellos (agregación, composición). 4. ¿En qué se diferencia la composición de la agregación (is-a, has-a)? 5. ¿Cómo se puede eludir la prohibición de la herencia múltiple en Java? JDK/JRE 1. ¿En qué se diferencia JDK de JRE? ¿Qué es JVM? 2. ¿Qué es un classpath y para qué sirve? ¿Cómo, por ejemplo, cargar otras clases en el classpath? 3. ¿Qué sabes sobre el cargador de clases? 4. ¿Cuéntanos sobre javadoc? ¿Para qué sirve? 5. ¿Qué es JAR, WAR? Java común 1. ¿Cuál es la diferencia entre métodos estáticos y métodos no estáticos? ¿Qué es definitivo? 2. ¿Qué es el boxing-unboxing? byte b = 127, b++, ¿cuál es el resultado y por qué? 3. ¿Qué son los envoltorios, para qué sirven? 4. ¿Qué debo hacer para crear mi anotación? ¿Qué es anular/sobrecargar? 5. ¿Por qué la clase String es definitiva? ¿Qué hace el método interno()? Estructuras de datos 1. Cuéntenos sobre la estructura de la API de colecciones en Java. ¿Ya has trabajado con la API de Stream? 2. ¿Cuál es la diferencia entre ArrayList y LinkedList? ¿Dónde es mejor usar ArrayList y dónde está LinkedList? 3. Cuéntanos cómo funciona HashMap. ¿Cuáles son las características de trabajar con TreeSet, HashSet? ¿Tienes experiencia con las colecciones de guayaba? 4. Arreglos en Java, un ejemplo de un arreglo bidimensional. 5. hashCode, ¿es igual al ejemplo de HashMap? concurrencia 1. ¿Qué es un proceso? ¿Fluir? ¿Cómo crear un hilo? ¿Qué es sincronizado? ¿Cómo entender este o aquel fragmento de código seguro para subprocesos? 2. ¿Qué es Thread.sleep, además de esperar, notificar, ceder? 3. ¿Dé un ejemplo de interbloqueo? 4. Colecciones cuando se trabaja con subprocesos múltiples. 5. Operaciones ThreadLocal y Atomic SQL/JDBC 1. En un ejemplo específico, obtenga de la base de datos de Usuarios aquel cuyo salario sea mayor a 5000. 2. Ejemplos de INNER JOIN, OUTER JOIN, Order By, Group By. 3. ¿Por qué necesito un controlador JDBC? Ejemplos. 4. Cuenta todo lo que sabes sobre ResultSet, un par de ejemplos. 5. Escriba un DAO simple usando RS. JPA/Hibernar 1. ¿Cuáles son las ventajas y desventajas de JPA? 2. ¿Qué es un EntityManager? ¿entidad? 3. Criterios en JPA/Hibernate. 4. Uno a uno, muchos a muchos en JPA/Hibernate 5. ¿Cómo haría un JOIN en Hibernate? HQL? Primavera 1. ¿Qué es DI/IoC? Ventajas. 2. ¿Qué es el contexto de la aplicación? ¿Frijol? 3. ¿Cuáles son los tipos de inicialización de IoC? 4. Singleton, ¿prototipo en primavera? ¿Primavera basada en anotaciones? 5. ¿Ciclo de vida de los frijoles? método de inicio, método de destrucción? @PostConstruct, @PostDeploy? Experto 1. Las principales fases de maven, el ciclo de vida. 2. ¿Cómo ejecutar maven con pruebas, sin pruebas? ¿Qué es el arquetipo, la dependencia mvn? 3. Perfiles en maven, cómo crear, cómo ejecutar. 4. ¿Qué es una instantánea en maven? ¿Repositorios centrales/remotos? 5. Complementos en mvn, el principio de funcionamiento, un par de ejemplos. algo 1. El concepto del algoritmo, su velocidad, Big-O-Notation. 2. ¿Cómo encontrar el elemento central en una LinkedList de una sola vez? 3. ¿Escribir una pila primitiva? ¿Cuál es la diferencia entre Pila y Cola? ¿LIFO, FIFO? 4. Clasificación rápida, clasificación por fusión. 5. Escriba un programa que verifique si un número es un palíndromo. Estoy de acuerdo, tal vez la barra esté un poco más inclinada hacia el medio que hacia el junior, pero creo que esa preparación definitivamente no te hará daño. Trate de profundizar en cada pregunta. Por cierto, muchas direcciones en Java no se indican aquí, tenga en cuenta.

    Durante el trabajo

    Aquí hay pequeñas recomendaciones para aquellos desarrolladores junior/middle que ya están asentados. Estos simples consejos pueden ser útiles para usted al igual que me ayudaron a mí. no seas terco Deja de probar tu punto, incluso si es seductoramente cercano a la verdad. Ya habrás notado que llevas mucho tiempo en una disputa, lo que significa que al otro lado de las barricadas hay un burro común que solo tiene dos opiniones en la vida: la suya y la equivocada. Tenemos un número increíble de personas testarudas que se mantienen firmes hasta el final, siempre y cuando su ego no sea sacudido. Y estos no son solo sus colegas, están en todas partes: en el minibús, en la tienda, familiares, amigos cercanos, no puede huir ni esconderse de ellos. Debe interactuar de alguna manera con ellos, incluso si comprende que una persona está diciendo tonterías abiertas. Además, a ti te puede pasar lo mismo. Estoy de acuerdo, las cosas simples se pueden explicar incluso a una persona terca, pero ¿y si estamos hablando de cuestiones arquitectónicas en un proyecto o una opinión personal? Olvídese de esta basura, sea flexible. Tengo mucho respeto por las personas que pueden admitir que están equivocadas, frente a todos. Es esta cualidad la que le será útil como especialista junior: es difícil confrontar a una persona abierta, especialmente cuando admite que está aprendiendo y tiene derecho a cometer errores. No llegues tarde No importa si es un período de prueba o solo un viernes, en el que todos anotan y llegan a 11. Otra cosa es importante: la puntualidad es una característica de un profesional que se gana puntos extra de la nada. Y los puntos extra para una persona sin experiencia no estarán de más, ¿verdad? Trate de no llegar tarde y salir honestamente del trabajo después de trabajar 8 horas. No abuses de las estimaciones Desafortunadamente, esta es una imagen muy común en la que una vez me metí en el pasado. El desarrollador se fijó entre 8 y 16 horas para completar la tarea e inesperadamente la completó en 3 o 4 horas. El resto de las horas las dedica a su tiempo personal en forma de tenis de mesa, como fue mi caso, o viendo youtube y otros entretenimientos. Desde el punto de vista legal, parecen haber estado de acuerdo, pero desde el punto de vista humano, te estás privando de cosas muy importantes: 1. Estás parado, ya que estás llenando el tiempo extra con cosas innecesarias; 2. No te desarrollas porque no informas a la gerencia de tu rápido progreso, nadie sabe que estás completando las tareas más rápido de lo esperado; 3. Comienzas a sobrestimar constantemente la cantidad de tiempo promedio para los valores, es solo un camino a ninguna parte. Reserve tiempo para estudiar La posibilidad de quedarse atrás del motor es increíblemente alta, así que tenga en cuenta que la tecnología y las nuevas versiones se están desarrollando muy rápidamente. Suscríbase a los evangelistas de Java de nuestros días, lea resúmenes de Java y, en general, interésese, aprenda cosas nuevas. Esto le ayudará a mantener su marca y desarrollarla. Ayuda a otros No tengas miedo de ayudar a los demás, incluso si son tan verdes como tú. En primer lugar, fortalecerá enormemente su conocimiento y, en segundo lugar, recibirá respeto a los ojos de los demás, y ellos lo ayudarán al mismo tiempo. En un entorno así nacen los mejores equipos, así como un crecimiento técnico y personal muy rápido. Practicar deportes. Tener un hobby No en serio. ¡Las personas que practican deportes no solo se ven y se sienten mejor, sino que también su función cerebral está en la cima! La escoliosis, la parte inferior de la espalda, el sobrepeso, varios problemas con los órganos internos: las reuniones las 24 horas en la computadora, incluso fuera del trabajo, contribuyen a esto. Si no puedes practicar deportes (cosa que dudo), usa pequeños trucos: trabaja de pie de vez en cuando, sal dos paradas antes y camina al trabajo. Y sí, camina más. También existe el riesgo de agotamiento si la programación ocupa mucho más de su tiempo que 40 horas a la semana. Los pasatiempos personales vendrán al rescate, por ejemplo, fotografía, música, etc. Haga un tiempo regular para la espiritualidad. Equilibrio en tu vida personal Cuando una novia/esposa dice: “portátil o yo”, debes pensar seriamente qué lugar ocupa la programación en tu vida. Por otro lado, al comenzar su viaje en TI, debe explicarle claramente a su alma gemela que ahora necesita estudiar mucho para lograr más. Espero que entiendan. Bueno, tratas de equilibrar y distribuir correctamente tu tiempo. ir más allá Sea proactivo, si siente, por ejemplo, que puede compartir conocimientos o tiene temas interesantes, ¿por qué no organizar pequeños cursos dentro de la empresa para otros? No tenga miedo de contribuir a grandes proyectos de código abierto si sabe cómo ayudar. Si quieres escribir un juego, proyecto social u otra idea, ¡hazlo, hazlo, hazlo! No te quedes quieto, siempre busca formas en las que puedas desarrollarte. Sea competitivo Esté atento a las nuevas tendencias, manténgase actualizado con las tendencias que están ocurriendo en la comunidad de Java. Por ejemplo, no estará de más que, de vez en cuando, haga un seguimiento de las vacantes de Java en DOU, pero no para alejarse del trabajo, sino para saber qué tecnologías siguen siendo relevantes y cuáles están desapareciendo lentamente del mercado. . También trata de tomar cursos de Coursera, Udacity, etc., explora nuevos horizontes. E incluso inglés: prueba a ver tus películas/programas de TV favoritos en versión original con subtítulos para mejorar tus habilidades conversacionales, descarga un par de aplicaciones interesantes para aprender el idioma (por ejemplo, LinguaLeo) y, al final, ve a cursos. .

    Conclusión

    Bueno, mi pequeño proyecto DOU está llegando a su fin. Queridos amigos, deseo sinceramente que consigan un trabajo y espero que todo lo que he descrito en estos 7 artículos sea una guía valiosa para ustedes, incluso para aquellos que ya están trabajando como desarrolladores de Java. Futuros juniors, recuerden que nada es imposible, y si realmente presionan, definitivamente tendrán éxito. Quiero que finalmente decidas si esto es tuyo o no, desarrolles un plan de entrenamiento detallado y lo sigas con frialdad. No se moleste si recibe silencio a cambio: todo esto es temporal, lo principal es creer y en ningún caso desviarse, sino estudiar, estudiar y estudiar de nuevo. Me gustaría expresar mi profunda gratitud al equipo de DOU por editar una gran cantidad de material y por darme tiempo de transmisión de máxima audiencia los lunes. DOU es una comunidad genial que ha dejado de ser solo un sitio para la gente de TI de Ucrania. También me gustaría dar las gracias a todos los comentaristas que leyeron mis artículos en diagonal y sacaron frases de contexto. Los artículos no se verían tan interesantes sin ti :) ¡Que la Fuerza te acompañe!

    Para quienes escuchan la palabra Java Core por primera vez, estos son los fundamentos fundamentales del lenguaje. Con este conocimiento, ya puede realizar una pasantía / pasantía de manera segura. Estas preguntas te ayudarán a refrescar tus conocimientos antes de la entrevista o a aprender algo nuevo por ti mismo. Para habilidades prácticas, estudie sobre.

      ¿Cómo crear un objeto inmutable en Java? Enumere todos los beneficios

      Una clase inmutable es una clase cuyo estado no se puede cambiar una vez creada. Aquí, el estado de un objeto son esencialmente los valores almacenados en una instancia de la clase, ya sean tipos primitivos o tipos de referencia.

      Para que una clase sea inmutable, se deben cumplir las siguientes condiciones:

      1. No proporcione configuradores o métodos que modifiquen campos u objetos que hagan referencia a campos. Los setters implican cambiar el estado de un objeto, que es lo que queremos evitar aquí.
      2. Haga que todos los campos sean definitivos y privados. Los campos designados como privados no serán accesibles desde fuera de la clase, y designarlos como finales garantiza que no los cambie ni siquiera por accidente.
      3. No permita que las subclases anulen los métodos. La forma más fácil de hacer esto es declarar la clase como final. Las clases finalizadas en Java no se pueden anular.
      4. Recuerde siempre que sus instancias de variables pueden ser mutables o inmutables. Defínalos y devuelva nuevos objetos con contenido copiado para todos los objetos mutables (tipos de referencia). Las variables inmutables (tipos primitivos) se pueden devolver de forma segura sin esfuerzo adicional.

      Además, debe tener en cuenta los beneficios posteriores de las clases inmutables. Es posible que los necesite para una entrevista. Clases inmutables:

      • fácil de diseñar, probar y usar
      • son automáticamente seguros para subprocesos y no tienen problemas de sincronización
      • no requiere un constructor de copia
      • le permite "inicializar perezosamente" el código hash y almacenar en caché el valor de retorno
      • no requiere copia segura cuando se usa como un campo
      • hacer buenas claves de mapa y elementos de conjunto (estos objetos no deberían cambiar de estado cuando están en la colección)
      • hacer que su clase sea permanente al crearla una vez, y no es necesario volver a verificarla
      • siempre tienen "atomicidad de falla", un término acuñado por Joshua Bloch: si un objeto inmutable arroja una excepción, nunca se dejará en un estado no deseado o indefinido.

      Mira el ejemplo escrito en este post.

      La especificación de Java establece que todo en Java se pasa por valor. No existe tal cosa como "pasar por referencia" en Java. Estas condiciones están asociadas con métodos de llamada y paso de variables como parámetros de método. Bueno, los tipos primitivos siempre se pasan por valor sin ninguna confusión. Pero, el concepto debe entenderse en el contexto de un parámetro de método de tipos complejos.


      En el ejemplo anterior, los bits de dirección de la primera instancia se copian en otra variable de referencia, lo que hace que ambas referencias apunten a la misma ubicación de memoria donde se almacena el objeto. Recuerde que al asignar nulo a la segunda referencia, no asignará nulo a la primera referencia. Pero un cambio en el estado de un objeto con una variable referenciada también se reflejará en la otra referencia.

      ¿Cuál es el uso del bloque finalmente? ¿Este bloque garantiza la ejecución de su código? ¿Cuándo no se llama el bloque finalmente?

      El bloque finalmente siempre se llama si existe el bloque de prueba. Esto garantiza que se llame al bloque finalmente incluso si se produce una excepción inesperada. Pero finalmente es más útil que simplemente manejar excepciones: este bloque le permite limpiar el código que accidentalmente ha omitido return, continue o break. Colocar código de limpieza en un bloque finalmente es siempre una buena práctica, incluso cuando no se esperan excepciones.

      Si la máquina virtual sale mientras se está ejecutando el bloque try o catch, el bloque finalmente no se ejecutará. De manera similar, si un subproceso se interrumpe o elimina mientras se ejecuta un bloque try o catch, el bloque finalmente no se ejecutará aunque la aplicación aún se esté ejecutando.

      ¿Por qué hay dos clases de fecha, una en el paquete java.util y la otra en java.sql?

      java.util.Date representa una fecha y hora, mientras que java.sql.Date representa solo una fecha. El complemento de java.sql.Date es la clase java.sql.Time, que representa solo el tiempo.

      La clase java.sql.Date es una subclase (extensión) de la clase java.util.Date. Entonces, ¿qué ha cambiado en java.sql.Date:

      • toString() produce una representación de cadena diferente: yyyy-mm-dd
      • el método estático valueOf(String) crea una fecha a partir de una cadena con la representación anterior
      • getters y setters excluidos para horas, minutos y segundos

      La clase java.sql.Date se usa en JDBC y está diseñada para no tener un componente de tiempo, es decir, las horas, los minutos, los segundos y los milisegundos deben ser cero... pero la clase no lo requiere.

      Explicar las interfaces de marcador.

      El patrón de interfaz de marcador es un patrón de diseño informático utilizado por lenguajes de programación que proporcionar información sobre los objetos en tiempo de ejecución. Esta proporciona una forma de asociar metadatos de clase donde el lenguaje no tiene soporte explícito para dichos metadatos. Java usa interfaces para esto sin especificar métodos.

      Un buen ejemplo del uso de una interfaz de marcador en Java es la interfaz Serializable. La clase implementa esta interfaz para indicar que sus datos no transitorios se pueden escribir en un flujo de bytes o en el sistema de archivos.

      El problema principal Una interfaz de marcador es aquella que define una convención para las clases que la implementan, y todas las subclases heredan esa convención. Esto significa que no puede "desrealizar" el token. En el ejemplo anterior, si crea una subclase que no desea que se serialice (quizás porque está en un estado transitorio), debe recurrir a lanzar explícitamente una excepción NotSerializableException.

      ¿Por qué el método main() se declara como public static void ?

      ¿Por qué público? El método principal tiene el modificador de acceso público, por lo que se puede acceder desde cualquier lugar y por cualquier objeto que quiera usar este método para iniciar la aplicación. Aquí no digo que JDK/JRE tenga una razón similar, porque java.exe o javaw.exe (para Windows) usan la llamada Java Native Interface (JNI) para ejecutar el método, por lo que pueden llamarlo de todos modos independientemente del modificador de acceso. .

      ¿Por qué estático? Supongamos que nuestro método principal no es estático. Ahora, para llamar a cualquier método, necesita una instancia de la clase. ¿Correcto? Java te permite tener constructores sobrecargados, todos lo sabemos. Entonces, ¿cuál debería usarse y de dónde vendrán los parámetros para el constructor sobrecargado?

      ¿Por qué nula? No sirve de nada el valor devuelto en la máquina virtual que realmente llama a este método. Lo único que la aplicación quiere decirle al proceso de llamada es una terminación normal o anormal. Esto ya es posible usando System.exit(int) . Un valor distinto de cero implica una terminación anormal, de lo contrario, todo está bien.

      ¿Cuál es la diferencia entre crear una cadena como new() y un literal (usando comillas dobles)?

      Cuando creamos una cadena usando new() , se crea en el montón y también se agrega al grupo de cadenas, mientras que la cadena creada con el literal solo se crea en el grupo de cadenas.

      Necesita saber más sobre el concepto de grupo de cadenas para responder a esta u otras preguntas similares. Mi consejo es aprender bien la clase String y el grupo de cadenas.

      ¿Cómo funciona el método substring() de la clase String?

      Al igual que otros lenguajes de programación, las cadenas en Java son secuencias de caracteres. Esta clase es más como una clase de utilidad para trabajar con esta secuencia. La secuencia de caracteres la proporciona la siguiente variable:

      /** El valor se utiliza para el almacenamiento de caracteres. */ /** El valor se usa para almacenar caracteres */ valor de carácter final privado; Las siguientes variables se utilizan para acceder a esta matriz en varios escenarios /** El desplazamiento es el primer índice del almacenamiento que se utiliza. */ /** El desplazamiento es el primer índice del almacenamiento a utilizar. */ desplazamiento int final privado; /** El conteo es el número de caracteres en la Cadena. */ /** El conteo es el número de caracteres en la cadena. */ conteo final privado de int;

      Cada vez que creamos una subcadena a partir de una instancia de cadena existente, el método substring() solo establece las variables de compensación y recuento en nuevos valores. La matriz de caracteres internos no se modifica. Esta es una posible fuente de pérdida de memoria si el método substring() se usa sin cuidado:

      El valor original de value no cambia. Entonces, si crea una cadena de 10000 caracteres y crea 100 subcadenas con 5-10 caracteres cada una, los 101 objetos contendrán la misma matriz de caracteres de 10000 caracteres. Esto es sin duda una pérdida de memoria.

      Esto se puede evitar cambiando el código de esta manera:

      reemplace original.substring(beginIndex) con new String(original.substring(beginIndex)) , donde original es la cadena original.

      Explicar cómo funciona HashMap. ¿Cómo se resuelve el problema de los duplicados?

      La mayoría de ustedes seguramente estará de acuerdo en que HashMap es el tema de entrevista favorito en este momento. Si alguien me pide que te diga “¿Cómo funciona HashMap?”, simplemente responderé: “Por el principio de hashing”. Tan simple como es.

      Entonces, hashing es esencialmente una forma de asignar un código único a cualquier variable/objeto después de aplicar cualquier fórmula/algoritmo a sus propiedades.

      La definición de un mapa es: "Un objeto que vincula claves a valores". Muy sencillo, ¿verdad? Entonces, HashMap contiene su propia entrada de clase interna, que se ve así:

      Mapa de implementos de entrada de clase estática . Entrada(clave K final; valor V; Entrada siguiente; hash int final; …//Aquí va más código)

      Cuando alguien intenta poner un par clave-valor en un HashMap, sucede lo siguiente:

      • En primer lugar, el objeto clave se compara con nulo. Si la clave es nula, el valor se almacena en la tabla de posiciones. Porque el código hash para nulo siempre es 0.
      • Luego, el siguiente paso es calcular el valor hash llamando a su método hashCode() en la variable clave. Este hash se usa para calcular el índice en la matriz para contener el objeto Entry. Los desarrolladores de JDK eran muy conscientes de que el método hashCode() podría estar mal escrito y podría devolver un valor muy grande o muy pequeño. Para resolver este problema, introdujeron otro método hash() y pasaron el código hash del objeto a este método para convertir ese valor en el rango de tamaño del índice de la matriz.
      • Ahora se llama al método indexFor(hash, table.length) para calcular la posición exacta para almacenar el objeto Entry.
      • Ahora la parte principal. Como sabemos, dos objetos diferentes pueden tener el mismo valor de código hash, ¿cómo se pueden almacenar dos objetos diferentes en la misma ubicación en un archivo [llamado papelera]?

      La respuesta es LinkedList. Si recuerda, la clase Entry tiene una propiedad "siguiente". Esta propiedad siempre apunta al siguiente objeto de la cadena. Este comportamiento es muy similar a LinkedList.

      Entonces, en caso de coincidencias de código hash, los objetos Entry se almacenan en forma de LinkedList. Cuando es necesario colocar una Entrada en un índice en particular, ¿HashMap verifica si existe otra Entrada en esa ubicación? Si no hay ningún registro allí, nuestro objeto se guardará en esta ubicación.

      Si ya hay otro objeto en nuestro índice, se comprueba su siguiente campo. Si es nulo, nuestro objeto se convierte en el siguiente nodo en LinkedList. Si next no es nulo, este procedimiento se repite hasta que se encuentra un campo next nulo.

      ¿Qué sucede si agregamos otro valor clave igual al que agregamos anteriormente? Es lógico que reemplace el valor anterior. ¿Como sucedió esto? Después de determinar el índice de posición para el objeto Entry, iterando sobre LinkedList ubicado en nuestro índice, HashMap llama al método equals() en el valor clave para cada objeto Entry. Todos estos objetos Entry en LinkedList tienen el mismo valor de código hash, pero el método equals() probará la verdadera igualdad. Si clave. es igual a (k) será cierto, entonces ambos serán tratados como el mismo objeto. Esto hará que solo se reemplace el objeto de valor dentro del objeto de entrada.

      Así HashMap asegura la unicidad de las claves.

      ¿Diferencias entre interfaces y clases abstractas?

      Esta es una pregunta muy común si estás entrevistando a un programador de nivel junior. Las diferencias más significativas se enumeran a continuación:

      • En las interfaces de Java, las variables son a priori definitivas. Las clases abstractas pueden contener variables no finales.
      • Una interfaz en Java definitivamente no puede tener una implementación. Una clase abstracta puede tener instancias de métodos que implementan el comportamiento base.
      • Los miembros de la interfaz deben ser públicos. Una clase abstracta puede tener modificadores de acceso de cualquier tipo.
      • Una interfaz debe implementarse con la palabra clave implements. Una clase abstracta debe extenderse con una palabra clave extiende.
      • En Java, una clase puede implementar muchas interfaces, pero solo puede heredar de una clase abstracta.
      • Una interfaz es completamente abstracta y no se puede instanciar. Una clase abstracta tampoco puede tener instancias de la clase, pero se puede llamar si existe el método main().
      • Una clase abstracta es un poco más rápida que una interfaz porque una interfaz espera una búsqueda antes de llamar a cualquier método anulado en Java. En la mayoría de los casos, esta es una diferencia menor, pero si está escribiendo una aplicación de tiempo crítico, también debe considerar este hecho.
    1. ¿Cuándo anula los métodos hashCode() y equals()?

      Los métodos hashCode() y equals() se definen en la clase Object, que es la clase padre de todos los objetos Java. Por esta razón, todos los objetos Java heredan la implementación base de estos métodos.

      El método hashCode() se usa para obtener un valor entero único para un objeto dado. Este valor se utiliza para determinar la ubicación de la cesta cuando el objeto debe almacenarse en una estructura de datos como HashTable. De forma predeterminada, el método hashCode() devuelve una representación entera de la dirección de memoria donde se almacena el objeto.

      El método equals(), como sugiere su nombre, se utiliza para la equivalencia de objetos simples. La implementación básica del método es verificar las referencias de los dos objetos para ver si son equivalentes.

      Tenga en cuenta que normalmente es necesario anular el método hashCode() cada vez que se anula el método equals(). Esto es necesario para admitir la convención general del método hashCode, que establece que los objetos iguales deben tener códigos hash iguales.

      El método equals() debe determinar la igualdad de la relación (debe ser recursivo, simétrico y transitivo). Además, debe ser persistente (si el objeto no ha cambiado, el método debe devolver el mismo valor). Además, o.equals(null) siempre debe devolver falso.

      hashCode() también debe ser estable (si el objeto no ha cambiado bajo las condiciones del método equals(), debe continuar devolviendo el mismo valor).

      La relación entre los dos métodos es: siempre si a.equals(b) , entonces a.hashCode() debe ser igual que b.hashCode() .

    ¡¡Buena suerte con sus estudios!! Autor del artículo Lokesh Gupta Artículo original Enlaces a otras partes: