Golang вопросы собеседований
13.5K subscribers
625 photos
3 videos
1 file
432 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
加入频道
This media is not supported in your browser
VIEW IN TELEGRAM
6️⃣ Популярных стилей архитектуры API, которые необходимо знать.

1. gRPC — это система удалённого вызова процедур с открытым исходным кодом, в качестве транспорта используется HTTP/2, в качестве языка описания интерфейса — Protocol Buffers. gRPC предоставляет такие функции как аутентификация, двунаправленная потоковая передача и управление потоком, блокирующие или неблокирующие привязки, а также отмена и тайм-ауты. Генерирует кроссплатформенные привязки клиента и сервера для многих языков. Чаще всего используется для подключения служб в микросервисном стиле архитектуры и подключения мобильных устройств и браузерных клиентов к серверным службам.

2. SOAP: Протокол для обмена структурированной информацией при реализации веб-сервисов, известный своими строгими стандартами и форматом сообщений на основе XML.

3. GraphQL: Язык запросов и среда выполнения для API, позволяющая клиентам запрашивать только те данные, которые им необходимы, что уменьшает избыточную и недостаточную выборку данных.

4. Webhook: Механизм взаимодействия в реальном времени, при котором приложение отправляет HTTP POST-запросы на заранее определенный URL-адрес для уведомления и запуска действий в другой системе.

5. REST: Representational State Transfer - архитектурный стиль проектирования сетевых приложений, использующий стандартные методы HTTP (GET, POST, PUT, DELETE) для манипулирования ресурсами.

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

#junior

@golang_interview
FSRouter - это простая библиотека маршрутизатора файловой системы для Go, предназначенная для простой интеграции с большинством библиотек маршрутизаторов http. Она использует соглашение "NextJS" для получения маршрутов непосредственно в виде иерархии файлов директорий.

go get -v -u github.com/aziis98/go-fsrouter

pages/
├── dashboard/[...all].html # => /dashboard/* (useful for SPAs)
└── user/
├── [name].html # => /user/:name
└── [name]/
└── posts/
└── [post].html # => /user/:name/posts/:post


Github

@golang_interview
💡 Задача: Взлом замка

Условие: даётся замок, состоящий из четырёх вращающихся дисков, на каждом из которых имеется 10 цифр: от 0 до 9. При этом за раз можно перемещать только одно колесо и на одно значение.

Изначально замок находится на значении «0000».

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

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

Пример:

Ввод:
deadends = ["0201","0101","0102","1212","2002"], target = "0202"
Вывод:
6
Объяснение:
последовательность, открывающая замок: "0000" -> "1000" -> "1100" -> "1200" -> "1201" -> "1202" -> "0202".

📌 Решение задачи

Пишите свое решение в комментариях👇


@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 K-ый наибольший элемент

Сложность: Лёгкая

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

Класс содержит следующие методы:

- KthLargest(int k, int[] nums) иниициализирует класс;
- int add(int val) добавляет элемент в спискок и возвращает k-ый наименьший согласно условию.

Пример:

Ввод:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]

Вывод:
[null, 4, 5, 5, 8, 8]
Объяснение:

KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8


📌 Решение

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔖 10 алгоритмов для интервью по системному проектированию

📌 Читать

@golang_interview
👣 Задача: Неубывающий подмассив

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

Вы можете вернуть ответ в любом порядке.

Пример:
Ввод:
nums = [4,6,7,7]
Вывод: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

Ввод: nums = [4,4,3,2,1]
Вывод: [[4,4]]

Решение

Пишите свое решение в комментариях👇

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🦫10 проектов для изучения Golang в 2023 году

Оптимальный способ освоить Golang — создавать проекты. Исследованиями показано, что учиться лучше на практике, это подтверждается и моим опытом. Вопрос в том, какие именно проекты создавать?

10 идей проектов на Golang для начинающих (с курсами):

1. Создание веб-сервера

Это отличный проект для начала веб-разработки на Golang. Настраивая сервер для обработки HTTP-запросов и отправки ответов обратно клиентам, вы узнаете о маршрутизации, обработке HTTP-методов, парсинге параметров запроса, работе со статическими файлами.

Начните со встроенного пакета net/http, этого надежного каркаса для создания HTTP-серверов. Настроив сервер, добавьте конечные точки для обработки GET-, POST-, PUT- и DELETE-запросов.

2. Создание системы управления книгами YSQL


Это проект для эффективного управления книжными фондами.

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

В целом это отличный проект для создания масштабируемых приложений баз данных, эффективный и простой в сопровождении благодаря Golang и YSQL.

3. Создание «Slackbot» для загрузки файлов

Это проект для загрузки файлов на канал Slack, доступ к каналу получается через его API. Создается приложение Slackbot с настройкой его разрешений, а также сервер для обработки загрузки файлов, который интегрируется со Slackbot.

Ваша команда часто обменивается файлами в Slack? Тогда проект для вас: здесь это делается быстро и легко, не выходя из интерфейса Slack.

4. Создание «AWS Lambda»

📌 Продолжение

@golang_interview
💡Задача: Префиксное дерево

Условие : префиксное дерево - это структура данных для эффективного хранения и извлечения ключей в массиве строк.

Необходимо реализовать класс со следующими методами:

- Trie() - инициализатор;
-
void insert(String word) - осуществляет вставку в экземпляр класса;
- boolean search(String word) - возвращает флаг о наличии слова word в дереве;
- boolean startsWith(String prefix) - возвращает флаг о том, начинается ли слово, вставленное на предыдущем шаге с prefix.

Пример:

Ввод:
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]

Вывод: [null, null, true, false, true, null, true]

Объяснение:
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // return True
trie.search("app"); // return False
trie.startsWith("app"); // return True
trie.insert("app");
trie.search("app"); // return True

Решение

Пишите свое решение в комментариях👇

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Легкий способ получать свежие обновлении и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

Машинное обучение: t.me/ai_machinelearning_big_data
Go: t.me/Golang_google
Базы данных: t.me/sqlhub
C++/ t.me/cpluspluc
Data Science: t.me/data_analysis_ml
Python: t.me/pythonl
Хакинг: t.me/linuxkalii
Devops: t.me/devOPSitsec
C#: t.me/csharp_ci
Java: t.me/javatg
Linux: t.me/+A8jY79rcyKJlYWY6
Мобильная разработка: t.me/mobdevelop
Docker: t.me/+0WdB4uvOwCY0Mjdi
Rust: t.me/rust_code
Javascript: t.me/javascriptv
React: t.me/react_tg
PHP: t.me/phpshka
Android: t.me/android_its
Big Data: t.me/bigdatai
Тестирование:https://yangx.top/+F9jPLmMFqq1kNTMy
Аналитика данных: https://yangx.top/+mAXY9ppJwitkMDBi

😆ИТ-Мемы: t.me/memes_prog

🇬🇧Английский: t.me/english_forprogrammers

📕Ит-книги бесплатно: https://yangx.top/addlist/BkskQciUW_FhNjEy

ИИ: t.me/vistehno

Книги по искусственному интеллекту

💼 Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: https://yangx.top/addlist/2Ls-snqEeytkMDgy
Папка Java разработчика: https://yangx.top/addlist/ZM3J6oFNAnRlNWU6
Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
⚡️ 20 сайтов, на которых можно найти удаленную работу с оплатой в долларах США

1. Remote. co: https://remote.co
2. We Work Remotely: https://weworkremotely.com
3. FlexJobs: https://flexjobs.com
4. Remote OK: https://remoteok.io
5. Working Nomads: https://workingnomads.co/jobs
6. Jobspresso: https://jobspresso.co
7. Stack Overflow Jobs: https://stackoverflow.com/jobs
8. AngelList: https://angel.co
9. LinkedIn: https://linkedin.com
10. SkipTheDrive: https://skipthedrive.com
11. Remotive: https://remotive.io
12. Виртуальные профессии: https://virtualvocations.com
13. JustRemote: https://justremote.co
14. Удаленная техническая работа: https://remotetechwork.com
15. Dynamite Jobs: https://dynamitejobs.co
16. Pangian: https://pangian.com
17. Outsourcely: https://outsourcely.com
18. Remote Woman: https://remotewoman.com
19. Jobmote: https://jobmote.com
20. EuropeRemotely: https://europeremotely.com

@golang_interview
👣 Задача от подписчика

Интересно как это можно было бы решить более оптимально:


Назовем натуральное число "особым", если все его цифры различны.
Для заданного положительного целого числа n верните количество особых целых чисел, принадлежащих интервалу [1, n].

Пример
Аргумент: n = 20
Вывод: 19
Обьяснение: Все числа от 1 до 20, кроме 11, являются особыми.
Таким образом, существует 19 особых целых чисел.

Ограничения
1 <= n <= 2 * 10^9


