Сегодня 16 июля, среда ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
coding4.net
coding4.net
Голосов: 1
Адрес блога: http://www.coding4.net/
Добавлен: 2012-06-11 20:16:46
 

Вопросы на собеседовании по SQL (кое-где с некими ответами)

2013-05-05 19:19:00 (читать в оригинале)

TSQL
Продолжаю размещать переводы с англоязычного сайта www.techinterviews.com, посвященного вопросам на собеседовании для программистов. Точная ссылка вот вот . Ответы в основном переведены с сайта. В общем, ответы, как всегда, так себе...

Какие два метода используются для получения в SQL ?
На techinterviews.com ответа не было ответа, но по одним слухам это запрос select и cursor-ы, по другим хранимые процедуры и select. Первый вариант вероятнее.

Какой тип курсора вы используете для получения множества записей ?
...
Какая разница между "where" и "having" выражениями ?
- "Where" это ограничительное выражение. Вы используете его чтобы ограничить вывод всех данных из БД. "Where" выражение используется перед получением результата. Выражение "having" это один из видов фильтрующей команды.

Какая базовая форма SQL выражения чтения данных из таблицы ?
- Базовая форма чтения данных это ‘SELECT * FROM table_name; ‘. Ответ ‘SELECT * FROM table_name WHERE xyz= ‘whatever’;’ не является базовой формой, потому что есть выражение "where".

Какие структуры БД вы должны реализовать для ускорения операций чтения из таблиц ?
- В соответствии с правилами настройки БД мы должны: 1) правильно использовать индексы 2) правильно разместить объекты БД по разным tablespace, файлам и т.п. 3) создание специального пространства (tablespace) для локализации данных специальных типов (например, CLOB, LOB)

Каковы компромисы использования индексов ?
- 1. Быстрые выборки, медленные обновления. 2. Дополнительное место для хранения индексов. Обновления медленнее, потому что обновляя данные в таблице в ыдолжны также обновлять данные индекса.

Что такое "join" ?
- ‘join’ используется для логгического объекдинения 2-х или более таблиц с или без общими полями.

Что такое нормолизация и денормолизация ? Зачем используется денормолизация ?
- Нормолизация данных значит удаление избыточной информации из таблицы, и организация данных так, чтобы будущие изменения таблиц были простыми. Денормализация значит разрешение избыточности в данных. Главнай польза от денормолизации это увеличение производительности, а также упрощение получения и обработки данных. Этого добиваются уменьшением количества join-ов необходимых для обработки данных.

Что такое ограничение "constraint" ?
- Ограничение позволяет применять простые проверки ссылочной целостности на таблицах. Есть 4 основных типа ограничений, поддерживаемых на данный момент SQL Server-ом: PRIMARY/UNIQUE - обеспечивают уникальность конкретной колонки таблицы. DEFAULT - определяют значения по умолчанию для колонки (если, например, значение не было заданно при insert-е). FOREIGN KEY - проверка для каждого из значений в колонке наличия такого же значения в заданной колонке другой заданной таблицы. CHECK - проверяет каждое значение помещаемое в колонку, соответствует ли оно определенным правилам (например, значению из списка). Каждый тип ограничения выполняет специальный тип действия. NOT NULL еще один тип ограничения, проверяет чтобы в колонку не поместили значение NULL.

Какой тип индексированных данных вы можете иметь ?
- Тмп индекса влияет на поиск данных для выемки. Разные данные удобно искать по разным индекасам. Три наиболее общих типа такие: B-Tree (генерализованные деревья бинарного поиска), bitmap - битовые карты (содержат строки битов, каждое значение соответствует биту в строке битов индекса, поиск быстрый, но требуется небольшое количество возможных значений данных), - Хэш коды (упаковывают длинные данные в короткие коды, которые гораздо быстрее сравнивать, минус в долгом изначальном строительстве хэша при создании индекса).

Что такое первичный ключ ?
- PRIMARY INDEX/PRIMARY KEY это то что пришло из теории БД. Его поведение такое же как у UNIQUE INDEX, то есть в таких колонках не должны встречаться повторяющиеся значения в разных строках. Значения в колонках уникальны. Все колонки помеченные как первичный ключ должны быть помеченны как NOT NULL. Кроме того первичный ключ в SQL Server значит, то как сами данные таблицы отсортированны и хранятся (в гранулированных красно черных деревьях). Именно по колонке первичного ключа должно происходить наибольшое число выборок данных, тогда производительность максимальна

Что такое "функциональная зависимость" ? Как она влияет на дизайн таблиц БД ?
- Функциональная зависимость относится к тому, как один объект БД зависит от другого в БД. Например, процедура sp2 может вызывать процедуру sp1. Таким образом sp2 функционально зависит от sp1.

Что такое тригер ?
Тригеры это специальный вид хранимых процедур, которые созданны для поддержания целостности данных в БД. Тригер срабатывает каждый раз когда операция модификации данных производится (insert, update, delete). Тригеры срабатываю автоматически. Они могут вызываться рекурсивно и взаимно рекурсивно. Тригеры ассоциируются с конкретной таблицей. The types of statements are insert,update,delete and query statements. Basically, trigger is a set of SQL statements A trigger is a solution to the restrictions of a constraint. For instance: 1.A database column cannot carry PSEUDO columns as criteria where a trigger can. 2. A database constraint cannot refer old and new values for a row where a trigger can.

Почему выражения "group by" или "order by" дорогие для выполнения (снижают производительность) ?
- Выполнение "group by" или "order by" требует создания временных таблиц для промежуточных результатов запросов. А это в зависимости от результирующего набора данных может быть очень дорогим (долгим).

