Sobes.tech

Node.js

Funksional proqramlaşdırmanın üstünlükləri və çatışmazlıqları nədir?

Senior
227

Təklif alsanız, nə vaxt işləməyə başlaya bilərsiniz?

Senior
226

INNER JOIN və LEFT JOIN arasındakı fərq nədir? Sağ cədvəldə uyğun sətir yoxdursa, solda olan sətirə nə baş verir?

Senior
191

Bir komandanın idempotent olması nə deməkdir?

Senior
178

Tətbiqdə bir və ya hər iki funksiyanı həyata keçirin: istifadəçi siyahıdakı ikon ilə saytları sabitləyə və çıxara bilər; sabitlənmiş saytlar siyahının yuxarısında göstərilməlidir. İkinci funksiya sizin ixtiyarınızdadır və seçiminizə bağlıdır.

Senior
171

Niyə indi şirkəti dəyişmək istəyirsiniz?

Senior
164

JavaScript/TypeScript-də || və ?? operatorları arasındakı fərq nədir? Əgər retryLimit 0 olaraq təyin olunarsa, nə baş verəcək?

Senior
153

Şərhi silin 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() }) Siyahını səhifələmək 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

Heç vaxt vahid testlər yazmısınız? Həddindən çoxmu?

Senior
98

Xətanı tapın · TypeScript Ağıllı Xətalar Bu səkkiz parçanın hər biri tərtib edir, qeyri-rəsmi nəzərdən keçir və yaxşı görünür. Hər biri bir xətanı gizlədir. Hər biri üçün: nə pozulur, hansı şərtlər altında — və necə aşkar edərdiniz. Yüksək səslə düşünün. Biz kodu necə oxuduğunuzla maraqlanırıq, stopwatch ilə deyil. Hər şeyi düzgün tapmaq lazım deyil. 01 Sifariş vermək 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, `Sifariş ${id} təsdiqləndi`) return id } } 02 Profil yeniləmək app.post('/profile', async (req, res) => { const profile = parseProfile(req.body) try { await db.profiles.update(req.user.id, profile) } catch (err) { logger.warn('profil yeniləməsi uğursuz oldu', err) } res.status(200).json({ status: 'yadda saxlanıldı' }) }) 03 Şərhi silmək 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 Siyahını səhifələmək function paginate<T>(items: T[], page: number, pageSize: number): T[] { const start = page * pageSize const end = start + pageSize return items.slice(start, end) } // çağırıcı const results = paginate(rows, page, 20) // səhifə UI-də 1-dən başlayır 05 Məqalələri müəllifləri ilə yükləmək 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 Konfiqurasiya üçün standart dəyərləri həll etmək interface Settings { retryLimit?: number displayName?: string } function resolveConfig(s: Settings) { return { retryLimit: s.retryLimit || 3, displayName: s.displayName || 'Anonim', } } 07 Endirim köməkçisini sınaqdan keçirin function applyDiscount(price: number, percent: number): number { return price - price * (percent / 100) } describe('applyDiscount', () => { it('endirim tətbiq edir', () => { const spy = vi.fn().mockReturnValue(90) const result = spy(100, 10) expect(result).toBeDefined() expect(result).toBe(90) }) }) 08 Ən yüksək balları hesablamaq 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) // ... daha sonra, başqa yerdə: renderRawResults(results) // gözlənilir [4, 1, 9, 2]

Senior
79