Как стать автором
Обновить

Технотекст

Атака на String.hashCode: прообразы и коллизии

Время на прочтение8 мин
Количество просмотров13K
Дюк прощупывает сезон Java

Как-то раз мне понадобилось несколько наборов строк с коллизией по хеш-коду. То есть таких, чтобы значение String::hashCode() совпадало для всех строк в наборе.

Блуждание по интернету не дало результатов, примеров было мало и все они довольно однообразны. Поиск по словарям подарил забавную пару "javascript's".hashCode() == "monocle".hashCode(), но практической пользы не принёс. Полный перебор не рассматривался в виду скорой тепловой смерти вселенной.

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

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

API-First и микросервисы

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

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

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

Работа с аутсорсом: наш опыт

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

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

Сама постановка задачи «увеличить производительность за счёт аутсорса» выглядит довольно спорной, но это тема для другой статьи. 

Бизнес сказал «Надо», мы пошли думать, как это организовать.

Узнать про наш опыт
Всего голосов 4: ↑4 и ↓0+4
Комментарии5

Ускоряем прохождение iOS UI-тестов. Часть 1. Запуск тестов без сборки проекта

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

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

Меня зовут Борис. Я Mobile AQA lead в Vivid Money.

Это вступительная статья в цикле статей по iOS-автоматизации, в которых я расскажу о том, как ускорить прохождение UI-тестов.

Данная статья будет полезна iOS-автоматизаторам с опытом, либо разработчикам.

В рамках этой статьи мы разберем такие этапы:

- зачем ускорять время прохождения UI-тестов;

- что такое Test runner, и какие они бывают;

- что нужно для прогона тестов без компиляции проекта;

- делимся опытом, как это помогает нам.

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

К AGI через фрактальную адаптацию структуры

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

Перед вами AGI лонгрид, друзья, много картинок и гифок. Обещанная в прошлой статье практическая часть тоже будет.

Читать далее
Всего голосов 5: ↑3 и ↓2+2
Комментарии10

Бюджет потерь USB 3.2

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

Откуда столько названий стандартов USB? Какие допустимые потери сигнала в кабеле по спецификации, и почему почти никто ей не следует? Как измерить потери в дифференциальной линии и не продать почку?

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

Страх и ненависть в спецификации USB
Всего голосов 122: ↑121 и ↓1+154
Комментарии60

Как устроены дисплеи. Подробный разбор

Уровень сложностиПростой
Время на прочтение61 мин
Количество просмотров60K

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

Основные характеристики — всякие яркости, HDRы, контрасты и цветовые охваты, что они значат и зачем нужно 120Гц, мы разобрали в предыдущей части.

Осторожно, трафик >
Всего голосов 95: ↑94 и ↓1+119
Комментарии134

Как составить базу знаний (Как не умереть в море обучающих материалов )

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

О том, как не потеряться в огромной куче информации и как ее структурировать (не скажу что правильно, но хоть какой то шаблон).

Так же много полезных ссылок, как в самой статье, так и в базе знаний (кликабельность).

Оценить "базу знаний"
Всего голосов 8: ↑5 и ↓3+4
Комментарии2

Kubernetes 1.25: обзор нововведений

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

Этой ночью представят новую версию Kubernetes. Среди главных изменений на первое место разработчики поставили стабилизацию функции CSI Migration — отказ от внутренних плагинов хранилищ в пользу CSI-драйверов. Также в этой версии устаревший контроллер PodSecurityPolicy заменен на новый PodSecurity Admission.

По традиции в обзоре рассказываем обо всех новых функциях (alpha), а также упоминаем те, что перешли на уровень выше (beta, stable).

Читать далее
Всего голосов 55: ↑54 и ↓1+67
Комментарии3

Как улучшить английский в документации

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

Я работаю техническим писателем в компании documentat.io. Мы занимаемся заказной разработкой технической документации, в том числе на английском языке. Иногда я дорабатываю уже существующие документы или спецификации к API на английском. Как правило, такие документы написаны русскоязычными разработчиками, которые неплохо владеют английским. И всё же они часто допускают характерные грамматические, пунктуационные и стилистические ошибки.

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

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

Читать далее
Всего голосов 81: ↑80 и ↓1+97
Комментарии27

TypeScript в React-приложениях. 1. Как типизировать данные

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

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

Это далеко идущие планы, а на текущий момент задача цикла статей — собрать фидбек о правильности авторских суждений, которые основаны на личном опыте разработки приложений на Typescript и местами противоречат популярной литературе по языку Typescript. Тем не менее доводы к этим суждениям должны заинтересовать сообщество фронтэнд-разработчиков.

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

