Задать вопрос
  • Как складывается отрицание (!) и пустой массив?

    @ned4ded
    Верстка, Фронтенд
    Очень спорный вопрос для собеседования, откровенно говоря.

    Операторы сложения и вычитания имеют унарную версию: употребление такого оператора перед значением конвертирует значение в числовое.
    console.log(+"1"); // prints 1
    console.log(+"s"); // prints NaN


    В случае +[], что эквивалентно Number([]), массив преобразуется в 0. Соответственно в операции !+[] используется 2 оператора подряд (например, как !! во второй части выражения), сначала происходит преобразование массива в ноль с помощью унарного оператора сложения +[] и конвертация нуля в true с помощью оператора !. В первой части выражения получаем true.

    Массив рассматривается как truthy значение, сл-но двойной оператор not во второй части выражения дает значение true (грубо говоря, это способ конвертировать массив в булевый тип).

    В итоге (!(+[])) + (!![]) (я позволил себе расставить скобки, чтобы был более очевиден порядок выполнения), конвертится в true + true, что конвертится в 1 + 1, собственно, вот и ваша двойка.

    ps Я хз, люди, которые составляют такие задачи, видимо, просто глумятся.

    более наглядная последовательность преобразований:
    !+[] + !![];
     
    /* +[] converts to 0 */
    
    !0 + !![];
    
    /* !0 converts to true */
    
    true + !![];
    
    /* ![] converts to false */
    
    true + !false;
    
    /* !false coverts to true */
    
    true + true;
    
    /* both true values convert to numbers */
    
    1 + 1;
    
    /* equals 2 */


    Небольшой апдейт. На немой вопрос "почему конвертация массива в число дает 0, а конвертация массива в булевой тип дает true, тогда как true != 0?" можно ответить след. образом:
    а) Почему конвертация массива в число дает 0? Массив является объектом в js, для конвертации объекта в число его нужно сначала конвертировать в примитив. В данном случае для простого объекта вызывается метод toString(). Метод toString() на массиве возвращает конкатенацию строковых значений массива, что для пустого массива дает пустую строку "". Подробнее о логике конвертации объекта в примитив в спеке, ecma-262/5.1/9.1. Далее конвертируется строка в число, что для пустой строки равно 0, подробнее пункт 9.3.1 спеки.

    б) Почему конвертация массива в булевый тип дает true? Простой ответ: согласно пункту 9.2 спецификации. Если поразмышлять, то скорее всего это означает, что объект существует (а он не может не существовать, если существует ссылка на него).
    Ответ написан
    3 комментария
  • Как пандемия коронавируса и кризис повлияли на рынок джуниоров и стажеров?

    opium
    @opium
    Просто люблю качественно работать
    Да никак, как было не их чего выбирать так и осталось, почему то эти Джуниоры взяли и не заметили кризис и не стали учиться
    Ответ написан
    1 комментарий
  • Как пандемия коронавируса и кризис повлияли на рынок джуниоров и стажеров?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Компании больше стали ценить умения, чем связи, знакомства, дипломы.
    2. Пришло понимание того, на что раньше не обращали внимания.
    3. Ужесточился режим отбора работников с помощью удалённого тестирования в real-time-режиме (это значительно экономит трудозатраты в будущем).
    4. Стала более гибкая система договорённостей в плане условий сотрудничества и оплаты.
    5. Чаще стали проверять качество работы.
    Ответ написан
    Комментировать
  • Как пандемия коронавируса и кризис повлияли на рынок джуниоров и стажеров?

    samodum
    @samodum
    Какой вопрос - такой и ответ
    Мы пока не набирали джуниоров в последнее время.
    Т.к. я уже насмотрелся на джунов, то могу только предположить, что с этим стало тяжелее. Джуниору нужен наставник, который всегда рядом. На удалёнке джуна натаскивать очень сложно.
    Поднимаются требования к джуниору, он должен владеть нужными инструментами уже сразу. Гит, хорошее владение основными командами, настройка VPN, поднять IDE, настроить окружение... Всё это он должен сделать сам. А в офисе ему дадут уже готовую машину, а коллеги помогли бы сразу. И при этом дома джун должен иметь достаточно мощную рабочую машину, необходимое оборудование. Тестировщикам и разработчикам мобильных приложений не позавидуешь - нужно иметь парк доступных мобильных устройств...
    И не каждый Джун владеет средствами, чтобы купить мощную машину для работы. На работе её просто выдадут.
    Добавлю ещё, что в неформальном общении в курилке, на обеде, у кофе-автомата, у кулера происходит обмен зачастую ценнейшей информацией, которую не только джун, но и любой другой сотрудник больше нигде не получит.
    Ответ написан
    2 комментария
  • Как пандемия коронавируса и кризис повлияли на рынок джуниоров и стажеров?

    DevMan
    @DevMan
    там где я работаю практически ничего не изменилось.
    а что изменилось касается только перехода/оптимизации процессов с прицелом на удаленную работу. не в смысле, что все переходят на удаленку, а в том, что если придется, то предоставить эффективные средства для этого.
    Ответ написан
    Комментировать
  • Достаточно ли книги Ильи Кантора для трудоустройства?

    @AndrewRusinas
    Я, попав на работу джуном, даже десятой части оттуда не знал. Прочел спустя полгода. И когда прочел, получил дичайший буст.
    Но тогда прочтение наложилось на уже имеющийся опыт, и я, глава за главой, получал реально ценную инфу о том, как сделать то, что я уже делал, лучше и быстрее.

    Разумеется, в начале карьеры я тоже пытался её прочитать, не осилил.

    Но по уровню качества, подачи и актуальности - это топовый ресурс. Всё, чего там не хватает, можно "добить" узконапоравленными статьями с медиума или личных блогов/YouTube.

    Отвечая на вопрос:
    Трудоустройство джуном это лотерея. Где-то вас будут унижать вопросами, на которые порой сеньоры ответов не знают (случай из моей практики), где-то вас возьмут просто потому, что перед вами было 15 гастарбайтеров, а вы первый адекватный соискатель. У каждой компании свои рамки для грейдов.
    Но прочтение Кантора это, безусловно, огромный такой плюс и очень упростит жизнь. Если совмещать с практикой.
    Ответ написан
    Комментировать
  • Насколько плохо все для начинающих программистов на рынке?

    @Araya
    Правдива
    Ответ написан
    Комментировать
  • Правильно ли подсчитано количество перемещений в сортировке вставками?

    @german11235
    Если вы знакомы с термином асимптотическая сложность и понимаете как она высчитывается, то осознаёте, что зависимость O(const * n^2) останется прежней. Считая каждую инструкцию по отдельности вы просто манипулируете константой стоящей спереди.

    Для наглядности отношения количества сравнений к количеству обменов я бы порекомендовал
    const temp = arr[j - 1];
    arr[j - 1] = arr[j];
    arr[j] = temp;
    выделить в одну операцию.

    Также у Вас неверно реализована сама сортировка, о чём и говорит статичное количество сравнений.
    Ответ написан
    6 комментариев
  • Правильно ли подсчитано количество перемещений в сортировке вставками?

    0xD34F
    @0xD34F
    Если происходит перемещение элементов, то счетчик увеличивается на 3, потому что происходит 3 операции с элементами.

    А если бы обмен был реализован так:

    [ arr[j - 1], arr[j] ] = [ arr[j], arr[j - 1] ];

    Или даже так:

    swap(arr, j - 1, j); // функция меняет местами элементы, но как именно - вам неизвестно

    На сколько бы вы увеличивали счётчик? Не надо 3, пишите 1. Рассматривайте обмен как единую операцию.
    Ответ написан
    1 комментарий
  • Правильные ли ответы в рамках составления алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    В зависимости от уровня задающего задание, ваш ответ правильный или не совсем правильный.
    Да, именно if-ов сравнений 2N. Но внутри цикла for тоже закопано N сравнений. Как цикл-то работает? У него есть переменная счетчик и он ее сравнивает с граничным условием. Это хорошо видно на блок схеме - блок-цикл имеет 2 выхода. Значит в нем есть ветвление и, следовательно, сравнения.

    Так что более точный ответ 3N. Еще более точный ответ 4 N. Потому что функция readln тоже должна какие-то сравнения делать, чтобы остановить ввод на конце строки, но это уже nitpick, который от вас почти точно не ожидается.
    Ответ написан
    2 комментария
  • Как преобразовать строку в оператор?

    @iddqda
    network engineer, netdevops
    еще можно сделать как в питоне
    d = {'+': (a,b) => a+b, '-': (a,b) => a-b }
    const sum = '+'
    d[sum](123,321)
    444
    
    const minus = '-'
    d[minus](123,321)
    -198


    хотя это тот же свич по сути
    Ответ написан
    Комментировать
  • Бэкенд проще для новичка, чем фронтенд?

    @Need_For_Sleep
    На чистом php вы скорее всего тоже работать не будете, тут тоже масса нюансов. Да, у php порог вхождения меньше, но не на много чем в js. Если вы уже учите js, я бы порекомендовал довести дело до конца
    Ответ написан
    Комментировать
  • Бэкенд проще для новичка, чем фронтенд?

    Mx21
    @Mx21
    Software engineer
    Чтобы стать fullstack'ом необязательно учить php для бэкенда, вместо этого можно выбрать NodeJs и на фронте и на бэке у тебя будет JS. Но, на nodejs будет сложнее найти работу. Вообще, понятие полноценного фуллстека очень абстрактное, чаще это мифические существа, в какую-то сторону будет больше перекос. Нельзя и там и там все успевать. Я бы посоветовал тебе, выбрать тебе что-то одно и там уже развиваться. Сейчас уже не 2007 год и во фронте и бэке уже надо учить кучу вещей, это если ты хочешь выйти за рамки клепание однотипных сайтов.
    Ответ написан
    Комментировать
  • Бэкенд проще для новичка, чем фронтенд?

    @FrontendNoob
    Ситуация очень двоякая. Своих проблем хватает и в PHP и в Javascript. В контексте php, найти работу на первых парах будет сложнее, многим компаниям нет интереса до php джуниоров и на то есть причина (качество кода у джуниоров крайне низкое, тем-более что язык с динамической типизацией. А значит джуниору практически ничего нельзя поручить). Кроме того, не стоит верить на слово человеку, который имеет обширные познания в своей сфере. Это просто только для него, вам же вероятнее всего так не покажется. К тому же - информации необходимой к изучению ничуть не меньше.
    С фронтендом немного попроще, достаточно понимать html + css + любой сборщик на ваш выбор (это совсем не много) и вот, вам уже можно поручить верстать простые страницы или небольшие проекты. Однако с найти работу с упором на Javascript будет также не просто, так как в основном требуются React/Vue/Angular разработчики.
    Что касается желания стать фуллстеком - это конечно похвально, но ваш уровень заработной платы от этого ничуть не увеличится, а напротив может стать немного меньше. Все потому, что HR смотрят на 1-2 ваших навыка, а у вас их может быть несколько десятков. Кроме того работодатели нередко просто не верят, вам потому, что их у вас может оказаться действительно много навыков.
    К тому же, чем шире ваш стек, тем тяжелее найти подходящую вашим ожиданиям работу (в том числе и по заработной плате, не зря же вы 3 года практикуете). Узких специалистов намного охотнее берут на работу, да и знают они больше, чем вы в той области, на которую будет открыта позиция.
    Опять же я не претендую на то, что мое мнение это истина в последней инстанции, я просто опираюсь на свой 4 летний опыт работы фуллстеком. Как говорится, у вас своя голова на плечах, никто за вас не решит :)
    Ответ написан
    1 комментарий
  • Бэкенд проще для новичка, чем фронтенд?

    @andreysuha
    Что то знаю
    Если Вы хотите в веб фулстеком, то на фронте не особо приходится выбирать яп, так как альтернатив js нету. А на беке вовсе не обязательно учить именно php. А вообще это очень субъективно может быть такое что Вам как по маслу зайдет js, а php будет идти очень туго и со скрипом. Мое мнение если уже начали js, то не стоит его бросать и резко начинать учить php
    Ответ написан
    3 комментария
  • Бэкенд проще для новичка, чем фронтенд?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Тут нет четкого ответа - все субъективно. С одной стороны на фронте есть и верстка и много особенностей браузеров и все это развилось за последние годы, но со стороны бэкэнда тоже все разрослось: контейнеризация, кэши, очереди, стриминг, ETL, ....

    Каждый меряет окружающий мир по себе и своему опыту. Опыт вашего знакомого не обязан быть верным и для вас, но это не точно :-)
    Ответ написан
    9 комментариев
  • Является ли элемент массива отдельной переменной?

    Рассмотрите лучше более сложный пример
    const example = [{val: 1}, {val: 2}, {val: 3}];
    const item = example[0]; 
    console.log(item)
    item.key = 1
    console.log(example);
    example[0] = {val: 8}
    console.log(item)
    console.log(example);

    А после этого погуглите про присвоение в яваскрипте по ссылке и по парамеру
    И да, в коментарии написали правильно, переменная это всегда переменная, а вот каким образом она присваивается, по ссылке или по значению - отдельный вопрос.
    Ответ написан
    2 комментария
  • Является ли элемент массива отдельной переменной?

    pavel_ataykin
    @pavel_ataykin
    Верстаю и программирую всякое.
    Привет! Будет новой переменной с значением example[0]. Это легко проверить :)
    const example = [1, 2, 3];
    const item = example[0]; // 1
    example[0] = 10;
    console.log(example); // [10, 2, 3]
    console.log(item); // 1
    Ответ написан
    3 комментария
  • Правильно ли объявлять массив через константу?

    twobomb
    @twobomb
    Правильно. Элементы менять можно, а ссылку нет
    Ответ написан
    2 комментария