Los dolores de crecimiento de convertirse en un desarrollador Intermedio

Así que te has puesto un poco cómodo en el trabajo. El ciclo de vida del despliegue ya no es magia negra. Las revisiones de código son más cortas que su código. Y has enviado algunas cosas. Con suerte, estás motivado para diversificarte y aprender más. Pero el volumen de recursos es alucinante!

Un enfoque pragmático es apegarse a cosas que también le ayudarán a entrevistarse mejor.

De esta manera, usted tendrá un sentido de progreso y una meta en la que permanecer enfocado. 5 áreas

1. Diseño de bibliotecas de bajo nivel

2. Diseño del sistema

3. Capacidad para el desarrollo

4. Patrones de diseño

5. Prácticas generales de codificaciónLos recursos que he enumerado estarán cargados de Java, pero debería ser posible encontrar equivalentes para otros idiomas. La mayoría de los conceptos de diseño son agnósticos al lenguaje.

Diseño de bibliotecas de bajo nivel

Si observa las preguntas de entrevistas anteriores para SDE2/3 en Uber, Amazon et al., verá que al menos una ronda tiende a hacer este tipo de diseño de bajo nivel. Dos comunes de los que he oído hablar son – 1. Diseñar una biblioteca Logger

2. Implementar el marco de trabajo de Streams en JavaI, especialmente como la pregunta Logger; puede esperar una serie de respuestas basadas en la habilidad del entrevistado. Una vez que haya terminado, hágase las siguientes preguntas -1. ¿Descompuso su implementación en diferentes interfaces? ¿O es una súper clase con todo?2. ¿Conoce usted la seguridad de los hilos de sus clases? ¿Por qué? 4. ¿Es enchufable? 4. ¿Puede un tercero ampliar su biblioteca con implementaciones alternativas?5. ¿Qué pasa con la recolección de basura? ¿Estás creando demasiados objetos y causando presión en la memoria? Log4j2 hace un trabajo increíble de documentar su propio diseño. Ve a echar un vistazo cuando termines de probar el problema, no he podido encontrar ningún otro buen recurso para el bajo diseño. Grita abajo en los comentarios si encuentras algo útil.

Diseño del sistema

Esto está más en línea con lo que los desarrolladores tienden a pensar cuando alguien dice «preguntas de diseño». Dos bienes comunes uno aquí son –

1. Diseñar un sistema de acortamiento de URLs

2. Diseñar el sistema de noticias de TwitterUna forma sólida de empezar es Donne Martins Design Primer . Es largo, pero es un excelente enfoque de amplitud primero para sentirse cómodo con el diseño del sistema.
1. Async v/s Sync escribe; Messaging Queues

2. Patrones de consistencia – especialmente consistencia eventual

3. Tipos de base de datos (SQL v/s NoSQL) y patrones de escalado

4. Caché a diferentes niveles

