Мой опыт подбора предложений от фронтенд-школ 9 крупных заводов

опрос

Эта статья была впервые опубликована на SegmentFault Ян Цзюэчэном, пожалуйста, не перепечатывайте без разрешения.
Оригинальная ссылка:сегмент fault.com/ah/119000002…

0x00 Кто автор

Я специализировался в области разработки программного обеспечения в Пекинском технологическом институте, я учусь на старших курсах и сейчас работаю.ByteDance. Он инвестировал в разработку полного стека на основе интерфейса с первого года обучения и самостоятельно разработал ряд средних и малых проектов.Лаоти|Рынок общежитийОснователь сообщества и независимый руководитель проекта Mini Programs.

Когда я учился в школе, я был занятым человеком. Недавно из-за случайной возможности я столкнулся с сезоном набора в школу и, наконец, поставил перед собой цель планирования работы после окончания учебы.

Так я участвовал в школьном наборе 9 крупных отечественных заводов за один месяц.

За месяц я получил предложения (включая намерения) от 5 крупных производителей, включая ByteDance.

Связанные интересы: я уже присоединился к ByteDance после выпуска этой статьи Nuggets и весеннего набора ByteDance.24 февралязапускать!
Друзья, которые хотят протолкнуть код весной, набирают прямо здесь[ByteDance] Оптимизация прямой отправки и возобновления работы отдела!~ В порядке живой очереди

0x01 Зачем писать эту статью

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

Поэтому, если вы хотите показать интервьюеру свой истинный уровень, очень важно освоить некоторые подходящие методы.

текстовый контекст

Содержание основного текста сосредоточено на способностях, необходимых для подачи заявки на набор в школу на крупных фабриках, и анализирует конкретные стратегии набора в школу на каждой крупной фабрике. Делится на две части:

  • Как попасть на собеседование
  • Как пройти собеседование

Я надеюсь предоставить справку для студентов, которые впервые выходят на работу, а также краткое изложение моей напряженной работы за последние несколько недель.

0x02 Вербовка школы переднего плана Дачанга: как пройти собеседование?

2.1 Пройти первичный отбор резюме

2.1.0 Вставить

Здесь мы должны подчеркнуть внутренний толчок в начале и процитировать ответ @Tony Zhihu:

Внутренние направления, скорее всего, ускорят процесс подачи заявления, но мало шансов увеличить ваши шансы на поступление.

Есть много, много людей, которые отправляют свои резюме в Google каждый день. HR просматривает тысячи резюме, отправленных онлайн каждый день, и когда они видят ваше, они не знают год обезьяны и месяц лошади. Кроме того, вы действительно уверены, что ваше резюме сможет выделиться среди десятков тысяч резюме?

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

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

2.1.1 Схема и иерархия

Не используйте причудливые шаблоны онлайн! Хорошее резюме должно содержать самые разумныеплотность информации. hr увидит ключевую информацию через секунду. Не должно быть никаких других вещей, кроме текста и фотографий, она должна быть черно-белой, без лишней информации. Вся эта красочная информация может только уменьшить информационную плотность вашего резюме.

Мой совет: пишите резюме прямо в word, не используйте цветные шаблоны. Для всех иерархических отношенийразмер шрифта, толщинадифференцировать. использоватьвертикальная полосаРазделите встроенную информацию,горизонтальная линияРазделяйте содержимое на уровне блоков. Верхние две-три строки четко объясняют личную информацию, а профессиональная фотография размещается справа.

В качестве внешнего интерфейса наличие собственной чувствительности к макету является самым основным требованием. Я использовал свой опыт в своем резюме.В целях защиты личной конфиденциальности студенты, которым это необходимо, могут связаться со мной в приватном чате.

2.1.2 Выбор и порядок

При написании резюме не выкладывайте на нем все свои плюсы, это только заставит интервьюера не понять ваше резюме. Запомни одно,Не все преимущества являются преимуществами в глазах окружающих, не все преимущества подходят для должности, на которую вы претендуете.

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

Не пишите самооценку!

2.2 Пройти письменный тест

В письменном тесте нет никаких хитростей, я лично чищу Leetcode. Если вы можете провести 100 основных вопросов для собеседования, вам не о чем беспокоиться.

я здесь附录2Некоторые из письменных тестовых вопросов, с которыми я столкнулся, записаны в книге только для справки.

0x03 Front-end школа набора крупных заводов: как пройти собеседование?

3.1 Преодолеть напряжение

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

Интервьюерам всегда понравится, как вы сохраняете спокойствие перед лицом невзгод и все еще можете понять общую ситуацию перед лицом сложных проблем. И так будет по любому поводу в будущем.

Как преодолеть напряжение, я предлагаю здесь два предложения

  1. как можно большеучаствуйте во всем, что можетевысокое качествоопрос. Хорошее интервью может помочь вам еще больше укрепить вашу систему знаний и, что наиболее важно, развить вашу способность реагировать на месте.
  2. Как можно меньшеВнутренне с нетерпением ждите оценки интервьюера вас. Сосредоточьтесь на решении проблем, не полагайтесь на одобрение интервьюера в своих силах и научитесь оценивать себя.

3.2 Полное логическое мышление

Во время собеседования интервьюер всегда любит дать вам несколько минут, чтобы решить сложную задачу: реализовать двустороннюю привязку Vue самостоятельно, написать алгоритм справедливой перетасовки, написать стиль выделения CSS и получить полную аранжировку определенного string , напишите полифилл для класса. Или углубитесь в свой проектный опыт и пошагово запросите технические детали, чтобы вы могли сразу же подумать, как добиться лучших результатов.

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

В это время вы должны осознавать, что интервьюер проверяет ваше логическое мышление.Цель интервьюера не в том, чтобы попросить вас дать абсолютно идеальное решение, а в том, чтобы увидеть, как вы используете набор систематического логического мышления, чтобы вызвать собственные знания. база, в конечном итоге давая вам свой собственный путь мышления.Самое главное – это мышление в процессе, которое необходимо объяснить интервьюеру..

3.3 Солидные технические резервы и инженерные возможности

Следующий шаг — пройти 90% всего собеседования, то есть оценку ваших технических резервов и инженерных возможностей.

Вообще говоря, передовые школьные рекрутинговые комитеты крупных заводов уделяют больше внимания всесторонней оценке интервьюируемых, чем другие малые и средние предприятия.Если вы из крупной школы, техническая оценка школьного рекрутинга будет включать, но не ограничиваться:

  • Основы информатики (структуры данных, алгоритмы, компьютерные сети, операционные системы, базы данных)
  • Основы, связанные с работой (система знаний JS/ES, рендеринг и кэширование в браузере, взаимодействие с внешним и внутренним интерфейсом, веб-безопасность)
  • Практический инженерный опыт (оптимизация производительности, управление зависимостями, упаковка зависимостей, модульность, компонентизация, аутентификация пользователей, управление версиями, управление пакетами, основа сервера)
  • Понимание основного фреймворка (альтернатива Vue, React)
  • Некоторые из самых требовательных производителей также оценят ваши базовые науки (линейная алгебра, высшая математика).

Кроме того, у разных производителей разные фокусы.

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

Через стратегию интервью каждой крупной фабрики вы также можете наблюдать за технической силой и направлением развития бизнеса команды компании со стороны.

Я организовал все точки знаний, с которыми столкнулся в технической части, в интеллект-карту. Рекомендуется внимательно прочитать их один за другим.Что касается любых знаний, в которых вы не уверены на 100%, я предлагаю вам организовать их в список и отсортировать их один за другим.

P.S. Необязательные знания, отмеченные звездочкой, можно пропустить:

前端知识体系

Для студентов, которые не хотят видеть картинку, я экспортировал ее в виде схемы, которую можно сохранить в памятке.

Набор в школу переднего плана в Дачане — система знаний

3.4 Планирование карьеры

Если вы пройдете все вышеперечисленные оценки, поздравляю, вы всего в одном шаге от получения предложения.

Обычно к этому времени интервьюер спрашивает вас о ваших карьерных планах.

На самом деле, этот вопрос тоже нужно задать себе, лучше всего при подаче резюме хорошо подумать:

  • Почему вы хотите перейти в эту компанию, в чем ее преимущества (бизнес, технологии, платформа, перспективы)
  • Почему я должен претендовать на эту должность, какие у меня ожидания относительно моего будущего направления развития (способности, должность, стек технологий, отрасль)

Опять же — фронтенд, который не хочет быть архитектором, не является хорошим программистом (туман).

3.5 Обязательно просматривайте резюме после каждого завершения

Если собеседование не просматривается, вы будете равносильны тому, что не будете присутствовать на нем, независимо от того, сколько интервью вы посещаете. Не вздыхайте о том, что вы выставили себя дураком во время интервью или проклинали, как антигуманно ведет себя интервьюер, как бы вы ни были обижены, возвращайтесь к интервью сразу после него.

Интервью на месте лучше всего начать вспоминать процесс интервью и писать заметку, как только вы появитесь на сцене. Если это телефонное интервью, вы можете записать его и прослушать снова. Посмотрите на вопросы интервьюера и ваши собственные ответы, чтобы увидеть, насколько хорошо вы ответили (что вы ответили?), можно ли ответить лучше.

я здесь附录1Записывал отзыв каждый раз, когда участвовал в наборе в школу.

0x04 Опыт интервью различных крупных заводов

Я изначально хотел количественно оценить и оценить опыт собеседования в процессе собеседования каждой крупной фабрики.К сожалению, некоторые собеседования уже давно прошли, и впечатление не такое однозначное.Боюсь, что моя оценка будет необъективной. Итак, позвольте мне кратко рассказать о некоторых вещах, которые произвели на меня впечатление во время интервью.

  • Bytes отправит небольшой подарочный пакет, включая шляпу Douyin, всем, кто участвует в интервью, а также пакет с завтраком и бесплатный обед "шведский стол" в полдень, что очень важно.
  • Когда старик на станции B спросил меня, почему я выбрал станцию ​​B, он добавил: «За исключением двухмерных ощущений».
  • Каждое собеседование в Ali Tao FED - телефонное интервью-сюрприз.Я звонил, пока спал, летал и ел.В среднем время каждого тура составляло 90 минут, а адрес собеседования будет сообщен заранее... ( в частности, вы можете увидеть приложение 1# 6.8 阿里校招二面)
  • Поездка на Mobike в здание штаб-квартиры Meituan Mobike для участия в интервью по разработке апплета Mobike.
  • В Byte я познакомился с очень забавным младшим и очень милой младшей сестренкой, которая отвечает за летающий чат.
  • Внутренний толчок Tencent по-прежнему очень важен, иначе интервьюер может вас не увидеть
  • Вышеупомянутое применимо к большинству крупных заводов
  • Приведенный выше не работает с байтами
  • Я очень надеюсь, что младшие братья Tencent и Ali не повесят меня, когда увидят это.

В конце написано 0x05: как стать хорошим фронтенд-инженером

Недавно я с глубоким чувством увидел статью "Front-end Deep Water Area" Конечным выходом для технических должностей должно быть установление технических барьеров и влияние на бизнес-решения.

Во время интервью на станции B я также столкнулся с вопросом, который заставил меня задуматься. Время хорошенько подумать об этом».

В итоге я ответил на три предложения:

"
продолжать идти,
быть скромным,
Продолжайте изучать лучшие практики каждый день.
"

Поделись со всеми!

Приложение 1: Организация вопросов для интервью в Дачанге

6.1 Условные обозначения

символ имея в виду
правильный ответ на месте
× неправильный ответ на месте
? Не могу сказать, правильный ли ответ
следовать за Вопросы о родителях
() Мой ответ на сайте интервью
()правильно Наиболее подходящий ответ (или дополнение к живому ответу)
Пополнить Личное дополнение интервьюера к очному ответу
просить Вопросы, которые я задал интервьюеру

PS Не все тестовые вопросы содержат вышеуказанные символы, т.к. все они являются локальными записями памяти, поэтому недоделок много.

6.2 Стажировка Али

  1. Описать дерево с помощью js √
  2. Нерекурсивно пройти по дереву ×
  3. Подробно js новая операция √
  4. Режим вызова метода this указывает на ×
    • Последующие действия: режим вызова функции указывает на √
  5. Что такое замыкание js √
  6. Как получить междоменный доступ √
  7. Как общаться между родительским и дочерним компонентами vue ×
  8. Напишите анимацию бесконечного цикла с помощью css ×
  9. Как сделать адаптивный макет √
  10. Как очистить поплавок √
  11. Рукописный jsonp √
  12. Почему междоменный запрет запрещен ×
  13. osi семь слоев × я пропустил это
  14. tcp рукопожатие три раза √ волна четыре раза ×
  15. Почему setTimeout может выполняться асинхронно в однопоточном js ×
  16. В чем разница между процессом и потоком?
  17. Напишите программу для преобразования чисел в китайский √
  18. Как привязать это к новому объекту в функции js √
  19. В чем разница между bind и call ×
  20. Рукописная быстрая сортировка ×
  21. Расскажите мне о коде статуса http √, что означает 303 304 ×
  22. Принцип и четыре элемента тупика √
  23. Разница между файлом cookie и сеансом √
  24. Определение гомологии √

6.3 Рекрутинговая сторона школы Билибили

  1. Подробная область действия и закрытие в es5 es6 √ (es5 глобальный + функциональный уровень, функциональное закрытие, блочный уровень es6)
  2. Подробный входной URL-адрес для завершения рендеринга страницы)
  3. Подробный асинхронный механизм js Event Loop, MacroTask и MicroTask √ (1 основной поток + n очередей задач, браузер помещает в очередь после асинхронной обработки, циклическая обработка, одна макрозадача, за которой следуют все микрозадачи)
  4. Использование Promise.all √ (выполнить после всех обещаний в конце)
  5. Как сделать Promise.all действительным после создания исключения × (правильный ответ: активное отклонение)
  6. Что такое VueX √ (управление количеством состояний компонентов)
    • Разница между действием и мутацией в VueX × (правильный ответ: синхронный и асинхронный)
  7. Детализация принципа двусторонней привязки данных Vue √ (синтаксический сахар, мониторинг dom + мониторинг модели)
  8. Преимущества Vue √ (виртуальный дом, привязка данных, разделение представления и модели, скрытие сложных операций с домом)
  9. Как добиться SEO-оптимизации? (Отвечайте только на псевдостатические данные на стороне сервера)
  10. Подробное описание Оптимизация Reflux и RedRaw √ (рефлюкс физический размер изменен, обратным холодильником будет перерисован, RedRaw обязательно рефлюкс, что минимизирует количество рефлюксов, а затем изменяет дерево элемента DOM)
  11. Подробная оптимизация защиты от сотрясений и дросселирования √ (блокировка состояния/генлок)
  12. Кратко опишите новые возможности ES6 √ (область действия блока, переменные не продвигаются, let, const, стрелочные функции, шаблонные строки, промисы, асинхронность)
  13. Кратко опишите характеристики стрелочных функций ×
  14. Как оптимизировать упаковку веб-пакетов ×

6.4 Вербовка школы Али

  1. Список нескольких наследуемых и ненаследуемых элементов в CSS √
  2. Используйте css для выбора второго элемента в списке √
  3. Разница между псевдоклассами и псевдоэлементами √
  4. Как шрифт h5 адаптируется к экрану √
  5. Что такое рпкс √
    • Продолжение: что такое рем?
    • Продолжение: что такое vw √
    • Дополнение: разница между vw и rem × (vw основан на ширине экрана, а rem определяет коэффициент преобразования размера шрифта на основе корневого элемента)
  6. При каких обстоятельствах css будет использовать ускорение GPU √
  7. Что такое фильтр css × (визуальные эффекты таких элементов, как размытие и насыщенность)
  8. Как адаптировать веб-страницы к разной ширине √
  9. Подробно о роли метатегов √
  10. позиция по умолчанию и все возможные значения √
  11. Что такое дерзость и меньше √
  12. Минимальный интервал анимации CSS √
  13. что такое теневой дом ×
  14. Концепция и отличия SVG и Canvas √
  15. Как использовать слой холста ×
  16. Где потеря производительности при рендеринге dom √
  17. Как эффективно удалить 10 div из 1000 div √
  18. Как отслеживать завершение загрузки img √
  19. Что еще можно запустить в браузере кроме js × (webAssembly и actionscript)
  20. обещание имеет несколько состояний × (выполнено, отклонено, в ожидании)
  21. Как отловить ошибки промисов √
  22. Можно ли объединять промисы? ответ не ясен
  23. Подробно опишите, какие проблемы может решить vue √
  24. Как виртуальный дом выполняет операции сравнения ×
  25. Почему данные в vue — это функция, а не объект √
  26. Зачем нужна глубокая копия √
  27. Кратко опишите, что такое указатель √
  28. Знаете ли вы node.js × Нет
  29. Разница между процессом и потоком √
  30. Сколько у вас пользователей и посещений на платформе, которую вы сами разработали √
  31. Как отслеживать необработанные исключения? (только для мониторинга ошибок консоли)
  32. Что такое 5G и зачем использовать 5G (открытая тема)
  33. Представьте себе сценарии применения 5G (открытая тема)
  34. Разница между http и https √
  35. Почему https не перехватывается √
  36. Могут ли квантовые компьютеры взломать и разрешить асимметричное шифрование √ (дополнительно)
  37. Принципы квантовых компьютеров √ (дополнительно)
  38. Как браузер кеширует? (Ответ не годится, установите заголовок http)
  39. Подробно о разнице между http 1.0, 1.1, 2.0 √
  40. Подробно о том, как TCP гарантирует целостность передачи √
  41. В чем разница между UDP и TCP √
  42. Зачем использовать UDP × плохой ответ
  43. На каком протоколе соединения основан WebSocket √
  44. Пузырьковый алгоритм и временная сложность быстрой сортировки √
  45. Какой алгоритм используется для сортировки распределенных систем? полупара
  46. Применение широкого поиска и глубокого поиска √
  47. Структура данных Гуансу √
  48. Что такое вывод цепи ×
  49. Что такое ранг матрицы? полупара
  50. Градиенты и производные, частные производные √
  51. Информационная энтропия √
  52. Принцип компиляции? полупара
  53. Как получить текущее время в sql √
  54. Разница между char и varchar √
  55. удалить, удалить, обрезать? (Половина пары, усечение может быть сохранено)
  56. Вы использовали питон? сделал рептилию

6.5 Интервью по телефону для стажировки в Xiaomi

  1. Зачем сообщать о внешнем интерфейсе как о полном стеке √
  2. Какую версию js вы используете √
  3. новые функции es6 √
  4. Есть несколько состояний обещания √
  5. Как обещать соблюдение последовательности синхронизации √ несколько асинхронных процессов
  6. Разница между promise.race и promise.all ×
  7. Как разработать макет страницы (открытый вопрос)
  8. Как использовать flex для создания 8 иконок в два ряда × (flex-wrap)
  9. Центрировать по вертикали и центрировать по горизонтали × (наоборот)
  10. Использует ли ваша страница набор интерфейсов для реагирования на разную ширину √
  11. Как самостоятельно настроить front-end и back-end API √
  12. Что такое fetch и axios в vue×
  13. Как решить междоменные проблемы √
  14. Как сделать междоменную публикацию × (используя iframe)
  15. Подробная операция git √
  16. vue.js скрывает фигурные скобки до завершения загрузки × (v-clock)
  17. Я в основном использую React для разработки, вы заинтересованы в переходе на стек технологий (да)
  18. Как долго может проходить стажировка

6.6 Вербовка в школу Билибили с двух сторон

  1. Как получить значение прокрутки в чистом js √
  2. Подробно опишите принцип и значение замыкания js √
  3. Глубокое копирование Что такое мелкое копирование √
  4. Как преобразовать аргументы в массив √
  5. Почему существует разница в 300 миллисекунд между событиями щелчка на мобильном телефоне и ПК × (потому что iphone может дважды щелкнуть, чтобы увеличить)
  6. использование гибкого макета √
  7. Как реализовать мобильную адаптивную верстку √
  8. Объем ES6 √
  9. Что такое асинхронное ожидание √
  10. Каковы области действия блока √
  11. Подробно опишите асинхронный механизм промисов √
  12. Как добиться междоменного доступа √
  13. Как установить кеш для http связи √
  14. Подробный код состояния http √
  15. Как реализовать коммуникацию компонентов vue √
  16. Кратко опишите роль VueX √
  17. Как реализовать свайпер √
  18. что такое гибрид √
  19. Как гибридный js вызывает нативный интерфейс ×
  20. Зачем делать переднюю часть
  21. Для собственного плана развития
  22. как Шанхай

6.7 Набор в школу NetEase

  1. Блочные элементы Линейные элементы √
  2. Что такое семантика ярлыков √
  3. css очистить поплавок √
  4. Что такое модель коробки √
  5. CSS приоритет √
  6. свойство позиции √
  7. Совместимость с мобильными устройствами? (медиа-запросы, flex, rem) и область просмотра
  8. px эм рем √
  9. Разница между == и === √
  10. Что такое прототип и цепочка прототипов √
  11. Что такое глубокая копия √
  12. Что синхронно, что асинхронно √
  13. Как последовательно выполнить 10 асинхронных задач? (неполный ответ)
  14. Что такое прокси es6? (не понял, я сказал понятие режима прокси)
  15. Тема: Обходим элементы в списке произвольной длины и создаем асинхронные задачи одну за другой, как получить результаты выполнения всех задач? (Используйте promise.all, я чувствую, что интервьюер не очень доволен, это должен быть прокси)
  16. Сортировать массив объектов? (добавьте метод прототипа)
  17. Неупорядоченная сортировка одномерного массива
  18. Дедупликация массива? (map.set, объект ключ-значение)
  19. Как выполнить управление ветками в git? (неполный ответ)
  20. Какие кеши есть в браузере √
  21. Что такое перекрестный домен √
  22. Как разрешить междоменное √ (jsonp, прокси, белый список)
  23. Не считайте, что есть другие способы √
    • Добавлено локальное хранилище, window.name, form.message
  24. Оптимизация производительности страницы √ (перерисовка, перекомпоновка, защита от сотрясений, дросселирование
  25. Есть ли еще √ (ленивая загрузка, предварительная загрузка) и base64, сжатие, каркасный экран
  26. Обработка безопасности браузера √ (xss, внедрение базы данных) и csrf, уязвимость загрузки файлов
  27. Есть ли у вас опыт отладки браузера на реальной машине (открытый вопрос)

6.8 Школа Али набирает две стороны

  1. Расскажите о своем опыте работы над проектом за одну минуту √
  2. Вы знаете об отделении FED Amoy? √

1. Основная часть

  1. html

    1. Как обеспечить совместимость на мобильных устройствах? (префикс css)
      • Последующие действия Похожие проблемы, возникшие в проекте (svg)
      • Дополнение: есть что добавить (не более...) и метапросмотр http-equiv
    2. Отличия и сценарии использования vw em rem √
    3. Различия между различными режимами позиционирования √
    4. решить проблему с отображением? (схлопывание по ширине) не полное, а охват z-индекса
    5. Как холст использует слои √
      • Как избежать покрытия слоя? (пакет ответов)
  2. css

    1. Все абсолютно центрированные реализации? ( flex, text, padding: auto) не все, а перевести
    2. В чем разница между sass и less √
    3. Способы реализации адаптивного макета √ (flex media query rem)
      • У вас есть еще? √ (сетка)
    4. Знаете ли вы о BFC × (не знаю)
  3. js

    1. Обобщите все типы передачи значений в трех предложениях, все типы передачи ссылок и как передать типы значений по ссылке?
    2. js все основные типы? (логическое значение, число, строка) также null и undefined, символ
      • Спросите разницу между null и undefined √ (undefined и присвоение значения null)
      • Спросите, как сравнить ×
    3. Разница между указателем и ссылкой √ (адрес и псевдоним)
    4. Когда переменные в разных средах выпускаются в js √ (удаление пометок и подсчет ссылок)
      • Когда переменная будет переработана в случае незакрытия? (неуверенно)
    5. Как вы понимаете возможности js √
    6. Как реализовать множественное наследование в js √ (вызов, расширение es6)
      • Вопрос еще? (не знаю)

2. Инженерная часть

  1. В чем разница между жизненным циклом React и Vue? (Ответил vue, реагировать не понял)
  2. Как Vue отслеживает изменения данных √ (defineProperty, режим подписчика)
  3. Как реализовать связь между родительским и дочерним компонентами в Vue √
  4. Разбираетесь ли вы в продвинутых компонентах (не понимаете)
  5. Вы видели исходный код Vue (сейчас на стадии понимания принципа)
  6. Использовали ли вы инструменты для создания инженерных проектов (vue cli+webpack)
  7. Принцип компиляции и построения вебпака (анализ зависимостей, чанк) не говорит загрузчика
  8. Какие инструменты вы обычно используете для конвертации es6 (babel)
  9. Процесс транскодирования Babel (настройка .babelrc, анализ номеров грамматик, изменение имен переменных на уровне блоков и т. д.)

3. Алгоритмическая часть

  1. Состав структуры хранения хэшей js √ (значение хэша, хэш-таблица, коллизия хэшей)
  2. Как реализовать факториал числа в js? (только для цикла)
  3. Разработайте алгоритм для поиска всех пар чисел, которые в сумме дают указанное значение в неупорядоченном массиве.

6.9 Три аспекта набора в школу Али

  1. Представьте свой проект (средняя и большая небольшая программная система, корпоративная консоль, одностраничное веб-приложение Vue CLI и т. д.)
  2. Какое программное обеспечение у вас есть (внутреннее торговое сообщество)
    • Почему бы вам не продать его через Xianyu (решить сделку в здании)
  3. Ваш апплет использует openid для входа в систему, можете ли вы рассказать о процессе OAuth (доверенная платформа выдает токены на внешний интерфейс, а серверная часть обрабатывает конфиденциальную информацию)
    • Спросите, каковы преимущества OAuth (избегайте прямого контакта с конфиденциальной информацией во внешнем интерфейсе)
  4. Что делает ваш апплет системы связи Websocket (передача различных типов сообщений в режиме реального времени)
    • Спросите, как осуществляется ваша голосовая связь в реальном времени (аутентификация интерфейса -> машина состояний жестов -> локальное сохранение -> сервер загрузки -> управление кешем).
    • Следите за тем, отправляются ли данные, возвращенные записью WeChat, обратно в base64 (не по пути протокола tmp).
    • Спросите, какова цель локального сохранения ваших записей (уменьшить нагрузку на сервер, уменьшить повторную передачу избыточных ресурсов)
    • Спросите, как выполняется ваше локальное сохранение (используя локальное хранилище)
    • Спросите, насколько велик ваш голос (от десятков тысяч до сотен тысяч)
    • Насколько велика локальная память апплета (10-20 МБ)
    • Спросите, почему вашему веб-сокету нужно сердцебиение (чтобы избежать прерывания связи, вызванного изменениями в сетевой среде).
    • Спросите, как работает ваш механизм сердцебиения (управление таймером, переподключение по тайм-ауту, мониторинг состояния сети)
  5. Вы сами купили сервер (Alibaba Cloud)
  6. Как работает ваш сервис CDN (Alibaba Cloud)
  7. Как устроен ваш SSL (настройка цепочки сертификатов ssl, асимметричное шифрование)
  8. Зачем использовать Elastic Search для поиска (сегментация китайских слов, инвертированный индекс, эффективность)
    • Спросите, как выполняется поиск сегментации китайских слов (устройство сегментации слов IK)
  9. Какой движок использует ваша база данных (INNODB)
    • Зачем использовать движок INNODB (внешний ключ, тип индекса, utf8mb4)
    • Спросите об уровне детализации блокировки INNODB (ответ на уровне таблицы, не уверен)
    • Дополнение Знаете ли вы что-нибудь об атомарности транзакций (не знаю)
  10. Как работает ваше одностраничное веб-приложение (автоматическая сборка Vue CLI + Webpack, маршрутизация Vue Router)
  11. Как ваш пароль пользователя хранится в базе данных (функция PASSWORD)
    • Спросил, шифруется ли пароль пользователя во время внешней передачи (нет необходимости в ssl)
  12. Сделали ли вы сохранение статуса входа в систему и как это сделать (установите срок действия файла cookie)
    • Спросите свой сервер, как управлять статусом входа в сеанс (автоматическое распространение PHP)
    • Как синхронизировать данные сеанса на нескольких серверах (база данных или распределенная система)
    • Спросите, как сделать распределенный (hbase или es)
    • Спросите, как использовать php, чтобы получить его после сохранения (не знаю)
  13. Основные достижения стажировки в AVIC General (самостоятельная разработка веб-системы, консоли данных, внутреннего сервера)
    • Спросите, какими данными управляет ваша консоль (продукты, новости, вакансии, резюме)
    • Спросите, сделан ли ваш WYSIWYG-редактор самостоятельно (на основе вторичной разработки summernote)
    • Спросите, какие у вас асинхронные взаимодействия и хранилища транзакций (AJAX+PDO).
  14. Каков ваш план дальнейшего развития (чтение исходного кода фреймворка — написание собственного фреймворка — освоение глубоких знаний фронтенда и бэкенда — освоение всей архитектуры ПО)
  15. Как предотвратить XSS, CSRF, внедрение базы данных (управление внешним рендерингом, управление внутренней обработкой, предварительная компиляция)
  16. Объясните глубокое копирование и поверхностное копирование (передача по ссылке и передача по значению blablabla)
  17. Как вы обычно обращаете внимание на знания в области фронтенда (справочники, технические блоги, официальные документы, группы общения)

6.10 Набор в школу Мэйтуань

  1. Расскажите о своем опыте работы над проектом
  2. Основные факторы, влияющие на скорость загрузки страниц √
  3. Как вы считаете данные страницы √
    • На самом деле эти данные можно просмотреть с помощью консоли апплета
  4. Как прошел ваш логин WeChat OAuth √
  5. Как вы делаете свое шаблонное сообщение WeChat √
  6. Каков принцип субподряда апплета × (соответствующий пакет загружается, когда пользователь щелкает)
  7. Как автоматически создавать интерфейсные проекты и автоматически развертывать их? (веб-пакет + автоматизация сторонних плагинов)
  8. Принцип параллакса экрана √
    • Спросите, что лучше использовать в абсолютном и переводе для параллакса √
    • Спросите, почему вы используете jquery в своем проекте vue и где его использовать √
  9. Каковы методы массива √
  10. Что будет получать и возвращать метод привязки функции? √
  11. Какие статические ресурсы будут блокировать отрисовку страницы, как решить, в чем разница √
  12. Как получить междоменный доступ √
  13. Принцип JSONP √
  14. Принцип event-агентства √
  15. Что делает ваша текущая стажировка?
  16. Приемлема ли сверхурочная работа и приемлемы ли часы сверхурочной работы?
  17. Почему выбирают Мейтуан

6.11 Набор в школу ByteDance

  1. ваш проектный опыт
  2. Каковы основные типы js √
  3. Что такое закрытие √
  4. Как зациклить элементы выходного массива с интервалом в 1 секунду √
  5. Как реализовать прослушиватель событий √ (обратный вызов, addEventListener)
    • Спросите, в чем разница между двумя √ (последнее будет рассмотрено)
  6. Жизненный цикл Vue√
  7. Понимает ли BFC × контекст форматирования на уровне блоков
  8. Нарисуйте коробочную модель√
    • Спросите размер коробки√
  9. Реализуйте трехколоночный макет√
  10. Принцип веб-сокета√
  11. Как сохранить куки для входа √
  12. Пучокwww.toutiao.comПеревести вcom.toutiao.www

6.12 Две стороны набора в школу ByteDance

  1. Расскажите о своем опыте работы над проектом
  2. Что вы используете для управления пакетами php √ composer
  3. Как реализован автозагрузчик композитора?
  4. Что такое php fast-cgi? Параллельное управление
  5. Будет ли php set_cookie изменять массив $_COOKIE √ нет
  6. Что делает ваша процедура MYSQL √ функциональное взаимодействие
  7. Как установить поле заголовка для междоменного запроса√
  8. Принцип Vue Router√
  9. В каких сценариях конкретно применяется VueX √
  10. Какие компоненты Ajax вы использовали √ Axios
  11. Как Axios реализует перехват √
  12. обратное слияние двухмерного массива js√
输入:[1, 2, [3, 4], 5, 6, [7, 8], 9] 
输出: [[3, 4, 1, 2, 5, 6][7, 8 ,9]]
  1. js преобразование верблюжьего регистра√
输入:contentType
输出:content_type

6.13 Три стороны набора в школу ByteDance

  1. Расскажите о своем опыте работы над проектом
  2. Покажи мне свою мини-программу онлайн √
    • Узнайте, что не так с несбалансированным потоком водопада, здесь √ (замените ошибку отображения 10 пикселей на улучшение производительности, вызванное предварительной загрузкой)
    • Спросите, какой сервер используется √ (используется облако Alibaba и облако Tencent)
    • Спросите, понимаете ли вы работу и обслуживание сервера√
    • Спросите, как разблокировать mysql× после падения сервера (в проекте не встречалось, не уверен)
    • Как решить проблему ненормального увеличения загрузки ЦП √
  3. Опишите процесс разработки вашего апплета√
  4. Что делает ваш веб-сокет √
    • Спросите, как ваш веб-сокет общается √
  5. Как получать сообщения офлайн √
  6. Принцип Vue Router√
  7. Ваш план развития (внешняя разработка — внешняя архитектура — системная архитектура)
  8. Ваш предполагаемый отдел (сторона C)
  • В В какое отделение можно обратиться (не уверен, двусторонний выбор)

6.14 Две стороны школьного набора NetEase

Подводные камни: Наушники не были подготовлены, голос видеоинтервьюера был относительно низким, а ритм в начале был хаотичным.

  1. Оптимизирована лучшая производительность ××× (ленивая загрузка, предварительная загрузка)
    • Спросите, при каких обстоятельствах судить о предварительной загрузке (используйте задержку 150 мс для предварительной загрузки при нажатии)
    • Спросите, есть ли другие ситуации, когда будет использоваться предварительная загрузка (не используется) Какие два вы считаете наиболее очевидными ××× (серьезные ошибки, забыл сказать перерисовка и перекомпоновка, антитряска и троттлинг, кеширование браузера, сжатие кода, асинхронная загрузка и т. д.)
  2. Занимались ли вы другими аспектами, такими как построение составных сплитов?

Вопросы уточняются...

6.15 Три аспекта набора школы Билибили

6.16 Рекрутинговая сторона школы Tencent

6.17 Школа рекрутинга Xiaomi

6.18 Две стороны школьного набора Xiaomi

Приложение 2: Вопросы письменного теста Дачан

7.1 Письменный тест для приема на работу в кампусе Tencent

1. Декодирование строк

Сяомин и Сяохун используют для связи сжатие строк. Правило сжатия строк: если есть последовательно повторяющиеся строки, такие как ABCABCABC, они сокращаются до [3|ABC]. Существующие сжатые строки, разработайте программу декомпрессии для восстановления строк.

Пример:
输入:
HG[3|B[2|CA]]F
输出:
HGBCACABCACABCACAF
Яма:

Необходимо оптимизировать память, причина, по которой я использую 87.5, заключается в том, что память переполняет MLE, и я рассматриваю возможность перезаписи ее со структурой стека.

Идеи (87,5/100 баллов):
 string decode(string s) {
    string res = "", ans = "";
    int len, start , end;
    int time, counting;
    time = 0, counting = 1;
    len = s.size();
    for (int i = 0; i < len; i++)
    {
        if (s[i] == '[')
        {
            start = i;
            for (i = len; s[i] != ']'; i--);
            end = i;
            res += decode(s.substr(start + 1, end - start - 1));
            i++;
        }
        if (counting && s[i] >= '0' && s[i] <= '9')
        {
            time = time * 10 + (s[i] - '0');
        }
        else if (s[i] == '|')
        {
            counting = 0;
        }
        else
        {
            res += s[i];
        }
    }
    char tmp = res[res.size() - 1];
    if (tmp == '\0')
    {
        res = res.substr(0, res.size() - 1);
    }
    if (time > 0)
    {
        for (int i = 0; i < time; i++)
        {
            ans.append(res);
        }
    }
    else
    {
        ans = res;
    }
    return ans;
}

int main()
{
    string s;
    cin >> s;
    cout << decode(s) << endl;
    return 0;
} 

2. Определить IP

Проверьте, является ли IP-адрес частным Известные диапазоны частных IP-адресов:

10.0.0.0 - 10.255.255.255
172.16.0.0-172.16.255.255
192.168.0.0-192.168.255.255
127.0.0.0/8 # 注意!这里是一个巨坑,0/8的意思代表子网掩码255.255.255.0,也就是最后8位可以有动态范围,这是一种简写方法,但是腾讯并没有说明其含义,可能也是一处考察。

Пример:

输入:
0.0.0.0
输出:
false
Идеи (100/100 баллов):
function isPrivate(ip){
    // TODO
    let ipVal = ip.split('.');
    ipVal[0] = Number(ipVal[0]);
    ipVal[1] = Number(ipVal[1]);
    ipVal[2] = Number(ipVal[2]);
    ipVal[3] = Number(ipVal[3]);
    if (ipVal[0] == 10) {
        if (ipVal[1] >= 0 && ipVal[1] <= 255) {
            if (ipVal[2] >= 0 && ipVal[2] <= 255) {
                if (ipVal[3] >= 0 && ipVal[3] <= 255) {
                    return true;
                }
            }
        }
    }
    if (ipVal[0] == 172) {
        if (ipVal[1] >= 16 && ipVal[1] <= 31) {
            if (ipVal[2] >= 0 && ipVal[2] <= 255) {
                if (ipVal[3] >= 0 && ipVal[3] <= 255) {
                    return true;
                }
            }
        }
    }
    if (ipVal[0] == 192) {
        if (ipVal[1] == 168) {
            if (ipVal[2] >= 0 && ipVal[2] <= 255) {
                if (ipVal[3] >= 0 && ipVal[3] <= 255) {
                    return true;
                }
            }
        }
    }
    if (ipVal[0] == 127) {
        if (ipVal[1] == 0) {
            if (ipVal[2] == 0) {
                if (ipVal[3] >= 0 && ipVal[3] <= 8) {
                    return true;
                }
            }
        }
    }
    return false;
}

3. Верблюжий чехол

Преобразование переменной фразы, к которой присоединяются - или _ или @, в верблюжий регистр

Пример:
输入:
content-type
输出:
contentType
Идеи (100/100 баллов):
function camel(str) {
    // TODO
    let ans = "";
    let upper = false;
    for (let index = 0; index < str.length; index++) {
        const element = str[index];
        if (element == '_' || element == '-' || element == '@') {
            upper = true;
        } else {
            if (upper) {
                ans += element.toUpperCase();
            } else {
                ans += element;
            }
            upper = false;
        }
    }
    return ans;
};

4. Встреча планеты

На планете пингвинов N (

Пример:
输入:
3
2 5 6
1 3
输出:
3
Яма:

Соответствие часовых поясов немного сбивает с толку.Сначала я понял,что последний часовой пояс отстает от предыдущего часового пояса,но на самом деле он впереди.Каждый часовой пояс на час опережает предыдущий часовой пояс,поэтому нет большая проблема решить эту проблему. Кроме того, учитывайте временную сложность, моя оптимизация относительно плохая, а наихудшая сложность — O(n2/2).

Идеи (80/100 баллов):
int main() {
    int n, u, v, len, pos;
    long long ans, tmp;
    cin >> n;
    vector<int> a(n, 0);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    cin >> u >> v;
    u--;
    v--;
    len = v - u;
    pos = 0;
    if (len < n / 2)
    {
        ans = 0;
        for (int i = 0; i < n; i++)
        {
            tmp = 0;
            for (int j = 0; j < len; j++)
            {
                tmp += a[(i + j) % n];
            }
            if (tmp > ans || (tmp == ans && ((n + u - pos) % n < (n + u - pos) % n)))
            {
                ans = tmp;
                pos = i;
            }
        }
    }
    else
    {
        ans = INF;
        for (int i = 0; i < n; i++)
        {
            tmp = 0;
            for (int j = 0; j < n - len; j++)
            {
                tmp += a[(i + j) % n];
            }
            if (tmp < ans || (tmp == ans && ((n + u - pos) % n < (n + u - pos) % n)))
            {
                ans = tmp;
                pos = i;
            }
        }
    }
    cout << (n + u - pos) % n + 1 << endl;
    return 0;
}

7.2 Письменный тест для поступления в школу NetEase

1. Наибольший общий делитель очень большого числа и длинного целого числа.

Идея первого вопроса относительно проста, то есть метод деления, использовать строку для хранения больших чисел, а затем делить на деление.

Метод подбрасывания и деления:

Если существуют два натуральных числа p1, p2, где p1>p2, то должно быть два натуральных числа k, b, таких что p1=k*p2. Если наибольший общий делитель p1 и p2 равен p3, то наибольший общий делитель p2 и b также равен p3. Например, gcb(55,30)=gcb(25,30)=gcb(25,5)

2. Минимальное значение максимального значения в подпоследовательности длиной от 1 до n в массиве.

Вопрос: В массиве с максимальной длиной 200000 найти минимальное значение максимального значения в подпоследовательностях длины от 1 до n соответственно

Пример:
输入:
6
1 8 7 5 4 2
输出:
1 4 5 7 8 8

Проще говоря, это разделение массива на последовательные подпоследовательности, начиная с подпоследовательности длины 1. После того, как каждая подпоследовательность разделена, найдите максимальное значение каждой подпоследовательности, а затем найдите наименьшее из всех этих максимальных значений. подпоследовательность длины n (сама последовательность).

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

Уравнение перехода состояния можно представить следующим образом:

Предполагатьdp[j][i]является первым из массиваjцифра начинается с длиныiМаксимальное значение подпоследовательности , когда длина i=0 (фактическая длина должна быть 1, удобнее начинать с 0),dp[j][0]равно самому числуnum[j], начиная с i=1, длина dp[j][i] равнаMAX(dp[j][i-1], dp[j+1][i-1])То есть до и после максимальной длины двух соседних i-1 в субмаксимальном значении последовательности.

Этот вопрос требует минимального значения всех максимальных значений при одной и той же длине деления, поэтому при расчете массива dp также необходимо вычислить, является ли это значение минимальным значением текущей длины деления, поэтому определите минимальный массив с длиной 100000 и инициализировать его максимальным числовым значением, каждый расчетdp[j][i]когда сmin[i]Сравните, какое значение меньше, и вы сможете получить минимальное значение за один проход.

Идеи:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#define INF 0x7FFFFFFF
using namespace std;
int num[100000] = { 0 };
int (*dp)[100000];
int main()
{
	int n;
	int min[100000] = { 0 };
	scanf("%d", &n);
	dp = (int (*)[100000])malloc(n * 100000 * sizeof(int));
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &num[i]);
		min[i] = INF;
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n - i; j++)
		{
			if (i == 0)
			{
				dp[j][0] = num[j];
			}
			else
			{
				dp[j][i] = MAX(dp[j][i - 1], dp[j + 1][i - 1]);
			}
			if (dp[j][i] < min[i])
			{
				min[i] = dp[j][i];
			}
			i = i;
		}
	}
	for (int i = 0; i < n; i++)
	{
		if (i>0)
		{
			printf(" ");
		}
		printf("%d", min[i]);
	}
	printf("\n");
	return 0;
}

3. Обмен паритетом

В массиве четные и нечетные числа взаимозаменяемы, найдите последовательность массива с наименьшим лексикографическим порядком после любого количества обменов.

Личные мысли: нет особенно хороших идей

4. Массив минус один

Дан массив длины M (

Личные мысли:

Используя результаты бинарного поиска, 70% результатов являются TLE. После анализа считается, что операция обхода массива для вычитания единицы слишком трудоемка (сложность O (n ^ 2)), а затем рассмотреть возможность использования массива сохранить обновленное положение границы нижнего индекса.Обойти обход минус одно звено, но не закончено.

7.3 Письменный тест для приема на работу в кампусе DJI

1. Играйте в игры

Учитывая время летних каникул X дней (

Личные мысли:
#include <iostream>
#include <vector>
#include <cassert>
#include <algorithm>
using namespace std;
 
// 需要填充一个容量为X的背包,使得成就点数最大
class Knapsack01 {
 
private:
    vector<vector<int>> memo;
 
    // 用 [0...index]的物品,填充容积为c的背包的最大价值
    int bestValue(const vector<int> &w, const vector<int> &v, int index, int c) {
 
        if (c <= 0 || index < 0)
            return 0;
 
        if (memo[index][c] != -1)
            return memo[index][c];
 
        int res = bestValue(w, v, index - 1, c);
        if (c >= w[index])
            res = max(res, v[index] + bestValue(w, v, index - 1, c - w[index]));
        memo[index][c] = res;
        return res;
    }
 
public:
    int knapsack01(const vector<int> &w, const vector<int> &v, int C) {
        assert(w.size() == v.size() && C >= 0);
        int n = w.size();
        if (n == 0 || C == 0)
            return 0;
 
        memo.clear();
        for (int i = 0; i < n; i++)
            memo.push_back(vector<int>(C + 1, -1));
        return bestValue(w, v, n - 1, C);
    }
};
 
int main() {
 
    // X为暑假天数,N为游戏数量
    int X, N;
    cin >> X >> N;
 
    int w, v;
    // vs存的是价值(成就点数)
    // ws存的是每一件物品的重量(天数)
    vector<int> vs, ws;
    for (int i = 0; i < N; i++) {
        cin >> w >> v;
        vs.push_back(v);
        ws.push_back(w);
    }
 
    cout << Knapsack01().knapsack01(ws, vs, X) << endl;
 
    return 0;
}

PS Я написал этот вопрос как полный рюкзак, но на самом деле это рюкзак 01, и результат правильный только на 50%.

2. Введите команду:

Введите длину набора инструкций M и длину операции инструкции N, затем введите отношение отображения M инструкций (строка) = «значение инструкции (строка), а затем случайным образом введите N инструкций, чтобы запросить вывод соответствующего значения инструкции.

Личные мысли:

Самый простой способ — использовать контейнер карт на C++, но если вы забудете, как написать карту, вы потратите много времени, а это очень жаль.

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main()
{
	map<string, string> ops;
	int x, y;
	cin >> x >> y;
	for (int i = 0; i < x; i++)
	{
		string a, b;
		cin >> a >> b;
		ops[a] = b;
	}
	for (int i = 0; i < y; i++)
	{
		string op;
		cin >> op;
		cout << ops[op] << endl;
	}
}

3. Купить фрукты

Учитывая N долларов, M видов фруктов, каждый фрукт стоит Pi, где есть X любимых фруктов, таких как фрукты, имеющие разную степень упорядоченности и требующие покупки фруктов. Высший рейтинг после не менее надежного, поиск всех возможностей без денег, результат по модулю 10 000 007.

Личные мысли:

встать на колени...

7.4 Письменный тест набора в школу ByteDance

1. Школьный будильник O(nlogn)

Сяомин поставил n будильников. Он может отправиться в школу только тогда, когда прозвенит будильник. Время каждого будильника hi:mi. 0-59 минут), во сколько он встает самое позднее

输入:
3 //定了几个闹钟
5 0 //第1个闹钟的小时数和分钟数
6 0 //第2个闹钟的小时数和分钟数
7 0 //第3个闹钟的小时数和分钟数
59 //到学校要多少分钟
6 59 //上课的小时数和分钟数
输出:
6 0 //最晚的起床时间
Идеи (80/100 баллов):

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

Код:
struct Time
{
    int h;
    int m;
    friend bool operator < (Time a, TIme b){
        if(a.h == b.h){
            return a.m > b.m;
        }
        return a.h > b.h;
    }
}
int main()
{
	int n, x, a, b, rest;
	cin >> n;
	Time* time = (Time*)malloc(n * sizeof(Time));
	for (int i = 0; i < n; i++)
	{
		cin >> time[i].h >> time[i].m;
	}
	sort(time, time + n);
	cin >> x;
	cin >> a >> b;
	for (int i = 0; i < n; i++)
	{
		rest = 0;
		if (time[i].h < a || time[i].h == a && time[i].m < b)
		{
			rest = (a - time[i].h) * 60 + b - time[i].m;
			if (rest >= x)
			{
				cout << time[i].h << ' ' << time[i].m << endl;
				break;
			}
		}
	}
	return 0;
}

2. Зашифрованная связь O(n)

Сяомин и Сяохун используют шифрование паролей для связи, и каждое сообщение имеет фиксированную длину открытого текста n и время шифрования k. Например: двоичный открытый текст пароля равен 1001010, а количество раз шифрования равно 4, тогда каждый раз, когда зашифрованный текст сдвигается вправо на 1 бит и открытый текст подвергается операции XOR, всего 3 сдвига (k=4, поэтому к - 1 = 3)

输入:
7 4 // n k
1110100110 //密文
输出:
1001010 //明文

解释:
1001010---
-1001010--
--1001010-
---1001010

Количество раз шифрования равно 4, поэтому открытый текст сдвигается вправо на 4-1=3 раунда, и каждый раунд подвергается операции XOR с текущим зашифрованным текстом, поэтому соответствующий зашифрованный текст 1001010 равен 1110100110.

Идеи (100/100 баллов):

Стандартный математический вопрос XOR, я не знаю, как его классифицировать, я чувствую себя немного похожим на тест по математике, я могу увидеть правила после нескольких взглядов

Коротко об идее:

Во-первых, первый бит зашифрованного текста и открытого текста одинаковы, вы можете понять это, посмотрев объяснение в приведенном выше примере. Затем, рассматривая биты от 2 до k-1, можно обнаружить, что каждый бит в этом сегменте получается результатом XOR предыдущего зашифрованного текста и текущего битового открытого текста.

Затем рассмотрим биты с k по n-1.Соблюдая закон, мы можем обнаружить, что каждый бит в этом сегменте получается путем XOR предыдущего зашифрованного текста с i-м открытым текстом, а затем XOR текущего бита с открытым текстом. Каждый должен быть в состоянии понять, как устранить влияние XOR, поэтому, пока часть, участвующая в XOR, подвергается XOR с зашифрованным текстом, открытый текст может быть получен.

int main() {
	int n, k, tmp;
	string s,ans="";
	cin >> n >> k;
	cin >> s;
	ans += s[0];
	for (int i = 1; i < k; i++)
	{
		tmp = (int)(s[i] - '0') ^ (int)(s[i - 1] - '0');
		ans += tmp + '0';
	}
	for (int i = k; i < n; i++)
	{
		ans += (int)(s[i] - '0') ^ (int)(s[i - 1] - '0') ^ (int)(ans[i - k] - '0') + '0';
	}
	cout << ans;
	return 0;
}

3. Зарплата O(n)

Ван Дачуй хочет платить зарплату работникам. Работники сидят в ряд слева направо. Каждый работник знает трудовой стаж друг друга. Каждый работник знает только зарплату левых и правых сотрудников. Зарплата этого человека на 100 юаней выше, чем та. этого человека, и минимальная заработная плата каждого человека составляет 100 юаней.Пожалуйста, спросите Ван Дачжуй, сколько будет минимальной заработной платы.

Образец
输入:
4 //几个员工
3 9 2 7 //员工顺序以及对应的资历
输出:
600 //100元,200元,100元,200元

6
1 2 3 4 5 6
2100 //100,200,300,400,500,600

5
1 1 1 1 1
500 //100,100,100,100,100

8
1 2 3 4 3 2 3 4
1800 //100 200 300 400 200 100 200 300
8
3 4 3 4 3 4 3 4
1200 //100 200 100 200 100 200 100 200
5
1 2 3 4 1 
1100 //100 200 300 400 500
Идеи (100/100 баллов):

При поиске в ширину последовательность сотрудников можно рассматривать как многокорневое дерево, где каждый сотрудник с наименьшей зарплатой является корневым узлом, а зарплата сотрудника фактически является его глубиной в многокорневом дереве.

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

int main() {
	int n, now;
	long long ans = 0;
	cin >> n;
	if (n == 0)
	{
		cout << 0 << endl;
		return 0;
	}
	vector<int> epy(n, 0), depth(n, 0);
	queue<int> sal;
	for (int i = 0; i < n; i++)
	{
		cin >> epy[i];
		if (i > 1 && epy[i - 1] <= epy[i - 2] && epy[i - 1] <= epy[i])
		{
			depth[i - 1] = 1;
			sal.push(i - 1);
		}
	}
	if (epy[0] <= epy[1])
	{
		depth[0] = 1;
		sal.push(0);
	}
	if (epy[n - 1] <= epy[n - 2])
	{
		depth[n - 1] = 1;
		sal.push(n - 1);
	}
	while (!sal.empty())
	{
		now = sal.front();
		int left = (now > 0 && epy[now-1] < epy[now]) ? depth[now - 1] : 0;
		int right = (now < n - 1 && epy[now + 1] < epy[now]) ? depth[now + 1] : 0;
		sal.pop();
		if (depth[now] == 0)
		{
			depth[now] = max(left, right) + 1;
		}
		//left
		if (now > 0 && depth[now - 1] == 0 && (now == 1 || epy[now - 2] > epy[now - 1] || depth[now - 2] > 0))
		{
			sal.push(now - 1);
		}
		//right
		if (now < n - 1 && (depth[now + 1] == 0) && (now == n - 2 || epy[now + 2] > epy[now + 1] || depth[now + 2] > 0))
		{
			sal.push(now + 1);
		}
	}
	for (auto salary : depth) {
		ans += salary;
	}
	cout << ans * 100 << endl;
}