Как стать автором
Обновить
67
0
Антон Виноградов @randoom

Java developer

Отправить сообщение

Переизобретаем сжатие в распределенной базе данных

Время на прочтение 4 мин
Количество просмотров 2.4K

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

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

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 1

Попробуй пройди за 4 часа тестовое задание в канадскую компанию

Время на прочтение 18 мин
Количество просмотров 36K

Поделюсь своим свежим опытом непрохождения интервью в канадскую компанию, может кому поможет пройти отбор и получить работу. Либо же узнать что творится с рынком труда с точки зрения разработчика в реальном мире.

Читать далее
Всего голосов 37: ↑28 и ↓9 +19
Комментарии 72

Консистентность и ACID-гарантии в распределенных системах хранения данных

Время на прочтение 8 мин
Количество просмотров 26K
Распределенные системы используют, когда возникает необходимость в горизонтальном масштабировании, чтобы обеспечить повышенные показатели производительности, которые не способна обеспечить за адекватные деньги вертикально масштабированная система.

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

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

Мы, как компания, которая «собаку сьела» в разработке систем такого рода, помогаем нашим клиентам взвешенно принимать такие решения применительно к распределенным системам хранения. Также мы выпускаем серию вебинаров для более широкой аудитории, которые посвящены базовым принципам, рассказанным простым языком, и безотносительно каких-то конкретных продуктовых предпочтений помогают составить карту значимых характеристик, чтобы облегчить выбор.

Эта статья основана на наших материалах по консистентности и ACID-гарантиям в распределенных системах.
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 0

Поработать в Швеции

Время на прочтение 8 мин
Количество просмотров 82K

Несколько лет назад я внезапно получил звонок от рекрутера с предложением поработать в Швеции в “хорошо финансируемом стартапе” (забавно, что моё резюме он нашёл на Odesk, где у меня давно был профиль, но ни одного завершённого проекта). Надо вам сказать, что в этой стране мне уже приходилось работать ранее, правда, находясь в затяжной командировке, как работник российской компании, потому неплохое представление о жизни в Швеции у меня уже было. С тех пор я обзавёлся детьми, и потому многие реалии шведской жизни мне предстояло открывать для себя впервые.

Читать дальше →
Всего голосов 115: ↑113 и ↓2 +111
Комментарии 247

Структуры данных в картинках. LinkedList

Время на прочтение 4 мин
Количество просмотров 541K
Приветствую вас, хабражители!

Продолжаю начатое, а именно, пытаюсь рассказать (с применением визуальных образов) о том как реализованы некоторые структуры данных в Java.



В прошлый раз мы говорили об ArrayList, сегодня присматриваемся к LinkedList.

LinkedList — реализует интерфейс List. Является представителем двунаправленного списка, где каждый элемент структуры содержит указатели на предыдущий и следующий элементы. Итератор поддерживает обход в обе стороны. Реализует методы получения, удаления и вставки в начало, середину и конец списка. Позволяет добавлять любые элементы в том числе и null.

Прочитать чуть больше
Всего голосов 50: ↑46 и ↓4 +42
Комментарии 22

Структуры данных в картинках. ArrayList

Время на прочтение 3 мин
Количество просмотров 870K
Приветствую вас, хабралюди!

Взбрело мне в голову написать несколько статей, о том как реализованы некоторые структуры данных в Java. Надеюсь, статьи будут полезны визуалам (картинки наше всё), начинающим java-визуалам а также тем кто уже умеет писать new ArrayList(), но слабо представляет что же происходит внутри.



Сегодня поговорим о ArrayList-ах

ArrayList — реализует интерфейс List. Как известно, в Java массивы имеют фиксированную длину, и после того как массив создан, он не может расти или уменьшаться. ArrayList может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

Поверить на слово
Всего голосов 89: ↑82 и ↓7 +75
Комментарии 66

Знай сложности алгоритмов

Время на прочтение 2 мин
Количество просмотров 982K
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Всего голосов 312: ↑296 и ↓16 +280
Комментарии 99

Справочник по синхронизаторам java.util.concurrent.*

Время на прочтение 14 мин
Количество просмотров 266K
Целью данной публикации не является полный анализ синхронизаторов из пакета java.util.concurrent. Пишу её, прежде всего, как справочник, который облегчит вхождение в тему и покажет возможности практического применения классов для синхронизации потоков (далее поток = thread).

В java.util.concurrent много различных классов, которые по функционалу можно поделить на группы: Concurrent Collections, Executors, Atomics и т.д. Одной из этих групп будет Synchronizers (синхронизаторы).



Синхронизаторы – вспомогательные утилиты для синхронизации потоков, которые дают возможность разработчику регулировать и/или ограничивать работу потоков и предоставляют более высокий уровень абстракции, чем основные примитивы языка (мониторы).
Читать дальше
Всего голосов 45: ↑41 и ↓4 +37
Комментарии 15

Дюк, вынеси мусор! — 1. Введение

Время на прочтение 13 мин
Количество просмотров 209K


Наверняка вы уже читали не один обзор механизмов сборки мусора в Java и настройка таких опций, как Xmx и Xms, превратилась для вас в обычную рутину. Но действительно ли вы в деталях понимаете, что происходит под капотом вашей виртуальной машины в тот момент, когда приходит время избавиться от ненужных объектов в памяти и ваш идеально оптимизированный метод начинает выполняться в несколько раз дольше положенного? И знаете ли вы, какие возможности предоставляют вам последние версии Java для оптимизации ответственной работы по сборке мусора, зачастую сильно влияющей на производительность вашего приложения?

Попробуем в нескольких статьях пройти путь от описания базовых идей, лежащих в основе всех сборщиков мусора, до разбора алгоритмов работы и возможностей тонкой настройки различных сборщиков Java HotSpot VM (вы ведь знаете, что таких сборщиков четыре?). И самое главное, рассмотрим, каким образом эти знания можно использовать на практике.
Узнать
Всего голосов 36: ↑36 и ↓0 +36
Комментарии 7

К чему можно оказаться не готовым, став тим-лидом

Время на прочтение 8 мин
Количество просмотров 60K
imageОдин технический специалист нашей компании PayOnline, которая занимается автоматизацией приема платежей, предложил перевести статью автора Pascal de Vink, который проработал тим-лидом уже 2 года. Когда Pascal только занял эту должность, оказалось, что ко многим вещам он был просто не готов. Эта статья поможет избежать многих ошибок на пути от разработчика к лидеру команды. Ниже идет непосредственно перевод.

До этого я был инженером и занимался непосредственно кодом. Мне говорили, что у меня хорошие лидерские качества, наверно, поэтому я и попросил о повышении. Я даже не задумывался, что значит управлять целой командой инженеров. Сейчас думаю, вот бы тогда у меня было побольше времени на подготовку. Итак, без лишних слов, вот вещи, к которым я оказался не готов.

Меньше заниматься разработкой


Может, это и очевидно, но роль ведущего разработчика означает, что надо больше смотреть на общую картину, чем углубляться в конкретные аспекты того, что происходит. Я этого не понимал, пока не проработал пару месяцев, в течение которых мучился от того, что хотел разобраться во всех задачах, а времени на это не было. У меня было все меньше времени копаться в коде, а люди продолжали обращаться ко мне со своими очень узкоспециализированными задачами. Слишком поздно я понял, что надо разбираться в команде, а не во всех ее знаниях. Узнать, кто разбирается в нужной области оказалось намного быстрее и ценнее. Хотя, копаться в коде было намного веселее.
Читать дальше →
Всего голосов 74: ↑71 и ↓3 +68
Комментарии 27

Шпаргалка Java программиста 1: JPA и Hibernate в вопросах и ответах

Время на прочтение 36 мин
Количество просмотров 564K
image

Знаете ли вы JPA? А Hibernate? А если проверить?

В чем смысл серии статей 'Шпаргалки Java программиста'
За время работы Java программистом я заметил, что как правило программисты постоянно и планомерно используют от силы 10-20% от возможностей той или иной технологии, при этом остальные возможности быстро забываются и при появлении новых требований, переходе на новую работу или подготовке к техническому интервью приходится перечитывать все документации и спецификации с нуля. Зато наличие краткого конспекта особенностей тех или иных технологий (шпаргалок) позволяет быстро освежить в памяти особенности той или иной технологии.




