Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Не осилил вопросы по транзакциям на собеседовании   Найти похожие ветки 

 
msguns ©   (2006-03-07 12:40) [40]

Поправка к [37]:

Извиняюсь за "пинок" в сторону вузов, ибо сабж вовсе не из той "оперы". Однако мнение свое о "среднем" уровне преподавания БД в высшей школе оставляю при себе.
Кстати, не исключено, что автор теста обучался именно в таком вузе.


 
Fay ©   (2006-03-07 12:43) [41]

2 Сидоров Максим Вадимович   (07.03.06 11:50) [28]
> понимает ли человек что явно применять их в Delphi имеет смысл
При чём тут Delphi?!


 
Сидоров Максим Вадимович   (2006-03-07 12:47) [42]

DELPHI тут при том, что тестировался человек именно на знание дельфи.
Был еще отдельный тест на знание SQL, но он здесь почему то не обсуждается:). Видимо у кандидата не возникло по ним вопросов, хотя в них есть несколько интересных и спорных вопросов для обсуждения.
Вернет ли следующий запрос записи и какие?
select * from table where field = NULL


 
Fay ©   (2006-03-07 12:49) [43]

2 Сидоров Максим Вадимович
> Условия этого ДОПОЛНИТЕЛЬНОГО вопроса вы вообще знать не можете
А почему мы должны его знать? Что это за вопросы, ответ на которые требует наводящих вопросов? И как по-Вашему, должен чувствовать себя человек на собеседовании, когда ему уже подсказывают (хрень какую-то), а до него никак не доходит (какая-то хрень)?

> PS: Извините господа, мне надо работать
Почему-то впоминается анекдот про мальчика на велосипеде и водителя КамАЗа... Бр-р-р-р...

Всего хорошего.


 
Fay ©   (2006-03-07 12:51) [44]

2 Сидоров Максим Вадимович   (07.03.06 12:47) [42]
> select * from table where field = NULL
В MSSQL можно получить разные (пустой и не очень) наборы данных. Зависит от сервера. Вы про какой спрашивали?


 
Sergey13 ©   (2006-03-07 12:51) [45]

2[42] Сидоров Максим Вадимович   (07.03.06 12:47)
И что в этом вопросе/запросе спорного?


 
msguns ©   (2006-03-07 12:57) [46]

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) такой запрос вернет.. ошибку синтаксиса.


 
Сидоров Максим Вадимович   (2006-03-07 13:05) [47]

Правильно, зависит от установок сервера. Сервер 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 будет выполнятся совсем не так, как задумал программист.


 
MOA ©   (2006-03-07 13:07) [48]

Кстати, запрос с =NULL весьма разумен на собеседовании. ОТ ответа человека можно двигаться дальше. В большинстве баз (близких к теории) без исправления установок по умолчанию - ответ во-первых очевиден во вторых сразу понятен уровень понимания.


 
Fay ©   (2006-03-07 13:20) [49]

2 Сидоров Максим Вадимович   (07.03.06 13:05) [47]
Какие-то странные люди к вам приходят. Это на какую зарплату, если не секрет?


 
Сидоров Максим Вадимович   (2006-03-07 13:22) [50]

Я просто показал на примере как происходят такие вот доп.вопросы к основному, в том случае если человек отвечает неправильно или не может пояснить свой ответ.
Так что здесь надо знать контекст вопроса, чтобы его обсуждать. Тестирование у нас происходит не в виде тупых тестов, а в виде обсуждения ответов на тесты. Иногда такие обсуждения вскрывают в кандидате знания, которые тестами не охвачены. Иногда я узнаю что то новое. В любом случае после обсуждения тестов становится понятно насколько человек владеет Delphi и SQL, в каких областях он силен.


 
Fay ©   (2006-03-07 13:23) [51]

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:33) [52]

Вы удивитесь, но люди, которые не знают как программировать объектно (не умеют РЕАЛЬНО использовать все прелести наследования, объектов, классов и интерфейсов), знают SQL на базовом уровне (знают что такое left join, sum, count, но не отвечают на более сложные вопросы, тот же having, union, нюансы вычислений условий по or и т.д.) просят от 1200 и выше.
То есть человек имеет базовый опыт программирования интерфейсов на дельфи и SQL и ВСЕ. Для меня такой человек все еще студент, которого надо учить грамотно писать код, не делать стандартных ляпов, обрабатывать исключения, применять try finally, и еще куче всего. То есть учить всему тому, что приходит с опытом. То что для меня очевидно и то что я делаю уже рефлекторно, для них в новинку.
Приходится искать компромис и выбирать людей, которые либо уже умеют все это и платить им больше среднего или брать людей, которых можно этому быстро научить, платить им меньше и заниматься их развитием.


 
Сидоров Максим Вадимович   (2006-03-07 13:35) [53]

Все Господа, удачи!!!
У меня работа стоит и уже нависает надо мной снежным комом


 
Nikolay M. ©   (2006-03-07 13:35) [54]

Ну, собственно, это личное дело каждого, как ему проводить собеседования. Могу только искренне позавидовать тем, кто может себе позволить отказать соискателю, например, потому, что он не знает, что такое SET ANSI_NULLS.
А нельзя ли тех кандидатов, которые не знают, чему будет равняться результат NULL + 1, отправлять ко мне? Я как раз дельфиста - мсскульщика ищу, может для меня и сгодится?


 
Fay ©   (2006-03-07 13:40) [55]

2 Сидоров Максим Вадимович   (07.03.06 13:33) [52]
> заниматься их развитием
Оно Вам надо? Сомнительное вложение денег. IMHO, нужно брать людей с "уровнем" не ниже достаточного.

Удачи.


 
Sergey Masloff   (2006-03-07 13:40) [56]

Fay ©   (07.03.06 13:20) [49]
Да на любые зарплаты такие люди приходят :( А в последнее время что-то почти только такие и приходят... :(((


 
Romkin ©   (2006-03-07 13:41) [57]

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;
(С) Зотов :)
Я видел только одного человека на собеседовании, который ответил! За все время, я даже затрудняюсь сказать, какой процент.
Так что обычные люди, опытные программисты вроде...


 
Сидоров Максим Вадимович   (2006-03-07 13:44) [58]

Ну так в тесте не 1 вопрос, а решение об отказе прнимается по сумме всех вопросов + моему субъективному мнению по итогам собеседования + анализу примеров исходных кодов сискателя. Так что могу вам сходу бросить десяток другой email"ов соискателей, которых мы не взяли. Берите, собеседуйте... Возможно кого то и отберете, просто у нас требования к соискателю довольно жесткие. Я считаю что лучше взять продвинутого программиста или подющего надежды подороже, чем мучится с ним за наши же деньги.


 
Fay ©   (2006-03-07 13:52) [59]

2 Romkin ©   (07.03.06 13:41) [57]
> Я видел только одного человека на ...
Честно говоря, я это без бумажки (в уме) не решу. Нет такой постоянной практики. Хотя задачка не сложная.


 
Sergey Masloff   (2006-03-07 13:56) [60]

Fay ©   (07.03.06 13:52) [59]
Аналогично. И я в свое время вступал с Юрием в полемику по поводы пользы от такого вопроса ;-) Хотя ему виднее я лично против превращения собеседований в тест-контроль. И не только теоретически (против) а и на практике это воплощаю по мере сил ;-) Вполне достаточно поговорить с человекам о проектах в которых он принимал участие а там уже построить цепочку и пораспросить.


 
paul_k ©   (2006-03-07 14:21) [61]

> [57] Romkin ©   (07.03.06 13:41)

у тебя слишком хорошая статистика.
4 из 200 смогли написать подобный запрос.


 
isasa ©   (2006-03-07 14:31) [62]

Fay ©   (07.03.06 13:52) [59]
Тут проще. Надо помнить, что x86 хранит младший байт(полуслово) первым.
Ответ $7F.


 
Fay ©   (2006-03-07 14:33) [63]

2 isasa ©   (07.03.06 14:31) [62]
> Надо помнить, что x86 хранит младший байт(полуслово) первым.

Звучит так, будто не зная этого, тоже можно решить, но труднее. LOL.


 
isasa ©   (2006-03-07 14:38) [64]

Сидоров Максим Вадимович   (07.03.06 13:44) [58]
По поводу вопросов. Тестовые вопросы должны быть однозначны.
А вопросы с перечислениями ответов, среди которых правильного нет(и это известно интервьэру) - просто заведомая провокация. За такие тесты, составителя обычно бьют, возможно, даже ногами.


 
Romkin ©   (2006-03-07 14:38) [65]

paul_k ©   (07.03.06 14:21) [61] Ну я мухлюю немного ;)
Fay ©   (07.03.06 13:52) [59] А кто сказал, что без бумажки? Другой вопрос, когда у человека в резюме стоит два года асма, а он на логических сдвигах плавает - о чем может быть разговор?!
90% вообще не понимают, что or может быть арифметическим. 80% не слышали о "having". И это не менее чем с трехлетним опытом программирования!


 
isasa ©   (2006-03-07 14:40) [66]

Fay ©   (07.03.06 14:33) [63]
:) Так сдвиг адреса на 2 байта. :)


 
Fay ©   (2006-03-07 14:43) [67]

2 isasa ©   (07.03.06 14:40) [66]
И чё? Хоть на 3


 
Sergey13 ©   (2006-03-07 16:05) [68]

2[53] Сидоров Максим Вадимович   (07.03.06 13:35)
>Все Господа, удачи!!!
>У меня работа стоит и уже нависает надо мной снежным комом
Да ладно, Вадимыч. Зажигай дальше.
Ждем-с. Заходи.

ЗЫ: сори. я уже слегка.....


 
ANB ©   (2006-03-07 16:12) [69]


> И это не менее чем с трехлетним опытом программирования!

Сказки. У меня в первой конторе после 2-недельных курсов доподготовки 90% об этом знали (включая меня). Как и о мутациях таблиц, connect by, rownum и прочих вкусностях. Причем никто раньше с ораклом не работал. На выпускных экзаменах PL/SQL девелопер (сокращенный, есно) рисовали за 2 часа. 10 процентов не въехавших сами уволились.


 
Fay ©   (2006-03-07 16:15) [70]

2 ANB ©   (07.03.06 16:12) [69]
> Сказки.
Будьте осторожны в суждениях. Действительно, кто сказал, что эти ребята программировали 3 года не лифты, а что-то другое...


 
Bless ©   (2006-03-07 16:40) [71]

Romkin ©   (07.03.06 13:41) [57]>
А вопрос с валютой надо решить без подзапроса?


 
Fay ©   (2006-03-07 16:44) [72]

2 Romkin ©   (07.03.06 13:41) [57]
> Хихихи, не NULL, а undefined
Вы меня просто удивляете. NULL и есть undefined, а не "пусто".


 
Romkin ©   (2006-03-07 17:32) [73]

Fay ©   (07.03.06 16:44) [72] Да нет, разница есть. Терминологическая, в результате операции сравнения нельзя получить NULL, можно только говорить, что ее результат не определен (undefined).


 
Romkin ©   (2006-03-07 17:33) [74]

Bless ©   (07.03.06 16:40) [71] Кто такое сказал? Эссно, его надо решать с подзапросом :))


 
Romkin ©   (2006-03-07 17:37) [75]

Fay ©   (07.03.06 16:44) [72] Поясню мысль: считается, что выражения вида where (a > b) is NULL недопустимы. Если бы результат сравнения был NULL, то кто мешает?


 
Fay ©   (2006-03-07 19:36) [76]

2 Romkin ©   (07.03.06 17:37) [75]
А выражения (a > b) = (c > d) допустимы?


 
Romkin ©   (2006-03-07 21:24) [77]

Fay ©   (07.03.06 19:36) [76] Э. Нет :)
Тут другое. Есть правило, что любое сравнение с NULL  дает неопределенность. А дальше вступают в силу таблицы истинности для or and not. И там самое интересное, что True or Undefined дает True. Или False and Undefined дает False. Дело именно в этом. Если говорить, что сравнение с NULL дает NULL - а дальше? какой результат должен быть у (a<b) and NULL?
Вот именно об этом я и говорил, не видел я курса трехзначной логики.


 
Fay ©   (2006-03-07 21:39) [78]

2 Romkin ©   (07.03.06 21:24) [77]
Я не очень корректно выразился в [72]. Ну ты, наверное, уже в курсе 8)


 
Romkin ©   (2006-03-07 21:58) [79]

Fay ©   (07.03.06 21:39) [78]
А мне тоже стыдно :(
Ну, ты, наверное, уже в курсе :)
2all: это насчет того, что будет при наличии if then else, если в условии возникает сравнение с NULL.
К сожалению, похоже, все при этом выполняют блок else...


 
Petr V. Abramov ©   (2006-03-07 22:51) [80]

Если первый вопрос считать вежливой(?) провокацией и выводм на дискуссию,
то второй - бред полный

try
if not Database.InTransaction then Database.StartTransaction;
Database.Commit;
except
on E: Exception do
begin
  ShowMessage(E.Message);
  Database.Rollback
end
end;

ошибка возникает либо на StartTransaction, либо на commit. Это возникнуть может, когда ресурсы, похоже, уже съедены :)

Если транзакция так ине стартовала, то есть она ничего не будет. Если сервер не реагирует на commit, он скорее всего, ни на что уже не среагирует (спецслучаи Oracle не берем), и не к месту написанный ShowMessage тут ни при чем



Страницы: 1 2 3 вся ветка

Форум: "Базы";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.63 MB
Время: 0.013 c
3-1141901273
_kostet
2006-03-09 13:47
2006.04.30
Проблемы с ADOConnection


3-1141677975
Евгений Р.
2006-03-06 23:46
2006.04.30
Аналогия с Loal SQL


15-1144575331
psa247
2006-04-09 13:35
2006.04.30
Интернет магазин


15-1144345143
Vendict
2006-04-06 21:39
2006.04.30
Win2kSp4->Win2kSp6


2-1144828707
Дмитрий_177
2006-04-12 11:58
2006.04.30
Класс для хранения шрифта и его настроек в файле





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский