Blog Dla Młodszych Programistów C#/.NET

Mam nadzieję, że poprzednie pytania wraz z odpowiedziami masz już przeanalizowane i przyswojone, bo w dzisiejszym artykule przejdziemy do kolejnych. Przedstawię Ci znowu 10 kolejnych pytań, które często możesz usłyszeć na rozmowie kwalifikacyjnej, gdy ubiegasz się o stanowisko programisty .NET.

100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 7/10)


61) Jakie ma zastosowanie słowo kluczowe dynamic?


Jest to typ, który może zostać zmieniony w trakcie działania programu. Statyczne typy, takie jak int, double, bool są kompilowane poprzez CLR (Common Language Runtime), natomiast typy dynamiczne są omijane przez kompilator i przechwytywane przez DLR (Dynamic Lanuage Runtime) i obsługiwane w trakcie działania programu. Jeżeli wystąpi jakiś błąd typu dynamicznego, to zostanie on dopiero wyłapany w trakcie działania aplikacji.

Typ dynamic jest często wykorzystywany przy korzystaniu z zewnętrznych źródeł danych wykorzystujących typy dynamiczne, np. XML.

dynamic something;
something = 1;
Console.WriteLine(something.GetType()); //Int32
something = "2";
Console.WriteLine(something.GetType()); //String
something++; //błąd w trakcie działania programu


62) Czym są typy anonimowe w C#?


Dzięki typom anonimowym możemy tworzyć w wygodny sposób, nowy obiekt bez konieczności jawnego definiowania typu. W takim przypadku nazwa typu jest generowana przez kompilator i nie jest dostępna z kodu źródłowego.

Aby stworzyć typ anonimowy, należy użyć słowa kluczowego new wraz z inicjalizatorem obiektu. Typy anonimowe często są łączone z zapytaniami LINQ.

var anonimType = new { Id = 1, Name = "Name" };
var students = new List<Student>();
var studentsFullName = students
    .Select(x => new { Name = $"{x.FirstName} {x.LastName}" });


63) Jaka jest różnica pomiędzy operatorem równości (==), a metodą Equals() w C#?


Obie metody służą do porównania 2 obiektów.

Operator równości porównuje ze sobą referencje obu obiektów. Jeżeli są takie same, to zwróci true, w przeciwnym przypadku false. Jeżeli będziemy porównywać ze sobą typy wartościowe, to operator równości zwróci true, jeżeli obie wartości będą identyczne.

Metoda Equals() jest metodą wirtualną, której logikę porównania możemy sobie sami zdefiniować. Domyślnie metoda służy do porównania wartości obiektów. Jeżeli obie wartości będę identyczne, to zwróci true.

object object1 = 1;
object object2 = object1;

if (object1 == object2) { Console.WriteLine("=="); }

if (object1.Equals(object2)) { Console.WriteLine("Equals"); }

//wynik:
//==
//Equals
object object1 = 1;
object object2 = 1;

if (object1 == object2) { Console.WriteLine("=="); }

if (object1.Equals(object2)) { Console.WriteLine("Equals"); }

//wynik:
//Equals


64) Jakie jest zastosowanie znaku @ w C#?


Znak @ ma w C# 2 zastosowania.

Po pierwsze możemy tym znakiem poprzedzić nazwę zmiennej, którą chcemy utworzyć, w sytuacji, jeżeli ta nazwa jednocześnie słowem kluczowym w C# (np. @params, @this).

Drugie zastosowanie to umieszczenie tego znaku przed wartością stringa, w celu wyeliminowania potrzeby stosowania tzw. escape characters. Dzięki temu do stringa zostaje przypisana cała wartość pomiędzy dwoma cudzysłowami.

var text1 = "C:\folder\test.txt";
Console.WriteLine(text1); //C:♀older        est.txt

var text2 = @"C:\folder\test.txt";
Console.WriteLine(text2); //C:\folder\test.txt

var @params = 123;


65) Jaka jest różnica pomiędzy IEnumerable, a IQueryable?


IEnumerable pochodzi z przestrzeni nazw System.Collections, a IQueryable z System.Linq. IQueryable implementuje interfejs IEnumerable.

Podstawowa różnica pomiędzy nimi jest taka, że IQueryable wspiera budowanie kwerend i filtruje całe zapytanie po stronie serwera. Czyli możemy sobie dodawać do kolekcji różne filtry, zanim wywołamy je wszystkie naraz w 1 zapytaniu na bazie danych. W IEnumerable natomiast po stronie serwera zostanie wykonane całe stworzone za pierwszym razem zapytanie, wszystkie kolejne filtry będą wykonywane w pamięci na całej pobranej kolekcji.

public interface IEnumerable
public interface IQueryable : IEnumerable


66) Jaka jest różnica pomiędzy metodą Dispose(), a Finalize() w C#?


Metoda Dispose() jest to zwykła metoda, którą użytkownik może wywołać, żeby zwolnić zasoby. Jest to metoda, która musi zostać zaimplementowana, jeżeli korzystamy z interfejsu IDisposable.

Natomiast metoda Finalize() jest wywoływana przez Garbage Collector, w momencie, kiedy obiekt nie jest już w użyciu.


67) Jaka jest różnica pomiędzy Lazy Loading, a Eager Loading?


Jeżeli wykonujemy zapytanie z zastosowanie mechanizmu Lazy Loading (czyli leniwego ładowania), to najpierw są pobierane wszystkie rekordy, bez rekordów powiązanych. Jeżeli chcemy się odwołać do tych rekordów powiązanych, to dopiero wtedy są one wczytywane. W tym miejscu jest wykonywane nowe zapytanie, tylko właśnie o te rekordy powiązane. Czyli Lazy Loading wczytuje powiązane dane, tylko wtedy, gdy są one potrzebne.

Jego główną zaletą jest to, że możemy najpierw załadować wszystkie wymagane dane, dzięki czemu to pierwsze załadowanie będzie szybsze, a dopiero później odpytywać o obiekty powiązane. Ten mechanizm w Entity Framework Core jest domyślnie zablokowany, też ma swoje wady, ponieważ rodzi on wiele problemów, takich jak np. problem N+1.

Jeżeli chodzi o Eager Loading (czyli zachłanne ładowanie), to w przeciwieństwie do Lazy Loading od razu tworzy większe zapytanie, które pobiera wszystkie informacje o encjach powiązanych. Aby pobrać obiekty powiązany za pomocą Eager Loading należy użyć metody Include(), w parametrze przekazuje za pomocą Lambda Expression obiekt, który chcemy dołączyć. Warto tutaj tylko zwrócić uwagę, żeby pobierać tylko te elementy, których faktycznie potrzebujemy.

var students = _context.Students
    .Include(x => x.Address);


68) Co oznacza słowo kluczowe sealed w C#?


Jeżeli oznaczymy jakąś klasę słowem kluczowym sealed (zapieczętowany), to oznacza, że nikt nie może z tej klasy dziedziczyć. To znaczy klasa ta, nie może być klasą bazową dla innych klas.

public sealed class Person
{
}

public class Student : Person // błąd, nie można dziedzić po tej klasie
{
}


69) Czym jest system kontroli wersji?


Jest to oprogramowanie, dzięki któremu możemy śledzić wszystkie zmiany w kodzie źródłowym. Systemu kontroli wersji możemy używać nie tylko do prac programistycznych, ale także do śledzenia zmian w zwykłych plikach tekstowych np. wordzie, mimo to głównie to oprogramowania powstało dla programistów i śledzenia kodu źródłowego. Dodatkowo pomaga również programistom w łączeniu wszystkich zmian dokonanych przez wiele osób w różnym czasie.

Najbardziej popularnym system kontroli wersji jest Git, trochę rzadziej spotykany jest SVN, oraz TFS. Najważniejsze zalety Gita, to: wsparcie dla rozgałęzionego procesu tworzenia oprogramowania, możliwość pracy w trybie off-line, wydajna praca z większymi projektami, wsparcie do istniejących protokołów sieciowych i dobre rewizje kodu.


70) Jaka jest różnica pomiędzy Gitem a GitHubem?


Git to system kontroli wersji, dzięki któremu między innymi możemy zarządzać i śledzić historię kodu źródłowego. GitHub to usługa hostingowa, która umożliwia zarządzanie repozytoriami Git.


ZAKOŃCZENIE


To tyle pytań w tym artykule. Kolejne przeanalizujemy już w kolejnym artykule. Jeżeli taki materiał Ci się spodobał, to koniecznie dołącz do mojej społeczności – darmowe zapisy, gdzie będziesz również miał dostęp do dodatkowych materiałów.

To wszystko na dzisiaj, do zobaczenia w kolejnym artykule.

Poprzedni artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 6/10).
Następny artykuł - 100 Pytań (i Odpowiedzi!) z Rozmów Kwalifikacyjnych Dla Młodszych Programistów C#/.NET (Część 8/10).
Autor artykułu:
Kazimierz Szpin
Kazimierz Szpin
Programista C#/.NET. Specjalizuje się w ASP.NET Core, ASP.NET MVC, ASP.NET Web API, Blazor, WPF oraz Windows Forms.
Autor bloga ModestProgrammer.pl
Dodaj komentarz

Wyszukiwarka

© Copyright 2022 modestprogrammer.pl. Wszelkie prawa zastrzeżone. Polityka prywatności. Design by Kazimierz Szpin