Skip to content

DmytroVasin/KnowledgeModel

Repository files navigation

Ruby/Rails ТЕСТ

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

Вопросы направленны на обьщие знания (для позиции Rails Junior).

P.S.

Некоторые вопросы и ответы могут быть неполными или сжатыми, ввиду формата изложения материала. Но если вы нашли ошибку или неверный ответ - то прошу сообщить на адресс [email protected]. Спасибо.

Темы вопросов:

Вопросы:

"HTML & CSS"

"Position absolute vs position fixed? Чем они отличаются?"
"Position fixed в качестве содержащего контейнера устанавливает viewport (область просмотра), а у absolute - установлен либо ближайший предок с position отличным от static, либо корневой элемент."
"В чем отличие div от span?"
"Div это блочный элемент (Блоки располагаются по вертикали. На прилегающих сторонах элементов действует эффект схлопывания отступов. По ширине блочные элементы занимают всё допустимое пространство. и т.д.). Span это строчный элемент (Внутрь строчных элементов допустимо помещать текст или другие строчные элементы. Вставлять блочные элементы внутрь строчных запрещено. Эффект схлопывания отступов не действует. Свойства, связанные с размерами (width, height) не применимы. Ширина равна содержимому плюс значения отступов, полей и границ. и т.д.)."
"В чем отличие id от сlass?"
"Разная значимость атрибутов в CSS (Id имеет больший вес, а значит стили под этим атрибутом – значительнее). Возможность проставления якорных ссылок (Использования атрибута id позволяет поставить якорную ссылку на объект страницы). Дополнительные функции id (Для атрибута id существует функция .getElementById). Запись множественных атрибутов (Одному объекту можно задать сразу несколько классов)."
"Дайте определение CLASS:"
"Class – определитель стиля объекта, или группы объектов на странице. Его часто применяют для повторяющихся конструкций."
"Дайте определение ID:"
"Id – уникальный определитель объекта. Это значит, что несколько элементов на странице не должны (не должны - но не обязаны) иметь одинаковый id."
"Как подсчитать специфичность селекторов?"
"Специфичность представляет собой группу из четырех чисел. Например, 0,3,1,2. Где 2(четвертая цифра) - элемент или псевдоэлемент. Где 1(третья цифра) - класс, псевдокласс или атрибут. Где 3(вторая цифра) - id. Где 0(первая цифра) - встроенные стили."
"Как проставляеться сокращенная запись в padding-е?"
"padding: padding-top, padding-right, padding-bottom, paddung-left"
"Как работает vertical-align? Правила применения?"
"vertical-align - это выравнивает элемент по вертикали относительно своего родителя. При правильной работе, оно поможет выровнять строчный элемент относительно других строчных элементов на странице. Насколько высоко или низко расположится элемент по вертикали, будет зависеть от размера соседних строчных элементов, или от свойства line-height, заданного для этой строки. Правила: 1. свойство применяется только к строчным элементам inline или строчным блокам inline-block. 2. cвойство влияет на выравнивание самого элемента, а не его содержимого. 3. Когда свойство применяется к ячейке таблицы, выравнивание влияет на содержимое ячейки, а не на неё саму."
"Как работает z-index? Понятие «stacking context»."
"Любые позиционированные элементы на веб-странице могут накладываться друг на друга в определенном порядке, имитируя тем самым третье измерение, перпендикулярное экрану. Каждый элемент может находиться как ниже, так и выше других объектов веб-страницы, их размещением по z-оси и управляет z-index. Это свойство работает только для элементов, у которых значение position задано как absolute, fixed или relative. Под контекстом наложения подразумеваются элементы с общими родителями, перемещающиеся вместе на передний или задний план. Блоки разных стековых контекстов не могут накладываться друг на друга, то есть взаимодействовать визуально."
"Как работают inline-block?"
"Inline-block дает возможность создавать блоки, ведущие себя как строчные элементы. С одной стороны, можно управлять такими блоками при помощи text-align и т.д."
"Какие новые элементы форм введены в HTML 5 ( назовите хотя бы три )?"
"В HTML 5 введены десять новых важных элементов форм: «Color», «Date», «Datetime-local», «Email», «Time», «Url», «Range», «Telephone», «Number», «Search»"
"Назовите несколько способов как отцентрировать блок по высоте?"
"Абсолютное позиционирование, применение line-height, табличная верстка, margin-padding, display: table-cell + vertical-align"
"Назовите что именно было добавлено с HTML5?"
"«Семантика» - в HTML5 появился ряд новых семантических тегов, позволяющих более осмысленно организовывать внутреннюю структуру веб-страниц. «Мультимедиа» - HTML5 добавляет нативную поддержку мультимедийного контента (аудио и видео) прямо в HMTL-разметке — с соответствующим API для управления воспроизведением. «Графика» - Работать с графикой на стороне клиента стало заметно проще. В HTML5 добавлен элемент canvas и специальный API на JavaScript для работы с ним, также в HTML5 официально включен тег svg, позволяющий внедрять векторную графику. «Веб-формы» - новые элементы веб-формы: как типы, так и атрибуты, позволяющие расширить возможности традиционных форм встроенными средствами без использования дополнительных библиотек — от подсказок в поле ввода (placeholder) до проверки вводимых значений. «JavaScript APIs» - для работы с графикой и мультимедиа, и др. новые возможности."
"Опишите position relative?"
"Относительное позиционирование (position: relative) позволяет вам использовать свойства: top, bottom, left и right, для расположения элемента относительно того места, где бы он появился при обычном позиционировании. На месте, где бы должен был находится наш блок, образуется пустое пространство."
"Опишите основные методы вёрстки: их преимущества и недостатки."
"Табличная и Блочная. Фиксированный дизайн (Статика) / Резиновый дизайн (Тянется при различных расширениях экрана) / Адаптивная вёрстка (Сайт будет отображаться при разных размерах экрана так, как это наиболее удобно пользователю. Но требует тщательной проработки нескольких макетов, для различных размеров экранов.)"
"Опишите: Clear Both (CSS)"
"Clear родственное свойство свойству float. Элемент с установленным свойством clear не будет двигаться вверх обтекая элемент с установленным свойством float, но будет смещаться вниз игнорируя обтекание. (both – запрещает обтекание объекта с обеих сторон, т.е. и слева, и справа)"
"Опишите: Graceful Degradation"
"Graceful degradation сфокусирована на создании веб-сайта для наиболее продвинутого браузера. Тестирование в браузерах которые разработчики считают устаревшими проводиться в последней четверти цикла разработки и часто ограничены предыдущими версиями основных браузеров (IE, Mozilla). В соответствии с этой парадигмой, пользователи старых браузеров контент получат не в лучшем виде, но все же получат. Разработчики обращают внимание на исправление только наиболее заметных ошибок, при просмотре сайта в старом браузере."
"Опишите: Правило !important"
"!important — это способ сделать правила, которые должны реагировать одинаково независимо о того, в какой части документа оно применяется. Правило !important будет считаться заведомо победившим при сравнивании специфичностей селекторов."
"Опишите: Прогрессивное улучшение / Progressive Enhancement"
"Прогрессивное улучшение — стратегия сфокусированная на контенте. Заметьте разницу: Я даже не упомянул о браузерах. Понять прогрессивное улучшение очень легко: просто начинайте думать с контента. Контент создает базу на которой располагаются слои оформления и итеративности. (Пример: Сначала мы занимаемся разметкой. Необходимо как можно более точнее и семантически правильно разметить контент с помощью HTML. Это первый и самый главный уровень. Когда первый уровень готов можно переходить ко второму. С помощью CSS придадим нашему сайту привлекательность. А JavaScript поможет нашим посетителям взаимодействовать с сайтом.)"
"Отличие display: none vs visibility: hidden?"
"Элемент со свойством display: none или visibility: hidden, не отображается на странице. В этом плане результат одинаковый - в коде элемент есть, а на странице нет. Но между этими двумя свойствами существует весомое отличие: первый вариант убирает элемент с потока, а второй по сути просто делает его прозрачным."
"Примеры адаптация под экраны высокого разрешения?"
"Использование медиазапросов для условной загрузки изображений и назначения изображений с высоким разрешением. Использование art direction (элемент picture). Использование srcset и image-set для изображений с высоким разрешением."
"Сокращенная запись(CSS), зачем нужна и приведите пример?"
"Свойства из одной группы свойств можно записать сокращенно. Использование краткой записи свойств селекторов существенно упрощает процесс редактирования листов стилей. Также, сокращенная запись свойств позволяет создавать более компактный файл листов стилей, делать его удобочитаемым. Пример: font, background, margin, padding, border, border-top, border-right, border-bottom, border-left, list-style"
"Чем отличается margin от padding?"
"Margin определяет пространство за пределами (снаружи) элемента, padding определяет пространство внутри элемента."
"Что лучше использовать JPG? PNG? GIF?"
"JPG - один из самых популярных форматов. Это связано с тем, что данный формат можно очень хорошо сжимать (уменьшать его размер, но при этом также ухудшается качество изображения). PNG - формат, который поддерживает прозрачность. Имеет всего 2 варианта формата: PNG-8 и PNG-24, которые отличаются между собой количеством цветов, которые они поддерживают, и размером, который занимают. GIF - популярный формат для создания анимированных изображений, также поддерживает прозрачность. Очень похож по своим характеристикам на PNG-8, поддерживает такое же количество цветов."
"Что такое DOCTYPE и зачем он нужен?"
"Элемент предназначен для указания типа текущего документа — DTD (document type definition). Это необходимо, чтобы браузер понимал, как следует интерпретировать текущую веб-страницу, поскольку HTML существует в нескольких версиях."
"Что такое SASS, LESS. Зачем они нужны ( какую задачу решают )?"
"SASS, LESS - это CSS-препроцессоры, позволяющий разрабатывать таблицы стилей более продуктивным и удобным способом, чем обычный CSS. Он обладает рядом динамических компонентов, которые позволяют уменьшить код, а также делают его более универсальным и масштабируемым."
"Что такое SVG?"
"SVG означает scalable vector graphics (масштабируемая векторная графика). Это текстовой язык графики, с помощью которого можно рисовать изображения в виде текста, линий, точек и т.п., что позволяет создавать лёгкие и быстро обрабатываемые браузером изображения."
"Что такое float? Как он работает?"
"Float это свойство CSS позиционирования. Свойство которое определяет, по какой стороне будет выравниваться элемент, при этом остальные элементы будут обтекать его с других сторон. Допустим, если элемент перемещается влево (использует свойство float: left), он выравнивается по левой стороне содержащего элемента, а весь последующий контент выравнивается по правой стороне (до тех пор пока не достигнет нижней границы элемента)."
"Что такое overflow? (overflow-x, overflow-y)"
"Свойство CSS overflow управляет отображением содержания блочного элемента, если оно целиком не помещается и выходит за область заданных размеров. overflow-x, overflow-y управляет отображением содержания блочного элемента по оси x и y соответственно"
"Что такое reflow?"
"Reflow - это событие, которое происходит тогда, когда произошли изменения затрагивающие содержимое, структуру документа, положение элементов и тд (Манипуляции с DOM). Возбуждаеться процесс рекурсивного обхода ветви дерева DOM, вычисляющий геометрию элементов и их положение относительно родителя. Начало обхода - изменившийся элемент, но возможно и распространение в обратном порядке. Операции reflow очень ресурсоемки и являются одной из причин замедления работы веб-приложений."
"Что такое repaint?"
"Repaint - это событие, которое происходит тогда, когда изменился стиль элемента, не влияющий на его размеры и положение на странице (например, background-color, border-color, visibility), браузер просто отрисовывает его заново, с учётом нового стиля."
"Что такое БЭМ?"
"БЭМ расшифровывается как «Блок Элемент Модификатор». Это методика именования CSS-селекторов для построения абсолютно-независимых блоков. Правила создания: БЛОК - отвечает на вопрос «Зачем нужен это блок»? ЭЛЕМЕНТ – часть блока, которая не имеет смысла вне этого блока и не может быть использована вне него. МОДИФИКАТОР - служит для изменения внешнего вида (возможно, и поведение) блока или элемента."
"Что такое поток документа / Document flow ( HTML/CSS )? Назовите css-свойства которые могут изменять поток документа?"
"Flow (в переводе с англ. – поток) описывает, как элементы располагаются относительно друг друга. По умолчанию родственные элементы находятся в одном потоке и их расположение на странице статично; порядок появления элементов на странице такой же, как и в коде. С помощью CSS можно перемещать элементы в отдельные потоки. Это дает больше возможностей для дизайна страницы и контроля схемы размещения элементов над кодом. «Вырвать» элемент из потока можно при помощи свойства position и float(лишь частично влияет на элемент в потоке)."
"Что такое псевдоклассы?"
"Псевдоклассы обычно пишут после селектора через двоеточие, чтобы определить реакцию или состояние для данного селектора. Самые известные псевдоклассы: :LINK, :HOVER, :VISITED и :ACTIVE."
"Что такое специфичность селекторов? (СSS)"
"Применение к одному элементу противоречащих правил приводит к соревнованию по специфичности селекторов. Специфичность определяет их приоритетность в таблице стилей. Чем специфичнее селектор, тем выше его приоритет."

"JavaScript"

"Cпособы вызова функции: Что такое Apply And Call Invocation?"
"Вызов apply и call — Apply And Call Invocation. Позволяет вручную запустить функцию, попутно снабдив ее параметрами и обозначив this. makeArray.apply( car, ["one","two" ] );
"Cпособы вызова функции: Что такое Function Invocation"
"Вызов функции выполняется с помощью оператора ():"
"Cпособы вызова функции: Что такое Method Invocation?"
"Вызов метода / Method Invocation - это когда функция является частью объекта, она называется методом. «Вызов метода» представляет из себя вызов функции, принадлежащей объекту."
"Eсть ли разница между window и document?"
"Да. У JavaScript есть глобальный объект и всё происходит через него. window — тот самый объект, который хранит глобальные переменные, функции, местоположение, историю. Всё находится внутри него, setTimeout, XMLHttpRequest, console и localStorage также являются частью window.Аналогично дело обстоит и с document, который является свойством объекта window и представляет DOM. Все ноды — это часть document, следовательно, вы можете использовать getElementById или addEventListener для document. Но обратите внимание, что этих методов нет в объекте window."
"В чём особенность использования for .. in для объекта или массива?"
"Цикл for in всегда обходит всю цепочку прототипов полностью: таким образом, чем больше прототипов (слоёв наследования) в цепочке, тем медленнее работает цикл."
"В чём различие свойств innerHTML и outerHTML?"
"Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново. outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента."
"Есть ли что-то такое о чём нужно позаботится при использовании node.cloneNode()?"
"При клонировании убедитесь, что вы не дублируете ID."
"Зачем в JS писать VAR перед переменной?"
"Если создать переменную через обычное присваивание – будет создана глобальная переменная. А вот если создать переменную с использованием слова VAR, тогда будет создана локальная переменная, которая перестает существовать после завершения работы функции."
"Как бы вы добавили класс к элементу через селектор?"
"Получите элемент и добавьте имя класса в classlist."
"Как быть уверенным в том, что DOM подготовлен и можно выполнять JavaScript?"
"Вставьте ваш скрипт в конце body элемента. Когда DOM будет готов браузер вызовет ваш script внутри тэга. Вставьте ваш код внутрь события DOMContentLoaded. Это событие будет вызываться, когда DOM полностью загружен. Наблюдайте событие в readyState для document. Состояние «complete» будет означать полную загрузку:"
"Как остановить дальнейшее распространение события?"
"Вызвать event.stopPropagation();"
"Как предотвратить нажатие по ссылке?"
"вставить preventDefault() внутри обработчика события. Однако, это не остановит дальнейшее распространение. (return false тоже подходит)"
"Как проверить, что один элемент является дочерним другому?"
"Перво-наперво, проверьте является ли указанный родитель прямым для ребенка. Если нет, продолжайте двигаться вверх по дереву."
"Как реализовано наследование в JS?"
"На уровне языка реализованно наследование на прототипах. В Java Script каждый объект может иметь ассоциацию с другим объектом – так называемый “прототип” (prototype). В случае, если поиск некоторого свойства (или метода) в исходном объекте заканчивается неудачно, интерпретатор пытается найти одноименное свойство (метод) в его прототипе, затем – в прототипе прототипа и т.д."
"Как создать замыкание ( JS )?"
"Замыкания - это такой приём, когда новые области видимости (например, функций) всегда имеют доступ к внешней области, в которых они были объявлены. Собственно, единственный механизм создания областей видимости в JavaScript — это и есть функции: таким образом, объявляя функцию, вы автоматически реализуете замыкания. Или, другими словами: любая объявленная функция по умолчанию ведёт себя как замыкание."
"Как создать массив в JS?"
"var array = [""Value 1"", ""Value 2"", ""Value 3”]; var array = new Array(""Value 1"", ""Value 2"", ""Value 3"");"
"Как я могу запустить обработчик в фазе захвата, а не в фазе всплытия?"
"В методах addEventListener и removeEventLister есть третий опциональный параметр. Вы можете установить его в true или false в зависимости от того хотите или нет использовать фазу захвата."
"Какие возможны способы вызова функции?"
"Существует четыре пути вызова функций: Вызов метода — Method Invocation. Вызов функции — Function Invocation. Вызов конструктора — Constructor Invocation. Вызов apply и call — Apply And Call Invocation."
"Какие из объектов трактуются как false, какие как true?"
"undefined, null - false; Все числа - true, кроме 0, NaN — false. Все строки true, кроме пустой строки """" — false. Объекты - всегда true."
"Какие языковые конструкции в javascript создают scope?"
"JavaScript используется область видимости на уровне функций. Блоки кода, вроде того, который у нас идёт сразу после if, не создают новую область видимости."
"Каким образом можно предотвратить множественный вызов обработчика для одного события?"
"Если слушатель события прикреплён к одному и тому же типу (click, keydown, и т.д.) элемента, вы можете вызвать event.stopImmediatePropagation() в первом обработчике и другие не будут выполнены."
"Какой наибыстрейший метод для получения элемента через css селектор?"
"Это зависит от того, что вам нужно найти. Если у вас есть ID элемента, то getElementById — это самый быстрый путь для получения элемента. Однако, вам не следует содержать много ID в вашем документе, чтобы избежать заучивания стилей. getElementsByClassName — это второй по скорости метод для получения элемента."
"Когда вызывается window.onload?"
"window.onload вызывается, когда DOM готов и весь контент, включая картинки, стили, фреймы и т.д. загружен."
"Могу ли я удалить удалить обработчик события с элемента?"
"Да. target.removeEventListener(""click"", handler)"
"Можно ли в JS использовать функцию в качестве конструктора?"
"var A = function() {}; var myA = new A();"
"Назовите различные пути для получения элемента из DOM дерева?"
"getElementById, getElementsByClassName, querySelectorAll"
"Особенности использования this?"
"Когда мы используем this в глобальной области видимости, она просто ссылается на глобальный объект. При вызове foo() -> this ссылается на глобальный объект. При вызове метода test.foo() this ссылается на test. Если перед вызовом функции присутствует ключевое слово new то данная функция будет действовать как конструктор, внутри такой функции this будет указывать на новый созданный Object. Когда мы используем методы call или apply - то this будет присвоено значение первого передаваемого параметра."
"Отличия атрибут (attribute) от свойства (property)?"
"Доступ к атрибутам осуществляется при помощи стандартных методов. Отличия: Могут быть только строками. Их имя нечувствительно к регистру(т.к. это HTML). Видны в innerHTML (за исключением старых IE). Все атрибуты элемента можно получить с помощью свойства attributes, которое содержит псевдо-массив объектов типа Attr."
"Почему querySelectorAll("".my-class"") медленнее, чем getElementsByClassName(""my-class"")?"
"querySelectorAll является универсальным методом. Он оптимизирован под различные типы селекторов. Если вы просто укажите имя класса с «.», внутри он будет использовать getElementsByClassName (может меняться в зависимости от браузера)."
"Почему я не могу использовать forEach или похожий метод массива для NodeList?"
"Массив и nodeList имеет параметр length и вы можете использовать цикл для прохода по элементам, но не всё так просто. Оба они унаследованы от Object. Однако, массив имеет иной прототип нежели, чем nodeList. forEach, map, и пр. включены в Array.prototype, которого не существуют для NodeList.prototype объекта. Следовательно, вы не можете использовать forEach для nodeList."
"Чем == отличается от === ?"
"Оператор == сравнивает на равенство, а вот === — на идентичность. Плюс оператора === состоит в том, что он не приводит два значения к одному типу"
"Чему равна переменная а и какого она типа? ( var a = 2 +""2""; )"
"22, тип - string."
"Что интересного в ECMAScript 6?"
"let — точно так же как var ограничивает видимость переменных в пределах функции, let ограничивает видимость переменных в пределах блока. const — создание read-only констант. Maps и WeakMap — для работы с объектами ключ/значение. Возможность указывать значения параметров функции по-умолчанию. Операторы сравнения is и isnt. Реструктуризующие присваивания."
"Что представляет из себя метод объекта?"
"Метод объкта в Java Script – это просто функция, добавленная в ассоциативный массив."
"Что такое .call и .apply? В чем различие между .call и .apply?"
"Методы call и apply позволяют нам определить контекст (this или, другими словами, конкретный объект) внутри вызываемой функции. Единственное отличие между двумя методами в следующем: первый параметр для обоих методов – объект (this в функции); для call в качестве остальных параметров передаются параметры вызываемой функции, а apply ожидает в качестве второго параметра получить массив, который содержит параметры вызываемой функции."
"Что такое AJAX и как он работает?"
"AJAX – подход к построение интерактивных пользовательских интерфейсов веб-приложений, заключающийся в “фоновом” обмене данными браузера с веб-сервером."
"Что такое Document Object Model (DOM)?"
"DOM – программный интерфейс, позволяющий программам получить доступ к содержимому HTML и XML-документов, а также изменять содержимое, структуру и оформление таких документов."
"Что такое JSON?"
"JSON – текстовый формат обмена данными, основанный на Java Script и обычно используемый именно с этим языком. JSON легко читается людьми."
"Что такое JSONP и зачем он нужен?"
"Формат нужен для того, чтобы иметь возможность выполнять асинхронные запросы к серверу расположенному на другом домене. Формат запроса, когда JSON заворачивается в функцию, называется JSONP («JSON with Padding»). В паттерне JSONP URL, на который указывает атрибут src тэга "script", возвращает данные JSON, обёрнутые в вызов функции. В подобном случае функция, уже определённая в среде JavaScript, может манипулировать JSON-данными. Начинка JSONP может выглядеть так: functionCall({""Name"": ""Foo""});"
"Что такое Polymer?"
"Не все браузеры поддерживают возможности по созданию веб-компонентов. Однако, благодаря библиотеке Polymer, можно это исправить. Polymer обеспечивает набор Polyfills, который позволяет использовать веб-компоненты в несовместимых браузерах."
"Что такое Web-components?"
"Основная идея в том, чтобы позволить программистам создавать «виджеты». Фрагменты приложения, которые изолированы от документа, в который они встраиваются. Использовать виджет возможно как с помощью HTML, так и с помощью JS API. По-простому, то веб-компонента это некий выделенный в отдельный блок кусок html кода с шаблонированием, стилями и логикой."
"Что такое defer и async?"
"обычное состояние: когда вы вставляете стандартный тэг script (без defer и async), парсер приостанавливает парсинг до того момента, как скрипт будет скачан и выполнен. DEFER: defer в тэге script отложит выполнение скрипта. Следовательно скрипт будет выполнен когда DOM будет доступен. Важный момент, defer не поддерживается всеми современными браузерами. ASYNC: скачивание и выполнение скрипта асинхронно.Если это возможно, устанавливайте выполнение скрипта в асинхронном режиме, но обратите внимание, что async не имеет эффекта на инлайновые скрипты."
"Что такое null и undefined? Чем отличается null от undefined?"
"null и undefined не эквивалентны. Каждый из них является представителем своего типа. JavaScript null — это литерал и ключевое слово языка, которое представляет собой отсутствие какого-либо объекта. Другими словами, null указывает «в никуда». undefined, олицетворяет отсутствие значения как такового. Оба абсолютно неизменны, не имеют свойств и методов и не способны их иметь. Фактически, попытка обратиться к какому-нибудь свойству, или присвоить его, приведёт к ошибке TypeError. Чтобы их различать, вы можете считать undefined неожиданным отсутствием значения, а null — умышленным отсутствием значения."
"Что такое «strict mode»?"
"Это режим, в котором накладывается ряд ограничений на исполняемый код, что повышает безопасность и может предотвратить появление некоторых ошибок."
"Что такое всплытие? Как браузер определяет местоположение клика?"
"Захват: Событие клика произошло. Он начинает с window (самый низкий уровень), затем идёт в document, затем html тэг, затем body, затем table… Он пытается достичь самого высокого уровня элемента, который только возможен. Это зовётся фазой «захвата» (первая фаза). Цель: когда браузер достигнет самого элемента на котором был произведен клик, то браузер отметит если ли у этого элемента какие-либо прикрепленные обработчики. Если ничего нет, то браузер выполнил обработчик клика. Это называет фаза цели (вторая фаза). Всплытие: после вызова обработчика, прикрепленного, браузер начнёт своё путешествие обратно с window. Уровень за уровнем он будет проверять если ли на элементе обработчик на «click» и если обнаружит таковой — выполнит. Это и есть стадия всплытия (третья фаза). Заметьте, когда вы кликните на ячейку, будут исполнены все обработчики событий на click для всех родительских элементов."
"Что такое глобальные переменные ? Как они создаются ? Какие проблемы связаны с использованием глобальных переменных?"
"Переменные объявляются с помощью ключевого слова var. В JavaScript есть две области видимости переменной: глобальная и локальная. Переменная, которая была объявлена за пределами функции является глобальной переменной - она имеет глобальную область видимости и доступна в любом месте исходного кода. Переменная, объявленная внутри функции называется локальной. Локальная переменная создаётся и уничтожается каждый раз при вызове функции. Внутри тела функции локальная переменная имеет преимущество перед глобальной. В JavaScript объявления переменных неявно ""поднимаются"" на самый верх относительно своей области видимости."
"Что такое метод bind?"
"Этот метод позволяет привязать функцию к нужному контексту и даже к аргументам."
"Является ли атрибут (attribute) аналогом свойства (property)?"
"Узел DOM - это объект, поэтому, как и любой объект в JavaScript, он может содержать пользовательские свойства и методы. Свойства и методы видны только в JavaScript и никак не влияют на отображение соответствующего тега. Узлы DOM, с другой стороны, являются HTML-элементами, у которых есть атрибуты."

"Bash"

"Как открыть историю команд в терминале, как найти и вызвать определенную команду из истории терминала?"
"В консоли набрав history [опциональные параметры] мы получим последние 500(по умолчанию) использованных команд. Кстати, список этих комманд можно ещё глянуть и в файлике «.bash_history» - он находится в вашей домашней папке пользователя. Что бы найти определенную команду в истории терминала - нужно набрать Ctrl+R, Эта команда выведет окно поиска - просто начните набирать команду. Повторное нажатие Ctrl+R выдаст второе совпадение. Что бы выйти из поиска нажмите Ctrl+G."
"Обясните обьединение команд в цепочки при помощи pipe ""|"" ?"
"Дословно делает перенаправление ввода-вывода: поток стандартного вывода предыдущего процесса перенаправляется в поток стандартного ввода следующего процесса."
"Поясните механизм прав на файлы в UNIX - чтение, запись, выполнение и группа, владелец, прочие."
"Существует три типа прав доступа: на чтение, запись и выполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение для владельца/группы/всех_остальных. «-rw-r--r--» где Первый (считая слева) символ говорит обычный ли это файл, каталог, символьное устройство, сокет или любое другое псевдо-файловое устройство. В нашем случае - указывает на обычный файл. Следующие три символа (в данном случае это rw-) задают права доступа владельца файла. Затем идут права группы, которой принадлежит файл (r--). Последняя тройка (r--) определяет права для всех остальных. Минус означает отсутствие каких-либо прав."
"Что делают команды: «alias»"
"alias — встроенная команда Bash и других шеллов для сокращения команд и их последовательностей. Использование alias позволяет сэкономить времени, так что их использование вполне рекомендуется."
"Что делают команды: «cat», «more», «less»"
"cat - вывести содержимое файла file1 на стандартное устройсво вывода. more - постраничный вывод содержимого файла file1 на стандартное устройство вывода. less - постраничный вывод содержимого файла file1 на стандартное устройство вывода, но с возможностью пролистывания в обе стороны (вверх-вниз), поиска по содержимому и т.п."
"Что делают команды: «chmod», «chown»"
"Команда chmod используется для установки (изменения) прав доступа файла. Только владелец файла может менять права доступа к нему. Команда chown используется для изменения владельца файла. Только владелец файла может изменять владельца файла или root."
"Что делают команды: «cp», «mv»"
"cp - копирование ( скопировать отдельный файл или скопировать всю директорию ). mv - переименовать или переместить файл или директорию."
"Что делают команды: «ln»"
"Создает символическую или жёсткую(физическую) ссылку на файл или директорию"
"Что делают команды: «ls»"
"Отображает содержимое текущей директории ( с параметрами - показывает скрытые файлы / детализированное представление )"
"Что делают команды: «man» и «info»?"
"Предоставляют руководство по использованию команд, при помощи которой пользователь всегда может в затруднительной ситуации получить подсказку почти по любой команде системы, форматах файлов и системных вызовах."
"Что делают команды: «mkdir»"
"Создать директорию ( с параметрами - несколько директорий или дерево директорий )"
"Что делают команды: «ps -ax»"
"ps - Выводит отчет о текущих активных процессах."
"Что делают команды: «su», «sudo»"
"Как su, так и sudo используются для запуска команд с привилегиями root. Su переключает вас в аккаунт root и требует пароля root (вы можете ввести команду exit и снова переключиться в режим обычного пользователя). Sudo запускает с привилегиями root одну команду - она не переключает вас в аккаунт суперпользователя и не требует отдельного пароля root."
"Что делают команды: «tar», «gzip», «bzip»"
"Команды работа с архивом (создать, показать, распаковать)"
"Что делают команды: «touch»"
"Модифицировать дату и время создания файла, при его отсутствии, создать файл с указанными датой и временем"
"Что такое «Шаблон/Маска поиска» ( Unix )?"
"Любой поиск основан на поиске по некоторому образцу — шаблону или маске поиска. Шаблон поиска задается при помощи специальных символов: символы-джокеры или метасимволы — символы, которые используются для замены других символов или их последовательностей, приводя таким образом к символьным шаблонам. Основные такие символы известны и часто используются припоиске файлов на диске или информации в поисковиках. Например: «$ find . -iname ""*.cpp""», где «*» - заменяет любую последовательность символов, в том числе и отсутствиесимволов. «$ find . -iname ""*.?pp""», где «?» - замена одного любого символа. «$ find . -iname ""*.[cp]pp""», где «[]» - поиск символов содержащихся в скобках."
"Что такое «Sticky bit» (он же бит закрепления в памяти) в каталогах?"
"Каталог с установленным sticky-битом означает, что удалить файл из этого каталога может только владелец файла или суперпользователь. Другие пользователи лишаются права удалять файлы (Даже если имеют права 7 (rwx)). Установить sticky-бит в каталоге может только суперпользователь. Заметьте, что владелец может удалить sticky-бит, но не может его установить."
"Что такое «awk»?"
"Awk -- это полноценный язык обработки текстовой информации. Awk ""разбивает"" каждую строку на отдельные поля. По-умолчанию, поля -- это последовательности символов, отделенные друг от друга пробелами, однако имеется возможность назначения других символов, в качестве разделителя полей. Awk анализирует и обрабатывает каждое поле в отдельности. Это делает его идеальным инструментом для работы со структурированными текстовыми файлами, осбенно с таблицами."
"Что такое «find»?"
"Команда для поиска файлов и директорий (с параметрвами - по имени, по принадлежности к пользователю, по маске имени."
"Что такое «grep»?"
"global - regular expression - print. Поиск участков текста в файле(-ах), соответствующих шаблону pattern, где pattern может быть как обычной строкой, так и регулярным выражением. Если файл(ы) для поиска не задан, то команда grep работает как фильтр для устройства stdout, например в конвейере."
"Что такое «sed»?"
"Sed: неинтерактивный редактор текстовых файлов. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, sed используется в конвейерной обработке данных, совместно с другими командами и утилитами."
"Что такое «tmux» и «screen»?"
"Это терминальные мультиплексоры. Терминальные мультиплексоры позволяют одновременно работать с несколькими терминальными сессиями в одном окне. Принцип их работы заключается в следующем: терминал с множественными вкладками создается на удаленной машине; на локальной машине окно терминала делится на несколько частей, и в каждой из них могут быть запущены любые приложения и процессы."
"Что такое «wc»?"
"«wc» (word count — «количество слов») — unix‐утилита, выводящая число переводов строк, слов и байт для каждого указанного файла и итоговую строку."
"Что такое управление заданиями, обьясните команды «&», «jobs», «fg», «bg», «ctrl+z»?"
"Однако многие командные оболочки (включая bash и tcsh) имеют функции управления заданиями (job control), позволяющие запускать одновременно несколько команд или заданий (jobs) и, по мере надобности, переключаться между ними. Команда jobs выводит список процессов, которые выполняются в фоновом режиме, fg — переводит процесс в нормальный режим («на передний план» — foreground) и возобновляет работу, a bg — в фоновый. Запустить программу в фоновом режиме можно с помощью конструкции <команда> &, ctrl+z переведет задачу в suspend и поместит ее в фоновый режим."
"Что такое цепочки команд? как работают «&&», «||»?"
"«&&» - оператор управления для объединения двух команд таким образом, что вторая команда будет выполняться, только если первая возвратила нулевое (выполняется успешно) значение. «||» - оператор управления разделяет две команды и запускает вторую команду, только если первая команда возвратила ненулевое значение. Другими словами, если первая команда была успешной, вторая команда не запустится. Если первая команда завершилась с ошибкой, то вторая запустится."

"GIT"

"«git reset --hard HEAD~3» vs «git reset --soft HEAD~3»"
"--soft сохраняет все состояние проекта и проиндексированные файлы, сбрасывая три последних коммита ( но не теряя их - изменения внесенные тремя коммитами остаются, как будето бы вы ничего не коммитили ). --hard убивает последние n (три) коммитов как буд-то вы их никогда и не делали ( изменения внесенные в этих коммитах - удаляются )"
"В чём разница между «git pull» и «git fetch»?"
"«git pull» — это по сути «git fetch» после которого сразу же следуюет «git merge». «git fetch» получает изменения с сервера и сохраняет их в «refs/remotes/». Это никак не влияет на локальные ветки и текущие изменения. А «git pull» уже вливает все эти изменения в локальную копию."
"Зачем нужна система контроля версий?"
"Это программное обеспечение для облегчения работы с изменяющейся информацией. Системы контроля версий позволяют хранить несколько версий одного и того же документа, при необходимости, возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение и многое другое."
"Как на предыдущюю ветку?"
"git checkout -"
"Как отменить «git add» до коммита?"
"«git reset имя_файла»"
"Как отменить все изменения, кроме тех, что уже добавлены в индекс?"
"git co ."
"Как отменить коммит ( не удаляя историю )?"
"git revert sha_of_commit"
"Как отменить последний коммит?"
"«git reset HEAD~1»"
"Как отредактировать текст сообщения к последнему коммиту?"
"git commit --amend"
"Как переименовать локальную ветку?"
"git branch -m oldname newname"
"Как перенести коммит с одной ветки в другую?"
"git cherry-pick some_hash"
"Как перепрыгнуть на конкретный коммит?"
"git checkout sha_коммита"
"Как поменять коммиты местами?"
"Напримре при помощи «git rebase -i HEAD~3» # В открывшемся окне редактора (где вы видите pick/squash и тд). Нужно просто поменять местами порядок коммитов и не трогать/редактировать их"
"Как посмотреть изменения внесенные отдельным коммитом?"
"git show sha_of_commit"
"Как посмотреть испорию коммитов?"
"git log"
"Как посмотреть историю изменения файла? (кто и в каком комите изменил что-то в конкретном файле?)"
"git log -p имя_файла"
"Как посмотреть кто последний трогал строчку в файле?"
"git blame file_name ( git blame -L 2,+3 file_name )"
"Как просмотреть все скрытые ветки?"
"git branch -a"
"Как просмотреть текущие указатели на репозиторий? ( где написано куда вы пушите? )"
"git remote -v"
"Как сравнить две ветки?"
"git diff branch1..branch2"
"Назовите преимущества «push with force» перед стандартной работой с репозиторием? сколько времени данная методика экономит лично вам?"
"=)"
"Отличия Merge от Rebase?"
"Самое главное отличие - это то, что merge создает еще один коммит ( merge commit, --ff не учитываем), а rebase меняет базу для ветки и последовательно преносит коммиты на другую базу (последовательно решая конфликты). Использование Rebase является более хорошим тоном в разработке."
"Удалить ветку на сервере?"
"git push origin --delete имя_ветки"
"Что такое Squash?"
"Это один из видов итерактивного ребейса ( rebase -i ), используется для редактирования истории коммитов - сжать все свои коммиты в один или несколько коммитов ( так же можно дать им более емкое и говорящее название )"
"Что такое «git bisect»?"
"Команда для отладки / поиска ошибки. Команда bisect выполняет бинарный поиск по истории коммитов, и призвана помочь как можно быстрее определить, в каком коммите была внесена ошибка."
"Что такое «git rebase -i»?"
"Интерактивное ребазирование - Если у вас есть некоторые коммиты которые вы хотели бы модифицировать во время выполнения ребазирования, вы можете вызвать интерактивный диалог передав параметр «git rebase -i», эту команду часто используют чтобы переписать ваши коммит-объекты перед тем как выполнить push. Это простой способ разделить, слить или переупорядочить коммиты перед тем как расшарить их с другими. Вы также можете использовать его чтобы чистить коммиты."
"Что такое «git reflog»?"
"Эта команда показывает все коммиты сделанные на данном компьютере. С ее помощью можно по истории изменений сделанных на данном компьютере. ( вернуть ветку если удалил и т.д.)"
"Что такое «git stash»?"
"Это ""заначка"". Что-то вроде буфера обмена. Можно свободно сохранить изменения в памяти. Часто возникает такая ситуация, что пока вы работаете над частью своего проекта, всё находится в беспорядочном состоянии, а вам нужно переключить ветки, чтобы немного поработать над чем-то другим. Вы можете сделать грязный коммит ( и в истории он останется ) или можете скопировать все изменения в буфер а потом ( когда надо ) достать их от туда."
"Что храниться в «.gitconfig»?"
"Это пользовательский конфиг. Он позволяет настраивать алиасы, надстройки, цвета, команды и тд."
"Что храниться в «.gitignore»?"
"В .gitignore - указываются все файлы, которые мы не хотим отслеживать ( игнорировать ). Примечание: Уже добавленные файлы не будут игнорироваться."

"Ruby"

"$LOAD_PATH включает в себя дирректорию с установленными Гемами / RubyGems ?"
"Да"
"attr_reader, attr_writer, attr_acсessor - что они делают?"
"attr_reader - создание только методов чтения, attr_writer - создание только методов записи, attr_acсessor - создание метов чтения и записи."
"«initialize» это метод класса (class method) или станса (instance method)?"
"Метод станса (instance method)"
"«Наследуются» ли переменные класса?"
"Нет, тут поведение / принцип отличаеться от наследования. Любое изменение переменной класса в дочернем классе / subclass приведет к изменению переменной в текущем классе / superclass и во всех остальных подклассах текущего класса."
"Блок «rescue» определяет новую область видимости."
"Нет"
"Блок «while» определяет новую область видимости."
"Нет"
"В MRI какие объекты не подпадают под сборку мусора / garbage collection?"
"Символы, но в руби 2.2 был реализован символьный сборщик мусора / symbol GC ( инкрементальный сборщик мусора / incremental GC) )"
"В какой из классов подключается модуль Kernel?"
"A: Object"
"В какой последовательности итерируются значения в хеше?"
"Hash упорядоченная коллекция состоящая из пар ключ значение. Ruby запоминает в каком порядке добавлялись ключи, поэтому можно узнать какой элемент является последним в хеше"
"В чем отличие Kernel#require от Kernel#load?"
"«Kernel#require» не требует указывать расширение файлов и не загружает один и тот же файл дважды."
"В чем отличие Kernel#require от Kernel#require_relative?"
"Kernel#require_relative игнорирует «путь загрузки», и производит поиск библиотеки относительно текущего файла."
"В чем отличие proc от lambda?"
"«Return» в объектах «proc» приводит к выходу из вызывающего метода, а return из «lambda»-объектов приводит к выходу из самого «lambda»-объекта. У «proc» есть гибкость при задании аргументов, он закрывает глаза на недостачу и даже на избыток аргументов, а «lambda» - нет."
"В чем отличие «BasicObject#instance_eval» и «BasicObject#instance_exec»?"
"«BasicObject#instance_exec» принимает блок, а не строку. Так же «BasicObject#instance_exec» может принимать аргументы и прокидывать их в блок, позволяя блоку выполнение в контексте получателя с использованием параметров."
"В чем отличие «Hash#fetch» и «Hash#[]» при запросе значения у хэша?"
"«Hash#fetch» предоставляет возможность обработки случая, когда в хэше ключа не существует"
"В чем отличие «Object#is_a?» и «Object#instance_of?»"
"«Object#instance_of?» игнорирует наследование и подмешивание, т.е. возвращает true - если объект является инстансом заданного класса"
"В чем отличие «puts» от «print»?"
"«puts» добавляет символ новой строки к своему выводу."
"В чем отличие «puts» от «p»?"
"«p» конвертирует обьект к строке при помощи метода «inspect», результат возврата - конвертированное значение. «puts» использует «to_s» и возвращает «nil»."
"В чем отличие «to_s» от «inspect»?"
"«inspect» это тоже самое что и «to_s». Лишь некоторые классы переопределяют «inspect», что бы предоставить более полезную информацию для отладки."
"В чем отличие инстансной переменной класса от переменной класса? (Инстансная переменная класса где экземпляр сам класс)"
"Инстансная переменная класса это инстансная переменная класса. Инстансная переменная класса не может быть использована (вызвана) внутри методов экземпляра класса."
"В чем отличие методов «Module#remove_method» и «Module#undef_method»?"
"«Module#remove_method» удалит определение метода из класса, но Руби все еще будет искать определение данного метода в суперклассах или миксинах. «Module#undef_method» предотвращает вызов данного метода в рамках текущего класса."
"В чем разница между оператор/statement и выражение/expression в Руби?"
"В Руби все операторы/statements являются выражение/expression, так как все операторы/statments возвращают значения."
"Возможно ли вызвать приватный метод обьекта получателя не из области видимости этого обьекта."
"Да, Object#send"
"Возможно ли поменять контекст замыкания в Руби?"
"Да, контекст замыкания можно поменять используя метод «binding»"
"Все ли в Руби является обьектом?"
"Методы, блоки, ключевые слова - это не объекты. Хотя существуют Method, Proc, некоторые ключевые слова - которые относятся к объектам."
"Где в обьектной модели находяться фигурные скобочки ( {} ), которые определяют литерал хеша?"
"Их не существует в объектной модели - это функция интерпретатора"
"Где определены «class_variable_get», «class_variable_set»?"
"«Module»"
"Где определены «instance_variable_get», «instance_variable_set»?"
"«Object»"
"Где определены «local_variables», «global_variables»?"
"«Kernel»"
"Дайте определение: шаблоны проектирования ( паттерны )?"
"Шаблоны проектирования ( паттерны ) - Эффективные способы решения характерных задач проектирования, в частности проектирования компьютерных программ. Паттерн не является законченным образцом проекта , который может быть прямо преобразован в код, скорее это описание или образец для того как решить задачу, таким образом что бы это можно было использовать в различных ситуациях."
"Должен ли объект быть proc-объектом, что бы знак «&» добавлялся к нему в списке параметров?"
"Нет, «&» добавляется перед каждый объектом, который отвечает на метод «to_proc»"
"Если в классе А объявлен метод класса «m», и класс Б наследуется от класса А, будет ли класс Б иметь доступ к классу «m»?"
"Нет, наследование не дает возможности доступа к методам или переменным класса другого подкласса."
"Если метод не содержит выражений/expression возвратит ли он значение?"
"Да, вернет «nil»"
"Если метод объявлен вне определения класса или модуля на верхнем уровне, где он будет находиться/определяться?"
"Он будет приватным методом инстанс-объекта класса Object, специального объекта «main»"
"Если мы вызовем ключевое слово «super» без аргументов, которые принимает этот метод. Будут ли переданы хоть какие-то аргументы в метод суперкласса?"
"Все аргументы, которые были переданы текущему методу, будут переданы в метод суперкласса"
"Если установлено более одной версии гема, то какая версия будет использоваться?"
"Будет использоваться гем с самым большим номером версии"
"Зачем нужно использовать alias?"
"Если нужно создать синоним для уже существующего метода, который является более читаемым или если необходимо добавление функциональности в существующий метод."
"Имеют ли загруженные при помощи Kernel#require или Kernel#load файлы доступ к локальным переменным текущего файла?"
"Нет"
"Как «return» из метода отличается от «return» из блока?"
"«return» из метода приводит к возврату из метода. «return» из блока приводит к возврату из метода, который лексически охватывает блок."
"Как в руби создать singleton?"
"Подключив модуль Singleton."
"Как внести выражение/expression в литерал Regexp?"
"Использование «{}», точно так же как и двойные кавычки в строке."
"Как вы можете избежать ошибок округления в классе Numeric, которые возникают при использовании двоичной арифметики с плавающей точкой?"
"Используя BigDecimal"
"Как вы можете изменить область видимости метода из вне класса?"
"Используя «Module#class_eval»"
"Как вы можете определить присутствие метода у объекта?"
"Object#respond_to? или Module#method_defined?"
"Как вы можете открыть «eigenclass» из текущего - ассоциативного класса?"
"class << self"
"Как вы можете получить ссылку на «eigenclass» класс из текущего - ассоциативного класса?"
"«Object#singleton_class», «eigenclass = class << self; self; end;»"
"Как вы можете получить текущее состояние стека вызова?"
"Exception#backtrace (состояние на момент вызова исключения), Thread.current.backtrace (текущее состояние), Kernel#caller ( массив строк ) или Kernel#caller_locations ( тоже самое, что и Kernel#caller, только возвращает массив специальных обьектов, у которых есть методы которые могут предоставить спец. информацию про стрек вызова)"
"Как вы можете предотвратить наследование метода из родительского класса в дочернем классе?"
"Воспользовавшись «undef» в дочернем классе"
"Как задать значение по умолчанию для хэша?"
"Подставив значения в качестве аргументов «::new» при инициализации или изменив значения по умолчанию непосредственно с помощью метода «Hash#default». Также можно предоставить значение по умолчанию во время запроса при помощи «Hash#fetch»."
"Как можно предотвратить объект от бушующих изменений?"
"«#freeze»"
"Как можно проверить был ли подключен модуль к обьекту или нет?"
"Используя «is_a?». Например: «my_obj.is_a? MyModule»"
"Как обозначаются константы в Руби?"
"Имена констант как и имена классов задаются с большой буквы, имена классов и модулей в ruby воспринимаются как константы."
"Как определяется приватный метод класса?"
"Определяется метод класса и вызывается «Module#private_class_method» с символом имени метода класса в качестве аргумента"
"Как руби понимает, что сеттер метод: такой как - «def []=(key, value)» должен быть вызван как «test[:b] = 4»"
"Это синтаксическое изменение производит сам интерпретатор / interpreter."
"Какая глобальная константа позволяет получить доступ к аргументам заданным из командной строки?"
"ARGV"
"Какая глобальная переменная указывает на последнее вызванное исключение?"
"$ERROR_INFO или его синоним $!"
"Какая разница между «==» и «===»?"
"По отношению к объектам класса «Object» - идентичны, но «===» переопределен в классах «Range», «Regex», «Proc», что бы добиться более более выразительной семантики в операторе «Case»"
"Какая разница между «==» и «eql?»?"
"«eql?» выступает как альтернативное сравнение. Hash использует «eql?» для проверки хэш-ключ равенства. «eql?» в сравнении типов Numeric сравнивает не только значения но и классы. Если вы хотите расширить функционал «==» для простых типов(для которых эта функция переопределен) еще и проверкой на принадлежностью одному классу, то можно использовать «eql?»"
"Какая разница между «==» и «equal?»?"
"«==» - выполняет общий сравнительный анализ ( сравнение значений ) и реализуется по-разному в отношении различных классов, а «equal?» определяется на «BasicObject» и сравнивает идентичность объекта ( вернет true, если только сравниваемые объекты - это один и тот же объект ). Таким образом, оператор «equal?» не должен быть перезаписан в подклассах."
"Какая разница между символьным литералом, таким как «?А» и строковым литералом «А»?"
"Разницы нет, это обе строки."
"Каким будет объект, если он получил значение из «недоверенного» объекта / «tainted»?"
"Он будет тоже помечен (установленн флаг) как «tainted»"
"Каково происхождение ключевых слов public / private / protected?"
"Это приватные инстанс-методы класса «Module». Так как Class подкласс Module, эти методы могут быть вызваны без явного вызова «self» объекта."
"Какое исключение будет вызванно, если метод попытаться дернуть с не правильным количеством параметров?"
"ArgumentError"
"Какое исключение будет вызванно, если метода не существует?"
"NoMethodError"
"Какое кодирование / encoding использует MRI по умолчанию?"
"«UTF-8»"
"Какое отличие в вызове Proc и lambda?"
"lambda больше похожи на обычный метод и поэтому накладывают дополнительные ограничения на входные параметры: если lambda объявлена с двумя параметрами - то при вызове на вход должно быть передано именно 2 параметра, в противном случае будет сгенерировано иключение ArgumentError, в случае Proc-а лишние параметры будут отброшены, а недостающие заполнены значением nil."
"Какое отношение методы класса(class methods) имеют к методам синглтона (singleton methods)?"
"Методы класса(class methods) это методы синглтона (singleton methods) анонимного класса ассоциируемого с этим классом"
"Какой вызывается метод когда константа небыла найдена?"
"Ближайший «const_missing»"
"Какой единственный оператор принимает три операнда?"
"Оператор условия «?:» ( Его иногда называют тернарный оператор сравнения «if»)"
"Какой метод вы можете использовать для обхода по строке?"
"String#each_char"
"Какой метод вызывается, если метод который был вызван не был найден?"
"Ближайший «method_missing»"
"Какой оператор более приоритетный «&&» или «=»"
"«&&»"
"Какой оператор более приоритетный «&&» или «and»"
"«&&»"
"Какой оператор более приоритетный «&&» или «||»"
"«&&»"
"Какой оператор более приоритетный «and» или «=»"
"«=»"
"Какой оператор должен быть определен в целях реализации модуля Сравнения/Comparable?"
"<=>"
"Какой по умолчанию стоит уровень $SAFE?"
"0"
"Класс String включает в себя модуль Enumerable?"
"Нет"
"Когда вам нужно использовать «Hash#rehash»?"
"Если ключами хеша являются переменные, то может возникнуть ситуация, когда их значение меняется. Чтобы иметь доступ к ассоциированным с ними данным нужно вызвать данный метод, чтобы он привел ключи в соответствие с новым значением переменных. Например, когда массив является колючем в хеше."
"Когда вы можете получить «LocalJumpError?»"
"Вы можете получить данный вид исключения, попытавшись вызвать «yield» когда блок не был задан. Так можно поймать это исключение, попытавшись сделать return из метода который уже делает return, т.е. если вы захотите вызвать return из Proc объекта, чей лексический метод уже возвращает значение ( возвращает данный proc объект )."
"Когда вы наследуетесь от неизвесного вам класса, чему особенно вы должны уделять внимание?"
"Вам следует следить за названиями методов, так как вы можете переопределить приватные методы родительского класса. Так же следить что бы вы не перезаписали переменные класса."
"Когда можно/нужно использовать в блоках синтаксис do/end в отличии от фигурных скобочек «{}»"
"Обычно «do/end» синтаксис для блока используется для отображения много-строчных выражений. Также существует альтернативная конвенция: использовать синтаксис «фигурные скобки» для блоков, которые возвращают значение, а «do/end» синтаксис для блоков, которые как-то изменяют состояние системы и не возвращают значение."
"Когда нужно явно использовать оператор «return»?"
"Для преждевременного возврата из метода"
"Константы публичные/public или приватные/private?"
"Публичные/Public"
"Метод «initialize» публичный / public или приватный / private?"
"По умолчанию метод «initialize» приватный / private"
"Методы класса публичные/public или приватные/private?"
"По умолчанию они являются публичными/public. Но вы можете изменить их область видимости при помощи Module#private_class_method или сделать их публичными - Module#public_class_method."
"Могут ли методы начинаться с большой буквы?"
"Да, но конвенция запрещает это делать"
"Могут ли модули наследоваться?"
"Нет"
"Можем ли мы добавить свои методы в «Struct»?"
"Да"
"Может ли «eval» принимать блок?"
"Нет, «eval» принимает строку. Хотя «Module#class_eval» и «BasicObject#instance_eval» могут принимать блоки."
"Можно ли получить доступ к инстансным переменным объекта не из контекста получателя?"
"Да. С помощью метод-акцесора, «Object#instance_variable_get», «BasicObject#instance_eval», «Binding#eval»."
"Можно ли рассматривать «Module#attr_reader» как пример метапрограммирования?"
"Да, так как он создает геттер / getter методы в момент создания класса."
"Назовите «superclass» класса «Class»"
"«Module»"
"Назовите два варианта использования диапазонов/Range?"
"Сравнение, Итерация"
"Назовите два варианта использования оператора «*»/splat?"
"Сбор аргументов из списка параметров в массив. Расщипление массива на элементы или преобразование набора в массив элементов."
"Назовите два различных Proc объекта."
"proc и lambda"
"Назовите две главные функции/фичи модулей в руби?"
"Миксины / mixins, и пространство имен / namespaces"
"Назовите класс, который является родоначальником всех классов."
"BasicObject"
"Назовите отличия приватного/private от защищенного/protected метода."
"Закрытый метод является внутренним по отношению к реализации класса, и он может быть вызван только другими экземплярами методов этого класса (или его подклассов). Подразумевается, что закрытые методы вызываются в отношении self-объекта и не могут быть вызваны в отношении объекта явным образом. Если «m» является закрытым методом, то его можно вызвать в функциональном стиле, как «m». Вызвать его в форме «оbj.m» или даже «self.m» невозможно. Защищенный метод похож на закрытый в том смысле, что он может быть вызван только из реализации класса или его подклассов. От закрытого метода он отличается тем, что может быть вызван для любого экземпляра класса в явном виде и не ограничен всего лишь неявным вызовом в отношении self-объекта."
"Назовите преимущества оператора «case» перед оператором «elsif»?"
"Оператор «case» работает значительно быстрее «if» «elsif», и также более красивый при большом количестве сравнений."
"Назовите преимущества оператора «elsif» перед оператором «case»?"
"Оператор Case может выглядеть очень запутанным при использовании нескольких значений подряд ( через запятую )"
"Назовите противоположный метод для Enumberable#select?"
"Enumberable#reject"
"Назовите различия между «Object#dup» и «Object#clone»?"
"«Object#clone» копирует даже «frozen» объекты и любые singleton - методы объекта, а «Object#dup» - нет."
"Назовите разницу между taint и trust?"
"Теперь эти методы унифицированы и выставляют один и тот же флаг. Более предпочтительным является #tainted?, а при вызове #untrusted? будут появляться ворнинги: «untrust is deprecated and its behavior is same as taint»"
"Назовите родительский класс класса StandardError?"
"Exception"
"Назовите синоним Enumberable#collect?"
"Enumberable#map"
"Назовите синоним Enumberable#find?"
"Enumberable#detect"
"Назовите синоним Enumberable#inject?"
"Enumberable#reduce"
"Назовите синоним Enumberable#select?"
"Enumberable#find_all"
"Назовите синоним «Enumerable#include?»?"
"Enumerable#member?"
"Назовите синоним «Hash#[]=»?"
"Hash#store"
"Назовите синоним метода «Hash#key?»"
"Hash#has_key?, Hash#include?, Hash#member?"
"Назовите синоним метода «Kernel#__method__»?"
"Kernel#__callee__ Отличие лишь в том, что «__callee__» возвращает имя алиаса ( если вызов идет через alias )."
"Назовите способ «отключения» метода."
"«undef method_name», «Module#remove_method», «Module#undef_method»"
"Назовите суперкласс/superclass Fixnum?"
"Integer"
"Назовите суперкласс/superclass Integer?"
"Numeric"
"Назовите хотя бы два класса в который подключен модуль Enumerable."
"Array, Hash, Range, IO..."
"Назовите хотя бы один метод класса Dir, который может быть использован для обхода / итерации всех файлов в директории."
"Dir::entries, Dir::foreach, Dir#each"
"Наследуются ли константы?"
"Да"
"Наследуються ли методы класса?"
"Да"
"Опишите «Module#define_method». Количество и порядок принимаемых аргументов."
"«Module#define_method» принимает символ в качестве названия метода и блок (или обьект Method) в качестве тела метода."
"Опишите замыкание/closure в Руби."
"Замыкание это объект, который создается во время работы программы. Из тела этого объекта доступны все переменные, которые были в контексте на момент создания замыкания"
"Переменные определенные в замыкании доступны после выхода из замыкания?"
"Нет. Переменные, определённые в замыкании, остаются для него локальными!"
"Поддерживает ли в Руби оператор «case» поведение fall-through? ( Выполняется соответствующий условию блок, а затем выполнение продолжается до конца оператора. Что бы разрешить выполнение блока кода при нескольких совпадениях.)"
"Нет"
"Поддерживает ли руби «обязательные именованные аргументы»?"
"Да. При определении метода в именованные аргументах можно не указывать значение по умолчанию, и если при вызове метода они не будут заданы, будет возбуждена ошибка."
"Почему блок называется анонимным?"
"Он не имеет названия. Он не существует вне его выполнения, если не преобразуется в объект Proc."
"Почему вы должны избегать использования переменных класса?"
"Значение переменной класса может быть изменено в любом классе из цепочки наследования, что может привести к непредсказуемому поведению в классах которые используют эти переменные."
"Почему вы моежете безопасно использовать строку в качестве хэш-ключа?"
"Потому что интерпретатор делает личную копию строки, используемой в качестве хеш-ключа."
"Почему имя класса начинается с большой буквы?"
"Потому что ключевое слово «class» создает новую константу, которая ссылается на класс. А константы начинаются с большой буквы."
"Почему название модуля начинается с большой буквы?"
"Потому что ключевое слово «module» создает новую константу, которая ссылается на класс. А константы начинаются с большой буквы."
"Почему нужно использовать «each» а не «for/in»?"
"«each» - принимает блок, таким образом определяет новую область видимости. «for/in» в свою очередь пропускает наружу последний итерируемый объект. Так же «for/in» зависит от «each», что означает что «each» более фундаментальный аспект языка. Методы итераторы, такие как «each» читаются более естественно."
"Почему символы обычно используются в качестве хэш-ключей вместо строк?"
"Строки мутабильны/mutable, а символы являются постоянными/immutable. Хотя Ruby (внутри) делает неизменной копию строки при использовании в качестве хеш-ключа, сравнение двух символов быстрее, чем сравнение двух объектов String. Это также условность."
"Почему употребелние строковых литералов в циклах нежелательно?"
"Для каждой строки создается новый объект, даже если значение одинаково. Поэтому лучше использовать переменные или символы."
"Расскажите правила объявления и вызова констант в Руби."
"Константу можно определить только в контексте класса (т.е. нельзя в внутри метода класса). Обратится к константе можно с помощью ИмяКласса::ИмяКонстанты."
"Руби обладает сильной или слабой типизацией?"
"Сильная типизация, так как тип обьекта проверяется прежде чем выполнить операцию над ним."
"Руби обладает явная или неявная типизацией?"
"Неявная так как явно-типизированные языки отличаются тем, что тип новых переменных / функций / их аргументов нужно задавать явно. А руби перекладывает эту задачу на интерпретатор."
"Руби статический или динамический язык программирования?"
"Динамический, так как сравнение типов производится в ран-тайме."
"Символы неизменяемые объекты. Назовите другие неизменяемые Ruby объекты."
"Fixnum"
"Чем вызов блока отличаться от вызова метода?"
"При вызове метода с большим количество аргументов Руби будет вызывать исключение. Блок будет просто игнорировать дополнительные аргументы."
"Чем вызов приватного/private метода, отличается от вызова публичного/public метода в рамках своего класса?"
"Приватный/Private метод должен быть вызван «функциональном» стиле, без явного указания объекта-приемника, или текущего объекта «self»"
"Чем отличается «Struct» от «OpenStruct»?"
"«OpenStruct» намного медленнее чем обычный «Struct» или класс и использует намного больше памяти. «OpenStruct» инициализирует объект класса «OpenStruct», «Struct» создает класс. «OpenStruct» позволяет добавлять атрибуты «на лету»."
"Чем синтаксис «%W» отличается от «%w» синтаксиса?"
"С помощью «%W» можно определить массив, содержащий строковую интерполяцию. Это подобие двойных и одинарных кавычек."
"Что будет в «a» «b» «c»? «def my_method(a, *b, **c)»"
Вопрос: "«a» - это обычный параметр, «*b» - принимает все входящие параметры вставленные после первого аргумента и преобразовует их в массив, «**c» - принимает любой параметр написанный в формате key: value в конце вызова метода. my_method(""a"", ""b"
Ответ
""c""
""d"", n: ""sss"") => «[""a"", [""b"", ""c"", ""d""], {:n=>""sss""}]»"
"Что возвращает метод «Kernel#__method__»?"
"Имя текущего метода в качестве символа"
"Что вы можете сказать об аргументе метода, который начинается с «&»?"
"Это блок кода, который можно передать любому методу в качестве неявного последнего аргумента. Методу можно передать только один блок. Он всегда идет в самом конце. Его можно задать при вызове любого метода, независимо от того, указаны в определении метода аргументы или нет."
"Что делает File::expand_path?"
"File::expand_path принимает в качестве первого аргумента путь и возвращает строку с его абсолютным значением. ( Если второй аргумент не задан, то File::expand_path возвращает абсолютный путь до аргумента относительно исполняемого каталога (того, где запускаем файл). Второй аргумент - это точке отсчёта, относительно которой будет вычисляться абсолютное значение пути.)"
"Что делает Kernel#autoload?"
"Предоставляет ленивую загрузку / lazy-loading файла. Загружает файл ( используя Kernel::require ) при первом обращении к константе."
"Что делает break (в циклах руби)?"
"Break приводит к выходу из цикла (или итератора). Заставляет выйти из итератора, но остаться в методе — прерывает цикл или блок. Break может возвращать значение — если такого нет то вернет nil."
"Что делает next (в циклах руби)?"
"Next - заставляет цикл пропустить оставшуюся часть текущей итерации и перейти к следующей итерации. Next с параметрами обычно не используется. Передаёт управление в конец цикла или блока — что бы могла начаться следующая итерация."
"Что делает redo (в циклах руби)?"
"Redo - презапускает цикл или итерацию с самого начала (только данную итерацию)."
"Что делает «Module#module_function»"
"Он создает копию указанного метода с возможностью вызывать этот метод в качестве метода модуля и, при подключении модуля к классу, становиться доступен каждому стансу класса."
"Что делает метод «Class#allocate» ?"
"Выделяет место для нового станса класса. Возвращаемый объект является экземпляром класса"
"Что значит self?"
"Текущий объект"
"Что значит «Class::new», где «Class» это класс «Class»?"
"Это метод класса объекта «Class» который создает новые классы"
"Что означает знак «!» в конце метода?"
"То, что надо работать с таким методом очень осторожно. Методы с таким наименованием, как правило, изменяют объект-приемник."
"Что по умолчанию делает BasicObject#method_missing?"
"Бросает исключение NoMethodError"
"Что произойдет если вы попытаетесь объявить константу класса из вне этого класса?"
"Константа будет определена, так как константы являются публично доступными и публично назначаемыми."
"Что произойдет, если блоку передать два аргумента, когда принимает он только один?"
"Ничего. Только первый аргумент будет передан блоку."
"Что произойдет, если вы попытаетесь переопределить «BasicObject#__send__»?"
"Руби вызовет предупреждение: «warning: redefining ""__send__"" may cause serious problems»"
"Что произойдет, когда вы попытаетесь уменьшить уровень $SAFE?"
"уровень $SAFE не может быть уменьшен - он может быть только увеличен"
"Что происходит при подключении (extends) модуля к классу?"
"Инстанс-методы (instance methods) модуля становятся методами-синглтона класса. ( методами класса ). Проще говоря - «extend» вызывает «include» для синглтон-класса объекта."
"Что происходит при подключении (include) модуля к классу?"
"Инстанс-методы (instance methods) модуля становятся доступными в качестве инстанс-методов (instance methods) класса. Проще говоря - «include» добавляет методы модуля объекту."
"Что происходит, когда значение становится слишком большим для Fixnum?"
"Оно автоматически преобразуются в Bignum."
"Что такое $LOAD_PATH?"
"Это предопределенная переменная ( «$:» синоним к «$LOAD_PATH» ), которая представляет собой массив, в котором содержаться имена каталогов и в котором при загрузке файлов производят поиск методы «load» и «require». В начальном состоянии «путь загрузки» содержит пути к стандартной библиотеке Ruby."
"Что такое DSL?"
"DSL - Domain Specific Language это API которое позволяет разработчикам решать задачи или предоставлять интерфейс на более понятном языке. Программы, написанные с помощью хорошо продуманного DSL, легко читать, они говорят сами за себя. Классическим примером DSL является фреймворк для тестирования RSpec."
"Что такое IO объект?"
"IO обьект - это инстанс класса IO, который может быть использован для «чтения» или «записи» бинарных данных «в» или «из» файла."
"Что такое eigenclass / metaclass / синглтон-класс?"
"Синглтон-методы объекта (self.some_method) являются методами экземпляра (instance methods) анонимного класса (eigenclass), связанного с этим объектом"
"Что такое singleton?"
"Класс который может иметь один(ограниченное число) инстанс(ов)."
"Что такое «Binding»?"
"Объект класса Binding это контекст, который включает в себя переменные, методы, и т.д. Он хранит в себе это состояние и может предоставить к нему доступ."
"Что такое «Struct» в Руби?"
"Это особый класс в Руби, который создает специфические классы содержащие только набор переменных и методы доступа к ним. Такие классы называются структурными шаблонами (structure templates)."
"Что такое «reflection API» в Руби?"
"Это коллекция методов определенных в «Kernel», «Object», и «Module» которая позволяет программе просматривать / изменять свою структуру и состояние."
"Что такое Утиная типизация ( Duck typing )?"
"""Если объект ходит как утка, и крякает как утка, значит он — утка"". Мы работаем с обьектом на основании его поведения, а не принадлежности к классу."
"Что такое итератор?"
"Объект, который позволяет обходить элементы контейнера. В Ruby, итератором, считается любой метод, который использует оператор yield."
"Что такое метапрограммирование?"
"Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы"
"Что такое метод Singleton?"
"Метод, который доступен только на одном объекте."
"Что такое метод мутатор?"
"Метод, который изменяет внутреннее состояние объекта-приемника."
"Что такое метод-предикат в контексте конвенций наименований методов Руби?"
"Это метод, который отвечает на вопрос, поставленный именем метода. Предикаты обычно возвращают булевое значение."
"Что такое модификаторы оператора (statement modifiers)?"
"Условие, которое следует после выполняемой части оператора. (Например «x = 1 if a == true»)"
"Что такое символ/symbol?"
"Символы являются скалярным значением обьекта. Их используют в качестве идентификаторов для отображения неизменяющихся строк что бы зафиксировать внутреннее значение."
"Является ли блок объектом?"
"Нет, блок синтаксическая структура интерпретатора. Блок может быть преобразован в объект Proc."
"Является ли метод объектом?"
"Нет, однако, объект Method конечно, объект"
"Являются ли методы экземпляра публичными/public или приватными/private?"
"По умолчанию они являются открытыми/public, но вы можете изменить их видимость при помощи Module#private, Module#protected или снова сделать их открытыми/public Module#public."

