#полезное
😊 Как разобраться в GIT
Нашел два хороших ресурса, которые помогут обучиться GIT
🟠 Learn Git Branching — это такое крутое учебное пособие по Git, которое реально помогает понять теорию через практику
🟠 Oh My Git! — игра для обучения Git. Там визуализируются внутренние структуры репозиториев. Игра опенсорс, так что можно покопаться в исходниках
👉 Новости 👉 Платформа
Нашел два хороших ресурса, которые помогут обучиться GIT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой инструмент в Go используется для статического анализа кода и выявления потенциальных ошибок и проблем стиля?
Anonymous Quiz
29%
golint
23%
gofmt
16%
govet
32%
goanalyse
#ЛитКод
Задача: 311. Sparse Matrix Multiplication
Даны две разреженные матрицы mat1 размером m x k и mat2 размером k x n. Верните результат перемножения матриц mat1 x mat2. Вы можете предположить, что умножение всегда возможно.
Пример:
👨💻 Алгоритм:
1⃣ Инициализация результирующей матрицы
Создайте результирующую матрицу result размером m x n, заполненную нулями.
2⃣ Хранение ненулевых элементов
Пройдите по каждой строке матрицы mat1 и сохраните индексы и значения ненулевых элементов в хеш-карте mat1_map. Пройдите по каждой колонке матрицы mat2 и сохраните индексы и значения ненулевых элементов в хеш-карте mat2_map.
3⃣ Вычисление произведения
Для каждой строки i в mat1 и для каждой колонки j в mat2: Если в mat1_map есть ненулевой элемент в строке i и в mat2_map есть ненулевой элемент в колонке j с одинаковым индексом k, добавьте произведение этих элементов к result[i][j].
😎 Решение:
👉 Новости 👉 Платформа
Задача: 311. Sparse Matrix Multiplication
Даны две разреженные матрицы mat1 размером m x k и mat2 размером k x n. Верните результат перемножения матриц mat1 x mat2. Вы можете предположить, что умножение всегда возможно.
Пример:
Input: mat1 = [[1,0,0],[-1,0,3]], mat2 = [[7,0,0],[0,0,0],[0,0,1]]
Output: [[7,0,0],[-7,0,3]]
Создайте результирующую матрицу result размером m x n, заполненную нулями.
Пройдите по каждой строке матрицы mat1 и сохраните индексы и значения ненулевых элементов в хеш-карте mat1_map. Пройдите по каждой колонке матрицы mat2 и сохраните индексы и значения ненулевых элементов в хеш-карте mat2_map.
Для каждой строки i в mat1 и для каждой колонки j в mat2: Если в mat1_map есть ненулевой элемент в строке i и в mat2_map есть ненулевой элемент в колонке j с одинаковым индексом k, добавьте произведение этих элементов к result[i][j].
func multiply(mat1 [][]int, mat2 [][]int) [][]int {
n := len(mat1)
k := len(mat1[0])
m := len(mat2[0])
ans := make([][]int, n)
for i := range ans {
ans[i] = make([]int, m)
}
for rowIndex := 0; rowIndex < n; rowIndex++ {
for elementIndex := 0; elementIndex < k; elementIndex++ {
if mat1[rowIndex][elementIndex] != 0 {
for colIndex := 0; colIndex < m; colIndex++ {
ans[rowIndex][colIndex] += mat1[rowIndex][elementIndex] * mat2[elementIndex][colIndex]
}
}
}
}
return ans
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как проверить тип переменной в среде выполнения?
Для проверки типа переменной в Go используется конструкция Туре Switch или Туре Assertion. Type Switch позволяет проверить тип переменной в условии switch , а Type Assertion - извлечь конкретный тип из интерфейса.
👉 Новости 👉 Платформа
Для проверки типа переменной в Go используется конструкция Туре Switch или Туре Assertion. Type Switch позволяет проверить тип переменной в условии switch , а Type Assertion - извлечь конкретный тип из интерфейса.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какое значение вернет функция runtime.Caller(2) в Go?
Anonymous Quiz
12%
Информацию о текущей горутине
21%
Информацию о текущем процессе
15%
Информацию о вызывающей функции, пропуская одну рамку стека
53%
Информацию о вызове, пропуская две рамки стека
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 Набор инструментов на Go для создания React-like GUI
Spot — это простой, кроссплатформенный, реактивный GUI-инструментарий для Go, использующий нативные виджеты там, где это возможно.
Большой акцент при разработке Spot был сделан на простоту использования и предоставление согласованного API на разных платформах
👉 Новости 👉 Платформа
Spot — это простой, кроссплатформенный, реактивный GUI-инструментарий для Go, использующий нативные виджеты там, где это возможно.
Большой акцент при разработке Spot был сделан на простоту использования и предоставление согласованного API на разных платформах
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой инструмент в Go используется для генерации документации по коду?
Anonymous Quiz
63%
godoc
7%
gohelp
18%
docgen
12%
godocument
#Собес
🤔 Как конкатенировать строки?
Строки в Go можно конкатенировать с помощью оператора
👉 Новости 👉 Платформа
Строки в Go можно конкатенировать с помощью оператора
+
. Для работы с более сложными строковыми операциями можно использовать пакет strings
из стандартной библиотеки.Please open Telegram to view this post
VIEW IN TELEGRAM
#Вакансии
👨💻 Golang разработчик
Локация: Удаленно
Компания: itWit
ЗП: от 160 000 до 230 000 р. на руки
Занятость: Полная
Всем привет, коллеги! Ищем backend-разработчиков на Golang с опытом от 3 лет на постоянное сотрудничество в нашей компании.
🚩 Что мы предлагаем
🔵 Полностью удаленный формат работы;
🔵 Оформление по Самозанятости/ИП;
🔵 Дополнительная финансовая поддержка на спорт, обучение, перелеты, лечение;
🔵 Относительно гибкий график, вы можете выбрать рабочие часы и дни. Но их нужно будет зафиксировать;
🔵 Гарантия профессионального роста, как IT специалиста.
🚩 Что мы ждем от вас
🟡 Гражданство РФ;
🟡 Коммерческий опыт работы от 3 лет;
🟡 Хорошие знания: Golang, навыки работы с БД (ClickHouse, Redis, PostgreSQL, MongoDB), опыт по синхронизации со сторонними сервисами, git, mvc, bash, docker;
🟡 Умение работать в команде, коммуницировать с коллегами.
💬 Резюме отправлять: @kkkateee19
👉 Новости 👉 Платформа
Локация: Удаленно
Компания: itWit
ЗП: от 160 000 до 230 000 р. на руки
Занятость: Полная
Всем привет, коллеги! Ищем backend-разработчиков на Golang с опытом от 3 лет на постоянное сотрудничество в нашей компании.
Please open Telegram to view this post
VIEW IN TELEGRAM
#ЛитКод
Задача: 310. Minimum Height Trees
Дерево — это неориентированный граф, в котором любые две вершины соединены ровно одним путем. Другими словами, любое связное граф без простых циклов является деревом.
Дано дерево из n узлов, помеченных от 0 до n - 1, и массив из n - 1 ребер, где edges[i] = [ai, bi] указывает на наличие неориентированного ребра между узлами ai и bi в дереве. Вы можете выбрать любой узел дерева в качестве корня. Когда вы выбираете узел x в качестве корня, дерево имеет высоту h. Среди всех возможных корневых деревьев те, которые имеют минимальную высоту (то есть min(h)), называются деревьями с минимальной высотой (MHT).
Верните список всех меток корней MHT. Вы можете вернуть ответ в любом порядке.
Высота корневого дерева — это количество ребер на самом длинном нисходящем пути между корнем и листом.
Пример:
👨💻 Алгоритм:
1⃣ Создание списка смежности
Создайте список смежности, представляющий граф.
2⃣ Удаление листьев
Начните с удаления всех листьев. Лист — это узел с одной гранью. В каждой итерации удаляйте текущие листья и обновляйте список смежности. Новые листья будут вершинами, которые стали листьями после удаления предыдущих листьев.
3⃣ Повторение процесса
Повторяйте процесс до тех пор, пока не останется два или менее узлов. Эти узлы будут корнями деревьев с минимальной высотой (MHT).
😎 Решение:
👉 Новости 👉 Платформа
Задача: 310. Minimum Height Trees
Дерево — это неориентированный граф, в котором любые две вершины соединены ровно одним путем. Другими словами, любое связное граф без простых циклов является деревом.
Дано дерево из n узлов, помеченных от 0 до n - 1, и массив из n - 1 ребер, где edges[i] = [ai, bi] указывает на наличие неориентированного ребра между узлами ai и bi в дереве. Вы можете выбрать любой узел дерева в качестве корня. Когда вы выбираете узел x в качестве корня, дерево имеет высоту h. Среди всех возможных корневых деревьев те, которые имеют минимальную высоту (то есть min(h)), называются деревьями с минимальной высотой (MHT).
Верните список всех меток корней MHT. Вы можете вернуть ответ в любом порядке.
Высота корневого дерева — это количество ребер на самом длинном нисходящем пути между корнем и листом.
Пример:
Input: n = 4, edges = [[1,0],[1,2],[1,3]]
Output: [1]
Explanation: As shown, the height of the tree is 1 when the root is the node with label 1 which is the only MHT.
Создайте список смежности, представляющий граф.
Начните с удаления всех листьев. Лист — это узел с одной гранью. В каждой итерации удаляйте текущие листья и обновляйте список смежности. Новые листья будут вершинами, которые стали листьями после удаления предыдущих листьев.
Повторяйте процесс до тех пор, пока не останется два или менее узлов. Эти узлы будут корнями деревьев с минимальной высотой (MHT).
package main
func findMinHeightTrees(n int, edges [][]int) []int {
if n == 1 {
return []int{0}
}
adj := make([]map[int]bool, n)
for i := 0; i < n; i++ {
adj[i] = make(map[int]bool)
}
for _, edge := range edges {
adj[edge[0]][edge[1]] = true
adj[edge[1]][edge[0]] = true
}
leaves := []int{}
for i := 0; i < n; i++ {
if len(adj[i]) == 1 {
leaves = append(leaves, i)
}
}
remainingNodes := n
for remainingNodes > 2 {
remainingNodes -= len(leaves)
newLeaves := []int{}
for _, leaf := range leaves {
for neighbor := range adj[leaf] {
delete(adj[neighbor], leaf)
if len(adj[neighbor]) == 1 {
newLeaves = append(newLeaves, neighbor)
}
}
delete(adj, leaf)
}
leaves = newLeaves
}
return leaves
}
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какое ключевое слово в Go используется для блокировки выполнения кода до тех пор, пока не завершится горутина?
Anonymous Quiz
49%
wait
16%
block
11%
sync
24%
waitgroup
#Собес
🤔 Опишите шаги тестирования в Golang?
В Go тестирование пакетов осуществляется через файлы, которые заканчиваются на
👉 Новости 👉 Платформа
В Go тестирование пакетов осуществляется через файлы, которые заканчиваются на
_test.go
, содержащие функции с префиксом Test
. Для выполнения тестов используется команда go test
. Это помогает автоматизировать процесс проверки корректности работы программ.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
😊 Массовый параллелизм
Zasper — это IDE, разработанная с нуля для поддержки массового параллелизма!
🟠 Она разработана на языке Go для обеспечения высокой параллельности и эффективности использования ресурсов. Zasper отличается низким потреблением памяти и процессора, позволяя работать с большими объемами данных на локальных машинах. Она доступен как в виде приложения Electron, так и как веб-приложение.
👉 Новости 👉 Платформа
Zasper — это IDE, разработанная с нуля для поддержки массового параллелизма!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой механизм в Go используется для предотвращения гонок данных (data races)?
Anonymous Quiz
59%
Мьютексы
15%
Каналы
14%
Оператор defer
12%
Структура sync.Once
#вакансии
👨💻 Golang разработчик (Junior+)
Локация: Удаленно в РФ, дружественных странах
Компания: Фамтех
ЗП: от 120 000 до 150 000 р. на руки
Занятость: Полная
Компания заказчик - Ритейл компания.
🚩 Обязательные требования:
🔵 Опыт работы с Go, базами данных, SQL, RESTful API
🔵 Знание принципов ООП;
🔵 Понимание основных принципов проектирования и архитектуры программного обеспечения;
🔵 Умение разрабатывать и интегрировать RESTful сервисы;
🔵 Опыт работы с системами контроля версий, контейнерами;
🔵 Знание Docker и docker-compose.
Дополнительные требования:
🔵 Знание инструментов CI/CD;
🔵 Опыт работы с системами мониторинга и логирования
🚩 Мы предлагаем:
🟡 Удаленка;
🟡 Официальное оформление в аккредитованную IT компанию или ИП/ГПХ;
🟡 Работа по московскому времени;
🟡 ДМС после прохождения испытательного срока;
🟡 Реферальная программа: бонус за рекомендации;
🟡 Выдаем технику для работы или можете работать на своей;
🟡 Пересмотр заработной платы раз в год.
💬 Резюме отправлять: @romanchuk_ye
👉 Новости 👉 Платформа
Локация: Удаленно в РФ, дружественных странах
Компания: Фамтех
ЗП: от 120 000 до 150 000 р. на руки
Занятость: Полная
Компания заказчик - Ритейл компания.
Дополнительные требования:
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Как в Go реализуется наследование?
В Go нет традиционного наследования, как в других объектно-ориентированных
языках. Вместо этого используется композиция - одна структура включает в себя
другую, что позволяет повторно использовать ее методы.
👉 Новости 👉 Платформа
В Go нет традиционного наследования, как в других объектно-ориентированных
языках. Вместо этого используется композиция - одна структура включает в себя
другую, что позволяет повторно использовать ее методы.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какой термин в Go используется для обозначения пакета, доступного для использования в других модулях и проектах?
Anonymous Quiz
31%
Публичный (public)
26%
Экспортируемый (exported)
27%
Внешний (external)
17%
Глобальный (global)
🤔 Какой механизм в Go
используется для
ограничения количества одновременно работающих горутин?
используется для
ограничения количества одновременно работающих горутин?
Anonymous Quiz
17%
Каналы
24%
Буферизованные каналы
47%
Мьютексы
12%
Конструкция select
#ЛитКод
Задача: 563. Binary Tree Tilt
Дано корневое значение бинарного дерева. Вернуть сумму значений наклонов всех узлов дерева.
Наклон узла дерева - это абсолютная разница между суммой всех значений узлов левого поддерева и всех значений узлов правого поддерева. Если у узла нет левого потомка, то сумма значений узлов левого поддерева считается равной 0. То же правило применяется, если у узла нет правого потомка.
Пример:
👨💻 Алгоритм:
1⃣ Определите рекурсивную функцию, которая вычисляет сумму значений узлов поддерева и наклон текущего узла.
2⃣ Для каждого узла вычислите сумму значений левого и правого поддерева, а также их наклон, добавляя наклон к общей сумме.
3⃣ Верните общую сумму наклонов всех узлов.
😎 Решение:
👉 Новости 👉 Платформа
Задача: 563. Binary Tree Tilt
Дано корневое значение бинарного дерева. Вернуть сумму значений наклонов всех узлов дерева.
Наклон узла дерева - это абсолютная разница между суммой всех значений узлов левого поддерева и всех значений узлов правого поддерева. Если у узла нет левого потомка, то сумма значений узлов левого поддерева считается равной 0. То же правило применяется, если у узла нет правого потомка.
Пример:
Input: root = [1,2,3]
Output: 1
Explanation:
Tilt of node 2 : |0-0| = 0 (no children)
Tilt of node 3 : |0-0| = 0 (no children)
Tilt of node 1 : |2-3| = 1 (left subtree is just left child, so sum is 2; right subtree is just right child, so sum is 3)
Sum of every tilt : 0 + 0 + 1 = 1
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func findTilt(root *TreeNode) int {
totalTilt := 0
var sumAndTilt func(node *TreeNode) int
sumAndTilt = func(node *TreeNode) int {
if node == nil {
return 0
}
leftSum := sumAndTilt(node.Left)
rightSum := sumAndTilt(node.Right)
nodeTilt := abs(leftSum - rightSum)
totalTilt += nodeTilt
return node.Val + leftSum + rightSum
}
sumAndTilt(root)
return totalTilt
}
func abs(x int) int {
if x < 0 {
return -x
}
return x
}
Please open Telegram to view this post
VIEW IN TELEGRAM
#Собес
🤔 Что такое Ivalue и rvalue в Golang?
Ivalue - это адрес в памяти, представляющий переменную, и он может быть изменён. Он может находиться как слева, так и справа от оператора присваивания.
rvalue - это значение данных, которое не может быть изменено, и оно всегда находится справа от оператора присваивания.
👉 Новости 👉 Платформа
Ivalue - это адрес в памяти, представляющий переменную, и он может быть изменён. Он может находиться как слева, так и справа от оператора присваивания.
rvalue - это значение данных, которое не может быть изменено, и оно всегда находится справа от оператора присваивания.
Please open Telegram to view this post
VIEW IN TELEGRAM