Ant Financial de 5 lados, Pinduoduo de 3 lados, batido de bytes de 2 lados, comparte la experiencia del abuso, ¡ya tienes una oferta de Ants!

Ant Financial

un lado

Al mismo tiempo, hice un problema de algoritmo y solicité que se completara en dos horas. Di una matriz de longitud N con elementos repetidos y pedí que mostrara el décimo número más grande. El problema típico de TopK se resuelve mediante el algoritmo de clasificación rápida.

Las preguntas algorítmicas deben prestar atención a la verificación de legalidad, las condiciones de límite y el manejo anormal. Además, si desea escribir casos de prueba, debe asegurarse de que los escenarios de cobertura de prueba sean lo más completos posible. Además de las preguntas habituales del algoritmo de cepillado, este tipo de evaluación no debería ser un problema.

Debido a la limitación de la extensión del artículo, es imposible mostrar todas las preguntas de la entrevista en forma de texto. Este artículo selecciona algunas preguntas de la entrevista para todos

Mucho apoyo, puede obtener información gratis después de tres años consecutivos (promesa: 100% gratis)

Canal de inicio rápido: ( haga clic aquí ) para descargar! ¡Lleno de sinceridad! ! !

Dos lados

  • Auto presentación
  • ¿Ha contribuido con código a un proyecto de código abierto? (¿Dubbo mencionó un error que imprime el registro de acceso?)
  • ¿Qué está haciendo actualmente en el departamento, cuáles son los sistemas internos, las funciones y los procesos de interacción en una breve introducción al negocio?
  • ¿Qué pozos ha pisado Dubbo y cómo los han resuelto? (Dijo el problema de la captura de excepciones comerciales durante el manejo de excepciones y personalizó un interceptor de excepciones)
  • Comience a entrar en el tema y hable sobre su comprensión de la seguridad de subprocesos (acceso multiproceso al mismo objeto, si no necesita considerar la sincronización adicional, el comportamiento de llamar al objeto puede obtener el resultado correcto es seguridad de subprocesos)
  • ¿Cuáles son las características de las transacciones? (ÁCIDO)
  • ¿Cómo entender la atomicidad? (Bajo la misma transacción, múltiples operaciones tienen éxito o fallan, y no hay un éxito parcial o un fracaso parcial)
  • ¿La diferencia entre bloqueo optimista y bloqueo pesimista? (El bloqueo pesimista asume que se producirán conflictos, y los bloqueos deben adquirirse primero al acceder para garantizar que solo los subprocesos adquieran el bloqueo al mismo tiempo, y las lecturas también se bloquearán; los bloqueos optimistas suponen que no habrá conflictos, y solo verifica si hay un conflicto al enviar la operación) ¿Cómo se implementan estos dos bloqueos en Java y MySQL? (El bloqueo optimista de Java se implementa a través de CAS, y el bloqueo pesimista se implementa a través de la sincronización. El bloqueo optimista de MySQL se implementa a través de MVCC, que es la versión, y el bloqueo pesimista se puede lograr mediante la selección ... para actualización más bloqueo exclusivo)
  • ¿Por qué HashMap no es seguro para subprocesos? (La operación multiproceso no tiene control de concurrencia. Por cierto, el acceso multiproceso provocará un punto muerto durante la expansión y se formará un bucle. Sin embargo, el problema de la operación multiproceso que forma un bucle durante la expansión se ha resuelto en JDK 1.8, pero en subprocesos múltiples Usar HashMap también tendrá algunos otros problemas, como la pérdida de datos, por lo que HashMap no debe usarse en subprocesos múltiples, pero debe usarse ConcurrentHashMap) ¿Cómo hacer que HashMap sea seguro? (El método de sincronización de Colecciones envuelve un mapa seguro para subprocesos, o usa directamente ConcurrentHashMap) ¿Cuál es la diferencia entre los dos? (El primero agrega sincronizar directamente a los métodos put y get, mientras que el segundo usa bloqueos segmentados y CAS admite una mayor concurrencia)
  • ¿Qué optimizaciones se han realizado en ConcurrentHashMap en jdk1.8? (Si se usa el árbol rojo-negro para el elemento de matriz al insertar, el diseño de bloqueo segmentado se cancela y la sincronización reemplaza el bloqueo de bloqueo) ¿Por qué está optimizado? (Evite la longitud de la lista vinculada cuando el conflicto es grave, mejore la eficiencia de la consulta y aumente la complejidad del tiempo de O (N) a O (logN))
  • ¿Entiendes el mecanismo maestro-esclavo de redis? ¿Como paso?
  • ¿Ha tenido alguna experiencia en el ajuste de GC?
  • ¿Hay algo que quieras preguntar?

Tres lados

  • Preséntate brevemente
  • ¿Cómo funciona el sistema de monitoreo, en qué módulos se dividen y cómo interactúan los módulos? ¿Qué base de datos se utiliza? (MySQL) ¿Qué motor de almacenamiento se utiliza y por qué utilizar InnnoDB? (Transacción de soporte, índice agrupado, MVCC)
  • ¿El formulario de pedido está dividido? ¿Cómo dividirlo? (División vertical y división horizontal)
  • La descripción del proceso de consulta después de la división horizontal
  • ¿Qué pasa si los datos que caen en un determinado fragmento son grandes? (De acuerdo con ciertas reglas, como módulo hash, rango, dividir una sola tabla en varias tablas)
  • ¿Hay algún problema con el módulo hash? (Sí, los datos están distribuidos de manera desigual y la expansión y la contracción son relativamente complicadas)
  • Cómo resolver la presión de la lectura y la escritura después de la subbase de datos y la tabla. (Un maestro y varios esclavos, varios maestros y varios esclavos)
  • ¿Cómo asegurarse de que la clave principal sea única después de dividirla? (UUID, algoritmo de copo de nieve)
  • ¿La identificación generada por Snowflake se incrementa globalmente y es única? (No, solo se trata de incrementos de una sola máquina, únicos a nivel mundial)
  • ¿Cómo lograr una identificación única incrementada globalmente? (Hablando sobre el método de TDDL de tomar un lote de ID a la vez y luego asignarlos lentamente a nivel local)
  • Hablemos de la estructura del índice de Mysql (hablando de árbol B +, el árbol B + puede buscar nodos hoja en orden, porque los nodos hoja almacenan nodos de datos y están ordenados)
  • La diferencia entre un índice de clave principal y un índice ordinario (el nodo de hoja del índice de clave principal almacena la fila completa de registros y el nodo de hoja del índice normal almacena el ID de clave principal. Al realizar una consulta, debe hacer una tabla consulta) ¿Tienes que consultar la tabla? (No necesariamente, cuando el campo de consulta es el campo indexado o parte del índice, no es necesario volver a la tabla, que también es el principio de cobertura del índice)
  • ¿Dónde está el cuello de botella actual de su sistema?
  • ¿Cómo planeas optimizar? Hable brevemente sobre sus ideas de optimización.
  • ¿Hay algo que quieras preguntarme?

Todos los lados

  • Presentarte
  • ¿Por qué hacer ingeniería inversa?
  • ¿Cómo entender los microservicios?
  • ¿Cómo se logra la gobernanza del servicio? (Hablando de la realización de limitación de corriente, medición de presión, monitoreo y otros módulos)
  • ¿No es esto algo que hace el middleware? ¿Por qué lo hace su departamento? (No había un equipo de middleware separado en ese momento, y los microservicios se lanzaron pronto, y se necesitaban monitoreo y optimización del rendimiento)
  • Habla sobre el ciclo de vida de la primavera.
  • Hable sobre el proceso GC (hablando sobre las condiciones desencadenantes y el proceso de reciclaje de young gc y full gc y el proceso de creación de objetos)
  • ¿Qué pasa con CMS GC? (Algoritmo de limpieza concurrente, basura flotante, pausa corta)
  • ¿Cómo evitar la basura flotante? (Recuerde que hay una configuración de parámetros de VM que permite que el gc joven se realice una vez antes de escanear la nueva generación, pero debido a que gc es programado automáticamente por la máquina virtual, no se garantiza que se ejecute. Sin embargo, hay parámetros que permiten la máquina virtual para forzar que el joven gc se ejecute una vez)
  • ¿Cuál es el problema de forzar a un joven gc? (El tiempo de pausa STW aumenta)
  • ¿Conoce G1? (Aprende un poquito)
  • ¿Qué es el proceso de reciclaje? (gc joven, fase concurrente, fase mixta, gc completo, dicho conjunto de Recuerdos)
  • ¿Cómo es la capa inferior de Remember Set que mencionaste?
  • ¿Hay algo que quieras preguntar?

