Войти в ойти

Логотип телеграм канала @v0iti — Войти в ойти В
Логотип телеграм канала @v0iti — Войти в ойти
Адрес канала: @v0iti
Категории: Технологии
Язык: Русский
Количество подписчиков: 36
Описание канала:

Войти в ойти - это канал о программировании и it :-) Я постараюсь разбавлять новости и интересные мне заметки о программировании информацией про айти для новичков.
Скорее всего получится упор на GoLang и PHP, так как это мои основные ЯП.
Автор: @s_romko

Рейтинги и Отзывы

4.00

3 отзыва

Оценить канал v0iti и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

1

3 звезд

1

2 звезд

0

1 звезд

0


Последние сообщения

14 янв 2023
Субботний вечер, самое то рассказать про классную книгу, которую я использовал как пособие по подготовке к собеседованию system design. Как я ранее и говорил, данная часть собеседования - это по сути монолог и поток ваших мыслей, что делать, как и почему.
https://telegra.ph/System-Design-Podgotovka-k-slozhnomu-intervyu-01-14-2

#interview
11 views15:54
Подробнее
Поделиться:
Открыть/Комментировать
13 янв 2023
Считаю важно каждый день что-то новое читать или разбирать - это позволяет быть в тонусе и постоянно по чуть-чуть расширять свой кругозор, обогощать теоритическую базу и просто не забывать буквы
Сегодня я почитал про open source проекты и как можно к ним присоединиться, честно всегда хотел попробовать сделать что-то полезное для OS, но не решался, скорее всего из-за все того же синдрома самозванца... Но когда-нибудь я точно осмелюсь и попробую запилить какой-нибудь полезный код в open source библиотеку или программу А пока предлагаю и вам ознакомиться со списком того, чем может помочь почти каждый

https://habr.com/ru/post/710386/

#open_source
11 viewsedited  09:31
Подробнее
Поделиться:
Открыть/Комментировать
12 янв 2023
Классная статья про прохождение секции алгоритмы на собесах. Помню читал её ещё когда готовился к собеседованию - зашло и помогло :) Делюсь и с вами.

https://habr.com/ru/company/avito/blog/662922/

#interview
12 views18:57
Подробнее
Поделиться:
Открыть/Комментировать
12 янв 2023
Если рассуждать дальше о состоянии гонки, то кажется, что если у вас приложение имеет места с конкурентным доступом к данным, то для отслеживания деградации в этих местах стоит включить флаг -race для части тестов. Если прикинуть, то тесты это самое оптимальное место, где можно отслеживать состояние гонки, так как:
- в тесте мы можем подготовить какие-то сложные, пограничные случаи;
- мы не будем бояться сломать сложные, для отладки и ручного тестирования, места программы;
- продовое приложение не будет потреблять ресурсы на это дело.

Из пирамиды тестирования, думаю, такую практику можно применять к интеграционным тестам и функциональным. Но есть одно "но", данные для тестов должны быть приближенными к реальным и реально запускать функционал с конкурентным доступом к данным, иначе ничего не поймаем и не обретем уверенность :)

#go
13 views11:48
Подробнее
Поделиться:
Открыть/Комментировать
12 янв 2023
Вчера мы уже обсуждали состояние гонки. Давайте попробуем лучше понять как работает детектор состояния гонки. Итак, состояние гонки (race conditions) - ошибка проектирования многопоточной системы или приложения, при которой работа системы или приложения зависит от того, в каком порядке выполняются части кода. Данная ошибка сложна для поиска, так как может возникать не всегда, а только при определенных условиях.

Начиная с версии 1.1 в Golang есть встроенный инструмент для поиска состояния гонки в приложении. Детектор гонки основан на библиотеке времени выполнения (runtime library) C/C++ ThreadSanitizer, которая использовалась для обнаружения многих ошибок во внутренней кодовой базе Google и в Chromium. Детектор гонки запускается, когда мы передаем флаг -race, тогда компилятор обрабатывает все обращения к памяти с помощью кода, который записывает, когда и как был осуществлен доступ к памяти. Библиотека времени выполнения отслеживает несинхронизированные обращения к общим переменным и в случае обнаружения проблем выдает предупреждение. В предупрждении будут зафиксированы все проблемные ситуации, каждая будет начинаться со слов WARNING: DATA RACE.

Как уже было ранее продемонстрированно запустить детектор состояния гонки очень просто, необходимо просто указать флаг -race:

go test -race app
go run -race app.go
go build -race app


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

Можно еще почитать на wiki https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8

#go
11 views07:00
Подробнее
Поделиться:
Открыть/Комментировать
11 янв 2023
Честно, пока трудно самому представить задачи, где это потребуется, но в целом идея выделения памяти, в которой не работает сборщик мусора - это интересно. Как минимум в некоторых кейсах может улучшить производительность.
https://habr.com/ru/company/otus/blog/710124/

#go
12 views14:47
Подробнее
Поделиться:
Открыть/Комментировать
11 янв 2023
Продолжаем осваивать Go, сразу скажу, я не хочу из канала сделать набор уроков с четкой структурой, наоборот, что сам применяю или тестирую - об этом и пишу )

Итак, сегодня я попробовал написать программу, которая в горутинах увеличивает счетчик при помощи пакета atomic. Atomic - это пакет содержащий функции для атомарных операций. Атомарная операция - это операция, выполняемая за один шаг относительно других горутин. Мы избегаем состояния гонки и можем безопасно изменять переменную. Код:


package main

import (
"fmt"
"sync"
"sync/atomic"
)

type atomCounter struct {
counter int64
}

func (a *atomCounter) value() int64 {
return atomic.LoadInt64(&a.counter)
}

func (a *atomCounter) add(value int64) {
atomic.AddInt64(&a.counter, value)
}

func main() {
var wg sync.WaitGroup
var counter atomCounter
for i := 0; i < 100; i++ {
wg.Add(1)
go func(counter *atomCounter) {
defer wg.Done()
for j := 0; j < 10; j++ {
counter.add(5)
}
}(&counter)
}
wg.Wait()
fmt.Println(counter.value())
}


Мы определили структуру и два метода. Первый для получения текущего значения счетчика, второй для увеличения счетчика на заданную величину. Далее создаем 100 горутин и в цикле каждой увеличиваем счетчик на 5. Дожидаемся выполнения и выводим результат. Мы получим следующий результат: 5000. Чтобы убедиться, что наш счетчик с atomic корректно работает, попробуем заменить строчку counter.add(5) на арифметическую counter.counter += 5, в результате получим, например, 4970. Почему, например? Потому что результат будет не постоянным из-за состояния гонки, убедиться в наличии состояния гонки можно так:

go run -race atomic.go

Результат:

WARNING: DATA RACE

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

#go
13 viewsedited  08:10
Подробнее
Поделиться:
Открыть/Комментировать
10 янв 2023
Отличная статья guide по настройке и офрмлению GitHub репозитория для open-source библиотеки. Не обращайте внимания, что в заголовке информация про фронтенд разработчика - данный гайд применим к любым языкам программирования и it направлениям! В общем рекомендую добавлять в избранное и когда у вас появится желание сделать open-source библиотеку, вы будете знать, где найти чек-лист и гайд

https://habr.com/ru/company/inDrive/blog/706662/

#open_source #guide
16 views11:03
Подробнее
Поделиться:
Открыть/Комментировать
10 янв 2023
Ого, сегодня отмечает день рождения Дональд Кнут! Автор "Искусство программирования", помню когда только начинал свой путь в IT, была шутка (а может и нет), что если вы осилили и поняли труды Дональда Кнута, то добро пожаловать в Google. Помню открывал его книги...я не смог осилить, но это я ленивый и не образованный, а не книги плохие В общем долгих лет Дональду!

Согласно вики "На январь 2013 года Кнут занимал 37-е место в списке самых цитируемых авторов в области информатики согласно проекту CiteSeer."

Обложка третьего издания первого тома книги содержит цитату Билла Гейтса: «Если вы считаете себя действительно хорошим программистом…, прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определённо следует отправить мне резюме».

Вот тут можно почитать еще интересных фактов из его жизни https://22century.ru/popular-science-publications/donald-knuth
16 viewsedited  09:19
Подробнее
Поделиться:
Открыть/Комментировать
10 янв 2023
Если вы хотите войти в ойти, то будьте готовы к работе удаленно. Это с виду кажется, что дома работать намного проще, но на самом деле все может оказаться наоборот. Почему? Все просто, работая дома, вы самостоятельно должны следить за своей продуктивностью, сами садиться за комп и не отвлекаться на домашние дела и семью, даже когда ребенок бегает вокруг

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

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

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

https://habr.com/ru/post/709462/

#tip
16 views06:27
Подробнее
Поделиться:
Открыть/Комментировать
9 янв 2023
Если вдруг вы будете проходить собеседование по проектированию, не только перечисляйте варианты решения, но и делайте явный выбор, что бы вы использовали. А решения, которое выбираете, не забывайте указывать его преимущества и недостатки. Собеседование по проектированию - это в основном монолог и озвучивание ваших мыслей и хода рассуждений, как реализовать ту или иную функциональность.

#interview #tip
16 views15:26
Подробнее
Поделиться:
Открыть/Комментировать
9 янв 2023
Еще одна классная подсказка по Go Generics
https://gosamples.dev/generics-cheatsheet/

#go #cheatsheet
15 views13:46
Подробнее
Поделиться:
Открыть/Комментировать
9 янв 2023
Интересная статья от VK (Никита Галушко) про внутренности Go и как он реализует инлайнинг. В целом изучение таких моментов и как это работает внутри - очень полезно, даже если только часть информации отложится с первого раза в голове - это уже будет отличным результатом, так как может улучшить и ваш код и позволить вести более интересную беседу на собеседованиях
https://habr.com/ru/company/vk/blog/686758/

#go
17 views09:10
Подробнее
Поделиться:
Открыть/Комментировать
8 янв 2023
Классный Go cheatsheet по синтаксису
https://devhints.io/go

#go #cheatsheet
17 viewsedited  14:23
Подробнее
Поделиться:
Открыть/Комментировать
8 янв 2023
И раз мы затронули PHP напомню, что в декабре вышло большое обновление PHP 8.2, вдруг кто пропустил в предновогодней суматохе PHP 8.2 включает:
- Readonly-классы
- Типы в виде дизъюнктивной нормальной формы (ДНФ)
- Самостоятельные типы null, false и true
- Новый модуль "Random"
- Константы в трейтах
- Динамические свойства объявлены устаревшими

А также улучшена производительность, добавлены новые классы, интерфейсы и функции. Подробнее можно прочитать на официальном сайте https://www.php.net/releases/8.2/ru.php

#php
17 views11:13
Подробнее
Поделиться:
Открыть/Комментировать
8 янв 2023
В продолжение вчерашней темы про переход с PHP на Go, стоит отдельно отметить, что если вы на PHP используете строгую типизацию, то переход на Golang будет проще. На всякий случай напомню, что PHP начиная с версии 7.0 поддерживает указание типа параметров функции и возвращаемого значения. С версии 7.4 появились типизированные свойства. По умолчанию PHP работает в нестрого-типизированном режиме, если вы хотите работать в строгом режиме, нужно во всех файлах указывать:

declare(strict_types = 1)

Если вы еще не работаете в строгой типизации на PHP, то сейчас самое время начать Строгая типизация дает:
- больший контроль над данными (переменные, что куда и в каком виде передаете)
- код становится читабельнее
- код становится "строже" и можно смело подключать PHPStan на максималках

Так же напомню ссылочку на документацию https://www.php.net/manual/ru/language.types.declarations.php

#php #go
16 views11:02
Подробнее
Поделиться:
Открыть/Комментировать
7 янв 2023
Сегодня расскажу немного про свой опыт перехода с PHP на Go.

С начала 2022 года я предпринял очередную попытку по изучению языка программирования Go. До этого я уже учил его, но не так активно, так как не было понимания, куда с этими знаниями податься :) Изучение начал с курса на степике, прочтения книги с базой языка и посещения лекций, которые проводил мой товарищ. В совокупности это все дало, довольно быстрое понимание, что есть Go, но отсутствие практики и времени на пет-проект не давало возможности двигаться дальше.

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

Первое впечатление от языка, когда решаешь реальные задачи - "воу, он реально быстрый", дальше табличные тесты (wtf?) - вот тут кажется надо пройти все стадии от гнева до принятия :)

Я стараюсь много читать про Go, но как ни крути с первого раза все в голове не укладывается и, например, некоторые темы про аллокацию памяти, escape анализ и прочее - периодически перечитываю )

В данном посте я напишу список материалов для новичков в Go, в будущем будем дополнять его в отдельных постах. Итак, я бы порекомендовал следующее:
- Официальный сайт - https://go.dev/ - место откуда стоит начать изучение
- Язык Go Для Начинающих, Максим Жашкевич (2020)
- Введение в программирование на Go, Калеб Докси
- Go (Golang) - первое знакомство - https://stepik.org/course/100208/syllabus

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

#go
24 views07:35
Подробнее
Поделиться:
Открыть/Комментировать
7 янв 2023
Глубокое погружение в рекомендательную систему Netflix - довольно интересная статья про рекомендательную систему, деталей реализации вы не найдете, но для расширения кругозора самое то.
https://habr.com/ru/post/677396/
25 views07:13
Подробнее
Поделиться:
Открыть/Комментировать
6 янв 2023
Решение задачи про конвейер на Go.
https://telegra.ph/Realizovat-konvejer-na-Go-01-06

#go #interview
26 views10:09
Подробнее
Поделиться:
Открыть/Комментировать
5 янв 2023
Для тех кто не может выйти из Vim...
22 views13:59
Подробнее
Поделиться:
Открыть/Комментировать