Мое решение на битовых операциях не очень оптимальным получилось: https://go.dev/play/p/bf_JqAV9YC8, есть идея еще добавить словарик для прогнанных значений

Пишите свое решение в комментариях👇

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
📌Максимальное среднее подмассива

Сложность: Easy

Условие задачи: Дан целочисленный массив nums, состоящий из n элементов и целого числа k.

Найдите непрерывный подмассив, длина которого равна k, который имеет максимальное среднее значение, и верните это значение. Будет принят любой ответ с ошибкой вычисления менее 10-5.

Пример:

Ввод:
nums = [1,12,-5,-6,50,3], k = 4
Вывод: 12.75000
Объяснение:

Ввод:
nums = [5], k = 1
Вывод: 5.00000

Решение

@golang_interview
🥳 Выпущены версии Go 1.21.4 и 1.20.11!

🔐 Безопасность: Включены исправления безопасности для path/filepath (CVE-2023-45283, CVE-2023-45284).

🗣 Анонс: https://groups.google.com/g/golang-announce/c/4tU8LZfBFkY

🗃 Скачать: https://go.dev/dl/#go1.21.4

@golang_interview
Немного расширенный функционал Mutex в грядущем пакете "go101․org/nstd".

m.Lock()
defer m.Unlock()


vs

defer m.Lock().Unlock()

https://github.com/golang/go/issues/63941

#Golang

@golang_interview
tg_image_1191967053.jpeg
342.3 KB
Как разрабатывать эффективные и безопасные API?

На схеме показаны типовые конструкции API на примере корзины товаров.

@golang_interview
👣 Что-то интересная #Golang и его количетсво звезд по всем репозиториям 🌠 по годам.

Будет ли в 2023 году больше или меньше звезд, чем в предыдущем? (на данный момент 2 610 110).

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Двумерный бинарный поиск

Условие: дана 2-мерная матрица чисел, в которой числа упорядочены по возрастанию сверху-вниз и слева-направо. Надо определить, есть ли в матрице целевое значение.

Пример:

Ввод:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
Вывод:
True

Ввод:
matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
Вывод:
Fasle

Решение

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Балансировщики нагрузки буквально в 100 раз лучше, чем старый добрый светофор.

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

Почему?

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

В общем случае существует две категории таких алгоритмов:

Статические

- Round Robin
- Sticky Round Robin
- Хэш
- Weighted Round Robin


Динамический

- Наименьшее количество соединений
- Наименьшее время отклика

Рассмотрим каждый алгоритм чуть более подробно

👉 Round Robin

- Запросы последовательно распределяются между группой серверов.

- Нет гарантии, что несколько запросов от пользователя попадут к одному и тому же экземпляру.

👉Sticky Round Robin

- Лучшая альтернатива round-robin

- Различные запросы от одного и того же пользователя поступают на один и тот же эндпоинт.

👉 Hash-Based

- Алгоритм распределяет запросы на основе хэша значения ключа.

- В качестве ключа может выступать IP-адрес или URL-адрес запроса

👉 Weighted Round Robin

- Каждый сервер получает значение веса.

- Это значение определяет долю трафика.

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

👉 Наименьшее количество соединений

- Новый запрос отправляется на тот экземпляр сервера, который имеет наименьшее количество соединений.

- Количество подключений определяется исходя из относительной вычислительной мощности сервера

👉 Наименьшее время отклика

- Новый запрос отправляется на сервер с наименьшим временем отклика, чтобы минимизировать общее время отклика.

- Хорошо подходит для случаев, когда время отклика критично.

Протестируйте балансировку нагрузки телеграм с помощью кнопки LIKE👍.

@golang_interview
👣 Погружаемся в кроличью нору - сложности динамического подключения хуков на Golang

В этой статье проиллюстрирована попытка определить схему подключения программ на языке Go.

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

https://blog.quarkslab.com/lets-go-into-the-rabbit-hole-part-1-the-challenges-of-dynamically-hooking-golang-program.html

#golang #infosec

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Смена операции

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

В результате необходимо получить это самое произведение.

Пример:

Ввод:
n = 2
Вывод: 1
Объяснение: 2 = 1 + 1, 1 × 1 = 1.

Ввод: n = 10
Вывод: 36
Объяснение: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36.

📌 Решение

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Текущий официальный стандартный компилятор Go по-прежнему делает много ненужных проверок на связанность.

Все связанные проверки в следующем коде фактически не нужны, можете объяснить почему ?: https://github.com/golang/go/issues/64272

@golang_interview