È possibile usare async/await all'interno di un lock? Perché?
C#
Perché async void è una cattiva pratica?
Come riconosce l'ambiente di esecuzione che un'operazione asincrona è terminata e che deve continuare il lavoro?
Cosa verrà visualizzato nella console? ```csharp public class Program { static void Main() { var myClassObj = new MyClass(); var myStructObj = new MyStruct(); MethodA(myClassObj.Num); // MethodB(myStructObj); MethodC(myClassObj); MethodD(myClassObj); Console.WriteLine(myClassObj.Num); // ? Console.WriteLine(myStructObj.Num); // ? } private static void MethodA(int num) { num = num + 1; } private static void MethodB(MyStruct myStruct) { myStruct.Num += 1; } private static void MethodC(MyClass myClass) { myClass.Num += 1; } private static void MethodD(MyClass myClass) { myClass = new MyClass(); } } ```
Cos'è una struttura? È un tipo di valore o di riferimento? Dove viene allocata la memoria? Quali sono i limiti dell'uso efficace delle strutture?
Cosa sono gli indici in un database? Tipi di indici (B-tree, Hash, Full-text). Indice cluster vs non-cluster. Indici coprenti.
Quali heap conosci oltre al principale (SOH)? Parlami dell'Heap di Oggetti Grandi e dell'Heap di Oggetti Ancorati.
Cos'è l'hashing consistente (consistent hashing)? Shard/bucket virtuali?
Compito con async/await: come funziona async/await? In cosa si sviluppa? Qual è la differenza tra Task e ValueTask?
Compito con metodi virtuali: cosa verrà visualizzato? Per quale metodo ci sono più tick e perché?
Cosa sono le radici GC? Quali ci sono?
Qual è il senso del concetto di generazioni GC (0, 1, 2)? Cosa ottimizziamo?
Parla dei modalità di funzionamento di GC: server e desktop. Quando usare quale?
Cos'è ConfigureAwait(false)? A cosa serve? Cos'è il contesto di sincronizzazione?
Parla dei modificatori di parametri ref, in, out e delle loro differenze. Cos'è readonly ref e ref readonly?
SELECT * FROM t_sensor_data;
Ti è stato assegnato un compito di revisione del codice di un collega Quali problemi vedi nel codice? ```csharp namespace SomeProject.Data { public class UserRepository { public Task SaveUser(User user, Dictionary<int,string> shards) { var shardIdx = user.Id % 3; var shardAddress = shards[shardIdx]; using(var shardService = new ShardService(shardAddress)) { return shardService.SaveUserAsync(user); } } } } ```
Compito con le stringhe: cosa verrà visualizzato? Come viene sovraccaricato l'operatore == per le stringhe? Cos'è un pool di internamento delle stringhe?
Spiega come viene allocata la memoria nello stack e nell'heap. I tipi di valore sono sempre allocati nello stack?
Come implementare il proprio Where senza yield? Cos'è yield e come funziona sotto il cofano?