В таком узком варианте - наверное нет. Просто функция всегда лучше когда она имеет аргументы и результат. Ее можно тестировать по другому. В данном случае тест вроде property based.
swap(swap(a,b)) = pair(a,b)
Ее можно использовать в рекурсии (обработка деревьев).
Василий Васильков, ну обычно любой бинарник (артифакт) имеет рукотворную природу. Человек его создал. Упаковал в пакет для дистрибуции в Windows/Linux репозитариях. Подписал своими подписями. И положил в правильное место где все могут загрузить и проверить сертификаты на достоверность. После этого бинарь попадает в антивирусные базы. Проверяется и получает хеши где написано что бинарь чистый. И ему можно доверять.
Вот. А если вы создали технологию которая позволяет 100500 раз в сутки фабриковать бинарники. То надо подумать как эту технологию защитить от хакерских атак. Ведь не очень сложно подать ей на вход скрипт который будет собран и выполнен на доверенном сервере. С браузерами вот - такая же история. Их пристально изучают с каждой новой версией и злоумышленники и безопасники. И смысл этого изучения - просто предотвратить запуск бинарника любой ценой. Вот. Как только кто-то получит возможность исполнять произвольные бинарники в браузере - все! Капец вашим деньгам! Скопируют все из Моих Документов а остаток диска зашифруют. Вобщем веселые праздники после нового года будут обеспечены.
Но это я так. Ворчу. Вобщем если скажите что предусмотрели защиту - то хорошо.
У меня - дежа-вю или мне кажется что этот вопрос уже возникал где-то в хабре.
И вообще хороший художник - должен быть голодным.
Хороший разработчик софта под нагрузкой - должен ее разрабатывать для слабых конфигураций.
Вот такая у меня консервативная и хозяйственная позиция по этому вопросу. И это я не то чтобы прикинулся старым олдом и пришел учить молодых. Я и сам к себе такое же требование ставлю.
Dr. Bacon, это очень странный trafe-off. Вы где-то сэкономили на user-sessions но проиграли в execution plan.
Вобщем я согласен с вами что веб-разработка имеет свою специфику но я считаю что этот вопрос глубого не исследован. Мне как базовику и как человеку который очнень любит и ценит SQL/DBMS очень не хотелось бы использовать подход основанный на многократном execution сортированного курсора особенно тогда, когда этого можно было бы избежать.
Я категорически против советов читать Кнута. Это чтиво - специфическое. И чтобы его читать надо тоже иметь некую подготовку. Или может быть если автор - математик то тогда Кнут ему покажется более понятным. С моей точки зрения Кнут перегружает читателя ненужными вещами которые конечно развивают фантазию но могут не понадобиться аж никогда. Чего стоит только его виртуальный процессор MMIX в котором в качестве дисковых устройств есть (!) накопители на магнитной ленте. Офигеть актуально. Но это так. Шутки ради я сказал. А если без шуток то все исходники в книге господин Кнут пишет ни на Modula ни на Object Pascal и даже не на Блок-схемах а именно на кодах для виртуального процессора MMIX. Вот такие дела. Да. В реальной жизни никакого MMIX не существует понятное дело.
Вообще для быстрого и эффективного вхождения в Алгоритмы и Структуры Данных (АСД) я-бы предложил Вирта и Седжвика.
Кнута - можете читать. Ближе к пенсии. Или на пенсии. Возле камина. Теплыми вечерами.
Jacen11, да. Вся литература по хеш-таблицам оперирует именно таким определением O(1) для хеш-таблиц. Ситуация промаха мимо ключа которую вы описываете - достаточно редкая. И я не просто так говорил о Java-реализации HashMap. В дефолтном конструкторе (99% которого используется) таблица создается с коэффициентом заполнения 0.75. А при такой пропорции ключей и бакетов вероятность коллизии очень мала. Поэтому вашу формулу O(1) или O(n) здесь нужно применять с сильной поправкой на теор-вер. А теор-вер там уже во много раз сложнее и проще его не вычислять а доказывать практически. Тоесть просто симуляцией работы хеш-таблицы.
Разумеется мои рассуждения адресованы Вам а не автору. Ему это можно пропустить т.к. обычно на собеседовании когда говорят о O(n) не копают каждую структуру данных. Нет времени на это.
Ну а вы - изучайте для себя структуры данных Java. Это полезно.
Кажется курсор в Postgres поддерживает опцию SCROLL. Тоесть можно делать перемотку вперед и назад.
В этом случае вам не нужно на каждый page down делать еще один запрос. Просто продолжаете
перемотку следующих 10 записей.
v_k, кассандра скорее всего не подходит. Она в основном расчитана на In-Memory Cluster. Дорого и безсмысленно. Будете платить за uptime.
Хотя ее младший брат AWS-Dynamo может стоит рассмотреть. Будет дешевле с точки зрения хранения информации. Кажется там платить надо за фактически вычитанные строки. А за само хранение и за uptime
я не помню. Может и что-то начисляется но мало.
markinaras, ты пишешь на Go? Вот и напиши себе (или найди готовый) пул сокетов в котором количество
заранее ограничено.
Подозреваю что речь идет о парсинге сайтов. Так в этой предметной области - огромное количество уже
готовых решений. Тогда сразу не сокетов а HttpConnections. Вот. И запускай хоть мильон своих Go-потоков
а они пускай уже дерутся за эти 1000 коннектов по очереди.
linuxstation, я думаю что смена среды разработки не должна крашить сборку проекта. Сегодня этот трюк прокатил но в следующий раз тебе надо глубже разобраться в причинах того что не работало.
А можешь объяснить что именно и кто блокирует. Потому что для интернет-провайдера количество открытых
сокетов - безразлично. А вот для того сервера (хоста) куда ты пошел - может быть лимиты есть. Но может быть парсинг netstat это не то что тебе надо.
v_k, мне кажется что мы "не с той стороны" начали.
Вот смотри. Ты делаешь акцент на загрузке триллиона records за 10 дней.
А зачем тебе их все вообще грузить? В каком виде они лежат сейчас?
Если это - CSV файлы - то их можно так и положить на какую-нибудь
hdfs-like файловую систему и работать как с большими данными.
AWS athena может работать с ними сразу через SQL никуда даже не
преобразовывая. Spark умеет CSV в датафреймы преобразовывать.
А для скорости надо просто сделать партишенинг хешу от ключа.
А для быстрого ответа построить поврх этой системы Redis. Таким образом
горячие ключи быстро поднимутся в кеш а холодные.... а нафик они нужны.
Вобщем есть миллиард способов как решать эту задачу.
Надо почитать с какой целью Sony ввела этот новый стандарт. Скорее всего тут цель - устранение неких дефектов Bluetooth. Но если говорить о качестве - то скорее всего вопрос будет и да и нет. Потому что в описании речь идет о целой матрице режимов звука и кодеков. Тоесть какой кодек и битрейт будет выбран - то и будет качество. Но скорее всего цель - либерализация софта. Тоже самое что и происходило вокруг mp3 и почему появился ogg (vorbis). Та-же мотивация.
swap(swap(a,b)) = pair(a,b)
Ее можно использовать в рекурсии (обработка деревьев).