Результати пошуку за запитом: начальный курс c
Яку ІТ-спеціальність обрати у 2023 році?
Автор: Влад Сверчков
Коротко про українське ІТ в 2022 році.
Український ІТ-спеціаліст у 2022 році.
Аналітичні огляди сучасного ІТ.
Які ІТ-спеціальності будуть затребувані у 2023 році?
Кому потрібне гарне володіння англійською мовою?
Висновки.
Вітаємо наших читачів!
Українське ІТ демонструє чудові міцність та адаптивність навіть в умовах повномасштабної війни. Так, багатьом айтішникам довелося здійснити вимушене переселення в інші регіони країни, ба навіть інші держави, аби знаходитися у відносній безпеці. Однак більшість зберегла за собою роботу і доходи, які дозволяють не тільки забезпечувати себе та свої родини необхідними умовами та засобами для життя, але ще й активно донатити на армію та різноманітні волонтерські проєкти – середній донат станом на червень 2022 року становив $270 на місяць (відповідно до результатів опитування на DOU).
Стабільність та гарні умови праці, можливість віддаленої роботи з будь-якої точки світу, де є інтернет, велика кількість ІТ-напрямків на вибір – ці та інші особливості стали вельми затребуваними у багатьох українців. З’явилася велика кількість бажаючих спробувати свої сили в ІТ, і піднялися одні з найголовніших питань: “З чого почати? Яку ІТ спеціальність обрати у 2023 році?”.
А й дійсно – як грамотно оцінити ситуацію на ринку ІТ та обрати собі спеціальність, яка:
буде подобатися;
матиме гарні кар’єрні перспективи;
буде забезпечувати задовільні умови праці та ЗП?
Будемо розбиратися з цим у даній статті. Ми розглянемо найголовніші спеціальності, які будуть оптимальними для новачків та матимуть попит на ринку ІТ ще довгий час.
Коротко про українське ІТ в 2022 році
Не встиг світ оговтатися від кризи, спричиненої коронавірусом, як одразу з’явилася нова внаслідок повномасштабного вторгнення росії на територію України.
Відповідно до аналітики Opendatabot – українського ресурсу, що надає доступ до державних даних та аналізує відкриті дані, – ІТ-послуги стали єдиним напрямком бізнесу, який показав приріст у 2022 році в порівнянні з 2021 – аж на 27% (січень-травень 2022). А друге дослідження показує, що за 8 місяців даного року відбулося зростання експорту ІТ-послуг на 16% у порівнянні з відповідним періодом у 2021 році. У серпні 48% усіх послуг, що експортувалися Україною, належали саме ІТ-галузі.
Красномовною є і статистика Джину – українського ресурсу з анонімного пошуку вакансій.
Попит на Djinni перевищує кількість пропозицій майже втричі. У вересні – 18 779 відкритих вакансій і 52 405 кандидатів.
З посту в телеграм-каналі Джину легко бачити, що у серпні 2022 було понад 250 тисяч відгуків на вакансії – це при тому, що з серпня 2021 по лютий 2022 кількість відгуків кожного місяця коливалася в межах від 77 до майже 111 тисяч.
Ще один серпневий пост демонструє залежність середньої кількості відгуків на вакансію від вимоги до досвіду кандидата. Таким чином:
кандидати без досвіду – 75.25 відгуків на вакансію;
1 рік досвіду – 31.36 відгуків;
2 роки – 12.39;
3 роки – 5.76;
5 років – 4.1.
У новачків сезон справжніх “голодних ігор”.
Тим не менш, ІТ-сектор демонструє гарну стійкість та позитивну динаміку попри негаразди війни. Це перспективна галузь, яка не тільки дає масу переваг українцям-айтішникам, але й гарно підживлює економіку.
Варто не забувати, що така успішність багато в чому залежить від закордонних замовників, адже переважна більшість українських ІТ-продуктів та ІТ-послуг експортуються за кордон – приблизно 95% (за матеріалами “Економічної правди”).
Український ІТ-спеціаліст у 2022 році
Звернемося також і до свіжого портрету українського ІТ-спеціаліста від DOU за 2022 рік (15 135 респондентів).
Найбільша кількість чоловіків відповідно до напрямків:
DevOps, SRE (97.3%);
системне адміністрування (95.8%);
CTO, найвищі керівні посади (92.9%);
розроблення ПЗ, Software Engineering (91.3%);
розроблення ігор (89.5%);
Data Science (80.3%);
технічна служба підтримки (70%);
тестування (65.8%);
менеджерські посади (64.9%).
Найбільша кількість жінок у HR/Recruiting (90%), маркетингу (64%) та технічному письменництві (62%). За ними йдуть дизайн (45.6%), сфера продажів (44%) та аналітика (42.5%).
Відповідно до картинки вище, найбільша кількість опитаних українських айтішників працює у якості розробників. Далі йде професія тестувальника, менеджера, HR/рекрутера і т. д.
З картинки вище видно, що найчастіше респонденти мають тайтл Middle (1-5 років досвіду) та Senior (3-9 років). Розробники рівня Junior складають 16.2% (до 2-х років досвіду), а інтерни – всього 1.3% (без досвіду).
Найбільша кількість початківців (Junior та Intern) серед:
HTML Coder (45%);
Data Science (27%);
Game Developers (25%);
аналітики (24%);
тестувальники (23%).
При цьому ІТ України нараховує багато початківців. 6% опитаних знаходяться в ІТ менше року, 59% працевлаштовані в ІТ 5 років або менше, а 71% мають до 6-ти років досвіду за своєю поточною спеціалізацією.
87% респондентів мають вищу освіту, а 8% з них – навіть дві. Ще 5% є студентами і тільки на шляху до отримання диплому. Науковим ступенем володіє близько 2% опитаних. Найчастіше це ті, хто розробляє ПЗ під різну електроніку (Hardware Engineers – 9%), Data Science спеціалісти (7%) і представники найвищих керівних посад – CTO/CEO (6%).
Щодо англійської: в цьому році 53% респондентів оцінили свій рівень як Upper Intermediate (вище середнього) або Advanced (поглиблений). 33% визначають свій рівень як Intermediate (середній).
На зображенні бачимо, що найбільш цікава робота у керівників найвищої ланки (а хто б сумнівався?), спеціалістів у сфері маркетингу та HR/рекрутерів (критерії “цікава” та “дуже цікава”).
Найбільш невдоволеними виявилися сисадміни, Support та спеціалісти з продажів. Фахівці перших двох напрямків спеціалізуються на вирішенні технічних проблем, тому часті смикання під час роботи, необхідність швидко все полагодити та афілійовані із цими процесами стреси для них не є рідкістю. Ще можна додати відносно невисоку медіанну ЗП – $1000-$1045 – трохи вища за Junior розробника. А невдоволення спеціалістів із продажів можна пов’язати з великою відповідальністю і наслідками частого спілкування з різними клієнтами: Sales Manager-и повинні завжди демонструвати впевненість, знати все про свою компанію та свій продукт, діяти так, аби не заплямувати їх імідж, швидко знаходити відповіді на запитання клієнтів та виконувати інші професійні обов’язки.
Аналітичні огляди сучасного ІТ
Скористаємося аналітикою всесвітньовідомого ресурсу Stack Overflow, яким користується абсолютно кожний програміст сучасності. Порівняємо останні на сьогоднішній день опитування, проведені даним ресурсом – Stack Overflow Developer Survey 2022 (70 000 респондентів) та Stack Overflow Developer Survey 2021 (80 000 респондентів). В опитуваннях брали участь фахівці із різних куточків світу.
З ілюстрації вище видно, що найпопулярнішими напрямками, в яких працюють ІТ-спеціалісти, є:
Електронна комерція – інтернет-магазини, фінансові та торгові угоди і транзакції, проведені через інтернет тощо.
Фінансові технології – оптимізація та вдосконалення фінансових послуг, які надає той чи інший бізнес, компанія, корпорація і т. д.
Розроблення мобільних додатків під Android та iOS.
Медіа сфера.
Медичні технології – поліпшення якості та безпеки медичних послуг різноманітного характеру.
Розроблення ігор під різноманітні платформи.
Далі йдуть напрямки, що цьогоріч не перетнули 5-відсотковий бар’єр.
Із зображення вище бачимо, що найбільша кількість спеціалістів належить до наступних ІТ-напрямків:
FullStack – розроблення серверної + клієнтської частини вебдодатків;
BackEnd – серверна сторона вебдодатків;
FrontEnd – клієнтська частина вебдодатків;
Desktop or enterprise – розроблення настільних додатків (Desktop-додатків), розроблення додатків для потреб бізнесу (Enterprise).
На наступних сходинках йдуть:
розробники мобільних додатків – як для Android, так і для iOS;
DevOps спеціалісти – синхронізують всі етапи розроблення ПЗ: від створення коду до тестування та релізу;
інженери з хмарних технологій – займаються хмарною (cloud) інфраструктурою;
адміністратори баз даних;
системні адміністратори.
Переглянемо перші позиції цього ж рейтингу, але за 2021 рік.
Спостерігаємо аналогічну картину: перші позиції зайняті напрямками FullStack, BackEnd, FrontEnd, Desktop, Enterprise, Mobile Development, DevOps.
Звернемося і до рейтингів мов програмування. Опитування Stack Overflow 2022:
Опитування Stack Overflow 2021:
Перше місце в обох рейтингах займає мова програмування JavaScript, яка широко застосовується у web девелопменті (і у FrontEnd, і в BackEnd царинах). Далі йдуть мови верстання – HTML & CSS – інструменти, які застосовуються під час створення візуальної складової вебсайтів та вебдодатків (FrontEnd). На третє місце цьогоріч потрапляє SQL – мова запитів для роботи з реляційними базами даних (БД), яку обов’язково використовують розробники серверної частини вебдодатків, адміністратори БД та інші спеціалісти.
Python, Java та C# – дуже затребувані серед роботодавців та популярні серед розробників мови програмування, які вирізняються широким спектром застосування, зрозумілістю синтаксису, відносною простотою. Вони потрапляють у кожен ТОП-10 різноманітних мовних опитувань вже протягом багатьох років; їхня перспективність та актуальність обіцяє утримуватися ще довгий час. Особливою популярністю користується Python, оскільки його синтаксис максимально простий та лаконічний.
TypeScript – це та сама JavaScript, тільки з декількома нововведеннями та строгою типізацією для збільшення читаності коду і зменшення кількості ймовірних помилок. Використовується у веброзробці разом із відповідними фреймворками та платформами.
Node.js – платформа, яка розширює можливості та область застосування JavaScript (бекенд, настільні додатки, мікроконтролери).
Bash/Shell/PowerShell – інструменти, які найчастіше стають у нагоді системним адміністраторам та DevOps інженерам, бо дозволяють автоматизувати різноманітні рутинні процеси, завдяки чому вони і отримали високі позиції в рейтингу.
C/C++ – це сучасні корифеї від світу ІТ-розроблення. Непрості у вивченні мови, які при цьому мають дуже великі можливості та потужності. Незамінні під час створення ресурсоємного ПЗ, ігор, мікроконтролерів тощо.
PHP – класична мова серверного розроблення. Незважаючи на її вік, досі популярна та затребувана.
Розглянемо також і рейтинг мов відповідно до індексу TIOBE. Він щомісячно оцінює популярність мов програмування та вважається респектабельним джерелом – маса аналітиків посилається на нього в ході своїх досліджень.
Рейтинг TIOBE відрізняється від опитування Stack Overflow – це пов’язано з різницею опорних точок цих аналітик. Стек оверфлоу спирається на опитування, а статистика TIOBE ґрунтується на кількості кваліфікованих інженерів у всьому світі, а також на кількості курсів та сторонніх постачальників. Такі відомі пошукові рушіїі та сервіси, як Google, Yahoo!, Wikipedia, Amazon, Bing, YouTube та Baidu використовуються у розрахуванні рейтингів. Варто зазначити, що TIOBE не вказує, яка мова є найкращою, або якою написано найбільшу кількість коду. Він може бути використаний, аби виявити, чи відповідають ваші навички запитам сучасності, або, щоб прийняти стратегічне рішення щодо того, яку мову слід використати для створення нового додатку або програмної системи. Більше інформації стосовно методів визначення індексу за посиланням.
Рейтинг мов відповідно до індексу PYPL має наступний вигляд:
PYPL створений за рахунок аналізу того, наскільки часто люди шукають в пошуковій системі Google туторіали (інструкції) з мов програмування. Простіше кажучи, чим більше гуглять туторіали до тієї чи іншої мови, тим вища її позиція в рейтингу.
Розглянемо список популярних вебтехнологій відповідно до опитування Stack Overflow за 2022-й та 2021-й роки відповідно:
Як видно з діаграм, головні позиції належать FrontEnd бібліотекам та фреймворкам – jQuery, React.js, Vue.js, Angular, BackEnd-технологіям (Node.js, Express) а також технологіям .NET платформи – ASP.NET та ASP.NET Core. Після них йдуть фреймворки Django і Flask (Python).
Список інших фреймворків, бібліотек та інструментів розроблення:
Наразі перше місце посідає платформа .NET від компанії Майкрософт. Потім йдуть технології напрямку Python: NumPy (дає доступ до низки математичних конструкцій), Pandas (маніпулювання даними та їх аналіз). За ними – фреймворк Spring (Java), який призначений для веброзроблення. Менш популярними є інструменти Python для роботи з даними та ML – TensorFlow, Scikit-learn, а також платформи для мобільного розроблення – Flutter та React Native.
Отримані відомості вже дають достатньо уявлення про те, що зараз відбувається на ринку IT-послуг і дозволяють робити певні прогнози щодо затребуваності IT-професій.
Які ІТ-спеціальності будуть затребувані у 2023 році?
FrontEnd Developer
FrontEnd – це відгалуження у розробленні, спрямоване на створення клієнтської сторони вебдодатків, вебсайтів або іншого ПЗ та інформаційних систем: зовнішній вигляд застосунків, користувацька логіка, анімації – все, із чим користувач може взаємодіяти напряму.
Коли кажуть про FrontEnd або BackEnd, найчастіше мають на увазі саме Web стихію. Насправді ж, фронтенд і бекенд бувають не лише у вебі але й у десктопних та мобільних застосунках. Однак історично склалося, що під цими двома термінами розуміють саме веб складову, тому і в цій статті ми будемо притримуватися цих традицій.
Відповідно до аналізу Stack Overflow Developer Survey 2022 та 2021 років, а також аналізу індексів TIOBE та PYPL, ядро фронтенду – HTML, CSS та JavaScript – досі є затребуваним і використовується багатьма розробниками.
Крім того, ресурси з пошуку роботи в ІТ містять велику кількість вакансій FrontEnd Developer. Наприклад, на вже згаданому Djinni на момент написання статті було опубліковано 1399 пропозицій за напрямком JavaScript / FrontEnd, тоді як на C# / .NET, Java та Python спеціальності припадало 678, 884 та 514 вакансій відповідно.
ІТ-індустрія має великий попит на FrontEnd розробників, тому немає жодних сумнівів, що цей напрямок буде актуальним і у 2023-му році.
BackEnd Developer (Python, Java, C#, PHP)
BackEnd – це відгалуження у розробленні, спрямоване на створення серверної сторони вебдодатків або вебсайтів: взаємодія застосунку з БД, робота з даними користувача, серверна та обчислювальна логіка, програмно-апаратна частина сервісу – все, що приховано від користувача і знаходиться “під капотом”.
На озброєнні BackEnd девелопер тримає одну з популярних мов програмування: C# / PHP / Python / Java / JavaScript (Node.js) / Ruby тощо. Також даний спеціаліст знає безліч супутніх технологій та інструментів серверного розроблення.
BackEnd розвивається паралельно з FrontEnd-ом, айті-ринок має багато відповідних пропозицій з гарними умовами праці, тому перспективність вивчення даного напрямку є очевидною.
Full Stack Developer
Синтез двох вищеописаних спеціальностей. Не секрет, що будь-який працедавець цінує співробітника, який може успішно виконувати декілька задач, поєднуючи в собі обов’язки інших спеціалістів. Так само і в ІТ – особливо цінними є розробники, які здатні своїми знаннями та навичками покрити декілька професій, а в даному випадку – FrontEnd та BackEnd.
Детальний розбір спеціальності Full Stack Developer ви знайдете в нашій статті. В ній ми пояснюємо специфіку даного напрямку, необхідні для вивчення технології, переваги та недоліки професії, а також даємо важливі поради щодо опанування цього фаху.
Mobile Developer (Android / iOS)
Мобільне розроблення є відносно молодим, оскільки зародилося трохи більше двох десятків років тому. За цей час воно зазнало багатьох змін і сьогодні очолює одну з головних позицій в ІТ. При цьому напрацюваннями фахівців цієї сфери користується майже кожна людина — це не лише смартфони та планшети, а й фітнес-браслети, смарт годинники, електронні книги, складові “інтернету речей” та інші гаджети.
Найбільш популярні мови мобільного розроблення: Java / Kotlin під Android розроблення та Objective-C / Swift під iOS.
DevOps інженер
DevOps – це методологія, котра є симбіозом розроблення (Development) та системного адміністрування (Operations). Її головна мета – збільшення частоти випуску релізів. Фахівці даного напрямку також повинні розбиратися у використанні хмарних технологій та мати навички автоматизації інфраструктури.
DevOps Engineers обирають Python у якості основної мови програмування за її лаконічність, багатозадачність та підтримку великого різноманіття спеціальних пакетів, створених для підвищення ефективності цієї мови програмування, а також за інші переваги. Python в основному використовують разом із командною оболонкою Bash, маючи на меті спростити процеси розгортання ПЗ та автоматизувати різні завдання системного адміністрування (написання скриптів).
Фактично, DevOps спеціалісти – це програмісти-сисадміни. Бізнес дуже любить фахівців-мультитулів, тому ця професія дуже актуальна, престижна та є однією з найбільш високооплачуваних в ІТ.
CyberSecurity
IT-індустрія нарощує свої об’єми та потужності, а отже, зростає затребуваність і тих, хто має її захищати. На це і направлена діяльність фахівця з кібербезпеки. Цей напрямок має декілька відгалужень, і ви можете як захищати інфраструктуру від проникнення та вибудовувати надійну оборону (напрямок "захисту"), так і виявляти вразливості шляхом різноманітних хакерських методів – такі фахівці називаються пентестерами (напрямок "атаки").
Можете зануритися в аналіз та ризики (посада Security Analyst та Risk Compliance Specialist відповідно), займатися захистом інфраструктури та пошуком комп'ютерних вірусів (Malware Researcher), а також випробувати себе в багатьох інших «кібербезпекових» спеціальностях – ця сфера дає багато можливостей для реалізації людям із сильними аналітичними здібностями, уважністю, розсудливістю та стресостійкістю.
Database Administrator, DBA
Комфортна життєдіяльність у сучасному світі дуже залежить від баз даних: картотека пацієнтів лікарні, облік студентів та їх успішності, облікові записи користувачів різних сервісів, банківські рахунки, різноманітний контент в інтернеті тощо. Існує реальна потреба у спеціалістах, які вміють грамотно обслуговувати ці БД і супутню інфраструктуру.
Крім цього DBA бере на себе такі функції, як вироблення вимог до баз даних, їх проєктування, реалізація, ефективне використання та підтримка цілісності БД, включаючи керування обліковими записами користувачів БД та захист від несанкціонованого доступу.
Тут важливо володіти мовою запитів SQL, однією із СУБД (PostgreSQL, наприклад), а також різними технологіями та прийомами системного адміністрування.
PM (Project Manager)
Сучасне IT має гострий дефіцит гарних, талановитих проєктних менеджерів – управлінців, котрі керують IT-проєктом загалом. Часто це колишні програмісти чи тестувальники. Однак щоб стати проджект менеджером, необов'язково мати айтішне минуле.
Ключові обов’язки PM: проєктування та розстановка пріоритетів, планування виконання завдань, контроль, комунікації, а також оперативне вирішення проблем всередині проєкту. Найголовніше завдання – зробити так, щоб ідея замовника була реалізована в межах заданих термінів з урахуванням обмеженості ресурсів.
Звичайно, даний перелік обов'язків виконаний широкими мазками. Насправді PM-и часто працюють понаднормово і їхній робочий стан можна описати як "білка в колесі". Але важко щось протиставити післясмаку успішно виконаного проєкту.
Нюанс цієї професії полягає в тому, що посада PM-а передбачає значну конкуренцію. Відповідно до даних, у вересні 2022-го року на сайті DOU на одну вакансію PM-а відгукнулося більше 34-х кандидатів (всього 184 вакансії). Більша кількість відгуків лише у FrontEnd, HR, QA та Legal (право). Тому, щоб отримати бажаний job-офер, необхідно мати не тільки досвід і знання, а й гарні організаторські здібності, а також інші важливі для цієї професії особистісні якості.
QA Engineer, тестувальник
Фахівець із забезпечення якості, він же – тестувальник. І хоча QA та тестувальник – це трішки не одне і те ж саме, але ми прирівняємо їх один до одного, бо це не грає значної ролі в даній статті.
Сфера відповідальності тестувальника – виявлення несправностей, багів ПЗ, допущених розробниками. Затребуваність цих фахівців важко оскаржити, адже кожний програмний продукт перед появою може пройти не одну ітерацію тестування, де виявляється вагома кількість багів. Виходить, без QA ми мали б дуже недопрацьоване ПЗ, а виробник — провал продукту на ринку, падіння репутації та, ймовірно, навіть банкротство.
Тестувальників ділять на два види – Manual QA Engineer та Automation QA Engineer. Перші виконують всю роботу вручну, а другі використовують інструменти автоматизації, у тому числі мови програмування (наприклад Java, Python), що підвищує цінність такого співробітника, і, відповідно, його зарплату. Конкуренція за місце тестувальника в українських реаліях надзвичайно висока, тому для отримання першого job-оферу потрібно буде докласти багато зусиль.
Data Scientist
Вчений-експерт, головними завданнями якого є вилучення з великого масиву даних корисної інформації, яка потім може використовуватися в різних сферах; в основному, це бізнес та наука.
Даний фахівець повинен мати чудове аналітичне мислення, володіти математичним апаратом (включаючи мат. статистику та мат. моделювання), знати програмування (Python, R) та бази даних (як реляційні, так і нереляційні). З початку 2010-х років професія Data Scientist вважається однією з найбільш привабливих, високооплачуваних та перспективних в IT.
Data Analyst
Якщо Data Scientist орієнтується на предиктивну аналітику, то Data Analyst працює з інформацією постфактум. У цього спеціаліста менш технічна роль — він працює зі вже готовими даними, а саме: проводить дескриптивний аналіз, інтерпретує та візуалізує результати, а також презентує звіт своїм замовникам.
При цьому з БД, мовами Python і SQL та іншими інструментами збору та оброблення інформації аналітик також має бути гарно знайомий, аби ефективно виконувати покладені на нього задачі.
Кому потрібне гарне володіння англійською мовою?
Відповідно до вже згаданого портрета ІТ-спеціаліста, високий рівень англійської у тих, хто спілкується з іноземними замовниками та клієнтами або займається просуванням продуктів: Customer Success Manager, Project Manager, найвища ланка керівництва, спеціалісти з продажів, архітектори, техліди.
Також англійська на рівні Upper Intermediate+ у технічних письменників та спеціалістів з роботи з даними (Data Scientists, аналітики).
Розробникам буде достатньо рівня Intermediate, аби читати технічну документацію без зайвих проблем. Однак бажано мати Upper Intermediate та вище, оскільки це не тільки сприяє більш комфортній взаємодії з англомовними ресурсами та іноземними колегами, але й підштовхує вас вгору кар’єрними сходами і, звичайно ж, позитивно впливає на ЗП (відповідно до зарплатного опитування від DOU за літо 2022 року).
Висновки
У цій статті ми постаралися дати вичерпну відповідь на запитання: “Яку IT-спеціальність варто обрати у 2023 році?”. У наших судженнях та висновках ми спиралися на такі авторитетні ресурси (міжнародні та українські), як Stack Overflow, Djinni, DOU, індекси TIOBE та PYPL. Також була проведена кореляція з минулим роком, аби продемонструвати стабільність ринку ІТ-професій та показати, що вкладені вами сили та час у навчання не будуть марними, а обраний вами напрямок нікуди не зникне.
На лідерських позиціях, як і в минулі роки, залишаються Web, Enterprise та Mobile розроблення. Тестувальники також затребувані, хоча і мають надзвичайно велику конкуренцію серед початківців, оскільки це один із найлегших способів потрапити в ІТ, а з початком повномасштабного вторгнення інтерес до ІТ зріс так само стрімко, як і під час ковіду.
Висока затребуваність також і у DevOps інженерів при відносно невисокій конкуренції – 3.7 відгуки на одну вакансію у вересні 2022 року (всього вакансій – 243, джерело).
Звичайно, повномасштабна війна наклала свій відбиток на ІТ у вигляді міграції бізнесів та айтішників на захід України, різкого притоку новачків, збільшення “дистанційних” вакансій та проблем з електроенергією через обстріли росіянами нашої енергетичної інфраструктури, але зарплати залишилися високими – десь навіть підвищилися, – та й в цілому ІТ стоїть і забезпечує як айтішників, так і нашу армію.
То ж навіщо чекати відповідного моменту? Беріть момент та робіть його відповідним! ITVDN – це освітня платформа для онлайн навчання програмуванню та інформаційним технологіям.
Наш портал налічує понад 230 відео курсів та має власні програми навчання за 15 найпопулярнішими IT-професіями, серед яких:
Верстальник сайтів
FrontEnd Developer
Java Developer
Python Developer
C# / .NET Developer
Android Developer
Unity / Game Developer
PHP Developer
та інші.
Формат навчання – записані відео курси, за якими можна навчатися у будь-який зручний час. Таким чином, ви зможете опанувати IT-професію, не виходячи з дому. З усіма спеціальностями можна детально ознайомитись, перейшовши на сторінку спеціальностей ITVDN.
Окрім записаних відео курсів наша освітня платформа надає навчання у новому форматі – Live Online. Він передбачає регулярні онлайн заняття з ментором у невеликих групах із 6-25 осіб, на яких пояснюється новий матеріал, обговорюються нюанси виконання практичних завдань, є перевірка ДЗ та чат для спілкування з одногрупниками, а також доступ до відео курсів ITVDN. У процесі навчання учні також розробляють власний курсовий проєкт, який наприкінці захищають та додають до свого портфоліо.
На даний момент Live Online навчання проводиться за чотирма найпопулярнішими IT-спеціальностями:
C#/.NET Developer
Frontend Developer
Java Developer
Python Developer
Якщо вас зацікавив формат Live Online, переходьте за посиланнями та ознайомтеся з подробицями пропозицій щодо кожної з чотирьох спеціальностей.
Також пропонуємо вашій увазі підбірку вебінарів, які допоможуть вам розібратися в головних моментах тієї чи іншої мови програмування або спеціальності:
Чи варто вчити Ruby у 2023 році?
Як стати Java розробником у 2023 році?
Яку мову програмування вчити в 2023 році?
Огляд корисних ресурсів для вивчення C# та .NET з нуля
Як швидко вивчити Python. Покроковий план з нуля
Як стати PHP розробником та отримати офер від ІТ-компанії
Старт кар’єри в Java розробці. Особистий досвід, актуальні тренди та підводні камені
Що таке DevOps
та інші корисні вебінари – у нашому каталозі.
Сподіваємось, що наша стаття була корисною для вас.З радістю приймемо будь-які побажання та з розумінням і повагою – будь-які зауваження. Обирайте IT-професію вашої мрії та нехай ніщо не зупиняє вас на шляху до неї!
Вивчайте ІТ-спеціальності на ITVDN!
400+ питань на співбесіді щодо С++
Автор: Влад Сверчков
Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке.
Junior
1.1 Общие вопросы
1.2 Метапрограммирование
1.3 Препроцессор и компиляция
1.4 Язык C
1.5 Язык С++ и ООП
1.6 STL / Algorithms
1.7 Многопоточность
1.8 Networking
1.9 OS/Linux
1.10 SCM / CI / CD
1.11 Практические задания
Middle
2.1 Общее
2.2 Препроцессор и компиляция
2.3 Язык С
2.4 Язык С++
2.5 Паттерны проектирования
2.6 Метапрограммирование
2.7 OOP/OOD
2.8 STL / Algorithms
2.9 Многопоточность
2.10 Networking
2.11 SCM / CI / CD
2.12 Практические задания
Senior
3.1 Общее
3.2 Препроцессор и компиляция
3.3 C/C++
3.4 OOP/OOD
3.5 STL / Algorithms
3.6 Многопоточность
3.7 SCM / CI / CD
3.8 Практические задания
Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь.
Junior
Общие вопросы
1. В чем заключаются основные принципы ООП?
2. Что такое сложность алгоритма?
3. Код работает неправильно. Что делать?
4. Объясните такие структуры данных, как стек и очередь.
5. Какие книги, связанные с программированием, читали? Чему с них научились?
6. Что интересного нашли в новых стандартах С++17, С++20?
7. Что такое таблица ASCII?
8. Что такое Unicode?
9. Что такое паттерны проектирования и для чего их используют?
10. Патерны Singleton, Strategy, Template-Method, Decorator?
11. Для чего нужны модульные тесты?
12. Какая разница между модульными и интеграционными тестами?
13. Что такое TDD?
Метапрограммирование
14. Что такое шаблонный класс и шаблонная функция?
15. Что такое конструкторы? Какие типы знаете?
16. Может ли конструктор быть шаблонной функцией?
17. Может ли виртуальная функция быть шаблонной?
18. Что такое инстанциация шаблона?
19. Что такое специализация шаблона? Частичная специализация шаблона?
20. Расскажите об имплементации шаблонных классов в срр-файле?
Препроцессор и компиляция
21. Как проходит процесс компиляции срр-файлов в бинарный файл?
22. Что такое препроцессор?
23. Как работает препроцессор?
24. Какие знаете команды препроцессора?
25. Как работает директива include?
26. Как работает директива define?
27. Что именно линкует линкер?
28. Что такое оптимизация компилятора?
29. Что такое флажки компиляции?
30. Как защитить хедер от повторного включения?
31. Что делает директива include?
32. Как работают макросы?
Язык C
33. Как static влияет на глобальные/локальные переменные?
34. Как сonst влияет на переменную?
35. Какие варианты использования extern знаете?
36. Какие варианты использования volatile знаете?
37. Какие есть битовые операции?
38. Что такое булевая алгебра?
39. Расскажите об этапах разработки библиотеки или программы.
40. Что такое алгоритмы сортировки и какие вы знаете?
41. Какие алгоритмы работы со строками знаете?
42. Какие алгоритмы на графах знаете?
43. Где может храниться переменная?
44. Какая разница между calloc и malloc?
45. Для чего используют realloc?
46. Что такое указатель?
47. Каков размер указателя и от чего он зависит?
48. Какие есть операции с указателями?
49. Что такое struct?
50. Как определить размер структур?
51. Что такое выравнивание в структурах?
52. Что такое union?
53. Какой размер union?
C++/OOP
54. Что такое класс?
55. Какие есть основные типы данных в C++?
56. Что такое инкапсуляция? Как она реализуется в C++?
57. Какие есть встроенные типы в С++?
58. Что такое enum?
59. Как соотносится класс и объект?
60. Какая разница между структурой и классом?
61. Разница между private/protected/public и где они используются?
62. Какие методы класса являются стандартными для класса?
63. Что такое абстрактный класс и зачем он?
64. Сколько памяти занимает объект пустого класса class A {}; ?
65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса?
66. Какие особенности статических полей класса?
67. Какая особенность константных методов-членов класса?
68. Как изменить поле класса в константном методе класса?
69. Какие методы можно вызвать из константных объектов?
70. Что такое куча и стек? Различия, принцип работы.
71. В чем разница между указателем и ссылкой?
72. Для чего нужен указатель на функцию? Как его объявить?
73. Что будет, если забыть вызвать delete? Когда освободится эта память?
74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке?
75. Как работает std::unique_ptr?
76. Как работает std::shared_ptr?
77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти?
78. Расскажите о передаче аргументов по значению, по ссылке и по указателю.
79. Расскажите о порядке вычисления аргументов функции?
80. Что произойдет, если вернуть ссылку на временный объект?
81. Что такое перегрузки функции? Виды перегрузки.
82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++.
83. Что такое инициализация переменной в if?
84. Что такое ленивые вычисления в С++?
85. Расскажите о циклах for и range-for.
86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции?
87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ?
88. Обработка ошибок в С++. Какие конструкции используют при обработке exception?
89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены?
90. Что такое memory leak?
91. Можно ли выбрасывать exception из деструктора?
92. Как отловить деление на 0 в С++?
93. Как работают константные методы?
94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости?
95. Для чего использовать namespace, anonymous namespace?
96. Как вызвать объект из nested namespace?
97. Как работают inline-функции? Может ли такая функция быть рекурсивной?
98. Что такое полиморфизм?
99. Для чего используется наследование?
100. Какие бывают типы наследования?
101. Для чего используют виртуальное наследование?
102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования?
103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс?
104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора?
105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным?
106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора?
107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы?
108. Как запретить наследовать класс?
109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса?
110. Какие есть способы инициализации полей класса?
111. Может ли деструктор быть виртуальным?
112. Что делает ключевое слово virtual?
113. Для чего используют виртуальный деструктор?
114. Что такое глубокое копирование?
115. Что такое виртуальные функции и зачем они нужны?
116. Как защитить объект от копирования?
117. Что такое семантика перемещения?
STL / Algorithms
118. Из чего состоит STL?
119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями?
120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map.
121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются?
122. Какая разница между std::set, std::map, std::unordered_multimap?
123. Что такое идиома remove-erase?
124. Как получить наименьшее значение типа?
125. Какая разница между std::map и std::hashmap?
126. Как подсчитать количество элементов в std::list?
127. Что такое сложность алгоритма и от чего она зависит?
128. В чем разница между vector и list и в каких случаях их лучше использовать?
Многопоточность
129. Что вам известно о многопоточности?
130. Что общего и различного в процессах и потоках?
131. Как синхронизировать передачи информации между потоками?
132. Какая разница между мьютексом и семафором?
133. Что такое deadlock?
134. Является ли С++ thread-safe?
135. Что такое race-condition?
136. Как избежать состояния гонки?
137. Что такое атомарная операция?
138. Как работать с std::mutex?
Networking
139. Что такое сокет?
140. Какие операции можно делать с сокетом?
141. Какая информация нужна, чтобы создать сокет?
142. Какие бывают модели сетей?
143. Расскажите об уровнях модели OSI.
144. Расскажите об уровнях модели TCP/IP.
145. Что такое IP-адрес?
146. Для чего используется маска подсети?
147. Какая разница между IPv4 и IPv6?
148. Сколько памяти необходимо для хранения IPv4?
149. Для чего нужен порт?
150. Сколько максимально может быть портов?
151. Какая разница между TCP и UDP?
152. Для чего такой ненадежный UDP-протокол?
OS/Linux
153. Что такое менеджер пакетов?
154. Какие бывают менеджеры пакетов?
155. Какие бывают дистрибутивы Linux?
156. Что такое PID?
157. Для чего используют файловые дескрипторы?
158. Расскажите о стандартных файловых дескрипторах процесса.
159. Что такое Pipe?
160. Что такое Named Pipe?
161. Что такое UID?
162. Расскажите о командах bash.
SCM / CI / CD
163. Какие есть виды SCM?
164. Для чего используют системы контроля версий?
165. Какие есть команды git?
166. Какие этапы во время комита изменений?
167. Разница между git fetch и git pull?
168. Какие есть этапы решения merge conflict?
Практические задания
169. Посчитайте количество единиц в произвольном числе.
170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний - первым.
171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число.
172. Для структуры типа односвязный список напишите функцию вставки элемента.
173. Реализуйте класс vector.
174. Реализуйте бинарный поиск в массиве.
175. Реализуйте любую сортировку.
176. Реализуйте макрос для сравнения двух строк.
177. Реализуйте реверс строк.
178. Реализуйте перевода числа из строки в int.
179. Реализуйте подсчет слов в предложении.
180. Реализуйте подсчет чисел Фибоначчи.
181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL.
182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов.
183. Напишите класс для логирования, который мог бы логировать к консоли или файлу.
184. Напишите функцию для определения, является ли определенный год високосным.
185. Напишите функцию для определения, является ли определенное слово палиндромом.
186. Напишите реализацию паттерна Singleton.
187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear.
188. Напишите рекурсивный поиск значения в дереве бинарного поиска.
189. Напишите функцию, которая проверяет, является ли дерево сбалансированным.
190. Напишить функцию для поиска уникального элемента в массиве.
Middle
Общее
1. Какие курсы прошли или книги прочитали за этот год? Чему научились?
2. Что нравится и не нравится в С++? Чего не хватает?
3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)?
4. Расскажите о фичах, которые появились в разных версиях языка.
5. Расскажите о модели памяти, которая появилась в С++11 стандарте.
6. Что такое сериализация? Какие библиотеки знаете?
7. Какие знаете паттерны проектирования?
8. Что такое операционная система? Какие существуют типы по назначению?
9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения.
10. Что такое SFINAE и PIMPL?
11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.
Препроцессор и компиляция
12. Расскажите о системах автоматизации билд-процесса.
13. Какая разница между статической и динамической библиотеками?
14. Какая разница между исполнительным файлом и динамической библиотекой?
15. Что такое DLL hell?
16. Что такое флажки компиляции (fPIC)?
17. В чем разница между дебаженной и релизной сборкой?
18. Что нужно для использования сторонней библиотеки?
19. Что такое internal linkage?
C
20. Что будет, если дважды вызвать free?
21. Как происходит вызов функции?
22. Как происходит передача параметров в функцию?
23. Как прорабатывается константа переменных?
24. Что означает ключевое слово inline?
25. Для чего используют выравнивания, можно ли его контролировать?
26. Расскажите о битовых полях.
27. Для чего нужен extern "C"?
28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка?
29. Как экспортировать/импортировать функции из динамической библиотеки?
30. Какая разница между С-style приведением типов и C++ приведением?
C++
31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор?
32. Что такое Uniform initialization? Aggregate initialization?
33. Что такое Reference to temporary object? Как продлить время жизни временного объекта?
34. Что такое делегирующий конструктор?
35. Что такое список инициализации?
36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке?
37. Что случится, если инициализировать поле другим полем?
38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению?
39. Что такое move-семантика?
40. В каких случаях не будет сгенерирован конструктор копирования?
41. Чем отличается конструктор копирования от оператора присваивания?
42. При каких условиях в конструкторе можно выбросить exception?
43. Что такое конструктор по умолчанию? Для чего нужны default и delete?
44. Чем отличается интерфейс от абстрактного класса?
45. Какие виды полиморфизма в С++?
46. Как реализовано наследование в большинстве компиляторов?
47. Множественное наследование: за и против?
48. Виртуальное наследование и порядок конструирования?
49. Зачем использовать override?
50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта?
51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco?
52. Что делает вызов throw; в блоке catch?
53. Чем отличается constexpr от const?
54. Что такое const correctness?
55. В каком случае можно использовать const_cast?
56. Что такое ключевое слово mutable и когда его нужно использовать?
57. Что такое ключевое слово friend и когда его нужно использовать?
58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных?
59. Что такое функтор? Напишите пример.
60. Что такое специализация шаблона?
61. Что такое dynamic_cast и run-time type identification?
62. Что такое exception? Как бросить и поймать?
63. Что будет, если бросить exception из конструктора? А из деструктора?
64. Что будет, если не поймать exception?
65. Что произойдет, если exception выйдет за пределы блока noexcept функции?
66. Для чего можно использовать приватное наследование?
67. Что такое контракт функции?
68. Что такое vptr и vtable?
69. Где содержится vptr?
70. Где содержится vtable?
71. Какая разница между overload and override?
72. Как компилятор различает члены класса и обычные переменные в функциях?
73. Зачем используют exceptions?
74. Что такое блоки try-throw-catch?
75. Расскажите о логике catch-блоков.
76. Что такое move constructor?
77. В чем разница между константным методом и неконстантным?
78. Что такое В-нотация и как определить сложность любого алгоритма?
79. Что такое таблица виртуальных методов?
80. Какие функции класса автоматически генерирует компилятор, если их не определить?
81. Что такое выравнивание данных?
82. Что такое exception?
83. Какие есть стандартные контейнеры и на основе каких структур они построены?
84. Что такое Undefined behavior? Приведите примеры.
85. Как определить, что в программе есть memory leak?
86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор?
87. Что будет, если выделить один объем памяти, а записать больше?
88. Что такое переполнение stack?
Паттерны проектирования
89. Зачем нужны паттерны? Какие типы паттернов различают?
90. Недостатки паттерна Singleton? Когда он уместен?
91. Преимущества и недостатки PIMPL?
92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них?
93. Что такое паттерн Observer?
94. Як контролировать состояние программы? Машину состояний? Паттерн состояние?
95. Что такое паттерн Visitor?
Метапрограммирование
96. Какие есть правила вывода типа в шаблоне?
97. Чем отличается using от typedef?
98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта?
99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?
OOP/OOD
100. Что такое SOLID? Что означает каждый из этих принципов?
101. Расскажите о паттернах проектирования.
102. Что такое Dependency Injection? Приведите пример.
103. Какие преимущества и недостатки функционального подхода?
104. Что такое принцип RAII?
105. Что такое принцип DRY?
106. Что такое принцип KISS?
107. Какие преимущества композиции перед наследованием?
STL / Algorithms
108. Какие алгоритмы с STL использовали? Каких не хватает?
109. Какими особенностями должен обладать класс, чтобы он был итератором?
110. Какие бывают итераторы?
111. Расскажите об инвалидации итераторов.
112. Как оптимизировать удаление элемента со средины вектора?
113. Как реализован vector?
114. Как реализован list?
115. Как расширить STL-контейнеры?
116. Какие есть алгоритмы в STL?
117. В чем разница между vector, deque, list, set e STL?
118. Когда надо использовать map? Когда - unordered_map? Какая сложность поиска и вставки в этих контейнерах?
119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой?
120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры?
121. Расскажите о типах умных указателей и о подсчете ссылок в них.
Многопоточность
122. Является ли С++ thread-safe?
123. В чем разница между многопоточностью и асинхронностью?
124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений?
125. Как передать информацию между несколькими процессами?
126. Как синхронизировать между собой несколько процессов?
127. Какие есть особенности работы с shared memory?
128. Как работает spinlock?
129. Какие вы знаете особенности использования recursive mutex?
130. Расскажите о read-write mutex.
131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция?
132. Как избежать состояния гонки?
133. Чем отличается мьютекс от семафора?
134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard?
135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++?
136. Чем отличается std::launch::async от std::launch::deferred?
137. Что такое атомарная операция? std::atomic?
138. Как работать с std::conditional_variable?
139. Как создать поток с помощью std::thread?
140. На сколько потоков лучше разбить задачу? От чего это зависит?
141. Как работать с std::async?
142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()?
Networking
143. Что такое TCP handshake?
144. Какая разница между TCP и UDP?
145. Расскажите о протоколах верхнего уровня.
146. Какая разница между HTTP и HTTPS?
147. Расскажите об SSL/TLS handshake.
SCM / CI / CD
148. Расскажите о процессах CI.
149. Как отредактировать комит?
150. Расскажите об интерактивном rebase.
151. Какие могут быть способы дебаггинга кода?
152. Для чего нужны Unit test? Чем отличается от Functional Test?
153. Как тестировать код? Какой используете фреймворк?
154. Какие библиотеки знаете для написания тестов?
155. Что такое mock?
156. Сколько тестов нужно написать на одну функцию?
157. Что такое побочный эффект, идемпотентность и чистые функции?
158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации?
159. Что такое CI/CD и какие преимущества приносит для разработчика?
160. Какие принципы итеративных методологий?
161. Какие преимущества и недостатки code-convention?
Практические задания
162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания.
163. Напишите реализацию очереди.
164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере.
165. Напишите thread-safe пул потоков.
166. Напишите игру жизни в ООП стиле.
167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него.
168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS.
169. Напишите свою реализацию std::atomic.
170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний.
171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform.
172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное.
173. Напишите код для решения судоку.
174. Напишите код, который найдет зацикливание в односвязном списке.
Senior
Общее
1. Как вы понимаете SOLID?
2. Как разработать систему плагинов на С++?
3. Что такое RPC? Какие библиотеки знаете?
4. На что обращать внимание при проведении code review?
5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание?
6. Что делать, если код работает медленно?
7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие?
8. Что такое SFINAE? Для чего используется?
9. Что такое метапрограммирование? С помощью чего реализуется на С++?
10. Как использовать variadic templates?
11. Как тестировать закрытые методы?
12. Как считать покрытие тестами? Нужно ли это делать?
13. Что такое cache miss и как это выявить?
14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования?
15. Что такое покрытие кода и как обеспечивается?
16. Опишите принципы lock-free структур данных и свой опыт работы с ними.
Препроцессор и компиляция
17. Расскажите о построении билд-системы.
18. Как работать с билд-системами: Make, CMake.
19. Как интегрировать third-party в проект?
20. Что такое барьеры памяти?
21. Расскажите о работе с сырыми указателями и о ручном управлении памятью.
22. Что такое статический анализатор кода? Какие знаете?
23. Что такое динамический анализатор кода? Какие знаете?
24. Проект медленно собирается. Как можно ускорить?
C/C++
25. Расскажите об использовании realloc в контейнерах.
26. Как работают шаблоны?
27. Расскажите о специализации шаблонов.
28. Как работает RTTI?
29. Можно ли использовать exception в конструкторе/деструкторе?
30. Что такое rvalue и lvalue?
31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash?
32. Что такое placement new? Для чего используют? Как сделать placement delete?
33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями?
34. Как работают точки остановки?
35. Что такое уязвимости? Каков механизм их работы?
36. Как написать собственный std::shared_ptr?
37. Что такое curiously recurring template pattern?
38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr.
39. Какое назначение и отличия использования std::variant и std::any?
40. Какие улучшения получил std::search в С++17 ?
41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов?
42. Что такое Return Value Optimization?
OOP/OOD
43. Объясните принципы SOLID.
44. Объясните принципы KISS.
45. Объясните принципы YAGNI.
46. Какие есть подходы к оптимизации кода?
47. На что стоит обращать внимание при code review?
48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton?
49. Что такое статический полиморфизм?
STL / Algorithms
50. Когда std::vector может использовать std::move?
51. Расскажите о своем любимом алгоритме поиска.
52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации?
53. Опишите назначение execution policy для параллельных алгоритмов.
Многопоточность
54. Расскажите о построении API, рассчитанных на многопоточное использование.
55. В чем разница между kernel-level и user-level потоками?
56. Что такое coroutine?
57. Что делает спецификатор thread_local?
58. Как реализовать синхронизацию в задаче producer-consumer?
59. Як синхронизироваться между различными процессами?
SCM / CI / CD
60. Расскажите о настройке процесса менеджмента ветвей репозитория.
61. Расскажите о стратегии разветвления (branching).
Практические задания
62. Напишите базовую реализацию std::shared_ptr.
63. Реализуйте алгоритм сортировки.
64. Реализуйте алгоритм хеширования.
65. Реализуйте shared_ptr с расширением для weak_ptr.
66. Реализуйте простейший producer-consumer, используя условные переменные.
67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос.
68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой.
Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.
Вивчай Python Базовий безкоштовно — доступ на 30 днів
Автор: Редакція ITVDN
Тільки з 23 по 28 лютого включно — отримай безкоштовний доступ на 30 днів до курсу «Python Базовий» та прокачай одну з найпопулярніших мов програмування
Автор курсу: Дмитро Скорий, Senior Software Engineer у SoftServe.
Курс складається з 10 уроків, тривалість відео уроків 9 годин 21 хвилина.
Що ви опануєте?
Основи ООП у Python: абстракція, інкапсуляція, успадкування, поліморфізм
Побудову архітектури застосунку на рівні класів і об’єктів
Роботу з файлами (TXT, XML, CSV, JSON)
Рекурсію та Python comprehensions
Використання стандартних модулів і створення власних
Правила оформлення коду: PEP8 та PEP20
ООП — це must-have навичка для розробки веб-, десктопних та інших застосунків. Після курсу ви зможете впевнено працювати з класами та методами, грамотно будувати структуру коду й писати зрозумілі рішення.
Для кого цей курс?
Для тих, хто вже завершив рівень «Python Стартовий»
Для тих, хто планує розвиватися в напрямку Python Developer
Для тих, хто хоче систематизувати знання та писати професійний код
🎯 Курс входить до спеціальності Python Developer.
Акція діє з 23 по 28 лютого включно
Не відкладайте розвиток — скористайтеся можливістю навчатися безкоштовно вже зараз.
Новий відеокурс: Angular 21 Базовий
Автор: Редакція ITVDN
Сучасний фронтенд — це вже давно не просто верстка сторінок, а створення повноцінних, динамічних вебзастосунків. Якщо ви хочете перейти від базових знань JavaScript до розробки складних клієнтських рішень — саме час опанувати один із найпопулярніших фреймворків у світі.
Новий курс «Angular 21 Базовий» — це ваш практичний старт у розробці сучасних вебзастосунків із використанням Angular. Ви крок за кроком розберетеся з ключовими можливостями фреймворку: від створення першого проєкту до роботи з компонентами, формами, HTTP-запитами та маршрутизацією.
Автор курсу: Дмитро Охріменко, Co-founder CyberBionic Systematics та ITVDN, Microsoft Certified Trainer та автор курсів з веброзробки та .NET технологій.
Автор курсу допоможе вам зрозуміти не лише «як працює Angular», а й як будувати логічну, масштабовану структуру застосунку, яка використовується у реальних проєктах.
Курс складається з 9 відеоуроків, які поєднують теорію та практику, щоб ви могли одразу застосовувати знання у коді.
Курс охоплює такі теми:
Введення в Angular та створення першого проєкту за допомогою Angular CLI
Робота з HTML-шаблонами та різними типами прив’язки даних
Створення та взаємодія компонентів
Сучасний реактивний підхід: Signals, Effects та Pipes
Dependency Injection та організація взаємодії між сервісами
Виконання HTTP-запитів і робота з асинхронними даними
Налаштування маршрутизації у застосунку
Робота з формами: Template Driven та Reactive Forms
Практичний проєкт із реальним API та Angular frontend
Під час навчання ви не просто ознайомитесь із можливостями Angular, а навчитеся будувати повноцінні клієнтські застосунки. Ви зрозумієте, як організовується архітектура проєкту, як взаємодіють його частини та як застосовувати сучасні підходи у фронтенд-розробці.
Завдяки великій кількості прикладів і практичному проєкту кожна тема буде одразу закріплюватися на практиці. У результаті ви отримаєте цілісне розуміння процесу створення вебзастосунків на Angular — від першого запуску до роботи з API та формами.
Структура курсу:
Введення в Angular
HTML шаблони та прив’язка даних
Компоненти
Signals, Effects, Pipes
Dependency Injection
HttpClient
Маршрутизація
Форми
Практичне завдання (проєкт PollApp)
Чого ви навчитеся на курсі:
Створювати вебзастосунки з використанням Angular CLI
Працювати з компонентами, шаблонами та прив’язкою даних
Використовувати Signals, Effects та Pipes
Організовувати взаємодію через Dependency Injection
Виконувати HTTP-запити та працювати з асинхронними даними
Налаштовувати маршрутизацію у застосунку
Створювати та валідовувати форми
Розробляти клієнтську частину застосунку з інтеграцією API
Попередні вимоги
Для комфортного проходження курсу вам знадобляться:
Базові знання JavaScript
Основи TypeScript
Базове розуміння HTML та CSS
Курс входить до комплексних програм навчання за напрямками FrontEnd та Angular Developer.
Курс входить до комплексних програм навчання за напрямками FrontEnd та Angular Developer.
Долучайтеся до курсу вже сьогодні та почніть створювати сучасні вебзастосунки на Angular. Перший урок доступний безкоштовно, а за наявності підписки ви можете пройти курс повністю вже зараз.
Вчитися з нами вигідно!
Автор: Редакція ITVDN
Акция от учебного центра CyberBionic Systematics. Учиться с нами выгодно!
ITVDN совместно с учебным центром CyberBionic Systematics проводят совместную акцию для студентов. Это хорошая возможность для студентов закрепить знания, полученные в учебном центре. Курсы ITVDN доступны в видеоформате в любое удобное для Вас время.
Теперь студенты учебного центра, смогут получить скидки на полный каталога видеокурсов на 1 и 3 месяца подписки.
Студенты, прошедшие обучение на 2 курсах смогут получить скидку в размере 50%
Студенты, прошедшие обучение на 3 или более курсов смогут получить скидку в размере 70%.
Студенты, прошедшие обучение по всей специальности получают скидку в размере 100%.
Акция действует бессрочно. Скидка единоразова.
Вивчай MySQL безкоштовно
Автор: Редакція ITVDN
З 1 до 7 березня 2024 року на ITVDN проходить акція – ви можете пройти навчання за курсом “MySQL Базовий” безкоштовно! Курс українською мовою!
Доступ до курсу не надається громадянам росії та білорусі.
Що таке MySQL?
MySQL – це open-source система управління реляційними базами даних (РСУБД) від корпорації Oracle, яка широко використовується в різних типах застосунків. MySQL відома своєю продуктивністю, масштабованістю та простотою використання, що робить її популярним вибором під час розробки серверної сторони (BackEnd).
Відповідно до опитування Stack Overflow Developer Survey 2023, MySQL є другою за популярністю СУБД – нею користується 40.6% професійних розробників з різних куточків планети (понад 60 тисяч респондентів).
Про курс “MySQL Базовий”
Курс складається з 10 уроків, на яких ви вивчите основи реляційних БД, навчитеся основам проєктування БД та тому, як формувати до них запити. Ви будете розуміти основи CRUD запитів в базах даних MySQL і вмітимете створювати їх сутності, звертатися до них для зчитування інформації, що зберігається, змінювати таку інформацію та видаляти інформацію або сутності з бази даних. Також ви познайомитеся з процедурними розширеннями MySQL для створення складних запитів.
MySQL найчастіше використовується серед розробників, які пишуть на PHP, Java, Python, Ruby, JavaScript (Node.js) тощо.
Автор курсу – Ян Хаджийський, PHP Web Developer & Python Engineer з бекґраундом у QA та великим досвідом на фрилансі (235 з 240 замовлень на Fiverr виконані на 5 зірок). Поточний стек – Python, Django, Vue.js.
Тривалість відео уроків курсу – 5 годин 42 хвилини.
Програма курсу:
Введення в MySQL. Основні запити: Insert, Update, Select, Delete.
Типи даних для створення таблиць.
Використання Foreign Keys під час проєктування БД.
Побудова зв'язків через JOIN.
Створення індексів.
Підготовка запитів.
Створення процедур та функцій MySQL.
Умови IF-CASE та цикли в MySQL – Repeat, While.
Транзакції. Тригери.
MySQL підзапити.
Для кого цей курс
Курс розрахований на новачків, які бажають познайомитися з механізмами побудови і роботи реляційних баз даних загалом та насамперед з основами саме MySQL. Також він підійде тим розробникам чи аналітикам, які вже працювали з SQL, але хочуть вивчити основи діалекту MySQL.
Чого ви навчитеся на даному курсі:
Створювати свої MySQL бази даних.
Розуміти основи CRUD запитів в базі даних MySQL.
Розуміти особливості різних типів даних в MySQL.
Створювати PRIMARY та Foreign ключі у таблицях, розробляючи зв’язки між таблицями.
Використовувати базові вбудовані запити.
Використовуючи JOIN, об'єднувати запити до 3 та більше таблиць одночасно, щоб отримати один набір даних.
Створювати індекси та виконувати пошук за допомогою індексів.
Створювати процедури та функції, робити їх виклик та видаляти їх тощо.
Терміни акції
Акція проходить з 1 до 7 березня 2024 року включно. Доступ до курсу відкривається на 10 днів.
Вивчай HTML5 & CSS3 безкоштовно українською мовою
Автор: Редакція ITVDN
З 6 по 13 липня 2023 року на ITVDN проходить акція – ви можете пройти навчання за курсом "HTML5 & CSS3 Стартовий" безкоштовно! Курс українською мовою!
Що таке HTML & CSS?
В основі роботи будь-якого веб-сайту є демонстрація тексту, зображень та іншого контенту у вікні спеціальної програми – веб-браузера. За допомогою HTML створюється початкова розмітка (каркас) кожної веб-сторінки. Потім використання CSS перетворює сайт, налаштовуючи спосіб відображення елементів і надаючи йому привабливий і ефектний зовнішній вигляд.
Вивчення цих технологій є основою для навчання будь-якого верстальника та веб-розробника. Також основами HTML & CSS мають володіти веб-розробники серверної сторони (BackEnd), веб-розробники повного циклу (FullStack), SEO спеціалісти, а також інші фахівці, дотичні до веб-розробки та/або відповідальні за розміщення контенту на веб-сторінках.
Про курс “HTML5 & CSS3 Стартовий”
Автор відео курсу – Віталій Мазяр, FrontEnd розробник та тренер-консультант навчального центру CyberBionic Systematics.
На курсі «HTML5 & CSS3 Стартовий» ви познайомитеся з основними конструкціями та принципами використання цих базових мов роботи веб-сайтів. Ви познайомитеся з HTML-тегами та їх використанням, з особливістю того, як влаштована структура будь-якого сайту, що таке блоки, як формується текст та відображаються картинки. Дізнаєтесь, як працювати з таблицями та списками, їх правила вкладеності, дізнаєтеся правила розміщення блоків та способи роботи зі шляхами для файлів.
Програма курсу:
Введення в HTML.
Типи елементів та атрибути.
Введення в CSS.
Визначення розмірів блоків.
Робота з відступами, властивість margin.
Робота з текстом і видимістю елементів.
Верстання з використанням Flexbox.
Комбінування селекторів.
Робота з фоном, властивість background.
Семантичне верстання.
Для кого цей курс
Курс призначений насамперед для повних новачків, які тільки-но відкривають для себе світ верстання та FrontEnd розробки і не мають попереднього досвіду в ІТ. Також він підійде для практикуючих розробників, котрі бажають познайомитися з мовами верстання HTML & CSS і швидко опанувати їх основи.
Курс входить до комплексних програм навчання за спеціальностями:
FrontEnd Developer
Верстальник сайтів
React Developer
UI/UX Designer
Python Developer
ASP.NET Core Developer
ASP.NET MVC Developer
PHP Developer
Ruby Developer
Чого ви навчитеся на даному курсі:
Розуміти основи використання базових конструкцій мови HTML і мови стилів CSS.
Створювати прості односторінкові сайти.
Реалізовувати головне меню сайту.
Розуміти основи адаптивної та кросбраузерної розробки сайтів.
Створювати блок соціальних мереж.
Створювати картки товару та подібні до них інформаційні блоки.
Реалізовувати верстання сайту за допомогою модуля Flexbox.
Терміни акції
Акція проходить з 6 до 13 липня 2023 року включно. Доступ до курсу відкривається на 10 днів.
Доступ до курсу не надається громадянам росії та білорусі.
Вивчай JavaScript безкоштовно
Автор: Редакція ITVDN
С 23 по 30 декабря на ITVDN проходит акция — вы можете пройти обучение по курсу JavaScript Стартовый бесплатно!
JavaScript – это один из самых популярных языков программирования, без знания которого не обойтись в веб-разработке (а сегодня 90% проектов имеют веб-составляющую). JavaScript также применяется в разработке серверных приложений, игровых и мобильных приложений, а также для создания сценариев для автоматизации тестирования и многого другого.
Изучение JavaScript — это хорошее вложение в будущее, так как язык пригодится для решения разных задач и будет полезным как Frontend или Backend разработчику, так и тестировщику программного обеспечения.
О курсе JavaScript Стартовый
Автор видео курса — Дмитрий Охрименко, CEO CyberBionic Systematics, более 10 лет в IT, Microsoft Certified Trainer and Developer, спикер IT конференций, автор видео курсов ITVDN и победитель Ukrainian IT Awards в номинации IT Education.
Курс состоит из 14 видео уроков общей продолжительностью 8 часов 41 минута.
Он направлен на изучение главных синтаксических конструкций языка JavaScript. Вы узнаете, как работать с переменными, использовать условные и циклические конструкции, массивы и объекты; получите необходимые знания для написания алгоритмов и подготовите базу, после которой можно развивать свои навыки в веб-разработке или начать использовать JS для других целей.
Программа курса:
Введение. Знакомство с JS.
Структура кода.
Переменные и типы данных.
Строки и преобразование типов.
Операторы.
Условный оператор if.
Switch и тернарный оператор.
Циклы.
Массивы.
Методы массивов.
Функции. Часть 1.
Функции. Часть 2.
Объекты. Часть 1.
Объекты. Часть 2.
Для кого этот курс
Этот курс рассчитан на начинающих без опыта и знаний в программировании. Вы можете начать обучение прямо сейчас — достаточно умения работать с текстовым редактором.
Если вы уже занимаетесь разработкой на другом языке программирования и хотите изучить JavaScript – эти видео материалы вам идеально подойдут: просто бегло просмотрите первые уроки и сконцентрируйте внимание на особенностях JavaScript.
Если вы занимаетесь тестированием ПО, курс JavaScript Starter поможет вам разобраться с синтаксисом языка и станет первым шагом в освоении автоматизации тестирования.
Курс входит в комплексные программы обучения по специальностям: FrontEnd Developer, React Developer, PHP Developer, JavaScript Developer, Ruby Developer, Python Developer, ASP.NET MVC Developer, ASP.NET Core Developer, Верстальщик сайтов.
Чему вы научитесь на этом курсе:
Создавать на JavaScript базовый динамический контент для web-страниц.
Понимать принципы и уметь работать с переменными и типами данных.
Работать с условными и циклическими конструкциями.
Понимать особенности использования массивов и уметь работать с методами для обработки данных в массивах.
Использовать функции (понимать и использовать области видимости, контекст, рекурсию).
Работать с объектами.
Сроки акции
Акция проходит с 23 по 30 декабря 2021 года включительно. Доступ к курсу открывается на 10 дней.
Вивчай веб-тестування безкоштовно
Автор: Редакція ITVDN
С 5 по 12 августа на ITVDN проходит акция — вы можете пройти обучение по курсу Web Testing бесплатно!
Что такое Web Testing?
Тестирование веб-приложений – это один из важнейших этапов разработки качественного программного продукта и один из главных навыков тестировщика (иначе QA от Quality Assurance).
О курсе “Web Testing”
Курс состоит из 8 видео уроков общей продолжительностью 6 часов 25 минут.
Курс Web Testing раскрывает особенности и нюансы работы QA специалиста с веб-приложениями. В видео уроках рассматривается архитектура веб-приложений, применение повседневных инструментов тестирования (Chrome Developer Tools, Fiddler и др.) и возможности автоматизации тестирования с Record&Play в Selenium IDE, доступные специалистам по мануальному тестированию.
Вы познакомитесь с технологиями и процессами Continuous Integration, и Continuous Delivery (непрерывная интеграция и непрерывная доставка), местом QA специалиста в этих процессах, разберете особенности тестирования API, и особенности тестирования производительности веб-приложений. Также, вы узнаете возможности измерения процесса тестирования и особенности тестовых метрик.
Автор видео курса — Александр Бреславец, Senior Software Test Automation Engineer.
Программа курса:
Основы Web Testing
Codeless Automation
Testing Tools
CI/CD/CD
Тестирование API
Архитектура Web Application
Основы Performance Testing
Estimation and Test Metrics
Для кого этот курс
Курс рассчитан на тех, кто знает основы тестирования и командной разработки типа Scrum. Для полноценного понимания некоторых уроков желательно также пройти курсы SQL Essentials, Git, Jenkins.
Курс входит в комплексную программу обучения по специальности Quality Assurance.
Чему вы научитесь на этом курсе:
Выполнять тестирование Web приложений с использованием всех необходимых инструментов.
Понимать особенности архитектуры Web приложений, различия монолитной и микросервисной архитектуры.
Понимать основы API Web приложений, особенности REST & SOAP.
Работать с такими инструментами тестирования API, как Swagger, Postman, SoapUI.
Понимать, что такое Test Framework, Test Recording, какие существуют подходы к автоматизации (DDT, KDT, BDD) и что из этого можно использовать в мануальном тестировании.
Понимать, что такое CI/CD, Continuous testing.
Понимать и уметь применять тестирование производительности, использовать JMeter, Newman, Automation Framework.
Уметь оценивать задачи тестирования, особенности метрик тестирования для измерения процесса тестирования в разных плоскостях, понимать такие техники оценивания, как Decomposition, Bottom Up, Expert Opinion, By analogies, PERT, оценивание в Agile (T shirt, Bucket system, Large/Small, Planning pocker, цифры Фибоначчи).
Сроки акции
Акция проходит с 5 по 12 августа 2021 года включительно. Доступ к курсу открывается на 10 дней.
Вивчай JavaScript безкоштовно
Автор: Редакція ITVDN
С 3 по 10 июня 2021 года на ITVDN проходит акция — вы можете пройти обучение по курсу JavaScript Стартовый бесплатно!
Что такое JavaScript?
JavaScript – это один из самых популярных языков программирования, без знания которого не обойтись в веб-разработке (а сегодня 90% проектов имеют веб-составляющую). JavaScript также применяется в разработке серверных приложений, игровых и мобильных приложений, а также для создания сценариев для автоматизации тестирования и многого другого.
Изучение JavaScript — это хорошее вложение в будущее, так как язык пригодится для решения разных задач и будет полезным как Frontend или Backend разработчику, так и тестировщику программного обеспечения.
О курсе JavaScript Стартовый
Автор видео курса — Дмитрий Охрименко, CEO CyberBionic Systematics, более 10 лет в IT, Microsoft Certified Trainer and Developer, спикер IT конференций, автор видео курсов ITVDN и победитель Ukrainian IT Awards в номинации IT Education.
Курс состоит из 14 видео уроков общей продолжительностью 8 часов 41 минута.
Он направлен на изучение главных синтаксических конструкций языка JavaScript. Вы узнаете, как работать с переменными, использовать условные и циклические конструкции, массивы и объекты; получите необходимые знания для написания алгоритмов и подготовите базу, после которой можно развивать свои навыки в веб-разработке или начать использовать JS для других целей.
Программа курса:
Введение. Знакомство с JS.
Структура кода.
Переменные и типы данных.
Строки и преобразование типов.
Операторы.
Условный оператор if.
Switch и тернарный оператор.
Циклы.
Массивы.
Методы массивов.
Функции. Часть 1.
Функции. Часть 2.
Объекты. Часть 1.
Объекты. Часть 2.
Для кого этот курс
Этот курс рассчитан на начинающих без опыта и знаний в программировании. Вы можете начать обучение прямо сейчас — достаточно умения работать с текстовым редактором.
Если вы уже занимаетесь разработкой на другом языке программирования и хотите изучить JavaScript – эти видео материалы вам идеально подойдут: просто бегло просмотрите первые уроки и сконцентрируйте внимание на особенностях JavaScript.
Если вы занимаетесь тестированием ПО, курс JavaScript Starter поможет вам разобраться с синтаксисом языка и станет первым шагом в освоении автоматизации тестирования.
Курс входит в комплексные программы обучения по специальностям: FrontEnd Developer, React Developer, PHP Developer, JavaScript Developer, Ruby Developer, Python Developer, ASP.NET MVC Developer, ASP.NET Core Developer, Верстальщик сайтов.
Чему вы научитесь на этом курсе:
Создавать на JavaScript базовый динамический контент для web-страниц.
Понимать принципы и уметь работать с переменными и типами данных.
Работать с условными и циклическими конструкциями.
Понимать особенности использования массивов и уметь работать с методами для обработки данных в массивах.
Использовать функции (понимать и использовать области видимости, контекст, рекурсию).
Работать с объектами.
Сроки акции
Акция проходит с 3 по 10 июня 2021 года включительно. Доступ к курсу открывается на 10 дней.