Как стать автором
Обновить
21
0
Максим Пелевин @maxpelevin

Java разработчик

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

Немного про современные технологии Greybox-фаззинга

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


Автор: Иннокентий Сенновский


Как найти баги, о которых вы и не догадывались, или что такое фаззинг


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


Чтобы справиться с этой проблемой, придумали фаззеры — инструменты тестирования, которые сами пытаются найти баги в программе. В этой статье я рассмотрю, какие они вообще бывают (для C/C++, потому что баги в таких программах особенно болезненны), но сделаю упор на Greybox-фаззеры (почему, расскажу в статье).

Обожаю статьи, где много букв
Всего голосов 9: ↑9 и ↓0+9
Комментарии6

Собеседование в Яндекс: театр абсурда :/

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

Привет, Хабр!

В прошлой статье меня знатно разбомбили в комментариях, где-то за дело, где-то я считаю, что нет. Так или иначе, я выжил, и у меня есть чем с вами поделиться >:)

Напомню, что в той статье я рассказывал, каким я вижу идеальное собеседование и что я нашёл компанию, которая так и делает - и я туда прошёл, хотя это был адский отбор. Я, довольный как слон, везде отметил, что я не ищу работу, отовсюду удалился и стал работать работу.

Как вы думаете, что делают рекрутеры, когда видят "Alexandr, NOT OPEN FOR WORK"? Правильно, пишут "Алексей, рассматриваете вариант работать в X?" Я обычно игнорирую это, но тут мне предложили попытать счастья с Яндекс.Лавкой, и я не смог пройти мимо - интересно было, смогу ли я устроиться куда-нибудь, когда введут великий российский файерволл. К тому же за последние 3 года я проходил только два интервью, и мне показалось, что я не в теме, что нынче требуется индустрии. Блин, я оказался и вправду не в теме. И вы, скорей всего, тоже - об этом и статья.

Читать далее
Всего голосов 531: ↑504 и ↓27+610
Комментарии1270

Новый алгоритм проверки пересечений в графах прятался на виду

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

Два специалиста по информатике нашли в весьма неожиданном месте идею, которая как раз пригодилась им для прорыва в теории графов




В октябре 2019 Якоб Хольм и Ева Ротенберг пролистывали работу, опубликованную ими за несколько месяцев до этого – и вдруг поняли, что наткнулись на нечто серьёзное.

Десятилетиями специалисты по информатике пытались разработать быстрый алгоритм для определения того, можно ли добавить к определённому графу рёбра так, чтобы он остался «планарным» – то есть, чтобы его рёбра не пересекались. Однако ни у кого не получалось улучшить алгоритм, опубликованный более 20 лет назад.

Хольм и Ротенберг с удивлением обнаружили, что в их работе есть идея, позволявшая достаточно сильно улучшить этот алгоритм. Она «разобралась с одним из главных препятствий на пути к реальному алгоритму», — сказал Хольм, специалист по информатике из Копенгагенского университета. «Возможно, мы полностью раскрыли этот вопрос».
Читать дальше →
Всего голосов 37: ↑35 и ↓2+50
Комментарии10

Полный перечень intrinsic-функций в HotSpot в JDK 7, 8, 9 и 10

Время на прочтение45 мин
Количество просмотров11K
Интринсик или intrinsic-функция — функция, которую JIT-компилятор может встроить вместо вызова Java- и JNI-кода с целью оптимизации. Важный вывод из этого — intrinsic-функции не доступны в режиме интерпретатора. По умолчанию в HotSpot используется два JIT-компилятора C1 и C2, таким образом, может быть доступна реализация intrinsic-функции для каждого из JIT-компиляторов. Различия в реализации intrinsic-функций для разных JIT-компиляторов обуславливаются различным внутренним представлением кода (intermediate representation — IR).

В HotSpot реализовано несколько сотен интринсиков (их количество растёт от релиза к релизу). Описание всех intrinsic-функций можно найти в исходниках OpenJDK в файле vmSymbols.hpp. Ниже приведены полные списки интринсиков для JDK 7 (vmSymbols.hpp), JDK 8 (vmSymbols.hpp), JDK 9 (vmSymbols.hpp) и JDK 10 (vmSymbols.hpp).
Читать дальше →
Всего голосов 31: ↑31 и ↓0+31
Комментарии5

