Was ist die richtige Position von Literalen im String-Vergleich?

8

Ich habe

%Vor%

aber PMD sagt

%Vor%     
unj2 23.06.2010, 20:42
quelle

5 Antworten

23

"TaxName".equals(localName) ist besser, als ob localName null ist. Sie erhalten keine Nullzeiger-Ausnahme.

    
Adam 23.06.2010, 20:44
quelle
7

PMD sollte Ihnen auch sagen warum es diese Warnung generiert. Aus der Regeldokumentation auf der PMD-Website:

  

Platziere Literale zuerst in String-Vergleichen - wenn der String null ist, erhältst du keine NullPointerException, sondern gib einfach false zurück.

    
matt b 23.06.2010 20:46
quelle
5

Ich bevorzuge es, Literale zuerst zu positionieren, d. h .:

%Vor%

Auf diese Weise führen Sie einen Rechtsvergleich für den Fall von null durch, anstatt NullPointerException zu erhalten.

    
Eyal Schneider 23.06.2010 20:46
quelle
2

Persönlich macht das für mich keinen Sinn. Wenn der Code eine NullPointerException abfängt, ist die Arbeit erledigt, die Sie später nicht mehr ausführen müssen. Wenn localName am Ende Null ist und später ein Problem verursacht, ist es schwieriger zu verfolgen. Ändern Sie den Code nicht, um den Compiler zufrieden zu stellen. Wenn Ihr Code eine NullPointerException auslöst, wird die Debugzeit später gespeichert.

    
Matt Horn 23.06.2010 20:50
quelle
-1

Um diese Warnung zu vermeiden, ist eine einfachere Lösung Nullpointers vorher zu prüfen, was in jedem Objekt, das wir verwalten, nicht nur in diesem Fall empfohlen wird:

%Vor%     
Fran G Aparicio 12.09.2016 11:04
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset Was ist der Unterschied zwischen Prometheus und Zabbix? ___ answer35338172 ___

Zabbix denkt in Bezug auf Maschinen, also sind Sie darauf beschränkt, über Dinge in diesen Begriffen nachzudenken. Warnungen können basierend auf einfacher Mathematik ausgelöst werden.

Prometheus hat diese Einschränkung nicht, Sie können in Bezug auf Dienste oder Datencenter frei denken. Warnungen können durch jeden gültigen Ausdruck ausgelöst werden, z. B. wenn die durchschnittliche Latenz zu hoch ist oder die Festplatten in 4 Stunden voll sind.

Ссылка erläutert mehr den Unterschied zwischen maschinellen und dienstleistungsbasierten Überwachungen.

>     
___ tag123zabbix ___ Zabbix ist eine kostenlose Open-Source-Monitoring-Lösung. Es umfasst Funktionen der Enterprise-Klasse, die skaliert werden können, um die Überwachung auf Tausenden von Servern zu unterstützen. ___ tag123prometheus ___ Das Prometheus-Überwachungssystem, einschließlich Server, Alertmanager, Push-Gateway, Exporteuren, Client-Bibliotheken und anderen Komponenten. ___ qstntxt ___

Wie der Titel schon sagt, können Sie mir die Unterschiede zwischen Prometheus und Zabbix sagen?

    
___ answer36477609 ___

Sowohl Zabbix als auch Prometheus können in verschiedenen Überwachungsszenarien verwendet werden, wobei in beiden keine besondere Spezialisierung zu finden ist. Zabbix ist älter als Prometheus und wahrscheinlich stabiler, mit mehr gebrauchsfertigen Lösungen.

Zabbix hat den Kern in C geschrieben und webUI basiert auf PHP, außerdem werden "Agenten" ( clientseitige Programme ) geschrieben in C. Prometheus ist in Go-Sprache geschrieben.

Zabbix speichert Daten in RDBMS (MySQL, PostgreSQL, Oracle, sqlite) nach Wahl des Benutzers. Prometheus verwendet eine eigene Datenbank, die in den Backend-Prozess eingebettet ist (es handelt sich um eine nicht-relationale Datenbank, die speziell für die Speicherung von Überwachungsdaten konzipiert wurde auf ähnliche Weise zu dem Datenmodell von OpenTSDB .

Zabbix verwendet standardmäßig das "Pull" -Modell, wenn ein Server eine Verbindung zu Agenten auf jedem Überwachungscomputer herstellt. Agenten sammeln die Informationen regelmäßig und senden sie an einen Server. Alternative ist der "aktive Checks" -Modus, wenn Agenten eine Verbindung mit einem Server aufbauen und Daten dorthin senden, wenn sie dies benötigen. Prometheus bevorzugt das Pull-Modell, wenn ein Server Informationen von Client-Computern sammelt. Aber Prometheus Push Gateway kann in Fällen verwendet werden, in denen ein "Push" -Modell benötigt wird.

Prometheus erfordert, dass eine Anwendung mit der Prometheus-Client-Bibliothek (verfügbar in verschiedenen Programmiersprachen) für die Erstellung von Metriken instrumentiert wird. Aber zur Überwachung eines Systems oder einer Software, die nicht instrumentiert werden kann, gibt es einen offiziellen "Blackbox-Exporteur" , der es ermöglicht, Endpunkte über einen Reihe von Protokollen; Darüber hinaus stehen eine breite Palette von Drittanbieter-Exporten und Tools zur Verfügung, mit denen Sie Metriken für Prometheus (ähnlich wie < a href="http://www.zabbix.com/zabbix_agent"> "Agenten" für Zabbix ). Ein solches Werkzeug ist Telegraf ( Ссылка ).

Zabbix verwendet ein eigenes tcp-basiertes Kommunikationsprotokoll zwischen Agenten und einem Server. Prometheus verwendet HTTP mit Protokollpuffern (+ Textformat für die einfache Verwendung mit Curl).

Zabbix bietet eine eigene WebUI zur Visualisierung an. Prometheus bietet ein grundlegendes Tool zum Ermitteln erfasster Daten und zum Visualisieren in einfachen Diagrammen auf seinem nativen Server und bietet außerdem einen minimalen Dashboard Builder PromDash . Aber Prometheus ist und wird entworfen, um von modernen Visualisierungswerkzeugen wie Grafana unterstützt zu werden.

Zabbix unterstützt in seinem Kern die Alarmierung. Prometheus bietet eine Alarmierungslösung, die von ihrem Kern in die Anwendung Alertmanager getrennt ist.

    
___ answer35316464 ___

Zabbix ist in C und PHP geschrieben, es ist eher die klassische Überwachung ..

Prometheus ist in Go geschrieben, es wird für Cloud-, SaaS / Openstack-Überwachung empfohlen.

ABER Sie können beide verwenden, Prometheus ist schneller wegen der Datenbank zabbix hat eine kleinere Grundfläche (weil es in c geschrieben ist). Zabbix kannst du die meisten Sachen im Webgui .. in Prometheus musst du Dateien wie Nagios bearbeiten ..

UPDATE: hier ist ein deutsches artikel über Prometheus: Ссылка

    
___