предисловие
Я проработал в Дачанге 6 лет и был фронтенд-интервьюером 3 года.Я собрал вопросы и ответы для интервью, которые часто задает Дачанг, на моем Github. Я надеюсь быть полезным.
Адрес проекта:GitHub.com/Ай Руи спать/мы…
Подборка вопросов для интервью
Односторонние вопросы интервью Дачана в основном можно найти в Google, если вы его видели, вы умрете. Чистя вопросы, вы можете получить более 85%.
Но когда дело доходит до второй стороны, вы обнаружите, что сложность возрастает напрасно.В одном вопросе задействовано много технических моментов, и редко можно найти оригинальную тему в Интернете, потому что большинство вопросов на второй Сторона - это технические моменты, извлеченные из работы. , требует от кандидатов разработки решений с помощью собственного воображения и технического мастерства. Это настоящая проверка передовых способностей кандидата.
Вопрос 1: С какими проблемами совместимости платформ между Windows и Mac вы сталкивались при разработке nodejs?
Сложность: Али p5 ~ p6
Многие кандидаты заявили, что разбираются в разработке на Node.js, как только они появились, но после собеседований выяснилось, что они только на демо-уровне: они просто скачали примеры с официального сайта и запускали их небрежно.
На самом деле, если вы действительно разработали крупномасштабный инженерный инструмент cli через nodejs, вы обнаружите, что существует много проблем совместимости с такими системами, как Windows и Mac, и даже API на официальном сайте nodejs проблематичен и не заслуживает доверия.
Я перечислю несколько пунктов по желанию, и вы можете добавить:
- Совместимость с настройками переменных среды, используйте cross-env, потому что экспорт и набор имеют системные различия
- Windows не поддерживает & , выполнение npm-скрипта параллельно с npm-run-all или одновременно
- Асинхронная синхронизация: util.promisify + async/await
- Не используйте напрямую fs.readFileSync на официальном сайте, вместо этого используйте fs-extra
- Путь соединения должен использовать path.join, система Unix — /, Windows — \
Есть еще много, лень писать
Если у вас есть лучшие ответы или идеи, пожалуйста, оставьте сообщение на github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 2. Разработайте решение, нажмите кнопку в браузере, а затем добавьте файл index.js в файл исходного кода внешнего интерфейса. Как этого добиться? предлагать идеи
Сложность: Али p6 ~ p7
Этот вопрос — типичный двуличный вопрос большой компании, заголовок понятен с первого взгляда, но его можно написать и одним куском, если это действительно необходимо.
Всем известно, что из-за ограничений безопасности браузер не может напрямую управлять файловой системой на вашем компьютере, но этот вопрос позволяет вам нажать кнопку для создания файла в файле кода вашего внешнего интерфейса.Как этого добиться?
На самом деле, если вы посмотрите на основные файлы ядра многих кросс-платформенных пакетов, вы обнаружите, что принципы их реализации схожи: все они согласовывают спецификацию, а затем реализуют мост для проникновения разрешений. Там слишком много, чтобы написать, вы можете изучить это самостоятельно.
Есть еще одна идея, которая требует npm + cli + node server для достижения. Сначала внедрите подключаемый модуль npm, зарегистрируйте команду в bin, когда вы запустите npm start во внешнем проекте, вызовите эту команду, используйте эту команду для запуска node-dev-сервера, а затем используйте http-запрос, чтобы сделать это node-dev-server для создания файла index.js.
На самом деле, есть также очень простые способы ответить на этот вопрос, от простого до сложного, очень гибкие.Конечно, чем сложнее и глубже ваш ответ, тем больше он может отражать ваш творческий потенциал и силу.
Как дела, есть идеи и задумки? Добро пожаловать, чтобы оставить сообщение в моем github.
Если у вас есть лучшие идеи или вопросы, пожалуйста, оставьте сообщение под github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 3: Если локальная ветка git стажера A удалена по ошибке, а код ветки A не был отправлен на удаленку, как найти предыдущую запись коммита и код A
Сложность: Али p6 ~ p6+
Эта ошибка случайного удаления ветки и потери кода часто возникает у стажеров и недавно принятых на работу в школу.Если вы являетесь главным программистом или руководителем проекта в команде разработчиков, вы должны быть хорошо знакомы с git, иначе он будет часто появляться Код удален по ошибке, код утерян и т.д. Как решить эту проблему?
Если у вас есть лучшие ответы или идеи, пожалуйста, оставьте сообщение на github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 4: Если вы используете IP-адрес NodeJS IP-адрес сервера рептилий, который будет назначен, как это решить?
Сложность: Али p6 ~ p7
Если вы используете nodejs для реализации сканера для очистки содержимого веб-сайта, он, вероятно, будет заблокирован другим механизмом защиты от сканирования. Конечно, есть разные решения.Я не делал большой и полный сервис сканера, но я сделал маленький.В этом случае мой план реализации состоит в том, чтобы сделать несколько слоев ip-пулов.Когда сканирование не удается, я автоматически переключать айпи случайным образом Пул прокси используется для обхода блокады Напишу просто псевдокод принципа реализации айпи прокси Фактически это использование nodejs для реализации прокси, что очень просто.
http.createServer((req, res)=>{
request(
`http://xxx/${req.url}`,
{ proxy: "xxx.xxx.xxx:xxx" },
function(error, response, body) {
if (!error && response.statusCode == 200) {
res.end(body);
} else {
console.log(error);
}
}
);
}).listen(8888,()=>{
console.log('run')
});
Если у вас есть лучшие ответы или идеи, пожалуйста, оставьте сообщение на github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 5: Преобразование файла base64 в png с помощью nodejs
Сложность: Али p5 ~ p6
const fs = require('fs');
const path = 'xxx/'+ Date.now() +'.png';
const base64 = data.replace(/^data:image\/\w+;base64,/, "");//去掉图片base64码前面部分data:image/png;base64
const dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,
fs.writeFile(path, dataBuffer, function(err){//用fs写入文件
if(err){
console.log(err);
}else{
console.log('写入成功!');
}
})
Как правило, если вы сделаете это и конвертируете файл base64 в файл png, интервьюер попросит вас сделать выводы и спросит вас: конвертируйте файл png в файл base64, давай, давай сделаем это.
const fs = require("fs");
const util = require("util");
const imageData = await util.promisify(fs.readFileSync(fileUrl)); // 例:xxx/xx/xx.png
const imageBase64 = imageData.toString("base64");
const imagePrefix = "data:image/png;base64,";
console.log(imagePrefix + imageBase64);
Если у вас есть лучшие ответы или идеи, пожалуйста, оставьте сообщение на github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 6: Пожалуйста, разработайте план: есть три плагина npm a, b и c, которые будут часто обновляться.После старта запуска npm проекта переднего плана потребуются три плагина npm a, b и c для автоматического обновления до последней версии
Сложность: Али p5+ ~ p6+
Существует множество схем реализации, дающих представление:
Реализуйте плагин x самостоятельно, зарегистрируйте глобальную команду с именем xxx, при запуске запуска npm выполните команду xxx параллельно, команда xxx будет получать последнюю информацию о трех плагинах a, b и c через информацию npm, перехватите версию соответственно, а потом сравните с версиями трех местных плагинов, и если найдете какие-то отличия, идите на обновление.
Если у вас есть лучшие ответы или идеи, пожалуйста, оставьте сообщение на github, соответствующее этой теме:GitHub.com/Ай Руи спать/мы…
Вопрос 7: Проблема с дампом большого файла: на сервере A есть файл размером 1000 ГБ, который необходимо переслать на сервер C через сервер B, но сервер B имеет только 1 ГБ памяти Как реализовать этот большой файл дампа
Сложность: Али p6+ ~ p7+
Эта проблема в первую очередь должна реализовать переадресацию файлового потока в случае нехватки памяти.
Когда вы ответите на вопрос, интервьюер обязательно спросит вас, если вы случайно отключитесь от интернета, как вы сможете продолжить загрузку?
Какие еще проблемы вы можете придумать во всем этом процессе?
Трижды спросила смерть, дядя спросил, боишься ли ты
Ребенок MMP сейчас плачет, мне нужно идти делать сухое молоко, код слишком длинный, я не буду его публиковать, мои друзья думают об этом, добро пожаловать, чтобы поделиться своими идеями.
Если у вас есть хорошая идея, вы можете добавить ее на мой гитхаб:GitHub.com/Ай Руи спать/мы…
Вопрос 8: Как добиться проникновения в интрасеть и перенаправления портов?
Сложность: Али p5+ ~ p6+
По классической проблеме проброса портов я написал статью, легкую, забавную и понятную, можно читать и отдыхать.«Биография маленького головастика: портовое экспедирование - легенда ночного клуба»
Эпилог
Я также написал несколько статей о передовых знаниях в области интерфейса.Если вы считаете, что это хорошо, вы можете нажать звездочку.
Адрес проекта блога:GitHub.com/Эрик сонный/был бы…
Я Маленький Головастик, старший фронтенд-инженер. Следуйте за мной, чтобы преодолеть технические трудности во фронтенде. Я надеюсь, что это поможет вам на пути к продвижению ваших друзей и поможет вам войти в ваше идеальное предприятие.