Программирование только классами

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

image


В моем посте Implementing numbers in "pure" Ruby ("Разрабатываем числа на "чистом" Ruby") я обозначил рамки, которые разрешали использовал базовые вещи из Ruby вроде оператора равенства, true/false, nil, блоки и т.п.


Но что, если бы у нас вообще ничего не было? Даже базовых операторов вроде if и while? Приготовьтесь к порции чистого объектно-ориентированного безумия.

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

Вооот такоооой красотыыы

Время на прочтение3 мин
Количество просмотров76K
(под рифму из хоровода)

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



И вот один девайс просто не могу не показать. Расскажу про него совсем вкратце, даже не называя имени и не приводя его какие-то скоростные характеристики — девайс меня буквально сразил наповал своим внутренним миром. На правах пятницы решил поделиться с вами.
Всего голосов 210: ↑204 и ↓6+280
Комментарии134

Секрет формы иконок iOS: это сквиркл? Разбор

Время на прочтение4 мин
Количество просмотров80K
Давайте сыграем в игру. У нас есть два ряда знакомых всем пользователям iOS-иконок. На первый взгляд иконки сверху и снизу одинаковые. Но это не так. В одном ряду вы видите настоящие иконки, а в другом подделку.





Можете ли вы определить, где какие? Не торопитесь, посмотрите внимательно? Ну что, выбрали?

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

Дело в том, что поддельные иконки по форме — это квадраты с закруглёнными углами, ну и прямоугольник если говорить о серой подложке.

Но! В интерфейсе iOS нет ни одного квадрата с закруглёнными углами. Все элементы в iOS, это не квадраты и прямоугольники — это суперэллипсы!

Сегодня мы поговорим про секреты в дизайнах продуктов Apple. Что такое суперэллипс? В чём магия формы иконок? И почему HomePod — это суперяйцо.



Всего голосов 87: ↑68 и ↓19+74
Комментарии103

Spring-анимации во Vue

Время на прочтение12 мин
Количество просмотров8.6K
Привет, Хабр!

Мне давно хотелось добавлять в любые проекты Spring-анимации. Но делал я это только для React-проектов с помощью react-spring, так как не знал ничего другого.

Но наконец я решил разобраться, как оно все устроено и написать свою реализацию!

Если вы тоже хотите использовать Spring-анимации везде, заходите под кат. Там вы найдете немного теории, реализацию Spring на чистом JS и внедрение Spring-анимации во Vue с помощью компонентов и composition-api.

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

Зарплаты в ИТ в первом полугодии 2019 года: по данным калькулятора зарплат «Моего круга»

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


Публикуем отчет по зарплатам в ИТ-индустрии на 1-е полугодие 2019. Отчёт построен по данным калькулятора зарплат «Моего круга»: в котором за данный период было собрано более 7000 зарплат. 

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

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

Сервис зарплат запущен на «Моем круге» в конце 2017 с целью регулярного мониторинга зарплат в ИТ-индустрии. Зарплаты оставляют сами специалисты, мы их собираем и предоставляем всем в открытый доступ в агрегированной и анонимной форме.
Читать дальше →
Всего голосов 106: ↑101 и ↓5+96
Комментарии311

Краткий и бодрый обзор архитектуры компиляторов

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

Большинство компиляторов имеют следующую архитектуру:



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

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

Статья ни в коем случае не посвящена современным производственным компиляторам с миллионами строк кода — нет, это краткий курс «компиляторы для чайников», помогающий разобраться, что такое компилятор.
Читать дальше →
Всего голосов 68: ↑63 и ↓5+58
Комментарии38

Поиск подстроки. Алгоритм Кнута–Морриса-Пратта

Время на прочтение3 мин
Количество просмотров89K
В задачах поиска информации одной из важнейших задач является поиск точно заданной подстроки в строке. Примитивный алгоритм поиска подстроки в строке основан на переборе всех подстрок, длина которых равна длине шаблона поиска, и посимвольном сравнении таких подстрок с шаблоном поиска. По традиции шаблон поиска или образец принято обозначать как needle (англ. «иголка»), а строку, в которой ведётся поиск — как haystack (англ. «стог сена»). На языке Python примитивный алгоритм выглядит так:

index = -1
for i in xrange(len(haystack)-len(needle)+1):
    success = True
    for j in xrange(len(needle)):
        if needle[j]<>haystack[i+j]:
            success = False
            break
    if success:
        index = i
        break
print index


Обозначим n=|haystack|, m=|needle|. Простейший алгоритм поиска даже в лучшем случае проводит n–m+1 сравнений; если же есть много частичных совпадений, скорость снижается до O(n*m).

Рассматриваемый далее алгоритм хотя и имеет невысокую скорость на «хороших» данных, но это компенсируется отсутствием регрессии на «плохих». Алгоритм Кнута-Морриса-Пратта является одним из первых алгоритмов с линейной оценкой в худшем случае.
Читать дальше →
Всего голосов 46: ↑29 и ↓17+12
Комментарии16

Книга «Машинное обучение»

Время на прочтение3 мин
Количество просмотров28K
image Привет, Хаброжители к нам из типография наконец-то пришла новинка от Хенрика Бринка, Джозефа Ричардса и Марка Февероволофа.

Эта книга позволит программистам, аналитикам данных, статистикам, специалистам по обработке данных и всем остальным применить машинное обучение к решению реальных задач или хотя бы просто понять, что оно собой представляет. Читатели, не прибегая к глубокому теоретическому изучению конкретных алгоритмов, получат практический опыт обработки реальных данных, моделирования, оптимизации и развертки систем машинного обучения. Для тех, кому интересна теория, мы обсуждаем математическую основу машинного обучения, объясняем некоторые алгоритмы и даем ссылки на материалы для дополнительного чтения. Основной акцент делается на практических результатах при решении поставленных задач.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии27

Расширенный материал по Java 8

Время на прочтение4 мин
Количество просмотров52K
Не секрет, что многие Java-программисты, начиная свой путь в индустрии, уделяют большое внимание «тяжелым» технологиям — OpenJPA, Spring, JAX-RS, EJB, WS-*,… Это дает возможность как скорее влиться в современные корпоративные проекты, так и максимизировать скорость роста зарплаты.

Многие из них в конце концов «спускаются» до технологий лежащих в основе указанных фреймворков — JDBC, Servlet API, NIO/NIO.2. Однако прискорбно, что зачастую не остается время на детальное изучение самого языка и возможностей платформы.

Речь идет не о тонкостях или экзотике, а о том, что составляет существенную часть работы фреймворка: Servlet-контейнер использует множественные ClassLoader-ы, JPA2-провайдер использует манипулирование байткодом, абсолютное большинство библиотек используют Reflection API, всеобщее использование Generics только «усугубилось» с появлением функциональных интерфейсов (java.lang.function.*) и лямбд.

На недопонимание изначальной платформы (ClassLoader, Reflection API) накладываются «новвоведения» Java 5 (Generics), а теперь еще и Java 8 (методы в интерфейсах, ссылки на методы, лямбды, Stream API, JSR 308: Pluggable Type Systems). Надо обратить внимание на то, что Generics + Java 8 — это не просто языковые фичи, это частично переход к функциональному стилю программирования.

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Я собрал определенное количество полезных (на мой взгляд) ссылок по следующим темам
  1. Методы в интерфейсах, ссылки на методы, множественное наследование
  2. Лямбды (Project Lambda)
  3. Stream API
  4. Функциональные алгоритмы
  5. Аннотации
  6. Генерики
  7. Reflection API
  8. Загрузка классов

Надеюсь кто-то сочтет их полезными.
Читать дальше →
Всего голосов 43: ↑34 и ↓9+25
Комментарии35

Архитектура и платформа проекта Одноклассники

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

Архитектура и платформа проекта Одноклассники


В этом посте расскажем о накопленном за 5 лет опыте по поддержанию высоконагруженного проекта. Надеемся, что коллегам-разработчикам будет интересно узнать, что и как мы делаем, какие проблемы и трудности у нас возникают и как мы справляемся с ними.

Читать дальше →
Всего голосов 268: ↑232 и ↓36+196
Комментарии181

Масштабирование базы данных через шардирование и партиционирование

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


Масштабирование базы данных через шардирование и партиционирование


Денис Иванов (2ГИС)


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

Немного расскажу о себе — я работаю в команде WebAPI в компании 2GIS, мы предоставляем API для организаций, у нас очень много разных данных, 8 стран, в которых мы работаем, 250 крупных городов, 50 тыс. населенных пунктов. У нас достаточно большая нагрузка — 25 млн. активных пользователей в месяц, и в среднем нагрузка около 2000 RPS идет на API. Все это располагается в трех датацентрах.

Перейдем к проблемам, которые мы с вами сегодня будем решать. Одна из проблем — это большое количество данных. Когда вы разрабатываете тот или иной проект, у вас в любой момент времени может случиться так, что данных становится очень много. Если бизнес работает, он приносит деньги. Соответственно, данных больше, денег больше, и с этими данными что-то нужно делать, потому что эти запросы очень долго начинают выполняться, и у нас сервер начинает не вывозить. Одно из решений, что с этими данными делать — это масштабирование базы данных.
Читать дальше →
Всего голосов 37: ↑34 и ↓3+31
Комментарии17

Изменение размера изображения с учётом содержимого

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

Изменение размера изображения с учётом содержимого (Content Aware Image Resize), жидкое растяжение (liquid resizing), ретаргетинг (retargeting) или вырезание шва (seam carving) относятся к методу изменения размера изображения, где можно вставлять или удалять швы, или наименее важные пути, для уменьшения или наращивания изображения. Об этой идее я узнал из ролика на YouTube, от Shai Avidan и Ariel Shamir.


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


Для подопытной картинки, я поискал по запросу1 "sample image", и нашел её2:


image

Читать дальше →
Всего голосов 58: ↑55 и ↓3+52
Комментарии23

Есть две функции

Время на прочтение16 мин
Количество просмотров53K
Привет

Есть две булевы функции n аргументов, одна — константная, другая — сбалансированная. На какую сам сядешь, на какую фронтендера посадишь? Вот только функции неизвестны, а вызвать их разрешается лишь один раз.

Если не знаешь, как решить подобную задачу, добро пожаловать под кат. Там я расскажу про квантовые алгоритмы и покажу как их эмулировать на самом народном языке — на Python.
Hello darkness, my old friend
Всего голосов 121: ↑115 и ↓6+109
Комментарии61

Обзор современных систем веб-рабочих столов

Время на прочтение4 мин
Количество просмотров27K
Привет, великий Хабр! В наше время Интернет бурно развивается. Теперь, это не просто хранилище информации. Мы общаемся в сети, активно используем облачные сервисы для хранения собственных файлов, создаем в веб-приложениях документы, рисунки и презентации, пользуемся онлайн-переводчиком, играем в онлайн-игры и так далее.

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

Система веб-рабочих стола организует для пользователя набор приложений и сервисов прямо в Интернете, доступный в любом месте и на любом устройстве. Основой каждого такого рабочего стола является интерфейс — аналог проводника и рабочего стола обычной операционной системы (Windows, Mac OS, Linux).
Читать дальше →
Всего голосов 31: ↑21 и ↓10+11
Комментарии31

О строковом форматировании в современном C++

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

Доброго времени суток! В этой статье я хотел бы рассказать о существующих возможностях строкового форматирования в современном C++, показать свои наработки, которые я уже несколько лет использую в реальных проектах, а также сравнить производительность различных подходов к строковому форматированию.

Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии57

Российский хакер научил студентов ИТ-вуза взламывать сеть

Время на прочтение1 мин
Количество просмотров17K
Автор программы Intercepter-NG, называющий себя Ares, показал студентам Университета Иннополис как нужно перехватывать трафик в сети. Видео лекции под катом.
Всего голосов 31: ↑16 и ↓15+1
Комментарии5
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность