2009-10-14 1692 views
7

Si quiero convertirme en un consultor de rendimiento para aplicaciones y sistemas Java, ¿cuáles son las principales habilidades que necesito?¿Cuáles son las principales habilidades para ser un consultor de rendimiento?

  • larga experiencia con Java
  • utilizando un perfilador (o apilar disparos)
  • base de datos de conocimiento (para evitar/detectar errores comunes de funcionamiento: índices, etc.)
  • Almacenamiento en caché biblioteca
  • Java concurrencia

¿Está de acuerdo con la importancia de estos? ¿Qué más agregarías?


actualizada de respuestas:

Habilidades adicionales:

  • de recogida de basura, y puesta a punto
  • eficiente código Java
  • Diseño (visión de alto nivel)
  • tecnologías de interfaz de usuario (JavaScript, DOM, CSS, oscilación, SWT)
  • Redes comprensión (también se utiliza para el Ajax)
  • Algorithmics, Big O
  • hardware entienden por escalado

Mindset (ofrecido por varias respuestas, aunque No pregunté por ella):

  • analítica (en realidad mido)
  • Personas/habilidades políticas resistente a la presión
+2

Interesante pregunta. Creo que este es un excelente trabajo de nicho para alguien que realmente tiene el interés. ¡Ciertamente hay muchos programas de bajo rendimiento que necesitan ayuda! – HLGEM

+0

Gracias chicos, muchas respuestas fueron buenas y útiles. Tuve que aceptar solo una ... :-( – KLE

Respuesta

2

Creo que dependiendo del cliente en particular y el problema en cuestión, deberá tener excelentes habilidades en análisis algorítmico y optimización. ¿Su problema está en el nivel matemático algorítmico, o está en el nivel algorítmico de Java?

También necesitará estar muy familiarizado con las implementaciones de JVM con las que estará trabajando. Conocer el idioma y la API no es lo suficientemente bueno: deberá conocer en detalle qué construcciones de lenguaje usar en ciertas situaciones, y esto puede variar dependiendo de la JVM específica que esté utilizando. Un generador de perfiles no siempre revelará problemas de rendimiento específicos de JVM. Como otros han notado, la misma JVM puede comportarse de manera diferente en harware dispares.

+0

Aceptado. Muchas respuestas fueron buenas y útiles, pero tuve que elegir una ;-) – KLE

1

yo añadiría:

  • Sea escéptico, incluso sobre los resultados del perfilador: usa tu cerebro, primero.
  • No lo crean hasta que lo vean.
  • No culpe antes de medir.
+0

Entiendo, pero esto se relaciona más con un estado de ánimo mientras lo haces, que con una habilidad real. Supongo que no hice la distinción lo suficientemente clara :-( – KLE

+1

Cambiaría el primero a: "Sea escéptico, incluso sobre los resultados de su cerebro: use su perfilador primero". Hubo un caso en el que pude adivinar el cuello de botella de rendimiento sin un generador de perfiles, pero eso fue simplemente un cerebro muerto . Por lo general, el perfilador me sorprende, y es correcto. –

1

Poder acelerar el código Java. Lo más probable es que lo llamen para ver el código lento, y deberá encontrar y corregir las partes lentas.No puede acelerarlo, y tendrá clientes enojados, lo acelerará y todos estarán felices. Esto podría ponerte bajo presión para que actúes, si te gusta ese tipo de cosas.

Se le puede llamar para asesorar sobre los diseños. Como resultado, necesitará conocer muchas mejores prácticas y tener buenas habilidades de diseño.

+0

Gracias. Lo entiendo.Para nombrar una habilidad, ¿diría ** "orientado a la presión" **? O una palabra mejor ... – KLE

+1

Además, necesitarás un buen par de botas. ¡Habrá algún código realmente malo que tendrás que atravesar! –

+0

Incorporo estas dos ideas a la pregunta. – KLE

4

Creo que la habilidad más importante es una mente analítica capaz de seguir la evidencia y no el "instinto" y realmente descomponer y medir los problemas.

Después de eso, tomaría algunas formas creativas para comprender la medición. Cuando alguien contrata a un consultor de desempeño, a menudo se quedan estancados, lo que probablemente significa que tienen usuarios reales que hacen cosas reales, lo que significa que Java no será la única cosa en la pila (como notaron las bases de datos, pero puede haber problemas de JavaScript y de red y quién sabe qué más también).

Además de todo eso, en términos de la lista de lavandería, lo que falta es garbage collection. Comprender cómo funciona eso y cómo modificarlo es fundamental. Muchos casos involucrarán problemas con la recolección de basura mundial para detener un proceso importante por mucho tiempo.

Realmente necesita tener un extenso conjunto de herramientas con posibles soluciones, ya que cada cliente necesitará cosas diferentes. Algunos necesitarán un grupo de objetos para sus objetos inmutables, otros necesitarán introducir objetos inmutables para reducir la sincronización, algunos necesitarán introducir objetos mutables para evitar la creación excesiva de objetos, etc. El rendimiento es realmente una cuestión caso por caso, y necesita tener un rango de experiencia y conocimiento para ayudar con cada caso.

1

Además, hay un subcampo de esto que se ocupa de las mejoras de rendimiento de la GUI (muchas aplicaciones de alta velocidad como finanzas se escriben en cosas como Swing). Eso trae un montón de habilidades adicionales.

+0

Interesante. ¿Podría darnos algunas precisiones? – KLE

+2

En Swing (y AWT), los modelos de pintura/invalidación/recorte y los mecanismos de envío de eventos generalmente son poco conocidos. El uso incorrecto puede reducir significativamente la capacidad de respuesta y aumentar el retraso, el parpadeo, etc. Las empresas que necesitan UI de alta velocidad (por ejemplo, para fines financieros y militares) a menudo pagarán por las personas que pueden mejorar estas cosas. Sé que existen cosas similares en la industria de los juegos (aunque no para Java). – Uri

+0

+1 Gracias por esa agradable entrada. – KLE

1

Una gran comprensión de los algoritmos y la notación Big O. Si pasas 10 horas optimizando un algoritmo O (n) cuando existe un O (logn) estás perdiendo el tiempo. Yo agregaría BigO a tu lista.

Además, una buena comprensión de la relación entre la memoria y la CPU. A menudo puede intercambiar uno por el otro (es decir, el almacenamiento en caché).

+0

Estoy muy de acuerdo con que debe tener una gran fortaleza en el análisis algorítmico, pero big-oh es solo el comienzo de eso. A pesar de mi acuerdo, no creo que su respuesta valga la pena. –

+2

Realmente no me importan mucho los votos. Solo digo que sería escéptico con respecto a cualquier consultor que afirmara ser un experto en rendimiento y no podría decirme la diferencia entre una ArrayList y una LinkedList utilizando el BigO apropiado. – reccles

1

Lo que otros dijeron, más this. Va junto con this y this y this.

Agregado: comprender Big-O, JVMs, cacheing, el comportamiento de los DB es muy importante. Sin embargo, cuando se trata de identificando el problema, a menudo puede encontrarlo fácil y rápidamente por un procedimiento muy simple que no requiere ninguna herramienta especial. Se trata de tomar varias pilas al azar y mirar cada una cuidadosamente, sin resumir.

Esto refuta la sabiduría común acerca de la creación de perfiles, como se puede comprobar fácilmente a sí mismo. Los enlaces de arriba lo explican en detalle.

+0

Esta es una respuesta bastante horrible. Da una sinopsis de los enlaces en tu respuesta. –

+0

@San: No me gustó, ¿eh? OK, voy a decir un poco más. Me canso un poco de deletrearlo una y otra vez. –

+0

Votación no válida. Tan cansado como te refieres a hacer un punto interesante, una oración de una línea ayuda mucho a alguien que ya tiene mucho que leer y considerar al hacer una pregunta. –

2

Creo que el hardware también es importante de entender (al menos es importante en el diseño de bases de datos de alto rendimiento). ¿Cuándo necesita lanzar más hardware al problema y cuándo necesita reparar el código y cuándo necesita hacer ambas cosas?

Como consultor en este tipo de cosas vas a necesitar personas serias/habilidades políticas. Entrevistarás y recopilarás datos de las personas que ya intentaron solucionar el problema de rendimiento y no pudieron. Muchos de ellos estarán descontentos cuando un consultor fue llamado. Tendrás que lidiar con su resistencia.SI va a hacer esto como un negocio propio, también necesitará un buen conocimiento contable (y un asesor fiscal) y habilidades de ventas. Necesitará habilidades para hablar para prescindir de su servicio a clientes potenciales.

Asegúrese de no solo medir sino documentar lo que se probó y la diferencia de tiempo. Guarde sus propios registros de tales cosas en una base de datos y muy pronto, tendrá una forma de ver las mejoras de rendimiento más probables para probar basadas en datos duros en muchos clientes. Desarrollar un programa de base de conocimiento te ayudará inmensamente a medida que pasa el tiempo.

También invertiría en un conjunto de libros sobre ajuste del rendimiento de la base de datos (al menos uno para cada uno de los principales backends de base de datos ya que el ajuste es muy específico de la base de datos) y el diseño de la base de datos. Creo que podrá rastrear muchos, muchos problemas de rendimiento en el diseño de una base de datos incorrecta y la falta de conocimiento sobre cómo escribir un buen código SQL que funcione bien. El ajuste del rendimiento de la base de datos es mucho más extenso que saber qué índices crear.

+0

+1 Gracias, especialmente por Hardware y por política. – KLE

1

Algunos requisitos de habilidades generales se pueden encontrar en The Art of Application Performance Testing. Las habilidades que he encontrado útiles son:

  • Estadísticas: las pruebas de rendimiento nunca devuelven los mismos tiempos exactos dos veces. Debe averiguar cuál es el margen de error para ver si los cambios son estadísticamente significativos.
  • habilidades de analista de negocios: necesita ver qué hacen los usuarios finales, qué partes sienten que son lentas y luego crear casos de prueba para esos eventos. Al final de sus mejoras de rendimiento, los usuarios deberían poder notar la diferencia, y los resultados de sus pruebas deberían cuantificar esto.
  • generalista de tecnología - Los problemas de rendimiento pueden ocurrir en cualquier lugar. Debes comprender cada parte de la tecnología en la pila para poder aislar el problema. Los problemas de rendimiento pueden ser causados ​​por la latencia, las redes, la base de datos y el código. Es posible que los desarrolladores tengan 4 GB de memoria RAM en sus cajas, y las personas que ingresen datos y usen el código tengan una máquina de 512 MB.

La ventaja de ser un consultor es que puede tener una visión de extremo a extremo. Los desarrolladores probablemente conozcan áreas de su código que corren despacio, pero puede no ser significativo para el tiempo total de procesamiento. Sí, ese ArrayList # contiene ejecuciones de llamadas en el tiempo O (n), pero solo puede llevar unos pocos ms en hardware moderno.

Cuestiones relacionadas