1. Изучить основные принципы ООП ( с помощью метонита ) 2. От какого класса неявно наследуются все классы в .Net 3. Разрешено ли множественное наследование в c#? 4. Как вы понимаете REST? 5. Что такое exception? 6. Что такое garbage collector на базовом уровне? 7. Какие типы данных вы знаете ?/ коллекции / структуры данных 8. Что такое тип значения, а что такое тип ссылки 9. Что из этого class, а что struct 10. В каком участке памяти они хранятся? 11. Что такое boxing и unboxing? 12. какие знаете коллекции ? 13. Чем отличается абстрактный класс от интерфейса ? 14. Зачем нужны интерфейсы и какие задачи они выполняют ? 15. Разница между структурой и классом 16. Привести примеры структур 17. Изучить асинхронность 18. Что такое асинхронность и чем она отличается от многопоточности? 19. Какие типы join существуют в sql? 20. Недостатки, отличая joinов и в каких случаях что используется 21. Зачем нужны unit тесты? 22. Какие преимущества и недостатки использования unit тестов? 23. Из каких трех логических блоков состоит unit тест ?
Основные принципы ООП (объектно-ориентированного программирования) включают: Инкапсуляция: скрытие внутренних данных и методов объекта от прямого доступа, обеспечение доступа к ним через публичные интерфейсы. Наследование: возможность создания новых классов на основе существующих, наследование их свойств и методов. Полиморфизм: использование одного интерфейса для представления различных типов объектов, позволяет использовать объекты разных классов через общий интерфейс. Абстракция: выделение общих характеристик объектов и создание абстрактных классов или интерфейсов для их представления. В .NET все классы неявно наследуются от базового класса System.Object. В C# не разрешено множественное наследование классов (то есть класс не может наследовать от нескольких классов), однако множественное наследование интерфейсов разрешено. REST (Representational State Transfer) - это архитектурный стиль разработки программного обеспечения, который определяет набор ограничений и принципов для построения распределенных систем. RESTful веб-API обеспечивает взаимодействие между клиентом и сервером с использованием стандартных HTTP-методов, URL-адресов и представлений ресурсов. Exception (исключение) - это объект, который представляет ошибку или исключительную ситуацию, возникшую во время выполнения программы. Когда возникает исключение, выполнение текущего потока прерывается, и поиск исключения начинается в стеке вызовов, пока не будет найден обработчик исключения или программа завершится. Сборщик мусора (garbage collector) - это механизм в среде выполнения .NET, который автоматически управляет памятью, выделенной для объектов. Он отслеживает объекты, которые больше не используются в программе, и освобождает выделенную ими память, чтобы она могла быть использована для других целей. В C# известны следующие типы данных: Примитивные типы: целочисленные типы (int, long, byte и т. д.), типы с плавающей точкой (float, double), символьный тип (char), логический тип (bool). Строковый тип (string): представляет последовательность символов. Массивы (arrays): упорядоченные наборы элементов одного типа. Списки (List), множества (Set), словари (Dictionary) и другие коллекции: предоставляют удобные структуры данных для хранения и обработки групп элементов. Структуры (struct): пользовательские типы данных, которые могут содержать поля и методы, похожие на классы, но передаются по значению. Пользовательские классы (class): определенные пользователем типы данных, которые могут содержать поля, свойства и методы. Тип значения (value type) - это тип данных, который хранит свое значение непосредственно в памяти, независимо от ссылки на него. Значения типа значения хранятся в стеке памяти и копируются при присваивании или передачепараметра в методы. Тип ссылки (reference type) - это тип данных, значения которого хранятся в куче памяти, а переменная содержит ссылку на это значение. Переменная типа ссылки не содержит само значение, а лишь ссылку на него. При присваивании или передаче параметра в метод копируется только ссылка на значение, а не само значение. class и struct являются ключевыми словами в C# для определения пользовательских типов данных. ```class` используется для создания ссылочных типов. Экземпляры классов создаются в куче памяти, а переменные содержат ссылку на эти объекты. Классы поддерживают наследование, множественное вхождение в интерфейсы и динамическое связывание. ```struct` используется для создания значимых типов. Экземпляры структур создаются в стеке памяти или встроенном в другой объект, а переменные содержат само значение структуры. Структуры обычно имеют небольшой размер и передаются по значени. Объекты классов хранятся в куче памяти, в то время как значения структур хранятся в стеке памяти. Куча - это область памяти, в которой выделяются и освобождаются блоки памяти динамически во время выполнения программы. Стек - это область памяти, в которой хранятся временные данные, такие как локальные переменные и вызовы методов. Boxing и unboxing - это процессы преобразования значимых типов (типов значения) в ссылочные типы (типы ссылок) и обратно. Boxing - это процесс упаковки значения типа значения в объект типа System.Object или его производного типа. Например, когда значение типа int упаковывается в объект, оно становится ссылкой на объект, содержащего это значение. Unboxing - это процесс извлечения значения из упакованного объекта и преобразования его обратно в значение типа значения. Например, при unboxing объекта типа System.Object в значение int значение извлекается из объекта и приводится к соответствующему типу. Некоторые известные коллекции в C#: List: упорядоченная коллекция элементов с динамическим размером. Dictionary: коллекция пар "ключ-значение" с быстрым доступом к элементам по ключу. HashSet: коллекция уникальных элементов без повторений. Queue: коллекция элементов с доступом в порядке "первый пришел - первый вышел" (FIFO). Stack: коллекция элементов с доступом в порядке "последний пришел - первый вышел" (LIFO). LinkedList: двусвязный список элементов с эффективной вставкой и удалением элементов. ObservableCollection: коллекция, которая предоставляет уведомления об изменениях в своих элементах.
Отличия между абстрактным классом и интерфейсом: Абстрактный класс может содержать как реализацию методов, так и абстрактные методы, в то время как интерфейс может содержать только сигнатуры методов и свойств без их реализации. Класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов. Абстрактный класс может иметь поля и конструкторы, а интерфейс может содержать только сигнатуры методов и свойств. Абстрактный класс может предоставлять базовую реализацию методов, которую наследующие классы могут переопределить, в то время как интерфейс не предоставляет реализацию методов. Интерфейсы используются для определения контрактов, которые классы должны реализовывать. Они определяют сигнатуры методов, свойств и событий, но не предоставляют реализацию. Задачи, которые выполняют интерфейсы: Определение общих методов и свойств, которые должны быть реализованы классами, чтобы обеспечить единый интерфейс взаимодействия. Разделение поведения между несвязанными классами. Реализация множественного наследования через интерфейсы, поскольку класс может реализовывать несколько интерфейсов одновременно. Разница между структурой и классом: Структуры являются типами значений (value types), в то время как классы являются ссылочными типами (reference types). Структуры передаются по значению, а классы передаются по ссылке. Структуры обычно используются для представления простых значений, а классы - для более сложных объектов и функциональности. Структуры не могут наследоваться и не поддерживают наследование, а классы могут наследоваться и быть наследниками других классов. Примеры структур: Point: структура, представляющая точку с координатами X и Y. Rectangle: структура, представляющая прямоугольник с координатами верхнего левого и нижнего правого углов. DateTime: структура, представляющая дату и время. TimeSpan: структура, представляющая промежуток времени. Асинхронность (асинхронное программирование) в программировании относится к возможности выполнять задачи независимо от основного потока выполнения программы. Асинхронные операции позволяют продолжать выполнение других задач во время ожидания завершения операции ввода-вывода, долгих вычислений или запросов к базе данных. Асинхронность отличается от многопоточности следующим образом: В асинхронном программировании нет необходимости создавать и управлять явными потоками, что делает его более легким в использовании. В асинхронном программировании операции могут быть выполнены на одном потоке без блокировки, что позволяет более эффективно использовать ресурсы. Асинхронностьпозволяет создавать отзывчивые приложения, которые не блокируются во время выполнения длительных операций, таких как сетевые запросы или обращения к базе данных. В многопоточности операции выполняются параллельно на разных потоках, в то время как в асинхронности операции могут выполняться последовательно, но без блокировки основного потока выполнения. В SQL существуют следующие типы объединений (join): INNER JOIN: Возвращает только те строки, которые имеют совпадающие значения в обоих таблицах, участвующих в объединении. LEFT JOIN (или LEFT OUTER JOIN): Возвращает все строки из левой (первой) таблицы и соответствующие строки из правой (второй) таблицы. Если в правой таблице нет совпадающих значений, то для них будут возвращены NULL значения. RIGHT JOIN (или RIGHT OUTER JOIN): Возвращает все строки из правой (второй) таблицы и соответствующие строки из левой (первой) таблицы. Если в левой таблице нет совпадающих значений, то для них будут возвращены NULL значения. FULL JOIN (или FULL OUTER JOIN): Возвращает все строки из обеих таблиц и заполняет NULL значениями для неподходящих строк. CROSS JOIN: Производит декартово произведение двух таблиц, возвращая все возможные комбинации строк. Недостатки и отличия различных типов объединений (join) зависят от конкретной задачи и структуры данных: INNER JOIN: Возвращает только строки с совпадающими значениями в обеих таблицах. Если в таблицах отсутствуют совпадающие значения, соответствующие строки не будут возвращены. LEFT JOIN: Возвращает все строки из левой (первой) таблицы, независимо от наличия совпадающих значений в правой (второй) таблице. Если в правой таблице нет совпадающих значений, будут возвращены NULL значения. RIGHT JOIN: Аналогично LEFT JOIN, но возвращает все строки из правой (второй) таблицы, независимо от наличия совпадающих значений в левой (первой) таблице. Если в левой таблице нет совпадающих значений, будут возвращены NULL значения. FULL JOIN: Возвращает все строки из обеих таблиц, заполняя NULL значениями для неподходящих строк. Может создавать большие результаты и быть менее эффективным в использовании ресурсов. CROSS JOIN: Производит декартово произведение таблиц, возвращая все возможные комбинации строк. Результат может быть очень большим, особенно для больших таблиц. Unit-тесты используются для автоматизированной проверки отдельных частей кода (обычно отдельных методов) на корректность и соответствие ожиданиям. Они помогают обнаруживать ошибки и проблемы в коде на ранних стадиях разработки и обеспечивают уверенность в работоспособности тестируемых компонентов.
Преимущества использования unit-тестов: Обеспечивают автоматическую проверку корректности кода: Unit-тесты позволяют автоматически проверить, что отдельные части кода работают правильно и соответствуют ожиданиям разработчика. Обнаруживают ошибки и проблемы на ранней стадии разработки: Unit-тесты позволяют обнаружить ошибки и проблемы в коде на ранних этапах разработки, что помогает их быстро исправить и предотвращает их распространение в другие части системы. Улучшают качество кода и его структуру: При написании unit-тестов разработчику необходимо разбить код на более маленькие тестируемые части, что способствует улучшению архитектуры и структуры кода. Облегчают рефакторинг: Наличие хорошо написанных unit-тестов позволяет уверенно проводить рефакторинг кода, так как тесты помогают обнаружить возможные нарушения функциональности после внесения изменений. Повышают надежность и поддерживаемость кода: Unit-тесты служат документацией к коду и помогают быстро проверить, что изменения в коде не сломали уже существующую функциональность. Недостатки использования unit-тестов: Требуют времени и ресурсов: Написание и поддержка unit-тестов требует времени и усилий со стороны разработчика. Необходимо обеспечить покрытие тестами всех важных частей кода, что может быть трудоемкой задачей. Могут быть сложными для написания и поддержки: Некоторые части кода могут быть сложными для тестирования, особенно в случае с взаимодействием с внешними ресурсами или зависимостями. Иногда требуется использовать моки или заглушки, чтобы изолировать код от внешних зависимостей. Не гарантируют отсутствие ошибок: Наличие unit-тестов не гарантирует полное отсутствие ошибок в коде. Тесты могут не покрывать все возможные сценарии использования или не обнаружить некоторые сложные ошибки. Могут увеличить время разработки: Написание и поддержка unit-тестов требует дополнительного времени, что может увеличить время разработки проекта. Unit-тесты обычно состоят из трех логических блоков, известных как "AAA" (Arrange, Act, Assert): Arrange (Подготовка): В этом блоке происходит подготовка окружения для тестирования. Создаются необходимые объекты, настраиваются зависимости и устанавливаются начальные условия. Act (Действие): В этом блоке выполняется тестируемое действие или вызывается метод, который должен быть протестирован. Assert (Утверждение): В этом блоке проверяются результаты выполнения теста. Сравниваются ожидаемые значения с фактическими результатами, чтобы убедиться, что код работает правильно.
Не знаю, как там в Java, но в C# начинающие разработчики почти не пишут sql руками. "Стандартная" ORM для C# - Entity Framework Core, очень хорошо абстрагирует от sql и его диалекта для конкретной бд. Можно заджоинить 5 таблиц, особо не осознавая этого) Писать sql самому приходится только в специфических случаях, с которыми новички вряд ли сталкиваются. Это и хорошо и плохо одновременно. Поэтому, наверное, вопрос про то, что такое джоины и какие они бывают лучше, чем попросить написать sql самому, ибо человек просто растеряться может. С другой стороны, думаю, и то и другое встречается на реальных собесах
Во-во). Как я понимаю, в современном мире ведь чистым sql редко орудуют. В основном ведь все через orm идет. Конечно, полезно знать что там идет внутри, но что бы прям обязательно. Ну хз))
когда пишешь учебную прогу с 3 таблицами 10 записями и без order by без проблем, а потом приходишь на "галеру" где какой нибудь очет из БД генерируется из 10 таблиц с 100 000+ записей, с кучей order by. Удачи тебе с EF и производительностью. EF инструмент хороший, но нужно уметь в базовый SQL и понимать во что генерится твой Linq в EF.
@@dest8488 Ну значит вы не умеете пользоваться EF. Он отлично вам построит запрос и с ORDER BY, и с джоинами. Другой вопрос, что если программист не понимает, что там под капотом происходит и инклюднет все таблицы, заставив их заджоиниться целиком, то да, это гг. Но это уже вопрос об умении пользоваться EF, а не sql
@@DoctorKrolic он то построит, но будет ли этот запрос эффективен по времени выполнения? Учить EF не зная SQL, это как считать на калькулятора не зная правил арифметики, рано или поздно наступит момент когда ты поделишь на 0 и будишь долго тупить, а если еще и на проде... Может легче все таки было бы выделить на базовый SQL неделю.
@@dest8488 Ну, если составить нормальный EF-запрос, то он его нормально в Sql и перестроит. Парадокс ещё в том, что для того, чтобы понимать, что в запросе не так, нужно чуть больше уровень, чем базовый sql за неделю. В любом случае, это задача на чтение sql, а не на написание. А на собесе как раз будут долбать, мол "а напиши мне ..."
От Object Нет, но разрешена множественная реализация интерфейсов Rest - стиль, позволяющий проще обмениваться данными между небольшими приложениями для удобства масштабирования всей структуры. Exception - предоставляет возможность отследить непредвиденные ошибки, другие наследуемые от него Исключения более конкретизирует назначение их самих в той или иной ситуации. Garbage Collector работает автоматически и выгружает из памяти уже не нужную информацию. В некоторых ситуациях необходимо ручное указание в коде для его использования или нет. shortint, int, long, float, double, emun, string (класс), DateTime и прочие Тип значение - непосредственно само значение из простых сипов данных, тип Ссылка это уже классы по типу String, где информация хранится в виде ссылки на другую ячейку памяти со значением или набором значений. NullPointer или null Коллекции List, Dictionary, разные хэш-таблицы - одна из главных особенностей имеют встроенные методы для работы с ней на максимально оптимизированном уровне. Интерфейс не имеет реализации ни одного из методов внутри, абстрактный класс может имеет хотя-бы частичную реализацию методов. Интерфейсы нужны в качестве обязательств, которые обязательно должны быть в реализующем этот интерфейс классе. Данные классов передаются по ссылке, а структуры копируются. многопоточность - одна задача выполняется как разделенная на части на процессоре, асинхронность подразумевается выполнение на нескольких процессорах разных машин. Inner Join (от же обычный Join), left join, right join, cross join - в разной степени нужны для включения результатов из дополнительной таблицы связанной по данным, которые будут или нет выводить сами данные и в зависимости от их наличия будут или нет выдавать NULL в качестве отсутствующих значений. Unit тесты нужны для больших проектов, проще говоря, где требуется быстро проверить, не отвалилось ли чего в процессе последних изменений в коде. Занимают много времени на их написание, но упрощают исправление и улучшения кода в целом. Состоит из настройки каждого конкретного теста и использования в комплекте или по одиночке, какой третий логический пункт понятия не имею либо не понял вопроса. Сергей, если прочитаете, напишите, есть ли мне смысл искать работу или все плохо?)
По поводу join есть небольшой недочёт. Дело в том, что его функция именно в объедение двух и более таблиц. А дополнительная информация left, right и тд указывает на способ объединения. Если еще проще представить это что то типо диаграммы объединения диаграмм эйлера, в зависимости от контекста может быть разное объединение.
Ну как максимально короткие ответы на вопросы - ок, как ответы на интервью слишком мало, ну и есть ошибки В Шарпее разрешено множественное наследование интерфейсов и множественная реализация интерфейсов, а множественное наследование классов не разрешено В какой-то их последних версий дали возможность писать реализацию внутри интерфейсов, но с жуткими ограничениями Многопоточность - это одновременное выполнение нескольких задач на разных потоках(тредах) процессора(ов) (или одной задачи, разбитой на несколько разных) Thread, ThreadPool, BackgroundWorker, Parallel, PLINQ, Task. Aсинхронность - выполнение нескольких задач с быстрым переключением между ними Асинхронность может быть многопоточной(параллельной) Task, async/await . Пример, есть UI и какаянить CPU Bound задача - ну пусть будет подсчет факториала и еще IO Bound задача - запрос к БД. При многопоточной реализации, мы все три задачи вешаем на три разных потока и они выполняются параллельно на них. При асинхронной - мы запускаем все три задачи на одном потоке, и поток постоянно быстро переключается между задачами, так что и UI не тормозит и факториал наш считается и запрос к БД ожидается(если конечно вычислительных мощностей хватает), при асинхронной многопоточности, задачи прыгают между потоками, например UI может всегда висеть на одном потоке, потом мы сделали IO Bound задачу (запрос к БД) тогда из тредпула выделяется еще поток, который обращается к бд и ждет ответа, пусть ответ придет через 30 секунд. Тут мы еще запускаем подсчет нашего факториала(CPU Bound). Т.к. ожидание ответа IO Bound и не требует вычислительных мощностей, то поток переключается на задачу вычисления факториала и считает его 40 секунд, за это время БД прислало ответ на запрос, и тогда выделяется третий поток и он уже принимает ответ от БД. Тем самым у нас при обычное многопоточности было 3 разных потока, каждый занимался своим делом, какие-то полезным CPU Bound: UI и факториал, а другой простаивал в спинвеит 30 секунд в IO Bound задаче, ожидая ответа от БД, а при асинхронном многопоточном сценарии у нас поток не блокировался на IO Bound задаче, а пошел выполнять CPU Bound задачу, а при получении ответа от БД, эту задачу подхватил другой поток. Все это тоже достаточно упрощено, вообще многопоточность - это огромная тема и TAP (Task Async* Pattern) сильно упростило вкатывание в неё. По тестам - состоят из трех логических блоков паттерна AAA (не посню как он расшифровывается, помню вторая A - act): этап подготовки- объявление переменных, создания классов и т.п. Этап самого тестирования (Действие) - этап где мы запускаем тестируемый код. И, наконец, третий этап - Этап проверки (Asset) где мы проверяем получили ли мы тот результат, который ждали
Про асинхронность дичь какую-то написал. Асинхронность, это когда ты отправил, например, запрос к сетевому апи, пошел дальше что-то делать, а потом вернулся и проверил ответ. В основе обычно лежит простой цикл перебора. Это гораздо дешевле, чем создавать поток и позволяет одновременно выполнять гораздо больше задач, если их большая часть времени выполнения - просто ожидание ответа.
Интерфейс - это контракт, который класс должен исполнять, например опредленный набор методов с заданной сигнатурой. Абстрактный класс - базовый класс, экземпляр которого нельзя создать; может не имееть реализации части методов/свойств. Какого-то прямого отношения к реализации это в общем то не имеет
А какие курсы по C# вы бы порекомендовали для начинающих? я сам пару лет назад закончил универ, но не мог устроиться на работу, поэтому пошел на курсы Skypro и получил классный оффер в финтех компанию))
по поводу join. по моему опыту не надо писать сложные запросы в коде, нужно создавать или stored procedure или views и работать уже с ними со стороны бэка. и да, я как сениор сходу не смог ответить на все вопросы))
я бы предложил тогда не разбивать логику на содержащуюся непосредственно в основной приложухе и на хранимки в субд, а перенести код хранимых процедур и вьюх в ресурсы приложения это упростит контроль версий + код будет в одном месте на текущем проекте частенько возникают сложности из-за того, что бизнес-логика вот так вот разбита на две части, намучился разбираться в хитросплетениях)
Почти всё это есть в книге шилдта под C#, можете прочитать, она даже на русском языке есть, большая часть правда из этого может вам особо никогда и не понадобится, но ради интереса почитать можно. (:
давно не был на собеседование, но что-то вопросы странные. Это скорей вопросы на экзамен, чем на собеседование. Достаточно знание общих принципов, всё остальное можно подтянуть по мере надобности. Разработка сегодня стала слишком объемной и всё в голове не удержишь, хотя конечно если писать только в одном языке и больше ничем не заниматься, то наверное стоит знать как можно больше об этом языке. А в C# еще много всего интересного. Сколько лет в нем пишу и все равно иногда открываю что-то новое
@@mitsuro3815 скорей Full Stack Web Developer, делаю всё что придется. Просто C# это то, с чем я работал больше всего, ну и в принципе этой мой любимый язык) Но обычно это только часть проекта и делать приходиться много чего другого, поэтому изучать полностью что-то одно, нет смысла и времени. Достаточно разобраться в том, что требуется для выполнения задачи.
Дадада, я вроде не так уж мало пишу, но каково же было удивление, когда я узнал что можно функцию в методе создавать... А вроде штука базовая должна быть.
Ну эти вопросы как-то вообще не похожи на экзаминационные) Я бы сказал такие, базовые понимания о возможностях языка. Прогать на этом языке и не знать этих вещей -- ну, довольно странно
Вопрос про sql странный, аля: "Вы точно разработчик C#, если не знаете JOIN", ну как бэ, я могу быть разработчиком мобильных приложений на Unity, там используется C#, но не используется sql, wtf dude
Не понимаю, зачем C# разработчику знать типы джоинов, если Entity Framework уже за него делает эти самые джоины. Если знаете, скажите, с какой целью вообще писать голый SQL запрос в коде, а не использовать уже придуманные инструменты?
Единственное, чего я не знаю - это REST и вопросы по тестированию. Слегка неуверен в работе с базами данных. То есть, на словах - я осознаю в чём разница между разными видами JION'ов, но на практике - я какие запросы не писал, разницу видел лишь между INNER и OUTER. Между LEFT и RIGHT - какую тестовую базу данных не строил(вероятно это я просто не умею их проектировать), а запросы всегда были одинаковыми по возвращаемому содержанию! Разве что имели разный порядок строк, тогда как я ожидал увидеть нечто иного содержания.
супер! сейчас, благодаря видео начал путь в изучение Java, но в универе писали на c++, но видосик по c# я сохраню! так как хочу в будущем понимать хотя бы базово java, с#, и с++
Сергей: задаёт исключительно вопросы по шарпу + 1 вопрос по юнит-тестам и БД Тем временем моё же первое собеседование: Что такое SOAP, чем отличает SOA от микросервисной архитектуры, как лучше организовать взаимодействие микросервисов, чтобы запрос быстрее всего обрабатывался
Досмотрел до 1.50. не смог удержаться чтобы не написать - бегите как от огня от тех всех кто абстракцию называет мало того что именно принципом ООП, а одним из основных принципов ООП! Особенно бегите оттуда когда интервьювер на техническом собеседовании утверждает, что основных принципов ООП 4, и четвертый это абстракция. Запомните. Как было три основных принципа ООП, так и будет всегда. И по меньше читайте индусов)
Привет, у меня такой вопрос, коммерческого опыта нет, знаю C, Python, люблю Computer Science. Хочу в backend, выбираю между Java, C#, Golang что посоветуешь, и почему? интересно твое мнение.
Ну хз. У меня ничего из этого на последнем собеседование не спрашивали. Вопросы больше были по технологиям типо Entity framework или Dependecy injection. Сейчас ведь недостаточно знать только язык, нужны фрэймворки.
Я не использую Join в запросах SQL, так как большие запросы увеличивают время работы приложения. Я даже не помню left/right для чего. У меня в голове только аналогия с кругами эйлера на пересечение множеств. А если мне надо, то вместо dapper предпочитаю entity framework. Struct не использую вообще, только классы. Интерфейсы отдельная история. ООП штука полезная, но не все используется в коммерческой разработке, а если и используется, то только при написании гигачад апишки, чтобы по канону со всей лапшой. Грабейдж коллектор(забыл как пишется, сорры) знание позелное, но бесполезное. В c# он автоматически отрабатывает и чистит память. Единственное, что мб нужно знать, это возможность отключить коллектор в течении одной сессии, чтобы ускорить приложение, но не факт, что у вас не случится out of memory. Boxing/unboxing вообще не про изменение одного поля и впоследствие другого. Он нужен для создания ссылки на значимый тип(поправьте, если не прав). Хотя мб диктор прав и я не до конца понял message. И это не юзается зачастую, так как мы отошли от ArrayList к простому List. Да и если такое происходит, то структуру новичок даже не повторит без учебника. Я сам только один пример с Object помню. Крч видос в целом информативный, но не все из этого надо при реальном программировании. Я как бы сам джун с 1,5 опытом работы и уже что-то начал понимать. Обратите внимание при подготовке к собесамна LINQ. Он гораздо более важный, чем коллектор, так как его вас заставят писать вместо if'ов и for'ов.по Rest почитайти про методы hhtp и какой где используется. Их там немного, а используется еще меньше. Главное фишечки выучить. Их там дай бог 2. Если что придумаю, то допишу еще
Про JOIN-ы и работу с базой в C# ... знать надо 100% Но Вы, Сергей, в Java вообще ORM используете?)) Некоторые фигачат простые CRUD сервисы даже не зная как Entity Framework запрос транслирует и во что)) И прекрасно живут... и получают свои ЗПшки на галлерах))
блин, меня по фронтовым вопросам как джуна помню так е..ли на собесах. ts js react вопросов по 15-20 плюс задача и практика. на бэке чё реально такие вопросики?
з того що не прозвучало, були питання: SOLID, різниця stack-heap, паттерни, ну і ще всяке так з наскоку не згадаю. Але багато народу просто беруть і задають питання з ваших відосів типу "що знати джуну" і кривляться коли називаю паттерн сінглтон і повторюють Ваші слова майже дослівно)) тож піду погуглю трохи бо вже позабував дещо.
Мой тебе совет - не стоит обманываться умными словами, которые раскидывает этот мужчина. Любому программисту сразу понятно, что он про реальную разработку и реальный код ничего полезного для джунов не говорит, только какие-то общие абстракции. Собственно поэтому чему-то полезному научить людей он не способен, у него деятельность информатора, а не учителя.
Выше чего? Раша вторглась в его страну и убивает людей. С чего бы он должен бы хотеть обучать студентов оттуда? Да и деньги из рф никак не перевести кроме как криптой, с которой нормальные люди дел иметь не желают.
Давно подписан на этот канал. Интересно. Серёж, а не мог бы ты сделать обзор от программиста принципов тестирования. Их семь. Они описывают ошибки в разработке, но как-то не очень по-разработчески. Какие-то идеи мне ясны, какие-то рассказчики не могут толком объяснить "а чё так?" В общем, рассказывают как QA2QA, а хочется лучше понять, что происходит. С уважением, QAE
1. Принципы ООП Наследование - у нас есть базовый класс (например юзер) и от него наследуются ещё два класс,, например админ и модератор. Они имеют такие же свойства как юзер, но в отличии от него, могут иметь свои поля/методы Инкапсуляция - инструмент защиты класса от маслят Полиморфизм - создание одноименных методов см разным функционалом Абстракция - почти тот же класс, но уже не с полным функционалом. 2. Object 3. Нет 4. Rest
Сборщик имеет 3 поколения, у третьего есть ещё loh и poh Используется он сам и удаляет из памяти то, уже не будет использоваться. Запускается он раз в тик или когда уже нет памяти
Как то легко... Я что зря асп нет и ангуляр учил, со всякими библиотеками по типу SignalR... Короче надо будет реально работу начать искать, обнадеживающие видео.
Здравствуйте, Сергей я попробовал пройти по вашей ссылке на обучение C# у меня отобразилось окно о запрете владельцем . Подскажите вы не обучаете пользователь с РФ или это ютб запрет выдаёт? Заранее спасибо за ответ .
Каким образом они будут обучать студентов из РФ, если они не смогут за обучение заплатить? Банки РФ изолированы от всего мира, ты никому не сможешь перевести денег, кроме как Беларуси через МИР и то не везде.
С ооп скользкая тема. Можно ударится в софистику вспомнить про посылку сообщений и подвести к тому, что все популярные языки (C++ java) не ооп, так как они вызывают методы и используют переменные другого класса напрямую.
как по мне, лишнего снобизма много: "точно ли человек разработчик, елси он не пишет joinы в sql запросах". вообще в C# технология Linq родная для языка, с двумя типами синтаксиса, т.е. человек может просто не помнить синтаксис стандартного SQL.. Хотя Linq может уже уровень мидла или сеньора? .. да и в целом вопросы по алгоритмам должны быть и они важнее для понимания - джун, понимающий работу алгоритмов на графах в 10^6 раз ценнее знающего синтаксис SQL
Вопрос немного не по теме, но думаю здесь есть люди, которые разбираются: почему в игровых движках в основном используют С++, а на Юнити С#? Это из-за открытого исходного кода или есть ещё какие-то причины?
Потому что у производителей движков есть свобода выбора) Если бы я был разработчиком игр, я бы вообще выбрал CryEngine. Там скрипты на Lua и искусственный интеллект , а не только С++, P.S. Последняя версия CryEngine V поддерживает скрипты на С# )
Всё, что делает ЗАГС - включает режим общего имущества. Чтобы потом женщина могла забрать у мужчины половину (или больше) имущества, на которое мужчина заработал. Всё, больше ничего ЗАГС не делает. Невозможно подать на развод (и на отъём имущества), если сначала не был оформлен брак. Для семьи и рождения детей никакой ЗАГС не нужен. Семья - это мужчина, женщина и их общие (родные) дети, которых они родили по обоюдному добровольному согласию и с целью, чтобы их дети были счастливы и получали удовольствие от жизни. Для этого никакой регистрации мужа/жены в ЗАГСе не требуется. 1) Нужно быть дураком, чтобы идти в ЗАГС. 2) Если женщина настаивает на ЗАГСе - бегите от неё. 3) Никакие брачные договоры в этой стране не работают. Просто не создавай сам себе проблему, а не придумывай, как бы её потом решить. Мужчине ЗАГС не нужен. НИ НОГОЙ В ПРОКЛЯТЫЙ ЗАГС.
1. Изучить основные принципы ООП ( с помощью метонита )
2. От какого класса неявно наследуются все классы в .Net
3. Разрешено ли множественное наследование в c#?
4. Как вы понимаете REST?
5. Что такое exception?
6. Что такое garbage collector на базовом уровне?
7. Какие типы данных вы знаете ?/ коллекции / структуры данных
8. Что такое тип значения, а что такое тип ссылки
9. Что из этого class, а что struct
10. В каком участке памяти они хранятся?
11. Что такое boxing и unboxing?
12. какие знаете коллекции ?
13. Чем отличается абстрактный класс от интерфейса ?
14. Зачем нужны интерфейсы и какие задачи они выполняют ?
15. Разница между структурой и классом
16. Привести примеры структур
17. Изучить асинхронность
18. Что такое асинхронность и чем она отличается от многопоточности?
19. Какие типы join существуют в sql?
20. Недостатки, отличая joinов и в каких случаях что используется
21. Зачем нужны unit тесты?
22. Какие преимущества и недостатки использования unit тестов?
23. Из каких трех логических блоков состоит unit тест ?
Основные принципы ООП (объектно-ориентированного программирования) включают:
Инкапсуляция: скрытие внутренних данных и методов объекта от прямого доступа, обеспечение доступа к ним через публичные интерфейсы.
Наследование: возможность создания новых классов на основе существующих, наследование их свойств и методов.
Полиморфизм: использование одного интерфейса для представления различных типов объектов, позволяет использовать объекты разных классов через общий интерфейс.
Абстракция: выделение общих характеристик объектов и создание абстрактных классов или интерфейсов для их представления.
В .NET все классы неявно наследуются от базового класса System.Object.
В C# не разрешено множественное наследование классов (то есть класс не может наследовать от нескольких классов), однако множественное наследование интерфейсов разрешено.
REST (Representational State Transfer) - это архитектурный стиль разработки программного обеспечения, который определяет набор ограничений и принципов для построения распределенных систем. RESTful веб-API обеспечивает взаимодействие между клиентом и сервером с использованием стандартных HTTP-методов, URL-адресов и представлений ресурсов.
Exception (исключение) - это объект, который представляет ошибку или исключительную ситуацию, возникшую во время выполнения программы. Когда возникает исключение, выполнение текущего потока прерывается, и поиск исключения начинается в стеке вызовов, пока не будет найден обработчик исключения или программа завершится.
Сборщик мусора (garbage collector) - это механизм в среде выполнения .NET, который автоматически управляет памятью, выделенной для объектов. Он отслеживает объекты, которые больше не используются в программе, и освобождает выделенную ими память, чтобы она могла быть использована для других целей.
В C# известны следующие типы данных:
Примитивные типы: целочисленные типы (int, long, byte и т. д.), типы с плавающей точкой (float, double), символьный тип (char), логический тип (bool).
Строковый тип (string): представляет последовательность символов.
Массивы (arrays): упорядоченные наборы элементов одного типа.
Списки (List), множества (Set), словари (Dictionary) и другие коллекции: предоставляют удобные структуры данных для хранения и обработки групп элементов.
Структуры (struct): пользовательские типы данных, которые могут содержать поля и методы, похожие на классы, но передаются по значению.
Пользовательские классы (class): определенные пользователем типы данных, которые могут содержать поля, свойства и методы.
Тип значения (value type) - это тип данных, который хранит свое значение непосредственно в памяти, независимо от ссылки на него. Значения типа значения хранятся в стеке памяти и копируются при присваивании или передачепараметра в методы.
Тип ссылки (reference type) - это тип данных, значения которого хранятся в куче памяти, а переменная содержит ссылку на это значение. Переменная типа ссылки не содержит само значение, а лишь ссылку на него. При присваивании или передаче параметра в метод копируется только ссылка на значение, а не само значение.
class и struct являются ключевыми словами в C# для определения пользовательских типов данных.
```class` используется для создания ссылочных типов. Экземпляры классов создаются в куче памяти, а переменные содержат ссылку на эти объекты. Классы поддерживают наследование, множественное вхождение в интерфейсы и динамическое связывание.
```struct` используется для создания значимых типов. Экземпляры структур создаются в стеке памяти или встроенном в другой объект, а переменные содержат само значение структуры. Структуры обычно имеют небольшой размер и передаются по значени.
Объекты классов хранятся в куче памяти, в то время как значения структур хранятся в стеке памяти. Куча - это область памяти, в которой выделяются и освобождаются блоки памяти динамически во время выполнения программы. Стек - это область памяти, в которой хранятся временные данные, такие как локальные переменные и вызовы методов.
Boxing и unboxing - это процессы преобразования значимых типов (типов значения) в ссылочные типы (типы ссылок) и обратно.
Boxing - это процесс упаковки значения типа значения в объект типа System.Object или его производного типа. Например, когда значение типа int упаковывается в объект, оно становится ссылкой на объект, содержащего это значение.
Unboxing - это процесс извлечения значения из упакованного объекта и преобразования его обратно в значение типа значения. Например, при unboxing объекта типа System.Object в значение int значение извлекается из объекта и приводится к соответствующему типу.
Некоторые известные коллекции в C#:
List: упорядоченная коллекция элементов с динамическим размером.
Dictionary: коллекция пар "ключ-значение" с быстрым доступом к элементам по ключу.
HashSet: коллекция уникальных элементов без повторений.
Queue: коллекция элементов с доступом в порядке "первый пришел - первый вышел" (FIFO).
Stack: коллекция элементов с доступом в порядке "последний пришел - первый вышел" (LIFO).
LinkedList: двусвязный список элементов с эффективной вставкой и удалением элементов.
ObservableCollection: коллекция, которая предоставляет уведомления об изменениях в своих элементах.
Отличия между абстрактным классом и интерфейсом:
Абстрактный класс может содержать как реализацию методов, так и абстрактные методы, в то время как интерфейс может содержать только сигнатуры методов и свойств без их реализации.
Класс может наследовать только один абстрактный класс, но реализовывать несколько интерфейсов.
Абстрактный класс может иметь поля и конструкторы, а интерфейс может содержать только сигнатуры методов и свойств.
Абстрактный класс может предоставлять базовую реализацию методов, которую наследующие классы могут переопределить, в то время как интерфейс не предоставляет реализацию методов.
Интерфейсы используются для определения контрактов, которые классы должны реализовывать. Они определяют сигнатуры методов, свойств и событий, но не предоставляют реализацию. Задачи, которые выполняют интерфейсы:
Определение общих методов и свойств, которые должны быть реализованы классами, чтобы обеспечить единый интерфейс взаимодействия.
Разделение поведения между несвязанными классами.
Реализация множественного наследования через интерфейсы, поскольку класс может реализовывать несколько интерфейсов одновременно.
Разница между структурой и классом:
Структуры являются типами значений (value types), в то время как классы являются ссылочными типами (reference types).
Структуры передаются по значению, а классы передаются по ссылке.
Структуры обычно используются для представления простых значений, а классы - для более сложных объектов и функциональности.
Структуры не могут наследоваться и не поддерживают наследование, а классы могут наследоваться и быть наследниками других классов.
Примеры структур:
Point: структура, представляющая точку с координатами X и Y.
Rectangle: структура, представляющая прямоугольник с координатами верхнего левого и нижнего правого углов.
DateTime: структура, представляющая дату и время.
TimeSpan: структура, представляющая промежуток времени.
Асинхронность (асинхронное программирование) в программировании относится к возможности выполнять задачи независимо от основного потока выполнения программы. Асинхронные операции позволяют продолжать выполнение других задач во время ожидания завершения операции ввода-вывода, долгих вычислений или запросов к базе данных.
Асинхронность отличается от многопоточности следующим образом:
В асинхронном программировании нет необходимости создавать и управлять явными потоками, что делает его более легким в использовании.
В асинхронном программировании операции могут быть выполнены на одном потоке без блокировки, что позволяет более эффективно использовать ресурсы.
Асинхронностьпозволяет создавать отзывчивые приложения, которые не блокируются во время выполнения длительных операций, таких как сетевые запросы или обращения к базе данных.
В многопоточности операции выполняются параллельно на разных потоках, в то время как в асинхронности операции могут выполняться последовательно, но без блокировки основного потока выполнения.
В SQL существуют следующие типы объединений (join):
INNER JOIN: Возвращает только те строки, которые имеют совпадающие значения в обоих таблицах, участвующих в объединении.
LEFT JOIN (или LEFT OUTER JOIN): Возвращает все строки из левой (первой) таблицы и соответствующие строки из правой (второй) таблицы. Если в правой таблице нет совпадающих значений, то для них будут возвращены NULL значения.
RIGHT JOIN (или RIGHT OUTER JOIN): Возвращает все строки из правой (второй) таблицы и соответствующие строки из левой (первой) таблицы. Если в левой таблице нет совпадающих значений, то для них будут возвращены NULL значения.
FULL JOIN (или FULL OUTER JOIN): Возвращает все строки из обеих таблиц и заполняет NULL значениями для неподходящих строк.
CROSS JOIN: Производит декартово произведение двух таблиц, возвращая все возможные комбинации строк.
Недостатки и отличия различных типов объединений (join) зависят от конкретной задачи и структуры данных:
INNER JOIN: Возвращает только строки с совпадающими значениями в обеих таблицах. Если в таблицах отсутствуют совпадающие значения, соответствующие строки не будут возвращены.
LEFT JOIN: Возвращает все строки из левой (первой) таблицы, независимо от наличия совпадающих значений в правой (второй) таблице. Если в правой таблице нет совпадающих значений, будут возвращены NULL значения.
RIGHT JOIN: Аналогично LEFT JOIN, но возвращает все строки из правой (второй) таблицы, независимо от наличия совпадающих значений в левой (первой) таблице. Если в левой таблице нет совпадающих значений, будут возвращены NULL значения.
FULL JOIN: Возвращает все строки из обеих таблиц, заполняя NULL значениями для неподходящих строк. Может создавать большие результаты и быть менее эффективным в использовании ресурсов.
CROSS JOIN: Производит декартово произведение таблиц, возвращая все возможные комбинации строк. Результат может быть очень большим, особенно для больших таблиц.
Unit-тесты используются для автоматизированной проверки отдельных частей кода (обычно отдельных методов) на корректность и соответствие ожиданиям. Они помогают обнаруживать ошибки и проблемы в коде на ранних стадиях разработки и обеспечивают уверенность в работоспособности тестируемых компонентов.
Преимущества использования unit-тестов:
Обеспечивают автоматическую проверку корректности кода: Unit-тесты позволяют автоматически проверить, что отдельные части кода работают правильно и соответствуют ожиданиям разработчика.
Обнаруживают ошибки и проблемы на ранней стадии разработки: Unit-тесты позволяют обнаружить ошибки и проблемы в коде на ранних этапах разработки, что помогает их быстро исправить и предотвращает их распространение в другие части системы.
Улучшают качество кода и его структуру: При написании unit-тестов разработчику необходимо разбить код на более маленькие тестируемые части, что способствует улучшению архитектуры и структуры кода.
Облегчают рефакторинг: Наличие хорошо написанных unit-тестов позволяет уверенно проводить рефакторинг кода, так как тесты помогают обнаружить возможные нарушения функциональности после внесения изменений.
Повышают надежность и поддерживаемость кода: Unit-тесты служат документацией к коду и помогают быстро проверить, что изменения в коде не сломали уже существующую функциональность.
Недостатки использования unit-тестов:
Требуют времени и ресурсов: Написание и поддержка unit-тестов требует времени и усилий со стороны разработчика. Необходимо обеспечить покрытие тестами всех важных частей кода, что может быть трудоемкой задачей.
Могут быть сложными для написания и поддержки: Некоторые части кода могут быть сложными для тестирования, особенно в случае с взаимодействием с внешними ресурсами или зависимостями. Иногда требуется использовать моки или заглушки, чтобы изолировать код от внешних зависимостей.
Не гарантируют отсутствие ошибок: Наличие unit-тестов не гарантирует полное отсутствие ошибок в коде. Тесты могут не покрывать все возможные сценарии использования или не обнаружить некоторые сложные ошибки.
Могут увеличить время разработки: Написание и поддержка unit-тестов требует дополнительного времени, что может увеличить время разработки проекта.
Unit-тесты обычно состоят из трех логических блоков, известных как "AAA" (Arrange, Act, Assert):
Arrange (Подготовка): В этом блоке происходит подготовка окружения для тестирования. Создаются необходимые объекты, настраиваются зависимости и устанавливаются начальные условия.
Act (Действие): В этом блоке выполняется тестируемое действие или вызывается метод, который должен быть протестирован.
Assert (Утверждение): В этом блоке проверяются результаты выполнения теста. Сравниваются ожидаемые значения с фактическими результатами, чтобы убедиться, что код работает правильно.
Привет всё есть строка string str = "Hello";
Как мне вывести еë вот так
H
He
Hel
Hell
Hello
@@МаксимКузмин-у9бСамое простое через for (int i до длины строки) writeline(str.substring(0,i)
Не знаю, как там в Java, но в C# начинающие разработчики почти не пишут sql руками. "Стандартная" ORM для C# - Entity Framework Core, очень хорошо абстрагирует от sql и его диалекта для конкретной бд. Можно заджоинить 5 таблиц, особо не осознавая этого) Писать sql самому приходится только в специфических случаях, с которыми новички вряд ли сталкиваются. Это и хорошо и плохо одновременно. Поэтому, наверное, вопрос про то, что такое джоины и какие они бывают лучше, чем попросить написать sql самому, ибо человек просто растеряться может. С другой стороны, думаю, и то и другое встречается на реальных собесах
Во-во). Как я понимаю, в современном мире ведь чистым sql редко орудуют. В основном ведь все через orm идет. Конечно, полезно знать что там идет внутри, но что бы прям обязательно. Ну хз))
когда пишешь учебную прогу с 3 таблицами 10 записями и без order by без проблем, а потом приходишь на "галеру" где какой нибудь очет из БД генерируется из 10 таблиц с 100 000+ записей, с кучей order by. Удачи тебе с EF и производительностью.
EF инструмент хороший, но нужно уметь в базовый SQL и понимать во что генерится твой Linq в EF.
@@dest8488 Ну значит вы не умеете пользоваться EF. Он отлично вам построит запрос и с ORDER BY, и с джоинами. Другой вопрос, что если программист не понимает, что там под капотом происходит и инклюднет все таблицы, заставив их заджоиниться целиком, то да, это гг. Но это уже вопрос об умении пользоваться EF, а не sql
@@DoctorKrolic он то построит, но будет ли этот запрос эффективен по времени выполнения?
Учить EF не зная SQL, это как считать на калькулятора не зная правил арифметики, рано или поздно наступит момент когда ты поделишь на 0 и будишь долго тупить, а если еще и на проде...
Может легче все таки было бы выделить на базовый SQL неделю.
@@dest8488 Ну, если составить нормальный EF-запрос, то он его нормально в Sql и перестроит. Парадокс ещё в том, что для того, чтобы понимать, что в запросе не так, нужно чуть больше уровень, чем базовый sql за неделю. В любом случае, это задача на чтение sql, а не на написание. А на собесе как раз будут долбать, мол "а напиши мне ..."
От Object
Нет, но разрешена множественная реализация интерфейсов
Rest - стиль, позволяющий проще обмениваться данными между небольшими приложениями для удобства масштабирования всей структуры.
Exception - предоставляет возможность отследить непредвиденные ошибки, другие наследуемые от него Исключения более конкретизирует назначение их самих в той или иной ситуации.
Garbage Collector работает автоматически и выгружает из памяти уже не нужную информацию. В некоторых ситуациях необходимо ручное указание в коде для его использования или нет.
shortint, int, long, float, double, emun, string (класс), DateTime и прочие
Тип значение - непосредственно само значение из простых сипов данных, тип Ссылка это уже классы по типу String, где информация хранится в виде ссылки на другую ячейку памяти со значением или набором значений.
NullPointer или null
Коллекции List, Dictionary, разные хэш-таблицы - одна из главных особенностей имеют встроенные методы для работы с ней на максимально оптимизированном уровне.
Интерфейс не имеет реализации ни одного из методов внутри, абстрактный класс может имеет хотя-бы частичную реализацию методов.
Интерфейсы нужны в качестве обязательств, которые обязательно должны быть в реализующем этот интерфейс классе.
Данные классов передаются по ссылке, а структуры копируются.
многопоточность - одна задача выполняется как разделенная на части на процессоре, асинхронность подразумевается выполнение на нескольких процессорах разных машин.
Inner Join (от же обычный Join), left join, right join, cross join - в разной степени нужны для включения результатов из дополнительной таблицы связанной по данным, которые будут или нет выводить сами данные и в зависимости от их наличия будут или нет выдавать NULL в качестве отсутствующих значений.
Unit тесты нужны для больших проектов, проще говоря, где требуется быстро проверить, не отвалилось ли чего в процессе последних изменений в коде. Занимают много времени на их написание, но упрощают исправление и улучшения кода в целом. Состоит из настройки каждого конкретного теста и использования в комплекте или по одиночке, какой третий логический пункт понятия не имею либо не понял вопроса.
Сергей, если прочитаете, напишите, есть ли мне смысл искать работу или все плохо?)
в c# 8.0 может же быть реализация в интерфейсе?
По поводу join есть небольшой недочёт. Дело в том, что его функция именно в объедение двух и более таблиц. А дополнительная информация left, right и тд указывает на способ объединения. Если еще проще представить это что то типо диаграммы объединения диаграмм эйлера, в зависимости от контекста может быть разное объединение.
Ну как максимально короткие ответы на вопросы - ок, как ответы на интервью слишком мало, ну и есть ошибки
В Шарпее разрешено множественное наследование интерфейсов и множественная реализация интерфейсов, а множественное наследование классов не разрешено
В какой-то их последних версий дали возможность писать реализацию внутри интерфейсов, но с жуткими ограничениями
Многопоточность - это одновременное выполнение нескольких задач на разных потоках(тредах) процессора(ов) (или одной задачи, разбитой на несколько разных) Thread, ThreadPool, BackgroundWorker, Parallel, PLINQ, Task. Aсинхронность - выполнение нескольких задач с быстрым переключением между ними Асинхронность может быть многопоточной(параллельной) Task, async/await . Пример, есть UI и какаянить CPU Bound задача - ну пусть будет подсчет факториала и еще IO Bound задача - запрос к БД.
При многопоточной реализации, мы все три задачи вешаем на три разных потока и они выполняются параллельно на них. При асинхронной - мы запускаем все три задачи на одном потоке, и поток постоянно быстро переключается между задачами, так что и UI не тормозит и факториал наш считается и запрос к БД ожидается(если конечно вычислительных мощностей хватает), при асинхронной многопоточности, задачи прыгают между потоками, например UI может всегда висеть на одном потоке, потом мы сделали IO Bound задачу (запрос к БД) тогда из тредпула выделяется еще поток, который обращается к бд и ждет ответа, пусть ответ придет через 30 секунд. Тут мы еще запускаем подсчет нашего факториала(CPU Bound). Т.к. ожидание ответа IO Bound и не требует вычислительных мощностей, то поток переключается на задачу вычисления факториала и считает его 40 секунд, за это время БД прислало ответ на запрос, и тогда выделяется третий поток и он уже принимает ответ от БД. Тем самым у нас при обычное многопоточности было 3 разных потока, каждый занимался своим делом, какие-то полезным CPU Bound: UI и факториал, а другой простаивал в спинвеит 30 секунд в IO Bound задаче, ожидая ответа от БД, а при асинхронном многопоточном сценарии у нас поток не блокировался на IO Bound задаче, а пошел выполнять CPU Bound задачу, а при получении ответа от БД, эту задачу подхватил другой поток. Все это тоже достаточно упрощено, вообще многопоточность - это огромная тема и TAP (Task Async* Pattern) сильно упростило вкатывание в неё.
По тестам - состоят из трех логических блоков паттерна AAA (не посню как он расшифровывается, помню вторая A - act): этап подготовки- объявление переменных, создания классов и т.п. Этап самого тестирования (Действие) - этап где мы запускаем тестируемый код. И, наконец, третий этап - Этап проверки (Asset) где мы проверяем получили ли мы тот результат, который ждали
Про асинхронность дичь какую-то написал. Асинхронность, это когда ты отправил, например, запрос к сетевому апи, пошел дальше что-то делать, а потом вернулся и проверил ответ.
В основе обычно лежит простой цикл перебора. Это гораздо дешевле, чем создавать поток и позволяет одновременно выполнять гораздо больше задач, если их большая часть времени выполнения - просто ожидание ответа.
Интерфейс - это контракт, который класс должен исполнять, например опредленный набор методов с заданной сигнатурой. Абстрактный класс - базовый класс, экземпляр которого нельзя создать; может не имееть реализации части методов/свойств.
Какого-то прямого отношения к реализации это в общем то не имеет
А какие курсы по C# вы бы порекомендовали для начинающих? я сам пару лет назад закончил универ, но не мог устроиться на работу, поэтому пошел на курсы Skypro и получил классный оффер в финтех компанию))
Бот
Че
по поводу join. по моему опыту не надо писать сложные запросы в коде, нужно создавать или stored procedure или views и работать уже с ними со стороны бэка. и да, я как сениор сходу не смог ответить на все вопросы))
Весело. И как тогда нам любителям вкатывать в IT. :)
@@АндрейВарин-р4г А вот это уже, не их проблема...
@@cliobro3890 это понятно. :)
@@АндрейВарин-р4г да не не парься. это как зуюрежка экзамена сдал и забыл.
я бы предложил тогда не разбивать логику на содержащуюся непосредственно в основной приложухе и на хранимки в субд, а перенести код хранимых процедур и вьюх в ресурсы приложения
это упростит контроль версий + код будет в одном месте
на текущем проекте частенько возникают сложности из-за того, что бизнес-логика вот так вот разбита на две части, намучился разбираться в хитросплетениях)
Entity framework, вот как мы с базами работаем)))
Теперь мы просим точно такое же видео для nodejs и фронтэнда ,не ну а че,мы же джаваскриптизеры тоже видлсика отдельного заслуживаем (двух) :)
Привет, спасибо за видео. Сделай пожалуйста так-же по С++
Благодарю Вас, Сергей, за Ваши видео! Очень полезно, содержательно и мотивирующе.
Почти всё это есть в книге шилдта под C#, можете прочитать, она даже на русском языке есть, большая часть правда из этого может вам особо никогда и не понадобится, но ради интереса почитать можно. (:
давно не был на собеседование, но что-то вопросы странные. Это скорей вопросы на экзамен, чем на собеседование. Достаточно знание общих принципов, всё остальное можно подтянуть по мере надобности. Разработка сегодня стала слишком объемной и всё в голове не удержишь, хотя конечно если писать только в одном языке и больше ничем не заниматься, то наверное стоит знать как можно больше об этом языке. А в C# еще много всего интересного. Сколько лет в нем пишу и все равно иногда открываю что-то новое
а вы уже Senior С# dev? Backend?
@@mitsuro3815 скорей Full Stack Web Developer, делаю всё что придется. Просто C# это то, с чем я работал больше всего, ну и в принципе этой мой любимый язык) Но обычно это только часть проекта и делать приходиться много чего другого, поэтому изучать полностью что-то одно, нет смысла и времени. Достаточно разобраться в том, что требуется для выполнения задачи.
Дадада, я вроде не так уж мало пишу, но каково же было удивление, когда я узнал что можно функцию в методе создавать... А вроде штука базовая должна быть.
Ну эти вопросы как-то вообще не похожи на экзаминационные)
Я бы сказал такие, базовые понимания о возможностях языка. Прогать на этом языке и не знать этих вещей -- ну, довольно странно
Очень ждем для Python, очень благодарен вам за ваш труд.
Вопрос про sql странный, аля: "Вы точно разработчик C#, если не знаете JOIN", ну как бэ, я могу быть разработчиком мобильных приложений на Unity, там используется C#, но не используется sql, wtf dude
Сергей, спасибо огромное за видео. Давно его ждал
Спасибо, Сергей, огромное! Вырос как разработчик на ваших видео, 3 года - полет нормальный, перехожу на C# Backend, очень в тему для кругозора :)
Не понимаю, зачем C# разработчику знать типы джоинов, если Entity Framework уже за него делает эти самые джоины. Если знаете, скажите, с какой целью вообще писать голый SQL запрос в коде, а не использовать уже придуманные инструменты?
А Dapper? Его много где используют.
Сергей, скорее всего вам придётся выпустить ряди таких видео, по всем языкам программирования :)
Единственное, чего я не знаю - это REST и вопросы по тестированию.
Слегка неуверен в работе с базами данных.
То есть, на словах - я осознаю в чём разница между разными видами JION'ов, но на практике - я какие запросы не писал, разницу видел лишь между INNER и OUTER.
Между LEFT и RIGHT - какую тестовую базу данных не строил(вероятно это я просто не умею их проектировать), а запросы всегда были одинаковыми по возвращаемому содержанию! Разве что имели разный порядок строк, тогда как я ожидал увидеть нечто иного содержания.
супер! сейчас, благодаря видео начал путь в изучение Java, но в универе писали на c++, но видосик по c# я сохраню! так как хочу в будущем понимать хотя бы базово java, с#, и с++
Не розпиляйся, вибери щось одне і гати)))😂
@@MERKYRIY-fn5rw тоже верно)
Регистрация на C#/.NET менторинг тут - go.foxminded.ua/41qgnZy
Как зарегистироваться если я из Беларуси?
Здравствуйте Сергей, сделайте пожалуйста видео с Иваном Головачом. Интересно где он сейчас.
БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!
@@NikeWolf-s3c❤БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!
@@Serhii-TV❤БОГ СОЗДАЛ ТАКОЙ ПРЕКРАСНЫЙ МИР! НЕ БУДЕМ РАЗРУШАТЬ МИР! ПОЛЮБИМ БОГА И ВСЕХ ЛЮДЕЙ! НЕТ ВОЙНЕ!!
Как всегда всё понятно и достОйно рассказано, Сергей! Дай Бог здоровья тебе и твоим близким
Сергей: задаёт исключительно вопросы по шарпу + 1 вопрос по юнит-тестам и БД
Тем временем моё же первое собеседование: Что такое SOAP, чем отличает SOA от микросервисной архитектуры, как лучше организовать взаимодействие микросервисов, чтобы запрос быстрее всего обрабатывался
Если джун учил сразу EF Core, то рабоать с базой он в полне сможет, и не только join, а даже select не напишет
Досмотрел до 1.50. не смог удержаться чтобы не написать - бегите как от огня от тех всех кто абстракцию называет мало того что именно принципом ООП, а одним из основных принципов ООП! Особенно бегите оттуда когда интервьювер на техническом собеседовании утверждает, что основных принципов ООП 4, и четвертый это абстракция.
Запомните. Как было три основных принципа ООП, так и будет всегда. И по меньше читайте индусов)
Спасибо за видео, очень интересно было бы узнать про PHP
Привет, у меня такой вопрос, коммерческого опыта нет, знаю C, Python, люблю Computer Science. Хочу в backend, выбираю между Java, C#, Golang что посоветуешь, и почему? интересно твое мнение.
Благодарю Сергей !!! Надеюсь сделаете в будущем вторую часть 🔥
Ти ж моє сонечко❤❤❤. Більше б таких людей
Полезная информация, спасибо большое!)
Для будущих Питонистов такое видео снимете?
Спасибо за видос!
Знаю все из перечисленного в видео на хорошем уровне, работу не могу найти даже Trainee уже пол года. Привет из россиюшки
А какие вопросы ещё задавали на собесах? Или имеется ввиду, что вакансий нет?
Супер відео ) дякую за інфу хоч і я не junior фле було декілька що не зразу відповів би )
Отличное видео, спасибо.
Ну хз. У меня ничего из этого на последнем собеседование не спрашивали. Вопросы больше были по технологиям типо Entity framework или Dependecy injection. Сейчас ведь недостаточно знать только язык, нужны фрэймворки.
Ждем по JavaScript
Большое спасибо.
спасибо за видео! давай такое же по фронтенду :)
А wpf, asp, blazor, angular, entity можна пропустить, і одразу роботу шукати?
Я не использую Join в запросах SQL, так как большие запросы увеличивают время работы приложения. Я даже не помню left/right для чего. У меня в голове только аналогия с кругами эйлера на пересечение множеств. А если мне надо, то вместо dapper предпочитаю entity framework. Struct не использую вообще, только классы. Интерфейсы отдельная история. ООП штука полезная, но не все используется в коммерческой разработке, а если и используется, то только при написании гигачад апишки, чтобы по канону со всей лапшой. Грабейдж коллектор(забыл как пишется, сорры) знание позелное, но бесполезное. В c# он автоматически отрабатывает и чистит память. Единственное, что мб нужно знать, это возможность отключить коллектор в течении одной сессии, чтобы ускорить приложение, но не факт, что у вас не случится out of memory. Boxing/unboxing вообще не про изменение одного поля и впоследствие другого. Он нужен для создания ссылки на значимый тип(поправьте, если не прав). Хотя мб диктор прав и я не до конца понял message. И это не юзается зачастую, так как мы отошли от ArrayList к простому List. Да и если такое происходит, то структуру новичок даже не повторит без учебника. Я сам только один пример с Object помню. Крч видос в целом информативный, но не все из этого надо при реальном программировании. Я как бы сам джун с 1,5 опытом работы и уже что-то начал понимать. Обратите внимание при подготовке к собесамна LINQ. Он гораздо более важный, чем коллектор, так как его вас заставят писать вместо if'ов и for'ов.по Rest почитайти про методы hhtp и какой где используется. Их там немного, а используется еще меньше. Главное фишечки выучить. Их там дай бог 2. Если что придумаю, то допишу еще
Про JOIN-ы и работу с базой в C# ... знать надо 100%
Но Вы, Сергей, в Java вообще ORM используете?))
Некоторые фигачат простые CRUD сервисы даже не зная как Entity Framework запрос транслирует и во что))
И прекрасно живут... и получают свои ЗПшки на галлерах))
Жду базу для Джава-Скриптизера!!!
Спасибо за видео !
Добрый день, понравилось это видео, можете сделать видео что должен знать junior QA и UX UI designer
Інформативне відео, дякую за вашу працю! Зробіть, будь ласка, такий же формат по С++ 🙂
гарне відео хоч і вчусь не на С# розробника)) було б круто пройтись по всім ТОП 10 мовам програмування)) дякую за відео))
Здравствуйте Сергей, можете сделать такое видео про Php. Салам из Казахстана
блин, меня по фронтовым вопросам как джуна помню так е..ли на собесах. ts js react вопросов по 15-20 плюс задача и практика. на бэке чё реально такие вопросики?
з того що не прозвучало, були питання: SOLID, різниця stack-heap, паттерни, ну і ще всяке так з наскоку не згадаю. Але багато народу просто беруть і задають питання з ваших відосів типу "що знати джуну" і кривляться коли називаю паттерн сінглтон і повторюють Ваші слова майже дослівно)) тож піду погуглю трохи бо вже позабував дещо.
SOLID, різниця stack-heap, паттерни, -це ,мабуть, стосуєтся будь якої мови строгої типизації, не тільки С#
Щас бы курс купить, от такого крутого мужика.
«Мы не сотрудничаем с резидентами РФ и РБ» серьезно???
Я думал вы выше такого.
Ахаха, а чего ты ожидал от подобных личностей, как программист он крут, но политика это точно не его)
Мой тебе совет - не стоит обманываться умными словами, которые раскидывает этот мужчина. Любому программисту сразу понятно, что он про реальную разработку и реальный код ничего полезного для джунов не говорит, только какие-то общие абстракции. Собственно поэтому чему-то полезному научить людей он не способен, у него деятельность информатора, а не учителя.
Им просто лень е*аться с системой платежей, для обхода санкций РФ и РБ, поэтому проще написать так.
@@Xtemple135 даун? Он из України, хули он должен связь поддерживать, с жителями страны которая на него напала?
Выше чего? Раша вторглась в его страну и убивает людей. С чего бы он должен бы хотеть обучать студентов оттуда? Да и деньги из рф никак не перевести кроме как криптой, с которой нормальные люди дел иметь не желают.
Зачем мне изучать программирование или нанимать специалиста? Если можно в том же чате GPT описать задачу программы и он выдаст исходный готовый код.
Откуда ты знаешь, что там твой гпт написал? А если ошибка? А если такой технологии нету? Да и гпт что-то сложное написать не сможет.
Чат гпт это скорее инструмент который может лишь помочь но точно не сделать всю работу
Давно подписан на этот канал. Интересно.
Серёж, а не мог бы ты сделать обзор от программиста принципов тестирования. Их семь. Они описывают ошибки в разработке, но как-то не очень по-разработчески. Какие-то идеи мне ясны, какие-то рассказчики не могут толком объяснить "а чё так?" В общем, рассказывают как QA2QA, а хочется лучше понять, что происходит. С уважением, QAE
1. Принципы ООП
Наследование - у нас есть базовый класс (например юзер) и от него наследуются ещё два класс,, например админ и модератор. Они имеют такие же свойства как юзер, но в отличии от него, могут иметь свои поля/методы
Инкапсуляция - инструмент защиты класса от маслят
Полиморфизм - создание одноименных методов см разным функционалом
Абстракция - почти тот же класс, но уже не с полным функционалом.
2. Object
3. Нет
4. Rest
Rest - это взаимодействие с апи через юзер интерфейс
5. Понимаю для чего нужен эксепшен, но нормально объяснить не могу. Видимо плохо это понимаю😅
Сборщик имеет 3 поколения, у третьего есть ещё loh и poh
Используется он сам и удаляет из памяти то, уже не будет использоваться. Запускается он раз в тик или когда уже нет памяти
7. Тут лёгко, даже перечисливать не буду
Спасибо за Ваш труд! Сделайте пожалуйста такое же видео по ios-разработке)
Как то легко... Я что зря асп нет и ангуляр учил, со всякими библиотеками по типу SignalR... Короче надо будет реально работу начать искать, обнадеживающие видео.
Здравствуйте Сергей! Спасибо за видео) Ждём такое же видео, но уже по языку HTML🤡, уже очень долго учу этот язык программирования🤡🤡
К чему этот подкол? К тому что разработчик определяется не по языку, а по специализации?
HTML не мова програмування
Здравствуйте, Сергей я попробовал пройти по вашей ссылке на обучение C# у меня отобразилось окно о запрете владельцем . Подскажите вы не обучаете пользователь с РФ или это ютб запрет выдаёт? Заранее спасибо за ответ .
Нет, конечно не обучают.
Каким образом они будут обучать студентов из РФ, если они не смогут за обучение заплатить? Банки РФ изолированы от всего мира, ты никому не сможешь перевести денег, кроме как Беларуси через МИР и то не везде.
По поводу JOIN не согласен. Oracle Database пишут SQL без JOIN используют плюсики (+)
Дякую. А чому нема посила на відео "Що треба знати Java розробнику-початківцю"?
Про всяк випадок - ось воно th-cam.com/video/bLzuTIGXVLg/w-d-xo.html .
додала в опис)
Приятного просмотра😊
Сергей, респект😊
С ооп скользкая тема. Можно ударится в софистику вспомнить про посылку сообщений и подвести к тому, что все популярные языки (C++ java) не ооп, так как они вызывают методы и используют переменные другого класса напрямую.
На каком языке можно писать и сайты и моб приложения и дескотные приложения?
Как раз таки c# себя и позиционирует, насколько я знаю, как язык-универсал. Хоть игры в unity на нём пишутся
А чё делать, если меня даже до собеса не берут, постоянно тестовые задания какие-то
а чистой архитектуры к них нет ? или solid для всех един ?
Действительно если знать это все можно искать работу? Мне кажется этого мало
можно было в самом начале упомянуть что это все базовое знание и не напоминать после каждого вопроса
А можно такое же для Python?... Очень просим ) (я и жена )))))
как по мне, лишнего снобизма много: "точно ли человек разработчик, елси он не пишет joinы в sql запросах". вообще в C# технология Linq родная для языка, с двумя типами синтаксиса, т.е. человек может просто не помнить синтаксис стандартного SQL.. Хотя Linq может уже уровень мидла или сеньора? .. да и в целом вопросы по алгоритмам должны быть и они важнее для понимания - джун, понимающий работу алгоритмов на графах в 10^6 раз ценнее знающего синтаксис SQL
Интересно было бы глянуть такой же видос для анрдоида, видео получилось информативное
chatGPT видав ще 5-й принцип ООП - composition
от вже чатик)
Це генератор маячні по суті
Вопрос немного не по теме, но думаю здесь есть люди, которые разбираются: почему в игровых движках в основном используют С++, а на Юнити С#? Это из-за открытого исходного кода или есть ещё какие-то причины?
По-моему юнити это часть дотнет, поэтому само собой на ней МС сделала упор на Шарп. Имхо
C++ быстрее C#
Потому что у производителей движков есть свобода выбора) Если бы я был разработчиком игр, я бы вообще выбрал CryEngine. Там скрипты на Lua и искусственный интеллект , а не только С++, P.S. Последняя версия CryEngine V поддерживает скрипты на С# )
В C++ можно напрямую глубже работать с памятью, а также делать вставки из С и Ассемблера, шарп рядом не стоял по возможностям и требованиям к знаниям.
До диез не поддерживает множественное наследование - кричат с каждого утюга. А как же интерфейсы?
Посоветуйте книгу по sql для чайника под c#
Супер! Дякую за С# ))
Слава Україні!
Героям Слава!
А как же умение пользоваться GitHub
А куда он смотрит?
Очень интересное видео
Можете, пожалуйста, сделать такое же видео, но об iOS разработке
Всё, что делает ЗАГС - включает режим общего имущества. Чтобы потом женщина могла забрать у мужчины половину (или больше) имущества, на которое мужчина заработал. Всё, больше ничего ЗАГС не делает. Невозможно подать на развод (и на отъём имущества), если сначала не был оформлен брак.
Для семьи и рождения детей никакой ЗАГС не нужен. Семья - это мужчина, женщина и их общие (родные) дети, которых они родили по обоюдному добровольному согласию и с целью, чтобы их дети были счастливы и получали удовольствие от жизни. Для этого никакой регистрации мужа/жены в ЗАГСе не требуется.
1) Нужно быть дураком, чтобы идти в ЗАГС.
2) Если женщина настаивает на ЗАГСе - бегите от неё.
3) Никакие брачные договоры в этой стране не работают. Просто не создавай сам себе проблему, а не придумывай, как бы её потом решить.
Мужчине ЗАГС не нужен. НИ НОГОЙ В ПРОКЛЯТЫЙ ЗАГС.
А какие обязательные требования знания фреймворка, чтобы искать работу?
учи angular
@@федов-ф4х фронт и js не интересны
Давайте відео "Що потрібно знати Python Junior"!
От би ще точно таке відео, тільки про Junior Python розробника 😇
Куда-то стримы пропали(
во валит-то Немчинский... =)
По теме - я не отвечу ни на один, хотя я и не программист. Буду думать что с этим делать дальше =).
Теперь давайте о Golang'е
Давай по питону такое же видео))
Что по python ?
СДЕЛАЙТЕ С++ ПРОСИМ ОЧЕНЬ. КОНТЕНТ КАК ВСЕГДА НА ВВЫСШЕМ УРОВНЕ
Привет, спасибо за видео. Сделайте пожалуйста так-же по Python
А можно под Rust?))
Ребята, может кто-то посоветовать с чего лучше начать основы безопасности??
Можно на c++
я думал что требования для junior разработчика будет куда больше и сложнее
Зависит от вакансии скорее .
Цікаво що потрібно для golang та c lang, бо достатньо дивні мови, за відео дякую
что-то очень просто звучит, по сравнению с объявлениеми о работе (с требованиями какие там написаны)
ну нет, бред, я на первом курсе вуза, знаю отлично ответы на все вопросы, но я же понимаю, что мне до работы очень рано
знать недостаточно. надо уметь использовать
Давайте тоже самое но про с++
Не скромный вопрос : а что случилось с глазом?
возрастное, косоглазие
Я, думал это что-то типо урока, что идти учить, а тут, пускай и схожий посыл, но иной:/
Go: Что должен знать C# Middle разработчик