Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
325 - Telegram Web
Telegram Web
С какими проблемами вы сталкивались при тестировании облачных платформ? Какие инструменты для этого предпочитаете?

💎 Чат
: ссылка

Своим опытом в статье на Хабре поделился Илья Казначеев, техлид MTS Cloud — облачного провайдера МТС.

Он рассказал, какие виды тестов пробовали, как боролись с проблемами и к чему в итоге пришли.

Читать статью
Экономное вычисление выражений в польской записи

Польская запись
— это форма записи арифметических, логических и алгебраических выражений, в которой операция располагается слева от операндов. Выражения в польской записи могут обходиться без скобок, однако мы оставим скобки для наглядности.

Например, выражение в польской записи выглядит как

(* 5 (+ 3 4))

Пусть выражения в польской записи состоят из имён переменных (от a до z), круглых скобок и трёх знаков операций: #, $ и @ (смысл операций мы определять не будем).

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

Требуется составить программу econom.go, вычисляющую количество операций, которые нужно выполнить для экономного вычисления выражения. Примеры работы программы приведены в таблице:

Набор тестов для программы экономного вычисления выражений в польской записи

Выражение Количество операций
x 0
($xy) 1
($(@ab)c) 2
(#i($jk)) 2
(#($ab)($ab)) 2
(@(#ab)($ab)) 3
(#($a($b($cd)))(@($b($cd))($a($b($cd))))) 5
(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab)))) 6

Решение

package main

func main() {
println(opCount("(#($(#xy)($(#ab)(#ab)))(@z($(#ab)(#ab))))"))
println(opCount("($xy)"))
println(opCount("x"))
}

func opCount(expr string) int {
expressions := map[string]bool{}
var openBraces []int
for i, c := range expr {
switch c {
case '(':
openBraces = append(openBraces, i)
case ')':
lastOpenBrace := len(openBraces) - 1
subExprStart := openBraces[lastOpenBrace]
subExpr := expr[subExprStart:i]
expressions[subExpr] = true
openBraces = openBraces[:lastOpenBrace]
}
}
return len(expressions)
}

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

const oper = node_t("oper")
const expr = node_t("expr")

type node struct {
t node_t
v string
}

func opCount(input string) int {
expressions := map[string]bool{}
var stack []node
for _, c := range input {
switch c {
case '$', '#', '@':
stack = append(stack, node{t: oper, v: fmt.Sprintf("%s", c)})
default:
stack = append(stack, node{t: expr, v: fmt.Sprintf("%s", c)})
}
for canFold(stack) {
lastIdx := len(stack) - 1
operIdx := lastIdx - 2
folded := node{t: expr, v: stack[operIdx].v + stack[operIdx+1].v + stack[operIdx+2].v}
expressions[folded.v] = true
stack[operIdx] = folded
stack = stack[:operIdx+1]
}
}
return len(expressions)
}

func canFold(stack []node) bool {
stackLen := len(stack)
return stackLen >= 3 && stack[stackLen-3].t == oper && stack[stackLen-2].t == expr && stack[stackLen-1].t == expr
}
4👍3🆒2
Как подсчитать общее количество элементов, определенных в Enum?

package main

import "fmt"

const (
I1 = 1 << iota
I2
I3
ILen int = iota
)

const (
X1 = "A"
X2 = "B"
X3 = "C"
XLen int = iota
)

func main() {
fmt.Println(I1, I2, I3, ILen)
fmt.Println(X1, X2, X3, XLen)
}

Ответ

Пишите свое решение в комментариях👇
👍3🤮2💩2
Distributed Services with Go

Автор:
Travis Jeffery
Год издания: 2021

#go #en

Скачать книгу
👍71
Друзья, дайте фидбэк по контенту. Напишите в комментариях, что добавить, убрать, исправить?

Если есть хорошие источники контента - you are welcome)
👍7
Тёмный маршрутизатор из Raspberry Pi

В данной статье автор рассказывает, как он сделал из Raspberry Pi маршрутизатор, способный перенаправлять отдельные сайты, отдельные подсети, хоть все запросы через tor.

Подробнее: https://habr.com/ru/post/584558/
💩4🔥2
Разработка REST-серверов на Go

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

💎 Чат: ссылка

Часть 1: стандартная библиотека
Часть 2: применение маршрутизатора gorilla/mux
Часть 3: использование веб-фреймворка Gin
Часть 4: применение OpenAPI и Swagger
Часть 5: Middleware
Часть 6: аутентификация
9👍4👎1
Какой будет вывод этого кода?

package main
import "fmt"
const (
i = 8
j
k
)
func main() {
fmt.Println(i, j, k)
}

Ответ
👍10
Глубинное обучение с нуля в Go - Часть 1: графы

Это первая статья из целого цикла про алгоритмы глубинного обучения. В цикле представлена информация с самых азов до объяснения современных разработок в этой области.

💎 Чат: ссылка

Подробнее: https://kodazm.ru/articles/go/deep-learning-from-scratch-in-go-part-1-equations-are-graphs/
👍6🔥1
Что выведет код?

package main

import "fmt"

func main() {
a := [...]int{0, 1, 2, 3}
x := a[:1]
y := a[2:]
x = append(x, y...)
x = append(x, y...)
fmt.Println(a, x)
}

Ответ
👍2
Вступайте в наш 💎 Чат: ссылка
Список интересных Go проектов

1. DDosify — Performance Testing Platform
DDosify - это хороший инструмент, если вы хотите проверить, как поведет себя ваше приложение при большом количестве пользователей, обращающихся к нему со всего мира.

2. Kopia — Cross-platform Backup Tool
Kopia предлагает удобный и простой способ создания копий зашифрованных и сжатых данных и сохранения в облачном хранилище.

3. Traefik — Reverse Proxy And Load Balancer
Traefik довольно популярен, поэтому вы, возможно, уже знакомы с ним. Это хороший инструмент для самостоятельной настройки прокси для ваших микросервисов.

4. Httpx — HTTP Toolkit
С помощью Httpx можно регулярно отправлять запросов для получения данных о веб-сайтах. Мне нравится использовать его для проверки работоспособности моих сайтов и приложений.

5. Evcc — Extensible EV Charge Controller
Evcc - это многоязычный контроллер для электромобилей на Go.
👍12🥰1🤔1
[Тестовое Google] Простые множители произведения массива

Задача
Дан массив целых положительных чисел nums, верните количество различных простых множителей в произведении элементов nums. Функция должна называться distinctPrimeFactors.

Обратите внимание, что:

▪️Число, большее 1, называется простым, если оно делится только на 1 и само на себя.
▪️Целое число val1 является множителем другого целого числа val2, если val2 / val1 является целым числом.
Пример

nums = [2,4,3,7,10,6]
distinctPrimeFactors(nums)
# 4

# Пояснение:
Произведение всех элементов в `nums` равно: `2 * 4 * 3 * 7 * 10 * 6 = 10080 = 25 * 32 * 5 * 7`.
Существует 4 различных простых множителя, поэтому мы возвращаем 4.

nums = [2,4,8,16]
distinctPrimeFactors(nums)
# 1

# Пояснение:
Произведение всех элементов в `nums` равно: `2 * 4 * 8 * 16 = 1024 = 210`.
Существует 1 различный простой множитель, поэтому мы возвращаем 1.

#junior #задача #golang

Пишите свое решение в комментариях👇
🤯2😢1
Ребят, если нужны книги по GO, то скачать можете в нашем канале: https://www.tgoop.com/golangsbook.

Если не трудно - подпишитесь
👍9
Gocache

Полезная библиотека кэша Go, которая предоставляет вам множество способов управления кэшем.

💎 Чат: ссылка

Github
❤‍🔥1👍1
Modern Web Development with Go

Автор
: Dušan Stojanović
Год издания: 2023

#go #en

Скачать книгу
👍5
Efficient Go

Автор:
Bartlomiej Plotka
Год издания: 2021

#go #en

Скачать книгу
👍3👎2🤮1
Что выведет код ?

package main

import (
"fmt"
)

func main() {
x := [2]int{1, 2}
r := [...]int{1, 2}
fmt.Println(x == r)
}

Ответ
5🔥4
Кэширование

Эта статья дает структурированную основу и раскрывает ряд неочевидных особенностей кэширования.

💎 Чат: ссылка

Читать статью
🔥7
2025/07/09 18:52:44
Back to Top
HTML Embed Code: