Q/A

Q/A

None

GOLANG:

-ЗАХВАТ ПЕРЕМЕННОЙ???????
-УКАЗАТЕЛИ
-В ЧЕМ ОТЛИЧИЯ СЛАЙСА ОТ МАССИВА?

Массив объявляется с константным количеством элементов

Слайс это надстройка над массивом. Он динамический

-КАК РАБОТАЕТ APPEND?

Если слайс перешагивает свое капасити, то у нас перевыделится новый слайс и вернется с новым значением и увеличенным капасити

-КАК УВЕЛИЧИВАЕТСЯ КАПАСИТИ В СЛАЙСЕ?

До какого то значения идет константный ряд. Потом х2

-МАПЫ

Мапа это хештаблица. Это структура данных в которой запись происходит за О(1). Через хэшфункцию мы вычисляем куда вставить значение. А чтение в худшем случае работает за O(n), в лучшем за O(1). В среднем чтение происходит за O(1). Если результат у хэфункции от разных значений одинаковый, то происходит колллизия. Для избежание можно вставить запись в следующую своободную пустую ячейку. Однако при удалении нужно пометить ячейку какимт то флагом deleted.

У мапы нет капасити. Мапа непотокобезопасна

У мапы ключ должен быть comparable

Решение делать или нет map потокобезопасным было непростым, но было принято не делать — эта безопасность не даётся бесплатно. Там где она не нужна, дополнительные средства синхронизации вроде мьютексов будут излишне замедлять программу, а там где она нужна — не составляет труда реализовать эту безопасность с помощью sync.Mutex. Такой компромисс между скоростью и потокобезопасностью, при этом оставляя возможность иметь и первый и второй вариант. Либо у вас сверхбыстрый map безо всяких мьютексов, либо чуть медленнее, но безопасен для параллельного доступа. 

-ООП

Наследование. Инкапсуляция. Полиморфизм

-ООП в го

Отличия в наследовании.

Наследование в го. В го реализовано встраивание. 

Golang имеет принципиальное разделение на «свойства» и «поведение»

Полиморфизм 

-ИНТЕРФЕЙС

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

Интерфейс — это набор методов, представляющих стандартное поведение для различных типов данных.

-СТРАКТЫ
-КАНАЛЫ

Каналы могут быть буферизованными и небуферизованными. Буферизованным каналам можно указать количество элементов при которых канал не блочится. Каналы нужны для передачи данных между горутинами. Они блокируются на запись и на чтение!!!!. ИЗ закрытых каналов можно читать, но нельзя в него писать, т.к. словим панику

Если канал закрыт, то при чтении он возвращает 0 (дефолт) 

-SELECT

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

-ГОРУТИНЫ

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

Горутина легковесна. 

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

Переключение горутин для процессора выглядит как продолжение исполенения кода

Тред это сущность операционной системы. Операционная система плохо знает детали твоего приложения. Поэтому неэффективно переключать контекст. А горутина это сущность языка го. И планировщик эффективно распределяет ресурсы 

-ИСПОЛЬЗУЮТСЯ ЛИ В ГО ТРЕДЫ?

Язык го включает максимальное количество тредов по колву ядер в процессоре.

-WAITGROUP

add Добавляет к счетчику единицу и ждет создания горутины

done Убавляет от счетчика единицу

wait ждет пока счетчик не вернется в горутину

-КАК ЗАВЕРШИТЬ МНОГО ГОРУТИН?

Убить мейн. Закинуть в каждую горутину канал quit; Завершать горутину при получении сообщения; Через context.

-STACK

Стек (англ. stack — стопка; читается стэк) — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

-HEAP

Куча — это хранилище памяти, также расположенное в ОЗУ, которое допускает динамическое выделение памяти и не работает по принципу стека: это просто склад для ваших переменных. Когда вы выделяете в куче участок памяти для хранения переменной, к ней можно обратиться не только в потоке, но и во всем приложении. Именно так определяются глобальные переменные. По завершении приложения все выделенные участки памяти освобождаются. Размер кучи задаётся при запуске приложения, но, в отличие от стека, он ограничен лишь физически, и это позволяет создавать динамические переменные.

-SQL:

Что подразумевается под СУБД? Какие существуют типы СУБД?

База данных — структурированная коллекция данных. Система управления базами данных (СУБД) — программное обеспечение, которое взаимодействует с пользователем, приложениями и самой базой данных для сбора и анализа данных. СУБД позволяет пользователю взаимодействовать с базой данных. Данные, хранящиеся в базе данных, могут быть изменены, извлечены и удалены. Они могут быть любых типов, таких как строки, числа, изображения и т. д.

