Django: Как создать список лидеров

Ее опасное, но это также не имеет смысла с точки зрения понятности удобочитаемости/кода.

то, Что необходимо спросить, находится в этой ситуации

int foo()
{
   Object o;
   // As foo exits, o's destructor is called
}

, Что должно поймать исключение? Должен вызывающая сторона нечто? Или нечто должно обработать его? Почему вызывающая сторона нечто должна заботиться о некотором объекте, внутреннем к нечто? Мог бы быть способ, которым язык определяет это, чтобы иметь смысл, но его попытку быть нечитабельным и трудным понять.

, Что еще более важно, где делает память для Объектного движения? Где делает память, принадлежавший объект идет? Это все еще выделяется (якобы, потому что деструктор перестал работать)? Полагайте, что также объект был в стековое пространство , таким образом, его, очевидно, уведен независимо.

Тогда рассматривают этот случай

class Object
{ 
   Object2 obj2;
   Object3* obj3;
   virtual ~Object()
   {
       // What should happen when this fails? How would I actually destroy this?
       delete obj3;

       // obj 2 fails to destruct when it goes out of scope, now what!?!?
       // should the exception propogate? 
   } 
};

, Когда удаление сбоев obj3, как я на самом деле удаляю способом, который, как гарантируют, не перестанет работать? Его моя память черт возьми!

Теперь рассматривают в первом Объекте фрагмента кода, уходит автоматически, потому что на стеке, в то время как Object3 находится на "куче". Так как указателя на Object3 не стало, Вы - вид СОЛЬ. У Вас есть утечка памяти.

Теперь один безопасный способ сделать вещами является следующий

class Socket
{
    virtual ~Socket()
    {
      try 
      {
           Close();
      }
      catch (...) 
      {
          // Why did close fail? make sure it *really* does close here
      }
    } 

};

, Также посмотрите этот FAQ

8
задан Paul Tarjan 8 September 2009 в 01:58
поделиться

2 ответа

Я думаю, что Counterstrike решает эту проблему, требуя, чтобы пользователи соответствовали минимальному порогу, чтобы попасть в рейтинг - вам нужно только точно отсортировать 10% лучших или что-то еще.

Если вы хотите отсортировать всех, учтите, что вам не нужно отсортировать их идеально: отсортируйте их до 2 значащих цифр. Используя 1 млн пользователей, вы можете обновлять таблицу лидеров для 100 лучших пользователей в режиме реального времени, следующих 1000 пользователей до ближайших 10, а затем масс с точностью до 1% или 10%. Вы не перепрыгнете с места 500 000 на место 99 за один раунд.

Бессмысленно получать контекст 10 пользователей выше и ниже места 500 000 - порядок масс будет невероятно неустойчивым от раунда к раунду из-за экспоненциального распределение.

Редактировать: Взгляните на таблицу лидеров SO . Теперь перейдите на страницу 500 из 2500 (примерно 20-й процентиль). Есть ли смысл говорить людям с репутацией «157», что 10 человек по обе стороны от них также имеют репутацию «157»? Вы прыгнете на 20 позиций в любом случае, если ваше повторение повысится или снизится на пункт. Более экстремальным является то, что сейчас нижние 1056 страниц (из 2538) или нижние 42% пользователей связаны с репом 1. Вы получаете еще один балл, и вы подпрыгиваете на 1055 страниц . Это примерно на 37000 повышений в рейтинге. Было бы здорово сказать им: «Вы можете победить 37 тысяч человек, если получите еще одно очко!» но имеет ли значение, сколько значащих цифр у числа 37k?

Нет смысла знать своих сверстников по лестнице, пока вы уже не наверху, потому что где угодно, кроме вершины, их огромное количество.

4
ответ дан 6 December 2019 в 00:07
поделиться

Один миллион - это не так уж много, я бы сначала попробовал простой способ. Если вы сортируете свойство points, это должен быть столбец базы данных. Затем вы можете просто подсчитать очки больше, чем у данного человека, чтобы получить звание. Чтобы приблизить других людей к рассматриваемому человеку, вы запрашиваете людей с более высокими баллами и сортируете их по возрастанию, ограничивая их количеством людей, которое вы хотите.

Сложная вещь будет вычислять баллы при сохранении. Текущее время нужно использовать как бонусный множитель. Одна точка теперь должна превратиться в число, которое меньше чем через 1 целую 5 дней. Если ваши пользователи часто набирают очки, вам нужно будет создать очередь для обработки нагрузки.

0
ответ дан 6 December 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: