Всего было 100 вопросов на 90 минут.
- Python
- Django
- Kubernetes and Docker
- Базы данных
- UI/UX design
- Cети(IP, TCP, HTTP, etc.)
- CSS/JS
- Рефакторинг, оптимизация
class First:
def __init__(self):
self.multiply(15)
print(self.i)
def multiply(self, i):
self.i = 4 * i
class Second(First):
def __init__(self):
super().__init__()
def multiply(self, i):
self.i = 2 * i
obj = Second()
- 15
- 60
- Будет выброшено исключение
- 30
x = ['ab', 'cd', 'ef']
print(list(map(list, x)))
- Будет напечатано:
[['ab'], ['cd'], ['ef']]
- Будет напечатано:
[['ab'], ['cd'], ['ef']]
- Каждой элемент из х будет "обернут" списком
- Каждой элемент из х будет преобразован списком
- Ошибка NameError, так как функция map объявлена
- Ошибка TypeError, так как функция list, переданная аргументом в map, не вызывается
-
set[[1, 2], [3, 4], [5, 6]]
-
set([1, 2, 3, 4, 5, 6])
-
{[1, 2, 3, 4, 5]}
-
{[1, 1, 1, 1, 1]}
-
{1, 2, 3, 4}
-
set((1, 2, 3, 4))
-
{{1, 1, 1, 1, 1}}
xyz = 1,000,000
x y z = 1000 2000 3000 4000
x, y, z = 1000, 2000, 3000
x_y_z = 1,000,000
x_y_z = 1-000-000
- 1
- 2
- 3
- 4
- 5
- Все выражения корректны
d = 7
def simple(a=3, b, c):
global d
print(a, b, c, d)
- Будет напечатано: 4 5 6 7
- Будет напечатано: 4, 5, 6, 7
- NameError, т.к. переданная d не указана при объявлении функции simple
- SyntaxError
- Будет напечатано: 3 5 6 7
- Будет напечатано: 3, 5, 6, 7
- IndexError так как элементов начиная с 5-го нет в листе
lst = [[]] * 5
print(lst)
lst[0].append(10)
print(lst)
lst[1].append(20)
print(lst)
lst[2].append(30)
print(lst)
- [ ]
- [ ]
- [ ]
- [ ]
- Для простого копирования объектов, скажем, словаря, достаточно вызвать его метод сору, например:
obj a = (1: 1, 2: 'a", 'c': [3, 'e')}
obj_b = obj_a.copy()
- Для простого копирования можно воспользоваться методом сору.соpу()
- Поверхностное копирование подразумевает, что копируется только самый верхний уровень объекта, без его глубоких
атрибутов, т. е. для объекта obj_a скопируется только
{1: 1, 2: 'a'}
- Поверхностное копирование подразумевает только создание новых ссылок на имеющиеся объекты, а не копирование значений
- Глубокое копирование копирует в т. ч. атрибуты со вложенными объектами
- Глубокое копирование подразумевает создание копии всего содержания объекта не по ссылкам, а по его значениям
8.Представьте ситуацию, когда ваша программа работает безостановочно в режиме сервера, отвечая на пользовательские запросы. Часть обращений обрабатывается модулем (допустим, он называется coolApi), который вы импортировали при запуске сервера и который получен вами от сторонней команды разработчиков. Через какоето время команда обновила модуль, добавив туда несколько новых обработчиков. Можно ли было предусмотреть эту ситуацию средствами python, чтобы без остановки сервера и переписывания кода вашей программы, ваш сервер начал обрабатывать новые виды запросов? Например, для этой цели была настроена периодическая задача в event loop'е, которая будет вызывать следующий код:
- Можно использовать такой код:
import coolApi
- Можно использовать такой код:
reload coolApi
- Можно использовать такой код:
import sys
-
if 'coolApi' in sys.modules: del sys.modules['coolApi'] import coolApi
- Используют для создания неявной модели документа при веб-разработке
- «Слабые» ссылки позволяют получать доступ к объекту, в отличие от «сильных»
- «Слабые» ссылки позволяют получать доступ к объекту, как и «сильные» ссылки
- Сборщик мусора (gc) обязательно удалит объект даже при наличии на него «слабой» ссылки, если «сильных» ссылок на него не осталось
- Сборщик мусора (gc) не удалит объект, если на него есть хотя бы одна ссылка, в т. ч. «слабая»
- Модуль weekref отвечает за манипуляции со «слабыми» ссылками
- Методы класса weekref в модуле gc отвечают за манипуляции со «слабыми» ссылками
- Python использует GIL (Global Interpretator Lock), который запрещает такие действия
- Решение задачи может выглядеть, например, так: import subprocess subprocess.call(['telnet', ' ya.ru ', '-6'])
- Решение может выглядеть так: import subprocess arglist=['telnet', ' ya.ru ', '-6'] subprocess.Popen(arglist, stdout=outputfile)
- Решение возможно, используя методы библиотеки
threading
- Решение возможно, используя методы библиотеки
os
- Решение возможно, используя методы модуля
multiprocessing
11. Рассмотрите запрос, сформулированный на языке Python: response = requests.get('https:api.github.com'). Какие методы библиотеки requests о содержании ответа на указанный выше запрос определены верно?
- response.text возвращает содержание ответа как объект bytes
- response.json возвращает содержание ответа как объект json
- response.json() возвращает содержание ответа как объект json
- response.content возвращает содержание ответа как объект bytes
- response.content возвращает содержание ответа как объект string
- response.text возвращает содержание ответа как объект string
- Для хотя бы единожды выполненных программ в процессе транслирования интерпретатором кода к виду, доступному для виртуальный машины python, создаются специальные файлы, в которых хранится/кэшируется такой код (.рус), что позволяет программе в дальнейшем быстрее исполняться
- С помощью атрибутов метода
_code_
доступного укаждой функции, можно получить данные о скомпилированном объекте, в частности, инструкции виртуальной машины, константы и переменные, используемые объектом - Для инспектирования байткода предназначен модуль
dis
, методы которого дают возможность инспектировать выполняемые «под капотом» python-кода низкуровневые инструкции и передаваемые в них значения - Для инспектирования байткода предназначен модуль
inspect
, методы которого дают возможность инспектировать выполняемые «под капотом» python-кода низкуровневые инструкции и передаваемые в них значения
- Специальный метод
_context_
хранит текущие переменные блока исполнения программы - Специальный класс, в котором объявлены методы
_enter_
и_exit_
- Способ управлять областью видимости переменных
- Дает возможность выполнять определённый код до входа в блок with и после выхода из него
- Для создания своего метакласса нужно воспользоваться подклассом type, стандартным метаклассом в python
- Чаще всего метаклассы используются в роли виртуального конструктора
- Метаклассы определяются с помощью базовых классов в атрибуте
__metaclass__
- Во время выполнения оператора class генерируется пространство имен, которое будет содержать атрибуты будущего класса, после чего, для непосредственного создания, вызывается метакласс с именем и атрибутами
- Для создания метакласса нужно воспользоваться ключевым словом
super
- Одно лидирующее подчёркивание перед названием атрибута обеспечивает ограничение, что его можно использоваться только внутри класса. При этом он становится недоступным извне.
- Одно лидирующее подчёркивание перед названием атрибута предлагает считать параметр используемым внутри класса, однако он всё ещё доступен извне.
- Поля с двойным подчёркиванием доступны изнутри класса, но недоступны извне по такому же имени.
- Поля с двойным подчёркиванием всё же доступны по имени вида
_<ClassName>__<fieldName>
- Методы, производящие необъяснимые, но полезные действия над объектами
- Методы, имена которых всегда начинаются на одинарное подчёркивание
- Имена этих методов начинаются и заканчиваются на двойные подчёркивания
- Методы с неявным вызовом
- Методы вызываются синтаксическими конструкциями и встроенными функциями
object() == object()
-
True
-
False
-
Undefined
-
NaN
- Синтаксис языка не позволяет этого сделать напрямую. Можно создать экземпляр класса и передать его в переменной.
- Можно воспользоваться методом
_class_()
. - Следует обратиться к методу
super()
. - Следует обратиться к методу
_main_()
.
-
``` import math math.factorial(n)
-
``` def factorial(n): return [base if base == 1 else base*i for i in range(n, 0, -1)][0]
-
``` def factorial(n): if n == 1: return n else: return n*factorial(n-1)
-
``` def factorial(n): base = 1 for i in range(n, 0, -1): base = base * i return base
-
``` deffactorial(n, total=1): while True: ifn == 1: return total n, total = n - 1, total * n
- Для матрицы смежности для каждой вершины мы храним список всех вершин графа и признак того, существует ли с ними связь
- Для списков смежности каждой вершине графа соответствует список, состоящий из соседних вершин этой вершины
- Список рёбер - это список, где каждому ребру графа соответствует строка, в которой хранятся две вершины, инцидентные ребру
- Для графа из паросочетаний храним зависимое множество попарно смежных рёбер, имеющих общие вершины
- Матрица инцидентности - это таблица, где строки соответствуют вершинам графа, а столбцы - связям (рёбрам) графа
def print_directory_contents(sPath):
import os
for sChild in os. listdir(sPath):
sChildPath = os.path.join(sPath,sChild)
if os.path.isdir(sChildPath):
print_directory_contents(sChildPath)
else:
print(sChildPath)
- Обход двоичного дерева папок
- Обход декартова дерева папок
- Обход Т-дерева папок
- Рекурсивный обход дерева
- Список может использоваться как стековая структура данных
-
collections.deque
может использоваться как стек - Словарь можно использовать как стек
- Множество используют как стек
def search(array, target):
lower = 0
upper = len(array)
while lower < upper:
x = lower + (upper - lower) // 2 val = array[x]
if target == val:
return x
elif target > val:
if lower == x:
break
lower = x
elif target < val:
upper = x
- Линейный поиск
- Бинарный поиск
- Поиск вставкой
imin = 0
imax = 0
for i in range(size):
if array[i] < array[imin]:
imin = i
elif array[i] > array[imax]:
imax = i
- O(n log n)
- O(log n)
- O(n)
- O(n2)
- Можно использовать переменную
_all_
в_init_ ру
, чтобы указать, что будет импортировано выражениемfrom <модуль> import *
- Команда
from <модуль> import *
не импортирует имена из модуля, которые начинаются с нижнего подчеркивания _ - Команда
from <модуль> import * as
end позволяет импортировать всё из модуля <модуль> в пространство имён end - Можно использовать
if _name_ == '_main_'
для проверки, был ли скрипт импортирован или запущен напрямую - Можно установить проект в качестве пакета (в режиме разработчика) с помощью
pip install -e <проект>
, чтобы добавить корень проекта вsys.path
requests==2.21 gunicorn >16.0, !=19.5.1, <22.0
- Выражения синтаксически некорректны
- Нужно сравнить переменную requests со значением 2.21, а переменную gunicorn - итеративно с каждым условием
- Установить пакет requests версии 2.21, а пакет gunicorn - любой, доступный в репозитории, версия которого больше 16.0, меньше 22.0 и отличается от 19.5.1
- В выражениях запрашивается установка пакетов, но только первое выражение верно сформулировано синтаксически, второе следует переписать
- Переиспользование кода
- Возможность поддерживать в актуальном состоянии каждый пакет отдельно
- Возможность поделиться своей разработкой с другими
- Объединение классов и методов в файл для удобного импорта в проект
- Управление сложностью в программном проекте за счёт его декомпозиции на «физическом» уровне =======
- CharField используется для определения строк фиксированной длины
- TextField используется для больших строк произвольной длины
- IntegerField - это поле для хранения значений (целого числа) и проверки введенных значений в виде целых чисел в формах
- DateField и DateTimeField используются для хранения/представления дат и информации о дате/ времени
- EmailField используется для хранения и проверки адресов электронной почты
- FileField и ImageField используются для загрузки файлов и изображений
- По умолчанию такой возможности не предоставляется, нужно реализовывать самостоятельно, прокидывая переменную в шаблон
- Нужно использовать {perms}}
- Нужно использовать {{ permissions }}
- Разрешения доступны и через {{ perms }} и через {{ permissions }}
- Это группировка пользователей по видам действий, которые им позволено совершать в системе
- Это проверка наличия сущности/пользователя в контексте Django
- Это шаг после аутентификации, во время которого устанавливаются права пользователя, т.е. определяются действия, которые может выполнять аутентифированный пользователь.
- авторизация реализована во встроенном приложени django.contrib.auth
34. Когда мы выполняем form.clean() в Django для объекта формы, то предполагаем, что в любой момент валидатор может инициировать ошибку валидации. Что происходит после ошибки валидации?
- Программа останавливается, и сервер Django останавливается
- Метод clean() останавливает проверку и возвращает список ошибок проверки
- Метод clean() продолжает выполнение и отлавливает все ошибки проверки в этой форме
- Метод clean() отлавливает ошибку проверки и исправляет ее
35. Как происходит обратное разрешение url в Django, позволяющее избежать жесткого кодирования ссылок?
- Обратное разрешение url в шаблонах достигается через использование тега url
- Обратное разрешение url в шаблонах достигается через использование тега reverse
- Обратное разрешение url в python-коде / представлениях Django может быть достигнуто через вызов метода reverse()
- Обратное разрешение url в ряде классов высокоуровневых моделей достигается с помощью метода get_absolute_uri()
- CSRF middleware по умолчанию отключена в настройках Django
- Промежуточный слой (middleware) django.middleware.csrf.CsrfViewMiddleware должен быть определён до любого другого промежуточного слоя, который хочет его использовать
- В шаблоне формы нужно добавить тег {% csrf_token %}
- Во время рендеринга страницы Django генерирует уникальный для пользователя/браузера токен и отклоняет все формы, которые не содержат его или содержат его неверное значение
- Поды/модули
- Cервисы
- Тома (Volumes)
- Приложения (applications)
- Kube-apiserver
- Kubelet
- Etcd
- Pods
- B Dockerfile нужно определить и ENTRYPOINT, и CMD
- В Dockerfile достаточно определить только одну из инструкций
- Флаг командной строки - entrypoint может быть использован, чтобы переопределить инструкцию entrypoint
- CMD указывает команду и аргументы для выполнения внутри контейнера, используемые по умолчанию, которые впоследствии могут быть переопределены
- WORKDIR устанавливает рабочую директорию для инструкций CMD и RUN
- ARG определяет переменную для передачи Docker-контейнеру во время сборки
- CОPY копирует файлы и директории из контейнера
- WORKDIR устанавливает рабочую директорию для инструкций CMD и ENTRYPOINT
- EXPOSE открывает порт
- FROM задаёт главный (родительский) образ
- Dockerfile обязательно должен начинаться с переменной ARG
- Команда CMD выполняется не во время построения образа, а во время запуска контейнера
- json
- yaml
- xml
- markdown
$ kubectl get namespaces
NAME STATUS AGE
default active 7h
docker active 7h
kube-public active 7h
kube-system active 7h
namespaces хорошо изолируют ресурсы внутри класса. В каком из четырёх пространств имён размещаются контейнеры, используемые для запуска Kubernetes и включения поддержки в Docker?
- default
- docker
- kube-public
- kube-system
CREATE TABLE T1 (
x INT
);
INSERT INTO T1 (x) VALUES (1);
INSERT INTO T1 (x) VALUES (2);
CREATE TABLE T2 (
xint
INSERT INTO T2 (x) VALUES (2);
INSERT INTO T2 (x) VALUES (3);```
Какие запросы вернут таблицу следующего содержания
x
3
- SELECT T2.x FROM T1 RIGHT JOIN T2 ON T1.x = T2.x
- SELECT T2.x FROM T1 LEFT JOIN T2 ON T1.x = T2.x WHERE T1.x IS NULL
- SELECT T2.x FROM T1 RIGHT JOIN T2 ON T1.x = T2.x WHERE T2.x > 2
- SELECT T2.x FROM T1 RIGHT JOIN T2 ON T1.x = T2.x WHERE T1.x IS NULL
SELECT name FROM client WHERE state = 'MB
- SELECT name FROM client WHERE NOT state NOT IN ("MB');
- SELECT name IN client WHERE state = "MB"
- SELECT name IN client WHERE state = "M'
- SELECT name FROM client WHERE state IN ("MB')
- SELECT name IN client WHERE state IN ("MB')
45. Нужно выполнить соединение четырех таблиц А, В, С и D. Таблицы А и В соединяются по столбцу F1, таблицы В и С - по столбцу F2, таблицы С и D - по столбцу F3. Кроме того, в результате необходимо оставить только строки со значением F1 равным 10. Сколько всего операторов сравнения будет записано в WHERE
и ON
?
- 2
- 3
- 1
- 4
- Внутри операторов IN, EXISTS, NOT IN
- Внутри операторов BETWEEN, LIKE, =
- Внутри операторов CREATE, INSERT, UPDATE
- Внутри пользовательских функций
- Внутри хранимых процедур
47. Параллельно происходящие транзакции в СУБД могут приводить к рассогласованию данных. Возникновение каких феноменов характерно на разных уровнях изоляции транзакций?
- На уровне изоляции транзакций READ COMMITED могут возникать феномены DIRTY READ, LOST UPDATE
- На уровне изоляции транзакций REPEATABLE READ возможно возникновение феноменов LOST UPDATE и PHANTOM READ
- На уровне изоляции транзакций SERIALIZABLE невозможно возникновение ни одного из феноменов: LOST UPDATE, UNREPEATABLE READ, PHANTOM READ, DIRTY READ
- На уровне изоляции транзакций REPEATABLE READ могут возникать феномены PHANTOM READ, LOST UPDATE
- Схема организации базы данных
- План выполнения запроса
- Описание возможных типов действий в разных таблицах
- Описание хранимой процедуры
- Граф вычислений для базы данных
- Система класса СР способна функционировать в условиях распада, но достигает этого в ущерб доступности: может не выдавать отклик на запрос
- Система класса СР предполагает, что обеспечения устойчивости к распаду на секции требуется обеспечение дублирования изменений во всех узлах системы
- Системы класса САР предполагают, что выполняются сразу 3 условия:
- в каждом узле одномоментно данные не противоречат друг другу
- любой запрос к распределённой системе завершается корректным идентичным откликом каждого узла
- каждая из секций, на которые расщепилась распределённая система, даёт корректные ответы
- АР-системы предполагают, что в отсутствии изменений данных, через какой-то промежуток времени после последнего обновления (в конечном счёте) все запросы будут возвращать последнее обновлённое значение
50. Какие выделяют типы временных ограничений доступа к данным, участвующим в транзакции, со стороны других транзакций?
- Разделяемые блокировки
- Исключающие блокировки
- Явные блокировки
- Фантомные ограничения
- Строчные блокировки
52. Ситуация в СУБД, при которой несколько процессов находятся в состоянии ожидания ресурсов, занятых друг другом, и ни один из них не может продолжать свое выполнение, называется:
- захватом ресурса
- состоянием гонки
- взаимной блокировкой
- инверсией приоритетов
- livelock
-
ссылочная целостность;
-
указание того, какие значения могут принимать атрибуты узлов;
-
указание того, какие связи могут устанавливаться между узлами;
-
указание того, каково минимальное и максимальное число связей определённого типа, в котором может участвовать один узел?
-
Атомарность
-
Согласованность
-
Изолированность
-
Долговечность
- К внешнему виду пользовательского интерфейса и формам взаимодействия с пользователем
- К производительности элементов управления на экранных формах
- К содержанию и оформлению выводимых сообщений
- К форматам ввода
- К алгоритмической согласованности интерфейсов
- По доступу к внутренней функциональности системы при помощи пользовательского интерфейса
- К реакции системы на ввод пользователя
- К времени отклика
- стимулировать к выполнению сложных действий, которые заставляют пользователей думать там, где это не требуется
- показывать очевидные элементы интерфейса
- сосредоточить внимание пользователя во время просмотра только на действительно необходимых вещах
- быть простым и интуитивно понятным
57. Что такое восприятие и ответные действия пользователя, возникающие в результате использования и/или предстоящего использования продукции, системы или услуг, в контексте темы проектирования интерфейсов?
- Опыт пользователя/опыт взаимодействия (англ. User eXperience, UX)
- UI
- Психологическое состояние пользователя
- Намерение пользователя
58. Что понимают при проектировании интерфейсов под общей границей между двумя функциональными объектами, или же совокупностью средств, методов и правил взаимодействия (управления, контроля и т. д.) между элементами системы?
- Программу-посредник
- Функциональный предел
- Приложение
- Интерфейс
- В каждом интерфейсе есть важные элементы (сигналы) и маловажные или даже бессмысленные для определенной части системы (шум)
- Дизайн интерфейса важнее его функциональности
- Проверенное лучше модного: не стоит цепляться за моду и делать что-то только потому, что так делают другие, лучше отдать предпочтение проверенным элементам интерфейса
- В элементах управления интерфейсами лучше использовать привычные элементы и визуальные образы
- Обратная несовместимость при обновлении интерфейса - результат количественного его усложнения
- Не стоит изобретать велосипед для стандартных вещей
- Копирование элементов из разных систем интерфейсов без анализа контекста использования
- Учёт контекста использования при заимствовании элементов интерфейса
- Перенос и включение элементов старого интерфейса без анализа
- MAC-адрес и IPv6-адрес
- IPv4 адрес
- МАС-адрес
- IPv6 адрес
- журнал, в котором протоколируются факты отправки, приема, переприема и отказа в приеме данных
- системный реестр сетевого программного обеспечения, хранящий настройки
- набор правил, определяющих поведение компонентов сети при передачи данных и структуру передаваемых данных
- тип связи, при котором управление каналом связи распределено между участниками коммуникации
- Secure Management Tcp-network Protocol - протокол управления TCP-сетями
- Simple Mail Transfer Protocol - упрощенный протокол передачи почты, более легкий в реализации, чем протокол МТР
- Secure Mail Transfer Protocol - протокол MТР, инкапсулированный в SSL
- Simple Mail Transfer Protocol - простой протокол передачи почты
- Secure Mail Transfer Protocol - протокол MТP, инкапсулированный в SSH
- Secure Mail Transfer Protocol - протокол MTP, инкапсулированный в TLS
- Simple Management Tcp-network Protocol - протокол управления TCP-сетями
- Simple Management Time Protocol - упрощенная версия MTP - протокола передачи точного времени
- не меняется при прохождении маршрутизаторов, но может быть изменен при прохождении NAT- шлюза
- никогда не меняется
- меняется при каждом прохождении маршрутизатора
- меняется DNS-сервером во время выполнения запроса
- Передача пакетов единственному адресату
- Широковещательная передача пакетов группе адресов, в которую абоненты могут самостоятельно добавляться или удаляться
- Широковещательная передача пакетов всем адресатам в сети
- Передача пакетов ближайшему из группы адресатов
- Клиент-серверная архитектура
- Предназначен для передачи гипертекстовых документов
- Данные передаются в бинарном виде
- Может использоваться для передачи произвольных данных
- Протокол с сохранением состояния
- Протокол без сохранения состояния
- GET, POST
- PUT, DELETE
- POST, OPTIONS
- HEAD, POST
- HTTP/0.5
- HTTP/0.9
- HTTP/1.0
- HTTP/1.1
- HTTP/1.2
- HTTP/2
70. Выберите типы согласования контента, которые определены в стандарте протокола HTTP и используются для отображения различных представлений ресурса по тому же URI
- Согласование на основе сервера
- Согласование на основе типа данных
- Согласование на основе агента
- Согласование на основе используемого языка
71. Какая директива заголовка Cache Control в заголовке ответа HTTP указывает, что ресурс кэшируется только клиентом и сервером?
- Public
- Private
- no-cache/no-store
- max-age
- Метод - определяет тип сообщения
- Статовая строка - определяет тип сообщения
- Заголовки - характеризуют сообщение, параметры передачи и прочие сведения
- Дополнительные директивы - устанавливают управляющие конструкции, используемые для обмена сообщениями
- Тело сообщения - непосредственно данные сообщения; обязательно должно предваряться пустой строкой; может отсутствовать
74. Web-сервисы REST явное используют HTTP-методы согласно протоколу, определенному в RFC 2616, в частности для:
- создания ресурса на сервере используется метод POST
- создания ресурса на сервере используется метод CREATE
- извлечения ресурса используется метод GET
- изменения состояния ресурса или его обновления используется метод PUT
- удаления ресурса используется метод DELETE
- Структура URI-адреса REST web-сервиса должны быть простой, понятной и предсказуемой
- URI должен рассматриваться как некий самодокументирующийся интерфейс, почти не требующий пояснения или обращения к разработчику для его понимания и получения соответствующих ресурсов
- Использование глаголов для репрезентации ресурсов
- Построение URI-адресации по аналогии со структурой каталогов
- Обязательное включение заключительного слеша (/) в адрес ресурса
- Клиентское приложение по заголовку Cache-Control ответа определяет возможность кэширования ресурса (его локального копирования).
- Клиентское приложение читает заголовок Last-Modified ответа и возвращает значение даты в заголовке If-Modified-Since для отправки на сервер запроса об изменении ресурса.
- Запрос Conditional GET использует оба заголовка. Если ресурс с указанного времени не изменился, ответом сервера является стандартный код 304 (Not Modified) и запрошенный ресурс не отправляется.
- Код ответа 304 НТТР означает, что клиентское приложение может спокойно использовать кэшированную локальную копию представления ресурса в качестве самой последней его версии, фактически опуская последующие запросы GET до тех пор, пока ресурс не будет изменен.
- Клиент отправляет полные запросы, каждый из которых может обрабатываться независимо от других запросов. Это требует от клиентского приложения использования в полном объеме НТТР- заголовков, определенных интерфейсом web-сервиса, и отправки полных представлений ресурсов в теле запроса.
- Клиентское приложение отправляет запросы, которые практически ничего не знают о предшествующих запросах, существовании сеанса на сервере, способности сервера добавлять контекст в запрос и состоянии приложения, сохраняющемся между запросами.
- Клиент отправляет полные запросы, каждый из которых может обрабатываться лишь в связи с пакетом-родителем от других запросов. Это требует от клиентского приложения использования в полном объеме HTTP-заголовков, определенных интерфейсом web-сервиса, и отправки полных представлений ресурсов в теле запроса.
- application/json
- application/xml
- application/xhtml+xml
- plain/text
- Сервер генерирует ответы, содержащие ссылки на другие ресурсы для навигации приложений по связанным ресурсам
- При запросе родительского или контейнерного ресурса типичный RESTful-ответ может содержать ссылки на потомков родительского элемента или на подчиненные ресурсы, чтобы сохранять связь с ними
- Сервер генерирует ответы, содержащие информацию о том, подлежат ли они кэшированию с целью повышения производительности за счет уменьшения количества запросов дублирующихся ресурсов и полного отказа от некоторых запросов
- Сервер включает в ответ HTTР-заголовки Cache-Control и Last-Modified (значение данных)
- Сервер исключает ответы от dts01
79. Выберите варианты, которые корректно описываются разницу между тегами <script>, <script async> и <script defer>
-
<script> - блокирует синтаксический анализ HTML, сценарий извлекается и выполняется немедленно, анализ HTML возобновляется после выполнения сценария.
-
<script async> - скрипт будет извлечен параллельно с разбором HTML и выполнен, как только он О станет доступен (возможно, до завершения разбора HTML). Следует пользоваться, когда скрипт не зависит от других скриптов на странице, например, аналитик.
-
<script defer> - скрипт будет извлекаться параллельно с синтаксическим анализом HTML и выполняться после завершения анализа страницы. Если их несколько, каждый отложенный скрипт выполняется в том порядке, в котором они встречались в документе.
-
<script defer> - скрипт будет извлечен параллельно с разбором HTML и выполнен, как только он станет доступен (возможно, до завершения разбора HTML). Следует пользоваться, когда скрипт не зависит от других скриптов на странице, например, аналитики.
-
Атрибуты async и defer игнорируются для сценариев, которые не имеют атрибута src.
-
<script async> - скрипт будет извлекаться параллельно с синтаксическим анализом HTML и выполняться после завершения анализа страницы. Если их несколько, каждый отложенный скрипт выполняется в том порядке, в котором они встречались в документе.
-
div, p - выбирает все элементы <p>, которые находятся внутри элемента <div>
-
div p - выбирает все элементы <div> и все элементы <p>
-
div > р - выбирает все элементы <p>, где непосредственный родитель является элементом <div>
-
div + p - выбирает все элементы <p>, которые размещаются сразу после элемента <div> div - p - выбирает все элементы <p>, которым в любом месте предшествует элемент <div>
81. Исчезает ли пространство, которое занимал элемент, которому присвоено css-свойство position: relative?
- Да, исчезает
- Нет, не исчезает
- Добавление данного свойства никак не влияет на элемент
- Да, только при добавлении position: relative; для родительского элемента
- Анализируется сначала HTML, затем CSS
- HTML и CSS анализируются одновременно
- Анализируется сначала CSS, затем HTML
- HTML создает DOM (объектную модель документа), а CSS создает CSSOM (объектную модель CSS)
- Создаётся только объектная модель документа (DOM)
- Анализируется сначала HTML, затем CSS
- HTML и CSS анализируются одновременно
- Анализируется сначала CSS, затем HTML
- HTML создает DOM (объектную модель документа), а CSS создает CSSOM (объектную модель CSS)
- Создаётся только объектная модель документа (DOM)
-
size: 0 - размеры элемента приравниваются нулю и он перестаёт отображаться
-
width: 0; height: 0 - элемент вообще не занимает место на экране, поэтому он не будет отображаться
-
display: hidden; - скрыть отображение элемента
-
visibility: none; - скрыть отображение текста, при этом останется пустое место
-
position: absolute; left: -99999px - помещает элемент вне экрана
-
text-indent: -9999px - работает только для текста внутри элементов блока
- Упростить понимание работы программы
- Улучшить качество существующего кода
- Модифицировать систему для улучшения её эффективности
- Сделать код более понятным, логичным и прозрачным для других участников команды
- Сделать код менее раздражающим
- Расширить функциональность ПО
- Упростить добавление нового кода
- Наличие хороших тестов: unit, функциональных, интеграционных и др.
- Разработка без использования тестов
- Автоматизация тестирования
- Быстрые правки на проде
- Неэффективное, рискованное или непродуктивное решение некой проблемы
- В отличие от ловушек (pitfals) они документируют повторяющиеся решения общих проблем
- Относятся к уровню кодирования, а не проектирования
- Разновидности антипаттернов: относящиеся к разработке, архитектуре, организационные, а также антипаттерны среды и обстановки
- Высокоуровневые оптимизации проводятся разработчиками, оперирующими абстрактными сущностями (функциями, процедурами, классами и т. д.) и представляющими себе общую модель решения задачи; могут оптимизировать дизайн системы
- Оптимизации на уровне элементарных структурных блоков исходного кода (циклов, ветвлений и т. д.), как правило, относится к низкоуровневой оптимизации кода
- Низкоуровневая оптимизация производится на этапе превращения исходного кода в набор машинных команд, но этот этап редко подвергается автоматизации
- Важно не только понять, что нужно оптимизировать, но и выбрать наиболее релевантный участок кода (например, самый важный, самый длительно выполняющийся), узкое место в системе (bottleneck)
- Для определения «бутылочных горлышек» используют профайлеры, которые позволяют замерять время работы различных частей программы
- Неиспользуемый код следует комментировать и оставлять в проекте для возможности вернуться к этим участкам кода в дальнейшем
- Неоптимально и неаккуратно написанный код, а также семантические ошибки помогают обнаружить статические анализаторы кода
- Мемоизация/табулирование - сохранение результата выполнения определенной функции, чтобы избежать ее повторного выполнения
- Кеширование - временное хранение данных в памяти, позволяющее получить доступ к информации быстрее и с меньшей нагрузкой на сервер или базу данных
- Использование подстрочных комментариев для избегания повторного исполнения кода
- Распараллеливание работы программ
- «Ленивые»/отложенные вычисления - все расчеты откладываются до тех пор, пока не будет затребован их результат, что позволяет существенно снизить общий объем производимых вычислений
- Приближение или аппроксимация - замена результатов строгого алгоритма на наиболее подходящие приближенные значения, что влечет за собой потерю точности вычислений, но экономит память и повышает скорость
- Использование сторонних языков, лучше реализующих необходимую функциональность, чем текущий
- Руководство только общим подходом к решению любых отдельных случаев и уникальных ситуаций, универсализация решений