[Из песочницы] Десять типичных вопросов на собеседованиях на знание HTML
2014-12-03 16:57:01
Аурэлио Де Роза несколько дней назад выпустил, на мой взгляд, очень привлекательную статью, ...
+ развернуть текст сохранённая копия
Аурэлио Де Роза несколько дней назад выпустил, на мой взгляд, очень привлекательную статью, которой я хочу с вами поделиться на тот случай, если у вас плохо с английским.
Читать дальше →
Тэги:
html,
html5,
английского,
веб-разработка,
вопросы,
перевод,
семантика,
собеседование,
спецификации,
стандарты
Как оказалось, знают все, а понимают не все. Транзакции в mysql
2014-09-25 13:16:21
... приходится иногда проводить
собеседования на позицию " ...
+ развернуть текст сохранённая копия
По долгу службы мне приходится иногда проводить собеседования на позицию "[старший|младший] разработчик python/django", «тимлид». К моему великому удивлению я обнаружил, что 9 из 10 соискателей, в резюме которых значатся слова " Mysql/Innodb/transactions/triggers/stored proc etc.", абсолютно ничего не могут рассказать о своем прошлом опыте работы с ними. Ни одного описания варианта использования, к сожалению, я так и не получил.
Читать дальше →
Тэги:
mysql,
sql,
веб-разработка,
собеседование,
транзакция
Задание по TSQL перед собеседованием
2014-08-22 17:16:00
----------------------------------------
-- ИСХОДНЫЕ ДАННЫЕ:
...
+ развернуть текст сохранённая копия
----------------------------------------
-- ИСХОДНЫЕ ДАННЫЕ:
----------------------------------------
use tempdb
go
if object_id ('T') is not null drop table T
go
create table T (id int primary key, Number varchar(50), Price money)
go
insert into T (id, Number, Price) values (1, 'A', 100.00)
insert into T (id, Number, Price) values (2, 'A', 90.00)
insert into T (id, Number, Price) values (3, 'B', 200.00)
insert into T (id, Number, Price) values (4, 'C', 300.00)
insert into T (id, Number, Price) values (5, 'D', 300.00)
insert into T (id, Number, Price) values (6, 'D', 300.00)
GO
----------------------------------------
-- ЗАДАНИЕ 1:
-- удалить из таблицы T повторяющиеся номера Number,
-- оставив в ней только номера с максимальной ценой,
-- по возможности, одним запросом.
----------------------------------------
--проверка после удаления:
select Number, Price from T order by 1, 2
/*
Number Price
A 100.00
B 200.00
C 300.00
D 300.00
*/
----------------------------------------
-- РЕШЕНИЕ 1:
----------------------------------------
DELETE FROM T
WHERE T.id NOT IN
(
SELECT id -- , Number, Price
FROM
(
SELECT T.id AS id, T.Number AS Number, T.Price AS Price,
ROW_NUMBER() OVER(PARTITION BY T.Number ORDER BY T.Number, T.Price DESC ) AS R
FROM T
) AS PT
WHERE R = 1
)
GO
----------------------------------------
-- ЗАДАНИЕ 2:
-- порекомендуйте, какой построить индекс на таблице T,
-- чтобы уменьшить время выполнения запроса на удаление
----------------------------------------
----------------------------------------
-- РЕШЕНИЕ 2:
----------------------------------------
-- 1) нужен индекс по ид, обычно он является первичным ключом и создается
-- во время создания таблицы, поэтому предполагаем что он уже есть
-- 2) еще для ускорения нужен такой сложный индекс:
CREATE INDEX idxDelDuplicatesInT
ON T (Number ASC, Price DESC)
GO
Тэги: sql, вопросы, собеседовании
SOLID - 5 архитектурных принципов при создании объектно-ориентированных программ
2014-08-06 19:24:00
... >
Иногда на собеседованиях на должность программиста ...
+ развернуть текст сохранённая копия
Иногда на собеседованиях на должность программиста спрашивают: что такое SOLID ? В этом посте будет разъяснен этот вопрос.
1)
Single Responsibility Principle - принцип единственной обязанности
Это простейший для понимания принцип, но сложный для использования.
Принцип единственной обязанности значит, что объект имеет только одну обязанность и она полностью инкапсулирована в класс.
Все его методы и свойства нужны только для обеспечения этой обязанности и только ее.
И как следствие, класс или модуль могут быть изменены только по одной причине.
Например если есть модуль, который создает и печатает отчет.
В таком случае может измениться содержимое отчета.
Может измениться формат отчета.
Может измениться способ печати.
Соответственно любое из этих изменений повлечет переделку модуля, так как он отвечает не за одну вещь, а за три.
Это является плохим проектным решением.
В этом случае принцип нарушен и нужно разделить модуль на три.
Тогда изменять и поддерживать модули будет проще.
Соблюдение принципа единственной обязанности делает класс, да и проект в целом более здоровым.
2)
Open/Closed Principle - принцип открытия для расширения, но закрытия для изменения
Классы, модули, функции должны быть открыты для расширения, но закрыты для изменения.
Такие программные сущности могут менять поведение без изменения их кода.
Это особенно важно в производственных средах.
Так как модификация кода потребует пересмотра кода и модульного тестирования.
И только после всех этих процедур измененные программные сущности можно будет использовать в программном продукте.
Исходный код, подчиняющийся данному принципу при изменении не требует таких трудозатрат.
3)
Liskov Substitution Principle - принцип замещения Лисков
Функции, которые используют ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом.
Впервые этот принцип был упомянут Барбарой Лисков в 1987 году на научной конференции, посвященной объектно-ориентированному программированию.
Этот принцип является важнейшим критерием для оценки качества принимаемых решений при построении иерархий наследования.
Сформулировать его можно в виде простого правила: тип S будет подтипом Т тогда и только тогда, когда каждому объекту oS типа S соответствует некий объект oT типа T таким образом, что для всех программ P,
реализованных в терминах T, поведение P не будет меняться, если oT заменить на oS.
4)
Interface Segregation Principle - принцип изоляции интерфейса
Клиенты использующие классы не должны зависеть от методов и свойств, которые они не используют.
Принцип разделения интерфейсов говорит о том, что слишком толстые интерфейсы необходимо разделять на более маленькие и специфические.
Это позволит клиентом мелких интерфейсов знать только о том, что нужно им в работе.
В итоге, при изменении метода интерфейса не должны меняться клиенты, которые этот метод не используют.
Следование этому принципу помогает системе оставаться гибкой при внесении изменений в логику работы и пригодной для рефакторинга.
5)
Dependency Inversion Principle - принцип обращения зависимости
Классы и модули верхних слоев не должны зависеть от модулей и классов нижних.
И те и другие должны зависеть только от абстракций.
Абстракции не должны зависеть от деталей.
Реализация должна зависеть от абстракций.
Принцип обращения зависимостей говорит лишь о корректном разделении проекта на слои с использованием интерфейсов.
Тэги: вопросы, собеседовании
Основные принципы ООП
2014-07-30 01:46:00
... .
Чвсто на собеседованиях задают вопросы из ...
+ развернуть текст сохранённая копия
На сегодняшний день, большинство языков программирования, придерживаются Объектно-Ориентированной парадигмы программирования. И это очень хорошо, т.к. ее принципы позволяют создавать эффективные и простые, в плане разработки программы.
Разберем простых примерах основные принципы ООП- абстракцию, инкапсуляцию, полиморфизм и наследование.
Как известно, ООП оперирует главным образом такими понятиями как класс и объект.
Класс- это шаблон, содержащий в себе набор характеристик (поля и методы создаваемого класса), по которому строятся конкретные объекты.
Объект- это экземпляр класса, созданный по шаблону класса.
Абстракция- это способ представления. Она позволяет выделить только необходимые классу характеристики. Например, нужно создать класс Автомобиль. Какие характеристики присущи ему? Это могут быть наименование модели и год выпуска, и д.р.. Только что мы описали абстракцию создаваемого класса.
Инкапсуляция- (от лат. in capsule- «в капсуле»)- способ скрытия полей и/или методов класса от пользователя, в основном из соображений безопасности.
Например, есть класс, в котором описан метод нахождения корней линейного уравнения. Это открытый метод, и пользователь может к нему обращаться. В свою очередь, метод нахождения корней линейного уравнения, содержит в себе еще одни метод- метод нахождения дискриминанта. Т.к. пользователю необходимо только нахождение корней линейного уравнения, а дискриминант ему совсем не нужен, то метод нахождения дискриминанта будет лучше скрыть от пользователя, и оставить его открытым только для внешнего метода (нахождения корней лин. ур.). Это и есть инкапсуляция. Получается, что мы «инкапсулировали» метод нахождения дискриминанта от пользователя.
Полиморфизм- это принцип, который позволяет одинаково обрабатывать разные данные.
К примеру, описан метод который определяет сезон года (лето, осень, зима, весна), на основе введенного пользователем номера месяца. Но ведь пользователь может ввести месяц иначе, строкой-«май». А это разные типы данных, и в этих случаях нужны разные алгоритмы, для решения данной задачи. Чтобы выйти из этой ситуации, нужно описать два метода с одинаковым именем, но на вход эти методы должны принимать разные типы данных. И у каждого метода, должны быть описаны свои алгоритмы решения задачи. В итоге, мы получим метод, описанный дважды, по-разному. И этот метод будет давать корректный результат, не зависимо от того, какой тип данных использовал пользователь.
Наследование- это принцип, который позволяет создавать новые классы на основе уже существующих классов. При этом новые перенимают какую-то часть, или все свойства и методы уже существующего класса.
К примеру есть класс «человек», у которого есть свойства- имя и возраст. На его основе можно описать еще два- «мужчина» и «женщина», т.к. у класса-родителя, характеристики «имя» и «возраст» применимы к обоим классам-потомкам. После этого, созданные "мужчина" и "женщина" можно расширить, добавив к каждому из них свои, применимые только к каждому из них, свойства или методы.
К классу «мужчина» добавим поле «служба в армии», а к классу «женщина»- добавим метод «приготовить обед».
В итоге мы создали 2 разных класса на основе одного- родительского, у которых есть общие и свои уникальные характеристики.
Для того, чтобы организовать принципы ООП на программном уровне, существуют специальные служебные слова- модификаторы. Они позволяют определенные свойства к классам и и их элеменам, а так-же установить различные права доступа.
Очень подробно о модификаторах доступа, читайте в статье: ООП. Модификаторы.
Чвсто на собеседованиях задают вопросы из на тему этого поста: что такое абстракция, инкапсуляция, полиморфизм, наследование ? Что такое парадигма ООП ?
Тэги: вопросы, собеседовании