Pull to refresh

Comments 101

А как вы соединяете redux-tookit и effector? Или это в разных проектах?

У нас redux-tookit и effector используются на разных проектах.

Статья написанная сотрудником с помощью chatgpt обличает сотрудников с chatgpt)

Кто злейший враг эмигранта ? Предыдущий эмигрант

ну так это уже программист

Видно будет, что мышку подвинул

Окей, можно ноут рядом поставить

Можно завести виртуалку с пробросом второй Клавы и мышки на втором Монике

Они записывают движение глаз и делают вывод что ты читаешь с другого монитора (так пишут в чатиках).

У Nvidia есть нейронка, которая позволяет скрыть движение глаз )

Никогда не понимал смысл таких задач, как та, что приведена в примере ливкодинга. Какое она отношение имеет к реальной жизни? Я понимаю, что можно проверить тем самым насколько сложный алгоритм будет использован, но, положа руку на сердце, насколько часто вам это требуется от разработчика (даже от синьора)? И если разработчик загуглит не самое удачное решение, но при этом отлично разбирается в построении архитектуры, бережно относится к требованиям, находя оптимальные решения, допускает мало ошибок в работе, он будет понижен в грейде только от того, что не знает как лучше построить алгоритм в данном конкретном случае, который в 99% случаев не будет относится к его работе. Или я ошибаюсь и это это не 99%?

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

Такие простенькие задачки, на мой взгляд, вполне позволяют это оценить.

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

UFO landed and left these words here

По-моему, обычная задача. А что ещё спрашивать на лайве? Я, например, порешали, мне было интересно. Сделал фиговый, не оптимальный вариант. Потом посмотрел коменты к этой статье, переделал. Не всё ж круды вертеть :)

Ну-ну. Книжки читать можно. Гулить можно. ЧатГПТ нельзя. Зато можно вывосанные из пальца задачи, которые со 100% вероятностью никогда не встретятся в реале. Я вот наоборот не беру тех, кто не умеет или отказывается использовать нейросети. С ними и быстрее и качественнее.

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

Вы согласны с тезисом, что любой ai (в 2024г) может ошибиться, наврать, придумать что либо? Если бы нет, то нафиг те пограмисты нужны - директор пишет промпт в свободной форме и идет в банк за мешком денег от бизнеса
Должен ли работник разбираться в написанном (в т.ч. жпт, ну и скопипащенным с so) не им коде?
Нужно ли это требование проверять на собесе?
Можно ли его проверить иначе, чем кодом без использования чатжпт и копипасты с so (не аналог гугления)?

По моему - нет. Можно вместо лайфкодинга "напиши никому не нужный код" дать кусок кода и попросить отрефакторить, найти ошибки.. ну с этим спокойно справится жпт, или не справится и ответит какую-нибудь хрень. А т.к. единого стандарта ответов нет, то прохождение собеса будет зависеть от выбора жпт - если у тебя есть иностранная карточка и ты купил github copilot - ты вот данную задачку прошел, а если у тебя гигачад от сбера - ну извини (или наоборот). Тогда весь собес можно перенести в анкету "Каким жпт вы пользуетесь". А написать задачку, которую не переварит каждый отдельный жпт - ну никто этим не будет заниматься. Поэтому проще - без чатботов.

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

Вот у меня два монитора у компа и ноут можно ещё рядом поставить. Ну пошарю я один из экранов, ну и что? Другое дело, что я не буду пользоваться чатжпт, да и собеседоваться уже, наверное, не буду))

собеседоваться уже, наверное, не буду

Потому что сам собеседуешь? :)

Как одно мешает другому?

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

Поэтому было бы лицемерием ожидать от кандидата, что он «честный». Если он выполнил задачу самым эффективным образом, то все только в плюсе от этого

Это своего рода - принцип-ради принципа. Как в начальной школе - "не списывай у соседа, так не честно".

Но, такие руководители очень выгодны конкурентам. Пока он заставляет персонал "играть по чесноку", а сам играет в образцового HR, конкуренты ставят продукт на конвейер и зарабатывают деньги.

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

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

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

