Golang
¿Qué más recuerdos interesantes tienes sobre las tareas de producto y negocio en las que participaste o realizaste por tu cuenta?
¿Cómo funciona un índice compuesto (A, B, C) en las consultas?
¿Qué sucede si durante el enriquecimiento uno de los servicios no está disponible (por ejemplo, el servicio con el nombre completo/datos del usuario)? ¿Se detiene todo Kafka?
Cuéntame sobre tu experiencia trabajando con PostgreSQL. ¿Has abordado cuestiones de optimización?
¿Qué mostrará el programa? ¿Por qué? ```go func main() { timeStart := time.Now() _, _ = <-worker(), <-worker() println(int(time.Since(timeStart).Seconds())) } func worker() chan int { ch := make(chan int) go func() { time.Sleep(3 * time.Second) ch <- 1 }() return ch } ```
¿Cuál es la diferencia entre procesos, hilos y goroutines en Go?
¿Cómo averiguar por qué el bolígrafo responde lentamente? ¿Cómo usar pprof?
Cuéntame cómo optimizaste las consultas. De 10-12 minutos a 5-7 — ¿qué informes son esos que tardan tanto en ejecutarse?
¿Qué es el patrón Outbox y cómo se implementa?
¿Qué significa el ampersand (&) antes de http.Client{}?
¿Cómo fue el proceso desde la idea de negocio hasta la venta?
Implementa una función para encontrar el servicio con la mayor cantidad de registros en cada namespace. ¿Cuál es la complejidad de los algoritmos para top-1, top-2, top-10?
Si le hacemos una oferta, ¿cuánto tiempo le tomaría unirse?
/* Hay dos servidores PostgreSQL: * PROD - servidor OLTP, * STATS - servidor para consultas analíticas prolongadas. En el servidor actual, en la base de datos prod, hay una tabla grande (10Tb) de la siguiente forma: CREATE TABLE profiles( id SERIAL, data JSONB ) En la tabla pueden haber "agujeros", es decir, algunos `id` pueden estar ausentes. Se necesita escribir un programa para copiar la tabla profiles desde PROD a STATS. Se supone que se usarán las siguientes interfaces para trabajar con bases de datos: type Row []interface{} type Database interface { // la implementación de la interfaz Database puede volver a establecer conexiones // la llamada a SaveRows es idempotente io.Closer GetMaxID(ctx context.Context) (uint64, error) LoadRows(ctx context.Context, minID, maxID uint64) ([]Row, error) // [minID, maxID] SaveRows(ctx context.Context, rows []Row) error } func Connect(ctx context.Context, dbname string) (Database, error) // CopyTable // Si full=false, continuar la transferencia de datos desde el lugar del error anterior // Si full=true, transferir todos los datos func CopyTable(fromName string, toName string, full bool) error { // ... tu código } Si se pasa la opción `full=false`, el programa debe continuar la transferencia de datos desde el lugar del error anterior. Si `full=true`, debe transferir todos los datos. **Nivel básico**: - transferencia secuencial de datos en un solo hilo - recuperación ante fallos (opción `full=false`) Información adicional: - si es necesario, puedes ampliar la interfaz agregando tus propios métodos - si es necesario, puedes usar directamente el paquete **database/sql**
Hay particionamiento de usuarios por ID. El servicio recibe una solicitud para actualizar la contraseña de un usuario — ¿qué sucede después a nivel del servicio?
¿Dónde se almacenaron los registros?
¿Cuál es la diferencia entre una goroutine y un hilo del sistema operativo?
¿Para qué está escrito este código? ¿Qué problema técnico de negocio resuelve?
Resumen sobre producción: quién despliega, quién monitorea, etc.
func maxPlaces(arr []int) int { maxDistance := 0 prev, first := -1, -1 for i := 0; i < len(arr); i++ { if arr[i] == 1 { if first == -1 { first = i maxDistance = max(maxDistance, i) } else { maxDistance = max(maxDistance, (i - prev) / 2) } prev = i } } maxDistance = max(maxDistance, len(arr) - 1 - prev) return maxDistance }