Cinco lados

Cinco aspectos son para HRBP, principalmente hablaron sobre la experiencia previa en prácticas en Ant, qué está haciendo el departamento, desarrollo profesional, prestaciones sociales, etc. Los entrevistadores de Ali tienen poder de veto de un voto y valoran si sus valores coinciden o no, y generalmente prefieren candidatos que sean honestos. RR.HH. debe ser honesto, no mientas, mientras mientas, RR.HH. lo verificará y cortará directamente.

  • ¿Quién fue el supervisor durante la pasantía?
  • ¿Qué hizo la pasantía?
  • ¿Qué opinas de la tecnología? ¿Qué pila de tecnología usas habitualmente?
  • ¿Has estado investigando algo recientemente?
  • ¿Qué opinas de SRE?
  • ¿Tiene alguna expectativa para el tratamiento?

resumen

Las entrevistas de hormigas prestan más atención a lo básico, por lo que las habilidades básicas de Java deben ser sólidas. El ambiente de trabajo de Ant es bastante bueno, porque estoy al frente del departamento de garantía de estabilidad y hay muchos grupos separados, como Clase 1 durante tres años, que es muy juvenil. El nivel básico de los entrevistadores es relativamente alto, básicamente P7 o superior, además de lo básico, también hicieron muchas preguntas sobre el diseño de la arquitectura y la cosecha fue bastante grande.

Pinduoduo

un lado

  • ¿Explicación de HashMap y TreeMap en Java? (TreeMap árbol rojo-negro, ordenado, HashMap desordenado, matriz + lista vinculada)
  • ¿Cuál es la complejidad temporal de la escritura de consultas TreeMap? (O (logN))
  • ¿Qué pasa con el multiproceso de HashMap? (Seguridad del hilo, punto muerto) ¿Cómo solucionarlo? (Synchronize + CAS se usa en jdk1.8. Al expandir la capacidad, use CAS para verificar si hay algún cambio. Si es así, inténtelo de nuevo.) ¿Habrá algún problema al volver a intentarlo? (CAS (Compare And Swap) es comparación e intercambio, no causará bloqueo de subprocesos, pero debido a que el reintento se logra a través del giro, aún tomará tiempo de CPU, y también existe el problema de ABA) ¿Cómo resolverlo? (Tiempo de espera, limitar el número de giros, ABA se puede resolver con la variable principal AtomicStampedReference, el principio usa el número de versión para la comparación) ¿Qué pasa si se excede el número de reintentos y aún falla? (sincronizar bloqueo mutex)
  • ¿Cuál es la diferencia entre CAS y sincronizar? ¿No es posible usar sincronizar? (CAS es un bloqueo optimista, no necesita ser bloqueado, la atomicidad lograda a nivel de hardware; la sincronización se bloqueará, la atomicidad lograda a nivel de JVM. Diferentes escenarios de uso, cuando el conflicto de subprocesos es serio, CAS causará una presión excesiva de la CPU , lo que resulta en una disminución en el rendimiento, sincronizar El principio es girar primero y luego bloquear. Los conflictos de subprocesos son graves y todavía hay un mayor rendimiento, porque los subprocesos están bloqueados y no ocuparán la CPU)
  • ¿Qué pasa si desea garantizar la seguridad de los hilos? (ConcurrentHashMap)
  • ¿Cómo logra ConcurrentHashMap la seguridad de los subprocesos? (Bloqueo de segmento)
  • ¿Es necesario bloquearlo y por qué? (No, palabra clave volátil)
  • ¿Cuál es el papel de los volátiles? (Visibilidad de la memoria garantizada)
  • ¿Cómo se implementa la capa inferior? (Hablando sobre la memoria principal y la memoria de trabajo, la barrera de la memoria de lectura-escritura, suceder antes y dibujar el diagrama de interacción del hilo en el papel)
  • ¿Cómo garantizar la visibilidad en CPU de varios núcleos?
  • Hablando del proyecto, ¿cómo interactúan los sistemas?
  • ¿Cuánta simultaneidad hay en el sistema y cómo optimizarlo?
  • Dame una hoja de papel, dibuja nueve cuadrados, completa los números, da una matriz MN e imprime los números MN en sentido antihorario comenzando desde 1, lo que requiere que la complejidad del tiempo sea lo más baja posible
  • Primero puedes hablar sobre tus pensamientos (recordado, cuándo dijiste las condiciones para cambiar de dirección, derecha, abajo, izquierda, arriba, etc.)
    ¿Qué quieres preguntarme?