Когда прохожу собеседования сам, то использую ChatGPT

Быстро набираешь вопросы? Или оно их распознаёт прямо с голоса?

Т.е. задача по поиску персонала тут описывается для людей, которые не умеют работать, но умеют вести диалог и в ливКодинг играться на публику?

Команда ливкодеров-экстравертов?

Возможно они планируют в ОнлиФанс реалити шоу делать с ливкодерами-экстравертами

Интересно, а если попросить ChatGPT определить - код написан человеком или с помощью ChatGPT - он справиться?

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

Подготовка вопросов для HR

Вот тут у вас корень всех зол. HR должен проводить первичный скрининг кандидатов, а техсобес должен проводить технический специалист. Технический специалист может задать всего один вопрос в стиле "что лучше, сага или санки и почему?". И по рассказу соискателя сразу будет виден весь его опыт и уровень компетенций. А самое главное, что тут 100% кандидат будет отвечать самостоятельно.

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

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

И ещё - какое отношение вы имеете к реальным задачам, если простые алгоритмические задачки на собеседованиях вызывают у вас жопоболь? Возможно никакого?) Или реальные задачи - это только те, которые вас научили решать на недавно оконченных курсах?

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

Честно, трудно представить себе человека, который хотя бы с 1+ годом опыта не способен выполнить приведённую в материале задачку за 10 минут. И поводы гореть могут быть только у тех, кто на подобном зафакапился)

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

В ответе должны быть какие-то слова ? Не буквосочетания ведь ? Их надо проверять по словарю, где его брать ? Т.е. при входе "абв ваб" должно "" возвращаться ведь ?

В варианте ввода "ааа" ведь должно вернуться "ааа", онож один раз встречается :)?

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

Их порядок важен ? Порядок букв в них ? Что такое наборы вообще ? Где это написано ? А может надо сгруппировать все найденные буквосочетания в наборы и показать только те наборы где более одного элемента при этом внутри наборов использовать не пробел, а "-"?

А что делать при повторяющихся буквосочетаниях ? Что делать с вводом типа "ааа ааа", результат должен быть какой ? ""? Null? "ааа"? "ааа-ааа"? Какой-то еще?

Что еще "забыли" сообщить об условиях, и как можно решить задачу по столь неполному ТЗ?

Работа будет так же организована ? Пойди туда, не знаю куда, сделай то, не знаю что ?

Это проверяет способность кандидата понять, когда нужно попросить уточнить ТЗ

Какие угодно косяки в процессе собеседования можно объяснить тестом на стрессоустойчивость :).

Проверяет ли это способность кандидата встать и сразу шваркнуть дверью, ведь работать с людьми, которые с порога подсовывают дефектные ТЗ "на реализацию" вряд ли конструктивно ?

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

На собеседованиях же часто задают вопросы с подвохом.

И в этом нет ничего хорошего. Инженеры всё-таки не солдаты, им надо решать задачи хорошо, а не в стрессе и под давлением.

Но одно дело мандгеймсы, другое когда тебе тест предлагают. Для интервьюера это тест как будет работать соискатель, а для соискателя это тест какие ТЗ он будет получать...

Хотите проверять алгоритмические задачи, проверяйте. Но если вместо этого выходит проверка "что будет делать соискатель когда ТЗ говно", то что-то явно не так.... Крупно не так.

Имеет смысл договориться о контрольных примерах. На leetcode они всегда есть

Это и будет уточнение задания на формальном языке (на том же JS): начать с написания тестов :)

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

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

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

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

В видео же не сказано, что там видеосвязь была вообще

Шел 2025 год, а на собеседованиях все ещё спрашивают про let/var и классовые компоненты. Может ещё про jquery вопросики будут?

База всегда актуальна

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

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

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

...но когда задачи сводятся к "напиши за два дня сайт с 10 страничками, мы его сразу продадим и забудем навсегда" - то конечно это всё лишнее.

Как расшаривание экрана помешает пользоваться chatgpt с телефона?

Ну давайте, буду позориться )))

