Sobes.tech

Golang

¿Qué son los canales en Go? ¿Cuáles existen? ¿Cómo funcionan internamente?

194

// Al actualizar un pedido, debemos enviar los datos del pedido a varios servicios (APIs de terceros) // el número de servicios está creciendo (puede ser miles+) // escribimos el código, al principio todo iba bien, pero con el tiempo nuestro servicio empezó a consumir mucha memoria func (s *orderService) SendOrder(ctx context.Context, hosts []string, order Order) { for i := 0; i < len(hosts); i++ { go func() { // Imaginemos que esto es una llamada de red larga response, err := s.httpClient.Send(ctx, hosts[i], order) if err != nil { s.logger.Error(ctx, "falló al enviar", err) return } s.logger.Info(ctx, "éxito", response) }() } }

Middle+
194

¿Qué es el contexto en Go? ¿En qué se diferencia context.WithTimeout de context.WithDeadline?

191

¿Cuáles son las formas de concatenar cadenas en Go? ¿En qué se diferencian + y strings.Builder?

191

¿Qué es el bloqueo pesimista?

190

¿Cómo hacer que todos los eventos de un mismo pedido se asignen a una sola partición de Kafka?

187

¿Qué pasará con Redis y los clientes si Redis está lleno y las políticas de expulsión están desactivadas?

187

¿Cómo se implementó el almacenamiento en caché de datos? ¿Qué política de caché se utilizó?

187

¿Qué es la cola de letras muertas (DLQ)?

184

¿Qué es un slice? ¿Qué hay debajo del capó de un slice? ¿Cómo funciona la función append?

184

// tabla productos: // ID | cnt_view // ----------- // 1 | 100 // dos usuarios comenzaron a ver el producto con id = 1 al mismo tiempo // y en nuestra base de datos se lanzaron 2 transacciones en paralelo // ¿cuál será el resultado? postgresql func IncrementView(ctx context.Context, db *sql.DB, id int64) error { tx, err := db.BeginTx(ctx, nil) if err != nil { return err } defer tx.Rollback() var cnt int err = tx.QueryRowContext(ctx, "SELECT cnt_view FROM goods WHERE id = $1", id, ).Scan(&cnt) if err != nil { return err } cnt++ _, err = tx.ExecContext(ctx, "UPDATE goods SET cnt_view = $1 WHERE id = $2", cnt, id, ) if err != nil { return err } return tx.Commit() }

Middle+
178

¿Cómo se calculó la cifra del 25%? ¿Por qué no 20 o 30?

176

¿Qué son Mutex y RWMutex? ¿En qué se diferencian?

175

¿Cómo funciona el recolector de basura en Go? ¿Cuándo se ejecuta? ¿Se puede ejecutar manualmente?

173

func (r *OrderRepository) GetActiveOrderIDs(ctx context.Context, offset, limit int) ([]uint32, error) { var ( res []uint32 args []interface{} ) query := `SELECT id FROM "order" WHERE is_terminated = false LIMIT $1 OFFSET $2;` args = append(args, limit, offset) rows, err := r.slave.Query(ctx, query, args...) if err != nil { return nil, err } for rows.Next() { var orderID uint32 if err = rows.Scan(&orderID); err != nil { return nil, err } res = append(res, orderID) } return res, nil }

Middle+
172

¿Qué son las cadenas en Go? ¿Qué representan bajo el capó?

169

¿Qué herramientas de perfilado hay en Go?

167

¿Hubo matices y dificultades en la implementación de Kafka? ¿Fue su primera experiencia de implementación?

166

¿Qué es la alineación de estructuras en Go? ¿Cómo optimizar los campos de la estructura en memoria?

166
/3