какие вопросы задают на собеседовании frontend
Готовимся к собеседованию по фронтенду: 15 вопросов
Автор статьи, перевод которой мы сегодня публикуем, приводит 15 вопросов, которые задавали на собеседованиях ему, и которые он задавал соискателям на должности фронтенд-разработчиков сам.
1. Что такое DOM?
DOM (Document Object Model, объектная модель документа) — это программный интерфейс к HTML-документам. Этот интерфейс позволяет воздействовать на документ из скриптов, меняя его оформление, стили, содержимое. В DOM документ представлен в виде дерева узлов.
2. Какая разница между элементами и
нужно использовать для оформления разделов документа. А элементы — в роли контейнеров для небольших объёмов текста, для изображений и других подобных элементов страниц.
Надо отметить, что нельзя помещать блочные элементы в строчные. Вот пример, в котором показано, кроме прочего, неправильное размещение блочного элемента внутри строчного (это — фрагмент
, размещённый внутри элемента ):
3. Что такое мета-теги?
Мета-теги — это теги, находящиеся в теге страницы и описывающие содержимое страницы. Мета-теги не выводятся на странице. Они имеются лишь в её коде.
Их основная задача заключается в том, чтобы кратко описывать содержимое страниц поисковым системам. Вот пример:
4. Какая разница между селекторами идентификаторов и классов в CSS?
Идентификаторы ( id ) уникальны. У элемента может быть только один идентификатор. На странице может присутствовать лишь один элемент с конкретным идентификатором.
Имена классов ( class ) не являются уникальными. Один и тот же класс можно назначать множеству элементов. Элементу может быть назначено несколько классов.
Если некий стиль нужно применить к нескольким элементам страницы — эту задачу нужно решать с использованием классов.
5. Как пользоваться медиазапросами в CSS?
6. Что такое псевдоклассы в CSS?
В CSS псевдоклассы используются для описания стилей элементов, находящихся в особых состояниях. Псевдоклассы можно использовать совместно с CSS-селекторами для настройки внешнего вида элементов на основе их состояний.
Если вас спросят о том, можете ли вы назвать какие-нибудь псевдоклассы, то вот страница с их большим списком.
7. Какая разница между следующими видами позиционирования элементов: относительное, фиксированное, абсолютное, статическое?
8. Чем отличаются PUT- и POST-запросы?
PUT-запросы приводят к замене целевого ресурса на данные, передаваемые в запросе. Его можно использовать для обновления содержимого существующего ресурса или для создания нового ресурса.
POST-запросы приводят к специфической для ресурса обработке данных, передаваемых в запросе. Их можно использовать для выполнения различных действий. В том числе — для создания новых ресурсов, для выгрузки файлов на сервер, для отправки форм.
Ещё одно отличие между PUT- и POST-запросами заключается в том, что PUT-запросы являются идемпотентными, а POST-запросы — нет. То есть — если запрос, в котором передаются одни и те же данные, и который выполняется по одному и тому же URL, будет выполнен несколько раз, это равносильно однократному выполнению этого запроса. Многократное выполнение POST-запроса не эквивалентно его однократному выполнению. То есть — несколько таких запросов, например, могут привести к созданию нескольких объектов на сервере.
9. В чём отличия технологии Long Polling, протокола WebSocket и событий, генерируемых сервером?
10. Чем отличаются куки-файлы, сессионное хранилище и локальное хранилище?
Локальное хранилище, как можно понять из его названия, это место, которое браузеры могут использовать для локального хранения данных. В нём может храниться до 10 Мб данных. Сессионное хранилище — это разновидность локального хранилища, которое привязано к сессии и удаляется после её завершения. В сессионном хранилище может храниться до 5 Мб данных.
Куки-файлы используются для хранения небольших объёмов данных, не превышающих 4 Кб. Ими может пользоваться браузер, их может запрашивать у браузера сервер.
11. Что такое CORS?
CORS (Cross-Origin Resource Sharing, совместное использование ресурсов между разными источниками) — это браузерный механизм, который позволяет предоставлять страницам доступ к ресурсам, расположенным за пределами некоего домена. Это расширяет возможности страниц и добавляет гибкости политике одинакового источника (same-origin policy).
12. Что такое промис?
Промисы — это объекты, которые используются в JavaScript при выполнении асинхронных операций. Они упрощают работу с асинхронными операциями и дают более удобные механизмы обработки ошибок, чем коллбэки и события.
13. В каких состояниях может пребывать промис?
Промис может пребывать в одном из трёх состояний:
14. Что такое поднятие переменных и функций в JavaScript?
Поднятие переменных и функций (hoisting) — это перемещение их объявлений в верхнюю часть их области видимости (глобальной области видимости или области видимости функции).
15. Какие значения в JavaScript являются ложными?
Итоги
Вопросы, которыми я с вами поделился, задавали на собеседованиях мне. Я задавал их на собеседованиях другим разработчикам. Подобные вопросы, дополненные практическими заданиями, это — хороший способ проверки знаний кандидата на должность фронтенд-программиста.
Я думаю, что для подготовки к фронтенд-собеседованию стоит разобрать гораздо больше вопросов по JavaScript, чем приведено в этом материале. Разбор вопросов по TypeScript тоже может оказаться очень кстати.
Если вы заявляете в резюме о том, что знакомы с каким-то фронтенд-фреймворком, это значит, что вам стоит подготовиться и к тому, что вам зададут вопросы на знание этого фреймворка.
Какие вопросы на собеседованиях по фронтенду задавали вам?
Как проходит собеседование Junior фронтенд-разработчика
Меня зовут Максим Чеченёв, я фронтенд-разработчик уже почти девять лет. Работаю в компании MessageBird в Амстердаме и наставником на курсе «Веб-разработчик» в Яндекс.Практикуме. Ещё я веду канал в телеграме «Сеньор Разработчик».
Прежде чем стать сеньором и начать собеседовать кандидатов, я прошёл через десятки собственных собеседований. В этой статье я расскажу, из чего обычно состоит собеседование Junior фронтенд-разработчика, и дам несколько советов по подготовке.
Из чего состоит собеседование
Собеседование фронтенд-разработчика на начальных этапах мало чем отличается от любого другого.
Обычно собеседование можно разбить на три части:
Знакомство
Самая приятная часть. Здесь вы рассказываете о себе, а интервьюеры — о компании, продукте, позиции и должностных обязательствах. На этом этапе нет задачек и правильных ответов — беседа будет идти про ваш опыт, образование, увлечения.
Хотя в этой части и нет правильных ответов, к ней всё равно нужно готовиться. Этот этап так же важен, как и техническая часть. Здесь проверяют ваши софт-скиллы, и иногда вам могут отказать в работе, даже если вы блестяще показали себя с технической стороны.
Рассказ о себе
Представьте, вы пришли на собеседование в компанию, о которой мечтали. Рекрутер предложил вам чашечку кофе, спросил, как вы добрались, а после попросил рассказать немного о себе. Такой простой вопрос застал вас врасплох: «С чего начать, стоит ли рассказывать о своём образовании, хобби или рекрутеру важен только мой опыт?»
Здесь нет правильного ответа и чёткой схемы. Но есть несколько советов, на что стоит обратить внимание.
«Почему вы хотите работать у нас?»
Как не стоит отвечать: «Потому что вы большая компания, у которой много интересных задач».
Какой ответ понравится. Познакомьтесь с продуктом и компанией получше, найдите, что вам нравится, а что нет. Расскажите про это на собеседовании.
Будьте честны, но не наглейте. Недавно я собеседовал кандидата из Бразилии, который на вопрос: «Почему ты хочешь у нас работать?» ответил: «В Европе платят больше, чем в Бразилии». Несмотря на то, что это максимально честный ответ, это показывает, что ему всё равно, где работать и чем заниматься.
«Почему вам интересен фронтенд?»
Я лично люблю задавать такой вопрос: «Почему вам интересен фронтенд? Почему не бекенд, например?» — он отлично показывает заинтересованность и страсть кандидата.
Как не стоит отвечать: «Да я просто попробовал, вроде интересно».
Какой ответ понравится: «Мне нравится создавать удобные интерфейсы» или «Мне нравится дизайн и программирование, и фронтенд — это как раз то, что мне нужно».
«Сработаемся ли мы вместе?»
Компании обращают внимание на разные качества кандидата. Некоторым важно ваше умение работать в команде, другим — желание обучаться, а третьим — всё и сразу. Но обычно компании ищут такого человека, который будет с командой на одной волне. Чтобы это понять, я задаю уточняющие вопросы:
Такие вопросы помогают узнать вас лучше: о чём вы мечтаете и чем интересуетесь. Они могут показаться вам немного личными, это нормально. Но отвечая на эти вопросы честно, вы почувствуете, как обстановка разряжается, и вот вы уже готовы к следующему этапу — техническому интервью.
Техническое собеседование
Техническая часть в каждой компании отличается. К сожалению, нет универсального набора вопросов, которые используют все. Но обычно этот этап состоит из вопросов на понимание базовых терминов, идей о фронтенде и небольших заданий. Кто-то может дать небольшую задачку, а кто-то попросит прокомментировать куски кода.
Прежде всего внимательно изучите вакансию и требуемые технологии, которые в ней указаны. Если указан React — будьте готовы к вопросам об этой библиотеке. Если написано «Мы используем Vue», то React уже не так нужен.
Теоретические вопросы
Блок с теоретическими вопросами можно условно разделить на два: вопросы на знание основ JS, CSS и других инструментов и вопросы о том, как вы привыкли работать с кодом.
Вопросы на знание инструментов
Чтобы подготовиться к первому блоку, не лишним будет освежить в памяти базовую теорию JavaScript, к примеру:
Будьте готовы к уточняющим вопросам, поэтому не говорите того, в чём не уверены, или того, что вы знаете поверхностно. Пройдитесь в теории по тем моментам, которые кажутся наименее понятными.
Когда я собеседую кандидатов, люблю задавать вопросы на понимание технологий:
Вопросы о привычках в работе
Кроме вопросов на знание технологий вас могут спросить о том, как вы работаете, к примеру:
Вас обязательно спросят: «Сколько бы времени у вас заняла эта задача?» Важно помнить, здесь нет правильного ответа. От вас не ждут точного ответа, но ждут адекватного. Ответ вроде «Сделаю за пару часов» покажет, что, возможно, вы переоцениваете себя.
Задание: что выполнит данный код?
Очень популярный вид задач на собеседованиях. Вам показывают слайды с разным кодом и просят сказать, что выведет функция, чему будет равна переменная и так далее.
Такие задания проверяют, как вы понимаете основы JS или CSS. Например, как работают переменные и как они друг на друга ссылаются.
Вариантов таких задач множество, и ко всем подготовиться невозможно. Но если вы знаете основы, у вас не будет проблем.
Задачи
Компании любят давать небольшую задачку (уровень “Easy” на LeetCode — например, вот такую), которую надо решить во время интервью. Чаще всего это небольшой алгоритм. Например, про работу со строками или с массивами.
Самое главное: не спешите решать задачу, а сначала немного подумайте. Задайте собеседующему вопросы по условию: какие данные здесь могут быть, какие есть ограничения.
Рассуждайте вслух. Вас оценивают не только по тому, смогли вы решить задачу или нет, но и по тому, как вы принимаете решения и воспринимаете обратную связь.
Как готовиться к таким задачам?
Посмотрите задачи уровня “Easy” на leetcode.com, hackerrank.com или codewars.com. Не пытайтесь решить их все разом за один вечер. Делайте это по чуть-чуть — по одной-две задачи в день.
Вам сразу может показаться, что в таких задачах нет смысла и в работе вы их не встретите. Я советую воспринимать их как экзамен, сдав который, вы попадёте в хорошую компанию. Это как поступление в университет: чтобы его добиться, нужно следовать правилам и сдать экзамены, о которых вы в будущем и не вспомните.
Ваши вопросы
Всегда, абсолютно всегда, готовьте вопросы. Помните, что не только вас собеседуют, но и вы собесeдуете компанию. Вам здесь работать и проводить минимум треть дня — спросите всё, что вам интересно.
Вас обязательно спросят: «Какие вопросы у вас есть к нам?»
Как не стоит отвечать: «Никаких». Возможно, вы хотите скорее закончить собеседование и уйти домой, но самая тяжёлая часть уже позади, вам лишь надо проявить интерес и узнать всё, что вас волнует.
Какой ответ понравится: «Над чем я буду работать, если вы меня наймёте?» Слушайте ответ и задавайте уточняющие вопросы. Узнайте про команду, как устроен процесс работы, есть ли код-ревью, будет ли кто-то обучать вас. Спросите про планы компании: какие проекты запускают? Какие сложности и вызовы есть сейчас?
Не стесняйтесь задавать вопросы, от вас только и ждут искреннего интереса к работе.
Общие советы
После собеседования
Вас пригласили на работу
В случае успеха всё просто: вы обсуждаете зарплату, дату начала работы и празднуете.
В случае отказа нужно сохранять спокойствие. Да, это обидно, но примите отказ гордо и спокойно. Не стоит писать в ответ: «Это вы так себе компания, и вопросы у вас глупые, вообще я просто так зашёл к вам по пути в магазин». IT — слишком маленький мир, и вы никогда не знаете, с кем столкнётесь в будущем. Вместо этого попросите детальный отзыв, над чем вам следует поработать. Ведь всегда можно попробовать устроиться в эту компанию ещё раз через полгода–год.
Если компания даст вам обратную связь, обработайте её внимательно. Найдите ответы на вопросы и решите задачи, с которыми не удалось справиться на собеседовании. Только обучаясь на своих ошибках, можно стать хорошим разработчиком.
Не бойтесь ходить на собеседования. Это важный опыт, который помогает узнать свои слабые стороны и прокачать их. К тому же худшее, что может случиться, — отказ, но так ли это страшно?
Задачи с собеседований (front-end)
Так получилось, что за свою карьеру front-end разработчика, я побывала на многих собеседованиях. Тема прохождения интервью не теряет своей актуальности, а в комментариях, когда речь заходит о собеседованиях, начинают ломаться копья. Хочу тоже внести свой вклад и поделиться накопившейся коллекцией вопросов. Прошу.
Лирическое отступление
На собеседования меня приглашают охотно, не знаю, виной этому симпатичная фоточка в резюме или его содержание. Если о резюме, то для описания технологий, используемых на каждой текущей работе, я трачу часа два, три. Порой просматриваю в чужие, как они оформлены, да и вдруг найду что-то полезное для себя…
Задачи
Для начала что-нибудь полегче.
1. Есть некоторая строка (var str = ‘fgfggg’;), что будет, если мы возьмем str[0]?
2. Реализовать методы, которые в процессе выполнения строки (2).plus(3).minus(1) дали бы на выходе 4.
Поскольку, мы работаем с числами, надо расширить прототип Number новыми методами.
Число два будет доступно через this в функции plus. Из нее мы возвращаем результат сложения числа, на которое указывает this и числа, переданного в качестве аргумента. Аналогично для minus.
3. Сейчас уже редко, но до сих еще спрашивают: «Почему плохо писать прямо в прототипы базовых типов?»
4. Дана функция, она принимает в качестве аргументов строки ‘*’, ‘1’, ‘b’, ‘1c’, реализуйте ее так, что бы она вернула строку ‘1*b*1c’
Ее можно решать прямо в лоб, перебирая в цикле все аргументы, но мы поступим умнее.
5. Дано дерево, надо найти сумму всех вершин.
Я решила задачу рекурсией, потом мы упростили решение, а затем переписали на очередь.
6. Можно ли из js менять значения в before, after?
Давайте, что-нибудь для разгрузки мозга, вопрос на верстку.
7. Вместить три блока 20X20px в ряд, в блок шириной 60px, при этом у блоков должны быть границы.
8. Как применяются скругленные углы для элементов и стили для текста(шрифт, тип шрифта, цветащте и тд)?
9. Что такое ресет стилей?
10. Требуется сверстать попап по центру, его размеры нам известны, но мы не хотим что бы он прокручивался вместе со страницей, причем по высоте может и не влезать в высоту экрана.
11. Нарисовать стилями полукруг.
12. Есть массив в котором лежат объекты с датами, отсортировать по датам.
13. Есть несколько слов, определить состоят ли они из одних и тех же букв(‘кот’, ‘ток’, ‘окт’)
Про промисы
В последнее время часто стали задавать вопросы про promse, что это такое, какие методы обработки ошибок, можно ли обойтись без них.(14, 15, 16)
Начну издалека, так как js-асинхронен, то в результате отслеживания завершения определенного когда в качестве аргументов передавались callback-функции, которые и вызывались по мере готовности. Цепочка ассинхронных методов росла, что приводило к Callback Hell, что затрудныло работу с кодом, отлаживание ошибок и им на смену пришли промисы.
Несколько промисов можно объединить и получить разом ответ от них
17. И конечно вопрос на засыпку: «Каким образом можно обойтись без промисов?».
18. Еще вспомнился вопрос про обработку ошибок в промисах. У нас есть три запроса к серверу, один возвращает нам имя пользователя, второй его данные, а третий изображение для аватарки, мы для каждого запроса используем по промису, объединяя их в цепочку, что будет если в одном из запросов произойдет ошибка, довыполнится ли цепочка?
Промисы все разрастаются и на смену Callback Hell приходит Promise Hell. Что же делать?
(19)Вот еще один примерчик на асинхронность. Объяснить в какой последовательности выведутся цифры и почему так.
Достаточно популярный, надо сказать. Вот мне он и достался в очередной раз. Уже отработано начала отвечать: «1, 3, 2. Так как хоть js и асинхронен, но внутри его есть очередь выполнения и setTimeout и setInterval, если им указан 0, помещают вызов функции в конец очереди.»
Тут надо сказать ребята зафейлились, заявив, что я ответила правильно, про 132, но не объяснила почему.
(20)Вообще вопросы на setTimeout и setInterval весьма актуальны.Меня спрашивали: «Какое минимальное время можно задать?»
Куда же без замыканий
Не давно выделили целую статью для этого примера(тут), читатели в комментариях расписывали всевозможные способы решения, от традиционных до фантастических. Вот о которых я обычно рассказывала на собеседованиях.
21. Что будет выведено в консоль, как можно модифицировать пример что бы он возвращал правильный результат(назовите как можно больше способов)?
Самый распространенный, обернуть в замыкание
Не все обращали внимание, что в i можно передать не только контекст
Так же методам setInterval и setTimeout можно передать аргументы, которые будут прокинуты в качестве аргументов калбек-функции
Одна из возможностей es6, в данном случае сработает несколько неожиданно, let не в блоке <>.
Давайте что-нибудь похардкорнее.
22. Надо написать функцию, которая вернет «hello world», но при этом в теле функции нельзя использовать ни цифры, ни буквы, а циклы, массивы, объекты можно, но без цифр.
Увы, эти интересные люде не сказали мне как ее решать, поэтому, подумав дома, я могу только предположить.
Так я получила букву H, но это изврат еще тот, осталось сделать оставшиеся 10 знаков…
(23) От них же. Числа от 1 до 100 лежат в массиве, они хаотично перемешанные, от туда изъяли одно число, надо найти, что это за число. алгоритм не должен превышать O(n^2) сложности.
Пройти массив циклом и сложить все имеющиеся там цифры и вычесть из числа, полученного по формуле (n + 1) / (n / 2).
Мне пришло в голову более экзотическое решение. Детям и слабонервным лучше не смотреть.
Просто мне вспомнилось, что когда-то спрашивали: «Как быстрее всего найти сумму элементов массива?»
Вот на тот момент вспомнилось и не пришло ни чего лучше.
(24) Вот еще фейл-задача. Приведу дословно, те напишу как написали мне.
Меня сбила эта строчка function Foo(Book, ‘Учебник javascript’, ‘Петр Сергеев’). Только я вижу, что здесь что-то не так? Мне предложили решать через Object.create(), но я не согласна. Свойства и методы, записаные в саму функцию-конструктор, не будут «скопированы» Object.create.
Конечно меня не взяли, а на последок посоветовали лучше учить теорию. Хнык-хнык.
В любом случае, я бы предпочла решать так.
Хочу посоветовать чувакам лучше готовиться к собеседованиям.
Задача про палиндром
(25) Да, до сих пор ее задают. Причем она попалась мне несколько раз. В первый раз я стала решать циклом, вроде бы получилось, только оставалась проблема с разными символами, писать для каждого символа replace — это не вариант, а в регулярках я не сильна, да и сработает он до первого подходящего вхождения. Я не привыкла оставлять за спиной что-то непонятное, поэтому разобралась как реализовать функцию.
Красиво, просто, изящно.
Забавно, но где-то через год мне попался этот же вопрос. Я обрадовалась: «Свезло». Как оказалось, нет. Требовалось решить с помощью цикла, а регулярку можно было использовать только для одного символа. Собеседник мотивировал это тем, что replace с регуляркой по всей строке — слишком ресурсоемко.
Подумав дома, у меня получилось вот так:
26. Как подключить js, css? Плюсы, минусы разных способов?
Можно с помощью тегов
прямо на странице или
В date подпихнуть вут такую строчку
За место данных можно вернуть какой-то код, который закроет вызов функции и выполнится у пользователя.
Сейчас уже исправили, но раньше наблюдалась критическая уязвимость в json-е, с помощью символа переноса строки он подламывался.
32. Ускорение загрузки страницы.
1 минимизировать и склеить в один все js-файлы
2 то же и с css
3 собрать изображения в спрайты
4 кеширование
а) файлы js и css кешируются навсегда( или на длительный период, к примеру на год), когда в них вносятся какие-то изменения, в результате разработки, меняется номер версии, браузер считает, что это новые файлы и закачивает их. Время кеширование содержится в заголовке expires.
б) файл кешируется до тех пор, пока в нем не произошли изменения. Когда пользователь в первый раз заходит на сайт, у него еще нет кеша, файлы закачиваются и в следующий раз, когда происходит обмен заголовками происходит анализ ETag(хеш суммы содержимого содержимого файла или хеш последнего времени изменения, или номер версии) Если он изменился, то закачивается, в противном случае, берется из хеша.
Так же можно брать заголовки с датой последней модификации(Last_Modifed), но это менее надежно.
в) можно сжать данные перед отправкой, решается настройкой конфига в nginx. Пример. Content-Encoding: gzip
г) можно разбить js на модули и на разных страницах подключать по мере необходимости.
Можно найти еще несколько, но они менее популярны или устарели.
33. CommonJS и AMD или модульность?
Один принцип архетектры асинхронен, а второй синхронен. В качестве примера можно привести RequaerJs, по одному его виду можно сказать, что он асинхронен
define — фактически простая функция, все, что написано за ее приделами будет выполняться без оглядки на то, что происходит в define, поэтому одним аргументом идет callbeck-функция. Как только подгрузятся все зависимости, перечисленные в массиве, так они станут доступны внутри через аргументы callbeck-функции.
Система модулей в Node.Js наоборот синхронна. Мы пишем:
и сразу ниже с mod можно работать, все останавливается, пока модуль не загрузится
На собеседование я начала решать так:
Аналогично пишутся функции для five, minus, two. Уже дома, поразмышляв в спокойной обстановке, появилось такое решение
35. Сортировка пузырьком.
Да, да, ее еще спрашивают.
36. Обратная польская нотация.
Основной принцип. Дана строчка 23+1-, начинаем двигаться по ней, как только доходим до первого арифметического знака, берем две цифры перед ним и на их место, записываем результат вычисления. Получится 51-. Начинаем все с начала.
Кому интересно, вот статья wikipedia
37. Есть div, в нем другой div, у второго задан padding 50%, как это все будет выглядеть?
Собеседник предложил мне посмотреть дома как оно сработает, хотя мне стало очень интересно.
Как вы считаете, правильно ли на собеседование отвечать самому на вопрос, если кандидат с ним не справился?
38. Есть строка, состоящая из разных скобок, проверить закрыты ли все. Пример строки: «())(<>><()][]["
Если бы передавались строки из скобок ‘<', '[', ']', '>‘
39. Напишите код, который при клике на любой div внутри root будет выводить в консоль его id.
40. Напишите код, который сделает из массива объект
// на входе массив
41. Что выведется в результате?
[18, 16], так как за счет функции
создает замыкание, var i = i — уже принадлежат областям видимости в замыканиях.
в начале поищет в своей области видимости i, не найдя, подымется на уровень выше и там найдет его. Из функции вернется сумма, которая будет положена в массив последним элементом.
42. Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта используя функцию
Что вернет метод?
а) ошибку, т.к. метод объявлен позже, чем создание экземпляра
б) вернется ‘FOO’
44. В js переменные объявленные следующим образом:
a=3; b=«hello»;
Укажите правильные утверждения.
а) создаются в локальном контексте
б) создаются в глобальном контексте
в) создание переменной без ключевого слова var — синтаксическая ошибка.
45. Что вернёт этот код — typeof (function()<>)()
а) callback
б) method
в) undefined
г) function
47. Почему 0.1 + 0.2 даст 0.30000000000000004
48. Моему коллеге на должность php-разраба, предложили такую
Есть два блока, второй скрытый, если в первом нет дочерних элементов, то показать второй.
Конечно это не все задания, которые мне довелось решать, какие-то я благополучно забыла, какие-то слишком банальные, масса вопросов, просто на теорию, остались за кадром.
Прочее
Вот еще парочка вопросов, они на прямую не касаются фронта, но, наверно не лишне знать.
Идеальный интерфейс в вашем представление?
Как вы бы сделали отказоустойчивый сайт?
Какие типы уязвимостей знаете?