Search
Write a publication
Pull to refresh
2
0
Константин @ConstOrVar

Разработчик мобильных приложений

Send message

Программирование: теоремы и задачи

Reading time4 min
Views8.9K

После неудачного (с точки зрения эффективности траты времени) погружения в "Грокаем алгоритмы" по совету Яндекс Практикум и решения нескольких задач в "Бесплатный курс: подготовка к собеседованиям" от того же Яндекса решил поискать литературу на тему разбора задач. Довольно много рекомендаций указывало на книгу "Программирование: теоремы и задачи" от Александра Шень. Предыдущее издание книги можно, кстати, официально скачать с сайта издательства Московского Центра Непрерывного Математического Образования.

Сам автор характеризует книгу как справочник и задачник для преподавателя. Причем во введении и аннотации упоминает школу на порядок чаще университета. Да и формулировки многих задач намекают на школьную аудиторию. На этом стоит остановиться сразу. Речь может идти только об очень очень особой школе и очень очень особых школьниках. Например, таких, которые ходят на математический кружок мехмата МГУ, где математически доказывают выигрышную стратегию при игре в крестики-нолики. 90% материала выходят за рамки школьной программы по информатике. Да и некоторые задачи используют математический аппарат, который тоже в школьный стандарт не входит. Не стоит отметать эту книгу как что-то для маленьких и неразумных.

Читать далее

Запустился бесплатный курс «Подготовка к алгоритмическому собеседованию» от Яндекс Практикума

Reading time2 min
Views19K
Сервис онлайн-образования Яндекс Практикум запустил бесплатный курс «Подготовка к алгоритмическому собеседованию» для специалистов, которые планируют проходить алгоритмические собеседования или просто хотят познакомиться с понятием «алгоритмическая секция».

Курс будет полезен разработчикам независимо от уровня алгоритмической подготовки:

  • если вы раньше изучали алгоритмы и структуры данных, вы сможете применить их на практике;
  • если вы только планируете их изучать, то курс поможет вам сориентироваться и уделять время только тому, что пригодится на собеседованиях.



Читать дальше →

Bug Bounty: разведка превыше всего

Level of difficultyEasy
Reading time6 min
Views4.9K

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

Читать далее

S3-FIFO: новый эффективный алгоритм вытеснения из кэша на основе очередей FIFO

Level of difficultyMedium
Reading time18 min
Views9.3K
В этой статье я расскажу о простом и масштабируемом (Simple, Scalable) алгоритме вытеснения данных из кэша на основе трёх статических (Static) очередей FIFO (S3-FIFO). После проверки на 6594 трассировках кэшей 14 компаний мы показали, что S3-FIFO имеет меньшую частоту промахов, чем 12 лучших алгоритмов, разработанных в прошлые десятилетия. Более того, эффективность S3-FIFO устойчива — он имеет наименьший средний показатель промахов для 10 из 14 датасетов. Использование очередей FIFO позволяет S3-FIFO достичь хорошей масштабируемости с пропускной способностью в шесть раз больше по сравнению с оптимизированным LRU в cachelib на 16 потоках.

Мы пришли к выводу, что доступ к большинству объектов в смещённых нагрузках кэша выполняется только за короткий промежуток времени, поэтому критически важно быстро вытеснять их из кэша. А главная особенность S3-FIFO — это небольшая очередь FIFO, отфильтровывающая большинство объектов, не давая им попасть в основной кэш.

Иллюстрация работы S3-FIFO (с использованием порогового значения перехода из маленького в основной кэш, равного 1)
Читать дальше →

Как начать заниматься багхантингом веб-приложений. Часть 3

Level of difficultyEasy
Reading time14 min
Views5K

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

В заключительной части цикла мы традиционно рассмотрим еще несколько классов уязвимостей на реальных примерах, а то, чего мы не успеем коснуться, оставим для самостоятельного изучения. Ведь о каком опыте и знаниях можно говорить, если не стремиться к самообразованию и саморазвитию? 😊 Еще приведем пять интересных хакерских трюков, они же hack tricks , которые неплохо известны атакующим, поэтому и нам, исследователям безопасности, необходимо знать существующие, изучать новые, а также придумывать собственные. В конце дадим напутствие новичкам-багхантерам для успешного путешествия в мир багбаунти, в котором нужно стремиться делать мир безопаснее, стать одним из лучших белых хакеров, завоевывать признание среди сообщества и, конечно же, получать хорошие вознаграждения за найденные уязвимости.

