Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 October 03

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Jasin Ko
Ну если говорить конкретно про go, то с пониманием компилятора проблем не должно быть: если не ошибаюсь, то с 1.15 версии его на go и переписали. Хотя, признаюсь, не думал что на собесах по нему могут так глубоко лезть. Обычно наоборот кричат на каждом углу, что "вот какой простой", "его для быстрого вкатывания создали", "зачем C/C++? Пол дня учим и в продакшен." (достаточно на некоторых гоферов в телеграмм-группах посмотреть).
Дело не в компиляторе, а в том, как реализован map, хэш-таблица
Вот в случае массива всё понятно - линейная область памяти. Со списком тоже вопросов нет, думаю
А хэш мэп устроен интереснее, и вопрос именно на это знание/понимание
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
В гошном чате вчера кинули ссылку на интересную статью на Хабре про вопросы с собеседования, и там до сих пор бурлят споры (в комментах хабра скорее всего тоже)
В вопросах довольно много специфики, но чаще всего люди цепляются к одному вопросу, который уместен и для мира ноды: как устроен тип Map?
Сразу процитирую автора: Самый популярный неправильный ответ: «это хеш-таблица». Да, это хеш-таблица. Как устроена хеш-таблица?

Стало любопытно, а насколько часто вы слышали (или задавали) такой вопрос на собеседованиях на позицию разработчика в ноде?

Поясню своё любопытство
Мне кажется, что вопрос хороший (потому что достаточно глубокий). И что на собесах по ноде он не звучит, потому что к разработчикам на ноде предъявляют более низкие требования, чем к разработчикам на других платформах/языках (у меня есть соображения почему так, но ими я пока делиться не хотел бы). Но мало ли, это только мой опыт, и на самом деле такой вопрос на собесе - стандартная практика, а мне просто (не)везло

Ссылка на начало срачика в го чате, если кому интересно будет: t.me/gogetajob/53981
Как устроен тип Map?
Думаю этот вопрос многих интересует, но за отсутствием внятной документации и желания получить ответ на поверхности никто так глубоко не копает. Это наверное путь джедая.

Честно говоря я только мельком глянул в MDN и пока не нахожу ему какого нибудь функционального применения лично для своих целей или еще каких нибудь в контексте JS, по крайней мере на сегодняшний день. Возможно из-за того что у меня не достаточно опыта или мне просто банально хватает того функционала что уже заложен в JS (Array / Object).

Нужно сказать что Map это не тип, вероятно вы не верно сформулировали? Хотя да, у него есть инстанс, и его можно сравнить по типу, но это ведь суть Object. Это ведь объект с инкапсулированым механизмом для работы с чем-то что, по моему предположению, похоже на хеш-таблицу.

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

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Дело не в компиляторе, а в том, как реализован map, хэш-таблица
Вот в случае массива всё понятно - линейная область памяти. Со списком тоже вопросов нет, думаю
А хэш мэп устроен интереснее, и вопрос именно на это знание/понимание
Предполагаю что механизм записи данных в хеш-таблицу далеко не ушел от линейного, так как её ресурсом является физический элемент, объем которого имеет свойство заканчиваться и если я не ошибаюсь выделение памяти согласовывается с ОС.

Думаю не задают такие вопросы на собесах потому, как этот вопрос не лежит в контексте JS архитектуры. Хотя и затрагивает основы структурирования данных.
источник
2020 October 04

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Предполагаю что механизм записи данных в хеш-таблицу далеко не ушел от линейного, так как её ресурсом является физический элемент, объем которого имеет свойство заканчиваться и если я не ошибаюсь выделение памяти согласовывается с ОС.

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

АП

Алексей Попов... in NodeUA - JavaScript and Node.js in Ukraine
Alexander
Как устроен тип Map?
Думаю этот вопрос многих интересует, но за отсутствием внятной документации и желания получить ответ на поверхности никто так глубоко не копает. Это наверное путь джедая.

Честно говоря я только мельком глянул в MDN и пока не нахожу ему какого нибудь функционального применения лично для своих целей или еще каких нибудь в контексте JS, по крайней мере на сегодняшний день. Возможно из-за того что у меня не достаточно опыта или мне просто банально хватает того функционала что уже заложен в JS (Array / Object).

Нужно сказать что Map это не тип, вероятно вы не верно сформулировали? Хотя да, у него есть инстанс, и его можно сравнить по типу, но это ведь суть Object. Это ведь объект с инкапсулированым механизмом для работы с чем-то что, по моему предположению, похоже на хеш-таблицу.

Как она устроена, - у меня есть догадки что на низком уровне выделяется память куда по ячейкам адресуется информация посредством ссылок. По крайней мере у меня такая картина в голове.
Про низкий уровень не интересно. Оно всегда и везде так устроено, что надо выделять память и что-то там размещать (к ос обращаться не всегда нужно, часто используются собственные аллокаторы, когда сначала у ос запрашивают большой кусок памяти, а потом сами управляют размещением в нём объектов)
Интереснее как это организовано структурно
Термин хэш-таблица подразумевает, что на каком-то этапе от чего-то вычисляется хэш. А по какому алгоритму? А что будет в случае коллизии? Эти вопросы, кстати, актуальны и для джуновского собеседования, тогда как вопрос про устройство map, конечно, стоит ожидать при собеседовании сениора

На счёт доступности документации вы не правы. Во-первых, всегда есть исходники. Это действительно путь джедая, но речь ведь о сениорах, от которых такой путь ожидать и нужно. Во-вторых, информации про v8 и ноду много, как минимум у нас есть v8.dev
Причём конкретно про map в v8 она даже переведена на русский habr.com/ru/company/ruvds/blog/518032/
источник

A

Alexander in NodeUA - JavaScript and Node.js in Ukraine
Алексей Попов
Про низкий уровень не интересно. Оно всегда и везде так устроено, что надо выделять память и что-то там размещать (к ос обращаться не всегда нужно, часто используются собственные аллокаторы, когда сначала у ос запрашивают большой кусок памяти, а потом сами управляют размещением в нём объектов)
Интереснее как это организовано структурно
Термин хэш-таблица подразумевает, что на каком-то этапе от чего-то вычисляется хэш. А по какому алгоритму? А что будет в случае коллизии? Эти вопросы, кстати, актуальны и для джуновского собеседования, тогда как вопрос про устройство map, конечно, стоит ожидать при собеседовании сениора

На счёт доступности документации вы не правы. Во-первых, всегда есть исходники. Это действительно путь джедая, но речь ведь о сениорах, от которых такой путь ожидать и нужно. Во-вторых, информации про v8 и ноду много, как минимум у нас есть v8.dev
Причём конкретно про map в v8 она даже переведена на русский habr.com/ru/company/ruvds/blog/518032/
🤝 Убедил :)
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
Всем привет, вопрос скорее к людям, которые юзали puppeteer. Столкнулся с проблемой, не могу дождаться загрузки капчи от гугла, waitForSelector не помогает. Она обёрнута в iframe который без класса, а его name генерируется всегда случайно. Пытался сделать что-то подобное, но не помогает, выдаёт ошибку.
Код:

const context = await page.$('.inner-style-captchagenerator > div > div > div > div > iframe');
const frame = await context.contentFrame();

await frame.waitForSelector('#rc-anchor-container');
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
<div class="inner-style-captchagenerator"><div><div><div style="width: 304px; height: 78px;"><div><iframe src="https://www.google.com/recaptcha/api2/anchor?ar=2&amp;k=6LdMeCIUAAAAAFHYMFkObspfKRx0nomc_jUooKnB&amp;co=aHR0cHM6Ly93d3cuYXR0LmNvbTo0NDM.&amp;hl=ru&amp;type=image&amp;v=Y5tQ3lKwn1XL5hGgLz1kR4-1&amp;theme=light&amp;size=normal&amp;badge=bottomright&amp;cb=q34cguf5am4o" width="304" height="78" role="presentation" name="a-ft5zxfvne17o" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox"></iframe></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea></div><iframe style="display: none;"></iframe></div></div></div>
- структура iframe
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Danil
<div class="inner-style-captchagenerator"><div><div><div style="width: 304px; height: 78px;"><div><iframe src="https://www.google.com/recaptcha/api2/anchor?ar=2&amp;k=6LdMeCIUAAAAAFHYMFkObspfKRx0nomc_jUooKnB&amp;co=aHR0cHM6Ly93d3cuYXR0LmNvbTo0NDM.&amp;hl=ru&amp;type=image&amp;v=Y5tQ3lKwn1XL5hGgLz1kR4-1&amp;theme=light&amp;size=normal&amp;badge=bottomright&amp;cb=q34cguf5am4o" width="304" height="78" role="presentation" name="a-ft5zxfvne17o" frameborder="0" scrolling="no" sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox"></iframe></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response" style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea></div><iframe style="display: none;"></iframe></div></div></div>
- структура iframe
А гду тут #rc-anchor-container ?
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
User True
А гду тут #rc-anchor-container ?
Он внутри iframe body
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Danil
Он внутри iframe body
А puppeteer вообще позволяет обращаться к чужим фреймам?
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
User True
А puppeteer вообще позволяет обращаться к чужим фреймам?
Да, там можно получить доступ
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
Вопрос только в том, как, если нету класса и нету постоянного нейма)
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Danil
Вопрос только в том, как, если нету класса и нету постоянного нейма)
Есть же .inner-style-captchagenerator внутри наверное не 10 фреймов
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
User True
Есть же .inner-style-captchagenerator внутри наверное не 10 фреймов
Я же так и пытаюсь, в коде ж написано
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
Там 4 div без классов ещё, я пытаюсь получить доступ, но оно его не находит видимо
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Danil
Я же так и пытаюсь, в коде ж написано
Я вижу поэтому и не пойму в чем проблема )
А почему содержимое не видет я хз. Не использую puppeteer ибо он только для сайтов любителей рыбалки подходит )
источник

A

Alex in NodeUA - JavaScript and Node.js in Ukraine
User True
Я вижу поэтому и не пойму в чем проблема )
А почему содержимое не видет я хз. Не использую puppeteer ибо он только для сайтов любителей рыбалки подходит )
есть что то лучше?
источник

D

Danil in NodeUA - JavaScript and Node.js in Ukraine
User True
Я вижу поэтому и не пойму в чем проблема )
А почему содержимое не видет я хз. Не использую puppeteer ибо он только для сайтов любителей рыбалки подходит )
Selenium?)
источник

UT

User True in NodeUA - JavaScript and Node.js in Ukraine
Danil
Selenium?)
BrowserAutomationStudio
Правда только под win и это аля визуальное программирование для детей, зато высокая анонимность и безпалевность. Я на нем yandex накручиваю ))
источник