"Trully zaawansowane C# Questions"

"Trully zaawansowane C# Questions"
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:4 minuty
  • Postów:5136
0

Zainspirowany tematem java zaawansowane interview questions

Czy znacie jakieś dziwne/ciekawe/wtf/zaawansowane (ponad poziom seniora) rzeczy w C#?

edytowany 8x, ostatnio: WeiXiao
katelx
  • Rejestracja:około 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Hong Kong
1

na dobra sprawe takie jak w javie :)
ja czesto prosilam o zaimplementowanie czegos identycznego wydajnosciowo do List<T> ale z gwarancja nie uzywania LOH (tj bez fragmentowania pamieci) albo cos co wymaga message loop czy innych windowsowych bebechow. mozna pogadac o implikacjach zwiazanych z interop jak finalizatory, pinning, memory alignment itp

._.
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:250
1

Dużo jest takich pytań. Np. Jaka wersja JIT, będzie optymalna dla urządzeń mobilnych?. W jakim miejscu jest alokowana pamięć dla klas statycznych. Ludzie wykładają się nawet na takich podstawach jak pytaniach o algorytm, jakiego używa sort w linq.

WeiXiao
quick sort? :D
AF
Z ciekawości: po co komu wiedza, jaki algorytm jest w LINQ? Jak tylko spełnia kontrakt stabilności i złożoności, to co za różnica?
._.
Quick sort to algorytm rekurencyjny i w zależności od dostępnej pamięci, nie zawsze musi być optymalny. Może rozwiń myśl powiedz co dla ciebie konkretnie jest tym kontraktem (w jaki sposób sprawdzasz, że coś jest zgodne z tym kontraktem)?
AF
A jak definiujesz „optymalny”? Liczba odwołań do kesza? Złożoność czasowa? Liczba porównań? No i najważniejsze pytanie: nawet jeżeli uznam, że dałoby się urwać kilka cykli, to co poradzę? Mam samemu implementować intro sorta (czy cokolwiek innego) do LINQ to Objects? Kontrakt mówi o złożoności czasowej, pamięciowej i stabilności. Nie sprawdzam go, tak samo jak nie sprawdzam, czy 2+2=4, zakładam, że to działa, bo jeżeli nie działałoby, to mam o wiele większe problemy, niż wolniejsze sortowanie.
._.
Tak masz rację. To ja rozumiem. A nie jak ktoś odpowiada na takie pytanie, "eee... bąbelkowe...?" ;).
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:4 minuty
  • Postów:5136
0

Używając tylko System;

Napisz funkcję (jedną) z jednym przeciążeniem, która przyjmie różną ilość argumentów różnego typu i je wyświetli

Bez tworzenia żadnych własnych kolekcji, class lub object[] List<object> itd, bez deklarowania zmiennych, bez użycia new. Bez tego wszystkiego do wrzucenia danych do funkcji. Oczywiście również bez traktowania argsów jako napis

Przykładowe dane

5,"x", 5.0, 15
"test", 'b', 5, -2, 5, 199.3m, 3, 3.0, 4.0, -12, 'q'

edytowany 9x, ostatnio: WeiXiao
mad_penguin
mad_penguin
funkcję z jednym przeciążeniem, tzn że ma być dokładnie jedna funkcja, czy mogą być 2 z różnymi argumentami?
WeiXiao
Jedna funkcja z jednym przeciążeniem
Ktos
Chodzi ci o params?
._.
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:250
0
Kopiuj
static void Main(string[] args)
        {
            int number;
            string text;
            decimal number2;

            ReturnSomething(out number, out text, out number2);

            Console.WriteLine($"{number} {text} {number2}");
            Console.ReadKey();
        }

        public static void ReturnSomething(int number, string text, decimal number2)
        {

        }

        public static void ReturnSomething(out int number, out string text, out decimal number2)
        {
            number = 55;
            text = "text";
            number2 = 5.5m;
        }
SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:około godziny
  • Postów:1494
0

Ja bym zadanie z przeciazeniem zrobi tak:

Kopiuj
static void Main(string[] args)
        {
            Test((() => Test(1,1, "dwa", 2.2, 2M)));
            Console.ReadKey();
        }
        public static void Test(Action action)
        {
            action.Invoke();

        }
        public static void Test(params dynamic[] args)
        {
            foreach(var item in args)
            {
                Console.WriteLine(item);
            }
        }
mad_penguin
mad_penguin
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Rzeszów
0

A może coś w rodzaju curryingu :)

Kopiuj
static void Main(string[] args)
{
    Bar(5)("x")(5.0)(15);
}

delegate Foo Foo(object item);

static Foo Bar(object item)
{
    Console.Write(item);
    return x =>
    {
        Console.Write(", ");
        return Bar(x);
    };
}
edytowany 1x, ostatnio: mad_penguin
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:4 minuty
  • Postów:5136
2

Chodziło mi o __arglist

Kopiuj
public static void Main(string[] args)
{
    Foo(__arglist(1, 'q', 2.0,"zzz"));
    Foo(__arglist('o', -15, "?^", 6, -1, "test"));
}

static void Foo(__arglist)
{
    ArgIterator iter = new ArgIterator(__arglist);
    for (int n = iter.GetRemainingCount(); n > 0; n--)
    {
        Console.WriteLine(TypedReference.ToObject(iter.GetNextArg()));
    }
}
edytowany 7x, ostatnio: WeiXiao
Zobacz pozostałe 2 komentarze
Azarien
to zadanie (jego wymagania by nie używać object[]) jest głupie. "znam nieudokumentowany i niepotrzebny programiście ficzer xxx, haha, będę z niego pytał, zobaczymy ile osób się wyłoży"
WeiXiao
@Azarien: przecież niektórzy fajnie kombinowali :> zresztą, to nie było zadanie po którym ktoś miał dostać prace czy coś, ot tak ciekawostka :P Musiałem dać jakieś ograniczenia, bo przecież od razu ktoś rzuciłby Collection<object> i go ahead
Azarien
@WeiXiao: normalną odpowiedzią bez dziwnych ograniczeń jest void Foo(params object[] args) { foreach (var v in args) Console.WriteLine(v); }
WeiXiao
@Azarien: Wiem, ale w temacie chodzi o raczej te "dziwne" rzeczy :P
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
1

Kiedy finally się nie wykona i jak się przed tym chociaż odrobinę uratować.

Azarien
kiedy ktoś wyłączy prąd. haha.
AF
Nie trzeba być aż tak brutalnym, wystarczą czynniki programowe.
._.
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:250
0

Przychodzą mi do głowy tylko, błędy pamięci albo zewnętrzne środowiska uruchomieniowego, ale w takim momencie powinieneś zakończyć działanie aplikacji, zamiast używać finally. Może masz na myśli jakieś dodatkowe zabezpieczenie nisko poziomowe, nie wiem...

edytowany 1x, ostatnio: ._.
AF
Chociażby przy wywołaniu Environment.FailFast, przy StackOverflowException (ten wyjątek w ogóle zabija aplikację), przy AccessViolation gdy nie ma atrybutu HPCSE, przy niezłapanym wyjątku na innym wątku (co też zazwyczaj zabija aplikację).
._.
No to w sumie, chyba się nie pomyliłem.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 8 godzin
  • Lokalizacja:Wrocław
3

99% i tak się wyłoży na pytaniu, czy właściwości mogą być oznaczone jako sealed, więc nie widzę sensu w wymyślaniu trudniejszych pytań.

grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Wiele osób może też nie wiedzieć o tym, że member może być np. private protected czy protected internal.

AF
Mam nadzieję, że firma nie daje komuś poziomu > senior za znajomość private protected.
grzesiek51114
grzesiek51114
Za takie coś może nie ale za protected internal class już pewnie tak. :]
neves
a nawet jak wiedzą że istnieje protected internal to zwykle nie wiedzą jak do końca działa :)
._.
Co do Internala, to odczuwam wrażenie, że to właśnie seniorzy nie wiedzą do czego on służy. ;)
Azarien
private protected to słabo udana próba naprawy protected internal (powinno być tak od początku), a protected internal to nieprzydatny dziwoląg.
._.
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:250
0

Proszę wymienić najczęstszą sytuację, która wymaga przeciążenia operatorów "== oraz !=". Po czym omówić problemy bezpieczeństwa oraz wydajnościowe związane z tą sytuacją. ;)

Azarien
Pytanie jest tendencyjne. Po pierwsze to zwykle można tego przeciążania uniknąć. Po drugie, jeśli odpowiadający poda inną sytuację niż pytający ma na myśli, to będą się kłócić która jest najczęstsza.
somekind
To pytanie nie jest tendencyjne, jest po prostu głupie, bo nie można udzielić obiektywnie weryfikowalnej odpowiedzi.
neves
to pytanie nie jest ani tendencyjne, ani głupie, odpowiedzią jest: przy popełnianiu własnej struktury zawsze się powinno je przeciążać ze względów wydajnościowych
._.
A to chyba jakiś paradoks, że dla najmądrzejszych ludzi najczęściej większość pytań wydaje się głupia albo idiotyczna. ;(
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
2

Proszę wymienić najczęstszą sytuację, która wymaga przeciążenia operatorów "== oraz !="

Robię sobie klasę do obsługi liczb zespolonych i oprócz arytmetyki, którą chcę mieć na operatorach, przeciążam także porównanie, co by mi było prościej na tych liczbach operować. Przykład nawet częsty na studiach. Z tego co się orientuję oba te operatory muszą być przeciążone. Nie można przeciążyć tylko jednego z nich.

PS: od zawsze bardziej podoba mi się określenie "przeładowanie" zamiast "przeciążenie", pewnie pozostałość po dawnej lekturze Grębosza.

edytowany 2x, ostatnio: grzesiek51114
._.
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:250
0

Jeśli przesłaniasz metodę Equls, powinieneś przeciążyć, również operatory ==, != i zastosować w nich ten sam algorytm. Jeśli przesłaniasz metodę Equls musisz również przesłonić GetHashCode().

Problemy:

  • GetHashCode() zwraca inta, musisz wziąć pod uwagę, że ilość HashCode nie może być większa niż int.MaxValue

  • HashCody powinny być równomiernie rozłożone, Jeśli nie uwzględnisz tego, że stringi oparte na alfabecie łacińskim pokrywają głównie 128 początkowych znaków ASCII "mieszanie xorgiem" da bardzo nierównomierne wyniki.

  • Utrudnienie napastnikowi wysłanie do tablicy dużej ilości obiektów o tym samym HashCode co może posłużyć jako atak DoS

  • Jeśli przesłaniasz Equls, a potem == albo !=, powinieneś wyłącznie używać ReferenceEquals(). Jeśli przeciążasz operator to najczęściej popełnianym błędem oraz najśmieszniejsze jest wykonanie rekurencji przez użycie tego samego operatora jako warunek w ifie.

AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
2

Nie wiem, co u Was w firmach robią seniorzy, ale muszą mieć „ekscytującą” pracę, skoro pytacie ich o przeciążanie operatorów lub modyfikatory widoczności…

edytowany 1x, ostatnio: Afish
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
0
Afish napisał(a):

Kiedy finally się nie wykona

Jeśli wyjątek nie jest nigdzie złapany (i powoduje crash aplikacji) to nie ma gwarancji wykonania bloku finally.
To dość istotnie ogranicza przydatność bloku finally, który ktoś mógłby sobie wyobrażać jako "na pewno" wykonujący kod niezależnie od tego co się stanie.

edytowany 1x, ostatnio: Azarien
AF
W typowym przypadku nie masz racji, tak jest w razie wyjątków AccessViolation i wyjątków out of band.
Azarien
mogę pokazać kod w którym wyjątek będzie rzucany throw new Exception() a ani catch go nie złapie ani finally się nie wykona.
AF
No to pokaż.
Azarien
ee, poprawka. catch co prawda wyjątku nie łapie i pojawia się okno "nieobsługiwany wyjątek" (jeśli program jest uruchomiony spoza Visuala) ale kliknięcie tam na "kontynuuj" jednak finally odpali. co czyni przykład znacznie mniej interesującym.
AF
Heh, ciągle pokaż ten kod, ciekaw jestem.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 2 godziny
2

@Afish

Kopiuj
using System;
using System.Windows.Forms;

class Test
{
    [STAThread]
    static void Main()
    {
        var form = new Form();
        form.Load += (sender, e) => throw new Exception();

        try
        {
            MessageBox.Show("I am still alive.");
            Application.Run(form);
        }
        catch(Exception e)
        {
            MessageBox.Show("Can't catch this.");
        }
        finally
        {
            MessageBox.Show("Finally!");
        }
    }
}
Zobacz pozostałe 3 komentarze
Azarien
tu nie ma innego wątka, a wina nie jest po stronie WinFormsów ani C#, tylko kernela. można to samo zademonstrować w każdym innym języku: kod otwierający okno nie może złapać wyjątku rzucanego wewnątrz eventu na otwarcie okna, nawet jeśli sobie udowodnimy że wszystko dzieje się w tym samym wątku i w odpowiedniej kolejności.
Azarien
ściślej: Application.Run (pośrednio) wpada w kernel mode, z którego to odpalany jest callback user mode który w końcu odpali nasze Load i throw. w tym momencie między throw (user-mode) a catch (też user-mode) jest bariera kernel-mode przez którą wyjątek nie „przeskoczy”.
AF
Może, nie jestem specjalistą od winformsów, ale przy p/invoke dotnet umie odpakować wyjątki nawet mając wyjście z trybu użytkownika, więc podejrzewam, że i tutaj byłby w stanie, gdyby to była kwestia przejścia do trybu jądra i z powrotem.
AF
(1/2) https://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception%28v=vs.110%29.aspx - w WinFormsach masz osobny handler do wyjątków, strzelałbym, że metoda obsługująca pętlę wiadomości łapie wyjątek i przekazuje go dalej, a jak nie jest obsłużony, to ubija aplikację od środa. https://stackoverflow.com/questions/2014562/whats-the-difference-between-application-threadexception-and-appdomain-currentd zdaje się potwierdzać moje przypuszczenia.
AF
(2/2) Jeżeli tak jest w istocie, to nie ma żadnej magii i barier, przez które wyjątek „nie przeskoczy”, tylko catch obejmujący Application.Run nic nie łapie, bo fizycznie wyjątku już tam nie ma.
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
0

@Azarien
Zdaje się, że mam rację.

System.Windows.Forms.NativeWindow.Callback

Kopiuj
private IntPtr Callback(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam)
		{
			Message message = Message.Create(hWnd, msg, wparam, lparam);
			try
			{
				if (this.weakThisPtr.IsAlive && this.weakThisPtr.Target != null)
				{
					this.WndProc(ref message);
				}
				else
				{
					this.DefWndProc(ref message);
				}
			}
			catch (Exception e)
			{
				this.OnThreadException(e);
			}
			finally
			{
				if (msg == 130)
				{
					this.ReleaseHandle(false);
				}
				if (msg == NativeMethods.WM_UIUNSUBCLASS)
				{
					this.ReleaseHandle(true);
				}
			}
			return message.Result;
		}

A potem w handlerze wyjątku masz:

System.Windows.Forms.Application.ThreadContext.OnThreadException:

Kopiuj
ThreadExceptionDialog threadExceptionDialog = new ThreadExceptionDialog(t);
						DialogResult dialogResult = DialogResult.OK;
						IntSecurity.ModifyFocus.Assert();
						try
						{
							dialogResult = threadExceptionDialog.ShowDialog();
						}
						finally
						{
							CodeAccessPermission.RevertAssert();
							threadExceptionDialog.Dispose();
						}
						if (dialogResult != DialogResult.Abort)
						{
							if (dialogResult == DialogResult.Yes)
							{
								WarningException ex = t as WarningException;
								if (ex != null)
								{
									Help.ShowHelp(null, ex.HelpUrl, ex.HelpTopic);
								}
							}
						}
						else
						{
							Application.ExitInternal();
							new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
							Environment.Exit(0);
						}

Na samym końcu aplikacja jest wyłączana przez Environment.Exit, więc catch na samej górze nie ma żadnego wyjątku do złapania. Finally ciągle się wykonuje, jakby było Environment.FailFast, to nawet on by się nie wykonał.

neves
  • Rejestracja:prawie 22 lata
  • Ostatnio:dzień
  • Lokalizacja:Kraków
  • Postów:1114
0

Właśnie wymyśliłem nowe pytanie:

Czy kolejność pól w klasie/strukturze wpływa na rozmiar zajmowanego przez nią miejsca w pamięci?

Pytanie jest fajne, bo otwiera pole do dyskusji na temat reprezentacji obiektów w pamięci.


edytowany 1x, ostatnio: neves
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:4 minuty
  • Postów:5136
0
neves napisał(a):

Właśnie wymyśliłem nowe pytanie:

Czy kolejność pól w klasie/strukturze wpływa na rozmiar zajmowanego przez nią miejsca pamięci?

Pytanie jest fajne, bo otwiera pole do dyskusji na temat reprezentacji obiektów w pamięci.

o to chodzi?

Kopiuj
class First
{
    private static int a = 10;
    public static long b = CalculateB();

    static long CalculateB()
    {
        return Convert.ToInt64(Math.Pow(a, 10));
    }
}

class Second
{
    public static long b = CalculateB();
    private static int a = 10;

    static long CalculateB()
    {
        return Convert.ToInt64(Math.Pow(a, 10));
    }
}

public static void Main(string[] args)
{
   Console.WriteLine(First.b);

   Console.WriteLine(Second.b);
}
Kopiuj
10000000000
0
edytowany 1x, ostatnio: WeiXiao
Zobacz pozostałe 6 komentarzy
WeiXiao
@Afish: Z ciekawości: wykorzystałeś to kiedyś w pracy?
AF
Tak, jak integrujesz się z jakimiś binarnymi protokołami, to jest to potrzebne.
somekind
Czyli jedna z tych rzeczy, która przydaje się raz w życiu 2% programistów i trzeba po prostu wiedzieć, gdzie o tym doczytać w razie czego.
AF
Zgadzam się.
AF
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 2 miesiące
11

Jeżeli komuś się nudzi i chce "pozaginać" innych, to jedziemy:

  1. Co się stanie, gdy rzucę jako wyjątek coś niedziedziczącego po System.Exception? Co się dzieje w dotnecie 1?
  2. Jak efektywnie połknąć ThreadAbortException?
  3. Jak łapać wyjątki AccessViolation? Jak je łapać w dotnecie 1?
  4. Metoda A woła metodę B z części try bloku try+finally. Metoda B powoduje wyjątek w części try bloku try+finally. Czy możliwe jest, że nie wykona się żaden finally? Czy możliwe jest, że wykona się tylko zewnętrzny finally (z metody A)?
  5. Czym różni się finally od fault?
  6. Czy exception filter jest tylko cukrem składniowym?
  7. Jak skompaktować LOH?
  8. Jakie obiekty poza tymi o rozmiarze 85000+ bajtów lecą na LOH w dotnet frameworku?
  9. Jak poprosić dotnet, żeby nie rzucał wyjątków out of band?
  10. Jak „zmartwychwstać” obiekt? Jak zrobić, aby dotnet ponownie sam z siebie go sprzątnął?
  11. Co to jest VM_HOARDING?
  12. Jak wyłączyć GC?
  13. Jak zrobić fragment kodu, który ubije całą app domenę, jeżeli poleci w nim wyjątek?
  14. Co to są interior pointers?
  15. Czy interfejs może mieć type constructor? Jak go zrobić?
  16. Jak zmienić nazwę indeksera?
  17. Czy interfejs może mieć statyczne pola i metody? Jak je zrobić?
  18. Ile powstaje obiektów przy inicjalizacji przez new Foo {Bar = 1}?
  19. Co to jest kowariancja? Kontrawariancja? Jak działa w tablicach, a jak w generykach?
  20. Czy dynamic wspiera extension methods?
  21. Czym różni się wywołanie equals od == ?
  22. Jak zrobić bezparametrowy konstruktor dla struktury?
  23. Czym różni się wywołanie new Struktura() od default(Struktura) gdzie Struktura to struct?
  24. Jaką rozdzielczość ma TimeSpan?
  25. Ile bajtów zajmuje pusta struktura?
  26. Co to jest typ blittable?
  27. Czy dwie metody mogą różnić się tylko typem zwracanym?
  28. Czym różni się const od readonly?
  29. Jak są przekazywane parametry w C#? Przez wartość? Przez referencję? Inaczej?
  30. W jakiej kolejności obliczane są parametry przy wywoływaniu funkcji?
  31. Czym różni się typeof od GetType?
  32. Jak jest kompilowany using? lock? Jak zmienił się lock koło dotneta 4?
  33. Ile pamięci domyślnie zjada wątek na starcie?
  34. Co to jest string interning?
  35. Do czego jest kompilowany switch?
  36. Co to jest __makeref? __refvalue? __refType? __argslist?
  37. Jak zrobić unię w C#?
  38. Ile jest domyślnie appdomen?
  39. Ile wątków na starcie ma aplikacja?
  40. Co się stanie, gdy w finalizerze poleci wyjątek? Co będzie w przypadku nieskończonej pętli?
  41. Co to jest syncblock?
  42. Czy P/Invoke pinuje obiekty?
  43. Co to jest pinowanie obiektów?
  44. Czy da się zagnieździć klasę w klasie? W interfejsie? Interfejs w klasie? W interfejsie?
  45. Jak zablokować dostęp do prywatnych składników przez refleksję?
  46. Czy foreach wymaga interfejsu? Co to jest WellKnownMember?
  47. Jakiej konwencji wywołania używa dotnet?
  48. Jak awaitować na metodę async void? Jak złapać wyjątek z takiej metody?
  49. Co będzie, gdy poleci wyjątek w metodzie async Task, ale nikt na niego nie zawaituje?
  50. Jak działa query syntax w LINQ? Do czego jest kompilowany?
  51. Czym różni się Select z IEnumerable od tego z IQueryable?
  52. Czy decimal może być const? A string? A instancja class Foo?
  53. Czy x == x może dać false? A x.Equals(x)?
  54. Co to jest card table? A brick table?
  55. Co to jest write barrier?
  56. Czy value type'y mają method table? Co to jest method table?
  57. Czy generacja 0 jest kompaktowana?
  58. Co to jest finalization queue? Co to jest f-reachable queue?
  59. Czy CLR wspiera fibery?
  60. Do czego jest kompilowana klasa niezarządzana w C++/CLI?
  61. Czy Timer może zostać sprzątnięty, jeżeli ma wykonać jakieś callbacki, ale nikt nie trzyma do niego referencji?
  62. Czy da się przekazać zmienną volatile przez referencję?
  63. Czy strumienie są thread safe?
  64. Czy można lockować value type?
  65. Co jest dzielone między app domenami?
  66. Czy Thread.Yield lub Thread.Join pompują wiadomości COM?
  67. Czym różni się Thread.Yield od Thread.Sleep(0)?
  68. Jakie są reguły memory modelu?
  69. Po czym dziedziczy delegat?
  70. Mamy delegat z trzema podpiętymi metodami. Co się stanie, jeżeli pierwsza podpięta metoda rzuci wyjątek?
  71. Czym różni się delegate { ...} od delegate() { ... }?
  72. Czy można zdefiniować pole globalne?
  73. Czy można napisać DllMain w C#?
  74. Czy da się napisać własny Nullable<T>?
  75. Co to jest rzutanie na true i na false?
  76. Czy można mieć try w metodzie z yieldem? A catch? A finally? A w metodzie async?
  77. Co to jest bit-mapped attribute? Custom? Pseudo-custom?
  78. Po czym dziedziczy tablica?
  79. Czy da się zrobić tablicę indeksowaną od dwójki?
  80. Co to jest shim?
katelx
swietna lista. co prawda wiekszosc do ogarniecia po przeczytaniu ksiazki richtera ale to nie zmienia faktu ze na praktycznie dowolne pytanie powyzej przecietnemu kandydatowi wypadna oczy ;)
WeiXiao
chociaż const vs readonly i argslist kojarzyłem heh. Jaką rozdzielczość ma TimeSpan? rozdzielczość? kurczę zawsze myślałem, że foreach potrzebuje implementować interfejsy dot typu IEnumerable, a tu takie zdziwko @katelx: "powyżej"?
PA
co to jest dotnet 1?
ClassicProgrammer
Super lista, moje poczucie znajomości C# właśnie zostało zrównane z ziemią, dzięki! Czas sie dokształcić :D Masz może podobną liste do np ASP MVC/WebApi + może jeszcze do jakiś popularnych bibliotek C#?
somekind
No ja myślę, że po pytaniu "jak coś działa w .net 1" nadchodzi idealna pora aby wyjść z rozmowy.
MA
sztos, chociaż nie widzę żadnego sensu pytać o dinozaury
AF
@WeiXiao: Rozdzielczość w sensie czy mierzy co do milisekundy, nanosekundy czy jeszcze czegoś innego. @ClassicProgrammer: Nie mam listy żadnej listy na zapas, po prostu usiadłem i wymyśliłem trochę pytań o C#. @somekind: Uprzedzałem, że to pytania na zaginanie :P
WeiXiao
@Afish: Przetłumaczyć na angielski i wrzucić na jakieś zagraniczne forum z programowania After 10 interviews as C# dev in Poland I collected craziest questions, here's list: :D
AF
Wierz mi, to nie są najbardziej szalone pytania z dotneta :P Jak katelx wspomniała, po przeczytaniu CLR via C# zna się odpowiedź na większość. Szalone są w stylu „czym różni się F-Call od Q-Call”, ale ich przydatność jest niemal zerowa.
WeiXiao
@Afish: keywords after 10 interviews :P
WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:4 minuty
  • Postów:5136
0
Kopiuj
var list = new List<int>();
list.Add(0);

Jaką pojemność będzie miała lista zainicjalizowana w ten sposób przed i po dodaniu pierwszego elementu i jak się będzie zmieniać, oraz dlaczego jeżeli znamy ilość danych, to lepiej zrobić new List<int>(size);

Jeżeli się gdzieś nie walnąłem ofc :P

Dlaczego w ten sposób

Kopiuj
var x = new List<int>();
for (long y = 0; y < long.MaxValue; y++)
    x.Add(0);

outOfMemory exception leci przy y = 268 435 456

A w ten sposób przy

Kopiuj
var x = new List<int>(134217728 * 3);
for (long y = 0; y < long.MaxValue; y++)
    x.Add(0);

402 653 184

Jak działa gcAllowVeryLargeObjects?

edytowany 8x, ostatnio: WeiXiao
AF
A jak kandydat zna odpowiedzi na te pytania, to można się pastwić dalej i poprosić o udowodnienie, że wstawianie do listy ma amortyzowany czas stały.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.