55+ в ИТ

User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: 55+ в ИТ

Post by Мальчик-Одуванчик »

АццкоМото wrote: 08 Oct 2018 23:27 getItems() же возвращает ссылку на коллекцию.
Тут я честно не понял. Разве getItems() не создает эту саму коллекцию, то есть новую структуру данных, отличающуюся от cart?
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: 55+ в ИТ

Post by valchkou »

АццкоМото wrote: 08 Oct 2018 23:05 Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно.
согласен что интереснее, но не согласен что не бином.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: 55+ в ИТ

Post by Мальчик-Одуванчик »

АццкоМото wrote: 08 Oct 2018 23:29
Мальчик-Одуванчик wrote: 08 Oct 2018 23:26
АццкоМото wrote: 08 Oct 2018 23:05
valchkou wrote: 08 Oct 2018 21:24

Code: Select all

	
	boolean isItemInCart(Item item) {
	    return cart.getItems().contains(item);
	}
Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходит

Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.
В общем случае не вижу ничего предосудительного.
В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой одноразовой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.
В этом действительно нет ничего предосудительного, сборщик мусора и не такое стерпит.
User avatar
valchkou
Уже с Приветом
Posts: 4195
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: 55+ в ИТ

Post by valchkou »

Мальчик-Одуванчик wrote: 08 Oct 2018 23:45
АццкоМото wrote: 08 Oct 2018 23:29
Мальчик-Одуванчик wrote: 08 Oct 2018 23:26
АццкоМото wrote: 08 Oct 2018 23:05
valchkou wrote: 08 Oct 2018 21:24

Code: Select all

	
	boolean isItemInCart(Item item) {
	    return cart.getItems().contains(item);
	}
Ну вот да, хотя бы как-то так. Даже полученное с сервера в виде массива сохранить во что-то отличное от массива/ArrayList почему-то большинству в голову не приходит

Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов.
Ну да, а потом какой-нибудь умник ради одноразовой операции преобразует массив в неупорядоченную таблицу якобы для ускорения поиска.
В общем случае не вижу ничего предосудительного.
В случае если результат этого преобразования больше нигде не используется, то накладные расходы на создание новой структуры данных чаще всего окажутся больше тупого линейного поиска, что и будет типичным переливанием из пустого в порожнее.
мы видим задачу по разному, в данном примере я предположил что
cart.getItems() не создает никаких коллекций, а попросту возвращает референс на коллекцию спрятанную внутри объекта cart.
причем имплементация коллекции может быть как массивом так и hash based structure.
но нам по барабану потому как они все имплементируют метод contains().

с другой стороны такой подход не надежен, потому как можно подменить содержимое cart не используя никаких add or set методов.
или даже словить concurrent ex если допустить что один поток пишет а другой ищет
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: 55+ в ИТ

Post by Komissar »

народ, неужели сборщики мусора по-прежнему куются вручную?!
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: 55+ в ИТ

Post by Мальчик-Одуванчик »

valchkou wrote: 08 Oct 2018 23:54 мы видим задачу по разному, в данном примере я предположил что
cart.getItems() не создает никаких коллекций, а попросту возвращает референс на коллекцию спрятанную внутри объекта cart.
причем имплементация коллекции может быть как массивом так и hash based structure.
но нам по барабану потому как они все имплементируют метод contains().
Тогда предположим дальше что самописный метод getItem(i) не выкидывает исключений, что нельзя сказать про метод contains.
User avatar
Мальчик-Одуванчик
Уже с Приветом
Posts: 15526
Joined: 27 Sep 2007 22:53

Re: 55+ в ИТ

Post by Мальчик-Одуванчик »

Komissar wrote: 09 Oct 2018 00:18 народ, неужели сборщики мусора по-прежнему куются вручную?!
Да, так же как и аллокаторы для определенных типов данных. Не так давно на Хабре хороший пример на эту тему приводился.
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: 55+ в ИТ

Post by Komissar »

У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
User avatar
brrdrr
Уже с Приветом
Posts: 9563
Joined: 26 Mar 2011 23:02
Location: Russia -> Orlando, FL

Re: 55+ в ИТ

Post by brrdrr »

Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Откуда там null может появиться?
Стареет Комиссар. Комиссар уже не тот. :D
Пример с корзиной конечно некорректный, но смысл понятен, что плохо просто сканировать огромный массив.
Человек никогда не бывает так несчастен, как ему кажется, или так счастлив, как ему хочется. (Франсуа де Ларошфуко)
User avatar
major Major Major Major
Уже с Приветом
Posts: 1321
Joined: 10 Jan 2000 10:01
Location: Хьюстон

Re: 55+ в ИТ

Post by major Major Major Major »

У нас было бы примерно так :)

Code: Select all

private isItemInCart(item: Item): boolean  {
    return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

Мальчик-Одуванчик wrote: 08 Oct 2018 23:35
АццкоМото wrote: 08 Oct 2018 23:05 ИЧСХ даже тривиальное решение типа "а зачем считать при необходимости, можно же счетчик менять, когда добавляем/удаляем" тоже мало кто даст
Что налагает более жесткие требования устойчивости к исключениям для методов корзины.
Ведь так легко сделать данные несогласовынными если исключение вылетело между операцией изменения корзины и обновлением счетчика.
это верно. стало быть, нужно взвешивать риски, плюсы-минусы и все такое. ИМЕННО ЭТО есть то, за что платят инжинегру. а не за обход дерева
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

Мальчик-Одуванчик wrote: 08 Oct 2018 23:39
АццкоМото wrote: 08 Oct 2018 23:27 getItems() же возвращает ссылку на коллекцию.
Тут я честно не понял. Разве getItems() не создает эту саму коллекцию, то есть новую структуру данных, отличающуюся от cart?
та ни, все как valchkou понял: Cart имеет кучу полей, одно из них - спейсок CartItems. getter просто возвращает ссылку на этот спейсок
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

valchkou wrote: 08 Oct 2018 23:39
АццкоМото wrote: 08 Oct 2018 23:05 Хотя на самом деле куда интереснее, когда нужно, например, посчитать общую стоимость айтемов в карте в предположении, что их может быть чуть больше 100500 миллионов. Тоже вроде бы не бином ньютона, а мало кто напишет эффективно.
согласен что интереснее, но не согласен что не бином.
добавим сюда вполне ожидаемые требования по high availability, scalability, latency и задача сразу превращается в нетривиальный проект.
я бы сказал, что нетривиально будет все это делать с нуля и самому. но все колеса изобретены до нас и в буквально несколько строк это можно сделать с RxJava или другой подобной "реактивной" бляблятекой. но чтобы высрать эти несколько строк у Интерраптушки уйдет полчаса, у меня - день-два, а у некоторых не выйдет вовсе
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

major Major Major Major wrote: 09 Oct 2018 16:40 У нас было бы примерно так :)

Code: Select all

private isItemInCart(item: Item): boolean  {
    return this.cart.Items.Any(cartItem => cartItem.Id === item.Id);
}
Items это LINQ обертка над Item[], внутре у нее неонка которая в генерируемом javascript дергает find, fiter и проч.
Проверку аргументов на null в private методах обычно не делаем
Да, это ок, но по сути то же самое. Почему не рассмотреть HashSet<Item> или HashMap<Id, Item> ? Не всегда это лучшее решение, но очень часто
Мат на форуме запрещен, блдж!
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: 55+ в ИТ

Post by АццкоМото »

Komissar wrote: 09 Oct 2018 07:49 У мужика нормальный читаемый код, скорее всего для данной задачи можно обойтись перебором. Меня напрягло, чтотне взбрасывается exception, если в корзине обнаружен item which is null.
Проблема в том, что вы примерно схожего возраста. Поэтому для вас это норм код. Для меня - нет, хоть я себя и чувствую стариком. Приемлемый 30-летний погромист просто блеванет
Мат на форуме запрещен, блдж!

Return to “Работа и Карьера в IT”