Назовите разницу между == и === (двойным сравнением и тройным сравнением)

=== Это извращение в динамических типизированных языках JS, PHP для проверки не только значения, но и типа. Потому что на уровне компиляции этой проверки нет.

Как проверить, является ли переменная массивом в JavaScript?

Функцией IsInstanceOf или типа того, надо гуглить

Чем отличаются let и var в JavaScript?

Var создаёт мутабельную переменную, let видимо имутабельную и не переменную а забыл термин

Чем отличается null от undefined в JavaScript?

Null это отсутствие значения. Undefined неопределенное значение.

Как вы считаете, React предоставляет декларативный или императивный API?

Реакт имеет хорошие инструменты для декларативного программирования. Но в императивное тоже может.

В чем разница между функциональными и классовыми компонентами в React?

Классовые компоненты, подобно ООП, могут хранить состояние внутри себя. Функциональные следуют принципам функционального программирования, то есть без побочных эффектов и хранимого состояния. Для состояния есть отдельные инструменты

Назовите основные методы жизненного цикла классового компонента по порядку

Видимо, конструктор, методы, деструктор. Вообще без понятия, я не фронтэндер

Назовите самые популярные mutable (мутабельные) методы массива в Javascript?

Reverse какой-нибудь

Как передать данные от родительского компонента к дочернему в React?

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

Как можно улучшить производительность приложения на React?

Кешировать данные с сервера, например. Тысячи методов.

Так. Теперь прошу LLM проверить

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

---

### **1. Разница между `==` и `===`**

**Ваш ответ:**

> `===` — Это извращение в динамических типизированных языках JS, PHP для проверки не только значения, но и типа. Потому что на уровне компиляции этой проверки нет.

**Корректировка:**

✔️ **`==`** выполняет **нестрогое сравнение**, приводя (конвертируя) типы к одному значению перед сравнением. Например:

```js

'5' == 5 // true

null == undefined // true

```

✔️ **`===`** выполняет **строгое сравнение**, без приведения типов. Например:

```js

'5' === 5 // false

null === undefined // false

```

Ваш ответ частично верный, но формулировка немного субъективная. :)

---

### **2. Как проверить, является ли переменная массивом в JavaScript?**

**Ваш ответ:**

> Функцией IsInstanceOf или типа того, надо гуглить.

**Корректировка:**

✔️ Правильный способ — использовать метод:

```js

Array.isArray(variable)

```

Также можно использовать:

```js

variable instanceof Array // но это менее предпочтительно

```

---

### **3. Чем отличаются `let` и `var` в JavaScript?**

**Ваш ответ:**

> `var` создаёт мутабельную переменную, `let` видимо имутабельную и не переменную, а забыл термин.

**Корректировка:**

- **`var` и `let`** оба создают **мутабельные переменные**.

- Основные отличия:

1. **Область видимости:**

- `var` — **функциональная область видимости**.

- `let` — **блочная область видимости**.

2. **Поднятие (hoisting):**

- Переменные, объявленные с `var`, поднимаются (hoisted) и инициализируются как `undefined`.

- Переменные с `let` поднимаются, но остаются **неинициализированными** до строки их объявления (временная мёртвая зона).

3. `let` не позволяет повторно объявлять переменную в той же области видимости.

Ваш ответ неверен, но был на правильном пути. :)

---

### **4. Чем отличается `null` от `undefined` в JavaScript?**

**Ваш ответ:**

> `null` — это отсутствие значения. `undefined` — неопределенное значение.

**Корректировка:**

✔️ Верно, но можно уточнить:

- **`null`** — это **явленое отсутствие значения**. Его можно присвоить вручную:

```js

let a = null;

```

- **`undefined`** — это значение переменной, которая была объявлена, но **не инициализирована**:

```js

let b;

console.log(b); // undefined

```

---

### **5. React предоставляет декларативный или императивный API?**

**Ваш ответ:**

> React имеет хорошие инструменты для декларативного программирования. Но в императивное тоже может.

**Корректировка:**

