Извините, но код который вы привели не говорит, что для хранения данных в корзине использовалось что либо наподобии хеш таблиц или любого рода упорядоченные списки. Я лично решил, что это обычный не упорядоченый список в котором лежат объекты. Кстати для хранения небольшого количества данных (несколько десятков) - а в обычной корзине покупателя их обычно бывает всего несколько штук, вряд ли имеет место использовать что либо другое. Так что обычный линейный перебор - оптимальное решение. ИМХО.АццкоМото wrote: 08 Oct 2018 21:04 ну там HashMap например. всякие RxJava делают то же самое куда элегантнее или там java streams. два последних подхода могут быть спорными, но тупой перебор да еще итакой многословный...
55+ в ИТ
-
- Уже с Приветом
- Posts: 10775
- Joined: 22 Jul 2006 20:19
Re: 55+ в ИТ
-
- Уже с Приветом
- Posts: 7723
- Joined: 29 Mar 2000 10:01
- Location: Kirkland,WA
-
- Новичок
- Posts: 67
- Joined: 11 Oct 2015 17:03
Re: 55+ в ИТ
а ламбду лучше?АццкоМото 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% защиты от дурака. Но хотябы вынуждает его думать хоть немного и самому ковырятся почему его код не работает.
Не без доли хвастовства хочу отметить что мои проекты довольно стабильны на продакшн, что даже отмечено руководством, но весь секрет в моих тест сценариях.
Я не жалею времени на создание под-задач и расписывание юниттест сценарии под них. И пока я не увижу что мои сценарии покрыты я даже не пытаюсь понять что происходит в алгоритме.
но я только рад, благодаря вот таким "специалистам" нанимают меня контролировать конвейер и как я считаю даже переплачивают по рынку.
Речь шла про использование тупого перебора в цикле, ровно как делали при Иване Грозном
хотелось бы увидеть правильны код
-
- Уже с Приветом
- Posts: 315
- Joined: 24 May 2013 22:04
Re: 55+ в ИТ
Вот поэтому он и пишет побольше чем ты раза в 2-3.АццкоМото wrote: 08 Oct 2018 15:10 Он бодряк ого-го и код, вполне рабочий, пишет просто на ходу стирая шины. Побольше чем я раза в 2-3. Но если нужно проверить, условно, есть ли айтем в корзине, то код будет примерно такой:Code: Select all
поскипано
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
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);
}
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
-
- Уже с Приветом
- Posts: 4195
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: 55+ в ИТ
п-ть не мешки ворочать, предложите ваше решениеМальчик-Одуванчик wrote: 08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходитvalchkou wrote: 08 Oct 2018 21:24Code: Select all
boolean isItemInCart(Item item) { return cart.getItems().contains(item); }
Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно. ИЧСХ даже тривиальное решение типа "а зачем считать при необходимости, можно же счетчик менять, когда добавляем/удаляем" тоже мало кто даст
И это очень грустно
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
а в чем проблема-то?Мальчик-Одуванчик wrote: 08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Нахрена на форуме ворочать мешки - я сюда исключительно потрындеть прихожу.valchkou wrote: 08 Oct 2018 22:06п-ть не мешки ворочать, предложите ваше решениеМальчик-Одуванчик wrote: 08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
Если cart - контейнер, то воспользовался алгоритмом find, определив оператор равенства для item, если нет - то задал бы для него итераторы.
Если совсем лень - то тупо заменил простой цикл на его range-base форму типа: for(auto item_ : cart) ....
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Ну когда одно говно превращается в точно такое же, но с вишенкой сверху то это явно проблемма дизайна структуры данных.АццкоМото wrote: 08 Oct 2018 23:06а в чем проблема-то?Мальчик-Одуванчик wrote: 08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
И на мой взгляд это явный косяк: чтобы узнать свойство обьекта преобразовывать его к обьекту другого типа.
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.АццкоМото 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 миллионов.
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
Не знаю, о чем речь. Во первых, корзина может содержать много чего, кроме спейска товаров. Ну, допустим, айди магазина. Во-вторых, не понятно при чем тут сборщик мусора. getItems() же возвращает ссылку на коллекцию. Никакие новые абекты не создаются (ну, если, конечно, реализовывал не идиот)Мальчик-Одуванчик wrote: 08 Oct 2018 23:14Ну когда одно говно превращается в точно такое же, но с вишенкой сверху то это явно проблемма дизайна структуры данных.АццкоМото wrote: 08 Oct 2018 23:06а в чем проблема-то?Мальчик-Одуванчик wrote: 08 Oct 2018 21:48 cart.getItems() - переливаем из пустого в порожнее?
Сборщик мусора все стерпит.
И на мой взгляд это явный косяк: чтобы узнать свойство обьекта преобразовывать его к обьекту другого типа.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15276
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: 55+ в ИТ
В общем случае не вижу ничего предосудительного.Мальчик-Одуванчик 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 миллионов.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15526
- Joined: 27 Sep 2007 22:53
Re: 55+ в ИТ
Что налагает более жесткие требования устойчивости к исключениям для методов корзины.АццкоМото wrote: 08 Oct 2018 23:05 ИЧСХ даже тривиальное решение типа "а зачем считать при необходимости, можно же счетчик менять, когда добавляем/удаляем" тоже мало кто даст
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.