Maks
Который будет первой точкой запроса перед проксированием запросов?
Maks
Я решил сделать закрытые сервисы в контейнерах доступ к которым будет только у api-gateway
Martin
найс
Maks
Ну и между собойчик у них будет)
Vladyslav
Ага. Было бы круто
https://youtu.be/SLc3cTlypwM
@name_666
Relaxed
thnk you so much!
whois
Товарищи, а как в golang корректно называть конструктор: 1. NewSome 2. BuildSome ? Можете дать пожалуйста ссылочку на code style convention?
Pavel
Можно посмотреть как сделано в стандартной либе. У таймера, например, используется NewSome.
George
https://golang.org/doc/effective_go
Null
Golang-дайджест № 6 (1 – 30 июня 2021) Интересное в этом выпуске: ✅ Выпущены версии Go 1.16.5 и 1.15.13 ✅ Выпущен gopls v0.7.0 ✅ Создание собственного Ngrok в 130 строках ✅ GopherCon Europe 2021 Online https://habr.com/ru/post/566782/ @Golang_google
Maks
Решил одну задачку со школы программиста :D интересно кто и как бы ее решал
Maks
https://acmp.ru/index.asp?main=task&id_task=76
Maks
Вообще там задачи прорешивать полезно
Dmitry
Решил одну задачку со школы программиста :D интересно кто и как бы ее решал
это классика жадных алгоритмов: https://stepik.org/lesson/Введение-13238/step/2?unit=3424
Dmitry
А вот попробуйте решить эту задачу: https://acm.timus.ru/problem.aspx?space=1&num=1542
Pavel
это классика жадных алгоритмов: https://stepik.org/lesson/Введение-13238/step/2?unit=3424
В задаче про музей нет жадных алгоритмов. Обычный подсчёт количества пересекающихся отрезков.
Pavel
И?
Pavel
Там их нет, потому что они не нужны. Сверху написали, что это классика жадных алгоритмов. Я написал, что нет. Про уровень речи не было.
Dmitry
Решить ее можно наивно и думать, что задача проста😉
Dmitry
Возможно и лучше, но тут вся суть в самой задаче. Задача выглядит простой, но алгоритм решения должен быть очень быстрым. Наивные решения не пройдут.
Maks
Я читал что ее можно решить через дерево отрезков
Maks
Но как я понял дерево отрезков подразумевает что нужно сделать отрезок со всеми точками. Типо отрезок это набор минут.
Maks
Грубо говоря это будет более оптимальное решение чем если создать массив интов длиной 24*60 и потом время переводить в минуты, и от старта до выезда инкрементить в массиве значение по минуте
Maks
А потом брать максимальное значение
Maks
Я решил ее иначе.
Maks
https://github.com/bless-rng/max-count-cars-on-parking
Maks
Я го только изучаюв, по этому пока не вкурил про работу с памятью, и уверен что тут есть много огрехов)
Maks
В goland профилировщик странный, то что он только через тесты может профайлер памяти запустить. Или это норма?
Maks
Я воспроизвел свое решение на 10 тысяч записей и получил скорость исполнения в 0.01с
Maks
окей
Maks
вопрос такой к знающим. У меня есть массив структур. У этих структур есть поля в виде строк
Maks
type A struct { First string Second string }
Maks
ну и у меня допустим 3 таких записи в массиве. Теперь я хочу эти стринги перенести в другой срез строк, что бы потом стравнивать строки
Maks
если я просто возьму срез stringsSlice := []string for _, a := range arrayOfAStructs { stringsSlice = append(stringsSlice, a.Fisrts, a.Second) }
Maks
то у меня в новом слайсе будет копия строки или нет?
Maks
ну по памяти типо как сделать правильнее будет
Maks
я пробовал передавать указатель, но кажется я понял в чем была моя ошибка)
Maks
Возможно нужно пройтись по всему массив через индексы и делать типо for i := range arrayOfAStructs { stringsSlice = append(stringsSlice, &a.First, &a.Second): } а потом сравнение делать через *
Maks
Я выше кидал репу свою
Maks
там в решении это есть
Maks
но я думаю что там строки копируются и из за этого алгоритм не оптимальный
Maks
Да, точно, вроде разобрался))
Maks
Переделал вторую структуру - строки стали указателем. И в сравнении я беру значение по указателю)
🔥
@maks_vesnin а в том репо на гитхабе ты специально хранишь время в строках?
Maks
Да, для простоты.
Maks
Прав ли я, что так будет оптимальнее?
Maks
экономнее
Maks
Я просто пока не до конца понимаю как под капотом работает передача строк в го в качестве параметра структуры.
🔥
Maks
Я в го пока слабый))) По этому и спрашиваю)) Так лучше, или не важно и можно строку просто передавать?
🔥
Ща ноут открою посмотрю с мобилки не удобно
Maks
Добавил еще капасити сразу, так как мне оно известно. А на больших объемах не выгодно расширят будет
🔥
Ну с точки зрения выделения памяти да это эффективней
🔥
По сути стринг это https://golang.org/pkg/reflect/#StringHeader
🔥
Можно вместо стар и енд юзать time.Duration это int64
Maks
В задаче просто сказано что есть на вход массив данных вида {start, end}. Вот я и сделал так
Maks
По сути алгоритм это не меняет
Maks
То есть сам тип не важен, мне важно только то, на сколько я сделал эффективным алгоритм.
Maks
С точки зрения производительности и потребления памяти
Maks
Вообще эта задача идентична
Maks
https://acmp.ru/index.asp?main=task&id_task=76
Maks
Я не знаю каким образом эту задачу нужно решить что бы она исполнялась максимально быстро
🔥
https://gist.github.com/goriyasno/a4ddebf427fec634686c63965bab2da3
🔥
append(states, tempState{&parkingTickets[i].Start,true}, tempState{&parkingTickets[i].End, false}) если я ничего не забыл и не попутал то здесь ты каждую итерацию создаешь новый структ, хотя уже сделал make([]tempState)
Maks
Ну я еще ему размер задал нужный
Maks
Точнее не размер а капасити
Maks
Но изначально элементами пустыми не заполнил
Maks
Может быть так будет лучше, сейчас почитаю
🔥
Но изначально элементами пустыми не заполнил
Но ты же знаешь что они так или иначе будут использоваться лучше же тогда сразу выделить память под них)
Maks
Я согласен
Maks
На скорость это может и не повлияет, а может и повлияет)
Maks
Но выглядит логично
Maks
Только придется завести каунтер который будет элементы второго среза перебирать
Maks
Ну потому что там 2 за шаг
🔥
На скорость это может и не повлияет, а может и повлияет)
Ты же не тратишь лишние тики процесора каждую итерацию, должно быть поменьше времени)
🔥
Ты же не тратишь лишние тики процесора каждую итерацию, должно быть поменьше времени)
Так как каждое выделение памяти это трата тиков проца, то логичнее выделить сразу все. Посмотри как сделан fasthttp там работа с памятью возведена в абсолют)