Типичный программист
Краткая история развития языков программирования
Фронтенд - Тайланд
Приехал на пару месяцев в Тай. И проглядывая местные вакансии понял, что хочется остаться)
Пишу на js около 7 лет. Front любой, чаще использовал вью2, вью3, но писал и на ангуляре и на реакте. Бэк поверхностно, - джанго, фастапи, - питон, и лара.
Остальное вспоминать и перечислять долго)
Всегда работал на опыте и самообучении, курсы по мелочи в самом начале, вышки нет:(
Может есть кто отсюда, кому нужен фронт?
Есть ли шанс иностранцу без вышки трудоустроиться с рабочей визой?
Стоит ли обратиться за «быстрым» дипломом?
Спасибо
Под капотом каналов в golang
Внутренняя реализация каналов в Go основана на механизме синхронизации и передачи данных между горутинами.
Каналы в Go представляют собой типизированные очереди, которые позволяют горутинам обмениваться данными. Они гарантируют безопасность доступа к данным и синхронизацию выполнения горутин.
Внутренняя реализация каналов в Go включает в себя следующие компоненты:
Структура channel: Когда вы создаете канал в Go, создается структура channel, которая содержит информацию о типе данных, буфере (если он есть) и других метаданных канала.
Буфер: Каналы могут иметь опциональный буфер, который позволяет хранить определенное количество элементов перед тем, как горутина будет заблокирована при попытке отправки данных в полностью заполненный канал или получении данных из пустого канала. Буфер реализован с помощью внутренней очереди FIFO (First-In-First-Out).
Мьютексы: Для обеспечения безопасности доступа к данным в канале используются мьютексы (mutexes). Мьютексы блокируют доступ к данным, пока другая горутина не освободит их. Это позволяет предотвратить состояние гонки (race condition) при одновременной записи и чтении данных из канала.
Указатели на горутины: Каналы хранят указатели на горутины, которые ожидают отправки или получения данных. Когда горутина отправляет данные в канал или получает данные из канала, она блокируется, пока другая горутина не освободит канал.
Системные вызовы: Внутренняя реализация каналов включает системные вызовы операционной системы для блокировки и разблокировки горутин при отправке и получении данных из канала. Это обеспечивает эффективное использование ресурсов и предотвращает блокировку всей программы.
В целом, внутренняя реализация каналов в Go обеспечивает безопасность доступа к данным и синхронизацию выполнения горутин. Это позволяет разработчикам писать безопасный и эффективный код для параллельного выполнения задач.
Интересные факты и фичи языков программирования у нас в канале, заходи :)
Польза и вред макросов в С++
Макросы в C++ представляют собой инструкции, которые препроцессор обрабатывает перед компиляцией кода. Они позволяют осуществлять текстовую замену в исходном коде, что может быть полезно для автоматизации и упрощения некоторых задач.
Макросы определяются с помощью директивы #define, которая указывает компилятору на то, что следующая строка содержит определение макроса. Например, следующий код определяет макрос для вычисления квадрата числа:
#define SQUARE(x) ((x) * (x))
После определения макроса, его можно использовать в коде, как обычную функцию. Например:
int result = SQUARE(5); // result будет равен 25
В данном примере, при компиляции кода, препроцессор заменит все вхождения макроса SQUARE на соответствующее выражение ((x) * (x)).
Макросы также могут иметь параметры и условия. Например, следующий макрос проверяет, является ли число четным:
#define IS_EVEN(x) ((x) % 2 == 0)
Макросы могут быть полезными инструментами для упрощения кода и повышения его читаемости. Однако, их использование может быть злоупотреблено и привести к сложностям в отладке и понимании кода. Поэтому рекомендуется использовать макросы с осторожностью и только там, где они действительно необходимы.
Интересные факты и фичи языков программирования у нас в канале, заходи :)