Существует два типа СУБД:

  • Реляционная система управления базами данных: данные хранятся в отношениях (таблицах). Пример — MySQL.
  • Нереляционная система управления базами данных: не существует понятия отношений, кортежей и атрибутов. Пример — Mongo.
Что подразумевается под таблицей и полем в SQL?

Таблица — организованный набор данных в виде строк и столбцов. Поле — это столбцы в таблице. Например:

Таблица: Student_Information

Поле: Stu_Id, Stu_Name, Stu_Marks

Что такое соединения в SQL?

Для соединения строк из двух или более таблиц на основе связанного между ними столбца используется оператор JOIN. Он используется для объединения двух таблиц или получения данных оттуда. В SQL есть 4 типа соединения, а именно:

  • Inner Join (Внутреннее соединение)
  • Right Join (Правое соединение)
  • Left Join (Левое соединение)
  • Full Join (Полное соединение)
В чем разница между типом данных CHAR и VARCHAR в SQL?

И Char, и Varchar служат символьными типами данных, но varchar используется для строк символов переменной длины, тогда как Char используется для строк фиксированной длины. Например, char(10) может хранить только 10 символов и не сможет хранить строку любой другой длины, тогда как varchar(10) может хранить строку любой длины до 10, т.е. например 6, 8 или 2.

Что такое первичный ключ (Primary key)?
  • Первичный ключ — столбец или набор столбцов, которые однозначно идентифицируют каждую строку в таблице.
  • Однозначно идентифицирует одну строку в таблице
  • Нулевые (Null) значения не допускаются
Что такое ограничения (Constraints)?

Ограничения (constraints) используются для указания ограничения на тип данных таблицы. Они могут быть указаны при создании или изменении таблицы. Пример ограничений:

  • NOT NULL
  • CHECK
  • DEFAULT
  • UNIQUE
  • PRIMARY KEY
  • FOREIGN KEY
В чем разница между SQL и MySQL?

SQL — стандартный язык структурированных запросов (Structured Query Language) на основе английского языка, тогда как MySQL — система управления базами данных. SQL — язык реляционной базы данных, который используется для доступа и управления данными, MySQL — реляционная СУБД (система управления базами данных), также как и SQL Server, Informix и т. д.

Что такое уникальный ключ (Unique key)?
  • Однозначно идентифицирует одну строку в таблице.
  • Допустимо множество уникальных ключей в одной таблице.
  • Допустимы NULL-значения (прим. перевод.: зависит от СУБД, в SQL Server значение NULL может быть добавлено только один раз в поле с UNIQUE KEY).
Что такое внешний ключ (Foreign key)?
  • Внешний ключ поддерживает ссылочную целостность, обеспечивая связь между данными в двух таблицах.
  • Внешний ключ в дочерней таблице ссылается на первичный ключ в родительской таблице.
  • Ограничение внешнего ключа предотвращает действия, которые разрушают связи между дочерней и родительской таблицами.
Перечислите типы соединений

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

Inner join (Внутреннее соединение): в MySQL является наиболее распространенным типом. Оно используется для возврата всех строк из нескольких таблиц, для которых выполняется условие соединения.

Left Join (Левое соединение): в MySQL используется для возврата всех строк из левой (первой) таблицы и только совпадающих строк из правой (второй) таблицы, для которых выполняется условие соединения.

Right Join (Правое соединение): в MySQL используется для возврата всех строк из правой (второй) таблицы и только совпадающих строк из левой (первой) таблицы, для которых выполняется условие соединения.

Full Join (Полное соединение): возвращает все записи, для которых есть совпадение в любой из таблиц. Следовательно, он возвращает все строки из левой таблицы и все строки из правой таблицы.

Что такое индекс?

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

Опишите различные типы индексов.

Есть три типа индексов, а именно:

  1. Уникальный индекс (Unique Index): этот индекс не позволяет полю иметь повторяющиеся значения, если столбец индексируется уникально. Если первичный ключ определен, уникальный индекс может быть применен автоматически.
  2. Кластеризованный индекс (Clustered Index): этот индекс меняет физический порядок таблицы и выполняет поиск на основе значений ключа. Каждая таблица может иметь только один кластеризованный индекс.
  3. Некластеризованный индекс (Non-Clustered Index): не изменяет физический порядок таблицы и поддерживает логический порядок данных. Каждая таблица может иметь много некластеризованных индексов.
В чем разница между командами DROP и TRUNCATE?

Команда DROP удаляет саму таблицу, и нельзя сделать Rollback команды, тогда как команда TRUNCATE удаляет все строки из таблицы

Какие операторы доступны в SQL?

В SQL доступно три типа оператора, а именно:

  1. Арифметические Операторы
  2. Логические Операторы
  3. Операторы сравнения

-GRPC:

ЧТО ТАКОЕ GRPC?

Это высокопроизводительный rpc (remote procedure call) фреймворк. Который может быть запущенным в любой среде. Используется для создания микросервисов. Grpc использует формат общения на языке Protobuf который предоставляет высокоэффективный обмен сообщениями с высокой степенью упаковки для сериализации структурированных данных. Работает по протоколу HTTP/2

КАКИЕ БЫВАЮТ ТИПЫ RPC?
  • Унарный (Unary RPC). Синхронный запрос клиента, который блокируются пока не будет получен ответ от сервера.
  • Серверный стрим (Server streaming RPC), при подключении клиента сервер открывает стрим и начинает отправлять сообщения.
  • Клиентский стрим (Client streaming RPC). То же самое, что и серверный, только клиент начинает стримить сообщения на сервер.
  • Двунаправленный стрим (Bidirectional streaming). Клиент инициализирует соединение, создаются два стрима. Сервер может отправить изначальные данные при подключении или отвечать на каждый запрос клиента по типу “пинг-понга”.
КАКИЕ ПРЕИМУЩЕСТВА НАД REST?

Более высокая производительность. Меньшая задержка. Более эффективное сжатие данных

В ЧЕМ РАЗНИЦА GRPC И REST?

Grpc более новая технология ориентированная на производительность использующая двоичный протокол. В то время как Rest использует текстовый протокол и является более гибким. GRPC - быстро и эффективно. REST - более широко используется и прост в использвании

КАКИЕ ЯЗЫКИ ПОДДЕРЖИВАЕТ GRPC?

C++, Java, Python, Go, Ruby, NodeJS, Objective-C, PHP

КАК МОЖНО РЕАЛИЗОВАТЬ АУТЕНТИФИКАЦИЮ С GRPC?

Один из способов — использовать SSL/TLS, который будет шифровать все данные, которые передаются между клиентом и сервером. Другой способ — использовать ключ Google API, который будет аутентифицировать клиента на сервере. Наконец, вы также можете использовать OAuth2 — стандартный протокол аутентификации, который часто используется с gRPC.

-REST:

Что такое REST?

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

Что такое REST API?

REST API или RESTful API — это веб-API, соответствующий стилю архитектуры REST.

Опишите 5 ограничений архитектурного стиля REST и их преимущества.

Если они запрашивают 6 ограничений, см. следующий вопрос о необязательном ограничении.

Настоящий RESTful API должен соответствовать пяти архитектурным ограничениям REST:

  • Единый интерфейс :Интерфейс между клиентом и сервером, обеспечивающий стандартизированное взаимодействие клиент-сервер на одном языке.
  • Необходимо для разделения клиента и сервера
  • Клиент-сервер :Модель клиент-сервер для разделения задач между клиентом и сервером.
  • Позволяет клиенту и серверу работать и развиваться независимо
  • Поддерживает переносимость и масштабируемость
  • Без гражданства :Относится к протоколу связи без сохранения состояния, при котором сервер не хранит информацию о состояниях сеанса.
  • Повышает производительность за счет снижения нагрузки на сервер
  • Кэшируемый :Серверы помечают свои ответы как кэшируемые или некэшируемые.
  • Клиенты и посредники могут кэшировать ответы сервера.
  • Сокращает взаимодействие клиент-сервер, поддерживает масштабируемость и производительность
  • Многоуровневая система :Уровни между клиентом и сервером могут состоять из посредников, таких как прокси-серверы или балансировщики нагрузки.
  • Слои имеют отдельные обязанности, но могут взаимодействовать друг с другом
  • Поддерживает масштабируемость и безопасность системы
Каково дополнительное архитектурное ограничение REST?

Код по запросу — это необязательное ограничение архитектуры RESTful. Код по запросу позволяет серверу отправлять исполняемый код (скрипты или апплеты) клиенту по запросу клиента.

  • Преимущество : расширяет функциональность клиента, так как клиент может загружать функции после развертывания.
  • Недостаток : уменьшает видимость, поэтому считается необязательным.
  • Примеры : апплеты Java и JavaScript.
Объясните ограничения единого интерфейса

Единый интерфейс необходим для отделения клиента от сервера.

Есть четыре необходимых ограничения для достижения единого интерфейса:

  • Идентификация ресурсов : запросы клиентов должны идентифицировать ресурсы с использованием унифицированных идентификаторов ресурсов (URI).
  • Манипулирование ресурсами через эти представления : когда клиенты получают представление ресурса с сервера, у них есть вся информация, необходимая для изменения состояния ресурса.
  • Самоописательные сообщения : сообщения содержат всю информацию, необходимую получателю для ее интерпретации, включая метаданные.
  • Гипермедиа как механизм состояния приложения : гипермедиа (например, HTML) — это среда для взаимодействия клиент-сервер, и клиенту не требуется документация по конкретному API для понимания ответов сервера.
Что такое CRUD?

CRUD — это аббревиатура четырех основных операций, используемых в системе управления реляционными базами данных (RDBMS).

Каждая операция в CRUD относится к методу HTTP, который поддерживает REST.

  • Создать :POST
  • Читать :GET
  • Обновление :PUT
  • Удалить :DELETE
Расскажите о методах HTTP-запросов, поддерживаемых REST, и о том, когда они используются.

REST API основаны на HTTP-запросах или командах, каждая из которых выполняет свою задачу.

REST поддерживает следующие HTTP-запросы:

  • Метод GET : запрос данных с сервера
  • Метод POST : отправьте данные для создания нового ресурса по указанному сервером URL-адресу.
  • Метод PUT : отправьте данные для создания нового ресурса по указанному клиентом URL-адресу.
  • Метод DELETE : удалить ресурс с сервера
  • Метод OPTIONS : возвращать методы запроса, поддерживаемые службой.
  • Метод HEAD : возвращает метаинформацию, такую ​​как заголовки ответа.
  • Метод PATCH : изменить часть ресурса на сервере
В чем разница между методами PUT и POST?

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

Вот различия между PUT и POST:

ПОСТАВИТЬ:

  • Идемпотент (т. е. несколько запросов дадут один и тот же результат)
  • Ответы PUT не кэшируются
  • Обновляет или заменяет целевой ресурс полезной нагрузкой запроса.

ПОСТ:

  • Не идемпотент (т. е. несколько запросов дадут несколько одинаковых ресурсов)
  • Ответы POST могут кэшироваться при условии правильного заголовка управления кешем.
  • Полезная нагрузка запроса обрабатывается веб-сервером на основе целевого ресурса.

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

Объясните, что означает безгражданство в REST

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

Как следствие, будут применяться следующие условия:

  • Запрос клиента содержит всю информацию, необходимую серверу для обработки запроса.
  • Клиентское приложение отвечает за сохранение состояния сеанса.
Каковы преимущества и недостатки REST API?

Важно знать плюсы и минусы RESTful API.

Преимущества включают в себя :

  • Разработан для обеспечения высокой производительности, портативности, надежности и масштабируемости.
  • Разделение клиент-сервер позволяет каждому индивидуально работать и масштабироваться
  • Простота тестирования и адаптации к различным средам
  • Легко освоить, так как использует протокол HTTP.
  • Поддерживает различные технологии передачи данных, включая JSON, XML, YAML, изображения и многое другое.
  • Использует меньшую полосу пропускания, чем другие методы, такие как технология Simple Object Access Protocol (SOAP).

-Common:

-TCP UDP РАЗЛИЧИЯ

Протокол TCP (Transmission Control Protocol) – это сетевой протокол, который «заточен» под соединение. Иными словами, прежде, чем начать обмен данными, данному протоколу требуется установить соединение между двумя хостами. Данный протокол имеет высокую надежность, поскольку позволяет не терять данные при передаче, запрашивает подтверждения о получении от принимающей стороны и в случае необходимости отправляет данные повторно. При этом отправляемые пакеты данных сохраняют порядок отправки, то есть можно сказать, что передача данных упорядочена. Минусом данного протокола является относительно низкая скорость передачи данных, за счет того что выполнение надежной и упорядоченной передачи занимает больше времени, чем в альтернативном протоколе UDP.

Протокол UDP (User Datagram Protocol), в свою очередь, более прост. Для передачи данных ему не обязательно устанавливать соединение между отправителем и получателем. Информация передается без предварительной проверки готовности принимающей стороны. Это делает протокол менее надежным – при передаче некоторые фрагменты данных могут теряться. Кроме того, упорядоченность данных не соблюдается – возможен непоследовательный прием данных получателем. Зато скорость передачи данных по данному транспортному протоколу будет более высокой.



Report Page