Pull to refresh
@Xambeyread⁠-⁠only

frontend developer

Send message

ООП, «святая троица» и SOLID: некоторый минимум знаний о них

Reading time43 min
Views114K

Необходимое вступление


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


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


Столь малые гарантии поднимают вопросы о причинах, по которым статья пишется. Я считаю, что этим вещам должны учить везде, где учат программированию, вплоть до уроков информатики в школах с углублённым её изучением. Тем не менее, для меня стала пугающе нормальной ситуация, когда я узнаю, что собеседник мой коллега, причём работающий уже не первый год, но про инкапсуляцию «что-то там слышал». Необходимость собрать всё это в одном месте и давать ссылку при возникновении вопросов зрела давно. А тут ещё и мой «pet-project» дал мне изрядно пищи для размышлений.


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



Читать дальше →
Total votes 88: ↑82 and ↓6+76
Comments79

Блокировки в PostgreSQL: 1. Блокировки отношений

Reading time14 min
Views85K
Два предыдущих цикла статей были посвящены изоляции и многоверсионности и журналированию.

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

Цикл будет состоять из четырех частей:

  1. Блокировки отношений (эта статья);
  2. Блокировки строк;
  3. Блокировки других объектов и предикатные блокировки;
  4. Блокировки в оперативной памяти.

Материал всех статей основан на учебных курсах по администрированию, которые делаем мы с Павлом pluzanov, но не повторяет их дословно и предназначен для вдумчивого чтения и самостоятельного экспериментирования.
Читайте и другие серии.

Индексы:

  1. Механизм индексирования;
  2. Интерфейс метода доступа, классы и семейства операторов;
  3. Hash;
  4. B-tree;
  5. GiST;
  6. SP-GiST;
  7. GIN;
  8. RUM;
  9. BRIN;
  10. Bloom.

Изоляция и многоверсионность:

  1. Изоляция, как ее понимают стандарт и PostgreSQL;
  2. Слои, файлы, страницы — что творится на физическом уровне;
  3. Версии строк, виртуальные и вложенные транзакции;
  4. Снимки данных и видимость версий строк, горизонт событий;
  5. Внутристраничная очистка и HOT-обновления;
  6. Обычная очистка (vacuum);
  7. Автоматическая очистка (autovacuum);
  8. Переполнение счетчика транзакций и заморозка.

Журналирование:

  1. Буферный кеш;
  2. Журнал предзаписи — как устроен и как используется при восстановлении;
  3. Контрольная точка и фоновая запись — зачем нужны и как настраиваются;
  4. Настройка журнала — уровни и решаемые задачи, надежность и производительность.


Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments11

Defined or Undefined? Нюансы создания массивов в JavaScript

Reading time8 min
Views13K
image

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

Правда, задавший вопрос, так же как и те кто ему отвечал, не обратили внимания, на то, что фактически матрицу не получилось создать, а приведенный результат вычислений некорректен. Всё это меня заинтересовало, и, я решил копнуть чуть глубже, чтобы затем прийти к интересным умозаключениям, с которыми сейчас с вами и поделюсь.
Читать дальше →
Total votes 32: ↑31 and ↓1+30
Comments29

Асинхронное программирование в JavaScript (Callback, Promise, RxJs )

Reading time10 min
Views46K

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



Но перед тем как начать основной материал нам нужно сделать вводную. Итак, давайте начнем с определений: что такое стек и очередь?


Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» LIFO


Очередь — это коллекция, элементы которой получают по принципу («первый вошел, первый вышел» FIFO


Окей, продолжим.



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

Читать дальше →
Total votes 29: ↑24 and ↓5+19
Comments50

VIM как IDE для разработки на Python

Reading time10 min
Views157K
image
Данная статья будет посвящена настройке vim, в которой я поделюсь своим «скромным» пониманием того, каким должен быть текстовый редактор, чтобы в нем было удобно/приятно/легко (нужное подчеркнуть) писать код также, как это сейчас возможно во всевозможных IDE типа PyCharm, SublimeText и т.п.
Весь процесс постараюсь описать как можно более подробно, чтобы вопросов по мере чтения для начинающих осваивать vim возникало как можно меньше.
Читать дальше →
Total votes 70: ↑58 and ↓12+46
Comments47

Шпаргалка для стажера: пошаговое решение задач на собеседовании Google

Reading time3 min
Views17K
image

В прошлом году последние пару месяцев я потратил на подготовку к собеседованию для стажировки в Google (Google Internship). Все прошло хорошо: я получил и работу, и отличный опыт.

Теперь, спустя два месяца после стажировки, я хочу поделиться документом, который использовал для подготовки к собеседованиям. Для меня это было чем-то типа шпаргалки перед экзаменом. Но процесс создания документа и постоянная пошаговая проверка по нему помогли мне запомнить все самое важное.
Читать дальше →
Total votes 23: ↑18 and ↓5+13
Comments1

Разбор: как на самом деле защищены деньги при торговле на бирже

Reading time4 min
Views16K


Изображение: Unsplash

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

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

Сегодня мы ответим на ряд популярных вопросов о том, как именно реализуется защита средств биржевых инвесторов.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments23

ООП в картинках

Reading time20 min
Views810K
ООП (Объектно-Ориентированное Программирование) стало неотъемлемой частью разработки многих современных проектов, но, не смотря на популярность, эта парадигма является далеко не единственной. Если вы уже умеете работать с другими парадигмами и хотели бы ознакомиться с оккультизмом ООП, то впереди вас ждет немного лонгрид и два мегабайта картинок и анимаций. В качестве примеров будут выступать трансформеры.


Читать дальше →
Total votes 38: ↑34 and ↓4+30
Comments104

Разработка динамических древовидных диаграмм с использованием SVG и Vue.js

Reading time12 min
Views11K
Материал, перевод которого мы сегодня публикуем, посвящён процессу разработки системы визуализации динамических древовидных диаграмм. Для рисования кубических кривых Безье здесь используется технология SVG (Scalable Vector Graphics, масштабируемая векторная графика). Реактивная работа с данными организована средствами Vue.js.

Вот демо-версия системы, с которой можно поэкспериментировать.


Интерактивная древовидная диаграмма
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments5

Заблуждения начинающих C# разработчиков. Пытаемся ответить на стандартные вопросы

Reading time10 min
Views47K
Недавно мне выпала возможность пообщаться с довольно большим количеством начинающих специалистов по разработке на языке C#. Многие из них интересуются языком и платформой, и это очень круто. Среди зеленых юниоров распространено мракобесие по поводу очевидных (только что прочитавшему книгу про память) вещей. И это же натолкнуло меня на мысль о создании этой статьи. Статья в первую очередь нацелена на начинающих разработчиков, но думаю, что многие факты будут полезны и практикующим инженерам. Ну и самые очевидные и неинтересные заблуждения, разумеется, опущены. Здесь собраны наиболее интересные и значимые, особенно с точки зрения прохождения интервью.


Читать дальше →
Total votes 58: ↑54 and ↓4+50
Comments62

Что происходит за кулисами С#: основы работы со стеком

Reading time6 min
Views14K
Предлагаю посмотреть все то, что стоит за простыми строками инициализации объектов, вызова методов и передачи параметров. Ну и, разумеется, использование этих сведений на практике — вычитывание стека вызывающего метода.

Дисклеймер


Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье.

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

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

Начинаем с теории


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

Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments11

17 способов проникновения во внутреннюю сеть компании

Reading time18 min
Views55K
Безопасность. Слово означающие защищённость человека или организации от чего-либо/кого-либо. В эпоху кибербезопасности мы всё чаще задумываемся не столько о том, как защитить себя физически, сколько о том, как защитить себя от угроз извне (киберугроз).

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

image

Давайте посмотрим на современную сеть, которая используют самые новомодные технологии в области безопасности.
Total votes 30: ↑23 and ↓7+16
Comments24

О столе для работы стоя, здоровье позвоночника и личной эффективности

Reading time5 min
Views103K

С недавних пор я снова перешёл на 100% работу из дома и стал использовать стол для работы стоя. Хочу поделиться дампом своего опыта на тему здоровья, призвать закончить прокрастинировать и начать работать стоя.



Сначала, о том, почему стол для работы стоя — не панацея...

Читать дальше →
Total votes 102: ↑95 and ↓7+88
Comments282

20 вопросов, которые стоит задать IT-компании, прежде чем сменить работу

Reading time4 min
Views65K
Если бы меня попросили дать один универсальный совет всем, кто ищет работу в IT, я бы сказал: не стесняйтесь задавать побольше вопросов. Мало приятного в том, чтобы через месяц осознать, что новая компания/должность — совсем не то, что вы искали. А если это вакансия с релокацией, цена ошибки возрастает в разы.

Узнав как можно больше о компании и должности, вы уменьшаете риск оказаться «в неправильном месте». Вместе с командой экспертов по поиску работы за рубежом из Relocate.me, мы собрали 20 вопросов, которые стоит задать, прежде чем пойти на работу в новую компанию.


Читать дальше →
Total votes 42: ↑31 and ↓11+20
Comments21

Последствия несвоевременного удаления зубов мудрости. Часть I

Reading time4 min
Views249K
image
И снова здравствуйте! Сегодня хотелось бы написать мини пост и ответить на вопрос — «Зачем удалять зубы мудрости, если они не беспокоят?», и прокомментировать утверждение — «Моим родственникам и друзьям, папе/маме/деду/бабуле/соседу/коту — удаляли зуб и всё пошло не так. Абсолютно у всех были осложнения и теперь никаких удалений». Для начала, хотелось бы сказать, что осложнения возникли не от факта удаления зуба, а от того, как это удаление было проведено. Подобное могло случиться по нескольким причинам:
Читать дальше →
Total votes 62: ↑50 and ↓12+38
Comments165

Удаление зубов мудрости: как это делается?

Reading time6 min
Views346K
image
Уважаемые друзья, в прошлый раз мы с вами говорили о том, какие же бывают зубы мудрости, когда их нужно удалять, а когда нет. А сегодня я подробно и во всех деталях расскажу, как непосредственно проходит удаление «приговорённых» зубов. С картинками. Поэтому рекомендую особо впечатлительным людям и беременным женщинам нажать сочетание клавиш «Ctrl +». Шутка.
Читать дальше →
Total votes 111: ↑100 and ↓11+89
Comments191

Автономный способ обхода DPI и эффективный способ обхода блокировок сайтов по IP-адресу

Reading time7 min
Views700K
Провайдеры Российской Федерации, в большинстве своем, применяют системы глубокого анализа трафика (DPI, Deep Packet Inspection) для блокировки сайтов, внесенных в реестр запрещенных. Не существует единого стандарта на DPI, есть большое количество реализации от разных поставщиков DPI-решений, отличающихся по типу подключения и типу работы.

Существует два распространенных типа подключения DPI: пассивный и активный.

Пассивный DPI

Пассивный DPI — DPI, подключенный в провайдерскую сеть параллельно (не в разрез) либо через пассивный оптический сплиттер, либо с использованием зеркалирования исходящего от пользователей трафика. Такое подключение не замедляет скорость работы сети провайдера в случае недостаточной производительности DPI, из-за чего применяется у крупных провайдеров. DPI с таким типом подключения технически может только выявлять попытку запроса запрещенного контента, но не пресекать ее. Чтобы обойти это ограничение и заблокировать доступ на запрещенный сайт, DPI отправляет пользователю, запрашивающему заблокированный URL, специально сформированный HTTP-пакет с перенаправлением на страницу-заглушку провайдера, словно такой ответ прислал сам запрашиваемый ресурс (подделывается IP-адрес отправителя и TCP sequence). Из-за того, что DPI физически расположен ближе к пользователю, чем запрашиваемый сайт, подделанный ответ доходит до устройства пользователя быстрее, чем настоящий ответ от сайта.
Читать дальше →
Total votes 212: ↑212 and ↓0+212
Comments352

Помогаем Queryable Provider разобраться с интерполированными строками

Reading time5 min
Views7.1K

Тонкости Queryable Provider


Queryable Provider не справляется вот с этим:


 var result = _context.Humans
                      .Select(x => $"Name: {x.Name}  Age: {x.Age}")
                      .Where(x => x != "")
                      .ToList();

Он не справится с любым выражением, которое будет использовать интерполированную строку, но без трудностей разберет такое:


 var result = _context.Humans
                      .Select(x => "Name " +  x.Name + " Age " + x.Age)
                      .Where(x => x != "")
                      .ToList();

Особенно болезненно править баги после включение ClientEvaluation(исключениe при вычислении на клиенте), все профайлы автомаппера должны быть подвергнуты жесткому анализу, на поиск этой самой интерполяции. Давайте разберемся в чем дело и предложим свое решение проблемы

Читать дальше →
Total votes 37: ↑37 and ↓0+37
Comments18

Светодиодное враньё невиданных масштабов

Reading time3 min
Views260K
В магазинах можно встретить множество мощных светодиодных ламп, например «свечки» и «шарики» 9 и 11 Вт.

Вот только свечек и шариков такой мощности сегодня существовать не может.
Читать дальше →
Total votes 365: ↑364 and ↓1+363
Comments569

Как мы внедряли cache на БД Tarantool

Reading time9 min
Views6.3K
Доброго времени суток!

Хочу поделиться с Вами историей о внедрении cache на БД Tarantool и своих особенностях работы.
Я работаю Java разработчиком в телекоммуникационной компании. Основная задача: реализация бизнес логики для платформы, которую компания купила у вендора. Из первых особенностей это работа по soap и практически полное отсутствие кэширования, кроме как в памяти JVM. Все это конечно хорошо до тех пор, пока количество экземпляров приложения не переваливает за два десятка…

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

При дальнейшем поиске альтернатив и совета моего хорошего друга mr_elzor было принято решение попробовать БД Tarantool.
Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments4
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity