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
加入频道
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
👣 Комбинация сумм II

Сложность: Средняя

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

Каждое число из списка кандидатов должно содержаться в конечном подсписке из ответов ровно один раз.

Результирующий ответ не должен содержать в себе дубликатов.

Пример:

Ввод:
candidates = [10,1,2,7,6,1,5], target = 8
Вывод: [
[1,1,6],
[1,2,5],
[1,7],
[2,6]
]

Ввод: candidates = [2,5,2,1,2], target = 5
Вывод: [
[1,2,2],
[5]
]

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

🔗 Решение
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 500 самых высокооплачиваемых компаний (для инженеров-программистов)

https://github.com/miketromba/highest-paying-software-companies

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔧 12 инструментов аутентификации с открытым исходным кодом, которые помогут вам создавать лучшие приложения, некоторые из них написаны на golang

https://permit.io/blog/top-12-open-source-auth-tools

@golang_interview
💡Задача: Идеальное число

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

Необходимо проверить входное число на идеальность.

Пример:

Ввод:
num = 28
Вывод: true
Объяснение: 28 = 1 + 2 + 4 + 7 + 14

Ввод: num = 7
Вывод: false

👉 Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Нахождение существующего пути

Условие: дается ненаправленный граф, ребра которого представлены в массиве. Между каждой парой узлов в дереве имеется не более одного ребра.

Необходимо определить существует ли корректная дорога между узлом source и destination.

Пример:

Ввод:
n = 3, edges = [[0,1],[1,2],[2,0]], source = 0, destination = 2
Вывод: true
Объяснение: *во вложении

Ввод: n = 6, edges = [[0,1],[0,2],[3,5],[5,4],[4,3]], source = 0, destination = 5
Вывод: false

📌 Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🦫Работа с WebAssembly в Golang

WebAssembly позволяет запускать в браузере код низкоуровневых языков, таких как C, C++, Rust и Go. Мы компилируем Go-код в байт-код, и когда инстанцируем его в теге html-скрипта или JS-коде, среда выполнения браузера создает виртуальную машину для выполнения кода WebAssembly (wasm). Для распараллеливания выполнения WASM с основным потоком может использоваться веб-воркер.

Виртуальная машина задействует компилятор JUST IN TIME, который преобразует байт-код в машинный, а также может производить оптимизацию в зависимости от аппаратного обеспечения. WASM безопасен, поскольку работает в среде “песочницы” и не может получить доступ к аппаратному обеспечению базовой системы.

Когда мы загружаем или инстанцируем wasm, мы получаем модуль, который является пакетом Go-кода. При инстанцировании создается экземпляр wasm, являющийся отдельным контекстом выполнения модуля.

Хватит теории — перейдем к коду.

📌 Читать

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Отрезки пересечения отрезков

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

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

Пример:

Ввод:
firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Вывод: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]

Ввод: firstList = [[1,3],[5,9]], secondList = []
Вывод: [ ]

Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Ежедневная температура

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

Пример:

Ввод:
temperatures = [73,74,75,71,69,72,76,73]
Вывод: [1,1,4,2,1,1,0,0]

Ввод: temperatures = [30,40,50,60]
Вывод: [1,1,1,0]

Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Разность по потомкам

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

Условие задачи: Дан корень двоичного дерева, верните сумму наклона каждого узла дерева.

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

Пример:

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

Ввод:
root = [4,2,9,3,5,null,7]
Вывод: 15

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

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Задача: Максимальное количество сумок, полностью заполненных камнями

Условие: дается n-сумок, пронумерованных с нуля. Дается также два массива, проиндексированных аналогичным образом: capacity и rocks. i-а сумка может вмещать capacity[i] камней и в текущий момент содержит уже rocks[i] каменей. Помимо этого дается еще additionalRocks, число камней, которые можно добавить в произвольную сумку.

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

Пример:

Ввод:
capacity = [2,3,4,5], rocks = [1,2,4,4], additionalRocks = 2
Вывод:
3

Ввод:
capacity = [10,2,2], rocks = [2,2,0], additionalRocks = 100
Вывод:
3

Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Столбцы таблицы Excel

Сложность: Низкая

Условие : на вход подается номер столбца, необходимо конвертировать его в буквенное представление, которое будет использоваться в таблице-Excel.

Пример:

Ввод:
columnNumber = 1
Вывод:
"A"

Ввод: columnNumber = 28
Вывод:
"AB"

Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Самый длинный путь с разными соседними символами

Условие: дано дерево (т.е. связанный неориентированный граф, не имеющий циклов) с корнем в узле 0, состоящее из n узлов, пронумерованных от 0 до n - 1. Дерево представлено родительским массивом с индексом 0 размера n, где родительский элемент[i] является родительским элементом узла i. Поскольку узел 0 является корневым, родительский элемент[0] == -1.

Вам также выдаются строки длиной n, где s[i] - символ, присвоенный узлу i.

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

Пример:

Ввод:
parent = [-1,0,0,1,1,2], s = "abacbe"
Вывод: 3

Ввод: parent = [-1,0,0,0], s = "aabc"
Вывод: 3

Решение

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

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM