Функционалды бағдарламалаудың артықшылықтары мен кемшіліктері қандай?
Node.js
Ұсыныс алсаңыз, қашан жұмысқа кірісе аласыз?
INNER JOIN мен LEFT JOIN арасындағы айырмашылық неде? Сол жақ кестеден жолға сәйкес келетін жол болмаса, ол не болады?
Команда идемпотентті болғанда не білдіреді?
Қолданбада бір немесе екі функцияны жүзеге асырыңыз: пайдаланушы тізімдегі белгімен сайттарды бекітіп, босата алады; бекітілген сайттар тізімнің жоғарғы жағында көрсетілуі керек. Екінші функция сіздің қалауыңыз бойынша міндетті емес.
Неге дәл қазір компанияны өзгертуге ниеттесіз?
JavaScript/TypeScript-тегі || және ?? операторлары арасындағы айырмашылық неде? Егер retryLimit 0-ге орнатылса, не болады?
Пікірді жою 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() }) Тізімді беттеу function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) }
Бірлік тесттерін жаздыңыз ба? Қандай деңгейде?
Қате табу · TypeScript Ақылды қателер Осы сегіз үзіндідің әрқайсысы компиляцияланады, кездейсоқ шолу өтеді және жақсы көрінеді. Әрқайсысы бір қателікті жасырады. Әрқайсысы үшін: не бұзылатынын, қандай жағдайларда — және оны қалай анықтайтыныңызды айтыңыз. Дауыстап ойлаңыз. Біз сіздің кодты қалай оқитыныңызға қызығамыз, секундомермен емес. Барлығын дәл табуыңыз керек емес. 01 Тапсырыс беру 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, `Тапсырыс ${id} расталды`) return id } } 02 Профильді жаңарту app.post('/profile', async (req, res) => { const profile = parseProfile(req.body) try { await db.profiles.update(req.user.id, profile) } catch (err) { logger.warn('профильді жаңарту сәтсіз аяқталды', err) } res.status(200).json({ status: 'сақталды' }) }) 03 Пікірді жою 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 Тізімді беттеу function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) } // шақырушы const results = paginate(rows, page, 20) // бет UI-де 1-ден басталады 05 Мақалаларды авторларымен жүктеу 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 Баптауда әдепкі мәндерді шешу interface Settings { retryLimit?: number displayName?: string } function resolveConfig(s: Settings) { return { retryLimit: s.retryLimit || 3, displayName: s.displayName || 'Аноним', } } 07 Жеңілдік көмекшісін сынау function applyDiscount(price: number, percent: number): number { return price - price * (percent / 100) } describe('applyDiscount', () => { it('жеңілдікті қолданады', () => { const spy = vi.fn().mockReturnValue(90) const result = spy(100, 10) expect(result).toBeDefined() expect(result).toBe(90) }) }) 08 Жоғары ұпайларды есептеу 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) // ... кейінірек, басқа жерде: renderRawResults(results) // күтілуде [4, 1, 9, 2]