"Rails"

"Assets pipeline - какие его функции, назначение?"
"У asset pipeline есть три цели: прекомпиляция (precompile), конкатенация (concatinate) и минификация (minify) asset в один файл. Или другими словами: он просто берет все ваши stylesheets, javascript и images и любый другие файлы, которые вы захотите, прекомпилирует их ( из SASS в CSS ) сцепливает их в один файл (если это возможно), убирает пробелы и помещает в папку public/assets."
"Big O notation - что это?"
"Big O нотация расскажет вам, как зависит сложность алгоритма от того, что вы ему передаете на вход. Важно понимать, что Big O описывает только самый худший случай. O(1) - константа. O(n) - линейная зависимость. O(n^2) - квдаратичная зависимость (при каждом увеличении входных параметров - время работы будет увеличиваться вдвойне). O(log n) - пример - бинарный поиск."
"Http - stateless или statefull?"
"Stateless. В HTTP подразумевается, что вся сессия — это атомарный запрос/ответ, и нет никаких переходов между состояниями. Каждый новый запрос реально новый и новый запрос не знает что было до него, если вы хотите передать что-то между запросами - для этого есть куки."
"Length vs Size vs Count в ActiveRecord - назовите ключевые отличия."
"«#.count» - подсчитывает количество элементов при помощи SQL COUNT запроса. «#.length» - всегда пытается загрузить коллекцию ассоциаций в память, а затем вернуть количество загруженных элементов. Помните, если вы загрузили коллекцию ассоциации, то он НЕ будет принудительно обновляться. «#.size» - этот метод является комбинацией из двух предыдущих. Если коллекция была уже загружена, он вернут ее длинну, точно так же как работает метод length. Если же нет - будет работать как count."
"Length vs Size vs Count в руби - назовите ключевые отличия."
"Length и Size - ""практически"" алиасы ( вызов на Fixnum length - вернет exception, а size - нет ).По конвеншену length используется для строк, а size - для массивов и тд.. Count - метод Enumerable, а length и size - нет. Count - обычно используется совместно с блоком или аргументами и возвращает количество совпадений"
"Middleware stack (стека промежуточных программ) - опишите что это?"
"В Rack существует понятие middleware (чем по сути и является сам фреймворк). Используя middleware (посредник/фильтр) можно изменить/подготовить запрос перед тем как он попадет в Application, аналогично и с ответом для клиента."
"Public, Protected, Private?"
"Public. Методы или переменные доступны из любого места в коде. Protected. Защищенные методы или переменные доступные только внутри класса, где они были объявлены или из его произвольных классов. Private. Закрытые методы или переменные доступны только внутри класса."
"Scopes vs Class methods?"
"Scope-ы используются в цепочных вызовах, так как с методах класса поставить условие или возвращаемое значение будет более трудозатратно. Так же скоупы возвращает chainable object - в этом и есть суть. Если scope возвращает конкретную запись или nil - то лучше использовать класс метод."
"Strong Parameters - опишите основную идею."
"Основная идея, которая лежит в основе Strong Parameters, заключается в переносе mass-assignment защиты из модели в контроллер, к которому он относится. Принцип этой идеи состоит в том, что вы в контроллере явно указываете какие параметры вы ожидаете и уже с ними работаете (для каждого контроллера или для каждого action-а можно явно определить список принимаемых параметров)."
"В чем особенность Eager_load от других способов загрузки ассоциаций (опишите работу Eager_load)?"
"Этот метод загружает ассоциации в одном запросе с использованием Left Outer Join , точно так же, как действует includes в сочетании с references."
"В чем особенность Includes от других способов загрузки ассоциаций (опишите работу Includes)? (AR)"
"По умолчанию includes действует точно так же, как и preload, но в случае наличия условия по ассоциированной таблице переключается на создание единственного запроса с LEFT OUTER JOIN (Eager_load)."
"В чем особенность Joins от других способов загрузки ассоциаций (опишите работу Joins)?"
"Создает запрос с использованием INNER JOIN. При этом, загружаются данные только из первой (исходной) таблицы. Кроме того, этот запрос может возвратить дублирующие друг друга записи. Стоит заметить, что после выполнения метода joins вызов user.posts приведет в созданию еще одного запроса."
"В чем особенность Preload от других способов загрузки ассоциаций (опишите работу Preload)?"
"Этот метод загружает ассоциации в отдельном запросе. Т.к. preload всегда создает два отдельных запроса, то мы не можем использовать вторую таблицу в условии выборки."
"Для чего нужны Scope-ы?"
"Скоупинг позволяет определить часто используемые запросы, к которым можно обращаться как к вызовам метода. Все методы скоупов возвращают объект ActiveRecord::Relation ( что позволяет нам делать scope chain)."
"Зачем нужен Flash.now?"
"По умолчанию, добавление значений во flash делает их доступными для следующего запроса, но иногда хочется иметь доступ к этим значениям в том же запросе. ( Нужен для отображения сообщений через flash при использовании render или ajax. )"
"Зачем нужны partials ( партиалы )?"
"Частичные шаблоны - также называемые ""партиалы"" - являются еще одним подходом к разделению процесса рендеринга на более управляемые части. С партиалами можно перемещать код для рендеринга определенных кусков отклика в свои отдельные файлы."
"Интеграционное тестирование (integration testing) - опишите: цели, задачи."
"Интеграционное тестирование (тестирование сборки) - тестирование части системы, состоящей из двух и более модулей. Основная задача - поиск дефектов, связанных с ошибками в реализации и интерпретации взаимодействия между модулями. Основная разница между модульным и интеграционным тестированием состоит в типах обнаруживаемых дефектов. (покрытие интерфейсов)."
"Как долго «живет» сессия?"
"Время жизни куки, которая хранит идентификатор сессии по умолчанию составляет 0 секунд, т.е. кука храниться до того момента, как браузер будет закрыт. Это время можно изменить на стороне сервера."
"Как создаются 7мь стандартных акшенов ресурса ( resources :auctions )?"
"В результате комбинирования четырех (CRUD) маршрутов с различными методами HTTP-запросов(GET,PUT, POST,DELETE), вы получаете семь полезных перестановок. В обмен на это, вы соглашаетесь использовать строго определенные имена действий контроллера: index, create, show, update, destroy, new, edit."
"Какие выиды тестирования вы знаете? ( назовите хотя бы три )"
"Модульное тестирование (unit). Интеграционное тестирование (integration testing). Системное тестирование (system testing). Приемочное тестирование (acceptance testing). Так же есть тестирование производительности, стрес-тестирование, нагрузочное, тестирование совместимости."
"Какие типы ассоциаций Rails вы знаете?"
"Rails поддерживает шесть типов связей: belongs_to, has_one, has_many, has_many :through, has_one :through, has_and_belongs_to_many"
"Когда нужно использовать ActiveRecord::IrreversibleMigration?"
"Если ваша миграция не обратима вам следует вызвать ActiveRecord::IrreversibleMigration из вашего метода down. Если кто-либо попытается отменить вашу миграцию, будет отображена ошибка, что это не может быть выполнено."
"Модульное тестирование (unit) - опишите: цели, задачи."
"Модульное тестирование - это тестирование программы на уровне отдельно взятых модулей, функций или классов. Цель модульного тестирования состоит в выявлении локализованных в модуле ошибок в реализации алгоритмов, а также в определении степени готовности системы к переходу на следующий уровень разработки и тестирования. (чаще всего проводится по принципу ""белого ящика"")"
"Назовите 4 различных способа загрузки ассоциаций?"
"preload , eager_load , includes и joins."
"Назовите три принципа ООП."
"Инкапсуляция, Наследование, Полифорфизм."
"ООП знаете? Что это такое?"
"Объектно-ориентированное программирование – парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В языках с прототипированием (Java Script, к примеру) вместо классов используются объекты-прототипы."
"Опишите проблему N+1"
"Эта проблема возникает, при загрузке дочерних обьектов используя ассоциацию ( many в one-to-many ). Многие ORM , по умолчанию, реализуют ленивую загрузку - соответственно делается запрос на поиск одной записи для родительского обьекта и для КАЖДОЙ дочерней записи. Как вы понимаете, делая N+1 запрос вместо одного вы перенапрягаете БД, чего мы и должны избегать."
"Опишите работу template inheritance?"
"template inheritance позволяет контроллеру перемещаться по иерархии в поисках нужного темплейта. Т.О. если контроллер не найдет подходящего темплейта в своей папке, то он обратится к папке родительского класса в поисках нужного файла и т.д."
"Отличие Render от Redirect?"
"Простыми словами надо понимать, что render - говорит какую вьюху (или иной ресурс) использовать в создании ответа. Метод redirect_to делает нечто полностью отличное - он говорит браузеру послать новый запрос по другому URL!"
"Правильно ли использовать код приложения в миграциях? и почему?"
"Нет. Использование кода в миграциях недопустимо - Время идет, код меняется и изменив код можно добиться того, что миграции с нуля вообще не запустятся. Используйте, например, временные Rake задачи для изменения имеющихся данных (главное их потом не забыть запустить!) или SQL код внутри миграций."
"Приемочное тестирование (acceptance testing) - опишите: цели, задачи."
"Приемочное тестирование (Acceptance testing) - тестирование готового продукта конечными пользователями в реальном окружении. Приемочные тесты разрабатываются пользователями (обычно в виде сценариев)."
"Разница между HTTP-методами GET и POST?"
"GET передает данные серверу с помощью URL, а POST передает данные, используя тело HTTP-запроса."
"Системное тестирование (system testing) - опишите: цели, задачи."
"Основная задача системного тестирования - выявление дефектов, связанных с работой системы в целом: 1) отсутствующая или неверная функциональность 2) неверное использование ресурсов системы 3) непредусмотренные комбинации данных пользовательского уровня 4) несовместимость с окружением. Системное тестирование производится над проектом в целом с помощью метода «черного ящика»"
"Сколько примерно будет 2^32?"
"Ответ «около четырех миллиардов» является исчерпывающим."
"Хелперы в rails"
"Хелперы это специальные методы которые содержаться в файлах app/helpers (если специально обозвать метод то можено создать и в контроллере хелпер ) - часто используются в шаблонах, для генерации различного html кода или для доступа к переменным контроллера. Помимо этих хелперов есть уже встроенные хелперы в rails. Хелперы позволяют красиво и гармонично добавить некую логику в ваш HTML код тем самым не делая его грязным."
"Чем отличается процедурный подход от объектно-ориентированного?"
"Процедурный подход предоставляет возможность программисту определять каждый шаг в процессе решения задачи. Задачи разбиваются на шаги и решаются шаг за шагом. ООП предполагает заключение внутри одного класса, как данных, так и методов их обработки."
"Что выведет выдает rake routes?"
"Эта команда напечатают все ваши маршруты, в том же порядке, что они появляются в routes.rb. Для каждого маршрута вы увидите: 1. Имя маршрута (если имеется) 2. Используемый метод HTTP (если маршрут реагирует не на все методы) 3. Шаблон URL 4. Параметры роутинга для этого маршрута."
"Что за что отвечает в MVC?"
"В шаблоне MVC, как следует из названия, есть 3 основных компонента: модель, представление и контроллер."
"Что значит double render error? ( ошибки двойного рендера )"
"Данный вид ошибки проиходит когда процесс рендеринга уже начат и мы пытаемся вызвать еще один render/redirect (ошибка происходит когда мы вызываем два раза подряд ""render"" в контроллере ). Важно понимать, что запустить рендеринг страницы можно только один раз ( Соответственно - вызвать render/redirect в экшене контроллера можно единожды ). Важно понимать, что вызов render в action-е не останавливает выполнение остального кода."
"Что такое Active Record?"
"Active Record это фреймворк который предоставляет нам несколько механизмов работы с бизнес-объектами, данные которых требуют постоянного хранения в базе данных. AR реализует: 1) Представления моделей и их данных. 2) Представления связей между этими моделями. 3) Представления иерархий наследования с помощью связанных моделей. 4) Валидации моделей до того, как они будут сохранены в базу данных. 5) Выполнения операций с базой данных в объктно-ориентированном стиле. Active Record ограждает вас от необходимости использования SQL во многих случаях."
"Что такое Agile?"
"Agile — семейство процессов разработки ( а не единственный подход в разработке программного обеспечения ) ориентированное на использование итеративной разработки, динамическое формирование требований и обеспечение их реализации в результате постоянного взаимодействия внутри самоорганизующихся рабочих групп. Отдавая предпочтение непосредственному общению, agile-подходы уменьшают объём письменной документации по сравнению с другими подходами."
"Что такое BDD?"
"BDD означает, что behaviour (выраженные в виде user stories) ведут вашу разработку. BDD концентруется на поведении приложения а не на его имплементации. BDD - это идея процесса разработки которая должна работать на уровне продукта в целом, где задача - упростить создание системы ( реализуете требования к поведению системы в виде человеко-читаемых спеков ). BDD скорее набор определенных тестов. Три принципа BDD. 1. What code does, not what it is. 2. Не пишите тест в обьеме большем, чем нужно для прохождения одного куска кода. 3. Тестировать только то, что можно проверить ( не надо тестировать случаи которых вообще не может быть в природе )."
"Что такое Bundler?"
"Это менеджер для управления gem-ами. Это менеджер для управления зависимостями gem-ов в ruby приложениях. Эта утилита позволяет легко устанавливать необходимые gem-ы для вашего приложения, при этом вовсе не зависеть от установленных в системе."
"Что такое CRUD?"
"В любом ресурсе есть набор экшенов, которые отвечают за манипуляцию с этим ресурсом. CRUD это набор экшенов Create, Read, Update, Destroy."
"Что такое CSRF?"
"CSRF означает Cross-site request forgery (Межсайтовая подделка запроса). В отличие от XSS CSRF не пытается украсть вашу приватную информацию для входа куда-либо. CSRF предполагает, что вы уже вошли авторизованны на этом сайте ( например на платежной системе ) и, когда вы посещаете сайт злоумышленника, то отправляется запрос, от вашего имени но без вашего ведома."
"Что такое Continuous Integration (CI)?"
"Continuous Integration, или для краткости CI – это особый принцип разработки программного обеспечения, который может очень сильно упростить вам жизнь. Если на пальцах, то система CI – это некая программа, которая следит за вашим Source Control, и при появлении там изменений автоматически стягивает их, билдит, гоняет тесты (конечно, если их пишут) и возможно делает кое-что ещё. В случае же неудачи она дает об этом знать всем заинтересованным лицам, в первую очередь – последнему коммитеру."
"Что такое Decorator?"
"Декоратор (англ. Decorator) — структурный шаблон проектирования, предназначенный для динамического подключения дополнительного поведения к объекту. Шаблон Декоратор предоставляет гибкую альтернативу практике создания подклассов с целью расширения функциональности."
"Что такое Flash?"
"Flash это специальная часть сессии, которая очищается ПРИ каждом запросе ( при каждом redirect-е )."
"Что такое GEM?"
"Технически файл с расширением .gem представляет собой обычный архив, внутри которого находится файл спецификации и исходный код библиотеки в состоянии на момент релиза."
"Что такое Gemfile?"
"Gemfile приложения - манифест файл, находящийся в корне Rails приложения, в котором и перечислены все необходимые для приложения gem-ы."
"Что такое KISS?"
"KISS - Keep it short and simple — «делай короче и проще». Это процесс и принцип проектирования в основу которого заложено утверждение, что большинство систем работают лучше, если они просты в использовании. Исходя из этого, простота дожна быть основной целью в области дизайна ПО и нужно стараться избегать ненужных усложнений во время проктирования."
"Что такое MVC?"
"Model-View-Controller – схема использования шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс (UI) и взаимодействие с пользователем раздалены на 3 отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные."
"Что такое ORM в Rails?"
"Паттерн проектирования, который сводится к достаточно простой вещи — представлению Таблиц в виде классов, строк как объектов, столбцов в виде свойств объектов. С использованием ORM, свойства и взаимоотношения этих объектов приложения могут быть с легкостью сохранены и получены из базы данных без непосредственного написания выражений SQL."
"Что такое REST?"
"REpresentation State Transfer — представление состояния, это один из подходов для предоставления данных. REST подразумевает такое понятие, как ресурс. Доступ к ресурсу и действиям над ним предоставляется по средствам специально регламентированных URL’ов, которые содержат в себе название ресурса и действие, которое мы хотим с этим ресурсом выполнить, например в нашем блогe В REST-контроллере, все методы должны называться уже установленным образом."
"Что такое RVM?"
"Ruby Version Manager Программа для управления версиями Ruby. Основные задачи: 1. Физическое разделение версий ruby и наборов гемсетов 2. Возможность иметь несколько версий ruby и переключаться между ними 3. Возможность для каждой версии ruby иметь несколько gemsets — наборов gems и переключаться между ними."
"Что такое Refactoring?"
"Процесс изменения программного кода, таким образом, что не изменяя внешнего поведения кода, улучшалась его внутренняя структура. Метод должен выполнять только ОДНО действие ( не надо делать длинные методы )."
"Что такое Rspec?"
"Rspec - это инструмент, помогающий программистам на Ruby писать тесты для своего кода."
"Что такое SQL Injection."
"Цель атаки в форме SQL инъекции - сделать запросы к базе данных, манипулируя с параметрами приложения. Популярная цель атак в форме SQL инъекций - обойти авторизацию. Другой целью является осуществление манипуляции с данными или чтение определенных данных."
"Что такое Scrum?"
"Scrum - одна из методологий гибкой разработки, которая позволяет в жёстко фиксированные и небольшие по времени итерации, называемые спринтами (sprints), предоставлять конечному пользователю работающее ПО с новыми возможностями, для которых определён наибольший приоритет. Возможности ПО к реализации в очередном спринте определяются в начале спринта на этапе планирования и не могут изменяться на всём его протяжении."
"Что такое Sprint?"
"Спринт это итерация в скраме, в ходе которой создаётся функциональный кусочек ПО. Спринт жёстко фиксирован по времени. На протяжении спринта никто не имеет права менять список требований к работе, внесённых в бэклог спринта."
"Что такое TDD?"
"TDD — методология (стиль) процесса разработки. TDD означает, что сначала пишется тест (который задает, что должно быть и как должна работать система), а потом уже пишется код. TDD работает на уровне написания кода, задача - упростить создание и изменение кода."
"Что такое XSS?"
"XSS расшифровывается как межсайтовый скриптинг. Однако, несмотря на название, атака идет именно на ваш сайт, а не на какой-либо другой. XSS уязвимость позволяет выполнять JavaScript код на вашем сайте. Если хакер может выполнить JavaScript код, то он может увидеть ваши cookie. Если хакер может увидеть ваши cookie, то соответственно он может залогиниться от вашего имени."
"Что такое rack ( config.rb file )?"
"Rack - это интерфейс, который создан, чтобы обеспечить минимальное API для подключения веб-серверов поддерживающих Ruby (WEBrick, Mongrel и т.д.) и веб-фреймворками (Rails, Sinatra и др.). В нем реализован базовый функционал для работы с HTTP протоколом: утилиты для парсинга, классы Response, Request, Session и многое другое. config.ru - это стандартное конфигурационное имя файла для rackup ( где расширение ru - сокрашение от Rack Up )"
"Что такое yeild?"
"Yield - (переводится как собрать) буквально означает: вместо этого слова в методе нужно поставить блок кода и выполнить метод в обычном режиме. Yield просто вызывает блок кода. Yield дергается всегда когда прописывается слово yield."
"Что такое Инкапсуляция?"
"Инкапсуляция – механизм, который объединяет данные и методы, манипулирующие этими данными и защищает их от внешнего вмешательства или неправильного использования. Можно сказать, что инкапсуляция подразумевает под собой сокрытие данных, что позволяет эти данные защитить."
"Что такое Наследование?"
"Наследование – процесс, с помощью которого, один объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него."
"Что такое Полифорфизм?"
"Полифорфизм – свойство, позволяющее одно и то же имя использовать для решения несколькоих технически разных задач. Концепция полиморфизма: один интерфейс, множество реализаций. Это означает, что можно создать общий интерфейс для близких по смыслу действий. Классы с одинаковой спецификацией могут иметь различную реализацию."
"Что такое вложенные ресурсы?"
"- Это ресурсы которые логически подчинены другим ресурсам. ( где путь к ресурсу будет вылядеть вот так ""/magazines/:magazine_id/post/:id"" )"
"Что такое класс? объект?"
"Класс – модель еще не существующей сущности (объекта). Класс фактически описывает устройство объекта, являясь своего рода чертежом. Объект – совокупность данных и методов для их обработки. Класс – это тип данных, а объект – это экземпляр типа класса."
"Что такое миграции?"
"Миграции - это удобный способ изменять схему базы данных очень простым образом. Для создания миграции используется Ruby DSL. Поэтому вам не нужно писать SQL вручную, позволяя вашей схеме быть независимой от базы данных. Каждую миграцию можно рассматривать как новую «версию» базы данных. Схема изначально ничего не содержит, а каждая миграция изменяет ее, добавляя или убирая таблицы, столбцы или записи."
"Что такое модели Active Record ( как создать такой класс и в чем его особенность )?"
"Для создания модели Active Record необходимо создать подкласс ActiveRecord::Base. Это создаст модель AR, связав ее с таблицей в базе данных. Также появится способность связать столбцы каждой строки этой таблицы с атрибутами экземпляров вашей модели."
"Что такое область видимости переменной?"
"Область видимости переменной – место в программе, в которой доступно значение переменной. Каждая переменная имеет свою область видимости."
"Что такое сессии? Где хранятся сессии?"
"Сессия (HTTP Session) – логический объект, позволяющий передавать данные между последовательными HTTP-запросами от одного пользователя. Сессии создаются на стороне сервера и там же храняться. Другими словами, сессия – механизм, позволяющий однозначно идентифицировать браузер и созданный для этого браузера файл на сервере, в котором храняться переменные сеанса."
"Что такое экземпляр ActiveRecord::Relation?"
"Для получения объектов из базы данных Active Record предоставляет несколько методов поиска. В каждый метод поиска можно передавать аргументы для выполнения определенных запросов в базу данных без необходимости писать на чистом SQL. Все эти методы возвращают экземпляр ActiveRecord::Relation, где ActiveRecord::Relation - это просто класс-билдер."
"Шаблонизаторы. Приведите примеры и обьясните их назначение."
"Шаблонизаторы позволяют с помощью специального синтаксиса вставлять в HTML блоки исполняемого кода, написанного на языке общего назначения. Родным способом генерации всевозможных HTML страничек в рельсах является использование Ruby Templating, ERb. Идея ERb достаточно проста – вы пишите HTML-код, попутно включая в него Ruby-вставки, которые в последствии будут заменены на результат вычисления выражения во вставке. <% … %> или <%= … %>. HAML - другой шаблонизатор который целиком написан на DSL так же отвечает за генерацию как динамического содержимого, так и, собственно, HTML-разметки."

"Rake"

"Выполняет миграцию до версии указаной в ключе VERSION ( последовательность"
"от более старой, текущей, до более новой, указаной в ключе VERSION )"
"Где и как расположены rake задачи?"
"Все пользовательские задания, задачи располагаются в подкаталоге lib/tasks вашего приложения, и имеют расширение .rake"
"Дайте описание rake db:create"
"Создание базы данных из config/database.yml для текущего Rails.env (используйте db:create:all чтобы создать все базы данных из конфига)"
"Дайте описание rake db:create"
"Создать БД"
"Дайте описание rake db:create:all"
"Создаёт все БД из настроек в файле config/database.yml"
"Дайте описание rake db:drop"
"Удалить(дропнуть) текущую БД"
"Дайте описание rake db:drop:all"
"Удалить(дропнуть) все БД указаные в настройках config/database.yml"
"Дайте описание rake db:migrate"
"Миграция базы данных с помощью сценария в db/migrate"
"Дайте описание rake db:migrate"
"Выполняет миграции используя скрипты из папки db/migrate. Можно указать версию миграции добавив ключ VERSION="
"Дайте описание rake db:migrate:down"
"Выполняет откат миграции до версии указаной в ключе VERSION"
"Дайте описание rake db:migrate:redo"
"Откатить одну миграцию и выполнить её заново ( эквивалентно rake db:rollback, rake db:migrate ). Если указан ключ VERSION выполнит rake db:migrate:down, rake db:migrate:up"
"Дайте описание rake db:migrate:rollback"
"Откатить схему на одну миграцию назад"
"Дайте описание rake db:migrate_plugins RAILS_ENV=production"
"Запуск миграций для production версии"
"Дайте описание rake db:schema:dump"
"Создаёт db/schema.rb файл из текущей схемы базы данных"
"Дайте описание rake db:schema:load"
"Загрузить db/schema.rb в базу данных"
"Дайте описание rake db:seed"
"Выполняет файл db/seeds.rb в который обычно ложат скрипт заполнения БД тестовыми данными"
"Дайте описание rake db:setup"
"Эквивалентно выполнению следующей цепочки комманд: rake db:create, rake db:schema:load, rake db:seed"
"Дайте описание rake db:test:prepare"
"Подготовить тестовую БД, перезалив туда схему"
"Дайте описание rake db:version"
"Возвращает текущую версию схемы"
"Дайте описание rake doc:rails"
"Создать HTML-версию документации по rails"
"Дайте описание rake log:clear"
"Урезать размер всех файлов «*.log» в папке «log/» до 0 байт."
"Дайте описание rake test:functionals"
"Запустить все functional тесты ( тесты контроллеров )"
"Дайте описание rake test:integration"
"Запустить все integration тесты ( тесты вьюх )"
"Дайте описание rake test:units"
"Запустить все unit тесты ( тесты моделей )"
"Как увидеть все возможные rake задачи?"
"Выполнив команду rake -T или rake --tasks можно увидеть список и описание всех возможных задач rake."

"SQL"

"ALTER TABLE Студент ADD COLUMN[Группа]TEXT(5):"
"Добавление поля ""Группа"";"
"INSERT INTO Студент([Фамилия],[Имя],[Дата рождения])VALUES(""Петров"", ""Иван"", 24/11/81):"
"Добавление в поля новых записей;"
"LIKE - это оператор:"
"Выполняющий сравнение строковых значений;"
"Что делает слудующий запрос: SELECT Студент.* FROM Студент WHERE [Дата рождения] BETWEEN 01.11.79 AND 01.12.81 AND[Группа] IN ("1212","1213")
"Выбор студентов, дата рождения которых лежит в диапазоне от 01.12.79 по 01.11.81, и они обучаются в одной из групп 1213, 1213;"
"Блокировочные СУБД ( Принцип работы )?"
"MSSQL: Принцип действия, в общем-то, ясен из названия - в основе лежит протокол двухфазной блокировки. Перед чтением или изменением объект (запись) блокируется. То есть другим транзакциям запрещается изменять или даже читать этот объект до тех пор, пока первая транзакция не закончит с ним работать."
"В каком виде представляются реляционые базы данных?"
"В виде таблицы."
"В каком случае оператор Exist даст утвердительный ответ?"
"Если соотнесенный подзапрос производит какой-либо вывод"
"В чем отличие JOIN от INNER JOIN?"
"Если вы использовали JOIN и не указали тип выборки - то по умолчанию будет использоваться INNER JOIN"
"В чем отличие LEFT JOIN от RIGHT JOIN?"
"RIGHT JOIN (или RIGHT OUTER JOIN) действует в противоположность LEFT JOIN - показывает все записи из правой (второй) таблицы и только совпавшие из левой (первой) таблицы."
"В чем отличие LEFT OUTER JOIN от LEFT JOIN?"
"Слово OUTHER - опциональное"
"Версионные СУБД ( Принцип работы )?"
"PostgreSQL: Принцип действия версионности основан на том, что транзакция, изменяя данные, порождает новую копию (версию) данных, с которой и работает. Другим транзакциям эта версия не видна, до тех пор, пока первая не зафиксируется. При этом даже после фиксации первой транзакции, устаревшая версия какое-то время сохраняется для корректной работы транзакций, стартовавших до завершения работы первой, но еще не успевших зафиксироваться."
"Выберите правильный SQL запрос для вставки новой записи в таблицу ""Persons"", причём в поле ""LastName"" вставить значение ""Olsen""."
"INSERT INTO Persons (LastName) VALUES (""Olsen"")"
"Выберите правильный SQL запрос для вставки новой записи в таблицу ""Persons""."
"INSERT INTO Persons VALUES (""Jimmy"", ""Jackson"")"
"Выбор пяти первых фамилий студентов, упорядоченных по учебным группам:"
"SELECT [Имя],[Фамилия]FROM Студент ORDER BY[Группа] LIMIT(5);"
"Выделение неповторяющихся дат рождений студентов и присвоение им нового наименования:"
"SELECT DISTINCT[Дата_рождения] As Юбилей FROM Студент;"
"Для какого типа полей может быть использован условный оператор LIKE?"
"Char или VarChar"
"Для чего используется предложение GROUP BY в команде SELECT?"
"Для определения подмножества значений в терминах другого поля."
"Для чего нужны VIEW ( представления )?"
"Представления добавляют уровень защиты данных (например, можно создать представление для таблицы, где пользователю, выполняющему SELECT над представлением, видны только сведения о зарплате. Представления могут скрывать сложность данных, комбинируя нужную информацию из нескольких таблиц. Представления могут скрывать настоящие имена столбцов, порой трудные для понимания, и показывать более простые имена."
"За удаление полей таблицы отвечает команда:"
"DROP"
"Записи из двух таблиц объединяются, если:"
"Поля содержат одинаковые значения."
"Как вставить в таблицу Sales два числа – числовое, текстовое?"
"INSERT INTO Sales VALUES (1001, ""Peel"");"
"Как выбрать все записи из таблицы ""Persons"", где значение поля ""FirstName"" начинается с буквы ""a""?"
"SELECT * FROM Persons WHERE FirstName LIKE ""a%"""
"Как выбрать все записи из таблицы ""Persons"", где значение поля ""FirstName"" равно ""Peter"" и ""LastName"" равно ""Jackson""?"
"SELECT * FROM Persons WHERE FirstName=""Peter"" AND LastName=""Jackson"""
"Как выбрать все записи из таблицы ""Persons"", где значение поля ""FirstName"" равно ""Peter""?"
"SELECT * FROM Persons WHERE FirstName=""Peter"""
"Как выбрать все записи из таблицы ""Persons"", где значение поля ""LastName"" в алфавитном порядке находится между значениями ""Hansen"" и ""Pettersen""?"
"SELECT * FROM Persons WHERE LastName BETWEEN ""Hansen"" AND ""Pettersen"""
"Как выбрать все записи из таблицы ""Persons"", упорядоченных по полю ""FirstName"" в обратном порядке?"
"SELECT * FROM Persons ORDER BY FirstName DESC"
"Как выбрать все поля из таблицы ""Persons""?"
"SELECT * FROM Persons"
"Как выбрать колонку с названием ""FirstName"" из таблицы ""Persons""?"
"SELECT FirstName FROM Persons"
"Как вывести количество записей, хранящихся в таблице ""Persons""?"
"SELECT COUNT(*) FROM Persons"
"Как изменить значение ""Hansen"" на ""Nilsen"" в колонке ""LastName"", таблицы Persons?"
"UPDATE Persons SET LastName=""Nilsen"" WHERE LastName=""Hansen"""
"Как расшифровывается SQL?"
"Структурированный язык запросов"
"Как удалить записи, где значение поля ""FirstName"" равно ""Peter""?"
"DELETE FROM Persons WHERE FirstName = ""Peter"""
"Какая SQL команда используется для вставки данных в базу?"
"INSERT INTO"
"Какая SQL команда используется для выборки данных из базы?"
"SELECT"
"Какая SQL команда используется для обновления данных в базе?"
"UPDATE"
"Какая SQL команда используется для удаления данных из базы?"
"DELETE"
"Какая SQL команда используется для упорядочивания результатов?"
"ORDER BY"
"Какая команда SQL используется для редактирования данных в таблице?"
"Update"
"Какие действия можно выполнять, используя запросы?"
"получить всю информацию в таблице или только ту информацию, которая отвечает поставленным условиям"
"Какое SQL выражение используется для извлечения различных значений?"
"SELECT DISTINCT"
"Какой оператор обеспечивает соединение таблиц?"
"Join"
"Какой условный оператор позволяет вывести информацию из указанного диапазона?"
"BETWEEN"
"Команда FOREIGN KEY используется для:"
"Связи с внешними таблицами;"
"На что указывает оператор IS NULL?"
"На отсутствие значения."
"Назовите Оператор соединения таблиц - это:"
"«INNER JOIN», «LEFT JOIN», «RIGHT JOIN», «FULL OUTHER JOIN»"
"Назовите плюсы и минусы использования индексов в SQL?"
"Базовые функции индексов: 1. увеличение скорости доступа к данным 2. поддержка уникальности данных. Недостатки: 1. индексы занимают дополнительное место на диске и в оперативной памяти. 2. замедляются операции вставки, обновления и удаления записей."
"Обновление, замена значений полей записи:"
"UPDATE"
"Оператор IN выполняет:"
"Проверку выражения на совпадение с любым из элементов списка;"
"Оператор OR срабатывает когда ХОТЬ ОДНО условие истинно. AND когда ВСЕ условия истинны."
"Истина"
"Оператор, выполняющий проверку на диапазон значений:"
"BETWEEN...AND;"
"Оператор, вычисляющий количество выделенных записей в запросе:"
"Count."
"Оператор, определяющий поля, по которым выполняется упорядочениевыходных данных, порядок их следования соответствует старшинству ключей сортировки:"
"ORDER BY."
"Оператор, определяющий, должен ли подчиненный запрос возвращать какие-либо записи:"
"EXISTS"
"Оператор, позволяющий указать имена исходных таблиц, участвующих в формировании выборки, - это:"
"FROM;"
"Отбор студентов, у которых совпадает фамилия:"
"SELECT*FROM WHERE[Фамилия]=[Фамилия]."
"Предикат используется для:"
"Ограничения числа возвращаемых записей."
"С помощью какого аргумента можно избавиться от дублирования данных при создании запроса SQL?"
"Distinct"
"С помощью какой команды SQL можно добавить в таблицу новый столбец?"
"Alter Table"
"С помощью какой команды SQL можно удалить все содержание таблицы?"
"Delete From"
"Создание списка фамилий студентов с указанием среднего балла по каждому студенту:"
"SELECT Фамилия, Avg(Результат) AS Средний_балл FROM РезультатыGROUP BY[№ зачетки]."
"Удаление определенной записи в таблице:"
"DELETE...FROM...WHERE;"
"Чем отличаются HAVING от WHERE?"
"Предложение HAVING должно содержать как минимум одну агрегатную функцию, если это не так, то лучше применять предложение WHERE. Предложение WHERE применимо к отдельным строкам, а предложение HAVING к группам строк."
"Что выполняет команда Drop Table?"
"Удаляет только пустую таблицу базы данных"
"Что определяет предложение HAVING в команде SELECT?"
"Критерии для удаления определенных групп записей из вывода запроса."
"Что позволяет выполнить предложение Order By команды SELECT?"
"Сортировать данные."
"Что позволяет выполнить предложение Order By команды SELECT?"
"Сортировать данные."
"Что такое CREATE VIEW?"
"Это представление - виртуальная таблица. В действительности представление – всего лишь результат выполнения оператора SELECT, который хранится в структуре памяти, напоминающей SQL таблицу"
"Что такое CROSS JOIN?"
"CROSS JOIN - выборка перекрестного соединения с перебором все вариантов. Тело результата логически формируется следующим образом. Каждая строка одной таблицы соединяется с каждой строкой второй таблицы, давая тем самым в результате все возможные сочетания строк двух таблиц"
"Что такое FULL OUTHER JOIN?"
"Полное внешнее объединение FULL OUTER JOIN производит выборку множество всех записей в первой таблице и во второй таблице, с соответствующими записями с обеих сторон при их наличии. Если совпадения нет, отсутствует сторона будет содержать NULL."
"Что такое HAVING"
"HAVING нужен для отбора групп по условию. Его синтаксис аналогичен выражению WHERE и мало того их можно использовать вместе."
"Что такое INNER JOIN?"
"Внутреннее соединение INNER JOIN производит выборку только тех записей, которые соответствуют как в первой таблице, так и во второй таблице."
"Что такое LEFT JOIN?"
"LEFT JOIN используется для создания левого внешнего объединения, при котором все записи из первой (левой) таблицы включаются в динамический набор, даже если во второй (правой) таблице нет соответствующих им записей (вместо этой таблицы используется строка со всеми значениями установлеными в NULL)"
"Что такое RIGHT JOIN?"
"RIGHT JOIN используется для создания правого внешнего объединения, при котором все записи из второй (правой) таблицы включаются в динамический набор, даже если в первой (левой) таблице нет соответствующих им записей."
"Что такое ROLE ( SQL )?"
"Роль – это уникальный элемент базы данных, не принадлежащий пользователю. Ее можно создать с помощью команды CREATE ROLE, причем наименование роли не может совпадать с именем пользователя. При наличии привилегии CREATE ROLE пользователи также могут задавать привилегии. После создания роль становится частью заданного по умолчанию набора ролей."
"Что такое SQL трансакция?"
"SQL Транзакция - это неделимая, с точки зрения воздействия на СУБД, последовательность операций манипулирования данными. Для пользователя транзакция выполняется по принципу ""все или ничего"", т.е. либо транзакция выполняется целиком и переводит базу данных из одного целостного состояния в другое целостное состояние, либо, если по каким-либо причинам, одно из действий транзакции невыполнимо, или произошло какое-либо нарушение работы системы, база данных возвращается в исходное состояние, которое было до начала транзакции"
"Что такое СУБД?"
"Пакет программ, обеспечивающий средствами описания и обработки данных"
"Что такое индексы (SQL)?"
"Индекс — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск"
"Что такое ключ?"
"Идентификатор, уникально идентифицирующий значения атрибутов некоторой записи об объекте."
"Что такое репликация?"
"Репликация - это набор технологий, позволяющий копировать, распространять и синхронизировать определенные типы объектов базы данных и связанных с ними данных и зависимостей между ними из одной базы данных в одну или несколько других баз данных в одном и том же экземпляре или в разных экземплярах SQL Server."
"Что такое транзакция?"
"Логическая единица работы, составленная из одного или нескольких предложений SQL, выполняемых одним пользователем."

About

Ruby Knowledge

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published