Данная статья будет полезна и для тех кто только собирается изучать JPA и Hibernate (В этом случае рекомендую сразу открывать ответы), и для тех кто уже хорошо знает JPA и Hibernate (В этом случае статья позволит проверить свои знания и освежить особенности технологий). Особенно статья будет полезна тем кто собирается пройти техническое интервью, где возможно будут задавать вопросы по JPA и Hibernate (или сам собирается провести техническое интервью).

Поехали...
Всего голосов 37: ↑32 и ↓5 +27
Комментарии 16

Топ-10 data mining-алгоритмов простым языком

Время на прочтение 24 мин
Количество просмотров 127K


Примечание переводчика: Мы довольно часто пишем об алгоритмической торговле (вот, например, список литературы по этой теме и соответствующие аналитические материалы) и API для создания торговых роботов, сегодня же речь пойдет непосредственно об алгоритмах, которые можно использовать для анализа различных данных (в том числе на финансовом рынке). Материал является адаптированным переводом статьи американского раработчика и аналитика Рэя Ли.

Сегодня я постараюсь объяснить простыми словами принципы работы 10 самых эффективных data mining-алгоритмов, которые описаны в этом докладе.

Когда вы узнаете, что они собой представляют, как работают, что делают и где применяются, я надеюсь, что вы используете эту статью в качестве отправной точки для дальнейшего изучения принципов data mining.
Читать дальше →
Всего голосов 55: ↑49 и ↓6 +43
Комментарии 6

JDK concurrent package

Время на прочтение 7 мин
Количество просмотров 43K
Модель памяти, существующая на данный момент в Java, гарантирует ожидаемый порядок выполнения многопоточного кода, при отсутствии в этом коде гонок потоков. И для того, чтобы обезопасить ваш код от гонок, придуманы различные способы синхронизации и обмена данными между ними.

Пакет java.util.concurrent, входящий в состав HotSpot JDK, предоставляет следующие инструменты для написания многопоточного кода:
  • Atomic
  • Locks
  • Collections
  • Synchronization points
  • Executors
  • Accumulators _jdk 1.8_

Читать дальше →
Всего голосов 22: ↑15 и ↓7 +8
Комментарии 5

Структуры данных: двоичная куча (binary heap)

Время на прочтение 4 мин
Количество просмотров 229K
Двоичная куча (binary heap) – просто реализуемая структура данных, позволяющая быстро (за логарифмическое время) добавлять элементы и извлекать элемент с максимальным приоритетом (например, максимальный по значению).

Для дальнейшего чтения необходимо иметь представление о деревьях, а также желательно знать об оценке сложности алгоритмов. Алгоритмы в этой статье будут сопровождаться кодом на C#.

Введение


Двоичная куча представляет собой полное бинарное дерево, для которого выполняется основное свойство кучи: приоритет каждой вершины больше приоритетов её потомков. В простейшем случае приоритет каждой вершины можно считать равным её значению. В таком случае структура называется max-heap, поскольку корень поддерева является максимумом из значений элементов поддерева. В этой статье для простоты используется именно такое представление. Напомню также, что дерево называется полным бинарным, если у каждой вершины есть не более двух потомков, а заполнение уровней вершин идет сверху вниз (в пределах одного уровня – слева направо).



Читать дальше →
Всего голосов 72: ↑58 и ↓14 +44
Комментарии 58

Доставка из США за 5-10 дней по цене USPS

Время на прочтение 4 мин
Количество просмотров 161K
До наступления 2013 года оставалось 30 дней, когда я решил подарить жене ipad mini. Официальный store.apple.com не справлялся со спросом на mini, о чем красноречиво свидетельствовала надпись est shipping in 2 weeks.

Отказываться от mini в качестве подарка не было никакого желания, поэтому был штурмом взят ebay, цены на котором заметно подросли, и 16gb+cellurar модель ушла за $500.

До наступления 2013 года оставалось 15 дней, у меня был выигранный лот и туманная перспектива получить его в Спб до 31 числа…
И я ее получил, за 10 дней, тариф за отправку составил $48.5.
Читать дальше...
Всего голосов 150: ↑138 и ↓12 +126
Комментарии 160

Граф отношений пользователей Google+. Gephi

Время на прочтение 5 мин
Количество просмотров 10K
После прочтения статьи Gephi как средство визуализации данных я оказался под сильным впечатление от программы Gephi. На тот момент я занимался генерацией логов активности пользователей в Google+. И меня посетила идея, а может быть сделать граф отношении между участниками соц. сети Google+. После нескольких часов поисков пришел к выводу, что подобных вещей еще не сделано для Gephi. Даже в wiki gephi алгоритма формирования графа для Google+ не предложено. И на волне вдохновения быстренько дописал в приложении LoggenCSG модуль выгрузки лога в файл бд sqlite, который умеет импортировать Gephi. Результаты импорта графа в Gephi мне очень понравились.
Косвенные отношения между пользователями через их активности.
Косвенные отношения между пользователями через их активности.

Прямые связи между пользователями через их активности.
Прямые отношения между пользователями через их активности.
Дальше пойдет описание того как самостоятельно построить подобные графы.
Читать дальше →
Всего голосов 52: ↑44 и ↓8 +36
Комментарии 18

Ричард Фейнман. Характер физических законов. Лекция 1

Время на прочтение 1 мин
Количество просмотров 8.5K
Мой хороший друг по собственной инициативе решил сделать перевод популярных лекций известного физика-теоретика, лауреата Нобелевской премии Ричарда Фейнмана, прочитанных им в Корнельском университете в 1964 году.

В настоящий момент предварительно готова одна лекция, которую я с удовольствием представляю Вашему вниманию. Уже готов вариант с субтитрами, по мере готовности версии с озвучкой обновлю пост.

Итак, «Характер физических законов», лекция первая.

http://vimeo.com/14174734

Те, кто интересуется, кто же такой Ричард Фейнман и почему его лекции настолько интересны, для начала могут ознакомиться со статьей в Wiki.
Читать дальше →
Всего голосов 105: ↑100 и ↓5 +95
Комментарии 44

Серьезный разговор о рулях

Время на прочтение 9 мин
Количество просмотров 89K
Если хоть раз, играя на компьютере в гонки, у вас мелькала мысль о покупке руля, то эта статья для вас.

image

Все, что вы хотели знать, но боялись спрость ) Доступным языком, подробно и наглядно. Трафик.
Читать дальше →
Всего голосов 291: ↑274 и ↓17 +257
Комментарии 164

С чего начать разработку плагина для JIRA?

Время на прочтение 4 мин
Количество просмотров 3.5K
Используя мощный, настраиваемый баг/таск-трекер JIRA (или Confluence), со временем приходит понимание, что в некоторых случаях не хватает нужного функционала, которого нельзя получить из стандартных и представленных на сайте плагинов. Всвязи с этим приходиться выходит на новый уровень: собственная разработка. Когда это такое время приходит, встают вопросы: с чего начинать? В JIRA и Confluence куча зависимостей между библиотеками, как их связать воедино, что бы создать нужное? Где это все сделать?
В данной статье не будет рассказано как сделать плагин, потому что для каждого варианта требуется разные подходы. Расскажу только как подготовить платфотму для разработки.
Читать дальше
Всего голосов 2: ↑2 и ↓0 +2
Комментарии 4

Паттерны проектирования для человеков.

Время на прочтение 4 мин
Количество просмотров 29K
Была задача в максимально короткие сроки (зачет нужно было сдавать) человеку далекому от программирования объяснить паттерны на самом простом уровне.
В результате баланса простоты изъяснения и адекватности, образовалась эта шпаргалка.
Просьба оценить эту самую адекватность и простоту.
Читать дальше →
Всего голосов 36: ↑28 и ↓8 +20
Комментарии 23

Информация

В рейтинге
Не участвует
Откуда
Россия
Работает в
Зарегистрирован
Активность