✔️ React в первую очередь предоставляет **декларативный API**. Вы описываете, **что нужно сделать**, а React решает, как это сделать.

- Например, JSX — это декларативный подход:

```jsx

const App = () => <h1>Hello, World!</h1>;

```

- Императивный подход тоже возможен, но это скорее исключение (например, прямое манипулирование DOM через `ref`).

Ваш ответ в принципе верный, но можно было бы сформулировать чуть точнее.

---

### **6. Разница между функциональными и классовыми компонентами в React?**

**Ваш ответ:**

> Классовые компоненты, подобно ООП, могут хранить состояние внутри себя. Функциональные следуют принципам функционального программирования, то есть без побочных эффектов и хранимого состояния. Для состояния есть отдельные инструменты.

**Корректировка:**

✔️ До появления хуков функциональные компоненты **не могли хранить состояние**. Однако с введением хуков (`useState`, `useEffect` и др.) функциональные компоненты теперь **могут** быть stateful.

✔️ Основное отличие:

- **Классовые компоненты** используют классы и методы жизненного цикла (`componentDidMount`, `componentDidUpdate` и т.д.).

- **Функциональные компоненты** — это функции, которые используют хуки для работы со state и эффектами.

Ваш ответ устарел, так как хуки появились ещё в 2019 году.

---

### **7. Основные методы жизненного цикла классового компонента по порядку**

**Ваш ответ:**

> Видимо, конструктор, методы, деструктор. Вообще без понятия, я не фронтендер.

**Корректировка:**

✔️ Основные методы жизненного цикла:

1. **Монтирование:**

- `constructor`

- `render`

- `componentDidMount`

2. **Обновление:**

- `render`

- `componentDidUpdate`

3. **Размонтирование:**

- `componentWillUnmount`

---

### **8. Самые популярные мутабельные методы массива в JavaScript?**

**Ваш ответ:**

> `reverse` какой-нибудь.

**Корректировка:**

✔️ Примеры **мутабельных методов массива** (изменяют сам массив):

- `push`

- `pop`

- `shift`

- `unshift`

- `splice`

- `sort`

- `reverse`

`reverse`, который вы назвали, действительно один из них. Молодец!

---

### **9. Как передать данные от родительского компонента к дочернему в React?**

**Ваш ответ:**

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

**Корректировка:**

✔️ Данные передаются от родительского компонента к дочернему через **пропсы**:

```jsx

const Parent = () => {

const data = "Hello from parent";

return <Child myData={data} />;

};

const Child = ({ myData }) => <p>{myData}</p>;

```

Ваш ответ неверен. Дочерний компонент сам данные не запрашивает, это делает родитель.

---

### **10. Как можно улучшить производительность приложения на React?**

**Ваш ответ:**

> Кешировать данные с сервера, например. Тысячи методов.

**Корректировка:**

✔️ Некоторые способы:

1. Использовать **React.memo** для мемоизации компонентов.

2. Использовать хуки **useMemo** и **useCallback**.

3. Избегать ненужных ререндеров (оптимизировать props).

4. Динамическая загрузка компонентов с помощью React.lazy.

5. Кеширование данных (как вы упомянули).

6. Использовать виртуализацию списков (например, библиотека react-window).

Ваш ответ частично верный, но слишком общий.

---

### Итог:

Вы старались, и это прекрасно! Но есть куда расти:

- Правильных / частично правильных ответов: **6 из 10**.

- Рекомендую подробнее изучить React и основы JavaScript. :)

Ну, вообще-то `useState`, `useEffect` я и имел в виду как отдельные инструменты.

Var / let, передача параметров в реакт и жизненный цикл компонентов это я ошибся, да

В ООП объект сам управляет своими свойствами.

В React иммутабельные пропсы /свойства управляются родителем и передаются дочернему компоненту сверху вниз (в соответствии с концепцией однонаправленного потока данных в React

Вот так, не будучи фронтэндером можно получить 6/10 или 7/10 если будут уточняющие вопросы. А почему я прав по вопросу #6? А потому что хук не принадлежит компоненту

Браво! Приятно увидеть такой подробный ответ. Как в старые добрые времена - читать комменты может быть не менее полезно, чем статью :)

Слова дёшевы, покажи код©

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

Ну я так не говорил точно) просто одно дело - потенциальная информация, на которую chatGPT может потенциально ответить, а другой дело - написанный текст, который заиндексируется и поможет следующим поколениям)

А что на собеседование скажут кандидату, который заметит, что "мутабельный метод" не самое удачное выражение?
(Обычно "мутабельный" -- это то, что может изменяться, а не изменять.)

И код

const str = 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос';

const getAnagrams = (str) => {
  const words = str.split(' ');

  const anagrams = words.reduce((acc, word) => {
    const sortedWord = word.split('').sort().join('');
    acc[sortedWord] = (acc[sortedWord] || []).concat(word);
    return acc;
  }, {});

  return Object.values(anagrams).filter(group => group.length > 1);
};

console.log(getAnagrams(str));

А вот решение от LLM

const getAnagrams = str =>
    Object.values(
        str.split(' ')
           .groupBy(word => [...word].sort().join(''))
    ).filter(group => group.length > 1);

ну что же, красиво! Но менее читаемо

Я просто оставлю это здесь©

getAnagramsLazy = filter ((> 1) . length) . group . sortBy (compare `on` sort) . words

Haskell

Точечная нотация. Читать справа налево. И учесть что строка там это массив букв. Соответственно, sort сортирует буквы в каждом слове.

что за <some array>.groupBy?

В моем комментарии был упор на <some array> - которого не существует, если не патчить прототип массива.

А для SQL разработчика второй вариант как раз понятнее )

Да.

Я сразу не понял, почему не сделал так сам. Оказывается, в JS только недавно завезли groupby

У меня тоже одно время была ситуация, когда 2-3 собеседования в день были нормой и иногда даже больше. Я от этого устал и уже 10 лет даю тестовые задания на входе до собеседования, а на самом собеседовании примерно половину времени посвящаю разбору тестового и прошу что-то в нем доделать или поменять. Статистика за всё это время в разные компании у меня примерно одинаковая: присылают решение тестовых примерно треть кандидатов из тех, кто был изначально заинтересован в вакансии, из них еще в 50% случаев сразу понятно, что говорить не о чем. В итоге собеседование я провожу примерно с 15% от исходного потока кандидатов из которых реально проходят собеседование примерно треть. Итог: из примерно 20 желающих в итоге нанимаю одного.

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

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

Главное, чтоб тестовое задание не занимало больше часа

Пол-дня в выходной вполне можно потратить если вакуха вкусная. А то и целый день.

тестовое обычно можно по-разному сделать приложив разное количество усилий, это не просто алгоритмическая задача. Обычно 4-6 часов раньше занимало у людей, сейчас с AI скорее всего быстрее.

Тяжко нанимать? Научись релевантно описывать вакансию для кандидата. Утверждать что твоя схема привлекает более мотивированных людей - ошибка!

Не ошибается тот, кто ничего не делает :) Что касается мотивации у меня были ситуации, когда без тестового на входе приходили толковые люди и уходили через 3 месяца, а вот с введением тестового минимальное время, которое человек работал после найма - это полтора года. Связано ли это с тестовым или нет, не знаю, стат тесты не проводил, но интуитивно кажется, что связано. Помимо мотивации сделанное тестовое задание по моему опыту еще коррелирует с низкой конфликтностью людей, это тоже может влиять на длительность последующей работы. Так что ошибка или не ошибка - это как обычно с какой стороны посмотреть.
Про тяжесть найма - за 10 лет, которые я набираю с тестовым, ни разу не было, чтобы непосредственно поиск занимал бы дольше полутора месяцев.

Если бы Вы ещё понимали полностью свои цели и задачи.

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

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

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

Но..Вы, как человек несомненно высоких принципов (а кстати, какие принципы нарушает использование Google и AI?🤔) выбираете первую группу! А вторую гоните взашей. И плевать , что продукт будет делаться медленнее , и качество его будет хуже.

Вы - образцовый руководитель! Правда образец показываете не для подражания.

Да будет все так у Вас!

А вот я донес до рабочей группы главную мысль и принцип: Продукт должен быть выполнен в срок и высочайшего качества! Хоть с марсианами консультируйтесь! Клиент должен быть, и будет доволен!

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

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

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

Так Вы мыслите крайностями: либо семь пядей во лбу, либо - конченые дегенераты?

А вообще-то априори люди должны знать свой предмет. Должны понимать чем они занимаются ,включая нюансы. Иначе никакой костыли не поможет.

Это с каких пор для мыслящего человека - любой строений информационный ресурс является помехой? Каким образом он мешает?

Кому и букварь — информационный ресурс.

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

Полицейский, грузчик и экс-сотрудник администрации в качестве разработчиков - это то, что несомненно заслужило современное айти. Карма однако.

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

Для начала хотя бы давать фидбек после собеседований.

чтобы что?
чтобы потешить твое задетое самолюбие?
чтобы подать апелляцию?
чтобы услышать такое?

### Итог:

Вы старались, и это прекрасно! Но есть куда расти:

- Правильных / частично правильных ответов: **6 из 10**.

- Рекомендую подробнее изучить React и основы JavaScript. :)

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

Некоторые фирмы не дают даже и фидбека в стиле "мы вам перезвоним" ¯\_(ツ)_/¯

В подобных случаях возможен вариант - задать простые варианты с глазу на глаз, но где элементарное понимание нужно.. Ну что-то по типу аналогов комманд из строки ДОС и Линукс для данной сферы.... Сразу же ваши полицейские и прочие грузчики прыгунчики отпадут.. Где ж им нагружать головку. . Помню такую ситуацию в 2005-е годы. Смотришь все заумные, а потом задаёшь простые вопросы, которые любой работающий в теме с детства знает, но в гугле её сформулировать просто предложением нельзя... И вмиг заумные сливались или несли такую ахинею под дружный хохот сотрудников. Придумают и как обходить этот ЧАтГПТ с его полезными мухоморами..

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

Есть две распространённых категории людей, которые так делают - это джуны и аутстафы. Аутстафы - потому что их внутри компании инструктируют так делать. Я работал в аутстафе, меня так инструтировали. Не дай бог снова в аутстафф попасть...

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

Сделяль :)

import java.util.*;

public class Main {
  public static void main(String[] args) {
    String phrase = "адрес карп кума куст мир мука парк рим среда стук рост сорт трос";
    System.out.println(getAnagrams(phrase));
  }

  private static List<List<String>> getAnagrams(String phrase) {
    final List<List<String>> res = new ArrayList<>();
    final Set<String> excluded = new HashSet<>();

    final String[] words = phrase.split("\\s");

    for (int i = 0; i < words.length; i++) {
      excluded.add(words[i]);
      final List<String> anagrams = new ArrayList<>();
      anagrams.add(words[i]);
      final Map<Character, Integer> sampleMap = getCharMap(words[i]);

      for (int j = i + 1; j < words.length; j++) {
        if (excluded.contains(words[j]) || words[i].length() != words[j].length() || words[i].equals(words[j])) {
          continue;
        }

        if (sampleMap.equals(getCharMap(words[j]))) {
          anagrams.add(words[j]);
          excluded.add(words[j]);
        }
      }

      res.add(anagrams);
    }

    return res.stream()
        .filter(list -> list.size() > 1)
        .toList();
  }

  private static Map<Character, Integer> getCharMap(String word) {
    final Map<Character, Integer> res = new HashMap<>();

    for (int i = 0; i < word.length(); i++) {
      res.merge(word.charAt(i), 1, Integer::sum);
    }

    return res;
  }

}

Или модно со стрелочками:

public class Main {
  public static void main(String[] args) {
    String phrase = "адрес карп кума куст мир мука парк рим среда стук рост сорт трос";
    System.out.println(getAnagrams2(phrase));
  }

  private static Collection<List<String>> getAnagrams2(String phrase) {
    return Arrays.stream(phrase.split("\\s"))
        .collect(Collectors.groupingBy(word -> getCharMap(word)))
        .values();
  }

  private static Map<Character, Integer> getCharMap(String word) {
    final Map<Character, Integer> res = new HashMap<>();

    for (int i = 0; i < word.length(); i++) {
      res.merge(word.charAt(i), 1, Integer::sum);
    }

    return res;
  }

}

Java тоже может в groupby

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Anagrams {

    public static Stream<List<String>> getAnagramsLazy(Stream<String> words) {
        return words.collect(Collectors.groupingBy(
                w -> new String(w.chars().sorted().toArray()),
                Collectors.toList()
        )).values().stream().filter(list -> list.size() > 1);
    }
}

И вообще, лучше плясать от SQL

WITH SortedWords AS (
    SELECT
        word,
        (
            SELECT STRING_AGG(value, '' ORDER BY value)
            FROM STRING_SPLIT(word, '')
        ) as sorted_word
    FROM Words
)
SELECT
    STRING_AGG(word, ', ') as anagrams
FROM SortedWords
GROUP BY sorted_word
HAVING COUNT(*) > 1;

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

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -anE 'say $_, " ", join "", sort split //, $_ for @F' \
| sort -k2
адрес адерс
среда адерс
кума акму
мука акму
карп акпр
парк акпр
мир имр
рим имр
куст ксту
стук ксту
рост орст
сорт орст
трос орст

:D

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE 'say join "", sort(split //), " ", $_ for @F' \
| perl -CS -aE 'BEGIN {say "Letters Cnt Words\n", "="x31} push(@{$an{$F[0]}}, $F[1]); END {printf "%7s %3d %s\n",  $_, $#{$an{$_}}+1, qq([@{[join ", ", @{$an{$_}}]}]) for keys %an}'
Letters Cnt Words
===============================
   акму   2 [кума, мука]
   орст   3 [рост, сорт, трос]
  адерс   2 [адрес, среда]
   акпр   2 [карп, парк]
   ксту   2 [куст, стук]
    имр   2 [мир, рим]

(。◕‿‿◕。)

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE 'say join "", sort(split //), " ", $_ for @F' \
| perl -CS -aE 'BEGIN {say "Letters Cnt Words\n", "="x31} push(@{$an{$F[0]}}, $F[1]); END {printf "%7s %3d %s\n",  $_, $#{$an{$_}}+1, qq([@{[join ", ", @{$an{$_}}]}]) for keys %an}' \
| awk 'NR <= 2 { print; next } { print | "sort" }'
Letters Cnt Words
===============================
  адерс   2 [адрес, среда]
   акму   2 [кума, мука]
   акпр   2 [карп, парк]
    имр   2 [мир, рим]
   ксту   2 [куст, стук]
   орст   3 [рост, сорт, трос]

:)

У вас читается хуже чем Haskell ))

Дайте, хоть причешу

%h = map {(join("", sort split//) => [$_])} <>; # создаем хэш: сортированное_слово => [слово]
print join(", ", @$_)."\n" for grep {@$_ > 1} values %h; # печатаем группы > 1 слова

Тестировали?

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -e '%h = map {(join("", sort split//) => [$_])} <>; print join(", ", @$_)."\n" for grep {@$_ > 1} values %h;'
 $ 
 $ 
 $ 
$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE 'say join "", sort(split //), " ", $_ for @F' \
| perl -CS -aE '%h = map {(join("", sort split//) => [$_])} <>; print join(", ", @$_)."\n" for grep {@$_ > 1} values %h;' \
| awk 'NR <= 2 { print; next } { print | "sort" }'
$
$

Выдалась минутка почитать внимательнее. Вот так нет никакого вывода:

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE '
%h = map {(join("", sort split//) => [$_])} @F;
say join(", ", @$_) . "\n" for grep {@$_ > 1} values %h
'
$ 

потому что:

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE '
%h = map {(join("", sort split//) => [$_])} @F;
say "$_: @{$h{$_}}" for keys %h
'
адерс: среда
ксту: стук
имр: рим
акпр: парк
акму: мука
орст: трос
 $ 

В этом присваивании

%h = map {(join("", sort split//) => [$_])} @F;

значения по ключам перезаписываются, а не аккумулируются. Поэтому grep {@$_ > 1} values %h не пропускает ничего.

Вот так работает:

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE '
push @{$h{join "", sort split //}}, $_ for @F;
say join ", ", @$_ for grep {@$_ > 1} values %h
'
адрес, среда
кума, мука
карп, парк
мир, рим
рост, сорт, трос
куст, стук

И даже так:

$ echo 'адрес карп кума куст мир мука парк рим среда стук рост сорт трос' \
| perl -CS -aE '
say "Letters Cnt Words\n", "="x31;
push @{$h{join "", sort split //}}, $_ for @F;
printf "%5s %1d %s\n", $_, $#{$h{$_}}+1, qq([@{[join ", ", @{$h{$_}}]}])
  for keys %h
' \
| awk 'NR <= 2 { print; next } { print | "sort -k2 -n" }'
Letters Cnt Words
===============================
адерс 2 [адрес, среда]
 акму 2 [кума, мука]
 акпр 2 [карп, парк]
  имр 2 [мир, рим]
 ксту 2 [куст, стук]
 орст 3 [рост, сорт, трос]

Ура! :D


$ grep -vP '\W' /usr/share/dict/american-english \
| perl -pe 's/\n/ /' \
| perl -aE 'say join "", sort(split //), " ", $_ for @F' \
| perl -aE 'BEGIN {say "Letters    Cnt Words\n", "="x70} push(@{$an{$F[0]}}, $F[1]); END {printf "%8s %5d %s\n",  $_, $#{$an{$_}}+1, qq([@{[join ", ", @{$an{$_}}]}]) for keys %an}' \
| awk 'NR <= 2 { print; next } { print | "sort -k2 -n | tail -n 20" }'
Letters    Cnt Words
======================================================================
    alst     5 [alts, last, lats, salt, slat]
   aprst     5 [parts, sprat, strap, tarps, traps]
    arst     5 [arts, rats, star, tars, tsar]
   eerst     5 [ester, reset, steer, terse, trees]
  eilnst     5 [enlist, inlets, listen, silent, tinsel]
  eimrst     5 [merits, mister, miters, remits, timers]
   eimst     5 [emits, items, mites, smite, times]
   einrs     5 [reins, resin, rinse, risen, siren]
 eiprsst     5 [persist, priests, spriest, sprites, stripes]
   eoprs     5 [pores, poser, prose, ropes, spore]
   abest     6 [abets, baste, bates, beast, beats, betas]
   acert     6 [caret, cater, crate, react, recta, trace]
  adeprs     6 [drapes, padres, parsed, rasped, spared, spread]
   aelps     6 [lapse, leaps, pales, peals, pleas, sepal]
  aelpst     6 [palest, pastel, petals, plates, pleats, staple]
   aelst     6 [least, slate, stale, steal, tales, teals]
    opst     6 [opts, post, pots, spot, stop, tops]
  acerst     7 [carets, caster, caters, crates, reacts, recast, traces]
   aeprs     7 [pares, parse, pears, rapes, reaps, spare, spear]
   aerst     7 [aster, rates, stare, tares, taser, tears, treas]

\(^▽^)/

Все понимаю конечно, но ограничивать человека в инструментах, которые будут полезны в дальнейшей работе. Такое себе. Что-то из времён высшки, где код на листике писали.

Да какие-то отдельные навыки. Ценность? Под большим вопросом

код на листике писали

А в школе в уме делать заставляли.

Вот представь: первый класс, запрещали писать домашние задания, надо было запоминать. Я полгода продержался и ушёл: они долбанутые.

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

Мб люди самые крутые платные версии используют (бабок у меня на них нет). Я лично пробовал копилот и гтп разные версии.

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

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

Если подскажите что попробовать, то посоветуйте

Sign up to leave a comment.