Немного расширенный функционал Mutex в грядущем пакете "go101․org/nstd".
vs
#Golang
@golang_interview
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
На схеме показаны типовые конструкции API на примере корзины товаров.
@golang_interview
Будет ли в 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
- Лучшая альтернатива round-robin
- Различные запросы от одного и того же пользователя поступают на один и тот же эндпоинт.
👉 Hash-Based
- Алгоритм распределяет запросы на основе хэша значения ключа.
- В качестве ключа может выступать IP-адрес или URL-адрес запроса
👉 Weighted Round Robin
- Каждый сервер получает значение веса.
- Это значение определяет долю трафика.
- Серверы с большим весом получают больше трафика. Хорошо подходит для систем с серверами разной мощности
👉 Наименьшее количество соединений
- Новый запрос отправляется на тот экземпляр сервера, который имеет наименьшее количество соединений.
- Количество подключений определяется исходя из относительной вычислительной мощности сервера
👉 Наименьшее время отклика
- Новый запрос отправляется на сервер с наименьшим временем отклика, чтобы минимизировать общее время отклика.
- Хорошо подходит для случаев, когда время отклика критично.
Протестируйте балансировку нагрузки телеграм с помощью кнопки LIKE👍.
@golang_interview
Они могут обрабатывать миллионы входящих запросов, распределять трафик между серверами и вообще поддерживать бесперебойную работу при минимальной настройке.
Почему?
Потому что балансировщики нагрузки могут использовать некоторые действительно мощные алгоритмы на лету.
В общем случае существует две категории таких алгоритмов:
✅ Статические
- 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
В этой статье проиллюстрирована попытка определить схему подключения программ на языке 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
Все связанные проверки в следующем коде фактически не нужны, можете объяснить почему ?: https://github.com/golang/go/issues/64272
@golang_interview
Сложность: Средняя
Условие задачи: На входе имеем список возможных кандидатов и целевое значение суммы, необходимо вывести все комбинации, которыми можно получить целевое значение.
Каждое число из списка кандидатов должно содержаться в конечном подсписке из ответов ровно один раз.
Результирующий ответ не должен содержать в себе дубликатов.
Пример:
Ввод:
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
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
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
Условие: идеальное число - это положительное целое число, которое равно сумме делителей этого же числа, за исключением самого числа.
Необходимо проверить входное число на идеальность.
Пример:
Ввод: 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 позволяет запускать в браузере код низкоуровневых языков, таких как 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