Pull to refresh
34
0.2
Валерий Вырва @valery1707

Java backend

Send message

У меня Android 13 и десяток приложений установленных мимо Google Play потому что их там нет - уведомление только у 2GIS.
Я грешу на их свежую фичу о трансляции координат пользователя, которое делается естественно в фоне.

А реально есть места где "нет цензуры"?
Такое вроде только в даркнете встретить можно.

Действительно, состояние можно затащить внутрь и сэкономить на AtomicBoolean.

Последовательность начинается числом, удовлетворяющим предикату fizz, и заканчивается числом, удовлетворяющим предикату buzz.

Последовательность начатая 6-кой во время 9-ки ещё не завершилась - она завершится только на 10-ке и 9-ка окажется внутри последовательности [6, 10].

В этом кейсе работает такой вариант:

var started = new AtomicBoolean();
Predicate<String> fizzBuzz = i -> {
    if (started.get()) {
        if (buzz.test(i)) {
            started.set(false);
            return false;
        } else {
            return true;
        }
    } else {
        started.set(fizz.test(i));
        return false;
    }
};

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

И в целом я не согласен с "чаще всего".
У нас сейчас на HR доске где-то 15 кандидатов висит.
Почти в каждом резюме глаз за что-то цепляется.

Более 20-ти собесов с июня - подробности по проектам были хорошо если у 4-5 человек
Ссылок на GitHub ноль и, как я уже говорил, одна на заброшенный Stackoverflow.

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

У меня вот такая статистика.

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

Чаще всего в резюме написано что "работал работу", ещё может быть стек указан, но сразу на весь срок в компании на протяжении 5+ лет.
Во что тут вчитываться и что корректировать?

Резюме со ссылкой на Github я ещё не встречал.
Правда встречал со ссылкой на Stackoverflow, только там реальная активность была 5+ лет назад, а потом всё - ни вопросов ни ответов - что мне дал это профиль? В чём смысл оставления этой ссылки в резюме?

Перевожу на свой счёт в ЮMoney, деньги со своего счёта в Тинькофф - не блокируют

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

Я обычно пишу на Java, но сейчас нужно было на TypeScript и возникла проблема как раз с типами.
Есть набор DTO описывающих структуру тела запроса, условно так:

export class FieldX {
  @ApiProperty()
  field1: string;
}

export class Request {
  @ApiProperty({ type: FieldX })
  fieldX: FieldX;
}

Только вот при обработке этого запроса NestJS создаёт инстанс класса Request в котором поле fieldX имеет тип сырого Object, вместо моего конкретного класса FieldX, из-за чего я не могу вызывать на нём методы описанные в классе FieldX.

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

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

278 . Вы знаете, что все классы в Java унаследованы от класса java.lang.Object. Унаследованы ли интерфейсы от класса java.lang.Object?
Нет, только классы в Java наследуются от класса java.lang.Object. Интерфейсы в Java не наследуются от класса java.lang.Object.

370 . Как и классы, интерфейсы также расширяют класс java.lang.Object по умолчанию?
Да, в Java все интерфейсы по умолчанию расширяют класс java.lang.Object.

Так всё таки

  • да, интерфейсы расширяют java.lang.Object?

  • нет, интерфейсы не наследуют java.lang.Object?

Интерфейсы не могут расширять классы или наследоваться от классов, так как интерфейсы могут только расширять другие интерфейсы.

350 . Можем ли мы использовать ключевое слово abstract с конструкторами?

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

Однако, в отличие от обычных методов, абстрактные конструкторы не могут быть определены в Java, потому что конструктор не может быть переопределен или вызван непосредственно из кода подклассов. Вместо этого абстрактный класс может иметь только защищенный (protected) конструктор, который может быть вызван из конструкторов его подклассов.

Почему вы даёте два противоположных ответа:

  • Да, мы можем использовать ключевое слово abstract с конструкторами в абстрактном классе

  • Однако абстрактные конструкторы не могут быть определены в Java

При том что правильный ответ "нет, конструкторы не могут быть абстрактными".

349 . Обязательно ли для класса, который объявлен как абстрактный, иметь хотя бы один абстрактный метод?

Да, класс, объявленный как абстрактный (abstract), должен иметь хотя бы один абстрактный метод в своем теле.

А вот и нет. Абстрактный класс может не иметь ни одного абстрактного метода.

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

Конечно на собеседовании всегда есть фактор волнения и я его учитываю.
Но как ты не волнуйся делать то что он делал адекватный разработчик не будет.

Если первое -- то вы, возможно, просто потеряли хорошего кандидата.

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

Если второе, то это можно было узнать без программирования в прямом эфире, а задав вопросы: ...

Вот тут уже начинается подстраивание "вопросов которые нужно бы задавать каждому" под "проблемы возникшие у конкретного".
Дело не в том знает он или не знает "как привести код к бесконечному циклу?" (это можно сделать огромным количеством способов и разными сайд-эффектами) а в том понимает ли он почему "конкретно вот этот код, написанным им вот только что" ведёт себя таким образом - вот тут и становится ясно понимает ли он ответ на такой вопрос или нет.
Что нужно спрашивать чтобы узнать что человек с N лет работы Java-разработчиком при собеседовании на Java-вакансию не сможет написать простейшее условие?
На словах все хороши ...
Я повторю: после того как он испортил всё что там было он всё ещё считал что он мидл.

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

Странно получается:

  • если я прошу человека писать код, то я "ничего не проверяю"

  • если я просто спрошу "а ты хорош?", то я всё это проверю?

И задача и критерии оценки озвучиваются:

  • исправить Java-код (файл на 99 строк из которых кода только около 70-ти)

  • нужно чтобы он компилировался (изначально там 4 ошибки компиляции) и работал корректно (присутствует несколько логических ошибок)

  • ограничений по времени нет (технически мы обычно укладываемся в 2 часа включая 30-40 минут рассказов с нашей стороны, плюс общие вопросы и обсуждения)

  • разрешена любая любимая IDE, отладка, документация, Интернет и вопросы ко мне

Мне вот не понятно почему схема взаимодействия с IDE должна меняться от того один чел сидит или в группе?
Если я "в одиночку" вызываю Step over/Step into/Run/Debug/Evaluate через горячие клавиши, то почему "в группе" я должен начать использовать строго клики мышкой? Мне быстрее и привычнее использовать горячие клавиши.

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

Просто чтобы пройти по списку "библиотек" нужно будет потратить кучу времени и при этом всё ещё никакой гарантии что человек сможет писать код.

Ко мне на Java-собес пришёл разработчик с 3.5 годами в Java и 16 ле в 1С по резюме, говорит что он мидл - как не верить с таким-то опытом.
Решаем небольшую задачку на совместный кодинг в IDE на его машине - максимально комфортные условия.
И вот что внезапно происходит:

  • 5 минут убеждал компилятор что он должен переваривать if (test1) || (test2) { в разных вариациях. При том что до его правок тут было синтаксически корректное выражение и формат можно было взять из него.

  • Собственно саму проверку подразумевающую сравнение переменной result с переменной expect превратил в сравнение вхождения значения expect в диапазон 1 - 1000 - откуда тут появился диапазон вообще не ясно

  • Функцию int applyOp(char op, int b, int a) с реализацией ровно того что описано в её доке (возврат применения указанной операции op к двум операндам a и b) вызывали с двумя аргументами (это задача на анализ кода) - он выкинул op и реализацию заменил на "всегда складываем операнды"

  • В конце концов привёл код к бесконечному циклу

  • Ни одного логически корректного изменения не было сделано за 30 минут работы с кодом

  • И всё равно считал что он "мидл"

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

  • Компании? Она посчитает что вакансия закрыта и сократит объём найма, но в итоге человек съест кучу ресусов и всё равно отвалится (мы ищем минимум мидл) и потом обратно начнёт поиск, но потеряет ещё и время.

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

  • К тому же на Хабре проскакивала инфа что и с увольнением в рамках испыательного срока тоже не всё так просто.

При этом сама задачка простая и решается в течении полутора часов максимум, и это если офомлять коммиты и прочую "красоту" - потому и используем её на собесе, а не даём в качестве "домашки" - так можно быстро оценить можество моментов:

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

  • анализ его взаимодействия с его же основным средством разработки

  • написание кода, его проверка и отладка

  • подход к стилю кода, неймингу и прочее

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

Могли бы вы рассказать.

Information

Rating
2,172-nd
Location
Воронеж, Воронежская обл., Россия
Date of birth
Registered
Activity