Sobes.tech

Node.js

¿Cuáles son las ventajas y desventajas de la programación funcional?

Senior
227

¿Cuándo podrás comenzar a trabajar si recibes una oferta?

Senior
226

¿Cuál es la diferencia entre INNER JOIN y LEFT JOIN? ¿Qué sucede con la fila de la tabla izquierda si no hay una fila correspondiente en la tabla derecha?

Senior
187

¿Qué significa que un equipo sea idempotente?

Senior
178

Implementa una o ambas funciones en la aplicación: un usuario puede fijar y desfijar sitios con un icono en la lista; los sitios fijados deben mostrarse en la parte superior de la lista. La segunda función es opcional a tu criterio.

Senior
170

¿Por qué quieres cambiar de empresa ahora mismo?

Senior
162

¿Cuál es la diferencia entre el operador || y el operador ?? en JavaScript/TypeScript? ¿Qué pasará si retryLimit se establece en 0?

Senior
151

Eliminar un comentario app.delete('/comments/:id', requireAuth, async (req, res) => { const comment = await db.comments.findById(req.params.id) if (!comment) { return res.status(404).end() } await db.comments.delete(comment.id) res.status(204).end() }) Paginar una lista function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) }

Senior
117

¿Alguna vez has escrito pruebas unitarias? ¿Hasta qué punto?

Senior
98

Detecta el error · TypeScript Errores astutos Cada uno de estos ocho fragmentos compila, pasa una revisión casual y parece estar bien. Cada uno oculta un error. Para cada uno: dime qué rompe, bajo qué condiciones, y cómo lo detectarías. Piensa en voz alta. Nos interesa cómo lees el código, no en un cronómetro. No es necesario acertar en todo. 01 Realizar un pedido interface Notifier { send(to: string, message: string): Promise<void> } class OrderService { constructor(private readonly notifier: Notifier) {} async placeOrder(order: Order): Promise<OrderId> { const id = await this.repo.save(order) this.notifier.send(order.customerEmail, `Order ${id} confirmed`) return id } } 02 Actualizar un perfil app.post('/profile', async (req, res) => { const profile = parseProfile(req.body) try { await db.profiles.update(req.user.id, profile) } catch (err) { logger.warn('profile update failed', err) } res.status(200).json({ status: 'saved' }) }) 03 Eliminar un comentario app.delete('/comments/:id', requireAuth, async (req, res) => { const comment = await db.comments.findById(req.params.id) if (!comment) { return res.status(404).end() } await db.comments.delete(comment.id) res.status(204).end() }) 04 Paginar una lista function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) } // llamador const results = paginate(rows, page, 20) // la página empieza en 1 en la interfaz 05 Cargar artículos con autores async function loadArticlesWithAuthors(): Promise<ArticleView[]> { const articles = await db.query('SELECT * FROM articles WHERE published = true') const views: ArticleView[] = [] for (const article of articles) { const author = await db.query('SELECT * FROM users WHERE id = $1', [article.authorId]) views.push({ ...article, author: author[0] }) } return views } 06 Resolviendo valores predeterminados en la configuración interface Settings { retryLimit?: number displayName?: string } function resolveConfig(s: Settings) { return { retryLimit: s.retryLimit || 3, displayName: s.displayName || 'Anonymous', } } 07 Probando un helper de descuentos function applyDiscount(price: number, percent: number): number { return price - price * (percent / 100) } describe('applyDiscount', () => { it('aplica un descuento', () => { const spy = vi.fn().mockReturnValue(90) const result = spy(100, 10) expect(result).toBeDefined() expect(result).toBe(90) }) }) 08 Calculando las puntuaciones principales function topScores(scores: number[], take = 3): number[] { return scores.sort((a, b) => b - a).slice(0, take) } const results = [4, 1, 9, 2] const podium = topScores(results) // ... más tarde, en otro lugar: renderRawResults(results) // esperado [4, 1, 9, 2]

Senior
78