Kako je izgledao proces
Tehnički intervju sa dva senior programera skoro 2h. Kulturni su i korektni. Hoće da pomognu pri navođenju ukoliko se zastane. Kandidat deli ekran i pali praznu konzolnu aplikaciju. Neophodno je napraviti Custom klasu koja omogućava instanciranje objekta kao i njegovo prikazivanje ali ne dozvoljava nikakve izmene. Jedan od propertija je List<> i neophodno je obratiti pažnju na njenu referentnu vrednost, budući da je listi moguće pristupiti i dodati element putem Add metode iz Main() klase, što mora da se izbegne. Prilikom zadatka usputno idu u pitanja poput: Šta je „immutability“. Kako se ponaša String u memoriji nakon instanciranja i nakon njegove izmene. Appending string manually vs StringBuilder. INT koliko bajtova zauzima i koja mu je maksimalna vrednost. UINT, Long. Bajt u bitovima koliko iznosi. Šta je field a šta property. Razlika između set i init kod propertija. Kako funcioniše List<> u memoriji i da li je referentni ili vrednosni tip – navesti poznate primere od svakog tipa i koja im je osnovna razlika. Strukture podataka: Razlika između niza i ulančanih lista za unos i iščitavanje. Kako se nizovi čuvaju u memoriji i kako računar zna kako efikasno da dođe do elementa na određenom indexu? Koje vremenske kompleksnosti postoje. Objasniti svojim rečima kako se vrši dodavanje ili brisanje elemenata. Hash tabele, objasniti kako funkcioniše proces hashiranja i koji su potencijalni problemi koji nastaju (kolizije) i kako se rešavaju. Threading: Objasniti razliku između procesa i niti (thread). Šta je „Race Condition“. Dati primer na broju procesa, broju niti i broju resursa gde i na koji način može nastati „Deadlock“ i kako sprečiti. Na koji način je moguće uraditi blokiranje resursa. Baza podataka: Dizajn baze podataka – u pseudo kodu kreiranje tabela i odgovarajućih tipova podataka na zadatu temu (Id primary key autoincrement, NVARCHAR, INT, DATETIME, etc). Šta se događa ako u MS SQL Serveru pokušamo da obrišemo unos koji je stranim ključem vezan za drugu tabelu? Šta su Orphaned Records? Prepoznavanje tipa stranog ključa (one-to-one, one-to-many, many-to-many) i na koji način razdeliti entitete po tabelama. Clustered i Non-Clustered index. Za pripremu intervjua, preporuka za literaturu: „C# 12 in a Nutshell: The Definitive Reference“. Primer programskog zadatka: public class User { public string UserName { get; init; } public IReadOnlyList<string> Roles { get; init; } public User(string userName, List<string> roles) { UserName = userName; Roles = new List<string>(roles); } } static void Main() { List<string> listOfRoles = new List<string>() {"Admin", "Owner"}; User myUser = new User("FirstUser", listOfRoles); Console.WriteLine("Printing inital list:"); foreach (var item in myUser.Roles) Console.WriteLine(item); listOfRoles.Add("Tester"); Console.WriteLine("Printing list after trying to add new element (should remain unchanged):"); foreach (var item in myUser.Roles) Console.WriteLine(item); }