5. Dividir una declaración del problema en diferentes servicios independientesUn gran recurso de seguimiento es Grokking the System Design Interview . Tiene discusiones detalladas sobre cuestiones específicas de diseño de sistemas como las dos que mencioné anteriormente. Es un recurso de pago pero excelente.[Fuente: https://github.com/donnemartin/system-design-primer]

Capacidad para el desarrollo

La capacidad para el desarrollo es otro tema que distingue a los ingenieros novatos de los más experimentados. Es sorprendentemente difícil hacer lo correcto. «Java Concurrency in Practice» debería ser lectura obligatoria. Te irás con una mejor comprensión de –

1. Modelo de Memoria de Java

2. Ocurre antes de las relaciones

3.Spurious llamadas de despertador

4. Volátil v/s Sincronizado

5. Seguridad de hilos, espera y notifica y muchos otrosSi codificas en un idioma diferente, encuentra un libro equivalente. La depuración de condiciones de carrera sin una comprensión completa de los conceptos será muy dolorosa. Java Multithreading and Concurrency by Educative es un gran recurso de seguimiento. Lea los conceptos; luego mire fijamente un par de preguntas resueltas en la entrevista. Esto será mucho más fácil que intentarlo de golpe.

Patrones de diseño

No es probable que te quedes boquiabierto con esto. Pero los verás emerger a medida que te enfrentas a diferentes problemas de diseño, y una vez que leas sobre ellos, empezarás a verlos por todas partes. Algunos ejemplos –

1. Adaptador – Arrays.asList()

2. Decorador – Collections.synchronizedCollection(nuevo ArrayList<>())

3. Prototipo – Immutables.copyOf()

4. Comando – Interfaz ejecutable

5. Estrategia – java.util.Comparator#compare()StackOver tiene una lista enorme de patrones encontrados en las librerías principales de Java aquí: Elementos de software reutilizable orientado a objetos, pero confieso que no pude abrirme paso a través de él, sino que intenté Head First Design Patterns . No parece un libro técnico en absoluto, pero en realidad es una gran lectura. las diferentes historias extrañas se pegan y hacen un gran trabajo de desentrañar las sutilezas de los patrones similares. Terminé esto durante un fin de semana y me reí mucho del libro. Las discusiones en él son probablemente más relacionadas con la experiencia.

Codificación general

Libros, Libros, Libros «Java eficaz» . Esta es una excelente manera de acostumbrarse a los modismos y mejores prácticas de Java. Está dividido en 90 temas independientes, cada uno de ellos de un par de páginas. Así que puedes leer las secciones relevantes para lo que estás trabajando. «Clean Code» – ¡La última, lo prometo! – es otra excelente lectura y muy útil cuando empiezas a revisar el código de otras personas. Te ayudará a elegir los olores de los códigos en un abrir y cerrar de ojos. Al igual que «Effective Java», sólo tienes que hojear las secciones que creas que son relevantes en este momento.

Cómo ponerse cómodo con su IDE

Bien, esto no pasa la prueba de «te hace mejor en las entrevistas». Pero en realidad, el hecho de dominar el IDE hace que la codificación sea mucho más divertida! uso IntelliJ y tiene un ingenioso «Key Promoter X» plugin. Cada vez que utiliza el ratón en lugar de un atajo de teclado, éste le grita. Usted debe sentirse como un profesional (y muy acosado) en un par de semanas. Si está usando otro IDE, intente encontrar el equivalente allí. O usa IntelliJ, es increíble. 42 IntelliJ Idea Tips and Tricks es una conferencia en Youtube. Es una forma entretenida de familiarizarse con las funciones de potencia más utilizadas. En lugar de tener prisa por terminar las cosas, piense en mejorar un poco cada día pasando por algunas de ellas. ¡Buena suerte! Oh y por cierto, asumo que la mayoría de los lectores tienen 0-4 años de experiencia. Si aún no has empezado a trabajar, sigue con LeetCoding. Los conceptos de diseño no tienden a hundirse hasta que se ha trabajado con un par de sistemas en el mundo real.

Apéndice

Enlaces

Log4J2 ArchitectureDonne Martins System Design PrimerGrokking the System Design Interview by EducativeJava Concurrency Course by EducativeStack Overflow Glossary of Design Patterns in Java LibrariesTips and tricks using the IntelliJ IDE

Libros

Me gusta escoger un buen libro en cada área de fundación y asegurarme de que cada libro sea ortogonal al resto. Java eficaz – Introducción a las mejores prácticas de Java. Muy fácil de leer. Código limpio – Buenas reglas generales para la codificación Capacidad para el Desarrollo de Java en la práctica – Libro básico para comprender la capacidad para el desarrollo Patrones de diseño Head First – Una forma divertida y efectiva de pensar sobre el Diseño Orientado a Objetos Diseño de Aplicaciones Intensivas de Datos – El libro técnico más valorado que he visto nunca. Ideal para el diseño de sistemas, pero huuuuuge. Es mejor leer un poco a la vez.

Etiquetas

ProgramaciónEmpleosEntrevistasDesarrollo de softwareConsejosPatrones de diseñoCodificaciónHistorias técnicas recientes

Comentarios

Continúe la discusión