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

Пользователь

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

Собеседование Golang разработчика (теоретические вопросы), Часть I

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

Как сейчас проходят собеседования на golang разработчика? Что спрашивают?

Читать далее
Всего голосов 43: ↑42 и ↓1+45
Комментарии23

Потрошим golang: как устроена память

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


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

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

Единственным надежным решением таких проблем является глубокое погружение в теорию и исследования инструмента, которым решаются поставленные проблемы. В нашем случае таким инструментом является язык Go. И как же замечательно, что исследование его внутренностей — совсем легкое дело. В том числе когда дело касается использования памяти.
Читать дальше →
Всего голосов 50: ↑48 и ↓2+55
Комментарии17

Топовые подходы к решению алгоритмических задач

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

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

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

Реверс бинарных файлов Golang с использование GHIDRA. Часть 1

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров4.7K

Язык программирования Go (так же известный как Golang) с каждым днем все больше и больше программистов хотят на нем писать программы. Для хакеров этот язык программирования становится еще более привлекательным за счет кросс-компиляции для различных платформ - Windows, Linux, MacOS. Например, хакеры могут написать загрузчик на Go, внутри может быть ВПО, созданное с использованием более распространенного языка.

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

Некоторые особенности языка программирования Go усложняют задачу реверс-инженерам при исследовании бинарных файлов Go. Инструменты обратного проектирования (например, дизассемблеры) могут отлично справляться с анализом двоичных файлов, написанных на более популярных языках (например, C, C++, .NET), но Go создает новые проблемы, которые делают анализ более громоздким.

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

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

Вопросы и ответы для собеседования Go-разработчика

Уровень сложностиСредний
Время на прочтение53 мин
Количество просмотров114K

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


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


Да, это очень объемный пост, и вряд ли его можно вдумчиво осилить за один подход, но поместив его в закладки он, возможно, когда-то сослужит вам добрую службу (читать его можно по частям, находясь в метро или между вечными совещаниями; да и Ctrl + F никто не отменял). Ещё ему очень не хватает оглавления для удобной навигации между вопросами, но у хабраредактора нет возможности генерировать TOC (если будут запросы об этом в комментариях — сделаю его руками). Об очепятках, пожалуйста, пишите в личку.

Читать дальше →
Всего голосов 40: ↑37 и ↓3+37
Комментарии16

Как я нашел миллион под ногами?

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

Я искал, где бы мог заработать больше, чем, крутя баранку на машине с прицепом. И узнал, что 90% всего чеснока, который продается в России – это импорт. То есть увеличить количество нашего чеснока можно минимум в 5 раз.

Вы едите его каждый день, он легкий, дорогой, а в магазинах китайский.

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

Читать далее
Всего голосов 263: ↑245 и ↓18+282
Комментарии225

«Как научиться думать»: три базовых момента

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

Очевидно, что учат этому далеко не везде. Как минимум, делают акцент не на этом навыке, а на отдельных методах и дисциплинах. Хотя, для занятий последними, да и для принятия решений на работе и в быту, базовая «ментальная гигиена» точно не повредит. Поговорим о ней в нашем материале и обсудим «матчасть», гибкую «оптику» и вспомогательные инструменты.

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

Давайте уже разберемся в DNS

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

image
Внимательный читатель найдет на этой картинке IPv6


Люди часто озадачены доменами. Почему мой сайт не работает? Почему эта хрень поломана, ничего не помогает, я просто хочу, чтобы это работало! Обычно, вопрошающий или не знает про DNS, или не понимает фундаментальных идей. Для многих DNS — страшная и непонятная штука. Эта статья — попытка развеять такой страх. DNS — это просто, если понять несколько базовых концепций.


Что такое DNS


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


Вот и все. Правда. Вы или ваш браузер запрашивает значение для ключа www.example.com, и получает в ответ 1.2.3.4.

Читать дальше →
Всего голосов 52: ↑48 и ↓4+44
Комментарии36

Протоколы семейства TCP/IP. Теория и практика

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров125K
image

В сети можно найти огромное количество материала о том, как функционируют сети на базе стека протоколов TCP/IP, а также как писать компьютерные программы с сетевыми возможностями. При рассмотрении компьютерных сетей часто углубляются в описание физических основ и структур данных, передаваемых по сети, а при рассмотрении сетевого программирования основное внимание уделяют интернет-сокетам.

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

