Meta tags:
description= Praktische Performance-Tipps für Java: zuerst messen, Premature Optimization vermeiden, häufige Mikro-Optimierungen kennenlernen.;
Headings (most frequently used words):
java, performance, tipps, erst, messen, dann, optimieren, strings, mit, stringbuilder, aufbauen, die, richtige, datenstruktur, wählen, unnötige, objekterzeugung, vermeiden, häufige, fallstricke, zusammenfassung, übungen,
Text of the page (most frequently used words):
string (34), sie (25), die (24), system (22), und (20), der (18), einführung (18), #stringbuilder (17), java (16), ist (16), long (16), lernen (15), schleife (15), code (14), den (14), einer (14), int (14), for (14), nanotime (13), das (11), eine (11), für (10), strings (10), arraylist (10), klasse (10), collection (9), hashmap (9), integer (9), new (9), thread (8), map (8), out (8), println (8), streams (8), html (7), mit (7), nicht (7), ein (7), arrays (7), sum (7), jdbc (7), collections (7), klassen (7), alle (6), tools (6), vermeiden (6), aufbauen (6), optimieren (6), einen (6), primitive (6), dass (6), performance (6), annotationen (6), and (6), methoden (6), interface (6), w3docs (5), json (5), übungen (5), erst (5), messen (5), weil (5), jedes (5), objekte (5), schleifen (5), oder (5), list (5), aus (5), sized (5), array (5), formatter (5), color (5), generator (4), unnötige (4), datenstruktur (4), dann (4), verkettung (4), garbage (4), jvm (4), langsamer (4), bevorzugen (4), dem (4), hashset (4), path (4), bevor (4), man (4), wert (4), zeigt (4), jit (4), size (4), pattern (4), kopieren (4), field (4), tipps (4), maven (4), junit (4), dateien (4), interfaces (4), operatoren (4), encoder (3), editor (3), quizze (3), php (3), javascript (3), css (3), häufige (3), fallstricke (3), wählen (3), this (3), unveränderlichkeit (3), was (3), bei (3), jeder (3), iteration (3), wird (3), reflection (3), einem (3), unveränderlich (3), kopiert (3), bisherigen (3), zeichen (3), von (3), als (3), allokationen (3), unveränderliche (3), aufwand (3), suchen (3), wenn (3), innerhalb (3), profilieren (3), nur (3), hot (3), schnell (3), autoboxing (3), methode (3), start (3), mikro (3), pre (3), true (3), wie (3), erzeugt (3), class (3), append (3), built (3), tostring (3), math (3), grow (3), hits (3), fast (3), zeit (3), zahlen (3), sortieren (3), lesen (3), lebenszyklus (3), xml (3), regex (3), syntax (3), switch (3), schlüsselwort (3), module (3), erstellen (3), italiano (2), português (2), español (2), français (2), русский (2), deutsch (2), english (2), über (2), beautifier (2), diff (2), password (2), python (2), git (2), bücher (2), snippets (2), zusammenfassung (2), objekterzeugung (2), richtige (2), page (2), sicherheitspraktiken (2), prüfen (2), immer (2), vollständige (2), operator (2), auf (2), läuft (2), zuerst (2), warum (2), verwendung (2), zum (2), eines (2), wiederverwenden (2), objekt (2), zugriffsmuster (2), zugriff (2), vorab (2), echte (2), arbeitslast (2), irgendetwas (2), ändern (2), klarer (2), kann (2), schlägt (2), cleveren (2), engen (2), beim (2), durch (2), arbeit (2), male (2), verwenden (2), jmh (2), vertrauen (2), zeitmesslauf (2), machen (2), sind (2), statt (2), scan (2), lookups (2), found (2), wiederholten (2), faster (2), konstruktor (2), both (2), lists (2), anhängen (2), puffer (2), geschwindigkeit (2), nie (2), same (2), result (2), import (2), public (2), static (2), main (2), 2_000 (2), concatns (2), builderns (2), equals (2), max (2), add (2), growns (2), sizedns (2), right (2), data (2), mapns (2), 1_000_000 (2), the (2), tool (2), weitere (2), gewinne (2), gegenüber (2), slow (2), boxes (2), total (2), every (2), werden (2), wieder (2), typen (2), keine (2), damit (2), enden (2), arraydeque (2), entfernen (2), treemap (2), schlüssel (2), durchschnittlich (2), duplikate (2), per (2), meist (2), compiler (2), problem (2), fields (2), csv (2), vor (2), zwei (2), genug (2), viele (2), premature (2), optimization (2), elapsedms (2), langsam (2), welche (2), optimierungen (2), namenskonventionen (2), best (2), practices (2), gradle (2), build (2), testing (2), stack (2), memory (2), function (2), concurrency (2), virtual (2), threads (2), vertieft (2), sealed (2), records (2), modern (2), parser (2), url (2), networking (2), konstruktoren (2), aufrufen (2), benutzerdefinierte (2), eingebaute (2), join (2), framework (2), variablen (2), multithreading (2), intro (2), date (2), datum (2), file (2), functional (2), ausdrücke (2), programming (2), durchsuchen (2), type (2), generic (2), classes (2), generics (2), exceptions (2), exception (2), try (2), catch (2), pakete (2), packages (2), object (2), verschachtelte (2), method (2), while (2), hash (2), 2026, rechte, vorbehalten, entwickler, gemacht, sprache, datenschutzrichtlinie, kontakt, uns, unternehmen, probier, üben, kostenlose, tutorials, beispiele, web, seit, 2014, next, previous, yes, helpful, auslöst, unterstützt, zurückfällt, separaten, einplant, weist, neuen, macht, übung, bedenken, hinzufügt, anpassen, indizierten, dimensionieren, anzahl, bekannt, korrekt, nachdenken, funktioniert, unbedachter, akkumulator, boxt, jeden, numerischen, sollten, verstecktes, abstand, häufigste, vermeidbare, verlangsamung, greifen, verketten, einmal, gewinnt, nichts, engere, investieren, profiler, kalten, noch, aufgewärmt, hat, möglicherweise, mitten, messung, etwas, anderes, eingeplant, wiederholen, tausende, zahl, einzelnen, einige, fehler, offensichtlich, schnelleren, sein, gegenteil, demonstriert, 000, etwa, millisekunde, abgeschlossen, gewinn, listen, 50000, mitteilen, kapazität, voraus, resize, kopier, schritte, vermeidet, bestätigt, dimensionierte, gewachsenen, identisch, hinweis, beeinflusst, allokation, inhalt, 100000, ausgegebene, mal, verhältnis, schleifenverkettung, vielfaches, teurer, gesamten, beweist, exakt, denselben, austausch, ändert, korrektheit, ausführung, mitnimmt, util, perfdemo, void, args, 100_000, concatenation, loop, ratio, slower, sizing, avoids, repeated, resizing, structure, put, 50_000, containskey, cost, boxing, lesson, measure, then, pick, run, editable, runs, server, einfache, kompilierte, cachen, aufzurufen, sicher, heißesten, inneren, denen, rolle, spielen, erweiterte, datetimeformatter, matches, allocation, all, allocates, erzeugte, muss, später, eingesammelt, kostenlos, nutzen, werte, ihren, box, erzeugen, sofort, wegwerfen, endgültige, größe, kennen, übergeben, neuzuweisungen, kopiervorgänge, vermieden, wachsen, entstehen, capacity, 10_000, häufiges, einfügen, log, sortierte, zugehörigkeitstest, suche, index, indexzugriff, ende, zugriffskosten, verwende, bedarf, größten, kommen, algorithmischen, entscheidungen, tweaks, nach, durchläuft, element, erledigt, annähernd, konstanter, tatsächlichen, entspricht, einzelnes, außerhalb, ordnung, wandelt, bereits, siehe, verhalten, des, compilers, entsteht, durchlauf, kopie, csv2, one, buffer, appended, place, allocated, brandneuen, hält, wachsenden, hängt, ort, stelle, wodurch, dieselbe, aufgabe, regeln, gehören, dazu, erstens, schwer, lesbar, zweitens, optimiert, häufig, ausgeführten, zur, laufzeit, erreicht, volle, nachdem, gelaufen, einzelner, sagt, wenig, took, dowork, geraten, raten, liegt, bedeutet, stunden, verbringen, beschleunigen, war, finden, kleinen, codeanteil, meiste, verbracht, schnelle, experimente, liefert, wall, clock, delta, ernsthafte, benchmarks, microbenchmark, harness, aufwärmt, messrauschen, berücksichtigt, alles, aber, kommt, dennoch, viel, speicherzuweisungen, falsche, wichtigste, tipp, gar, kein, trick, dieses, kapitel, ehrlich, misst, häufigsten, früchte, tragen, aufbau, wahl, naiv, schnellen, tatsächlich, praktische, kennenlernen, formatieren, liste, vergleichen, ausgeben, substring, länge, datei, zeilenweise, iterieren, umkehren, wörter, zählen, addieren, how, design, patterns, solid, prinzipien, clean, coding, konventionen, skript, abhängigkeiten, pom, mockito, parametrisierte, tests, assertions, flags, zeichenklassen, quantifizierer, gruppen, captures, matcher, regular, expressions, referenztypen, loading, kompilierung, algorithmen, heap, model, architektur, management, foreign, api, structured, types, tief, matching, text, blocks, var, features, jaxb, sax, dom, gson, jackson, metadata, batch, verarbeitung, transaktionen, resultset, callablestatement, preparedstatement, statement, verbindung, treiber, databases, inetaddress, datagramsocket, serversocket, sockets, httpclient, httpurlconnection, urlconnection, migration, modul, services, modultypen, moduldeklaration, platform, dynamic, proxies, felder, untersuchen, annotation, processing, meta, annotations, concurrent, fork, completablefuture, callable, future, executor, pools, readwritelock, reentrantlock, locks, atomare, volatile, deadlock, inter, komm, synchronized, blöcke, synchronisierung, priorität, runnable, calendar, legacy, temporal, adjusters, parsing, datumsformatierung, period, duration, instant, zoneddatetime, localdatetime, localtime, localdate, time, dateibaum, durchlaufen, files, nio, überblick, deserialisierung, serialisierung, printstream, scanner, printwriter, buffered, character, byte, löschen, schreiben, binaryoperator, consumer, supplier, predicate, optional, parallele, collectors, terminaloperationen, intermediate, ops, methodenreferenzen, lambda, funktionale, programmierung, unmodifiable, comparable, comparator, listiterator, iteratoren, properties, hashtable, linkedhashmap, treeset, linkedhashset, set, deque, priorityqueue, queue, vector, linkedlist, einschränkungen, erasure, wildcards, begrenzte, generische, split, konvertierungen, stringtokenizer, vergleich, formatierung, stringbuffer, pool, depth, hierarchie, checked, unchecked, throw, throws, with, resources, finally, multiple, handling, classpath, imports, singleton, klonen, hashcode, instanceof, enums, lokale, anonyme, innere, default, abstrakte, abstraktion, overriding, polymorphismus, super, vererbung, getters, setters, kapselung, final, non, access, modifier, zugriffsmodifikatoren, klassenmethoden, klassenattribute, oop, konzepte, oriented, varargs, pass, value, variablenbereich, rekursion, overloading, methodenparameter, methods, operationen, mehrdimensionale, labeled, statements, continue, break, each, ternary, else, control, flow, benutzereingabe, booleans, sonderzeichen, bitweise, logische, vergleichsoperatoren, zuweisungsoperatoren, arithmetische, casting, datentypen, kommentare, ausgabe, basics, kompilieren, ausführen, hello, world, umgebung, einrichten, installieren, getting, started, anmelden, formatters, reverse, sha256, md5, length, calculator, colors, hsl, hex, mixer, converter, picker, general, kurse, optimierung, learn,
Text of the page (random words):
g length calculator md5 hash generator sha256 hash generator string reverse url encoder alle 19 code formatters javascript formatter css formatter html formatter json formatter php formatter w3docs durchsuchen k de english en deutsch de русский ru français fr español es português pt italiano it anmelden java lernen getting started einführung java installieren umgebung einrichten hello world kompilieren ausführen java syntax basics syntax ausgabe kommentare variablen namenskonventionen datentypen type casting operatoren arithmetische operatoren zuweisungsoperatoren vergleichsoperatoren logische operatoren bitweise operatoren strings string methoden string verkettung sonderzeichen zahlen booleans zeichen math klasse benutzereingabe control flow if else ternary operator switch switch ausdrücke while schleife do while schleife for schleife for each schleife break continue verschachtelte schleifen labeled statements arrays arrays array schleifen mehrdimensionale arrays array operationen arrays klasse arrays sortieren arrays kopieren methods methoden methodenparameter method overloading rekursion variablenbereich pass by value varargs main methode object oriented programming oop konzepte klassen objekte klassenattribute klassenmethoden konstruktoren this schlüsselwort zugriffsmodifikatoren non access modifier static final kapselung getters setters vererbung super schlüsselwort polymorphismus method overriding abstraktion abstrakte klassen interfaces default methoden verschachtelte klassen innere klassen anonyme klassen lokale klassen enums records sealed classes instanceof object klasse equals hashcode tostring klonen unveränderliche klassen singleton pattern packages imports packages import pakete erstellen eingebaute pakete classpath exception handling exceptions try catch multiple catch finally try with resources throw throws checked vs unchecked exception hierarchie benutzerdefinierte exceptions best practices strings in depth string klasse string pool string unveränderlichkeit stringbuilder stringbuffer string formatierung string vergleich stringtokenizer string konvertierungen split join generics generics einführung generic classes generische methoden generic interfaces begrenzte typen wildcards type erasure einschränkungen collections framework collections einführung collection interface list interface arraylist linkedlist vector stack queue interface priorityqueue arraydeque deque interface set interface hashset linkedhashset treeset map interface hashmap linkedhashmap treemap hashtable properties iteratoren listiterator comparable comparator collections klasse collections sortieren collections durchsuchen unmodifiable collections functional programming funktionale programmierung lambda ausdrücke functional interfaces built in interfaces methodenreferenzen streams einführung streams erstellen intermediate ops terminaloperationen collectors parallele streams optional predicate function consumer supplier binaryoperator file and i o i o einführung file klasse dateien erstellen dateien lesen dateien schreiben dateien löschen byte streams character streams buffered streams data streams printwriter scanner printstream serialisierung deserialisierung nio überblick path klasse files klasse dateibaum durchlaufen date and time datum zeit intro localdate localtime localdatetime zoneddatetime instant duration period datumsformatierung datum parsing temporal adjusters legacy date calendar multithreading and concurrency multithreading intro thread klasse runnable thread lebenszyklus thread methoden thread priorität synchronisierung synchronized blöcke inter thread komm deadlock volatile atomare variablen locks reentrantlock readwritelock thread pools executor framework callable future completablefuture fork join concurrent collections virtual threads annotations annotationen einführung eingebaute annotationen meta annotationen benutzerdefinierte annotationen annotation processing reflection reflection einführung class objekte felder untersuchen methoden aufrufen konstruktoren aufrufen annotationen lesen dynamic proxies java platform module system module einführung moduldeklaration modultypen modul services module migration networking networking einführung url klasse urlconnection httpurlconnection httpclient sockets serversocket datagramsocket inetaddress jdbc and databases jdbc einführung jdbc treiber jdbc verbindung jdbc statement preparedstatement callablestatement resultset jdbc transaktionen batch verarbeitung jdbc metadata json and xml json einführung jackson gson xml einführung dom parser sax parser jaxb modern java features var schlüsselwort text blocks pattern matching switch modern records vertieft sealed types tief virtual threads vertieft structured concurrency foreign function api jvm and memory management jvm architektur memory model stack vs heap garbage collection gc algorithmen jit kompilierung class loading referenztypen regular expressions regex einführung pattern matcher regex syntax gruppen captures quantifizierer zeichenklassen regex flags testing testing einführung junit einführung junit annotationen junit assertions junit lebenszyklus parametrisierte tests mockito build tools maven einführung maven pom xml maven abhängigkeiten maven lebenszyklus gradle einführung gradle build skript best practices coding konventionen namenskonventionen clean code solid prinzipien design patterns einführung unveränderlichkeit performance tipps sicherheitspraktiken java how to zwei zahlen addieren wörter zählen string umkehren hashmap iterieren datei zeilenweise lesen string zu int int zu string array länge arraylist sortieren substring prüfen array ausgeben duplikate entfernen strings vergleichen liste in array zahlen formatieren java performance tipps praktische performance tipps für java zuerst messen premature optimization vermeiden häufige mikro optimierungen kennenlernen java ist für fast alles schnell genug aber langsamer code kommt dennoch vor meist durch zu viel arbeit zu viele speicherzuweisungen oder die falsche datenstruktur der wichtigste performance tipp ist gar kein trick messen sie bevor sie irgendetwas ändern dieses kapitel zeigt wie man ehrlich misst welche optimierungen am häufigsten früchte tragen string aufbau wahl der datenstruktur unnötige allokationen vermeiden und welche fallstricke naiv schnellen code tatsächlich langsam machen erst messen dann optimieren geraten zu raten wo ein performance problem liegt bedeutet stunden damit zu verbringen code zu beschleunigen der nie langsam war profilieren sie eine echte arbeitslast finden sie den hot path den kleinen codeanteil in dem die meiste zeit verbracht wird und optimieren sie erst dann für schnelle experimente liefert system nanotime ein wall clock delta für ernsthafte benchmarks verwenden sie ein tool wie jmh java microbenchmark harness das den jit aufwärmt und messrauschen berücksichtigt long start system nanotime dowork long elapsedms system nanotime start 1_000_000 system out println took elapsedms ms kopieren zwei regeln gehören dazu erstens premature optimization vermeiden klarer code der schnell genug ist schlägt cleveren code der schwer lesbar ist zweitens der jit compiler der jvm optimiert häufig ausgeführten code zur laufzeit eine methode erreicht erst volle geschwindigkeit nachdem sie viele male gelaufen ist ein einzelner zeitmesslauf sagt wenig aus strings mit stringbuilder aufbauen da strings unveränderlich sind erzeugt s x in einer schleife bei jeder iteration einen brandneuen string und kopiert alle bisherigen zeichen das ist o n² aufwand stringbuilder hält einen wachsenden puffer vor und hängt an ort und stelle an wodurch dieselbe aufgabe zu o n wird slow a new string allocated every iteration string csv for string field fields csv field fast one buffer appended in place stringbuilder sb new stringbuilder for string field fields sb append field append string csv2 sb tostring kopieren ein einzelnes a b c außerhalb einer schleife ist in ordnung der compiler wandelt es bereits in einen stringbuilder um siehe string verkettung für das verhalten des compilers das problem entsteht bei der verkettung innerhalb einer schleife wo jeder durchlauf eine weitere vollständige kopie erzeugt die richtige datenstruktur wählen die größten gewinne kommen meist aus algorithmischen entscheidungen nicht aus mikro tweaks in einer arraylist nach einem wert zu suchen durchläuft jedes element o n eine hashmap oder hashset erledigt das in annähernd konstanter zeit o 1 wählen sie die collection die dem tatsächlichen zugriffsmuster entspricht bedarf verwende zugriffskosten indexzugriff anhängen am ende arraylist o 1 per index o n per wert schlüssel wert suche hashmap o 1 durchschnittlich zugehörigkeitstest keine duplikate hashset o 1 durchschnittlich sortierte schlüssel treemap o log n häufiges einfügen entfernen an den enden arraydeque o 1 an den enden wenn sie die endgültige größe kennen übergeben sie sie dem konstruktor new arraylist 10_000 oder new hashmap capacity damit werden die wiederholten neuzuweisungen und kopiervorgänge vermieden die beim wachsen einer collection entstehen unnötige objekterzeugung vermeiden jedes erzeugte objekt muss später eingesammelt werden und garbage collection ist nicht kostenlos nutzen sie unveränderliche werte wieder bevorzugen sie primitive gegenüber ihren box typen in engen schleifen und erzeugen sie keine objekte die sie sofort wieder wegwerfen autoboxing every boxes a new integer long total 0l for int i 0 i n i total i slow allocates boxes primitive no allocation at all long sum 0l for int i 0 i n i sum i fast kopieren weitere einfache gewinne kompilierte pattern objekte cachen statt string matches in einer schleife aufzurufen einen datetimeformatter wiederverwenden er ist thread sicher und unveränderlich und in den heißesten inneren schleifen in denen allokationen eine rolle spielen das erweiterte for gegenüber streams bevorzugen java editable runs on the server run import java util public class perfdemo public static void main string args int n 100_000 1 string concatenation in a loop vs stringbuilder long t0 system nanotime string s for int i 0 i 2_000 i s i long concatns system nanotime t0 long t1 system nanotime stringbuilder sb new stringbuilder for int i 0 i 2_000 i sb append i string built sb tostring long builderns system nanotime t1 system out println same result s equals built system out println string ratio vs stringbuilder math max 1 concatns math max 1 builderns x slower 2 pre sizing a collection avoids repeated resizing long t2 system nanotime list integer grow new arraylist for int i 0 i n i grow add i long growns system nanotime t2 long t3 system nanotime list integer sized new arraylist n for int i 0 i n i sized add i long sizedns system nanotime t3 system out println both lists size n grow size sized size system out println pre sized faster sizedns growns 3 right data structure hashmap o 1 vs list scan o n map integer integer map new hashmap n 2 for int i 0 i n i map put i i 2 long t4 system nanotime int hits 0 for int q 0 q 50_000 q if map containskey q hits long mapns system nanotime t4 system out println map lookups found hits in mapns 1_000_000 ms 4 autoboxing cost int sum vs integer boxing long sum 0 for int i 0 i n i sum i system out println primitive sum sum system out println lesson measure then pick the right tool was man aus der ausführung mitnimmt same result true beweist dass stringbuilder exakt denselben string wie erzeugt der austausch ändert nur die geschwindigkeit nie die korrektheit das ausgegebene x mal langsamer verhältnis zeigt dass schleifenverkettung um ein vielfaches teurer ist als das anhängen an einen puffer weil jedes den gesamten bisherigen string kopiert both lists size 100000 true bestätigt dass eine vorab dimensionierte arraylist mit einer gewachsenen identisch ist der konstruktor hinweis beeinflusst die allokation nicht den inhalt pre sized faster true zeigt dass das mitteilen der kapazität an arraylist im voraus die wiederholten resize und kopier schritte vermeidet map lookups found 50000 in ms demonstriert dass 50 000 hashmap suchen in etwa einer millisekunde abgeschlossen sind der gewinn aus o 1 zugriff statt o n listen scan häufige fallstricke einige fehler machen offensichtlich schnelleren code in sein gegenteil einem einzelnen zeitmesslauf vertrauen der jit ist noch nicht aufgewärmt und das os hat möglicherweise mitten in der messung etwas anderes eingeplant wiederholen sie die arbeit tausende male oder verwenden sie jmh bevor sie einer zahl vertrauen kalten code mikro optimieren eine methode die beim start einmal läuft gewinnt nichts durch eine engere schleife investieren sie aufwand nur in den hot path auf den der profiler zeigt strings mit in einer schleife aufbauen die mit abstand häufigste vermeidbare verlangsamung greifen sie immer zu stringbuilder wenn sie innerhalb einer schleife verketten verstecktes autoboxing eine list integer map integer integer oder ein unbedachter long akkumulator boxt jeden wert in einer engen numerischen schleife sollten sie primitive und primitive arrays bevorzugen optimieren bevor es funktioniert erst korrekt dann schnell klarer code den man profilieren kann schlägt cleveren code über den man nicht nachdenken kann zusammenfassung messen bevor sie irgendetwas ändern profilieren sie eine echte arbeitslast und optimieren sie nur den hot path strings mit stringbuilder aufbauen nicht mit innerhalb von schleifen die collection dem zugriffsmuster anpassen hashmap hashset für suchen arraylist für indizierten zugriff vorab dimensionieren wenn die anzahl bekannt ist unnötige allokationen vermeiden primitive bevorzugen unveränderliche objekte wiederverwenden und bedenken dass jedes objekt garbage collection aufwand hinzufügt übungen übung warum ist die verwendung von zum aufbauen eines strings in einer schleife langsamer als stringbuilder warum ist die verwendung von zum aufbauen eines strings in einer schleife langsamer als stringbuilder weil string unveränderlich ist weist jedes einen neuen string zu und kopiert alle bisherigen zeichen was die schleife o n² macht weil stringbuilder in einem separaten thread läuft den die jvm zuerst einplant weil der operator für string nicht unterstützt wird und auf reflection zurückfällt weil string verkettung bei jeder iteration immer eine vollständige garbage collection auslöst prüfen was this page helpful yes no previous unveränderlichkeit next sicherheitspraktiken on this page erst messen dann optimieren strings mit stringbuilder aufbauen die richtige datenstruktur wählen unnötige objekterzeugung vermeiden häufige fallstricke zusammenfassung übungen w3docs kostenlose tutorials beispiele übungen snippets und quizze für das web seit 2014 bücher html lernen css lernen javascript lernen git lernen java lernen php lernen python lernen üben übungen quizze probier editor tools html editor password generator html encoder code diff json beautifier unternehmen über uns kontakt datenschutzrichtlinie sprache eng...
|