Библиотека Go для собеса | вопросы с собеседований
6.86K subscribers
218 photos
6 videos
1 file
414 links
Вопросы с собеседований по Go и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/0b524a15

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
💬 Что такое JWT аутентификация и где она используется?

JWT (JSON Web Token) аутентификация — это способ передачи и проверки данных между сторонами в закодированном формате JSON. Токен состоит из трех частей: заголовка, claims и подписи, что делает его безопасным для передачи информации, так как данные могут быть проверены на подлинность, но не зашифрованы.

📌 Где используется:
JWT часто используется для:
1. Аутентификации — после успешного логина пользователю выдается JWT-токен, который прикрепляется к каждому последующему запросу для доступа к защищенным ресурсам.
2. Авторизации — токен может содержать информацию о правах доступа пользователя.

📌 Преимущества:
🔸 Позволяет безопасно передавать данные между клиентом и сервером.
🔸 JWT самодостаточен — не требует постоянной проверки на сервере, так как содержит всю необходимую информацию в себе.
🔸 Широко используется в REST API для аутентификации.
👍81
Опрос «Как вы учитесь с помощью телефона: поделитесь своим опытом!»

Дорогие подписчики, мы на миссии улучшений, и вы — наш ключ! 🔑


Мы хотим стать ещё круче, и для этого нужно узнать, как вы учитесь!

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

Займёт всего 5 минут — как раз успеете за чашкой кофе! А за ваш ценный вклад мы дарим 15% скидку на все курсы https://proglib.academy/ 🎁
🤔 Основы математики в Machine Learning / Deep Learning

🗓 16 октября мы разберем ряд Тейлора, собственные векторы и другие ключевые понятия в ML – https://proglib.io/w/71ad9706

Спикер: Иван Потапов – Staff Machine Learning Engineer at ShareChat. Руководит командой, отвечающей за качество рекомендаций, и имеет 8-летний опыт в сфере машинного обучения.

😮 Что будем обсуждать:

– Теорию вероятностей: случайные величины, математическое ожидание и дисперсию.

Линейную алгебру: векторы, матрицы, собственные векторы и собственные значения.

Математический анализ: производные и разложение функций в ряд Тейлора.

👨‍💻 А еще после каждого блока вас ждет практика в применении полученных знаний.

🎯 Почему это важно?
Понимание математических основ помогает глубже разобраться в работающих под капотом алгоритмах ML/DL и эффективно применять их на практике.

Присоединяйтесь к нам и совершенствуйте свои навыки в машинном обучении!

📌 Регистрация по ссылке: https://proglib.io/w/71ad9706
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🎭 Двойная игра в Power BI: как совмещать роли разработчика и администратора

Когда твой руководитель говорит: «А теперь ты еще и администратор сервера Power BI». Гид по выживанию для разработчика, внезапно ставшего многостаночником.

Читать статью
💬 Объясните назначение основных методов sync.Map в Go.

sync.Map
в Go предоставляет набор атомарных методов для работы с мапой, поддерживающих конкурентный доступ:

Load, Store, Delete, Clear — это базовые операции, работающие так же, как методы обычной мапы в Go.
Swap заменяет старое значение новым и возвращает предыдущее значение. Этот метод также используется внутри Store().
LoadOrStore проверяет наличие ключа. Если ключ существует, метод возвращает текущее значение и loaded будет равно true. Если ключа нет, он сохраняет новое значение и возвращает его, при этом loaded будет равно false.
LoadAndDelete пытается загрузить значение по ключу. Если ключ существует, он удаляет его и возвращает значение, при этом loaded будет true. Если ключ не найден, возвращается false.
CompareAndDelete и CompareAndSwap — это условные операции. Эти методы удаляют или заменяют значение, только если текущее значение ключа соответствует старому. Если сравнение прошло успешно, ключ удаляется или обновляется, и метод возвращает true, иначе — false.
Range(f) позволяет итерировать по мапе, применяя функцию f к каждой паре ключ-значение. Если функция возвращает false, итерация прекращается (аналогично break в цикле for).

Все эти методы являются атомарными, но у Range есть особенность: мапа не блокируется на всё время итерации, что позволяет другим горутинам добавлять, изменять или удалять записи во время выполнения цикла.
👍5🌚1
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования

🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
💬 Для чего предназначена директория internal в проекте на Go?

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

Преимущества:

▪️Инкапсуляция: мы сигнализируем, что код внутри internal является «частным» и не предназначен для использования другими модулями.
▪️Безопасность: Go автоматически запрещает импортировать код из директории internal, даже если кто-то захочет это сделать.
▪️Гибкость в рефакторинге: мы можем свободно изменять код и API внутри internal, не беспокоясь о том, что сломаем зависимости внешних пользователей.

Недостатки (особенности):

▪️Мы не можем импортировать код из internal, даже если позже это потребуется. Это может вызвать путаницу для новичков, которые не знают этой особенности.

👉 Подробнее
👍7🌚21🥰1
💬 Для чего предназначен пакет flag в Go?

Пакет flag предоставляет возможность считывать аргументы командной строки (или флаги). Он поддерживает считывание различных типов данных, включая строки, целые числа и логические значения, что делает его универсальным для различных видов приложений.

Простой пример:

package main

import (
"flag"
"fmt"
)

func main() {
name := flag.String("name", "Worl "a name to say hello to")
flag.Parse()
fmt.Printf("Hello, %s!\n", *name)
}

go run main.go -name=Gopher


Hello, Gopher!


👉 Подробнее
👍81
📹 Секреты внутреннего устройства аллокатора Go: видеогайд от Владимира Балуна

⏱️ Таймкоды:

00:00 Введение
01:49 Концепция аллокатора
06:09 Линейный аллокатор
11:22 Блочный аллокатор
16:21 Стековый аллокатор
20:18 Устройство malloc
25:01 Недостатки malloc
26:55 Устройство tcmalloc
28:28 Устройство аллокатора Go
32:55 Предсказуемая фрагментация памяти
40:33 Где аллоцируются объекты в Go
51:11 Почему аллокация на стеке работает быстрее, чем в куче
52:35 Расширение и уменьшение стека в Go
58:12 Зачем это все нужно знать (практические примеры)
01:03:37 Пулы объектов (sync.Pool)
01:06:57 Арены (memory arenas)
01:14:30 Аллокатор ОС

▶️ YouTube | Rutube | VK
👍3🔥1
💬 В Go существует возможность скрывать методы с помощью встраивания структур. Как можно сделать так, чтобы метод, реализующий интерфейс, был скрыт при приведении типа, даже если он присутствует у встраиваемой структуры?

Например, есть тип A, который имеет метод Hello(). Когда мы передаём экземпляр A в функцию Greet(), приведение успешно выполнится к интерфейсу Greeter, и будет вызван метод Hello().

Теперь, допустим, мы хотим использовать тип A, но не хотим, чтобы его метод Hello() был доступен. Мы можем скрыть его с помощью embedding.

Когда мы вызываем Greet(ANoHello{A: A{}}), приведение типа к интерфейсу не удаётся.

Хотя ANoHello встраивает тип A, который имеет корректный метод Hello(), приоритет получает неэкспортируемый тип noHello, который скрывает метод Hello().
🤔8👍31😁1
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
1👍1
Когда в Go следует использовать псевдонимы типов?

Type aliases — полезный инструмент, но их следует использовать с осторожностью. Вот несколько распространённых сценариев, в которых они могут быть особенно полезны:

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

type JSONResponse = map[string]interface{}


🔸 Повышение удобочитаемости кода для конкретной предметной области. Если проект включает в себя модели предметной области или бизнес-логику, псевдонимы типов могут повысить читаемость.

type OrderID = string
type PaymentStatus = string

const (
Pending PaymentStatus = "pending"
Completed PaymentStatus = "completed"
Failed PaymentStatus = "failed"
)


🔸 Упрощение дженериков (Go 1.18+)
В Go 1.18 появились дженерики, которые позволяют функциям работать с любым типом данных. Псевдонимы типов могут упростить использование дженериков в сигнатурах функций.

type List[T any] = []T

func printList[T any](list List[T]) {
for _, item := range list {
fmt.Println(item)
}
}
👍122
⚡️Разыгрываем флагманский смартфон

«Библиотека программиста» разыгрывает один из трех смартфонов на выбор:
🔹Samsung Galaxy S24 Ultra на 1 ТБ
🔹Xiaomi 14 Ultra на 512 ГБ
🔹iPhone 16 Pro Max на 512 ГБ

🔥 А еще 99 участников розыгрыша получат скидку 50% на наш курс Базовые модели ML и приложения!
Промокод будет действителен до 20 ноября.

Условия просты:
→ подписаться на Библиотека нейротекста
→ подписаться на Библиотека нейрозвука
→ подписаться на Библиотека нейрокартинок
→ нажать на кнопку «Участвовать» под этим постом

Итоги появятся 30 октября в 20:00 по московскому времени в нашем канале Библиотека программиста. Затем мы свяжемся с победителем, который сам выберет смартфон. Тем, кто получит промокод, мы вышлем его в течение недели после окончания розыгрыша.

⚠️ Убедитесь, что вам можно написать в личные сообщения или следите за результатами — если мы не сможем с вами связаться, то не сможем и отправить приз. Доставить мы можем только в города России и Беларуси.
💬 Для чего предназначен интерфейс io.Seeker?

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

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

Его функция принимает два аргумента: offset, который указывает, насколько нужно сместить курсор, и whence, который задаёт точку отсчёта:

os.SeekStart: перемещает курсор относительно начала файла.
os.SeekCurrent: перемещает курсор относительно его текущего положения.
os.SeekEnd: перемещает курсор относительно конца файла, чаще всего с отрицательным смещением.
👍13
🧪 Чем заменить Postman: 5 отличных инструментов для разработки API

Postman долгое время был основным инструментом для разработки и тестирования API, но сейчас для большинства разработчиков его ограничения стали перевешивать преимущества. Рассмотрим альтернативные инструменты, которые могут предложить больше возможностей, чем Postman — даже в бесплатной версии.

👉Читаем здесь
🥱3👍2
💬 Можно ли в Go преобразовывать срезы в массивы или указатели на массивы?

Такая возможность была добавлена в Go 1.20. Когда нужно преобразовать срез в массив фиксированного размера, нельзя сделать это напрямую, как показано ниже:

a := []int{0, 1, 2, 3, 4, 5}
var b[3]int = a[0:3]

// cannot use a[0:3] (value of type []int) as [3]int value in variable
// declaration compiler(IncompatibleAssign)


Чтобы преобразовать срез в массив, команда Go обновила эту функцию в Go 1.17. А с выпуском Go 1.20 процесс преобразования стал ещё проще и удобнее с помощью новых литералов:

// Go 1.20
func main() {
a := []int{0, 1, 2, 3, 4, 5}
b := [3]int(a[0:3])

fmt.Println(b) // [0 1 2]
}


// Go 1.17
func main() {
a := []int{0, 1, 2, 3, 4, 5}
b := *(*[3]int)(a[0:3])

fmt.Println(b) // [0 1 2]
}


P. S.: можно использовать a[:3] вместо a[0:3].
15👍112
🤔 Нужна ли математика на собеседованиях?

🗓 Сегодня в 20:00 встречаемся в прямом эфире, чтобы обсудим роль математики на собеседовании, а также поделимся инсайдами как успешно пройти техническое собеседование! https://proglib.io/w/a1fe2494
🌟 Спикер: Станислав Петров – Senior Data Scientist.

😮 На вебинаре вы узнаете:

😱 Ошибаться — не страшно. Как ошибки и неудачные проекты могут стать ценным опытом. Почему «проекты в стол» способствуют профессиональному росту. И как преодолеть путь от junior до senior.

🙌🏻 Собеседования: можно ли к ним не готовиться?! Поделимся эффективными стратегиями подготовки и расскажем, на что работодатели обращают внимание в первую очередь.

✍️ Разберем реальные тестовые задачи, которые дают на собеседованиях на позицию Data Scientist.

🎁 Бонус: расскажем как проводить эффективное тестирование в маркетинге и их масштабируемость.

🎯 Почему важно посетить вебинар?

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

• Расширьте свой профессиональный кругозор и подготовьтесь к новым карьерным вызовам.

👉 Присоединяйтесь к нам и узнайте, как математика может помочь в вашей карьере https://proglib.io/w/a1fe2494
🔥1
🔥 Phuong Le представил очередную занимательную серию статей про I/O в Go:

▪️ Go I/O Readers, Writers и Data
▪️ Go I/O Closer, Seeker, WriterTo и ReaderFrom
👍2
💬 В Go есть несколько способов чтения файла построчно. Чем отличается использование bufio.Scanner от bufio.Reader для построчного чтения, и когда лучше использовать ioutil.ReadFile?

🔸 bufio.Scanner — простой и эффективный способ построчного чтения, который автоматически обрабатывает строки и подойдёт для большинства задач.
🔸 bufio.Reader с ReadString предоставляет больше контроля над чтением, позволяя задать разделитель, что может быть полезно для нестандартных форматов.
🔸 ioutil.ReadFile используется для чтения всего файла в память, но подходит только для небольших файлов, так как при больших объёмах данных это может перегрузить память.

⚡️ Update: функция ioutil.ReadFile устарела. Вместо нее используйте os.ReadFile.
👍171🤔1