Что такое покарытие индексов (index covering) запроса ?
- Это значит, что данные могут быть найдены только посредством индексов, без использования собственно таблиц

Какие типы объединений (join algorithms) вы знаете ?
См. Памятка по JOIN-ам в SQL


Что нужно знать о рассылках?

2013-05-05 01:14:00 (читать в оригинале)


почтовая рассылка

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

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

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

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

Все элементы mail рассылки должны хорошо отображаться, в том числе и в версиях для мобильных устройств.

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

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

Интересуйтесь всеми новыми  возможностями Ваших сервисов e-mail и sms рассылки.

Ответственно подходите к оформлению сообщений массовой рассылки. Их тема должна быть интересной и привлекательной, а контент содержать свежие и актуальные материалы.

 



Как навесить обработчик события на класс из созданной рефлексией сборки (C#) ?

2013-04-27 00:21:00 (читать в оригинале)


C#

Продолжаю тему загрузки плагинов из БД, начатую в предыдущих моих постах. Недавно на работе пришлось написать небольшой движок запускающий плагины на C#. Плагины хранились в виде classlib сборки (DLL). Они хранились в поле varchar(max) в таблице MS SQL Server. Кроме собственно вызова метода класса из создаваемой сборки, по ТЗ нужно было еще навестить внешний обработчик события на событие происходящее внутри сборки. Код непосредственно делающий это тут (подразумевается наличие кода из предыдущих постов):

// создаем тип делегата
Type delegateType = transferEvent.EventHandlerType;

// создаем MethodInfo для местного метода
Type thisType = Type.GetType("MultiDBMappingTransferer.LoadAssemblyFromDBAndRUnIt.Program");
MethodInfo ourMethod = thisType.GetMethod("MsgHandler");

// конструируем нужный нам делегат
Delegate delega = Delegate.CreateDelegate(delegateType, ourMethod);

// а теперь на делегат навешиваем обработчик местный, вызывая метод Add()
MethodInfo addHandler = transferEvent.GetAddMethod();
Object[] addHandlerArgs = { delega };
addHandler.Invoke(Transferer, addHandlerArgs);

Ну, и для удобства использования, тем кому лень разбираться во всех тонкостях, публикую весь код примера грузящего сборку из БД,
создающего объекты из нее, навешивающего обработчик события и вызывающего метод объекта:
RawAssemblyReflectionExample.zip (1,81 kb)




Как создать сборку в памяти и использовать ее классы отражением (reflection) на C# ?

2013-04-27 00:07:00 (читать в оригинале)


C#

Продолжаю тему загрузки плагинов из БД, начатую в предыдущих моих постах. Недавно на работе пришлось написать небольшой движок запускающий плагины на C#. Плагины хранились в виде classlib сборки (DLL). Они хранились в поле varchar(max) в таблице MS SQL Server. Соответственно после загрузки данных в массив байтов нужно было создать сборку в памяти, потом создать класс из нее и вызвать его метод. Код делающий это тут:

// создаем сборку в памяти по массиву байтов
Assembly newAssembly = Assembly.Load(dataInBytes);

// создаем тип объекта и описание вызываемого метода из недр загруженной сборки
Type transfererType = newAssembly.GetType("MultiDBMappingTransferer.Engine.Transferer");
MethodInfo transferMethod = transfererType.GetMethod("Transfer");
EventInfo transferEvent = transfererType.GetEvent("PrintProgressMessageHandler");
PropertyInfo printProgressMessageHandlerProperty = transfererType.GetProperty("PrintProgressMessageHandler");

// конструируем нужный нам объект
Object Transferer = Activator.CreateInstance(transfererType);

// вызываем метод .Transfer(configString, transfDirectionFlag, lastTransferDate);
Object[] handlerArgs = { configString, true, DateTime.Now };
transferMethod.Invoke(Transferer, handlerArgs);




Как загрузить сырые (Raw) данные из БД в Byte[] на C# используя ADO.NET ?

2013-04-26 23:50:00 (читать в оригинале)


C#       ADO.NET

Продолжаю тему загрузки плагинов из БД, начатую в предыдущем моем посте. Недавно на работе пришлось написать небольшой движок запускающий плагины на C#. Плагины хранились в виде classlib сборки (DLL) в БД. Они хранились в поле varchar(max) в таблице. Соответственно после загрузки данных в БД нужно было их неким образом заполучить в программе. Данные в программе хотелось получить в виде массива байтов. По определенным причинам работа с БД в этой части программы велась не через ОРМ-ы, а через обычный ADO.NET. Соответственно, кусок, который грузит сырые данные в массив байтов вот:

// создаем соединение с БД
SqlConnection currConn = new SqlConnection("Server=(local);Database=TestTransferSDB1;Trusted_Connection=true;Integrated Security=SSPI;");
currConn.Open();

// грузим данные простейшим запросом
String queryString = " SELECT RawDt FROM dbo.TA WHERE ID= \'B0657E8C-167D-42BC-A63D-18B64E364028\' ";
SqlCommand command = new SqlCommand(queryString, currConn);
SqlDataReader reader = command.ExecuteReader();
reader.Read();

// конвертим данные в нужную нам форму
SqlBinary binaryStream = reader.GetSqlBinary(0);
Byte[] dataInBytes = binaryStream.Value;




Страницы: ... 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 ... 

 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»
Изменения рейтинга
Категория «Авто/Мото»
Взлеты Топ 5
+265
299
MicheL1102
+238
257
Темы_дня
+230
258
Bisdiv.com
+220
259
Дневник
+177
284
Пофигист
Падения Топ 5


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.