Читать далее

Ликбез по распространенным Client-Side уязвимостям

Level of difficultyMedium
Reading time15 min
Views21K


В этой статье мы покажем:


  • как в разных ситуациях манипулировать веб-сайтом таким образом, чтобы он передавал пользователям вредоносный JavaScript.
  • как скомпрометировать администратора сайта, отправив ему личное сообщение;
  • как атаковать разом всех пользователей при помощи комментария под статьей;
  • как заставить пользователя отправить запрос на действия, которые он не собирается выполнять;
  • как прослушивать WebSocket-соединения;
  • и коротко объясним, как предотвратить все эти безобразия.

В общем, под катом вас ждет рассказ про распространенные уязвимости на стороне клиента и некоторые методы Client-Side защиты.

Читать дальше →

Анатомия Интернета: что в имени тебе моём? (DNS)

Level of difficultyMedium
Reading time33 min
Views29K

Всем нам нравится писать в строке бровсера https://habr.com/. Никому не
захотелось бы писать там https://178.248.237.68/. К тому же, IP-адрес может
измениться, если Хабр решит перейти на другой хостинг.

Служба Интернета, которая превращает удобные всем имена в IP-адреса,
называется DNS, Domain Name System, "система доменных имен".

В этой статье я собираюсь описать работу DNS с разных аспектов, как с
технических, так и с организационно-административных.

Эта статья не является введением в DNS для начинающих. Скорее, моя
предполагаемая аудитория - это ИТ-профессионалы разной специализации,
которые хотят получше разобраться в анатомии сети Интернет.

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

Читать далее

Как воспитать в своей семье юного инженера и не разориться?

Level of difficultyEasy
Reading time8 min
Views21K

Говорят, собственный пример – это самое лучшее обучение для ребёнка. Рассказываю, как я проверил справедливость этого высказывания на себе, с нуля погрузился в робототехнику и в итоге у меня даже получилось сконструировать нечто стоящее. А ещё в процессе я поднаторел в вопросах экономии средств на покупке довольно дорогостоящих деталей для такого вида хобби.

Короче, слушайте

Поговорим об оптимизирующих компиляторах. Сказ пятый: удаление общих подвыражений

Level of difficultyEasy
Reading time9 min
Views4.3K

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

Читать далее

Почему DNS по-прежнему сложно изучать?

Reading time7 min
Views12K

Я много пишу о технологиях, которые показались мне сложными. Недавно моя подруга Сумана задала мне интересный вопрос – почему все эти вещи так сложно изучать? Почему они кажутся такими загадочными?

Для примера возьмём DNS. Мы пользуемся DNS с 80-х (больше 35 лет!). Он применяется на каждом веб-сайте Интернета. И он довольно стабилен – во многих смыслах он работает точно так же, как делал это тридцать лет назад.

Но мне понадобились ГОДЫ, чтобы понять, как с уверенностью отлаживать проблемы с DNS, и я видела множество программистов, тоже испытывавших трудности с отладкой проблем DNS. Что же происходит?

Я приведу пару своих рассуждений о том, почему устранять проблемы DNS трудно.

(В этом посте я не буду глубоко объяснять DNS, подробности о его работе см. в моём посте Implement DNS in a Weekend или в других моих постах о DNS.)

Читать далее

Как работает хэширование

Level of difficultyMedium
Reading time12 min
Views91K

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

Хэш-функции фундаментальны и используются повсюду.

Но что же такое хэш-функции и как они работают?

В этом посте я собираюсь развенчать мифы вокруг этих функций. Мы начнём с простой хэш-функции, узнаем, как проверить, хороша ли хэш-функция, а затем рассмотрим реальный пример применения хэш-функции: хэш-таблицу.
Читать дальше →

Поговорим об оптимизирующих компиляторах. Сказ четвёртый: Циклы

Level of difficultyMedium
Reading time9 min
Views5K

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

Зациклиться

Правила хорошего пентестера, или «Я никогда не»

Level of difficultyEasy
Reading time9 min
Views8.3K

Тестирование на проникновение — профессия серьезная, правила в ней основаны на горьком опыте, но вы все равно можете повеселиться, изучая их. Сегодня поделюсь советами, которые помогут стать хорошим пентестером и избежать неприятностей. А заодно расскажу несколько баек о том, в какие абсурдные ситуации можно попасть, нарушая эти правила. Так что устраивайтесь поудобнее, открывайте этот гайд, а по прочтении — делитесь своими историями в комментариях.

Читать далее

Поговорим об оптимизирующих компиляторах. Сказ третий: неопределённое поведение и оптимизации

Level of difficultyMedium
Reading time13 min
Views12K

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

Наверное, многие слышали, что неопределённое поведение (undefined behavior, UB) -- постоянный источник разнообразных багов, иногда очень забавных, иногда довольно жутких. Тема также неоднократно освещалась и на Хабре, навскидку раз, два, три (и даже целый тег есть). Однако чаще всего статьи по данной теме посвящены тому, как можно отстрелить себе ногу, голову или случайно сжечь свой жёсткий диск, исполнив какой-нибудь опасный код. Я же намерен сделать акцент на том, зачем авторы языков программирования надобавляли всей этой красоты, и как оптимизатор может её эксплуатировать. Всё будет проиллюстрировано наглядными примерами из LLVM и присыпано байками из собственного опыта, так что наливайте себе чай, располагайтесь поудобнее, и погнали.

На дно

Поговорим об оптимизирующих компиляторах. Сказ второй: Доминирование

Level of difficultyMedium
Reading time10 min
Views10K

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

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

Причаститься

Wireshark — подробное руководство по началу использования

Level of difficultyMedium
Reading time8 min
Views334K

Wireshark – это широко распространённый инструмент для захвата и анализа сетевого трафика, который активно используется как для образовательных целей, так и для устранения неполадок на компьютере или в сети. Wireshark работает практически со всеми протоколами модели OSI, обладает понятным для обычного пользователя интерфейсом и удобной системой фильтрации данных. Помимо всего этого, программа является кроссплатформенной и поддерживает следующие операционные системы: Windows, Linux, Mac OS X, Solaris, FreeBSD, NetBSD, OpenBSD.

Читать далее

Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

Level of difficultyMedium
Reading time9 min
Views20K

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

Коротко обо мне. Меня зовут Макс, и так получилось, что я вот уже 10 лет, почти с самого начала своей карьеры, занимаюсь оптимизирующими компиляторами. Я начинал в Intel, потом перешёл в Azul Systems, год провёл в Cadence и вернулся обратно, всё это время занимаясь компиляторными оптимизациями для Java, C++ и нейросетевых моделей. На момент написания статьи у меня чуть за 900 патчей в LLVM, большинство из них посвящено цикловым оптимизациям.

За это время я провёл десятки собеседований на позиции как интернов, так и инженеров сеньорного уровня, и довольно часто люди, приходя на эти собеседования, многих вещей не знают или знают поверхностно. И я подумал: а мог бы я написать такой цикл статей, чтобы человек, прочитав их, узнал бы всю ту базу, которая, на мой собственный взгляд, необходимо начинающему компиляторному инженеру? Очень бы хотелось, чтобы новичку в этой области можно бы было дать один (относительно небольшой по объёму) набор текстов, чтобы он получил оттуда всё необходимое для старта. Это не перевод, текст оригинальный, поэтому в нём могут быть ошибки и неточности, которые я буду рад исправить, если вы мне их укажете.

Итак, поехали.

Погрузиться

Соревнования Capture The Flag (CTF) и все, что вы о них еще не знали

Level of difficultyEasy
Reading time27 min
Views8.6K

Привет! Меня зовут Анна Шабалина, и я работаю в Swordfish Security. Этой статьей я открываю нашу новую рубрику #досугбезопасника.

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

Статья длинная, заготовьте чашечку кофе.

Читать далее

Мамкины хацкеры или мой путь в CTF

Reading time7 min
Views48K
Это был далекий 2014 год, когда еще зеленые, недавно поступившие в универ, парни, услышали, что есть какие-то соревнования с завлекающим названием — «Capture the flag» (сокр. CTF, в переводе «Захват флага»).


Фото с сайта securitylab.ru к новости про Facebook CTF 2016

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

Итак, давайте теперь я вам немножко поведаю:

1. CTF (Capture the flag или Захват флага) — командные соревнования (изредка бывают личными) в области компьютерной (информационной) безопасности.
Читать дальше →

Как начать заниматься багхантингом веб-приложений

Reading time14 min
Views32K

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

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

Под кат

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity