Собеседование C++. Разработчик из Яндекс

Всем привет!
Провели тренировочное собеседование с Фаритом.
на позицию Middle C++ Developer.
Темы, которые рассмотрели на собеседовании:
Многопоточность, задачи, рекурсия, шаблоны, constexpr и т.д.
Приятного просмотра!
telegram: t.me/AmbushedRaccoon
twitch: / ambushedraccoontv
Не забудьте поддержать видео :)

Пікірлер: 101

  • @user-zi5xu5ik7e
    @user-zi5xu5ik7e Жыл бұрын

    0:28 - Фарит рассказывает о себе 1:31 - задача: развернуть односвязный список 16:48 - задача: найти уникальный элемент 24:47 - опыт работы в Яндексе 27:01 - статические и динамические библиотеки 30:44 - constexpr 35:22 - метапрограммирование 38:52 - static_assert 41:10 - бесконечная рекурсия 42:38 - работа с потоками 51:12 - фидбек

  • @user-uw4bj2uz5l

    @user-uw4bj2uz5l

    Жыл бұрын

    Спасибо большое

  • @vasiliypupkin6311
    @vasiliypupkin6311 Жыл бұрын

    Надо было ему дать задачу из контеста, где условие на лист а4, как Яндекс даёт на стажировку.

  • @user-ow2ks3zy8u
    @user-ow2ks3zy8u Жыл бұрын

    Большое спасибо за Ваши труды, смотрю Ваш канал уже более года, от старта изучения языка до трудоустройства. Видео очень полезные, продолжаю узнавать много нового и интересного для себя. Желаю успеха Вам и Вашему каналу!

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Спасибо)

  • @vasiliypupkin6311

    @vasiliypupkin6311

    Жыл бұрын

    И куда ты устроился за год изучения языка ?

  • @TheALEXMOTO

    @TheALEXMOTO

    3 ай бұрын

    ​@@vasiliypupkin6311на базар

  • @nmg_prm
    @nmg_prm Жыл бұрын

    Спасибо за интервью, с каждым видео все интереснее!

  • @0xsadcat92
    @0xsadcat92 Жыл бұрын

    constexpr функция при передаче в cout: std::cout

  • @Pa36ouHuK
    @Pa36ouHuK Жыл бұрын

    1) Желательно всё же компилировать написанное 2) Терминейтить потоки функциями ос плохая идея - могут зависнуть ресурсы. Тут лучше делать дамп процесса и отправлять разработчикам на анализ, а сам процесс просто перезапустить.

  • @alex-peretz
    @alex-peretz Жыл бұрын

    решение задачи про парные элементы, это очень красиво - прям кайфанул❤

  • @HelloWorld-fy8cd

    @HelloWorld-fy8cd

    Жыл бұрын

    жаль что парных элементов должно быть четное число, а иначе не прокатит

  • @VladimirKirienko
    @VladimirKirienko Жыл бұрын

    Спасибо за отличный контент и вашу работу. Есть ли в планах сделать тестовый собес на уровень Senior C++?

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    И Вам спасибо! Да, сегодня записали. Посмотрим как видео себя покажет.

  • @vp_arth
    @vp_arth3 ай бұрын

    Во второй задаче решение очевидно, но я бы задал вопрос: найти элемент - это индекс в векторе или достаточно значения?

  • @nikitaminakov42
    @nikitaminakov42 Жыл бұрын

    C XORом очень круто, действительно все гениальное просто.

  • @user-fm6jm8op1g
    @user-fm6jm8op1g Жыл бұрын

    Божественный Яндекс. Годами не могут пофиксить хваленый Ямаркет и музыку, в маркете - RecycleView падает в exeption, Fragments не сохраняют данные при переключении в Activity. В музыке песни не переключаются. Видимо Listener отвалился. Или играет одна и та же песня. какую бы не включил, видимо Map поплыла с ключами. И все бы ничего, но на собеседовании ты должен быть БОГОМ, решать УМНЫЕ ЛОГИЧСКИЕ ЗАДАЧКИ и вообще знать наизусть как и что устроено внутри STD. У меня всё.

  • @nullptr_or_null8301

    @nullptr_or_null8301

    Жыл бұрын

    Проблема в том что многие не понимают по каким принципам работают такие крупные компании независимо от названия и страны (также работает и Apple, Google, Amazon и т.д.), и ломятся туда толпами, думая что это же яндекс там мне заплатят много денег, прокачаюсь в знаниях, опыте и т.д., нет это не так работает во главу угла там ставятся деньги, то есть нужен работник пускай криво косо, но будет справляться со своими обязанностями, но платить ему придется минимум на 50% ниже чем по рынку, на качество продукта такой крупной компании насрать, они уже монополист и альтернатив или нет, или конкуренты могут отнять несущественную долю рынку, отсюда в таких крупных компаниях работают в основном люди в лучшем случае середнячки, а то и новички, как только новичок (или глупый середнячок) под обещания повышения поработает в такой компании 1-3 года, обычно такой срок проходит когда до людей доходит что никто не собирается повышать, они сваливают оттуда через этот срок или их просят на выход, если начнут возникать почему не повышают, не платят больше и т.д., потом набираются следующие дурачки клюющие на бренд, и так продолжается до бесконечности, потому что народа немерянно хотящего работать в таких брендовых крупных компаниях, отсюда и кривое качество продуктов.

  • @maksimgorohov504

    @maksimgorohov504

    Жыл бұрын

    @@nullptr_or_null8301 но каким образом ваш рассказ вяжется с жестким отбором людей в эти компании

  • @nullptr_or_null8301

    @nullptr_or_null8301

    Жыл бұрын

    @@maksimgorohov504 "но каким образом ваш рассказ вяжется с жестким отбором людей в эти компании" - суть в том что отбираются лучшие прошедшие жесткий отбор, но с оплатой ниже рынка и обещаниями что в будущем эту оплату повысят (естественно никто и не собирается повышать), разводка на дурачка который на это поведется, то есть условно если бы так человек пошел бы в не брендовую компанию ему заплатили больше, потому что не стоит очередь из желающих в такую, а в брендовую стоит очередь, ведь большинство, как рассуждает, что если крупная компания то зп у них будет выше рынка, только вот в чем загвоздка выше рынка в таких компаниях только у приблатненных, а у того кого наймут с улицы будет зп ниже рынка, и тянуть он будет к тому же работу и за себя и за приблатненных, причем этот человек вполне может заменить отдел этих приблатненных в одиночку (знаю такой пример), вот так это работает, суть в том что в крупных брендовых компаниях знаний опыта зачастую для обычного человека требуют столько что в других не брендовых, более мелких, он раза в 2 больше будет получать за те же самые знания и опыт, рассуждать правильно надо вставая на место руководства таких компаний, и рассуждения там просты донельзя хочу чтобы работник был гений и за копейки, в крупных это осуществимо, потому что есть очередь из желающих дурачков (до людей выше написал это доходит через 1-3 года и разводка в основном на джунов и слабеньких мидлов), в средне-мелких такого нет, потому что такой очередь там нет, надеюсь теперь понятно, если нет, то уже не знаю как объяснять. P.S. Причем для заманухи естественно в вакансии и пишут зп якобы по рынку или выше, а уже на собесе естественно озвучивается другая сумма существенно ниже рынка и тут либо человек соглашается (ведется) или на выход.

  • @maksimgorohov504

    @maksimgorohov504

    Жыл бұрын

    @@nullptr_or_null8301 "в том что отбираются лучшие прошедшие жесткий отбор" тогда почему у них так плохо написаны приложения, о чем говорил Андрей выше

  • @nullptr_or_null8301

    @nullptr_or_null8301

    Жыл бұрын

    @@maksimgorohov504 Аааа, джун или слабый мидл, не может априори писать код, выстраивать архитектуру и т.д. как это делают крепкие мидлы и уж тем более сеньоры, потому что последние (мидлы и сеньоры) знают различные варианты решения одной и той же задачи, а также плюсы и минусы этих решений, и знают где и как применять эти решения, начинающий джун (даже если он гений), слабый мидл этого всего не знают им не хватает знаний и опыта, даже если они мега талантливые пройдет 1-3 года как раз чтобы из них вышел хотя бы мидл и то если они будут развиваться на разных типах и сложностях задач (в таких крупных компаниях обычно такого не дают особо) отсюда так как выше писал смена таких работников обычно происходит раз в 1-3 года и отсюда получаются плохо написанные приложения (потому как новый приходящий городит свой велосипед на другие велосипеды, которые писали до него такие же как он новички), а крупной компании на это пох, потому что они монополист и они могут класть большой и толстый на рядовых пользователей, потому как они уже в основном уже аффилированы тесно с государством и основные деньги пилят с госзаказов и госраспилов (суммы там вам и не снились) плять объяснять это долго, я бы дал ссылку на видео где человек в теме все это разжевывает (я и без него это знаю, потому как сам наблюдал это со стороны работая инженером в одной можно сказать госконторе).

  • @user-io7id3cc5j
    @user-io7id3cc5j Жыл бұрын

    Здравствуйте! Интересное интервью, благодарю! Данное собеседование на позицию middle, верно?

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Да, на middle, все верно.

  • @user-io7id3cc5j
    @user-io7id3cc5j Жыл бұрын

    И ещё один вопрос. На какую позицию must have паттерны проектирования?

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    После года опыта, если не набираетесь на работе то рекомендую начать с Солида, а потом плавно перейти на паттерны. Это важно просто для того, чтобы расти как специалист, не только для собеседований.

  • @arthurlouiskarl

    @arthurlouiskarl

    Жыл бұрын

    полотёр

  • @robban3465
    @robban3465 Жыл бұрын

    Лайк однозначно

  • @faritavtakhov5115

    @faritavtakhov5115

    Жыл бұрын

    как нашел

  • @robban3465

    @robban3465

    Жыл бұрын

    @@faritavtakhov5115 давно подписан, и смотрел некоторые видосы

  • @skynowa2626
    @skynowa2626 Жыл бұрын

    Т.е. constexpr - это не гарантия вычисления на этапе компиляции?

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Нет. Правильнее сказать, что оно может вычислиться на этапе компиляции, но не факт. Как я и приводил пример в одном случае считалось на этапе компиляции, в другом - в рантайме. Рекомендую почитать стандарт en.cppreference.com/w/cpp/language/constexpr и закрепить на практике.

  • @NoNo-fl6oq
    @NoNo-fl6oq Жыл бұрын

    привет! подскажите, что нужно знать для первой джуниорской работы с++ программистом не в геймдев? что кроме самого язык нужно?

  • @user-yk7li6ni4o

    @user-yk7li6ni4o

    Жыл бұрын

    Тут на самом деле очень всё сложно и все требуют разное. Но основное что могу порекомендовать это естественно понимание и знания Git и работа с GitHub(или другие). Стоит изучить Cmake и Conan (или их альтернативы). С их помочью собирать программы и подключать сторонние библиотеки. Стоит после этого начать знакомство с boost. Для начала например парсинг аргументов с помощью boost. Стоит подключить библиотеки для БД и немного их потыкать, полезно немного знать SQL. Если интересно то потыкать QT. Работа с Linux и хоть пару уроков связанных с GDB.

  • @user-rv6uh3tw2h

    @user-rv6uh3tw2h

    5 күн бұрын

    @@user-yk7li6ni4oуже изучил по твоим наставлениям GIT и GITLAB. Дальше буду cmake смотреть параллельно на с++ документацию читаю и доучиваю Stl. Спасибо

  • @mormeoi
    @mormeoi3 ай бұрын

    Как все переусложнено в первой задаче. Надо хранить cur и prev, prev сначала равен nullptr, тогда не нужна будет проверка на "краевые условия" да и сам цикл будет более естественный. Возвращать надо будет prev.

  • @sugma1142

    @sugma1142

    13 күн бұрын

    а это разве не будет занимать дополнительно память?

  • @mormeoi

    @mormeoi

    12 күн бұрын

    @@sugma1142 Нет. Будут те же самые 2 переменные, просто строчек кода будет меньше.

  • @user-xv6gu6ze6c
    @user-xv6gu6ze6c Жыл бұрын

    Видео вышло. Так что теперь ждем стрим

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    О чем речь? Какой стрим?

  • @user-ph7se5md1h
    @user-ph7se5md1h Жыл бұрын

    крутые обои

  • @dmanikhine
    @dmanikhine2 ай бұрын

    Классическое решение reverseList и к нему функция печати List, всё это есть в первой главе SICP. На Lisp или Scala это пишется гораздо проще. : ListNode* reverselist(ListNode* list){ auto aux=[](ListNode* curNode, ListNode* prevNode, auto& aux_ref) { if (curNode->next==nullptr) { curNode->next=prevNode; return curNode; } ListNode* nextNode=curNode->next; curNode->next=prevNode; return aux_ref(nextNode, curNode, aux_ref); }; return aux(list,nullptr,aux); } void printList(ListNode* list){ if (list->next==nullptr) { std::cout

  • @bequiet141
    @bequiet141 Жыл бұрын

    Битовые операции - вынос мозга, но решение мощное. Впечатляющий кейс

  • @shadowfiend8794

    @shadowfiend8794

    Жыл бұрын

    что там выносящего? Дефолтная опреация в компьютере. Почти все зануления компилятор как раз с помощью xor делает.

  • @hustrik4805
    @hustrik4805 Жыл бұрын

    Хочу чтобы начали появляться код ревью)) на канале

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Чуть подробнее, пожалуйста. Как вы думаете это должно выглядеть?

  • @strongful7120

    @strongful7120

    Жыл бұрын

    @@ambushedraccoon6408 Что-то по типу такого было бы очень полезно, такого нет по С++ на русском ютубе kzread.info/dash/bejne/n4OHy9SPlbObnNI.html

  • @user-wi4gp9kq2x
    @user-wi4gp9kq2x Жыл бұрын

    Is it real 24:14 , return integer in void function ???

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    it's just a mistake. It happens. In such case scenario we don't have a compiler to show us obvious errors.

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    And generally speaking, it's acceptable to make such mistakes in most interviews.

  • @prank_ttime
    @prank_ttimeАй бұрын

    в перуом можно было типо стека все сделать и все.

  • @pavel_trpn
    @pavel_trpn Жыл бұрын

    32:40 - собеседующий не слышал про consteval???

  • @sakost

    @sakost

    10 ай бұрын

    с C++20 ещё не все знакомы и работали

  • @pavel_trpn

    @pavel_trpn

    10 ай бұрын

    @@sakost в 23-м году? А драфт ещё раньше был известен. Вся суть C++ разработки)

  • @aleksanderaksenov1363
    @aleksanderaksenov136310 ай бұрын

    У меня вопрос-а разработчик ничего кроме синтаксиса и типовых задач литкода знать не должен?))

  • @janedoe6182
    @janedoe618210 ай бұрын

    Решение первой задачи: ListNode* reverse (ListNode* head) { ListNode* prev = nullptr; while(head->next) { ListNode* next = head->next; head->next = prev; prev = head; head = next; } head->next = prev; return head; }

  • @IExSet

    @IExSet

    10 ай бұрын

    Тоже зациклится на циклическом списке. У сишников с такими структурами бяда 🙂

  • @janedoe6182

    @janedoe6182

    10 ай бұрын

    @@IExSet Почему это беда? В условиях задачи не было упоминания цикличности. И там одной проверки всего достаточно, чтобы ее обойти. Нет никакой беды

  • @wolfwood1010
    @wolfwood1010 Жыл бұрын

    Про бинарки это задачка на закопать за почти 15 лет практики приходилось использовать раза 2

  • @shadowfiend8794

    @shadowfiend8794

    Жыл бұрын

    Не понятно почему он их бинарные назвал конечно, если это битовые. От специфики работы зависит я вот очень много сталкивался когда работал с bunch сериализацией в UE

  • @wolfwood1010

    @wolfwood1010

    Жыл бұрын

    @@shadowfiend8794 все правильно назвал xor это бинарный оператор он на вход принимает 2 значения а возвращает 1

  • @shadowfiend8794

    @shadowfiend8794

    Жыл бұрын

    @@wolfwood1010 да это понятно что правильно, но как подсказка это не очень, явно он имел ввиду именно битовые.

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Да, я допустил ошибку. Но собеседуемый так или иначе все понял.

  • @broken_beyond_belief
    @broken_beyond_belief Жыл бұрын

    Коммент для продвижения

  • @alex-peretz
    @alex-peretz Жыл бұрын

    Решение на 14:13 тоже работало

  • @ambushedraccoon6408

    @ambushedraccoon6408

    Жыл бұрын

    Да, работает. Но читается хуже.

  • @IExSet
    @IExSet10 ай бұрын

    Вот что значит не уважать Лисп, сей алгоритм зациклится на циклическом списке, у которого последний элемент ссылается на первый!!!

  • @dinrash7613
    @dinrash76134 ай бұрын

    Решение 1 Задачи, используя рекурсию, которая не возможна по мнению автора: #include struct ListNode { int val; ListNode* next; ListNode(int x): val(x){} ListNode(int x, ListNode* next): val(x), next(next){} }; ListNode* RevertList(ListNode* head, bool first = true){ if(head == nullptr || head->next == nullptr){ return head; } else{ ListNode* result = RevertList(head->next, false); head->next->next = head; if(first){ head->next = nullptr; } return result; } } int main() { ListNode* prev = nullptr; for(int x = 0; x

  • @ambushedraccoon6408

    @ambushedraccoon6408

    4 ай бұрын

    Упадет при RevertList(nullptr, true);

  • @dinrash7613

    @dinrash7613

    4 ай бұрын

    @@ambushedraccoon6408 Updated

  • @dethomorphin
    @dethomorphin11 ай бұрын

    Зачем задаешь вопросы, на которые сам не знаешь ответ?) Про статические библиотеки например

  • @ambushedraccoon6408

    @ambushedraccoon6408

    11 ай бұрын

    Задаю, потому что знаю. И в принципе я могу просто задать вопрос, чтобы послушать рассуждения интервьюера на данную тему.

  • @dethomorphin

    @dethomorphin

    11 ай бұрын

    @@ambushedraccoon6408статическая библиотека это не исполняемый файл, и динамическая тоже. Разница в какой момент символы будут разрешены: при компоновке либо при исполнении

  • @pandalove6795
    @pandalove679510 ай бұрын

    Боже, решение с ксором в задаче о нахождение уникального элемента, просто шикарно. Я кстати когда думал сам над решением, пришел к использованию битовых операций, но только с целью хранения информации о том, что элемент уже есть. (1 есть, 0 нет). Но вот до использования ксора не додумался.

  • @user-lc6yf8rz6k
    @user-lc6yf8rz6k Жыл бұрын

    Насчёт RevertList что то сомнения закрались.. Хоть я инженер, не программист не судите строго.. А на стеке хватит памяти если список очень большой.. Если 10 миллионов? Я думал надо что то типа выделяем памяти с запасом, проходимся до конца, записывая всë в массив в этой памяти.. По мере надобности выделяем ещё.. А дойдя до конца, проходимся обратно.. Ну и память удаляем

  • @user-lc6yf8rz6k

    @user-lc6yf8rz6k

    Жыл бұрын

    И почему это всё не андефайнд бихевиор? Мы возвращаем указатель на то, что создали на стеке? Если ошибаюсь расскажите пожалуйста в чем.

  • @damirsob6176

    @damirsob6176

    Жыл бұрын

    В решении, на стеке хранятся только 3 указателя(cur, prev, temp), независимо от размера списка. А значит, stackoverflow не будет.

  • @damirsob6176

    @damirsob6176

    Жыл бұрын

    @@user-lc6yf8rz6k нет, возвращается копия указателя prev, который указывает на первый узел реверснутого списка.

  • @user-lc6yf8rz6k

    @user-lc6yf8rz6k

    Жыл бұрын

    Спасибо. Буду разбираться

  • @user-tq3zn1wm1k
    @user-tq3zn1wm1k7 ай бұрын

    ну такое, 80% вопросов не релевантны на позицию middle, и в реальных проектах о них вспомнят в последний момент, особенно по constexpr и проверка статического результата. Не реалистичная бредятина

  • @sakost
    @sakost10 ай бұрын

    есть два типа людей: 0. Которые хейтят яндекс 1. Те, которые в нем работают Я скоро переметнусь из одной касты в другую, пхехе.

  • @raijinhasarrived
    @raijinhasarrived Жыл бұрын

    10:12 интервьюер, ты ойкаешь, вздыхаешь, сбиваешь своими вставками с мысли, задал вопрос подожди пока решит задачу и потом покажи какой ты nevyebeniy. Нахера ты лезешь, отбил всё желание смотреть

  • @user-ln2ft2mo3c
    @user-ln2ft2mo3c Жыл бұрын

    А это точно разработчик из Яндыкса? Есть большие на эту тему сомнения. Обычно яндекс проводит 3-4 технических собеса на алгоритмы и знание языка. Мне кажется на собесе был самозванец :) Теперь к автору видоса. Автор!, а похоже ты и сам не понимаешь (судя по твоему ответу) разницы между динамическими и статическими библиотеками - подучи-ка, дружок, мат-часть а уже потом вопросы задавай.

  • @faritavtakhov5115

    @faritavtakhov5115

    Жыл бұрын

    Я алгоритмы хорошо знаю

  • @faritavtakhov5115

    @faritavtakhov5115

    Жыл бұрын

    Поошибался, бывает, че за духота

  • @sakost

    @sakost

    10 ай бұрын

    ​@@faritavtakhov5115а ты на какой позиции? Junior? Middle? Просто если junior, то все наезды в комментариях абсолютно нерелевантны. В любом случае ты большой молодец)

  • @MrIbah42
    @MrIbah428 күн бұрын

    задачи конечно... олимпиадная хрень, это не собес, это бесполезные ребусы

  • @yashkevich8164
    @yashkevich8164 Жыл бұрын

    Совершенно бесполезная первая часть собеса с решениями задач. Так как проверяется тупо навык задрачивания решения задач на ЛитКод и тому подобных, которые в реальной разработке редко когда понадобятся. Я бы уже после это части распрощался с таким работодателем

  • @sakost

    @sakost

    10 ай бұрын

    ну вообще нет. будь там задача уровня hard с литкода, то да. А это medium с натяжкой. Тут проверяется возможность кандидата мыслить логически. И во многих компаниях(если не во всех. Я прошел больше 50 собесов и только 1-2 раза встречал, когда таких вопросов не было) такое применяют постоянно

  • @user-ei6lr9vn8u

    @user-ei6lr9vn8u

    3 ай бұрын

    Более 50 прошёл, задачи на логику, меня терзают смутные сомнения... А ты вообще дееспособен писать каменты😂

  • @eewwwqqwee
    @eewwwqqwee3 ай бұрын

    Был бы рад вашей оценки моей жалкой попытки. еще только учусь. Тоже первое что пришло в голову это рекурсивная функция, реализовал так - using namespace std; struct ListNode { int value; ListNode* next; ListNode() : value(0), next(nullptr) {} ListNode(int x) : value(x), next(nullptr) {} ListNode(int x, ListNode* next) : value(x), next(next) {} }; void ReverseList(ListNode *header, ListNode* &finalHeader) { if ((*header).next != nullptr) { if ((*header).next->next != nullptr) { ListNode* buffer = (*header).next->next; (*header).next->next = header; ListNode* bufferForNext = buffer->next; buffer->next = (*header).next; (*header).next = nullptr; ReverseList(bufferForNext,finalHeader); bufferForNext->next = buffer; } else { (*header).next->next = header; finalHeader = header->next; } } } int main() { ListNode a1(1); ListNode a2(2); a1.next = &a2; ListNode a3(3); a2.next = &a3; ListNode a4(4); a3.next = &a4; ListNode a5(5); a4.next = &a5; ListNode a6(6); a5.next = &a6; ListNode a7(7); a6.next = &a7; ListNode a8(8); a7.next = &a8; ListNode* finalHeader = nullptr; ReverseList(&a1, finalHeader); }; вершина перевернутого листа находится в указателе finalHeader

  • @eewwwqqwee

    @eewwwqqwee

    3 ай бұрын

    p.s. первая задача

  • @sashabroslavskiy7904
    @sashabroslavskiy7904 Жыл бұрын

    Это пи.здец какой-то)) какой-то там симэйк)) абалдеть просто. в яндексе кто вообще работает?) статика и шарэд либа это же очевидная вещь. какой кошмар