¿Ha utilizado patrones de Bandeja de entrada y Bandeja de salida?
Golang
Tarea: «Ping-pong con timeout» Escribe una función pingPong que: - Inicie dos goroutines: una genera mensajes "ping", la otra — "pong". - Las goroutines deben intercambiar mensajes a través de un canal común estrictamente por turnos. - El intercambio continúa durante 3 segundos, después de lo cual el programa debe terminar (apagado ordenado). - Usa un contexto para cancelar con un timeout. - Muestra cada mensaje en pantalla junto con el tiempo (en milisegundos desde el inicio). Ejemplo de salida esperada: 0ms: ping
Tarea sencilla de codificación en vivo (competencia básica) Condición: Escribe una función fetchAll(urls []string) map[string]string, que para cada URL realice una solicitud HTTP GET de manera concurrente y devuelva un mapa donde la clave sea la URL y el valor sea el cuerpo de la respuesta (cadena). Si la solicitud falla (error, no 200), el valor será una cadena vacía. Restricciones: - No se pueden usar bibliotecas externas (solo las estándar). - No se puede cambiar la firma. - El programa no debe fallar ante un pánico en http.Get. Ejemplo de entrada: ["[link]" "[link]" "[link]"]
paquete principal importar ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }
¿Dónde se almacenaron los registros?
Qué decirle al entrevistador (si te pregunta) "Usaría un grupo de trabajadores con un número fijo de workers, un canal para tareas y sync.WaitGroup. Los workers realizarán las solicitudes, y el timeout y la cancelación se controlarán a través del contexto. Reuniré los resultados en un buffer, protegido por un mutex (o a través de un canal separado)." Ahora es tu turno Escribe el código en este chat. Lo revisaré y te daré retroalimentación. Si no sabes por dónde empezar, pide una pista. ¡Buena suerte!
¿Cómo aseguraron la idempotencia?
// todos los elementos del slice deben ser únicos + deben consistir en 1000 elementos en total // el programa no debe colgarse por mucho tiempo debido a time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("incremento duplicado") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }
¿Qué es un puntero y qué pasará si el argumento de una función es un puntero?
Llenar el slice con elementos sin mutex para que tenga los 1000 elementos.
Habla sobre los bloqueos en Postgres.
¿En qué se diferencia DELETE de TRUNCATE?
¿Has oído hablar de la trazabilidad distribuida?
¿Cómo usaron Redis?
Cuéntame sobre tu último proyecto.