В ходе работы над статьёй я написал небольшое приложение, которое послужит отправной точкой для понимания компьютерных сетей и семейства протоколов TCP/IP. С приложением можно экспериментировать, получая дополнительные знания.

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

В статье изложены наиболее важные с моей точки зрения понятия, которые должен знать любой программист, хоть как-то сталкивающийся с компьютерными сетями. Так что без теоретических сведений не обошлось.
Читать дальше →
Всего голосов 82: ↑82 и ↓0+82
Комментарии5

Под капотом у Fortnite. Как работает клиент-серверная архитектура Fortnite: Battle Royale

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

С момента релиза Fortnite прошло уже без малого семь лет. Игра практически сразу добилась коммерческого успеха, но появление соревновательного режима Battle Royale вдохнуло в нее новую жизнь, превратив Fortnite в настоящий культурный феномен. Уже осенью 2018 года количество игроков в Fortnite: Battle Royale приблизилось к 80 миллионам, а через два года число зарегистрированных пользователей достигло 350 миллионов. Одновременно в «королевской битве» сражаются миллионы игроков с разных уголков мира. Как серверы Fortnite выдерживают подобную нагрузку?
Читать дальше →
Всего голосов 13: ↑12 и ↓1+18
Комментарии5

Это база. Сетевая модель OSI. Истоки

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

Ни один курс по сетевым технологиям не обходится без модели Open Systems Interconnection или попросту OSI. Как говорится, «это баааза», на принципах которой создавались другие современные модели. Хотя сегодня она не особо применяется на практике, это не значит, что сетевым специалистам не нужно понимать ее принципы. 

История модели OSI задокументирована не полностью, но нам известны имена людей и названия организаций, вовлеченных в ее создание. Поэтому в этой статье были собраны известные факты об OSI на основе материалов из Интернета, например, онлайн-книги Джеймса Пелки «History And Development Of The Osi Model» и данных из интервью 1 и интервью 2 с Чарльзом Бакманом. Также на Habr я наткнулась на перевод статьи «OSI: Интернет, которого не было», где представлена история о моделях OSI и TCP/IP. Однако я решила самостоятельно изучить истоки OSI и больше углубится в этот период. Если вам интересно понять, что же тогда происходило, то приступим.

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

Представляем планировщик Go: Вы никогда не смотрели на горутины с этой стороны

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров13K

Вероятно, вы слышали о планировщике Go раньше, но насколько хорошо мы знает о том как он работает? Как он связывает горутины с потоками?

Разберем по очереди операции, которые выполняет планировщик.

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

Обзор моделей работы с потоками

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

Обзор моделей работы с потоками


Многие люди не понимают того, как многопоточность реализована в различных языках программирования. В наши времена многоядерных процессоров такое знание будет весьма полезно.
Вот вам небольшой обзор.
Читать дальше →
Всего голосов 72: ↑67 и ↓5+62
Комментарии56

Я программист, и я тупой

Время на прочтение2 мин
Количество просмотров75K
Я пишу код за деньги уже пятнадцать лет. Пробовал себя и в других ролях – управление продуктом, аналитика, тестирование, – но как-то не пошло. И с течением лет пришел к осознанию, что я не очень умный. К сожалению.

Никаких особых медицинских диагнозов мне не ставили, но мои умственные способности крайне ограниченны. Даже те задачи на Leetcode, которые попроще, вызывают у меня затруднения. Когда я читаю о самом обычном алгоритме консенсуса, у меня кипит мозг. У меня плохо получается отслеживать сложные зависимости в кодовой базе. Я не способен освоить модные языки вроде Rust (пытался, но по правде сказать, для меня это чересчур). Я терпеть не могу микросервисы и современный фронтенд: там слишком много движущихся частей, и уследить за всеми я не в состоянии.

Как же я выхожу из положения?
Читать дальше →
Всего голосов 298: ↑284 и ↓14+325
Комментарии333

Организация виртуальной памяти

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

В предыдущей статье я рассказал про vfork() и пообещал рассказать о реализации вызова fork() как с поддержкой MMU, так и без неё (последняя, само собой, со значительными ограничениями). Но прежде, чем перейти к подробностям, будет логичнее начать с устройства виртуальной памяти.

Конечно, многие слышали про MMU, страничные таблицы и TLB. К сожалению, материалы на эту тему обычно рассматривают аппаратную сторону этого механизма, упоминая механизмы ОС только в общих чертах. Я же хочу разобрать конкретную программную реализацию в проекте Embox. Это лишь один из возможных подходов, и он достаточно лёгок для понимания. Кроме того, это не музейный экспонат, и при желании можно залезть “под капот” ОС и попробовать что-нибудь поменять.
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии4

Книга «100 ошибок Go и как их избежать»

Время на прочтение10 мин
Количество просмотров9.4K
image Привет, Хаброжители!

Лучший способ улучшить код — понять и исправить ошибки, сделанные при его написании. В этой уникальной книге проанализированы 100 типичных ошибок и неэффективных приемов в Go-приложениях.

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

Для опытных Go-разработчиков, хорошо знакомых с синтаксисом языка.
Для кого эта книга
Эта книга предназначена для разработчиков, уже знакомых с языком Go. В ней не рассматриваются его основные понятия — синтаксис или ключевые слова. Предполагается, что вы уже занимались реальным проектом на Go. Но прежде чем углубляться в большинство конкретных тем, удостоверимся, что некоторые базовые вещи понимаются ясно и четко.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+8
Комментарии13

Что ученые должны знать о железе для написания быстрого кода

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


источник изображения


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


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

Читать дальше →
Всего голосов 19: ↑18 и ↓1+26
Комментарии8

Go To Memory

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

Как и многие языки, Go часто использует магию под названием хип (heap). Обычно, когда мы пишем наши джейсоно-гонятели, мы просто не задумываемся об этом, хоть и знаем, что это «где-то есть». Давайте попробуем заглянуть в кроличью нору поглубже и увидеть не только то, какими методами аллокатор Go старается облегчить программисту жизнь, но и то, из чего он состоит в целом.

Меня зовут Антон Киреев, я бэкенд-разработчик с опытом работы больше 11 лет. В настоящее время работаю техлидом в Авито. В жизни мне нравятся две вещи: приносить пользу своей работой и проводить свободное время с семьёй. Именно поэтому я люблю делать что-то быстро, но качественно, а потом отдыхать. Для этого я постоянно учусь и пытаюсь докапываться до сути вещей. Сегодня поговорим, как наша любимая Гошечка работает с памятью.

Читать далее
Всего голосов 44: ↑31 и ↓13+25
Комментарии13

Разбираемся с управлением памятью в современных языках программирования

Время на прочтение7 мин
Количество просмотров65K
Привет, Хабр! Представляю вашему вниманию перевод статьи «Demystifying memory management in modern programming languages» за авторством Deepu K Sasidharan.

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

Углублённое изучение концептов управления памятью позволяет писать более эффективное ПО, потому как стиль и практики кодирования оказывают большое влияние на принципы выделения памяти для нужд программы.
Читать дальше →
Всего голосов 22: ↑19 и ↓3+21
Комментарии23

Как я мышку Microsoft Sculpt Ergonomic Mouse за $100 восстанавливал: пайка кнопки, обмен материнками и кое-что еще

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

Три мыши. Посередине мой верный помощник, а по бокам — его «собратья», приобретенные на eBay. Один донор и второй — рабочая мышь с проблемной кнопкой

Привет, Хабр! Наверное, многие, прочитав заголовок, подумали: «Ну блин, уже до ремонтов мышей докатились!» Частично с этим согласен, но не до конца! Дело в том, что Microsoft Sculpt Ergonomic Mouse — по-настоящему сложный девайс, его непросто ремонтировать, но зато в работе он крут.

Я несколько раз писал на Хабре о том, что пару лет печатал на клавиатуре Microsoft Sculpt, но вроде ни разу не упоминал, что в комплекте шла и эта мышь. Раз начав с ней работать, я уже не смог перейти ни на какую другую. Но, к сожалению, мой верный помощник стал сдавать — не только чисто косметически, но и функционально. Перестала нормально работать левая кнопка, позже — кнопка Windows, а еще чуть позже — и все остальное. Подробности ремонта и описание самой мыши — под катом.

Читать дальше →
Всего голосов 32: ↑31 и ↓1+42
Комментарии70
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность