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