Dos lados

  • Presentarme
  • ¿Tienes otras ofertas? (Toma la oferta de las hormigas)
  • ¿Cuál es la estructura organizativa del departamento?
  • ¿Cuáles son los módulos del sistema, qué tecnologías se utilizan en cada módulo y cómo fluyen los datos? Me dieron un trozo de papel y dibujé brevemente el flujo entre los sistemas en él.
  • ¿Cómo se transmite la información de seguimiento de enlaces? (El archivo adjunto de RpcContext habla de la estructura de Span: parentSpanId + curSpanId)
  • ¿Cómo garantiza SpanId la singularidad? (UUID, habló sobre cambios internos de personalización)
  • ¿En qué dimensión se pasa RpcContext? (Hilo)
  • ¿Cómo se implementa la llamada remota de Dubbo? (Hablando sobre el proceso de lectura de configuración, ensamblaje de url, creación de Invoker, exportación de servicios, registro de servicios y consumidores a través de proxy dinámico, filtro, obtención de lista de Invoker, balanceo de carga, etc.
  • ¿Cómo se implementa el singleton de Spring? (Formulario de registro Singleton)
  • ¿Por qué implementar un marco de gobernanza de servicios por separado? (Dijo que los microservicios internos acaban de ser lanzados pronto, principalmente para alguna monitorización y optimización del rendimiento de los servicios)
  • ¿Quién lidera? ¿Sigue utilizándose internamente?
  • ¿Has pensado alguna vez en cómo hacerlo universal?
  • ¿Hay algo que quieras preguntar?

Tres lados

Tras la cara del segundo jefe, entrevistó directamente a RR.HH., preguntando principalmente sobre el desarrollo profesional, si hay otras ofertas, y la intención de ingresar al puesto.Por cierto, los beneficios y beneficios de la empresa son más convencionales. Pero lo que tengo que decir es que si tienes otras ofertas o experiencia con grandes fábricas, obtendrás algunos puntos extra.

resumen

El proceso de entrevista de Pinduoduo es mucho más sencillo, después de todo, es una empresa que lleva más de tres años establecida. La dificultad de la entrevista es moderada, siempre que la base sea sólida, no debería ser un problema. Pero tengo que decir que la intensidad del trabajo es muy alta. Antes del inicio de la entrevista, RR.HH. me confirmó de antemano si puedo aceptar un trabajo tan intenso. El viejo hierro que quiera venir debe estar preparado.

Byte batiendo

un lado

  • Preséntate primero
  • Habla sobre el proyecto, ¿qué significa el sistema inverso?
  • Hablar sobre el proyecto, qué tecnologías se utilizan en el sistema inverso.
  • ¿Cómo determinar el número de subprocesos en el grupo de subprocesos?
  • ¿Cómo determinar si se trata principalmente de una operación IO?
  • ¿Cómo determinar si son operaciones computacionales?
  • ¿Está familiarizado con Redis y qué estructuras de datos conoce? (Dijo zset) ¿Cómo se implementa la capa inferior de zset? (Tabla de salto)
  • ¿Cuál es el proceso de consulta de la tabla de salto y la complejidad temporal de la consulta y la inserción? (Hablando de buscar desde la primera capa, si no está satisfecho, sumérjase en la segunda capa para encontrar, porque cada capa está en orden, escriba el tiempo la complejidad de la entrada y la inserción son ambas O (logN))
  • ¿Entiendes el árbol rojo-negro, la complejidad del tiempo? (Dijo que es un árbol equilibrado N-ario, O (logN))
  • Dado que la complejidad de tiempo de las dos estructuras de datos es O (logN), ¿por qué zset no usa árboles rojo-negro? (Las tablas de salto son fáciles de implementar y el costo de pisar hoyos es bajo. El árbol rojo-negro debe rotarse cada vez que se inserta para mantener el equilibrio, lo cual es complicado de lograr)
  • Asentí con la cabeza y hablé sobre el principio de Dubbo? (Hablando sobre el proceso de registro y liberación del servicio e invocación al consumidor) ¿Ha pisado algún pozo? (Hablando de problemas de registro de acceso de impresión y manejo de excepciones de dubbo)
  • ¿CAS entiende? (Hablando de la realización de CAS) ¿Conoces otros mecanismos de sincronización? (Hablando de sincronizar y la diferencia entre los dos, un candado optimista, un candado pesimista)
  • Hagamos un problema, matriz A, 2 * n elementos, n números impares, n números pares, diseñemos un algoritmo para que los números impares en la matriz sean todos números impares y los números pares sean números pares.
  • Permítanme hablar primero sobre su idea (comience a recorrer desde el subíndice 0, si es un subíndice impar para determinar si el elemento es impar, omítalo, de lo contrario busque el siguiente número impar desde esta posición)
  • ¿El próximo número impar? ¿Como encontrar?
  • ¿Algunas ideas? (Aún es atravesar la matriz una vez y juzgar el subíndice. Si el atributo del subíndice no coincide con el elemento en la posición, atraviesa el elemento de la matriz junto al subíndice actual y luego reemplázalo)
  • Su complejidad de tiempo es un poco alta. Si necesita O (N), ¿qué debe hacer? (Piénselo por un momento y responda "Defina dos punteros, comience a recorrer desde los subíndices 0 y 1, respectivamente. Cuando encuentre números impares, la posición es par y el número par es impar. Simplemente deténgase e intercambie contenido ")
  • El tiempo casi se acaba, vayamos primero. ¿Qué quieres preguntarme?

Dos lados

  • Te presentas primero
  • ¿Cómo entiende la gobernanza del servicio?
  • ¿Cómo alcanzar el límite actual en el proyecto? (Guayaba ratelimiter, algoritmo de cubeta de tokens)
  • ¿Como funciona? (El punto principal es que la tasa es fija y la cantidad de tokens es limitada)
  • Si de repente muchos subprocesos solicitan tokens al mismo tiempo, ¿cuál es el problema? (Dando como resultado una gran cantidad de solicitudes pendientes y bloqueo de subprocesos)
  • ¿Cómo resolverlo? (Puede poner la acumulación de solicitudes en la cola de mensajes y procesarlas de forma asincrónica)
  • ¿Qué pasa si no utilizo la cola de mensajes? (Hablando de la estrategia de preconsumo de RateLimiter)
  • ¿Cómo se almacena y transfiere el contexto del rastreo distribuido? (ThreadLocal + spanId, el spanId del nodo actual se usa como el spanId padre del siguiente nodo)
  • ¿Cómo se pasa el RpcContext de Dubbo? (ThreadLocal) ¿Cómo pasar el ThreadLocal del subproceso principal al grupo de subprocesos? (Dijo que la información de contexto se obtiene primero en el hilo principal a través del método get de ThreadLocal, y se crea un nuevo ThreadLocal en el grupo de hilos y la información de contexto obtenida previamente se establece en ThreadLocal. Tenga en cuenta que el ThreadLocal creado por el hilo el grupo debe crearse manualmente en la eliminación final, de lo contrario habrá pérdidas de memoria)
  • ¿Cómo ocurrió exactamente la pérdida de memoria que mencionaste? (Hablando de la estructura de ThreadLocal, hay principalmente dos escenarios: el hilo principal todavía tiene una referencia a ThreadLocal y el hilo principal no tiene una referencia a ThreadLocal. En el primer escenario, debido a que el hilo principal todavía se está ejecutando, hay sigue siendo una referencia a ThreadLocal, entonces la referencia y el valor de la variable ThreadLocal no se reciclarán. En el segundo escenario, aunque el hilo principal no tiene una referencia a ThreadLocal, y la referencia es una referencia débil, se reciclará en el tiempo de gc, pero el valor usado no es una referencia débil, no será reclamado por la memoria y aún causa pérdida de memoria)
  • ¿El subproceso del grupo de subprocesos tiene que eliminarse manualmente para recuperar el valor? (Sí, porque el subproceso principal del grupo de subprocesos siempre existe, si no se limpia, la variable threadLocals del subproceso principal siempre contendrá la variable ThreadLocal)
  • ¿Entonces quiere decir que la pérdida de memoria se refiere al hilo principal o al grupo de hilos? (Hilo principal)
  • Pero el hilo principal no ha salido todo, ¿no deberían reciclarse los objetos a los que se hace referencia?
  • Entonces, ¿cómo le dice a SpringMVC información de inicio de sesión de usuario diferente para garantizar la seguridad de los subprocesos?
  • ¿No es suficiente usar ThreadLocal directamente? ¿Has visto algún código que implemente un bloqueo en SpringMVC?
  • Hablemos de mysql, hablemos de la estructura del índice (árbol B +)
  • ¿Por qué utilizar el árbol B +? (Hablando de alta eficiencia de consulta, O (logN), puede hacer un uso completo de las características de lectura anticipada de disco, árbol de múltiples ramas, pequeña profundidad, nodos de hoja ordenados y almacenar datos)
  • ¿Qué es la cobertura de índices?
  • ¿Por qué Java diseña un modelo de delegación padre?
  • ¿Cuándo necesita un cargador de clases personalizado?
  • Hagamos un problema, escribiendo a mano un grupo de objetos
  • ¿Hay algo que quieras preguntarme?

resumen

La entrevista de Toutiao es realmente muy profesional. Cada vez que el entrevistador le enviará un enlace de video por adelantado, y luego comenzará la entrevista a tiempo, los lugares de inspección estarán relativamente completos.

Los entrevistadores tienen una característica, captarán un punto digno de profundizar o usted no lo dejó claro y profundizará hasta que aclare este punto, de lo contrario el entrevistador sentirá que no lo comprende realmente. El segundo entrevistador me dio algunas sugerencias. Cuando se investiga tecnología, debemos estudiar los antecedentes y averiguar qué problemas específicos se resuelven en qué escenarios. De hecho, muchas tecnologías están interrelacionadas internamente.

para resumir

Hay dos cosas que hacer antes de la entrevista: currículum y presentación personal. El currículum debe ser una buena revisión de algunos de los proyectos que ha realizado, y luego seleccionar algunos proyectos destacados. La autopresentación está básicamente disponible en cada ronda de entrevistas, por lo que es mejor practicar con anticipación y averiguar qué decir y cómo decirlo por separado. Además, la tecnología mencionada en el currículum debe haber sido investigada en profundidad por mí mismo.Si no hay una investigación en profundidad, lo mejor es encontrar algo de información para calentar y no pelear batallas sin preparación.

Gracias por ver aquí, soy un programador Maidong , un practicante de desarrollo de Java , he estado en la industria durante seis años y comparto artículos técnicos relacionados con Java o información de la industria todos los días.

Invitamos a todos a seguir y comentar el artículo, y recibir rápidamente el canal: ( haga clic aquí ) ¡para obtenerlo gratis! ¡Lleno de sinceridad! ! !

Supongo que te gusta

Origin blog.csdn.net/weixin_47066028/article/details/109528125
Recomendado
Clasificación