Golang вопросы собеседований
13.5K subscribers
631 photos
3 videos
1 file
433 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
加入频道
👣 Суслик и пингвин: кодим на Go под Linux

У нас вышла статья, в которой мы рассказываем про основы системного программирования на Go, мы изучим как работать с ядром, юзерспейсом линукса. Расскажу об стандарте POSIX, а также узнаем, как сочетать C и Go-код.

https://habr.com/ru/articles/811587/

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как с помощью Go узнать имя компьютера и имя пользователя на компьютере?

Имя текущего пользователя можно узнать при помощи os/user:
package main

import (
"os/user"
"log"
"fmt"
)

func main() {
// текущий пользователь
cur, err := user.Current()
if err != nil {
log.Fatal(err)
}
fmt.Println("Current user:", cur)
}

Есть ещё выбор пользователя по имени и по идентификатору.

Ну а чтобы узнать имя компьютера, можно использовать os.Hostname.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Алгоритмы поиска в Go

Рассмотрим здесь 2 известных алгоритма поиска: линейный и бинарный.

🟡Линейный поиск (Linear Search) — это простой алгоритм поиска элемента в коллекции. Он работает путем последовательного перебора всех элементов до тех пор, пока не будет найден искомый элемент или не будут проверены все элементы.

Алгоритм:
1. Начните с первого элемента списка.
2. Сравните его с искомым элементом.
3. Если элемент совпадает с искомым, верните его индекс
4. Если элемент не совпадает с искомым, перейдите к следующему элементу в списке.
5. Повторяйте шаги 2-4 до тех пор, пока не найдете искомый элемент или не пройдете весь список.

Линейный поиск имеет временную сложность O(n), где n — это количество элементов в списке.


🟡Бинарный поиск (Binary Search) — это эффективный алгоритм поиска элемента в отсортированном списке, массиве и т.д. Использует стратегию "разделяй и властвуй", что позволяет быстро находить искомый элемент.

Алгоритм:
1. Начните с определения границ поиска. Установите начальную границу (left) в начало списка и конечную границу (right) в его конец.
2. Найдите средний элемент между начальной и конечной границей.
3. Сравните средний элемент с искомым значением.
4. Если средний элемент совпадает с искомым значением, возвращаем его индекс
5. Если средний элемент больше искомого значения, обновите конечную границу (right) на позицию перед средним элементом и перейдите к шагу 2.
6. Если средний элемент меньше искомого значения, обновите начальную границу (left) на позицию после среднего элемента и перейдите к шагу 2.
7. Повторяйте шаги 2-6 до тех пор, пока не будет найден искомый элемент или пока начальная граница (left) не станет больше конечной границы (right).

Бинарный поиск имеет временную сложность O(log n), где n - это количество элементов в списке. Это означает, что в худшем случае алгоритм будет выполняться за логарифмическое время, что является значительно более эффективным, чем линейный поиск.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.

➡️ Делитесь с коллегами и сохраняйте себе, чтобы не потерять

Машинное обучение

Machine Learning - запускаем лучшие ИИ модели, пишем код, погружаемся в нейросети
Ml Собеседование - подготовка к собесу по мл, алгоритмам, коду
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат

🏆 Golang
Golang
Golang собеседование - разбор задач и вопросов с собесов
Golang вакансии -работа для Go разработчика
Golang книги библиотека книг
Golang задачи и тесты
Golang чат
Golang news - новости из мира go
Golang дайджест

💥 Linux /Этичный хакинг
Linux Academy - гайды, секреты и лучшие материалы по Linux
Kali linux - погрузись в мир этичного хакинга и кибербезопасности
linux_kal - kali чат
Информационная безопасность

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

🛢Базы данных
Sql базы данных - научим работе с базами данных профессионально
Библиотека баз данных
SQL чат
Вакансии Sql аналитик данных

#️⃣C#

С# академия - лучший канал по c#
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

🐍 Python

Python/django - самый крупный обучающий канал по Python
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

Java

Java академия - java от Senior разработчика
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend

🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence

🔥 DevOPs
Devops для программистов
Книги Devops

🌟 Docker/Kubernets
Docker
Kubernets

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend

💥 Бесплатный Chatgpt бот
👣 Паттерн Adapter — особенности реализации на Go

В этой статье мы рассмотрим один из самых простых паттернов — Adapter. Когда его используем:

🟡имеется какой то набор классов, методы которых необходимо использовать в конкретном месте

🟡классы имеют разные сигнатуры методов, которые мы хотим позвать

🟡имеется общая желаемая сигнатура для вызова каждого метода

🟡исходные классы ни в коем случае нельзя расширять ради частной задачи в другом месте кода

🟡в идеале имеется уже работающий функционал, который где-то в коде вызывает метод с целевой сигнатурой. В этом случае применение паттерна оправдано на 100%

📎 Поехали к реализации

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Типовые вопросы с собеседования на Go-разработчика

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

📎 Сами вопросы

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Выделение памяти: new() vs Foo{}

▶️В чём разница между созданием структуры через new(), и через имя структуры + фигурные скобки, т.е. Foo{}?
type Foo struct {
X int
}

f1 := &Foo{}
f2 := new(Foo)


▶️Эти две конструкции ничем не различаются, в обоих случаях создается элемент Foo и возвращается указатель *Foo на вновь созданный элемент.
Только в первом случае можно еще указывать параметры f1 := &Foo{100}.

Зачем нужны два одинаковых метода? Первый & является частью указателей и применяется для операций с ними, второй для явного создания пустого объекта.

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 50 простых вопросов по Go

Вопросы для начинающих, для тех, кто только вливается в Go

▶️ Вопросы с ответами

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Как сделать срез элементов с индексами и отсортировать?

▶️Итак, имеется вот такой слайс:
array := []int{10, 65, 21, 19, 43}   


Нужно сделать массив вида (value, index): [[10, 0], [65, 1], [21, 2], [19, 3], [43, 4]]
По сути, как в Python через enumerate: [(v, i) for v, i in enumerate(array)]. А потом, также как в Python отсортировать его: по value.

Как также сделать в Golang?


▶️Что ж, один из вариантов решения может выглядеть так:
package main

import (
"fmt"
"sort"
)

type Matrix [][]int

func main() {
data := []int{10, 65, 21, 19, 43}
var matrix [][]int
for index, value := range data {
matrix = append(matrix, []int{value, index})
}
sort.SliceStable(matrix, func(i, j int) bool {
return matrix[i][0] < matrix[j][0]
})

fmt.Println(matrix)
}


Результат: [[10 0] [19 3] [21 2] [43 4] [65 1]]

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Вопросы для подготовки к собеседованию на позицию Go-разработчика

Здесь довольно много вопросов, есть вопросы не только по Go, на и по Computer Science в целом, есть вопросы для разных грейдов: для junior, middle, senior, есть практические задания
Используйте, закрывайте свои слепые зоны, получайте оффер)

📎 Вопросы и ответы

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