Да ну. Полно уже формоклепателей которые сталкивались с подобным может быть только в вузе.
Хотя не удивлюсь, если большая часть формоклепателей и в вузе не училась.
Да ну. Полно уже формоклепателей которые сталкивались с подобным может быть только в вузе.
ну там HashMap например. всякие RxJava делают то же самое куда элегантнее или там java streams. два последних подхода могут быть спорными, но тупой перебор да еще итакой многословный...
Ну, тут конфьюжн. То, что return false; не на месте - это мой факап, не того чувака. Еще раз: код он пишет вполне рабочий, багов производит не больше других.valchkou wrote: ↑08 Oct 2018 19:38Я не знаю что делать с 60 летним программистом который воспроизводит такие баги.АццкоМото wrote: ↑08 Oct 2018 15:10 Вообще КМК, возвращаясь к обходу деревьев, проблема совсем в другом. Знать структуры данных и базовые алгоритмы - недостаточно. Нужно их применять правильно и предсказуемо. Вот у нас есть чел старенький, думаю, лет 60. Он бодряк ого-го и код, вполне рабочий, пишет просто на ходу стирая шины. Побольше чем я раза в 2-3. Но если нужно проверить, условно, есть ли айтем в корзине, то код будет примерно такой:И, сцукко, это попаболь. Он обойдет дерево на интервью, расскажет про кучу алгориитмов, про какие-нибудь серо-буро-зеленые деревья. А вот в продакшн будет срать вот это УГ.Code: Select all
boolean isItemInCart(Item item) { for (int i=0; i<cart.size(); i++) { if (cart.getItem(i).getId() == item.getId() { return true; } return false; } }
Как такое проверить на интервью? Я пока не знаю.
Но приведенный тобою пример это типичные ошибки молодняка и даже претендующих на сениоров.
Отловить их на код ревью практически не возможно.
Мой ответ это юниттесты. Да это не дает даже 90% защиты от дурака. Но хотябы вынуждает его думать хоть немного и самому ковырятся почему его код не работает.
Не без доли хвастовства хочу отметить что мои проекты довольно стабильны на продакшн, что даже отмечено руководством, но весь секрет в моих тест сценариях.
Я не жалею времени на создание под-задач и расписывание юниттест сценарии под них. И пока я не увижу что мои сценарии покрыты я даже не пытаюсь понять что происходит в алгоритме.
но я только рад, благодаря вот таким "специалистам" нанимают меня контролировать конвейер и как я считаю даже переплачивают по рынку.
Извините, но код который вы привели не говорит, что для хранения данных в корзине использовалось что либо наподобии хеш таблиц или любого рода упорядоченные списки. Я лично решил, что это обычный не упорядоченый список в котором лежат объекты. Кстати для хранения небольшого количества данных (несколько десятков) - а в обычной корзине покупателя их обычно бывает всего несколько штук, вряд ли имеет место использовать что либо другое. Так что обычный линейный перебор - оптимальное решение. ИМХО.
а ламбду лучше?АццкоМото wrote: ↑08 Oct 2018 21:07Ну, тут конфьюжн. То, что return false; не на месте - это мой факап, не того чувака. Еще раз: код он пишет вполне рабочий, багов производит не больше других.valchkou wrote: ↑08 Oct 2018 19:38Я не знаю что делать с 60 летним программистом который воспроизводит такие баги.АццкоМото wrote: ↑08 Oct 2018 15:10 Вообще КМК, возвращаясь к обходу деревьев, проблема совсем в другом. Знать структуры данных и базовые алгоритмы - недостаточно. Нужно их применять правильно и предсказуемо. Вот у нас есть чел старенький, думаю, лет 60. Он бодряк ого-го и код, вполне рабочий, пишет просто на ходу стирая шины. Побольше чем я раза в 2-3. Но если нужно проверить, условно, есть ли айтем в корзине, то код будет примерно такой:И, сцукко, это попаболь. Он обойдет дерево на интервью, расскажет про кучу алгориитмов, про какие-нибудь серо-буро-зеленые деревья. А вот в продакшн будет срать вот это УГ.Code: Select all
boolean isItemInCart(Item item) { for (int i=0; i<cart.size(); i++) { if (cart.getItem(i).getId() == item.getId() { return true; } return false; } }
Как такое проверить на интервью? Я пока не знаю.
Но приведенный тобою пример это типичные ошибки молодняка и даже претендующих на сениоров.
Отловить их на код ревью практически не возможно.
Мой ответ это юниттесты. Да это не дает даже 90% защиты от дурака. Но хотябы вынуждает его думать хоть немного и самому ковырятся почему его код не работает.
Не без доли хвастовства хочу отметить что мои проекты довольно стабильны на продакшн, что даже отмечено руководством, но весь секрет в моих тест сценариях.
Я не жалею времени на создание под-задач и расписывание юниттест сценарии под них. И пока я не увижу что мои сценарии покрыты я даже не пытаюсь понять что происходит в алгоритме.
но я только рад, благодаря вот таким "специалистам" нанимают меня контролировать конвейер и как я считаю даже переплачивают по рынку.
Речь шла про использование тупого перебора в цикле, ровно как делали при Иване Грозном
Вот поэтому он и пишет побольше чем ты раза в 2-3.АццкоМото wrote: ↑08 Oct 2018 15:10 Он бодряк ого-го и код, вполне рабочий, пишет просто на ходу стирая шины. Побольше чем я раза в 2-3. Но если нужно проверить, условно, есть ли айтем в корзине, то код будет примерно такой:Code: Select all
поскипано
alexan1 wrote: ↑08 Oct 2018 21:16а ламбду лучше?АццкоМото wrote: ↑08 Oct 2018 21:07Ну, тут конфьюжн. То, что return false; не на месте - это мой факап, не того чувака. Еще раз: код он пишет вполне рабочий, багов производит не больше других.valchkou wrote: ↑08 Oct 2018 19:38Я не знаю что делать с 60 летним программистом который воспроизводит такие баги.АццкоМото wrote: ↑08 Oct 2018 15:10 Вообще КМК, возвращаясь к обходу деревьев, проблема совсем в другом. Знать структуры данных и базовые алгоритмы - недостаточно. Нужно их применять правильно и предсказуемо. Вот у нас есть чел старенький, думаю, лет 60. Он бодряк ого-го и код, вполне рабочий, пишет просто на ходу стирая шины. Побольше чем я раза в 2-3. Но если нужно проверить, условно, есть ли айтем в корзине, то код будет примерно такой:И, сцукко, это попаболь. Он обойдет дерево на интервью, расскажет про кучу алгориитмов, про какие-нибудь серо-буро-зеленые деревья. А вот в продакшн будет срать вот это УГ.Code: Select all
boolean isItemInCart(Item item) { for (int i=0; i<cart.size(); i++) { if (cart.getItem(i).getId() == item.getId() { return true; } return false; } }
Как такое проверить на интервью? Я пока не знаю.
Но приведенный тобою пример это типичные ошибки молодняка и даже претендующих на сениоров.
Отловить их на код ревью практически не возможно.
Мой ответ это юниттесты. Да это не дает даже 90% защиты от дурака. Но хотябы вынуждает его думать хоть немного и самому ковырятся почему его код не работает.
Не без доли хвастовства хочу отметить что мои проекты довольно стабильны на продакшн, что даже отмечено руководством, но весь секрет в моих тест сценариях.
Я не жалею времени на создание под-задач и расписывание юниттест сценарии под них. И пока я не увижу что мои сценарии покрыты я даже не пытаюсь понять что происходит в алгоритме.
но я только рад, благодаря вот таким "специалистам" нанимают меня контролировать конвейер и как я считаю даже переплачивают по рынку.
Речь шла про использование тупого перебора в цикле, ровно как делали при Иване Грозном
хотелось бы увидеть правильны код
Code: Select all
boolean isItemInCart(Item item) {
return cart.getItems().contains(item);
}
п-ть не мешки ворочать, предложите ваше решениеМальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
а в чем проблема-то?Мальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Нахрена на форуме ворочать мешки - я сюда исключительно потрындеть прихожу.valchkou wrote: ↑08 Oct 2018 22:06п-ть не мешки ворочать, предложите ваше решениеМальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Ну когда одно говно превращается в точно такое же, но с вишенкой сверху то это явно проблемма дизайна структуры данных.АццкоМото wrote: ↑08 Oct 2018 23:06а в чем проблема-то?Мальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
Не знаю, о чем речь. Во первых, корзина может содержать много чего, кроме спейска товаров. Ну, допустим, айди магазина. Во-вторых, не понятно при чем тут сборщик мусора. getItems() же возвращает ссылку на коллекцию. Никакие новые абекты не создаются (ну, если, конечно, реализовывал не идиот)Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:14Ну когда одно говно превращается в точно такое же, но с вишенкой сверху то это явно проблемма дизайна структуры данных.АццкоМото wrote: ↑08 Oct 2018 23:06а в чем проблема-то?Мальчик-Одуванчик wrote: ↑08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
И на мой взгляд это явный косяк: чтобы узнать свойство обьекта преобразовывать его к обьекту другого типа.
В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
Что налагает более жесткие требования устойчивости к исключениям для методов корзины.
согласен что интереснее, но не согласен что не бином.
В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой одноразовой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.АццкоМото wrote: ↑08 Oct 2018 23:29В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
мы видим задачу по разному, в данном примере я предположил чтоМальчик-Одуванчик wrote: ↑08 Oct 2018 23:45В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.АццкоМото wrote: ↑08 Oct 2018 23:29В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик wrote: ↑08 Oct 2018 23:26Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото wrote: ↑08 Oct 2018 23:05Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: ↑08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.