3 ошибки на собеседованиях по программированию, из-за которых можно получить отказ
Собеседование по программированию — сложное испытание, требующее тщательной подготовки. От вас ждут определённых знаний и навыков, а также способности относительно быстро решать разные задачи.
Но иногда с решением тестовых задач могут возникать сложности, которые приведут к отказу. О 3 ошибках, которые допускают кандидаты во время решения тестовых задач узнаете тут:
https://nuancesprog.ru/p/16911/
Собеседование по программированию — сложное испытание, требующее тщательной подготовки. От вас ждут определённых знаний и навыков, а также способности относительно быстро решать разные задачи.
Но иногда с решением тестовых задач могут возникать сложности, которые приведут к отказу. О 3 ошибках, которые допускают кандидаты во время решения тестовых задач узнаете тут:
https://nuancesprog.ru/p/16911/
❤4🔥2👍1🤔1
📚Книга: 100 Go Mistakes and How to Avoid Them (2022)
Книга рекомендуется к прочтению Go-разработчиками перед тем, как приступить к кодингу. Эта книга поможет:
— Избежать самые распространенные ошибки
— Структурировать и оптимизировать код
— Эффективно обрабатывать данные и управляющие структуры
— Работать с ошибками в идиоматической манере
— Подготовить приложение к проду и улучшить качество тестирования
— Улучшить навыки работы с конкурентностью и многое другое
•книга
•исходные коды
@golang_interview
Книга рекомендуется к прочтению Go-разработчиками перед тем, как приступить к кодингу. Эта книга поможет:
— Избежать самые распространенные ошибки
— Структурировать и оптимизировать код
— Эффективно обрабатывать данные и управляющие структуры
— Работать с ошибками в идиоматической манере
— Подготовить приложение к проду и улучшить качество тестирования
— Улучшить навыки работы с конкурентностью и многое другое
•книга
•исходные коды
@golang_interview
👍14🔥4❤1
Если вы готовитесь к собеседованию или просто хотите оставаться передовым разработчиком, Go - эта статья будет полезна для вас. В статье разобраны 50 самых популряных вопросов с ответами для Go разработчиков.
https://www.educative.io/blog/50-golang-interview-questions
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Educative
Crack the top 50 Golang interview questions
Golang is a rising language similar to C but with many added convenience features. Today, we'll walk you through the 50 top Golang questions you need to know before your next Google interview.
👍6❤4🔥1
Серия собеседований на Middle Go разработчика с Сергеем Парамошкиным (руководит центром разработки и автоматизации в МТС.Digital)
Вы увидите реальные вопросы, кейсы и задачи, а также узнаете, почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
🔗Сергей Парамошкин — Даниил
🔗Сергей Парамошкин — Дмитрий Болдин
Вы увидите реальные вопросы, кейсы и задачи, а также узнаете, почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
🔗Сергей Парамошкин — Даниил
🔗Сергей Парамошкин — Дмитрий Болдин
YouTube
Открытое собеседование на Go-разработчика | Тренировочные интервью
Оставить заявку на менторскую программу Эйч Навыки, чтобы перейти на Go, сменить работу, апнуть грейд или зарплату: https://yangx.top/skills_mentee_bot?start=ordersuccess_video_sZSNf5eVnRA
Подробнее про Эйч Навыки: https://hcareers.notion.site/Go-10-600-4a68…
Подробнее про Эйч Навыки: https://hcareers.notion.site/Go-10-600-4a68…
👍10🔥4❤2
34 вопросов и ответов с собеседований Golang
https://www.fullstack.cafe/blog/go-interview-questions
@golang_interview
https://www.fullstack.cafe/blog/go-interview-questions
@golang_interview
❤5👍3🔥1🤬1
https://dsysd-dev.medium.com/20-beginner-golang-interview-questions-and-answers-de4ec7108ee
#junior
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6👎2❤1
Что выведет код ?
Решение
@golang_interview
package main
import "fmt"
func reverse(arr [6]int) {
for i, j := 0, len(arr)-1; i < j; i, j = i+1, j-1 {
arr[i], arr[j] = arr[j], arr[i]
}
}
func main() {
arr := [...]int{5: 0}
for i := 1; i < 5; i++ {
arr[i] = i + 1
}
reverse(arr)
fmt.Println(arr)
}
Решение
@golang_interview
👍5🔥3🤔2
👍7
💡Задача: Игра в прыжки
Условие: Вам дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.
Верните true, если вы можете добраться до последнего индекса, или false в противном случае.
Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.
Ввод: nums = [3,2,1,0,4]
Вывод: false
Решение:
Пишите свое решение в комментариях👇
@golang_interview
Условие: Вам дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.
Верните true, если вы можете добраться до последнего индекса, или false в противном случае.
Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.
Ввод: nums = [3,2,1,0,4]
Вывод: false
Решение:
func canJump(nums []int) bool {
max := 0
for i := 0; i < len(nums); i++ {
if i > max {
return false
}
if i + nums[i] > max {
max = i + nums[i]
}
}
return true
}
Пишите свое решение в комментариях👇
@golang_interview
👍6❤2😁2🤣2🔥1
💫 Несколько мыслей по подготовке к алгоритмической части собеседования
Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ в CloudMTS, делится некоторым опытом подготовки к прохождению алгоритмических интервью с примерами на Go.
📌 Читать
@golang_interview
Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ в CloudMTS, делится некоторым опытом подготовки к прохождению алгоритмических интервью с примерами на Go.
📌 Читать
@golang_interview
Хабр
Несколько мыслей по подготовке к алгоритмической части собеседования
Всем привет! На связи снова Петр Коробейников, техлид сервисов DBaaS for Redis и RabbitMQ (релиз скоро) в #CloudMTS. В этой статье хочу поделиться с вами некоторым опытом подготовки к прохождению...
👍8👎2🔥1
Наиближайшая сумма трёх
Сложность: Средняя
Условие задачи: Дан целочисленный массив и целевое значение суммы. Нужно найти три числа из массива, которые либо в результате суммирования равны значению целевой суммы либо же максимально близки к ней по модулю.
Каждый массив имеет единственное решение.
Пример:
Ввод:
Вывод:
Объяснение:
Ввод:
Вывод:
Решение:
Временная сложность:
Пространственная сложность:
Пишите свое решение в комментариях👇
@golang_interview
Сложность: Средняя
Условие задачи: Дан целочисленный массив и целевое значение суммы. Нужно найти три числа из массива, которые либо в результате суммирования равны значению целевой суммы либо же максимально близки к ней по модулю.
Каждый массив имеет единственное решение.
Пример:
Ввод:
nums = [-1,2,1,-4], target = 1
Вывод:
2
Объяснение:
(-1 + 2 + 1 = 2)
Ввод:
nums = [0,0,0], target = 1
Вывод:
0
Решение:
func threeSumClosest(nums []int, target int) int {
sort.Ints(nums)
ans := 0
dist := int(^uint(0) >> 1) //dist = infinity
for i :=0; i<len(nums); i++{
l := i+1
r := len(nums)-1
for l < r{
sum := nums[i] + nums[l] + nums[r]
if sum == target{
return sum
}
if sum < target{
l = l + 1
if target - sum < dist{
dist = target-sum
ans = sum
}
}else{
r = r - 1
if sum - target < dist{
dist = sum-target
ans = sum
}
}
}
}
return ans
}
Временная сложность:
O(nlogn)
Пространственная сложность:
O(1)
Пишите свое решение в комментариях👇
@golang_interview
👍4❤2👎2🔥1
Настоящее собеседование на Middle Go разработчика: реальные вопросы, кейсы, задачи. Все происходит так, если бы кандидат пришел на собеседование в команду. Расскажем почему спрашивали именно эти вопросы и как лучше всего подготовиться к собеседованию.
Проведет интервью Александр Сахаров
- Работает в Avito старшим бэкенд разработчиком
- Опыт коммерческой разработки 5 лет. Пишет на Go, PHP, Python. Последние 3 года все больше Go.
- Собеседует разработчиков на разные грейды, от Junior до Senior+
📌 Видео
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👎5👍2😁1
📌 Найти максимальный подмассив
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
Вывод: 6
Объяснение:
Ввод:
Вывод: 23
Решение:
Пишите свое решение в комментариях👇
@golang_interview
Сложность: Средняя
Условие задачи: дан целочисленный массив, необходимо найти в нем такой подмассив, сумма элементов в котором будет максимальной.
Подмассивом называется последовательная часть исходного массива.
Пример:
Ввод:
nums = [-2,1,-3,4,-1,2,1,-5,4]
Вывод: 6
Объяснение:
4,-1,2,1]
имеет наибольшую сумму 6.
Ввод:
nums = [5,4,-1,7,8]
Вывод: 23
Решение:
function maxSubArray(nums: number[]): number {
let [currentSum, largestSum] = [0, nums[0]]
nums.forEach(n => {
currentSum = Math.max(n, currentSum + n)
largestSum = Math.max(currentSum, largestSum)
})
return largestSum
}
Пишите свое решение в комментариях👇
@golang_interview
❤5👍3🔥2👎1
Сложность: Средняя
Условие задачи: Дан целочисленный массив и целое число k. Необходимо вернуть k часто встречающихся элементов. Порядок чисел в ответе не имеет значения.
Гарантируется, что ответ уникальный. То есть несколько элементов не могут встречаться одинаковое количество раз.
Пример:
Ввод:
nums = [1,1,1,2,2,3], k = 2
Вывод: [1,2]
Ввод:
nums = [1], k = 1
Вывод: [1]
Решение:
func topKFrequent(nums []int, k int) []int {
dict := make(map[int]int)
for _, num := range nums {
dict[num]++
}
arr := [][]int{}
for key, value := range dict {
arr = append(arr, []int{key, value})
}
n := len(arr)
quickSelect(arr,0, n-1, n-k)
res := []int{}
for i := n-k; i < n; i++ {
res = append(res, arr[i][0])
}
return res
}
func quickSelect(arr [][]int, start, end, k int) {
if start < end {
pivot := partition(arr, start, end)
if pivot == k {
return
} else if pivot < k {
quickSelect(arr, pivot+1, end, k)
} else {
quickSelect(arr, start, pivot-1, k)
}
}
}
func partition(arr [][]int, start, end int) int {
idx := start-1
pivot := end
for i := start; i < end; i++ {
if arr[i][1] < arr[pivot][1] {
idx++
arr[idx], arr[i] = arr[i], arr[idx]
}
}
idx++
arr[idx], arr[pivot] = arr[pivot], arr[idx]
return idx
}
O(N
Пространственная сложность:
O(N)
Пишите свое решение в комментариях👇
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍4❤1
💡Задача: Быки и коровы
Условие задачи: разыгрывается партия, в которой мы просим оппонента угадать число. После первой попытки мы мы говорим другу количество отданных цифр и неотгаданных.
Быки - правильные цифры, находящиеся на нужных позициях.
Коровы - правильные числа, но находящиеся на соответствующих позициях.
Задача - выдать подсказку в формате "xAyB", где x - количество быков, y - количество коров.
Пример:
Ввод: secret = "1807", guess = "7810"
Вывод: "1A3B"
Объяснение:
Ввод: secret = "1123", guess = "0111"
Вывод: "1A1B"
Решение:
пишите свое решение в комментариях 👇
@golang_interview
Условие задачи: разыгрывается партия, в которой мы просим оппонента угадать число. После первой попытки мы мы говорим другу количество отданных цифр и неотгаданных.
Быки - правильные цифры, находящиеся на нужных позициях.
Коровы - правильные числа, но находящиеся на соответствующих позициях.
Задача - выдать подсказку в формате "xAyB", где x - количество быков, y - количество коров.
Пример:
Ввод: secret = "1807", guess = "7810"
Вывод: "1A3B"
Объяснение:
Ввод: secret = "1123", guess = "0111"
Вывод: "1A1B"
Решение:
func getHint(secret string, guess string) string {
digits := [10]int{}
bulls, cows := 0, 0
for i := 0; i < len(secret); i++ {
s := secret[i] - '0'
g := guess[i] - '0'
if s == g {
bulls++
} else {
if digits[s] < 0 {
cows++
}
if digits[g] > 0 {
cows++
}
digits[s]++
digits[g]--
}
}
return fmt.Sprintf("%dA%dB", bulls, cows)
}
пишите свое решение в комментариях 👇
@golang_interview
👎13👍4🔥4❤1
Репозиторий, который создан для того, чтобы готовиться к собеседованию на Go на практике.
В данном репозитории находится рабочее CRUD-приложение, которое содержит множество ошибок, противоречащих современным стандартам, а также серьезные проблемы с безопасностью. Хороший вариант, чтобы попрактиковаться и исправить все ошибки.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤2👎2
Модуль - это дерево пакетов. Имя модуля задаётся в go.mod
Пакет - это набор исходных .go файлов, находящихся в одном каталоге и с одинаковой директивой package.
Файлы для одного пакета обязаны находиться в одном каталоге. Полное имя для пакета строится из имени модуля и пути к каталогу с файлами. Например,
в go.mod написано module example.org/mylib, тогда все пакеты из модуля example.org/mylib должны быть в дочерних каталогах относительно go.mod.
и путь к каталогу определяет имя пакета.
Например, в дереве исходников вашей библиотеки есть файлы в каталоге ./cmd/root.
Тогда эти файлы должны быть либо с директивой package root, либо package root_test. И полное имя пакета для этих файлов будет либо
example.org/mylib/cmd/root, либо example.org/mylib/cmd/root_test[1].
Для автоматического поиска пакетов в Гугле придумали протокол goproxy Он реализован в GitHub, поэтому любой модуль, размещённый там, автоматически будет найден командами go get, go mod tidy, go build и подобными.
Но никто не ограничивает вас пользоваться только гитхабом. К примеру, поддержка goproxy есть в GitLab. Разворачиваете у себя на сервере гитлаб, настраиваете домены и прокси - и готово, go get начинает находить модули с вашим доменным именем.
На худой конец можно развернуть исходники стороннего модуля у себя в файловой системе, а в go.mod прописать зависимость с replace:
require example.org/some/module v1.01.02
replace example.org/some/module => ../some_module_src
В этом случае go build вообще не полезет в интернет, а возьмёт исходники модуля example.org/some/module из каталога ../some_module_src
[1] Пакет
example.org/mylib/cmd/root_test
должен содержать тесты для пакета example.org/mylib/cmd/root#junior
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤3🔥3
Вакансии направления Go – разрабатывай внутренние и B2B в Kaspersky!
Чем будете заниматься:
● Golang developer (Sandbox) – разрабатывать микросервисы на Go, участвовать в создании нового функционала проекта и подготовке релизов новых версий продукта;
● Go Developer (MSAP) – участвовать в разработке и поддержка бекенд сервисов под Linux/Kubernetes на Go;
● Golang developer – участвовать в разработке микросервисов, работать с имеющимися проектами;
● Golang developer (OSMP) – создавать бекенд сервисы под Linux/Kubernetes на Go, развивать микро-сервисный подход, писать тесты, проводить код-ревью.
Основные требования:
● опыт от 2х лет разработки на GO или другом языке (С++, С#, Java);
● опыт разработки микросервисов;
● опыт разработки под Linux;
● понимание принципов ООП.
Откликайтесь, даже если опыт частично отвечает требованиям. Возможно, у вас есть именно нужные нам навыки.
Чем будете заниматься:
● Golang developer (Sandbox) – разрабатывать микросервисы на Go, участвовать в создании нового функционала проекта и подготовке релизов новых версий продукта;
● Go Developer (MSAP) – участвовать в разработке и поддержка бекенд сервисов под Linux/Kubernetes на Go;
● Golang developer – участвовать в разработке микросервисов, работать с имеющимися проектами;
● Golang developer (OSMP) – создавать бекенд сервисы под Linux/Kubernetes на Go, развивать микро-сервисный подход, писать тесты, проводить код-ревью.
Основные требования:
● опыт от 2х лет разработки на GO или другом языке (С++, С#, Java);
● опыт разработки микросервисов;
● опыт разработки под Linux;
● понимание принципов ООП.
Откликайтесь, даже если опыт частично отвечает требованиям. Возможно, у вас есть именно нужные нам навыки.
🔥6👍1😁1
Ответ:
Если ключ не найден в map в ответ мы получим дефолтное значение для типа значений map. То есть, для строки - это будет пустая строка, для int - 0 и так далее. Для того, чтобы точно понять, что в map действительно есть значение, хранящееся по переданному ключу, необходимо использовать специальный синтаксис. А именно, возвращать не только само значение, но и булевую переменную, которая показывает удалось-ли получить значение по ключу.
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤6👎5🔥2👌1
Ответ
Утечки памяти в Go могут принимать разные формы.
Обычно мы считаем, что это баги, однако истинная причина проблем может быть заложена ещё на стадии проектирования.
Приведем распространённые примеры появления проблем с памятью:
• неверное представление данных;
• интенсивное применение рефлексии либо строк;
• применение глобальных переменных;
• бесконечные горутины.
Самый простой способ создать утечку памяти в Go — определить глобальную переменную, массив, и добавить в него данные.
Golang предлагает инструмент с именем pprof. Он может помочь обнаружить проблемы с памятью. Он также может быть использован при обнаружении проблем в работе процессора.
нструмент pprof создаёт файл дампа, куда кладёт сэмпл кучи. Данный файл вы сможете в итоге проанализировать/визуализировать, чтобы позволит получить карту:
• текущего выделения памяти;
• накопительного (общего) выделения памяти.
Кроме того, у pprof есть возможность сравнивать снимки, которые сделаны в разное время. Это бывает полезно при определении проблемных областей кода при стрессовых сценариях.
Профили pprof
Инструмент pprof функционирует с помощью профилей. Под профилем понимается набор трассировок стека, которые показывают последовательности вызовов, ставших причиной появления определённого события, к примеру, выделения памяти. Подробная информация о реализации профилей содержится в файле runtime/pprof/pprof.go.
Язык программирования Go имеет целый перечень встроенных профилей, которые вы можете применять в стандартных ситуациях:
• goroutine — следы всех текущих горутин;
• allocs — выборка всех предыдущих выделений памяти;
• heap — выборка выделений памяти живых объектов;
• threadcreate — следы стека, ставшие причиной создания новых потоков в ОС;
• mutex — следы стека держателей конфликтующих мьютексов;
• block — следы стека, ставшие причиной блокировки примитивов синхронизации.
Heap
Heap (куча) представляет собой абстрактное представление места, в котором ОС хранит объекты, использующие код. В дальнейшем эта память очищается сборщиком мусора либо освобождается вручную.
Однако куча не является единственным местом, где осуществляется выделение памяти — часть памяти выделяется и на стеке. В языке программирования Go стек обычно используют для присвоений, которые происходят в рамках работы функции. Также в Go используется стек в случае, когда компилятор «знает», сколько конкретно памяти надо зарезервировать перед выполнением (к примеру, для массивов фиксированного размера).
При этом данные кучи должны быть освобождены с применением сборки мусора, а вот данные стека — нет. Именно поэтому гораздо эффективнее применять стек там, где это представляется возможным.
Получаем данные кучи посредством pprof
Существуют 2 основных способа получить данные. Первый, как правило, применяют в качестве части теста — он включает импорт runtime/pprof с последующим вызовом pprof.WriteHeapProfile(some_file) в целях записи информации в кучу.
// Функция lookup() берёт профиль
namepprof.Lookup("heap").WriteTo(some_file, 0)
Здесь
WriteHeapProfile()
существует для обратной совместимости. Однако прочие профили таких возможностей не имеют, поэтому для получения данных профилей вам следует применять функцию Lookup().
Другой способ — пустить его через HTTP (по web-адресу). Этот способ позволяет извлекать определённые данные из запущенного контейнера в тестовой среде либо e2e-среде или даже из production. При этом всю документацию пакета pprof вы можете и не читать, но как его включить, вы знать должны.
import (
"net/http"
_ "net/http/pprof"
)
...
func main() {
...
http.ListenAndServe("localhost:8080", nil)
}
Напишите в комментариях какие альтернативы pprof вам известны👇
#junior
@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤3👍3