Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Погрузитесь в логическую головоломку: откручивайте болты из планок на самых сложных уровнях! Вы не только расслабитесь в конце сложного дня, но еще и натренируете свой мозг, решая увлекательные задачки. Справитесь с ролью опытного мастера? Попробуйте свои силы в режиме онлайн бесплатно и без регистрации!

Головоломка. Болты и Гайки

Казуальные, Гиперказуальные, Головоломки

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Backend

С этим тегом используют

IT Программирование Frontend IT юмор Разработка Программист Drupal Все
226 постов сначала свежее
2462
Dehavilland56
2 месяца назад
Программисты шутят

Но он пытался⁠⁠

Но он пытался IT юмор, Программирование, Telegram (ссылка), Картинка с текстом, Javascript, Backend, IT, Мемы, Программист, Nodejs

Мем взят тут - https://t.me/memolecules/21

Показать полностью 1
IT юмор Программирование Telegram (ссылка) Картинка с текстом Javascript Backend IT Мемы Программист Nodejs
135
pikabu.education
pikabu.education
2 месяца назад
Серия Программирование

Что дальше после HTML/CSS?⁠⁠

Куда двигаться в веб-разработке и не только
Вчера мы публиковали подборку лучших курсов по HTML и CSS — возможно, вы уже выбираете подходящий вариант для старта. Но что делать после освоения базовой верстки? Куда двигаться, чтобы продолжать развиваться в IT?

Если вы уже уверенно верстаете страницы, но не знаете, какой навык осваивать следующим — этот материал для вас. Мы разберем основные направления развития после HTML/CSS и поможем выбрать подходящий путь.

1. Углубляемся в фронтенд: JavaScript и фреймворки
HTML и CSS — это база, но без JavaScript (JS) сайты остаются статичными. JS добавляет интерактивность: анимации, формы, динамическую загрузку данных.

Что учить?

  • Основы JavaScript: синтаксис, DOM-манипуляции, асинхронность (Promise, async/await).

  • Фреймворки и библиотеки: React.js (самый популярный, востребован в вакансиях), Vue.js (проще для новичков), Angular (используют в корпорациях).

  • Дополнительные инструменты: TypeScript (типизированный JS), Next.js/Gatsby (для SSR и статических сайтов).

Результат: сможете создавать сложные SPA (Single Page Applications) и претендовать на позицию Junior Frontend-разработчика.

Что дальше после HTML/CSS? Обучение, Frontend, Backend, HTML, CSS

2. Осваиваем бэкенд: серверная часть
Если вам интересно, как работают базы данных, авторизация и API, можно уйти в бэкенд.

Варианты технологий:

  • Node.js + Express (если хотите остаться в JS-экосистеме);

  • Python (Django/Flask) — проще синтаксис, много возможностей;

  • PHP (Laravel) — популярен в вебе;

  • C# (ASP.NET) / Java (Spring) — корпоративный сектор.

Результат: сможете писать серверную логику и стать Fullstack-разработчиком.

3. Идем в дизайн и UX/UI
Если вам нравится не только верстать, но и продумывать интерфейсы, можно развиваться в дизайн:

  • Figma/Adobe XD — создание макетов;

  • Основы UX — юзабилити, исследования;

  • Анимация интерфейсов (CSS/JS, GSAP, Framer Motion).

Результат: сможете работать UI/UX-дизайнером или фронтендером с уклоном в дизайн.

4. Другие направления: мобильная разработка, тестирование, DevOps

  • Мобильная разработка: React Native, Flutter, Swift/Kotlin.

  • Тестирование (QA): ручное и автоматическое (Selenium, Cypress).

  • DevOps: Docker, CI/CD, облачные технологии (AWS, Azure).

Как выбрать направление?
Вместо того чтобы пытаться освоить всt сразу, попробуйте определить, что вам интереснее всего:

  • Если вам нравится создавать визуальные элементы, работать с анимацией и интерфейсами, то выбирайте фронтенд.

  • Если вас больше увлекает: логика и работа с данными, создание сложных систем, решение неочевидных задач, то вам может подойти бэкенд-разработка.

  • Если мечтаете: разрабатывать мобильные приложения, работать с современными кроссплатформенными технологиями, то вас может заинтересовать мобильная разработка.

Главное — не останавливаться! После HTML/CSS открывается огромный мир IT, и вы можете найти именно то, что вам по душе.

А что бы выбрали вы? Делитесь в комментариях!

Показать полностью 1
Обучение Frontend Backend HTML CSS
108
2844
tproger.official
tproger.official
3 месяца назад
Типичный программист

Хрестоматийный пример⁠⁠

IT IT юмор Frontend Backend Видео Вертикальное видео Короткие видео Стиральная машина
93
5
Dedero
3 месяца назад

Разбираем паттерны конкурентности⁠⁠

Разбираем паттерны конкурентности Программирование, Golang, Многопоточность, Backend, IT, Длиннопост

База

Параллельность - выполнение задач в один момент времени на разных логических ядрах.

Конкурентность - выполнение задач последовательно, но со сменой контекста на другую задачу в ожидание завершения иной задачи. У пользователя может возникнуть иллюзия многозадачности даже в однопроцессорной системе, поскольку смена контекста происходит быстро (микросекунды).

Процессы:

  • Раздельная память

  • Раздельные ресурсы

  • Раздельные регистры

Потоки:

  • Общая память

  • Общие ресурсы

  • Раздельные стэк и регистры

Горутины:

  • Общая память

  • Общие ресурсы

  • Общий системный стэк

  • Общие регистры

Go runtime представляет модель P:M:G.

P - представляет логическое ядро процессора.

M - поток ОС по числу процессоров P.

G - структура, которая выполняет переданную функцию, создаётся по необходимости, минимум одна на старте программы (main). Стэк всего 2кб, может расширятся до 1гб для 64x и до 250кб для 32х систем.

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

Канал - очередь сообщений, которая умеет работать в многопоточной среде, работает по принципу FIFO.

Есть два типа каналов: буферизованный и небуферизованный.

Первый может хранить несколько сообщений, второй только одно.

Синхронизация

sync.WaitGroup - счётчик, который позволяет подождать завершения горутин.

sync.Mutex - блокирует доступ к ресурсу.

sync.RwMutex - разделяемая блокировка на чтение и запись. Читать могут несколько горутин, но мутировать данные только одна.

sync.Atomic - атомарная операция чтения и записи. Работает только с простыми значениями.

sync.Map - lock-free структура. Работает так же, как и обычная map, но потокобезопасная, можно использовать в многопоточной среде. Хорошо подходит для случаев, где надо много читать и мало писать. Если надо много писать, то лучше использовать обычную map и sync.RwMutex.

Небуферизованный канал

Разбираем паттерны конкурентности Программирование, Golang, Многопоточность, Backend, IT, Длиннопост

Буферизованный канал

Разбираем паттерны конкурентности Программирование, Golang, Многопоточность, Backend, IT, Длиннопост

Ограничения канала

Разбираем паттерны конкурентности Программирование, Golang, Многопоточность, Backend, IT, Длиннопост

Важные правила

  • Закрывает канал тот, кто в него пишет.

  • Если пишет несколько продюсеров, то закрывает тот, кто создал продюсеров.

  • Не закрытый канал держит ресурсы. Закрывать надо явно.

Паттерны

Generator

Микропаттерн, который наполняет канал. Закрываем канал, чтобы не было проблем.

func generator() <- chan int {

ch := make(chant int)

go func(){

for i := 0; i <= 12; i++ {

ch <- i + 1

}

close(ch)

}()

return ch

}

Wrapper

Оборачиваем функцию, добавляя функциональность. Если вам что-то говорит слово декоратор, то это тот самый паттерн.

func wrapper(wg *sync.WaitGroup, fn func()) {

wg.Add(1)

go func() {

defer wg.Done()

fmt.Println("Work before func")

fn()

time.Sleep(1 * time.Second)

fmt.Println("Work after func")

}()

}

func main() {

var wg sync.WaitGroup

wrapper(&wg, func() {

time.Sleep(1 * time.Second)

fmt.Println("heavy work")

})

wg.Wait()

}

Fan-in

Собирает результаты из нескольких каналов в один.

func fanIn(input1, input2 <-chan string) <-chan string {

ch := make(chan string)

go func(){

for {

select {

case s := <-input1: ch <- s

case s := <-input2: ch <- s

}

}

}()

return ch

}

Fan-out

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

func worker(ch <-chan int, wg *sync.WaitGroup) {

wg.Done()

for v := range ch {

fmt.Println(v)

time.Sleep(1 * time.Second)

}

}

func sender() {

ch := make(chan int)

var wg sync.WaitGroup

for i := 0; i < 2; i++ {

wg.Add(1)

go worker(ch, &wg)

}

for i := 0; i < 10; i++ {

ch <- i

}

close(ch)

wg.Wait()

fmt.Println("done")

}

Pipeline

Данные обрабатываются цепочкой. Producer -> Producer/Consumer -> Consumer. Стадий обработки может быть сколько угодно.

func producer() <-chan int {

c := make(chan int)

go func() {

for i := 0; i <= 10; i++ {

c <- i + 1

}

close(c)

}()

return c

}

func producerConsumer(c <-chan int) <-chan int {

out := make(chan int)

go func() {

for v := range c {

out <- v * 2

}

close(out)

}()

return out

}

func consumer(ch <-chan int) {

for v := range ch {

fmt.Println(v)

}

}

Rate limiting

Хотя для rate limiter есть множество разных алгоритмов, рассмотрим один, основанный на тиках.

func ticker() {

ch := make(chan int, 5)

go func() {

for i := 0; i < 5; i++ {

ch <- i

}

close(ch)

}()

limiter := time.Tick(time.Second)

for v := range ch {

<-limiter // будем ждать секунду

fmt.Println(v)

}

}

Cancellation

Способ прерывания горутин. Необходим, чтобы избегать висящих горутин, останавливать слишком долгие операции.

1. WithCancel

func worker(ctx context.Context) {

for {

select {

case <-ctx.Done():

fmt.Println("Done")

return

default:

fmt.Println("Working...")

time.Sleep(500 * time.Millisecond)

}

}

}

func main() {

ctx, cancel := context.WithCancel(context.Background())

go worker(ctx)

time.Sleep(1 * time.Second) // работаем

cancel() // отменяем

time.Sleep(1 * time.Second) // время на завершение

}

2. WithTimeout

ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second) // спустя 2 секунды воркер перестанет работать

3. WithDeadline. Можно указать точное время остановки.

ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(2*time.Second)) // прибавляем к текущему времени две секунды

Worker Pool

Каждый воркер берёт задачу, делает работу и отправляет результат в канал, другая горутина, в нашем случае main, читает результат из канала.

func worker(jobs <-chan int, results chan<- int, wg *sync.WaitGroup) {

defer wg.Done()

for j := range jobs {

time.Sleep(1 * time.Second)

fmt.Println("job", j)

results <- j * j

}

}

func main() {

jobs := make(chan int)

results := make(chan int)

var wg sync.WaitGroup

for i := 0; i < 3; i++ {

wg.Add(1)

go worker(jobs, results, &wg)

}

go func() {

for i := 0; i < 10; i++ {

jobs <- i

}

close(jobs)

}()

go func() {

wg.Wait()

close(results)

}()

for result := range results {

fmt.Println(result)

}

}

Actor model

Паттерн, при котором акторы общаются только через каналы, и меняют данные только через каналы.

type message struct {

amount int

response chan int

}

func counter(messages chan message) {

for m := range messages {

m.response <- m.amount + 1

close(m.response)

}

}

func main() {

messages := make(chan message)

var wg sync.WaitGroup

go counter(messages)

wg.Add(3)

for i := 0; i < 3; i++ {

go func(i int) {

defer wg.Done()

response := make(chan int)

messages <- message{amount: i, response: response}

fmt.Println(<-response)

}(i)

}

wg.Wait()

close(messages)

}

Это не все паттерны, их целая куча, но уже с этими можно делать интересные вещи, такие как балансировщики нагрузки, pub/sub системы, очереди задач, rate limiter и много всего другого.

