![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не осилил вопросы по транзакциям на собеседовании
Дельфятник © (2006-03-06 18:29:00)1) В каких случаях надо использовать механизм транзакций
а) при редактировании данных
б) при удалении данных
в) в любом случае
г) при редактировании и/или удалении данных?
И зачем вообще нужен механизм транзакций?
2) Есть следующий код:
try
if not Database.InTransaction then Database.StartTransaction;
Database.Commit;
except
on E: Exception do
begin
ShowMessage(E.Message);
Database.Rollback
end
end;
В результате его выполнения программа выдала сообщение об ошибке. Пользователь по каким-то причинам не нажал "ОК", сообщение так и осталось висеть. По какой причине через некоторое время эта транзакция съест все ресурсы SQL-сервера?
Сидоров Максим Вадимович (2006-03-07 13:44:00) [41]Ну так в тесте не 1 вопрос, а решение об отказе прнимается по сумме всех вопросов + моему субъективному мнению по итогам собеседования + анализу примеров исходных кодов сискателя. Так что могу вам сходу бросить десяток другой email'ов соискателей, которых мы не взяли. Берите, собеседуйте... Возможно кого то и отберете, просто у нас требования к соискателю довольно жесткие. Я считаю что лучше взять продвинутого программиста или подющего надежды подороже, чем мучится с ним за наши же деньги.
Romkin (2006-03-07 13:41:00) [42]Fay © (07.03.06 13:23) [51] Хихихи, не NULL, а undefined :)))
А трехзначной логике не слышал, чтобы в институтах учили. А насчет косяков на собеседовании я тоже много могу порассказать...
Например, на
a). Имеется таблица
create table T (
Дата date,
Валюта char(3),
Курс numeric,
primary key (Дата, Валюта)
);
Данные:
Дата Валюта Курс
------------------------
01.09.04 USD 29.8
02.09.04 EUR 35.4
03.09.04 USD 29.7
05.09.04 USD 29.6
06.09.04 USD 29.8
06.09.04 EUR 35.6
...
Напишите запрос, выдающий курс заданной валюты на заданную дату.
Курс считается определенным, если для данной валюты
есть запись с датой не превосходящей заданную, взять ближайший курс.
Запрос должен выдать курс в обеих случаях:
- курс USD на 06.09.04
- курс USD на 04.09.04
Отвечает 1 из 20 !!!, а наЧему будет равно W после выполнения следующего кода процессором Intel x86? Ответ(С) Зотов :)
объяснить.
type
PWord = ^word;
var
I: integer;
W: word;
begin
I := High(I) shr 8;
W := PWord(Integer(@I) + 2)^;
end;
Я видел только одного человека на собеседовании, который ответил! За все время, я даже затрудняюсь сказать, какой процент.
Так что обычные люди, опытные программисты вроде...
Sergey Masloff (2006-03-07 13:40:00) [43]Fay © (07.03.06 13:20) [49]
Да на любые зарплаты такие люди приходят :( А в последнее время что-то почти только такие и приходят... :(((
Fay (2006-03-07 13:40:00) [44]2 Сидоров Максим Вадимович (07.03.06 13:33) [52]
> заниматься их развитием
Оно Вам надо? Сомнительное вложение денег. IMHO, нужно брать людей с "уровнем" не ниже достаточного.
Удачи.
Nikolay M. (2006-03-07 13:35:00) [45]Ну, собственно, это личное дело каждого, как ему проводить собеседования. Могу только искренне позавидовать тем, кто может себе позволить отказать соискателю, например, потому, что он не знает, что такое SET ANSI_NULLS.
А нельзя ли тех кандидатов, которые не знают, чему будет равняться результат NULL + 1, отправлять ко мне? Я как раз дельфиста - мсскульщика ищу, может для меня и сгодится?
Сидоров Максим Вадимович (2006-03-07 13:35:00) [46]Все Господа, удачи!!!
У меня работа стоит и уже нависает надо мной снежным комом
Сидоров Максим Вадимович (2006-03-07 13:33:00) [47]Вы удивитесь, но люди, которые не знают как программировать объектно (не умеют РЕАЛЬНО использовать все прелести наследования, объектов, классов и интерфейсов), знают SQL на базовом уровне (знают что такое left join, sum, count, но не отвечают на более сложные вопросы, тот же having, union, нюансы вычислений условий по or и т.д.) просят от 1200 и выше.
То есть человек имеет базовый опыт программирования интерфейсов на дельфи и SQL и ВСЕ. Для меня такой человек все еще студент, которого надо учить грамотно писать код, не делать стандартных ляпов, обрабатывать исключения, применять try finally, и еще куче всего. То есть учить всему тому, что приходит с опытом. То что для меня очевидно и то что я делаю уже рефлекторно, для них в новинку.
Приходится искать компромис и выбирать людей, которые либо уже умеют все это и платить им больше среднего или брать людей, которых можно этому быстро научить, платить им меньше и заниматься их развитием.
Fay (2006-03-07 13:23:00) [48]2 Сидоров Максим Вадимович (07.03.06 13:05) [47]
> любое сравнение с NULL ложно
Хи-хи-хи... Не ложно, а NULL
use pubs
select * from JOBS where JOB_ID = null
select * from JOBS where not (JOB_ID = null)
Сидоров Максим Вадимович (2006-03-07 13:22:00) [49]Я просто показал на примере как происходят такие вот доп.вопросы к основному, в том случае если человек отвечает неправильно или не может пояснить свой ответ.
Так что здесь надо знать контекст вопроса, чтобы его обсуждать. Тестирование у нас происходит не в виде тупых тестов, а в виде обсуждения ответов на тесты. Иногда такие обсуждения вскрывают в кандидате знания, которые тестами не охвачены. Иногда я узнаю что то новое. В любом случае после обсуждения тестов становится понятно насколько человек владеет Delphi и SQL, в каких областях он силен.
Fay (2006-03-07 13:20:00) [50]2 Сидоров Максим Вадимович (07.03.06 13:05) [47]
Какие-то странные люди к вам приходят. Это на какую зарплату, если не секрет?
MOA (2006-03-07 13:07:00) [51]Кстати, запрос с =NULL весьма разумен на собеседовании. ОТ ответа человека можно двигаться дальше. В большинстве баз (близких к теории) без исправления установок по умолчанию - ответ во-первых очевиден во вторых сразу понятен уровень понимания.
Сидоров Максим Вадимович (2006-03-07 13:05:00) [52]Правильно, зависит от установок сервера. Сервер MS SQL, но насколько я знаю настройки этого поведения есть на всех основных серверах.
select * from table where field = null
Стандартное поведение по ANSI не вернет ничего, потому что любое сравнение с NULL ложно
Вот на этот вопрос 90% людей отвечают, что они бы использовали следующую конструкцию: where field is null, но почему не знают. То есть очень немногие знают что сравнивать так все таки можно, что вернет это сравнение и зачем на самом деле введено ISNULL (это по поводу шаблонного мышления).
тогда следует наводящий вопрос: а если сравнение происходит с переменной, которая set @a= NULL.
select * from table where field = @a
Начинаются затыки.
Тогда задается вопрос про если where field = null + 1. Тут большинство сразу говорит что так делать нельзя.
Следующий наводящий вопрос:
set @a= NULL
select * from table where field = @a +1
В результате люди понимают что сравнивать с NULL все таки можно.
Некоторые говорят что сервер приведет это к форме
select * from table where field = 0 + 1 и вернет все записи где field = 1
Далее следует вопрос что вернет сравнение field < NULL
В общем часть народа после серии доп.вопросов доходит до того, что любые операции сравнения с NULL ложны, а любые выражения с NULL = NULL
В вузах к сожалению этому не учат (в большинстве, как показывает практика), а ошибка эта довольно распространенная при разработке хр.процедур и триггеров, так как NULL может залететь в переменную где угодно и дальнейшая обработка данных с использованием этой переменной без проверок на NULL будет выполнятся совсем не так, как задумал программист.
msguns (2006-03-07 12:57:00) [53]Fay © (07.03.06 12:43) [41]
Fay © (07.03.06 12:49) [43]
[37] ;))
>Сидоров Максим Вадимович (07.03.06 12:47) [42]
>Вернет ли следующий запрос записи и какие?
>select * from table where field = NULL
Ааа, это тест на ясновидение ? Чел должен прочитать мысли спрашивающего, ага ?
Хотя, действительно, в некоторых стандартах сиквеля (например, в Local SQL) такой запрос вернет.. ошибку синтаксиса.
Sergey13 (2006-03-07 12:51:00) [54]2[42] Сидоров Максим Вадимович (07.03.06 12:47)
И что в этом вопросе/запросе спорного?
Fay (2006-03-07 12:51:00) [55]2 Сидоров Максим Вадимович (07.03.06 12:47) [42]
> select * from table where field = NULL
В MSSQL можно получить разные (пустой и не очень) наборы данных. Зависит от сервера. Вы про какой спрашивали?
Fay (2006-03-07 12:49:00) [56]2 Сидоров Максим Вадимович
> Условия этого ДОПОЛНИТЕЛЬНОГО вопроса вы вообще знать не можете
А почему мы должны его знать? Что это за вопросы, ответ на которые требует наводящих вопросов? И как по-Вашему, должен чувствовать себя человек на собеседовании, когда ему уже подсказывают (хрень какую-то), а до него никак не доходит (какая-то хрень)?
> PS: Извините господа, мне надо работать
Почему-то впоминается анекдот про мальчика на велосипеде и водителя КамАЗа... Бр-р-р-р...
Всего хорошего.
Сидоров Максим Вадимович (2006-03-07 12:47:00) [57]DELPHI тут при том, что тестировался человек именно на знание дельфи.
Был еще отдельный тест на знание SQL, но он здесь почему то не обсуждается:). Видимо у кандидата не возникло по ним вопросов, хотя в них есть несколько интересных и спорных вопросов для обсуждения.
Вернет ли следующий запрос записи и какие?
select * from table where field = NULL
Fay (2006-03-07 12:43:00) [58]2 Сидоров Максим Вадимович (07.03.06 11:50) [28]
> понимает ли человек что явно применять их в Delphi имеет смысл
При чём тут Delphi?!
msguns (2006-03-07 12:40:00) [59]Поправка к [37]:
Извиняюсь за "пинок" в сторону вузов, ибо сабж вовсе не из той "оперы". Однако мнение свое о "среднем" уровне преподавания БД в высшей школе оставляю при себе.
Кстати, не исключено, что автор теста обучался именно в таком вузе.
Сидоров Максим Вадимович (2006-03-07 12:40:00) [60]Уважаемый Nikolay M., еще раз говорю, вопрос про ресурсы и deadlock'и был наводящим и вспомогательным к основному вопросу теста про обработку исключения внутри транзакции.
Условия этого ДОПОЛНИТЕЛЬНОГО вопроса вы вообще знать не можете, так как не были на собеседовании и не знаете контекста обсуждения основного вопроса.
PS: Извините господа, мне надо работать
Всего хорошего