Orivel Orivel
Menue oeffnen

Neueste Aufgaben und Diskussionen

Durchsuche die neuesten Benchmark-Inhalte fuer Aufgaben und Diskussionen. Wechsle nach Genre, um gezielt zu vergleichen.

Vergleichsgenres

Modelluebersicht

Programmierung

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5 mini

Einen nebenläufigen Rate Limiter mit gleitendem Fenster und Prioritätswarteschlangen implementieren

Designen und implementieren Sie einen thread-sicheren Rate Limiter in Python, der die folgenden Funktionen unterstützt: 1. **Sliding Window Rate Limiting**: Der Limiter sollte einen Sliding-Window-Algorithmus (keine festen Fenster) verwenden, um Anfragezahlen zu verfolgen. Bei einem Maximum von `max_requests`, das innerhalb eines Zeitraums von `window_seconds` erlaubt ist, muss er zu jedem beliebigen Zeitpunkt korrekt bestimmen können, ob eine neue Anfrage erlaubt ist. 2. **Multiple Tiers**: Der Rate Limiter muss mehrere benannte Tiers unterstützen (z. B. `"free"`, `"standard"`, `"premium"`), jeweils mit eigener Konfiguration für `max_requests` und `window_seconds`. Clients werden bei der Registrierung einem Tier zugewiesen. 3. **Priority Queue for Deferred Requests**: Wenn eine Anfrage gedrosselt wird, sollte der Limiter sie nicht einfach ablehnen, sondern in eine pro-Tier-Prioritätswarteschlange einreihen. Jede Anfrage hat eine Ganzzahl-Priorität (kleinere Zahl = höhere Priorität). Der Limiter sollte eine Methode bereitstellen, die, wenn Kapazität frei wird, die wartende Anfrage mit der höchsten Priorität für einen gegebenen Client aus der Warteschlange entnimmt und verarbeitet. 4. **Thread Safety**: Alle Operationen (`allow_request`, `enqueue`, `dequeue`, `register_client`) müssen sicher sein, von mehreren Threads gleichzeitig aufgerufen zu werden. 5. **Cleanup**: Stellen Sie eine Methode bereit, um abgelaufene Tracking-Daten für Clients zu entfernen, die in den letzten `cleanup_threshold_seconds` (konfigurierbar) keine Anfragen gestellt haben. Ihre Implementierung sollte Folgendes enthalten: - Eine `RateLimiter`-Klasse mit der beschriebenen Schnittstelle. - Eine `Request`-Dataclass oder ein named tuple, das mindestens enthält: `client_id`, `timestamp`, `priority` und `payload`. - Korrekte Behandlung von Randfällen: doppelte Client-Registrierung, Anfragen für nicht registrierte Clients, leere Prioritätswarteschlangen, gleichzeitige Änderungen und Probleme mit der Genauigkeit der Uhr. Schreiben Sie außerdem ein Demonstrationsskript (im Block `if __name__ == "__main__"`), das: - Einen Rate Limiter mit mindestens zwei Tiers erstellt. - Mehrere Clients registriert. - Einen Burst von Anfragen aus mehreren Threads simuliert, wobei einige zugelassen und andere in die Warteschlange gestellt werden. - Zeigt, wie aufgeschobene Anfragen verarbeitet werden, wenn Kapazität frei wird. - Eine klare Ausgabe druckt, die die Abfolge der Ereignisse deutlich darstellt. Erläutern Sie Ihre Designentscheidungen in Kommentaren, insbesondere bezüglich Ihrer Implementierung des Sliding Window, Ihrer Wahl der Synchronisationsprimitiven und etwaiger Abwägungen, die Sie zwischen Genauigkeit und Leistung getroffen haben.

50
21 Mar 2026 08:40

Programmierung

Google Gemini 2.5 Flash-Lite VS OpenAI GPT-5.2

Implementieren Sie einen sperrfreien nebenläufigen LRU-Cache

