Codica - корисне про IT
2.03K subscribers
2.88K photos
144 videos
35 files
1.49K links
Привіт, друже, це канал про корисності в ІТ🤘

🔺Даємо практичні матеріали з RoR, JavaScript, QA, DevOps
🔺Розкажемо як знайти першу роботу без хвилювань та проблем

✍️Для звʼязку-@klimenko_nataly

👉 Відкриті вакансії - www.codica.com/careers
Download Telegram
🎯 Як відповідати на технічні питання на співбесіді?

#codica_interviews

👉 Ми завжди кажемо: до співбесід потрібно готуватись заздалегідь.
👉 Тож давайте розбиратись разом — без заучування, але з розумінням.
1️⃣ Контрольовані та неконтрольовані компоненти в React
📌 Очікувана відповідь:

📍 Контрольований компонент (Controlled component) – це коли значення елемента форми повністю контролюється React через state.

Тобто:
• значення input зберігається у state
• кожна зміна проходить через onChange → setState
• UI завжди відображає state

Приклад:
function InputExample() {
const [value, setValue] = React.useState('');

return (
<input
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}


👉 React – єдине джерело істини (single source of truth).

📍 Неконтрольований компонент (Uncontrolled component) – це коли значення зберігається в DOM, а React лише читає його при потребі (через ref).

Приклад:
function InputExample() {
const inputRef = React.useRef(null);

const handleClick = () => {
console.log(inputRef.current.value);
};

return (
<>
<input ref={inputRef} />
<button onClick={handleClick}>Submit</button>
</>
);
}


👉 Джерело істини – DOM, а не React state.

📌 Коли що використовувати:
📍 Controlled
• складні форми
• валідація в реальному часі
• залежні поля / динамічний UI
• коли потрібно повністю контролювати дані

📍 Uncontrolled
• прості форми
• швидкі прототипи
• інтеграція зі сторонніми бібліотеками (наприклад, legacy JS або non-React)
• коли не потрібен контроль на кожен input event

⚠️ Що часто питають додатково:
• при controlled компонентах більше ререндерів → можливі перформанс-проблеми на великих формах
• uncontrolled компоненти складніше тестувати та валідовувати
• не можна змішувати
value

і
defaultValue

в одному input
 • defaultValue

використовується саме для uncontrolled компонентів

І бажаємо успіхів на співбесідах!
Крок за кроком – до оферу
🚀

TikTok | Instagram | Telegram
🔥4
Думаєте, де зараз реально зберегти й примножити гроші в Україні? 💸

Попри всі обмеження, державні облігації (ОВДП) залишаються найпопулярнішим інструментом для приватних інвесторів — стабільні, прості й звільнені від податків.

👩‍💼 Юлія, бухгалтерка з команди Codica, пояснює, як сьогодні працює ринок облігацій, яку дохідність можна отримати, які ризики існують і як обрати випуск під свої фінансові цілі.

📥 Збережіть цей гайд, щоб зрозуміти, коли і які ОВДП вигідно купувати.

#codica_articles

TikTok | Instagram | Telegram
3👍3
Хто з нас не мріяв бодай на вечір опинитися на місці головного героя з Уолл-стріт?

Ми часто сприймаємо такі фільми як чисту розвагу: красиві історії про великі угоди, азарт і мільйони на рахунках. Але якщо придивитися, у них значно більше сенсів, ніж здається на перший погляд.

Ловіть підбірку стрічок про гроші, які варто подивитися уважніше. Звертайте увагу на рішення героїв, їхні стратегічні помилки та реальну ціну, яку вони платять за свій успіх. 💰

А після перегляду — діліться думками в коментарях. Нам дуже цікавий ваш фідбек! 💬

Гарного вечора та крутих інсайтів!

TikTok | Instagram | Telegram
👍31🗿1
Знаєш цей момент, коли думаєш: “та це ж просто background job, що тут може піти не так?” 🙂

А потім з’являється Sidekiq, черги, ретраї, і раптом усе стає трохи складніше, ніж здавалося.

Майже кожен Rails-проєкт має background jobs:
відправити email, порахувати щось, синхронізуватися з API чи згенерувати звіт.

І здається, що це просто… поки не починаються перші нюанси.

📍 Rails без магії: 7 помилок, які роблять навіть мідли
3
І майже кожен з нас колись писав джобу так:
class ChargeUserJob
def perform(user_id)
user = User.find(user_id)
PaymentService.charge(user)
end
end

Все працює. Поки не спрацює retry.

Sidekiq за замовчуванням робить повторні спроби.
І якщо джоба не є ідемпотентною, ти можеш отримати:
• подвійний платіж
• дубльовані записи
• повторну інтеграцію з зовнішнім сервісом
• хаос у станах

Ми всі так робили 🙂

Що таке ідемпотентність простими словами?
Ідемпотентна операція – це така, яку можна виконати кілька разів, і результат залишиться однаковим.

Наприклад:
• “створити запис” – не ідемпотентно
• “встановити статус = paid” – ідемпотентно
• “списати 100 грн” – дуже небезпечно
• “перевірити, чи вже списано, і якщо ні – списати” – вже ближче

Де найчастіше ламаються джоби
🔹 HTTP інтеграції без перевірки стану
🔹 Відсутність унікальних індексів
🔹 Немає перевірки “чи вже виконано”
🔹 Використання
create!

замість
find_or_create_by

🔹 Логіка, яка залежить від “попереднього стану” без блокувань

Як писати безпечні background jobs
1️⃣ Використовувати унікальні індекси в БД
add_index :payments, :external_id, unique: true

Validation не захистить від race condition. Індекс – так.

2️⃣ Робити перевірку перед виконанням
return if payment.processed?
payment.process!


3️⃣ Використовувати транзакції
ActiveRecord::Base.transaction do
...
end


4️⃣ Думати про retry як про нормальний сценарій
Не “якщо впаде” – а “коли впаде”.
Sidekiq retry – це не виняток, це частина механіки.

Міні-правило, яке рятує нерви
Якщо твоя джоба не витримає повторного виконання – вона небезпечна.

Особливо якщо це:
• гроші
• доступи
• інвентар
• інтеграції

У кого був продакшн-кейс із дублем через retry? І що тоді рятувало – індекс чи гарячий фікс?
😄

TikTok | Instagram | Telegram
🔥4
Що виведе цей код?
Anonymous Quiz
5%
3
3%
5
93%
8
0%
nil