Здравствуйте, ylp, Вы писали:
ylp>Объясните свою логику. ylp>Если у кандидата 9 лет опыта, это отменяет необходимость знать, зачем нужен using? ylp>Если да, то начиная со скольки лет опыта необязательно знать, зачем нужен цикл while?
С того момента, как получаешь уровень "good team player"
.
Пессимисты говорят, что хуже быть не может,
а оптимисты всегда уверены, что — может!
Здравствуйте, StandAlone, Вы писали:
SA>Меня однажды собеседовали в один небольшой немецкий банк. Собеседующих было 2, добрый и злой, как положено. Ну в общем на третий час они малость подустали( а я как раз тогда проштудировал от корки до корки Нэша по наисвежайшему C# 4.0 и прорешал все задачки из Сэджвика). И один из собеседующих, наморщив лоб, небрежно обронил — "а расскажите-ка нам, как в машинной памяти устроена ссылка на объект в .NET... ШТАААААА???? ВЫ ЭТОГО НЕ ЗНАЕТЕ И СМЕЛИ К НАМ ПРИЙТИ?!!!!...".
Ну не понравился ты им в первые 5 минут собеседования. Такие вещи надо чувствовать и не тратить свое время. Извините, у меня собеседование в Google через полчаса. Рад был поговорить, удачи в поиске кандидатов. Пожали руки и разошлись.
Здравствуйте, IT, Вы писали:
M>>Засомневался, глянул сейчас в https://msdn.microsoft.com/ru-ru/library/30k8f0kc.aspx IT>Я бы глянул не в документацию, а декомпилированный код. По-моему там никто ссылки в стеке после выхода из блоков не зачищает.
Ссылки никто не зануливает, но в релизе — сборщик мусора соберёт как только переменная уже не будет нужна. Т.е. до выхода из метода.
GC же осведомлен о stack frame и знает на каких PC какие переменные в стэке / регистрах используются.
Здравствуйте, StandAlone, Вы писали:
SA>Человеку, способному это сделать, тупых вопросов про using и Mutex задавать не будут.
Человек, способный это сделать, будет проводить презентации прототипа инвесторам и считать поднятые миллионы, а не устраиваться работать рядовым программистом. Извините.
Здравствуйте, Mystic Artifact, Вы писали:
MA> Ссылки никто не зануливает, но в релизе — сборщик мусора соберёт как только переменная уже не будет нужна. Т.е. до выхода из метода.
В том то и дело, что в нашем случае "уже не будет нужна" и "до выхода из метода" совсем разные вещи.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, IT, Вы писали:
MA>> Ссылки никто не зануливает, но в релизе — сборщик мусора соберёт как только переменная уже не будет нужна. Т.е. до выхода из метода. IT>В том то и дело, что в нашем случае "уже не будет нужна" и "до выхода из метода" совсем разные вещи.
Блин. Ничего подобного scope-ам C++ в C#/.NET нет. Любые ссылки попавшие в локальные переменные — если далее не используются по методу — уже не считаются корнями и соответственно не препятствуют сборке. Поэтому зануливание ссылки и приведёт к тому же эффекту. Для случаев когда "уже не будет нужна" и "до выхода из метода" совсем разные вещи — придуман GC.KeepAlive.
Здравствуйте, Mystic Artifact, Вы писали:
IT>>В том то и дело, что в нашем случае "уже не будет нужна" и "до выхода из метода" совсем разные вещи. MA> Блин. Ничего подобного scope-ам C++ в C#/.NET нет.
С этим никто не спорит.
MA>Любые ссылки попавшие в локальные переменные — если далее не используются по методу — уже не считаются корнями и соответственно не препятствуют сборке.
Кем считается?
Будет ли разным генерируемый код для следующего?
void Foo()
{
{
object o = new object();
}
}
void Foo()
{
object o = new object();
{
}
}
void Foo()
{
object o;
{
o = new object();
}
}
Я не уверен.
MA>Поэтому зануливание ссылки и приведёт к тому же эффекту. Для случаев когда "уже не будет нужна" и "до выхода из метода" совсем разные вещи — придуман GC.KeepAlive.
Мы сейчас не обсуждаем выход из метода. Мы обсуждаем выход за пределы видимости переменной в коде. Насколько я припоминаю, стек выделяется под все ссылки вначале метода. При выходе из блока стек не корректируется, т.е. если переменную явно не обнулить, то она будет болтаться в стеке до выхода из метода.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, bazis1, Вы писали:
B>Ну не понравился ты им в первые 5 минут собеседования.
И слава космойайцам! Это было первое и единственное место, где я видел весь(ну, кроме переговорок) этаж здания, превращенный в опенспейс!!!
Длинные ряды столов, разделенные перегородками, за каждым сидит несколько десятков человек локтем к локтю, общее количество народу несколько сотен... сильно напоминало коровник, только без системы автоматизированной уборки говна и выдойки молока.
B>Такие вещи надо чувствовать и не тратить свое время. Извините, у меня собеседование в Google через полчаса. Рад был поговорить, удачи в поиске кандидатов. Пожали руки и разошлись.
Хамство("Нихрена себе чего тут только в резюме не понаписано!...Как думаешь,<имя второго собеседующего>, зачем мы вообще сюда пришли?...") встречается через раз.
Но приходится реагировать нейтрально, потому что там же сидит хрюша и хрен она тебя выпустит до завершения стандартного процесса обработки.
Здравствуйте, Слава, Вы писали:
С>Вот да. Основное и реально полезное качество, которое приобретается с опытом — это способность выставлять наглую морду и переть вперёд.
Не. У меня глубина резкости как-то добавилась. Ясность мозгов, способность видеть сложные процессы и системы в целом. Это кстати иногда мешает — общаешься, например, с другим разработчиком и тот неумело и путано минут пять пытается объяснить, а ты все схватил за первые 30 сек и ждешь когда он закончит, чтобы четко и кратко сформулировать решение.
Многие программисты страдают неумением объяснять.
Здравствуйте, Mishka, Вы писали:
M>Итак, Лондон, большой банк, всё серьёзно. Встречаю соискательницу с чётким CV, 9 лет опыта С#, WPF, сервер, в общем на бумаге всё что надо. M>Вопрос: using в С# где и зачем M>Ответ: M>
M>using
M>{
M> var o = new Object();
M>}
M>// здесь GC будет знать что объект свободен и его можно убрать
M>
M>
Это ладно.
Один раз пришел человек с большим списком знаний и опыта.
На вопрос "Знаете ли вы что-то про уровни изоляций транзакций?" ответил уверенно "Да"
После этого человека попросили рассказать что это и зачем они нужны, на что человек думал секунд 10,
а потом сказал "Вы знаете я забыл"
Здравствуйте, IT, Вы писали:
IT>Мы сейчас не обсуждаем выход из метода. Мы обсуждаем выход за пределы видимости переменной в коде. Насколько я припоминаю, стек выделяется под все ссылки вначале метода. При выходе из блока стек не корректируется, т.е. если переменную явно не обнулить, то она будет болтаться в стеке до выхода из метода.
Всё правильно. При этом GC умеет сопостовлять IP (instruction pointer, полагаю offset внутри метода) с тем, что считать живым на стэке. Поэтому зануливаний ему и не нужно.
Здравствуйте, StandAlone, Вы писали:
SA>Хамство("Нихрена себе чего тут только в резюме не понаписано!...Как думаешь,<имя второго собеседующего>, зачем мы вообще сюда пришли?...") встречается через раз. SA>Но приходится реагировать нейтрально, потому что там же сидит хрюша и хрен она тебя выпустит до завершения стандартного процесса обработки.
В смысле? У вас там забор с колючей проволокой, что ли? Вот вся американская показная вежливость именно для того и придумана. Без хамства, без наглости, ой, извините, очень рад был пообщаться, но, увы, расписание сегодня тяжелое. Давайте как-нибудь в другой раз, ладно. Силой удерживать вас там никто не будет.
Здравствуйте, StandAlone, Вы писали:
F>>При этом человек может работать с C# уже несколько лет, в т.ч. с базами данных. SA>P.S. Да, самое смешное. Несмотря на знания Нэша и Сэджвика, кодил я тогда откровенно говенно. Опыта не хватало, умения сосредоточиться на нужном или запомнить все важное из структуры проектов в несколько сотен kloc.
Я не знаю на какую позицию ты собеседовался и что там стоило или не стоило знать. Но я не искал человека который сможет на доске нарисовать нейронную сеть для расчета всего. Нужен человек который может всего-навсего сделать простое веб-приложение работающее с БД. Данные взяли, данные показали, данные приняли, данные в БД обновили. Не ракетные технологии, как говорится. И человек говорит что да, это все он знает, проблем нет, сделает.
И делает. Только не считает нужным закрывать отпускать в пул соединения после запроса. И оно ведь у него же на машине работает ведь. А то, что при активной работе сотен пользователей у него моментально исчерпается пул соединений — он даже и не догадывается.
Или работает с файлами и не считает нужным закрывать их после использования, а потом иногда вдруг напарывается на ошибку доступа и удивляется "странным глюкам".
Это все из реального опыта виденного в работе. На удивление часто люди не знают не очень-то понимают для чего нужен Dispose или Close у файлов, соединений с БД и подобного.
Это все не требует держать в голове сотни kloc кода. Это тупо вопрос понимая того — знает ли вообще человек что бывает такая вещь как разделяемые ресурсы, о совместном использовании которых стоит хотя бы задуматься, или такого знания у него просто нет. Причем если знания нет — это не значит, что человек ущербный или что-то еще, просто значит у человека знаний таких нет.
Еще хорошо, если человек не знает — и не знает. Всегда можно выучить. Хуже, если "знает", но совершенно неправильно. Например, что вызов Dispose удалит объект из памяти (да, слышал и такое мнение что "это как delete в С"). Как он потом код читает и понимает что в нем происходит?
Здравствуйте, bazis1, Вы писали:
B>Человек, способный это сделать, будет проводить презентации прототипа инвесторам и считать поднятые миллионы, а не устраиваться работать рядовым программистом. Извините.
Вронг.
"Сделать" и "продать" это вещи совершенно разные. Прошу прощения за напоминание общеизвестного.
Поэтому частенько способные что-то сделать идут устраиваться на работу к тем, кто способен продавать(лицо).
Такова салями.
Здравствуйте, bazis1, Вы писали:
B>В смысле? У вас там забор с колючей проволокой, что ли? Вот вся американская показная вежливость именно для того и придумана. Без хамства, без наглости, ой, извините, очень рад был пообщаться, но, увы, расписание сегодня тяжелое. Давайте как-нибудь в другой раз, ладно. Силой удерживать вас там никто не будет.
Заборов нет, но у hr есть техпроцесс обработки кандидата, за исполнение которого ей платят. И она сделает все от нее зависящее, чтобы прогнать единицу хьюмен ресурс по всем этапам.
Силой нет, а в единую базу неблагополучных кандидатов добавить как за здрасте. Информация, если что, от первой, так сказать, морды.
Здравствуйте, Mystic Artifact, Вы писали:
MA> Всё правильно. При этом GC умеет сопостовлять IP (instruction pointer, полагаю offset внутри метода) с тем, что считать живым на стэке. Поэтому зануливаний ему и не нужно.
Это элементарно проверить.
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Foo();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine("End Main");
}
class A
{
~A()
{
Console.WriteLine("~A");
}
}
static void Foo()
{
{
var a = new A();
//a = null; // Здесь раскоментировать для получения другого результата
}
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine("End Foo");
}
}
}
Никто ничего не сопоставляет. Я бы сильно удивился если бы это было так.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, StandAlone, Вы писали:
SA>Вронг. SA>"Сделать" и "продать" это вещи совершенно разные. Прошу прощения за напоминание общеизвестного. SA>Поэтому частенько способные что-то сделать идут устраиваться на работу к тем, кто способен продавать(лицо). SA>Такова салями.
Хе-хе, все глубже. Человек, способный сделать, но неспособный продать, после 3х лет работы в индустрии или научится продавать, или забудет, как делать. Потому что на работу "по способностям" он не сможет переболтать умеющих себя продать, а от работы средней у него быстро завянут мозги.