Разработка 2-наносекундного излучателя лидара. Тестовое задание от Яндекс.Беспилотники

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

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

Читать далее
Всего голосов 101: ↑100 и ↓1+120
Комментарии110

Поддержка mTLS в своём Service Mesh: чему мы научились

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

Салют! На связи команда платформы Авито, сегодня будем рассказывать про service mesh.

У Авито самописный service mesh — сначала это был Netramesh, который потом трансформировался в собственный control-plane и envoy в качестве data-plane. В начале этого года я добавлял в него поддержку mTLS, а сейчас мы успешно раскатываем это решение для межсервисного взаимодействия. 

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

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

Как посчитать длину текста и не привлекать внимание санитаров

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

Привет! Меня зовут Алексей Ивасюта, я фронтенд-разработчик в Авито в кластере Seller Experience. В этой статье я расскажу, как правильно рассчитать длину текста в Java Script. Эта статья будет одинаково полезна как начинающим разработчикам, так и весьма опытным. Благодаря ей вы поймете устройство Unicode и особенности его работы в JS.

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

Как и почему перешли с Python на Go в основном сервисе рекомендаций Авито

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

Привет! Меня зовут Василий Копытов, я руковожу группой разработки рекомендаций в Авито. Мы занимается системами, которые предоставляют пользователю персонализированные объявления на сайте и в приложениях. На примере нашего основного сервиса покажу, когда стоит переходить с Python на Go, а когда нужно оставить всё как есть. В конце дам несколько советов по оптимизации сервисов на Python.

Читать далее
Всего голосов 47: ↑43 и ↓4+42
Комментарии41

Чего ждать от NeoVim: особенности редактора

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

Привет! Я Антон Губарев, инженер команды Platform as a Service (PaaS) в Авито. Долгое время я пользовался IDE от JetBrains, затем пересел на VS Code. Последние несколько лет работаю с кодом только в NeoVim — адаптировал его под себя и перестал использовать другие IDE.

Читать далее
Всего голосов 19: ↑16 и ↓3+20
Комментарии41

Realtime-матчинг: находим матчи за считанные минуты вместо 24 часов

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

Задача матчинга в последнее время набирает всё большую популярность и используется во многих сферах: банки матчат транзакции, маркетплейсы – товары, а Google и другие IT-гиганты проводят соревнования по решению таких задач на Kaggle.

Для маркетплейса матчинг – очень важный процесс, который решает сразу несколько задач:

1. При поисковом ранжировании из множества товаров показывать сначала самые выгодные предложения.

2. Объединять множество товаров в одну сущность и показывать предложения одного и того же товара от разных селлеров.

3. Понимать, как предложения селлеров выглядят относительно друг друга, и поощрять их дополнительными бонусами.

Сегодня мы поговорим не только о решении этой задачи, но и о способах её реализации: offline (batch) vs online (realtime). Также обсудим, как и зачем переходить от первого ко второму.

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

Почему разработчику важно заниматься «PET-проектами»

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

Привет Хабр! Прошло более 7 лет с момента старта моего первого PET-проекта. Тогда я еще не задумывался о пользе подобных инициатив и разрабатывал исключительно в академических целях, чтобы наработать практический опыт и более продуктивно справляться с задачами в компании где я в тот момент работал.

По сей день я продолжаю запускать PET-проекты и даже самые неудачные из них, которые “идут в стол”, приносят мне огромную пользу.

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

Читать далее
Всего голосов 9: ↑6 и ↓3+4
Комментарии5

It is Wednesday, my java dudes, или насколько сложно сделать свою JVM

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

Что делать, если накануне переезда повысилась тревожность, а привычные методы не приносят успокоения?

Конечно же вырабатывать дофамин через решение упоротых инженерных задач!

Мне стало интересно - насколько тяжко было бы сделать свой интерпретатор байт-кода Java? И насколько сложно было бы научить его “новым трюкам”?

Писать я буду на Rust, поэтому и проект, не мудрствуя лукаво, назвал Rjava.

Читать далее
Всего голосов 55: ↑54 и ↓1+65
Комментарии26

20 лет проблем приема платежей

Время на прочтение11 мин
Количество просмотров22K
image
За логотип спасибо yarbabin

Электронные системы расчетов существуют в интернете уже давно, а баги на них встречаются двадцатилетней давности. Мы находили критические уязвимости, позволяющие угнать деньги и накрутить баланс. Сегодня мы разберем типовые реализации приема платежей и связанные с ними проблемы безопасности.
Читать дальше →
Всего голосов 109: ↑108 и ↓1+131
Комментарии20