Что вы знаете о Garbage collector'e ? Когда вызывается статический конструктор? В чем преимущество StringBuilder перед String ? Что такое Linq? Вы на плюсах писали ?
@@dubovikovpv Поздновато отвечаю, но смотри. Стат конструктор перед обычным вызывается, потом инициализатор, потом обычный конструктор. Стринг билдер изменяет существующую память под строку, в то время как стринг анмютабл тип и его конкатенация в обычных условиях приводит к выделению новой памяти, даже елси только одну букву добавляем.
Мое личное мнение. Задавать такие вопросы на собеседовании это признак того, что работодатель не понимает для чего ему сотрудник. Дело в том, что компания обычно занимается вполне определенным видом работ и эти работы не абстрактны, как показанные задачи. Поэтому стоит спрашивать именно по часто встречающимся задачам для будущего сотрудника, а не просто какие-то интересные вопросы из справочника.
Да проблема ещё и в том, что вопросики так себе. Особенно 4-й, это тупость. Это работает потому что у строки, например, оператор == перегружен и работает как equals(), где помимо сравнения ссылок сравнивается ещё и контент. Просто тупой вопрос как по мне, можно просто создать класс подобного типа с перегруженных оператором сравнения.
8:00 нет, object может каститься только к реальному типу, который был до упаковки. т.е. даже если у тебя изначально был short, ты не сможешь скастовать его до int.
По второму вопросу объяснение в корне неправильное. Если бы был боксинг, то структуры через using вообще нельзя бы было освобождать - ведь был бы тот же боксинг. Но никакого боксинга в реальности тут не будет, т.к. в данном случае будет выполнен constrained вызов Dispose(). А вот копирование структуры выполнено действительно будет, но не на выходе из блока using, а на входе в него. Просто using так работает - копирует то, что ему подано на вход извне. По 4-му - тоже. Дело не в интернировании строк (этот механизм по-умолчанию всегда отключен), что легко проверить, передав конструктору строки непустой массив. А в том, что генерируется ссылка на String.Empty, кот. единственная на домен. В общем, читайте первоисточники, а не ориентируйтесь на ролики в ютюбе.
Главное не ориентироваться на такие комментарии... Про using я половину не понял. Но почему это using копирует? Это не так. Если заменить структуру на класс в примере все заработает. using ничего не освобождает - учит мат часть. Кстати с 8го шарпа пример таки заработает, ибо там убрали каст к интерфейсу и теперь using просто вызовет Dispose() даже если IDisposable не указан. Стринги всегда по умолчанию интернируются, если что. Не уверен про сам пример, но интернирование работает только с литералами. Если включить интернирование, то следующий код будет верен: string a = "a"; string b = "a"; a != b Но вообще пример из ролика подозрительный конечно.
@@nooftube2541 Зачем наезжаете на чужие комментарии, если в своём пишете чушь? 1) using копирует на входе, чтобы убедиться в этом, достаточно взглянуть на IL, даже лезть в спецификации не нужно. То что в случае класса работает - так то копируется ссылка. Удивительное, как говорится, рядом. 2) Не надо придираться к словам, пытаясь казаться умнее. Dispose в нормальной жизни как раз освобождает ресурсы - для этого и предназначен. 3) Про C# 8.0 - опять чушь пишите. using работает через duck typing только для ref struct. Это особый случай, в бизнес коде встречающийся крайне редко. Очевидно, вы что-то слышали, но только левым ухом или поняли не до конца. 4) Стринги никогда по умолчанию не интернируются, с чего вы это взяли? Прежде чем писать свой коммент, я это кстати проверил, как и все др. свои утверждения. Что же касается вашего кода, то едва ли вы его проверяли, ведь он даже не компилируется, и разбираться, что вы там имели в виду, я не собираюсь. Интернирование литералов - это вообще тут не подходит, где вы в примере 4 видели литералы?
@@zachemny 1. ошибся - да. Логично что копирует 2. есть множество способов использования Dispose помимо освобождения ресурсов. Но то что сам Dispose ничего не освобождает - особенно сам объект - это самое важно в понимании Dispose. Но если грубо, то конечно можно так сказать... но в любом случае это освобождение ресурсов, а не объекта. 3. Действительно, у меня компилится только для ref struct, что странно, потому что по спеке - должно работать для всего: docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/using#detailed-design 4. литералы всегд аинтернируются по дефолту: docs.microsoft.com/en-us/dotnet/api/system.string.intern?view=netcore-3.1 но можно отключить. "Обычные" (то есть собранные) стринги не интернируются, и это никак нельзя включить "по-дефолту", только явным вызовом String.Intern(). Но в примере действительно не в этом дело. Странные дела со string.Empty, не знал что оно так хитро работает. А причем мой тут код, и откуда вы знаете компилируется он или нет?
@@nooftube2541 1) Ага, уже вежливее, это хорошо. 2) Если у вас в коде Dispose будет часто заниматься чем-то, кроме освобождения ресурсов, то это будет вызывать закономерные WTF у ваших коллег на код-ревью или при поддержке. Так что лучше ИМХО всё-таки придерживаться общепринятых норм. А так-то конечно: конструктор может заниматься освобождением ресурсов, а Dispose() - их выделением, компилятору всё равно, что вы в них напишите. 3) Там по вашей ссылке какая-то вода: The language will add the notion of a disposable pattern. Это вообще в будущем времени. ref struct: These types can't implement interfaces today and hence can't participate in using statements. А это уже не актуально. Так что ИМО лучше читать пропозалы, там как-то более чётко описывается, что было/будет имплементировано. 4) Когда-то давным-давно можно было включить автоинтернирование для всех строк, но видимо потом эту фишку выпилили. Возможно никому не пригодилась. Впрочем могу и ошибаться, никогда этим не пользовался. 4.1) Со String.Empty ничего хитрого: referencesource.microsoft.com/#mscorlib/system/string.cs,1577 Вот код конструктора строки из массива char, предельно простой. 5) Ваш код: string a = "a"; string b = "a"; a != b Что такое a != b ? Чтобы обсуждать код надо писать законченные фрагменты. К тому-же 2 одинаковые строки конечно будут равны между собой, будь там интернирование, или нет его. Проверять интернирование надо так: var isInterned = String.IsInterned(a); а на единый общий инстанс так: var eq = ReferenceEquals(a, b); А ваш код ни к селу ни к городу. Вот и создаётся ощущение (правильное), что у человека каша в голове.
Ну а в реальном мире, джуны в геймдеве никому не нужны. Никто не будет вам предлагать сделать тестовые задания. И если у вас уже много самодельных работ, вам повезёт, если их хотябы посмотрят. Так что будьте к этому готовы. Не пессимист, просто говорю как есть
Вывод - пилю игру сам в соло) Главное что бы для игрока всё работало, как я там буду три яруса говна мазать игроку не интересно. Если игра получит аудиторию у меня появятся деньги и время на переписывание кода уже в тиме с более менее толковым кодером. Нахер студии с их 100500 три в ряд и донатными помойками!
Рельно самая большая проблема в устройстве на работу - это то, что каждый работодятел желает, чтобы соискатель был весь такой полностью готовый гений, знающий прям всё, и особенно - всякие специфичные фреймворки и расширения для Юнити, которые применяет лишь этот работодятел. И причём, у каждого работодятла, эти расширения и фреймворки - свои! Под каждого бросаться их учить, чтоб попытаться устроиться - тоже не дело. Вот и жопа получается...
@@sergs2919 , как бы я ток начал изучать, я и близко ничего не понял. Я о представленном даже не слышал и близко не представляю где это применимо. Я может быть не прав, но на мой взгляд такие вопросы попытка найти мидла за зарплату джуниора.
@@dkvChannel ну смотри, первое задание например совсем понятное. Перегрузку ты должен был проходить в изучении функций. Класс B наследуется от класса A. A - его родитель, и в соответствии B наследует все его методы. Но поскольку метод Foo перегружается в классе B вывод очевиден)
На вход дан массив цифр (2-9). Каждой цифре может соответствовать несколько символов (как латинские символы на кнопках старых сотовых телефонов). По заданной последовательности цифр вывести все возможные комбинации символов получаемые заменой каждой цифры одним из символов соответствующим цифре. Пример: на входе - 233 2 - abc 3 - def Вывод: add ade adf aed aee aef afd afe aff ... cff
C# знаю на уровне синтаксиса, но в целом стаж 10+ лет с другими языками. Как ни странно, но ответил на все правильно, хотя соображения почему отличались от ответа автора
Ответ на 2 очень простой, трахнуть стулом по голове человека который описывает структуры с диспоуз и пишет юзинг в такой манере. Структуры в Шарпе нужны для интеропа и взаимодействия с С++ либами например, после вызова метода библиотеки она вернет нам указатель на место где лежит результат в стеке, мы сможем зная размеры типов полей наложить туда структуру и прочесть результат. Наличие в структурах ссылочных типов и тем более объекта который необходимо утилизировать это говнокод. Вопрос зачем спрашивать про говнокод?
В 3, как показалось, не совсем верно объясняется - то, что short не вмещает всех значений int, не является причиной падения, на (long)obj точно так же падало бы; приводить можно , именно как дальше говорится, только к вышестоящим по иерархии, а в случае структур это могут быть только интерфейсы или ValueType
@@nooftube2541 сейчас проверил такой код, всё работает int i = 4; object o = i; ValueType vt = (ValueType)o; Console.WriteLine(vt); а почему должно быть нельзя?
С dispose пример чудовищный. Использование disposed объектов запрещает сам смысл using. Троллинг с value типами, это вообще отдельный котел для создателей c#
Батенька, интерфейс реализуется структурой, а не наследуется! Также забыл сказать какой именно интерфейсный метод реализуется. Тоже что ли, пойти по-предовать? :)
Никто не видел детальное сравнение ООП и прочего в Java и C# ?. Например, в Java нет virtual, почему, чем это хорошо/плохо, какой аналог struct может быть в Java и т.д.
Курст не бесплатный. Нжно 20баллов что бы их получить нужно Подтвердить почту +5 балов Пригласить друга +5 балов получить сертификат + 50 балов. Так что нифига он не бесплатный
Это вопрос из серии: что будет если на java написать Integer a = 1; Integer b = 1; log(a == b); Integer a1 = 1000; Integer b1 = 1000; log(a1 == b1); - в первом случае покажет true, а во втором - false. Потому что в java во время боксинга интов - до 127 - возвращаются Singleton интегера. А после 127 - новый объект. Абсолютно бесполезные знания для написания реальных вещей на java. тем более для Junior.
Почему 'x' и 'y' в этом случае равны: object x = new string( new char[0] ); object y = new string( new char[0] ); А в этом нет: object x = new string( new char[1] { '0', } ); object y = new string( new char[1] { '0', } ); ?
потому что пустая строка хранится в единственном экземпляре и компилятор при создании пустой строки просто кидает ссылку на уже существующую пустую строку, а вот при создании не пустой строки, компилятор создаст новый объект в куче и даст первой строке ссылку на этот объект и потом создаст второй точно такой же объект в куче и второй строке даст ссылку уже на новый объект, в свою очередь после апкаста стринга в объект сравнение == для объектов будет сравнивать сами ссылки этих объектов, а ссылки то разные, хоть и указывают они на равные по значению объекты в куче.
Будут равны, только если сравнивать так (string)x == (string)y. Тогда вызовется переопределенный оператор сравнения ==, а в нем реализовано сравнение по значению. Еще будут равны, если написать object.Equals(x,y)
@@enqeegeth3604 Да! Вот только час назад сообщили, очень рад. В общей сложности собеседовало 4 человека, изначально 2 ейчара(общие вопросы, английский и тд), потом два програмиста по скайпу, при том с разных городов для оптимальности выводов. Очень широкий спектр вопросов, долго было. Справшивали ООП(принципы), наследование в шарпах(virual, override), патерны(в часности синглтон реализовать), и еще много всего по констркциям + код писать в онлайне. Дальше был JS основы, потом был вопрос по дискретке упростить логическое выражение. И геометрия, в часности векторное произведение, нормалли, скалярное произведение, производные и тд. Сложно было, думал завалил, ибо много что просто забыл. Но в итоге взяли. Так что всем удачи, ребят пробуйте, не опускайте руки если получаете отказ, когда-то точно повезет если работать)
@@danyilkorotych1727 Круто, молодец! Я буквально 4 месяца назад начал изучать шарп). А вот насчёт математических знаний всё сложно... Кажись помню только терему пифагора, а про дискретку толком ничего и не знаю. До собеса ещё далеко, а уже страшно...
@@enqeegeth3604 ну насчет математики - ее не везде спрашивают, все зависит от специфики разработки, что реально часто спрашивают - это задачки типа как поменять местами две части массива не исполюзуя еще один массив и тд, так что немного потренировать такое нужно, в инете их много
IDisposable произносится вообще не так, и ударение не там. Почему все разработчики так ужасно коверкают English? Потому что не удосуживаются сверяться со словарем и шпарят по когда-то освоенным шаблонам, конечно же неправильным.
Я придумал еще одно решение: object x = new string(string.Empty); object y = new string(string.Empty); Console.WriteLine(x == y); Похоже, что string.Empty ("" тоже подойдет) приводит к такому же результату, как пустой массив символов.
Честно говоря, основательно подумал бы, прежде чем соглашаться на работу в контору, задающие такие вопросы джуну. Делать структуру IDisposible? Серьёзно, так кто-то в мире буедет делать? И джун должен шарить в тонкостях работы юзинга при обработке структур? Это даже не смешно. PS: в четвёртом вопросе стоило бы обратить внимание не на фокусы с угадыванием, а на то, что структуры сравниваются по значению, соответственно подойдёт new int() или new DateTime(), без всяких там nullable
Джунов такие вопросы спрашивают не для того, чтобы получить правильный ответ. А для того, чтобы он ошибся, начал думать, воспользовался подсказками и смог исправится и объяснить почему он ошибся. В этом всем процессе начинает бюыть видно как человек мыслит и как решщает зхадачи и способен ли к обучению
На 3 автор сам не понимает почему распаковка в short не возможна. "Мы туда упаковали int, а short не кастится до int. Дело в том, что short меньше по размеру". А если бы мы туда long кастили, то получилось бы? Автор, кастится должно к тому же типу, а не к большему или меньшему. Сам не понимаешь процессов, которые объясняешь
using System; using System.Threading; using static System.Console; internal sealed class Test { public float Example; } namespace FirstTest { internal sealed class Test { public string Example; } internal class Program { private static void Main() { //var t = new Test(); //t.Example = 2.2f; Task(); ReadKey(); } private static void Task() { var array = new[] {4, 8, 15, 16, 23, 42};
foreach (var i in array) { ThreadPool.QueueUserWorkItem(callBack => Write($"{i} ")); } } } } 1) как сделать так, чтобы закомментированный код работал не трогая класс Test 2) Что выведет метод Task()
1) добавить переименовывающий using, например using OuterTest = Test; 2) Не уверен, но вроде не определено, т.к. метод закончится, когда заполнится очередь в цикле, а что потоки успеют выполнить и в каком порядке не определяется. Может ошибка даже, если callback попробует читать массив после снятия ссылки со стека
Ужос какие дебильные вопросы. Никогда такие не задаю. Принимал на работу человек 100. Правильные вопросы: как бы вы реализовали игру жизнь(предоставляются правила)? Как лучше индексировать номера телефонов? Есть стандартный массив, как бы вы его перевернули задом наперёд без вызова функции reverse? (написать код на бумажке).
Ну тоже такие себе вопросы... главное у программиста это мышление, абстракции, композиция и декомпозиция задачи.. кодинг и правила языка это малая доля хорошего ПО
4 из 4. Задачки какие-то ну уж через чур лёгкие. По поводу 4 задачи: чтобы всегда возвращало true нужно убрать "?" перед вызовом конструктора структуры int. Да и вообще подойдёт вызов любого конструктора 2-х одинаковых структур... 2-е решение это какие-то танцы с бубном, потому что можно было просто сделать var x = new char(); и всё (собственно, опять же вызов конструктора структуры). Но нет же! Нужно блеснуть своим "умом" и написать что-то вроде: var x = new string(new char[new char().ToString().IndexOf("", StringComparison.Ordinal)]); var y = new string(new char[new char().ToString().IndexOf("", StringComparison.Ordinal)]); Если бы мне такое собеседующий задвинул, я бы рукой себе лоб пробил.
На первый взгляд первый пример - хорошее мнемоническое объяснение. Кот и животное. Но если поменять их местами? И все - ответ сыплется. Типа слева требуют кота, а в правой части выражения стоит животное. Так автор принял. Но джун может это не знать. Почему так принято?
На каких вопросах валились вы?
Что такое c#?
Что вы знаете о Garbage collector'e ?
Когда вызывается статический конструктор?
В чем преимущество StringBuilder перед String ?
Что такое Linq?
Вы на плюсах писали ?
Delegate и Enum после компиляции?
Dippps а в чем проблема? Есть книги как писать 3д движки , возможно вы просто книги не читаете
@@dubovikovpv Поздновато отвечаю, но смотри. Стат конструктор перед обычным вызывается, потом инициализатор, потом обычный конструктор. Стринг билдер изменяет существующую память под строку, в то время как стринг анмютабл тип и его конкатенация в обычных условиях приводит к выделению новой памяти, даже елси только одну букву добавляем.
Роман, мы вам перезвоним!
Ви что терасофт?
@@PoixoN нет, просто чернокожий...
Так и не перезвонили
Мое личное мнение.
Задавать такие вопросы на собеседовании это признак того, что работодатель не понимает для чего ему сотрудник. Дело в том, что компания обычно занимается вполне определенным видом работ и эти работы не абстрактны, как показанные задачи. Поэтому стоит спрашивать именно по часто встречающимся задачам для будущего сотрудника, а не просто какие-то интересные вопросы из справочника.
Да проблема ещё и в том, что вопросики так себе. Особенно 4-й, это тупость. Это работает потому что у строки, например, оператор == перегружен и работает как equals(), где помимо сравнения ссылок сравнивается ещё и контент. Просто тупой вопрос как по мне, можно просто создать класс подобного типа с перегруженных оператором сравнения.
@@vivaleute5141 Я проверил - оно работает с ненулевыми строками.
@@JohnDoe-tm1rv Ну молодец, что проверил, хотя, если ты программист, то как бы знать должен. Так а к чему это было сказано?
@@vivaleute5141 Забудь, оно таки не работает
@@JohnDoe-tm1rv Не работает у тебя в голове разве что
8:00 нет, object может каститься только к реальному типу, который был до упаковки. т.е. даже если у тебя изначально был short, ты не сможешь скастовать его до int.
Тоже заметил. Анбоксингу всегда нужно, чтобы тип был одинаковым при боксинге, иначе будет InvalidCastException
По второму вопросу объяснение в корне неправильное. Если бы был боксинг, то структуры через using вообще нельзя бы было освобождать - ведь был бы тот же боксинг. Но никакого боксинга в реальности тут не будет, т.к. в данном случае будет выполнен constrained вызов Dispose(). А вот копирование структуры выполнено действительно будет, но не на выходе из блока using, а на входе в него. Просто using так работает - копирует то, что ему подано на вход извне.
По 4-му - тоже. Дело не в интернировании строк (этот механизм по-умолчанию всегда отключен), что легко проверить, передав конструктору строки непустой массив. А в том, что генерируется ссылка на String.Empty, кот. единственная на домен.
В общем, читайте первоисточники, а не ориентируйтесь на ролики в ютюбе.
Главное не ориентироваться на такие комментарии...
Про using я половину не понял. Но почему это using копирует? Это не так. Если заменить структуру на класс в примере все заработает. using ничего не освобождает - учит мат часть. Кстати с 8го шарпа пример таки заработает, ибо там убрали каст к интерфейсу и теперь using просто вызовет Dispose() даже если IDisposable не указан.
Стринги всегда по умолчанию интернируются, если что. Не уверен про сам пример, но интернирование работает только с литералами. Если включить интернирование, то следующий код будет верен:
string a = "a";
string b = "a";
a != b
Но вообще пример из ролика подозрительный конечно.
@@nooftube2541 Зачем наезжаете на чужие комментарии, если в своём пишете чушь?
1) using копирует на входе, чтобы убедиться в этом, достаточно взглянуть на IL, даже лезть в спецификации не нужно. То что в случае класса работает - так то копируется ссылка. Удивительное, как говорится, рядом.
2) Не надо придираться к словам, пытаясь казаться умнее. Dispose в нормальной жизни как раз освобождает ресурсы - для этого и предназначен.
3) Про C# 8.0 - опять чушь пишите. using работает через duck typing только для ref struct. Это особый случай, в бизнес коде встречающийся крайне редко. Очевидно, вы что-то слышали, но только левым ухом или поняли не до конца.
4) Стринги никогда по умолчанию не интернируются, с чего вы это взяли? Прежде чем писать свой коммент, я это кстати проверил, как и все др. свои утверждения. Что же касается вашего кода, то едва ли вы его проверяли, ведь он даже не компилируется, и разбираться, что вы там имели в виду, я не собираюсь. Интернирование литералов - это вообще тут не подходит, где вы в примере 4 видели литералы?
@@zachemny
1. ошибся - да. Логично что копирует
2. есть множество способов использования Dispose помимо освобождения ресурсов. Но то что сам Dispose ничего не освобождает - особенно сам объект - это самое важно в понимании Dispose. Но если грубо, то конечно можно так сказать... но в любом случае это освобождение ресурсов, а не объекта.
3. Действительно, у меня компилится только для ref struct, что странно, потому что по спеке - должно работать для всего: docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/using#detailed-design
4. литералы всегд аинтернируются по дефолту: docs.microsoft.com/en-us/dotnet/api/system.string.intern?view=netcore-3.1 но можно отключить. "Обычные" (то есть собранные) стринги не интернируются, и это никак нельзя включить "по-дефолту", только явным вызовом String.Intern(). Но в примере действительно не в этом дело. Странные дела со string.Empty, не знал что оно так хитро работает.
А причем мой тут код, и откуда вы знаете компилируется он или нет?
@@nooftube2541
1) Ага, уже вежливее, это хорошо.
2) Если у вас в коде Dispose будет часто заниматься чем-то, кроме освобождения ресурсов, то это будет вызывать закономерные WTF у ваших коллег на код-ревью или при поддержке. Так что лучше ИМХО всё-таки придерживаться общепринятых норм. А так-то конечно: конструктор может заниматься освобождением ресурсов, а Dispose() - их выделением, компилятору всё равно, что вы в них напишите.
3) Там по вашей ссылке какая-то вода:
The language will add the notion of a disposable pattern. Это вообще в будущем времени.
ref struct: These types can't implement interfaces today and hence can't participate in using statements. А это уже не актуально.
Так что ИМО лучше читать пропозалы, там как-то более чётко описывается, что было/будет имплементировано.
4) Когда-то давным-давно можно было включить автоинтернирование для всех строк, но видимо потом эту фишку выпилили. Возможно никому не пригодилась. Впрочем могу и ошибаться, никогда этим не пользовался.
4.1) Со String.Empty ничего хитрого: referencesource.microsoft.com/#mscorlib/system/string.cs,1577 Вот код конструктора строки из массива char, предельно простой.
5) Ваш код:
string a = "a";
string b = "a";
a != b
Что такое a != b ?
Чтобы обсуждать код надо писать законченные фрагменты. К тому-же 2 одинаковые строки конечно будут равны между собой, будь там интернирование, или нет его. Проверять интернирование надо так:
var isInterned = String.IsInterned(a);
а на единый общий инстанс так:
var eq = ReferenceEquals(a, b);
А ваш код ни к селу ни к городу. Вот и создаётся ощущение (правильное), что у человека каша в голове.
using Dispose() тут просто обнуляет ссылку на кучу... так как в using передается копия ссылки
Дружище, класс А должен быть абстрактным!!!
Ну а в реальном мире, джуны в геймдеве никому не нужны. Никто не будет вам предлагать сделать тестовые задания. И если у вас уже много самодельных работ, вам повезёт, если их хотябы посмотрят. Так что будьте к этому готовы. Не пессимист, просто говорю как есть
для Unity - нужны. Junior-ы занимаются версткой интерфейсов и созданием вьюшек под них.
Вывод - пилю игру сам в соло) Главное что бы для игрока всё работало, как я там буду три яруса говна мазать игроку не интересно. Если игра получит аудиторию у меня появятся деньги и время на переписывание кода уже в тиме с более менее толковым кодером. Нахер студии с их 100500 три в ряд и донатными помойками!
Рельно самая большая проблема в устройстве на работу - это то, что каждый работодятел желает, чтобы соискатель был весь такой полностью готовый гений, знающий прям всё, и особенно - всякие специфичные фреймворки и расширения для Юнити, которые применяет лишь этот работодятел.
И причём, у каждого работодятла, эти расширения и фреймворки - свои!
Под каждого бросаться их учить, чтоб попытаться устроиться - тоже не дело.
Вот и жопа получается...
Просто приходишь к начальнику, кладёшь ноги на стол и говоришь:«С этого дня я работаю у вас»
желательно чтоб соискателю было не больше 20ти лет а опыта работы не мнее 10ти.
object x= new Random (0,0);
object y = new Random (0,0);
Console.writeLine(x==y);
не вопросы для джуна, а интересные задачки для более глубокого изучения языка. таких задач можно придумать миллион и завалить любого
ну я бы не сказал вопросы в принципе простые
@@sergs2919 , как бы я ток начал изучать, я и близко ничего не понял. Я о представленном даже не слышал и близко не представляю где это применимо. Я может быть не прав, но на мой взгляд такие вопросы попытка найти мидла за зарплату джуниора.
@@dkvChannel так это легкие вопросы
@@kadencode5347 , ну я рад за тебя...
@@dkvChannel ну смотри, первое задание например совсем понятное. Перегрузку ты должен был проходить в изучении функций. Класс B наследуется от класса A.
A - его родитель, и в соответствии B наследует все его методы. Но поскольку метод Foo перегружается в классе B вывод очевиден)
На вход дан массив цифр (2-9). Каждой цифре может соответствовать несколько символов (как латинские символы на кнопках старых сотовых телефонов).
По заданной последовательности цифр вывести все возможные комбинации символов получаемые заменой каждой цифры одним из символов соответствующим цифре.
Пример: на входе - 233
2 - abc
3 - def
Вывод:
add
ade
adf
aed
aee
aef
afd
afe
aff
...
cff
Круто. Уже что-то понимаю в языке)
C# знаю на уровне синтаксиса, но в целом стаж 10+ лет с другими языками. Как ни странно, но ответил на все правильно, хотя соображения почему отличались от ответа автора
Вроде на джуна такие вещи и спрашивали, полезный для начинающих видос :)
Только начинаю изучать программирование, из видео нифига не понял. Вернусь Джуниором через пол года :D
5 месяцев прошло, как дела?
@@belozerov_mi Бро, шаришь в с#?
Продолжай, ну и зацепи Unity естественно :3
Ответ на 2 очень простой, трахнуть стулом по голове человека который описывает структуры с диспоуз и пишет юзинг в такой манере.
Структуры в Шарпе нужны для интеропа и взаимодействия с С++ либами например, после вызова метода библиотеки она вернет нам указатель на место где лежит результат в стеке, мы сможем зная размеры типов полей наложить туда структуру и прочесть результат.
Наличие в структурах ссылочных типов и тем более объекта который необходимо утилизировать это говнокод. Вопрос зачем спрашивать про говнокод?
Так красивее:
object x = new string(string.Empty);
object y = new string(string.Empty);
Console.WriteLine(x == y);
Очень напоминает статью из метанита.
Это и есть с метанита
@@instkoff А на метаните с Рихтера
@@yippeeki-yey а Рихтер не для джунов, ту-дунс )
В 3, как показалось, не совсем верно объясняется - то, что short не вмещает всех значений int, не является причиной падения, на (long)obj точно так же падало бы; приводить можно , именно как дальше говорится, только к вышестоящим по иерархии, а в случае структур это могут быть только интерфейсы или ValueType
Разве к ValuType можно кастить?
@@nooftube2541 сейчас проверил такой код, всё работает
int i = 4;
object o = i;
ValueType vt = (ValueType)o;
Console.WriteLine(vt);
а почему должно быть нельзя?
@@nooftube2541 Все значимые типы наследуются от ValueType, так что можно, если тип одинаковый (я про распаковку)
С dispose пример чудовищный. Использование disposed объектов запрещает сам смысл using. Троллинг с value типами, это вообще отдельный котел для создателей c#
Не запрещает, если знаешь как используется.
хитрость про интерфейс не знал. спасибо
DownCast (вниз к производному классу) невозможен без предварительного UpCast(вверх к базовому классу)
Очень крутой контент. Будет что спрашивать у ребят на зачете в конце школьного года ;)
Батенька, интерфейс реализуется структурой, а не наследуется! Также забыл сказать какой именно интерфейсный метод реализуется. Тоже что ли, пойти по-предовать? :)
Никто не видел детальное сравнение ООП и прочего в Java и C# ?. Например, в Java нет virtual, почему, чем это хорошо/плохо, какой аналог struct может быть в Java и т.д.
Знаю, что опоздал, но мало ли кто-то прочтет.
В джаве все нестатические методы по умолчанию виртуальные, а аналогов структурам нет.
Ну структуры быстрее работают(они же в стекле вроде), поэтому скорее всего, чисто теоретически будет быстрее с ними.
Курст не бесплатный. Нжно 20баллов что бы их получить нужно
Подтвердить почту +5 балов
Пригласить друга +5 балов
получить сертификат + 50 балов. Так что нифига он не бесплатный
А я думал такие вопросы померли еще в 2010-ом.
1/4. Я просто тупень... У меня всё.
Если такие тонкости должен знать джун, что тогда должен знать мидл интересно.
В 3 вопросе у Вас ошибка объяснения.
(long)obj - тоже выдаст ошибку.
Ну да, логичнее было сказать что value тип при анбоксинге должен быть таким же, как и при боксингом
@@PetroChernykh почти. в int? не будет ругаться.
@@25x25RS почему почти? Был int, и должен стать int.
Очень странные задачи. Никакой практической ценности. Если вам такое задают, то лучше бы спросить себя нужно ли работать в такой компании.
Я ЧУВСТВУЮ что ты немного затролил Александра Шевчука из itvdn :3
Отличный контент!
Ставьте скорость на 0.5 и смело засыпайте.
Я бы даже отвечать не стал на эти вопросы. Просто не пошел бы к работодателю, у которого на интервью такие идиотские вопросы.
Это вопрос из серии: что будет если на java написать Integer a = 1; Integer b = 1; log(a == b); Integer a1 = 1000; Integer b1 = 1000; log(a1 == b1); - в первом случае покажет true, а во втором - false. Потому что в java во время боксинга интов - до 127 - возвращаются Singleton интегера. А после 127 - новый объект. Абсолютно бесполезные знания для написания реальных вещей на java. тем более для Junior.
А что мой комментарий то стерли про IDisposable?
Почему 'x' и 'y' в этом случае равны:
object x = new string( new char[0] );
object y = new string( new char[0] );
А в этом нет:
object x = new string( new char[1] { '0', } );
object y = new string( new char[1] { '0', } );
?
потому что пустая строка хранится в единственном экземпляре и компилятор при создании пустой строки просто кидает ссылку на уже существующую пустую строку, а вот при создании не пустой строки, компилятор создаст новый объект в куче и даст первой строке ссылку на этот объект и потом создаст второй точно такой же объект в куче и второй строке даст ссылку уже на новый объект, в свою очередь после апкаста стринга в объект сравнение == для объектов будет сравнивать сами ссылки этих объектов, а ссылки то разные, хоть и указывают они на равные по значению объекты в куче.
Будут равны, только если сравнивать так (string)x == (string)y. Тогда вызовется переопределенный оператор сравнения ==, а в нем реализовано сравнение по значению. Еще будут равны, если написать object.Equals(x,y)
Очень полезно. Спасибо!
Свалился на 3 и 4
Если бы было подробнее, тогда было бы лучше, а то некоторые определения совершенно не понятны
Откуда ты узнал что у меня завтра собеседование по шарпах? Значит готовлюсь я тут, решил чайка попить, отдохнуть, захожу в ютуб - первый видос - твой
Google algorithms
Удачи, кстати!
Прошёл?
@@enqeegeth3604 Да! Вот только час назад сообщили, очень рад. В общей сложности собеседовало 4 человека, изначально 2 ейчара(общие вопросы, английский и тд), потом два програмиста по скайпу, при том с разных городов для оптимальности выводов. Очень широкий спектр вопросов, долго было. Справшивали ООП(принципы), наследование в шарпах(virual, override), патерны(в часности синглтон реализовать), и еще много всего по констркциям + код писать в онлайне. Дальше был JS основы, потом был вопрос по дискретке упростить логическое выражение. И геометрия, в часности векторное произведение, нормалли, скалярное произведение, производные и тд. Сложно было, думал завалил, ибо много что просто забыл. Но в итоге взяли. Так что всем удачи, ребят пробуйте, не опускайте руки если получаете отказ, когда-то точно повезет если работать)
@@danyilkorotych1727 Круто, молодец! Я буквально 4 месяца назад начал изучать шарп). А вот насчёт математических знаний всё сложно... Кажись помню только терему пифагора, а про дискретку толком ничего и не знаю. До собеса ещё далеко, а уже страшно...
@@enqeegeth3604 ну насчет математики - ее не везде спрашивают, все зависит от специфики разработки, что реально часто спрашивают - это задачки типа как поменять местами две части массива не исполюзуя еще один массив и тд, так что немного потренировать такое нужно, в инете их много
Если ты хорошо знаешь С#, это ты должен вести собеседования. Достоин ли они что бы платит тебе ))
Неплохо
ты говоришь что шорт не катится до Инта, так как он меньше. но это же как раз позволяет ему каститься)
Кастится тот что больше, потому что диапазон значений расширяется, а не сужается, и нет потенциальной утечки данных.
IDisposable произносится вообще не так, и ударение не там. Почему все разработчики так ужасно коверкают English? Потому что не удосуживаются сверяться со словарем и шпарят по когда-то освоенным шаблонам, конечно же неправильным.
Я придумал еще одно решение:
object x = new string(string.Empty);
object y = new string(string.Empty);
Console.WriteLine(x == y);
Похоже, что string.Empty ("" тоже подойдет) приводит к такому же результату, как пустой массив символов.
слушай, ну если в java вот так сделать, наверное ошибки нее будет, потому что в шорт диапазон интовая единица входит
Всегда удивлялся тому, что самые крутые прогеры не могут себе даже сайт сделать без глюков. Наверно и курсы у них такие же глючные.
Кстати да)))
Сапожник без сапог)
Когда говоришь на видео, хотя бы маленько напрягай свои голосовые связки, твоё хрипение слушать не очень приятно.
Честно говоря, основательно подумал бы, прежде чем соглашаться на работу в контору, задающие такие вопросы джуну.
Делать структуру IDisposible? Серьёзно, так кто-то в мире буедет делать?
И джун должен шарить в тонкостях работы юзинга при обработке структур?
Это даже не смешно.
PS: в четвёртом вопросе стоило бы обратить внимание не на фокусы с угадыванием, а на то, что структуры сравниваются по значению, соответственно подойдёт new int() или new DateTime(), без всяких там nullable
Это не те вопросы, у джуна нет опыта. его надо спрашивать теорию, а не дрочить мозг какими-то тонкостями.
Джунов такие вопросы спрашивают не для того, чтобы получить правильный ответ. А для того, чтобы он ошибся, начал думать, воспользовался подсказками и смог исправится и объяснить почему он ошибся. В этом всем процессе начинает бюыть видно как человек мыслит и как решщает зхадачи и способен ли к обучению
Последнее, а бул подойдёт?
А че за прикол с бесплатным курсом, который не бесплатный по итогу?))
Бесплатный курс с гарантией.
кто-то понял кто автор последнего вопроса?
Напишите пожалуйста Имя не могу понять что Роман сказал
как охуенно объяснил просто лацк!
В четвертом ещё можно было создать со стрингом метод инсерт
На 3 автор сам не понимает почему распаковка в short не возможна. "Мы туда упаковали int, а short не кастится до int. Дело в том, что short меньше по размеру". А если бы мы туда long кастили, то получилось бы? Автор, кастится должно к тому же типу, а не к большему или меньшему. Сам не понимаешь процессов, которые объясняешь
Ай диспосЕйбл... у меня всё.
По ссылке не бесплатный курс, надо сделать какие-то действия, потратить на это время, время это деньги. Так то.
Отучился 2 года на программиста, не разу не юзал object и var. Слышал, но не использовал... Пора читать книги...
var - это синтаксический сахар, который используется лишь в зависимости от конвенций компании, в которой работаете.
using System;
using System.Threading;
using static System.Console;
internal sealed class Test
{
public float Example;
}
namespace FirstTest
{
internal sealed class Test
{
public string Example;
}
internal class Program
{
private static void Main()
{
//var t = new Test();
//t.Example = 2.2f;
Task();
ReadKey();
}
private static void Task()
{
var array = new[] {4, 8, 15, 16, 23, 42};
foreach (var i in array)
{
ThreadPool.QueueUserWorkItem(callBack => Write($"{i} "));
}
}
}
}
1) как сделать так, чтобы закомментированный код работал не трогая класс Test
2) Что выведет метод Task()
1) добавить переименовывающий using, например using OuterTest = Test;
2) Не уверен, но вроде не определено, т.к. метод закончится, когда заполнится очередь в цикле, а что потоки успеют выполнить и в каком порядке не определяется. Может ошибка даже, если callback попробует читать массив после снятия ссылки со стека
2) 42 23 16 15 8 4
ВСЕГДА БЫЛО ПЛЕВАТЬ НА СОБЕСЕДОВАНИЕ ЭТО Я ИМ НУЖЕН НЕ ОНИ МНЕ
Поставьте скорость проигрывания 1.25 =)) и будет нормально
Мне на 2.0 норм, привык )
Ужос какие дебильные вопросы. Никогда такие не задаю. Принимал на работу человек 100.
Правильные вопросы: как бы вы реализовали игру жизнь(предоставляются правила)? Как лучше индексировать номера телефонов? Есть стандартный массив, как бы вы его перевернули задом наперёд без вызова функции reverse? (написать код на бумажке).
Ну тоже такие себе вопросы... главное у программиста это мышление, абстракции, композиция и декомпозиция задачи.. кодинг и правила языка это малая доля хорошего ПО
Написать код на бумажке? А потом ты подтираясь ей, его соберёшь? А чем смысл? Или в голове вообще ничего?
@@maxumka548 В чем проблема 3 строчки написать? Хоть псевдоязыком.
ДИ СПА СЕЙБЛ 🎊🎊🎊
IDespacito
4 из 4. Задачки какие-то ну уж через чур лёгкие. По поводу 4 задачи: чтобы всегда возвращало true нужно убрать "?" перед вызовом конструктора структуры int. Да и вообще подойдёт вызов любого конструктора 2-х одинаковых структур... 2-е решение это какие-то танцы с бубном, потому что можно было просто сделать var x = new char(); и всё (собственно, опять же вызов конструктора структуры).
Но нет же! Нужно блеснуть своим "умом" и написать что-то вроде:
var x = new string(new char[new char().ToString().IndexOf("", StringComparison.Ordinal)]);
var y = new string(new char[new char().ToString().IndexOf("", StringComparison.Ordinal)]);
Если бы мне такое собеседующий задвинул, я бы рукой себе лоб пробил.
На первый взгляд первый пример - хорошее мнемоническое объяснение. Кот и животное. Но если поменять их местами? И все - ответ сыплется. Типа слева требуют кота, а в правой части выражения стоит животное. Так автор принял. Но джун может это не знать. Почему так принято?
Реальное собеседование на middle developer ua-cam.com/video/-y5etXS6efs/v-deo.html
Вы забыли написать, что по ссылке - собеседование на FRONTEND developer
128 лайков)
Какой же талант 2*2=4 так долго об этом рассказывать. Херня, эти вопросы все знают. Говорить про них 30сек.