Показать полностью 3
[моё] Программирование Golang Многопоточность Backend IT Длиннопост
3
1871
Reglam
Reglam
3 месяца назад
IT-юмор

Суть бэкенд разработки для простых людей⁠⁠

IT юмор Короткие видео Backend Видео Вертикальное видео
146
1
Tristaniizolda
Tristaniizolda
3 месяца назад
Лига фрилансеров

Ищу разработчиков сайта⁠⁠

Ищу разработчиков, front и back+devOps, сайт услуг с каталогом и личными кабинетами. 

Технологический стек на усмотрение подрядчика, с учётом функционала mvp и на развитие, например:

Frontend: React.js, Vue.js или Angular.

Backend: Node.js (Express.js, Nest.js).

База данных: MongoDB (NoSQL) или PostgreSQL (SQL).

PM, QA есть. Работа по договору подряда, подписание NDA, поэтапная ежемесячная оплата. Таск-трекер, еженедельные созвоны.

Есть детальное ТЗ на разработку для оценки сроков и стоимости работ. Но в целом работы с мая по август для запуска.
После запуска сразу нужна техподдержка и развитие проекта, так что сотрудничество нужно надолго.

Есть также возможность стать партнёром и получать проценты от прибыли, предоставлю финансовый план.

Для связи ТГ kawaitanya

[моё] Стартап Вакансии Frontend Backend Full stack Веб-разработка Текст
15
6
Dedero
3 месяца назад
Лига программистов

Rate limiter спасёт ваше приложение⁠⁠

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Итак, ваше приложение падает под нагрузкой. Нужно что-то делать, но вертикальное масштабирование дорогое, горизонтальное сложное, а кэш уже не помогает? Rate limiter спешит на помощь!

Зачем и как?

Rate limiter тарифицирует количество запросов, чтобы вашим приложением не злоупотребляли боты или реальные люди. Помните тот момент, когда вы третий раз просите прислать смс у сервиса, а вам говорят, что пришлют только через какое-то время? Или вы несколько раз вводите неверно логин и пароль, а сервис в ответ просит подождать некоторое время? Rate limiter работает по похожему принципу, но у него под капотом может много больше алгоритмов, которые мы разберём.

Какие бывают?

Вообще, rate limiter может быть внешним или внутренним. Внешний работает как прокси, принимает запрос, делает обработку, отклоняет или передаёт запрос вашему приложению.

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Внешний rate limiter

Внутренний rate limiter расположен внутри вашего приложения, может работать как middleware.

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Внутренний rate limiter

Главное отличие в том, что внутренний может работать как библиотека на вашем языке программирования, либо вы сами можете его написать, а внешний может работать с любым стэком, особенно это актуально для приложений, которые написаны на скриптовых языках. Например, у вас приложение на php, а rate limiter написан на rust. Это даёт огромную производительность при небольших затратах.

Алгоритмы

Token Bucket

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Работает так: есть ведро с токенами, оно пополняется с фиксированной скоростью, но есть потолок токенов, каждому запросу выдаётся токен. Если токенов не осталось, то есть ведро пусто, тогда запрос отклоняется.

Leaky Bucket

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Тоже есть ведро, но худое, вода вытекает с постоянной скоростью. Если ведро становится полным, то есть наполняется запросами, то все лишние запросы отбрасываются.

Fixed Window

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

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

Sliding Window

Rate limiter спасёт ваше приложение IT, Интернет, Программирование, Backend, Длиннопост

Отличается от предыдущего тем, что окно постоянно скользит во времени. Если Fixed Window на границах окна резко обнуляет лимит, то Sliding Window делает это плавно, двигаясь во времени, сглаживая нагрузку.

Это не все алгоритмы, но самые часто используемые, остальные вы можете разобрать сами.

А чтобы поиграть с рабочим rate limiter зайдите на мой гитхаб, я написал внешний rate limiter с этими 4 алгоритмами. Не забудьте поставить звёздочку.

Показать полностью 7
IT Интернет Программирование Backend Длиннопост
8
12
Dedero
3 месяца назад
Так себе работа

Как я устроился на валютную удалёнку⁠⁠

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

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

Я не делал каких-то сверхусилий, просто рассылал резюме. В одно утро заметил, что на почте письмо, где меня приглашают на собеседование. Работодатель - небольшая аутсорсинговая компания.

Обычно по собеседованию можно определить насколько технически сильна компания. Это собеседование было достаточно жёстким, но без лайв-кодинга, ответы на некоторые вопросы я не знал, например, что PostgreSQL хранит в себе статистику времени запросов и можно определить самые долгие запросы, или, что есть не только физическое разделение (шардирование), но и логические разделение (партиции). В общем, интервью для меня оказалось полезным и я блеснул знаниями, но было несколько моментов, которые меня смутили, но не обратил на них внимания, а стоило. Я был так окрылён, что это валютная удалёнка, что совсем забыл о мерах предосторожности. Первое - это легаси проект с разными технологиями (ruby, elixir, go). Второе - это аутсорс, переходящий из рук в рук, стало быть там огромный технический долг.

После пары дней мне пришёл оффер, я также подумал пару дней и принял, предварительно договорившись, что мне понадобиться неделя, чтобы открыть ИП и расчётный счёт. Поскольку санкции актуальны, то ИП надо было открывать во внешнем контуре, выбирал между двумя странами: Грузия и Киргизия. В Грузии налог 1%, в Киргизии 2%, но поскольку я уже был в Киргизии и там остались незавершённые дела, то полетел туда. ИП открыл за день, открывают в момент обращения. С открытием расчётного счёта оказалось сложнее, большинство банков не хочет открывать счёт, если вы гражданин РФ и занимаетесь IT. В итоге открыл счёт в Doscredobank. Оглядываясь назад, понимаю, что если заранее знать все тонкости, то можно уложиться в один день - утром прилетел, сделал и вечером улетел.

Вернувшись на родину я радостный сообщил, что можем начинать работу. И начался онбординг, где неожиданно узнал, что работаем по трекеру - на свою машину надо установить тулзу, которая трекает время, активность (мышь, клавиатура), какие приложения и на какие сайты ходите, а также периодически делает скриншоты. Тогда я знатно приуныл сразу на встрече, мне стоило отказаться, но да, это тот самый эффект, когда вложил так много, что отказаться уже не можешь. Забегая вперёд скажу, что если у вас есть проблема с постоянным сменой контекста, то это может помочь, поскольку видно, что вы делаете, это держит в тонусе.

Вернёмся к проекту. Сервисы связаны между собой RabbitMQ, у некоторых отдельная БД, у кого-то базы данных нет совсем, но дублируют данные в S3 на случай сбоя, чтобы восстановить, и это также является пайплайном, то есть в одном сервисе сохранят в S3, в другом достают из S3. Используется и REST и Graphql для внешних и внутренних сервисов, для фронта и бэка. Есть своя БД с OpenStreetMap, но для гео-данных также используется несколько провайдеров. Всё это крутиться в Kubernetes. И над всем этим колдует только один разработчик, вторым был я.

Достаточно быстро я понял, что проект полумёртвый, дышит только за счёт искусственных средств. Readme давно не обновлялись, засетапить проект - уже боль, второй разработчик вместо докера всю инфру развернул локально, все его действия по сетапу нигде не описаны, пришлось потратить пару часов вместе с ним в лайве, чтобы просто запустить проект. Ну, и начались сыпаться задачи, которые я, вроде как, начал решать. Самое унизительно, помимо трекера, что "тестов мы не пишем", отлавливать баги надо из веб ui, а дебажить через REPL.

Одним утром, идя в спортзал, я отчётливо понял, что на этой работе я не буду развиваться, лишь бесконечно фиксить баги и разруливать огроменный тех. дол, сгорю и буду смотреть в стену часами.

Несомненный плюс работы контрактором в том, что вы можете разорвать трудовые отношения одним днём. Теперь у меня открыто ИП и расчётный счёт в другой стране, всё также нет работы. И самое забавное, что после отправки денег по свифту, компании вернулись деньги, но на $50 меньше, а мой банк говорит, что перевод ему не поступал и вообще, разбирайся сам.

Парам-парам-пам.

Показать полностью
[моё] Программирование Backend IT Программист Удаленная работа Текст
12
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии