Смарт Геймс Девелопмент · сентябрь 2024

Тех собес на middle-senior C# Разработчик в Смарт Геймс Девелопмент

middle-senior Тех собес 2 задачи

1. Задача: C# Code Review

Прилетел код на ревью, какие комменты оставишь?

using System;
using System.Collections.Generic;
using System.Linq;

var logger = new Logger(new ConsoleLogger());
logger.Log("Log","LogLine1");
logger.Log("Log","LogLine2");
logger.Log(new ArgumentException("AAA!"));
logger.Flush();

interface IInternalLogger{
    void Log(string s);
}

class ConsoleLogger: IInternalLogger{
    public void Log(string s){
        Console.WriteLine(s);
    }
}

class Logger
{
    public Dictionary<string,string> buffer = new Dictionary<string,string>();

    public IInternalLogger internalLogger = null!;

    public Logger(IInternalLogger loggerImpl){
        internalLogger = loggerImpl;
    }

    public void Log(string key, string value){
        lock(buffer){
            if (buffer.Count() > 1024){
                throw new Exception("log overflow");
            }
            if(!buffer.ContainsKey(key))
                buffer.Add(key,value);
            else buffer[key] += "; " + value;
        }
    }

    public void Log(Exception e) => Log("Exception", e.GetType()+ " : " + e.Message);

    public void Flush(){
        var logString = ConvertToString(buffer.Select(x => x.Key + ":" + x.Value).ToList());
        internalLogger.Log(logString);
        buffer.Clear();
    }

    public  string ConvertToString(IList<string> list){
        string logString = "";
        for(int i = 0; i < buffer.Count(); ++i){
            logString = logString + list[i]+ "n";
        }
        return logString;
    }
}

2. Задача: Написать SQL-запросы по таблице подарков

create table gifts (clan text, user_from text, user_to text);

INSERT INTO gifts (clan, user_from, user_to) values ('ru','vasia','kolya');
INSERT INTO gifts (clan, user_from, user_to) values ('ru','kolya','misha');
INSERT INTO gifts (clan, user_from, user_to) values ('usa','mike','jon');
INSERT INTO gifts (clan, user_from, user_to) values ('usa','mike','ken');
INSERT INTO gifts (clan, user_from, user_to) values ('usa','ken','barbie');  
INSERT INTO gifts (clan, user_from, user_to) values ('china','csi','li');
INSERT INTO gifts (clan, user_from, user_to) values ('usa','csi','one');
INSERT INTO gifts (clan, user_from, user_to) values ('usa','csi','xhuy');

Используя один запрос для каждой задачи, нужно:

  1. Найти клан, где подарили больше всего подарков
  2. Найти 2 клана, где больше всего уникальных получателей и имя подарившего больше всего подарков
  3. Найти 2 клана, где больше всего уникальных получателей и имена двух подаривших больше всего подарков