Designen und implementieren Sie einen threadsicheren LRU- (Least Recently Used) Cache in Python, der gleichzeitige Lese- und Schreibzugriffe unterstützt, ohne für jede Operation ein globales Lock zu verwenden. Ihre Implementierung muss die folgenden Anforderungen erfüllen: 1. Der Cache hat eine feste maximale Kapazität, die zur Erstellungszeit angegeben wird. 2. Er unterstützt drei Operationen: - get(key): Gibt den mit dem Schlüssel assoziierten Wert zurück oder None, wenn der Schlüssel nicht vorhanden ist. Der Zugriff auf einen Schlüssel muss ihn als zuletzt verwendet markieren. - put(key, value): Fügt das Schlüssel-Wert-Paar ein oder aktualisiert es. Wenn der Cache voll ist und ein neuer Schlüssel eingefügt wird, muss der am wenigsten kürzlich verwendete Eintrag entfernt werden. - delete(key): Entfernt den Schlüssel aus dem Cache, falls vorhanden. Gibt True zurück, wenn der Schlüssel gefunden und entfernt wurde, andernfalls False. 3. Der Cache muss sicher von mehreren Threads gleichzeitig verwendbar sein. Gleichzeitige get-Operationen auf verschiedenen Schlüsseln sollten sich gegenseitig nicht blockieren. Sie sollten die Kontention minimieren — ein einzelnes grobgranulares Lock um alles herum ist nicht akzeptabel. 4. Die Eviktionsstrategie muss strikt LRU sein: Der Eintrag, der am wenigsten kürzlich (durch get oder put) benutzt wurde, muss evakuiert werden. 5. Behandeln Sie Randfälle: Kapazität von 1, schnelle gleichzeitige puts, die Eviktionen auslösen, sich überlappende get/put/delete-Operationen auf demselben Schlüssel aus verschiedenen Threads, und null- oder negative Kapazität (raise ValueError). Stellen Sie Ihre vollständige Implementierung als ein einzelnes Python-Modul bereit. Fügen Sie eine kurze Erklärung Ihrer nebenläufigen Strategie und warum sie die Korrektheit wahrt bei. Fügen Sie außerdem eine kurze Demonstration (in einem main-Block oder einer Testfunktion) hinzu, die mehrere Threads erzeugt, die gemischte get/put/delete-Operationen ausführen, und die versichert, dass der Cache niemals seine Kapazität überschreitet und keine Datenkorruption auftritt.

64
19 Mar 2026 11:51

Programmierung

OpenAI GPT-5 mini VS Google Gemini 2.5 Flash-Lite

Implementieren Sie einen Least Recently Used (LRU)-Cache

Implementieren Sie eine LRU (Least Recently Used) Cache-Datenstruktur in Python, die die folgenden Operationen unterstützt, jeweils mit durchschnittlicher Zeitkomplexität O(1): 1. `get(key)` — Gibt den mit dem Schlüssel verbundenen Wert zurück, falls er im Cache vorhanden ist, andernfalls -1. Der Zugriff auf einen Schlüssel markiert ihn als kürzlich verwendet. 2. `put(key, value)` — Fügt das Schlüssel-Wert-Paar ein oder aktualisiert es. Wenn der Cache seine Kapazität erreicht hat, entfernen Sie das am wenigsten kürzlich verwendete Element, bevor Sie das neue einfügen. Ihre Implementierung sollte eine Klasse namens `LRUCache` mit folgendem Interface sein: ``` cache = LRUCache(capacity) cache.put(key, value) result = cache.get(key) ``` Demonstrieren Sie Ihre Implementierung mit der folgenden Testsequenz: ``` cache = LRUCache(2) cache.put(1, 10) cache.put(2, 20) print(cache.get(1)) # Expected: 10 cache.put(3, 30) # Evicts key 2 print(cache.get(2)) # Expected: -1 cache.put(4, 40) # Evicts key 1 print(cache.get(1)) # Expected: -1 print(cache.get(3)) # Expected: 30 print(cache.get(4)) # Expected: 40 ``` Anforderungen: - Verwenden Sie NICHT `functools.lru_cache` oder `collections.OrderedDict`. Implementieren Sie die zugrunde liegende Datenstruktur selbst. - Verwenden Sie eine Kombination aus einer Hash-Map und einer doppelt verketteten Liste. - Fügen Sie klare Kommentare hinzu, die Ihren Ansatz erläutern. - Behandeln Sie Randfälle wie eine Kapazität von 0 oder 1. - Stellen Sie den vollständigen, ausführbaren Code einschließlich der obigen Testsequenz mit der erwarteten Ausgabe bereit.

92
12 Mar 2026 19:00

Verwandte Links

X f L