• Разбираемся с hashCode() и equals()


    Я недавно начал заниматься программированием, и в этой области для меня много нового. Данная статья рассчитана на начинающих java-программистов, и, надеюсь, поможет в освоении излюбленной темы для собеседований “hashCode и equals”.
    Хочу сразу предостеречь, что я не являюсь экспертом в данной теме и могу что-то не так понимать, поэтому, если вы нашли ошибку или неточность — свяжитесь со мной.
    Читать дальше →
  • Пишите компараторы правильно

      В Java для введения порядка среди определённых объектов можно написать компаратор — класс, содержащий функцию compare, которая сравнивает два объекта. Альтернативой компаратору является естественный порядок объектов: объект реализует интерфейс Comparable, который содержит метод compareTo, позволяющий сравнить этот объект с другим. Сравнивающая функция должна вернуть 0, если объекты равны, отрицательное число (обычно -1), если первый объект меньше второго, и положительное число (обычно 1), если первый больше. Обычно реализация такой функции не представляет сложностей, но имеется один случай, о котором многие забывают.

      Сравнение используется различными алгоритмами от сортировки и двоичного поиска до поддержания порядка в сортированных коллекциях вроде TreeMap. Эти алгоритмы завязаны на три важных свойства сравнивающей функции: рефлексивность (сравнение элемента с самим собой всегда даёт 0), антисимметричность (сравнение A с B и B с A должны дать разный знак) и транзитивность (если сравнение A с B и B с C выдаёт одинаковый знак, то и сравнение A с C должно выдать такой же). Если сравнивающая функция не удовлетворяет этим свойствам, алгоритм может выдать совершенно непредсказуемый результат. Причём скорее всего вы не получите никакого исключения, просто результат будет неверный.

      Как обнаружилось, несоблюдение этих свойств — не такая уж редкая ситуация. Проблема возникает при сравнении вещественных чисел — float или double.
      Читать дальше →
    • Обработка строк в Java. Часть II: Pattern, Matcher

      • Tutorial

      Вступление


      Что Вы знаете о обработке строк в Java? Как много этих знаний и насколько они углублены и актуальны? Давайте попробуем вместе со мной разобрать все вопросы, связанные с этой важной, фундаментальной и часто используемой частью языка. Наш маленький гайд будет разбит на две публикации:

      1. String, StringBuffer, StringBuilder (реализация строк)
      2. Pattern, Matcher (регулярные выражения)

      Сегодня поговорим о регулярных выражениях в Java, рассмотрим их механизм и подход к обработке. Также рассмотрим функциональные возможности пакета java.util.regex.
      Читать дальше →
      • +10
      • 186k
      • 8
    • Как обойти блокировки сайтов, не направляя весь трафик через VPN

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

      На Хабре, да и не только на нем, есть множество инструкций, как обойти блокировки с помощью VPN, в частности, с помощью OpenVPN, есть и прекрасные пошаговые консольные скрипты установки OpenVPN. Однако чаше всего подобные инструкции подразумевают, что в результате весь интернет-трафик будет идти через VPN-соединение, что может быть неудобным по ряду причин. И в этом коротком посте я хотел рассказать, как настроить OpenVPN Access Server и обычный OpenVPN для обслуживания только заблокированных ресурсов.
      Читать дальше →
    • Создаём развивающее приложение при помощи Android Studio

      Введение


      Добрый день, господа! Я ученик 11 класса и разработкой занимаюсь только от того, что не хочу готовиться к ЕГЭ. Идею приложения можно описать тремя словами — увидел, запомнил, повторил. Перед игроком появляется квадратное поле с определённым число закрашенных элементов. Через некоторое время поле очищается. Надо выбрать какие элементы были закрашены. По мере прохождения уровней игры поле становится всё больше и запоминать приходится больше.
      Читать дальше →
    • Обзор java.util.concurrent.*

      • Tutorial
      В повседневной работе не так уж часто приходится сталкиваться с пакетом для многопоточности java.util.concurrent. Иногда существуют проектные ограничения по использованию java 1.4.2, где нет данного пакета, но чаще всего хватает обычной синхронизации и не требуется ничего сверхъестественного. К счастью, периодически возникают задачи, заставляющие немного пораскинуть мозгами и либо написать велосипед, либо порыться в javadoc'ах и найти что-то более подходящее. С велосипедом проблем нет — просто берешь и пишешь, благо ничего суперсложного в многопоточности нет. С другой стороны, меньше кода — меньше багов. Тем более, что на многопоточность никто в здравом уме юнит тестов не пишет, т.к. это уже полноценные интеграционные тесты получаются со всеми вытекающими последствиями.

      Что выбрать для конкретного случая? В условиях запарки и deadline'ов довольно сложно охватить весь java.util.concurrent. Выбирается что то похожее и вперед! Так, постепенно, в коде появляются ArrayBlockingQueue, ConcurrentHashMap, AtomicInteger, Collections.synchronizedList(new LinkedList()) и другие интересности. Иногда правильно, иногда нет. В какой то момент времени начинаешь осознавать, что более 95% стандартных классов в java вообще не используются при разработке продукта. Коллекции, примитивы, перекладывание байтиков с одного места на другое, hibernate, spring или EJB, еще какая то библиотека и, вуаля, приложение готово.

      Чтобы хоть как то упорядочить знания и облегчить вхождение в тему, ниже идет обзор классов для работы с многопоточностью. Пишу прежде всего как шпаргалку для себя. А если еще кому сгодится — вообще замечательно.
      Читать дальше →
    • Android Tips and Tricks

        В данном материале можно будет увидеть различные инструменты и подсказки, которые здорово облегчают жизнь Android разработчикам. Большая часть собрана напрямую от знакомых разработчиков и содержит вещи, которые должен знать каждый. Дополнения и расширения приветствуются, и если вы знаете о каком-то крутом механизме, который не был упомянут в статье, не поленитесь перейти в оригинал и открыть pull request.
        Читать дальше →
      • Разработка виджета под Android для отображения курса bitcoin

        • Tutorial
        Привет, хаброчитатели! Предыстория: с недавних пор отслеживаю рост курса криптовалюты bitcoin(BTC). Раньше для просмотра котировок заглядывал на сайт какой-нибудь биржи, но гораздо удобнее иметь на рабочем экране смартфона небольшой виджет, который отобразит актуальную информацию.

        На маркетах представлена куча разнообразных виджетов, показывающих курсы криптовалют. Но гораздо интереснее создать что-то свое. В этой статье я кратко опишу свой опыт создания виджета для гаджета под управлением ОС Android.
        Читать дальше →
      • Вызов методов через reflection

          Все программисты на Java явно или неявно пользуются reflection для вызова методов. Даже если вы не делали этого сами, это за вас наверняка делают библиотеки или фреймворки, которые вы используете. Давайте посмотрим, как этот вызов устроен внутри и насколько это быстро. Будем глядеть в OpenJDK 8 с последними обновлениями.

          Читать дальше →
        • Видео с летней школы по маркетингу софтверных продуктов в JetBrains

            Многие из вас уже знают о недавней летней школе по маркетингу софтверных продуктов, проведенной компанией JetBrains в Санкт-Петербурге с 28 июля по 5 августа. Это был для нас эксперимент, поэтому изначально мы не были уверены в том, что получится записать и опубликовать видео (как технически, так и идейно — было непонятно, насколько формат будет подходить для видео). Уже в ходе школы стало понятно, что записи этих уютных летних встреч принесут много полезных знаний тем, у кого не получилось поучаствовать лично, поэтому мы рады опубликовать видеозаписи.



            В этом посте мы публикуем видеозаписи встреч летней школы, а также рассказываем о том, что там происходило. Кроме того, советуем пост от paullarionov, написанный вскоре после завершения школы и содержащий впечатления о проекте со стороны участника, а также ссылки на все презентации и домашние задания.
            Читать дальше →
            • +12
            • 7,1k
            • 5
          • Ликбез по типизации в языках программирования

            image

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

            В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
            Читать дальше →
          • Релиз KPHP и движков

              Довольно часто, выступая на различных конференциях, мы делились желанием выпустить под открытой лицензией KittenPHP, согласно традиции, заложенной крупными IT-компаниями, такими как Google и Facebook.

              Это событие несколько раз откладывалось в связи с опасением, что нам не хватит сил и времени на взаимодействие с opensource-сообществом, однако в конце концов заветный день настал, и код KPHP и некоторых других инструментов, используемых внутри проекта, был выложен в открытый доступ.

              В связи с этим под катом вас ждет более подробный рассказ о внутреннем устройстве ВКонтакте и тех инструментах, которые сегодня стали доступны opensource-сообществу.


              Читать дальше →
            • Как собрать простейшую Java программу с помощью Maven

              • Tutorial

              Статья написана для тех, кто умеет писать простейшие программы на java, но не умеет их собирать. Этим людям уже известно, что такое классы, что такое пакеты и зачем нужен public static main(String[] argv), но код без среды разработки они не запускали, да и не понимают кому и зачем это вообще может понадобиться.


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


              Я принципиально не буду обсуждать в статье ничего, кроме сборки минимального HelloWorld. Также я постараюсь опустить все технические детали, которые можно опустить и подробно раскрыть всё, без понимания чего обойтись нельзя.


              Для того, чтобы воспользоваться информацией из статьи нужно знать, что такое xml, переменные окружения, зачем нужна переменная окружения PATH и как пользоваться консолью.

              Читать дальше →
            • .NEXT 2015 Piter: возможно ли потеснить Москву?

                .NET-конференция .NEXT, в декабре покорявшая Москву, теперь снова прошла в родном для нее Петербурге. Напрашивается вопрос: возможно ли после столичного размаха сделать питерский вариант не уступающим, или в Северной столице неизбежно труба будет пониже, а дым — пожиже? Под катом — подробный рассказ, позволяющий сделать выводы.



                Читать дальше →
                • +14
                • 5,4k
                • 4
              • Как прошел JPoint 2015: полный аншлаг и любопытные подробности

                  Java-конференция JPoint собрала в Москве рекордное количество зрителей: более 1000 человек. Доклады представляли одновременно в четырех залах «Radisson Славянской» (это не считая «экспертных зон» в холле), и все они оказывались заполнены. Это при том, что речь о хардкорном техническом мероприятии: случайному человеку, не связанному с Java, здесь делать было нечего. Что именно собрало столько зрителей?



                  Читать дальше →
                • 10 феерических выступлений Стива Джобса


                    На прошлой неделе случилось то, что хотелось оттянуть на как можно больший срок, но что все равно было неизбежным. Самый инновационный предприниматель Америки, а может, и мира, Стив Джобс оставил пост CEO компании Apple.
                    Некоторым везунчикам в жизни предоставляется шанс работать над одним революционным устройством. Стив Джобс – человек, который совершил сразу несколько революций в цифровом мире, – по праву может считаться успешным человеком. 
                    В этой статье собраны 10 наиболее известных и символичных выступлений, которые характеризуют жизнь и карьеру мастера. 
                    Читать дальше →
                  • Советы по организации и ведению корпоративного Twitter

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

                      Немного статистики:
                      • 5% американцев узнает о скидках в Твиттере;
                      • 70% известных компаний работают в Твиттере, в среднем у них 1500 фолловеров;
                      • 80% компаний, присутствующих в Twitter, твитят еженедельно, 40% отвечают клиентам.
                      Читать дальше →
                    • Порнография с точки зрения эволюционной психологии

                        Данный топик был написан по следам бурных обсуждений на Хабре ряда новостей, так или иначе связанных с порно (раз, два, три, четыре). В этих и подобных топиках подымается тема цензурирования интернета и запрета порнографии вообще либо отдельных её жанров. Хотя хабрасообщество в целом довольно либерально относится к порно, обсуждение влияния его на психику — особенно детскую — выливается обычно в нешуточные драмы (самая серьёзная, на моей памяти, была тут).

                        Между тем, сколько-нибудь заслуживающих доверия данных о влиянии порнографии на общественное и личное здоровье в этих обсуждениях нет; более того, мои попытки по-быстрому найти какие-то вменяемые данные в интернете не увенчались успехом. В поисках ответов на вопросы мне пришлось погрузиться довольно глубоко в научные исследования, и кое-что я в итоге нашёл. Краткий синопсис современных научных взглядов на порнографию и её влияние на человека будет дан под катом после небольшого FAQ'а.

                        Вопрос: картинки будут?
                        Ответ: будут.

                        Вопрос: какое отношение этот топик имеет к Хабру?
                        Ответ: он интересен читателям Хабра.

                        Вопрос: нет, всё-таки, какое отношение имеет топик к тематике Хабра?
                        Ответ: никакого; просто я считаю, что Хабр — это, прежде всего, определённая аудитория, а не тематика.

                        Вопрос: почему в блог «Интернет»?
                        Ответ: потому что Internet is for porn.

                        Если Вам не исполнилось 18 лет, под кат лучше не ходить
                      • 31 января 2011 в 13:31

                        Рунетология (82): вирусные рекламные кампании в интернете

                        Генеральный директор digital-агентства Smetana Андрей Бузина — о том, что такое like-маркетинг и как он работает, об особенностях подготовки вирусных кампаний и нюансах взаимодействия с заказчиком, о том, для каких компаний актуален вирусный маркетинг и что нужно знать, чтобы вирус не нанес вреда бизнесу.
                        прослушан 1400 раз