Tipps zur Einstellung von Java Engineers, Branchentrends, und wie man ältere Java-Anwendungen wartet.
Wenn Sie schnell Ergebnisse liefern möchten, ist es am besten, einen erfahrenen freiberuflichen Java-Entwickler zu finden. Die Erfahrung als Tech-Freiberufler ergibt sich nicht nur aus den Jahren des Lebenslaufs, sondern hängt vielmehr davon ab, wie relevant die bisherige Arbeitshistorie dieser Person wirklich ist. Es kann vorkommen, dass ein Entwickler 15 Jahre Erfahrung hat, diese aber nicht relevant ist.
Jede Branche hat ihre eigenen Merkmale. Wenn Sie zum Beispiel über Pharmaindustrie oder Versicherungen nachdenken, ist es sicherlich hilfreich, wenn die Person zuvor in diesem Sektor gearbeitet hat, da sie/er ein viel tieferes Verständnis des Gesamtgeschäfts und der Ziele besitzt, was zu einer besseren Schwerpunktsetzung bei der Arbeit und der Entwicklung von Ideen führt, die auf die spezifischen Bedürfnisse des Unternehmens oder der Abteilung eingehen.
Finden Sie heraus, welchen Entwicklungsprozess diese Person für Projekte verwendet. Verhaltensweisen werden zu Gewohnheiten. Der Prozess, der für frühere Projekte verwendet wurde, wird sich höchstwahrscheinlich nicht verändern. Technologieprozesse sowie die Tools und Frameworks ändern sich ständig.
Vielleicht ist es viel wichtiger, eine offene Frage zu stellen, wie der spezifische Arbeitsprozess, die Methodik oder der Rahmen in früheren Projekten funktioniert haben, was Vor- und Nachteile sind und was die Person jetzt anders machen würde, um Projekte zu optimieren und die Erfahrung zu erweitern, anstatt nur eine einfache Frage zu stellen, wie ein bestimmter Framework / Prozess funktionieren soll.
Testen Sie nicht auf Wissen, sondern auf Argumentation und Weisheit.
Schauen Sie sich Spezialisierungen innerhalb des Lebenslaufs an, um eine gute Auswahl zu treffen. Gibt es bemerkenswerte Erfolge oder Schulungen, die zum Erfolg des Projekts beitragen könnten? Dies ist besonders wichtig, wenn man eher junges Personal in Betracht zieht, sollte aber auch für ältere Kandidaten nicht ignoriert werden – letztendlich gibt es eine Vielzahl von Engineers mit „jahrelanger Erfahrung“ auf dem Papier.
Erfahrene freiberufliche Entwickler müssen Feedback von früheren Kunden oder sogar Empfehlungsschreiben von Kollegen aus dem Ingenieurwesen erhalten. Gehen sie auf die Profile – GitHub, LinkedIn (auch Portale wie Clutch.co oder Goodfirms, falls vorhanden), Behance / Dribbble oder eine persönliche Website – und überprüfen Sie diese.
Zufriedene Kunden hinterlassen gute Bewertungen, außergewöhnlich zufriedene Kunden hinterlassen ebenfalls eine Empfehlung, während unzufriedene Kunden eine Warnung oder eine Ein-Stern-Bewertung abgeben. Während ein perfektes 100% Fünf-Sterne-Ranking künstlich und falsch aussehen mag, ist das Vorhandensein von Ein-Sterne-Bewertungen ein Alarmsignal.
Wenn Sie eine Person für eine wichtige Position für das Unternehmen in Betracht ziehen, schadet es auch nicht, frühere Arbeitgeber (natürlich mit Ausnahme des aktuellen) zu kontaktieren und nach der persönlichen Entwicklung des Kandidaten zu fragen. Informieren Sie sich über Kommunikationsfähigkeiten, analytisches Denken und den Umgang mit Aufgaben.
Es ist ratsam, mit ehemaligen Kunden zu reden, die mindestens 3 Monate mit dem potentiellen Kandidaten zusammengearbeitet haben. Oft sieht von außen alles gut aus, aber es kann überraschend vorkommen, dass die Person unterdurchschnittlich abschneidet und das Unternehmen nicht wirklich zufrieden ist.
Es ist besser, solche Informationen zu besitzen, bevor Sie eine Einstellungsentscheidung treffen und Ressourcen in den Onboarding-Prozess investieren, damit Sie mit der Einstellung hinterher nicht unzufrieden sind.
In den meisten Fällen bieten Engineers mit einer guten Erfolgsbilanz an, während der Vorverhandlungen selbst einen Kontakt zu ihren früheren Kunden bereitzustellen, wenn das Projekt für sie wichtig ist.
Wenn Sie mit den Neuerungen und der Fachsprache im Technologiebereich nicht vertraut sind, ist es am besten, einen Experten zu finden. Lassen Sie einen erfahrenen Java-Berater mit dem Kandidaten sprechen. Bitten Sie diesen, zu validieren oder zu widerlegen, was im Lebenslauf des Bewerbers steht. Wie das alte Sprichwort sagt: “Leave it to the experts.” („Überlassen Sie es den Experten.“)
Wir empfehlen Ihnen, bei der Durchführung dieses Gesprächs einen Experten im Raum zu haben oder auch Ihren internen Java-Techniker einzubeziehen. Fragen Sie den Freiberufler nach den neuesten technischen Themen bezüglich Java, Big Data, Spark, Hadoop und Scala, mit denen sie/er sich zuletzt beschäftigt hat.
Sprechen Sie über ihre/seine neuesten Entdeckungen oder über die Fähigkeiten, die sie/er kürzlich in Bezug auf Java-Entwicklung erworben hat. Bestimmen Sie durch dieses Gespräch ihr/sein Interesse an der Branche, denn eine vorhandene Leidenschaft für Weiterbildung sagt auch viel über die Fähigkeiten von Bewerbern aus.
Do you have IT recruitment needs?
Obwohl Fähigkeiten und Erfahrung gute Bewertungskriterien für Entwickler sind, reichen sie einfach nicht aus, um festzustellen, ob diese an schwierigen Projekten arbeiten können. Die Arbeitseinstellung und der Arbeitsfluss einer Person sind für Entwicklungsprojekte von entscheidender Bedeutung.
Führen Sie eine zeitgesteuerte Problemlösungsprüfung für Ihren Kandidaten durch und beobachten Sie, wie sie/er sich unter Druck verhält. Dadurch erhalten Sie Aufschluss über die intellektuellen Fähigkeiten der Bewerber/innen.
Wenn sich der Kandidat in der Nähe Ihres Unternehmensbüros ansässig ist, können Sie sie/ihn dann zu einer lokalen Live-Codierungssitzung einladen (oder, wenn die Person weit entfernt wohnt, können Sie die Sitzung online organisieren). Dies bietet eine hervorragende Gelegenheit, den Kandidaten dem Rest Ihres Teams vorzustellen. Wenn Bewerber/innen persönlich sehen, was Ihr Unternehmen macht und worum es in Ihrem Team geht, können Sie sehen, ob die Person mit dem Rest des Teams mithalten kann.
Vergessen Sie nicht, die Qualität der Arbeit zu bewerten, die Bewerber/innen während der Prüfungen geleistet haben. Analysieren Sie den Grad an Kreativität und die Herangehensweise an die Situation. Denken Sie, dass sie/er für die Aufgabe bereit ist?
Das Testen von Fähigkeiten zur Problemlösung wird oft mit dem Testen auf algorithmisches Wissen verwechselt. Und hier gibt es einen sehr wichtigen Unterschied: Unserer Ansicht nach sollten Sie nicht so viel auf Algo-Wissen testen, da es von den Ingenieuren nicht täglich bei der Arbeit verwendet wird (ausgenommen ganz bestimmte Fälle, z. B. Software-Engineering bei Hedge-Fonds oder überall dort, wo System Performance eine der wichtigsten Anforderungen ist).
Stattdessen sollten Sie den Denkprozess und die Fähigkeit zum schnellen Denken testen und wie man unter Druck geeignete Lösungen finden kann.
Wenn wir diese Phase intern bei DevsData durchführen und Algorithmen beteiligt sind, erklären wir häufig sogar explizit im Voraus, wie der Algorithmus oder eine Datenstruktur funktionieren, und erwarten dann, dass die Bewerber/innen dieses Wissen nutzen und Argumentation zur Lösung eines bestimmten Problems anwenden.
Wenn Sie das nächste Mal einen Entwickler einstellen, stellen Sie ihr/ihm die folgenden Fragen, die Bewerber/innen fordern werden. Im Folgenden finden Sie einige der Fragen, die wir bei DevsData stellen. Sie helfen dabei, Ihren Kandidatenpool zu sieben und eine selektierte Auswahl zu treffen.
Bitte denken Sie daran, dass der Wissenstest nur eine von vielen Phasen des Prozesses ist und niemals alleinstehendes Kriterium sein sollte. Es kann argumentiert werden, dass die Wissensfragen besser für Nachwuchskandidaten geeignet sind, da ältere Bewerber/innen mit diesen bereits vertraut sein sollten.
Darüber hinaus ist es sehr ratsam, offene Fragen zu einem umfassenderen Sachverhalt und den möglichen Auswirkungen dieser sehr spezifischen technischen Entscheidung sowie zu einer umfassenderen Systemarchitektur zu stellen, die für größere Unternehmenslösungen geeignet ist. Wenn ein Kandidat wirklich entschlossen ist, kann das Wissen schnell erworben werden.
Was jedoch nicht schnell erreicht werden kann, sind ein breiteres Systemverständnis und die Fähigkeit, Probleme unter Druck schnell zu lösen.
Es ist nicht ungewöhnlich, dass Ingenieure mit 15 oder 20 Jahren Erfahrung nur ungern etwas über tiefgreifende Sprachtechniken, neue Ansätze für die Softwareentwicklung und neue Frameworks lernen oder ebenfalls zögern und sogar Angst haben, eine Herausforderung zur Problemlösung anzunehmen. Und das ist eines der Unterscheidungsmerkmale, das nicht ignoriert werden sollte.
Von den dreien bietet LinkedList im Allgemeinen die beste Leistung. Begründung:
ArrayList und Vector verwenden jeweils ein Array, um die Elemente der Liste zu speichern. Wenn ein Element in die Mitte der Liste eingefügt (oder aus dieser entfernt) wird, müssen die folgenden Elemente entsprechend verschoben werden. Vector ist synchronisiert. Wenn keine threadsichere Implementierung erforderlich ist, wird empfohlen, ArrayList anstelle von Vector zu verwenden.
LinkedList hingegen wird mithilfe einer doppelt verknüpften Liste durchgeführt. Das Einfügen oder Entfernen eines Elements erfordert daher nur das Aktualisieren der Links, die unmittelbar vor und nach dem Element stehen, das eingefügt oder entfernt wird.
Es ist jedoch anzumerken, dass es bei einer bedenklichen Leistung besser ist, nur ein Array zu verwenden und es selbst zu verwalten oder eines der leistungsstarken Pakete von Drittanbietern wie Trove oder HPPC zu verwenden.
In Java sind Strings unveränderlich und werden im String-Pool gespeichert. Das heißt, sobald ein String erstellt wurde, bleibt er im Pool im Speicher, bis er gelöscht wird.
Selbst nachdem Sie den Zeichenfolgenwert (z. B. das Kennwort) verarbeitet haben, bleibt er daher für einen unbestimmten Zeitraum (erneut bis zur Löschung) im Speicher verfügbar, über den Sie keine wirkliche Kontrolle haben. Daher kann jeder, der Zugriff auf einen Speicherauszug hat, möglicherweise vertrauliche Daten extrahieren und ausnutzen.
Wenn Sie dagegen ein veränderliches Objekt wie ein Zeichenarray zum Speichern des Werts verwenden, können Sie es auf leer setzen, sobald Sie damit fertig sind, mit der Gewissheit, dass es nicht mehr im Speicher verbleibt.
Wir empfehlen jedoch, Operationen an vertraulichen Informationen in Klarschrift zu vermeiden – sie sollten nach Möglichkeit verschlüsselt werden.
Wenn eine Collection eine andere unterstützt, bedeutet dies, dass Änderungen einer Collection in der anderen wiedergegeben werden und umgekehrt. Angenommen, wir möchten eine Whitelist-Funktion erstellen, mit der ungültige Schlüssel aus einer Map entfernt werden.
Dies kann viel einfacher mit Map.keySet erreicht werden, welches einen Satz von Schlüsseln zurückgibt, welche von der ursprünglichen Map unterstützt werden. Wenn man Schlüssel aus dem Schlüsselsatz entfernen, werden diese auch aus der Hintergrundzuordnung entfernt:
public static <K, V> Map<K, V> whitelist(Map<K, V> map, K… allowedKeys) {
Map<K, V> copy = new HashMap<>(map);
copy.keySet().retainAll(asList(allowedKeys));
return copy;
}
retainAll schreibt sich auf die Hintergrundzuordnung und ermöglicht es uns, auf einfache Weise etwas zu implementieren, das andernfalls das Durchlaufen der Einträge in der Eingabezuordnung erfordern würde, um sie mit allowKey usw. zu vergleichen.
Beachten Sie, dass es wichtig ist, die Dokumentation der Hintergrundsammlung zu beachten, um festzustellen, welche Änderungen erfolgreich aufgeschrieben werden. Im obigen Beispiel würde map.keySet (). Add (value) fehlschlagen, da der Hintergrundzuordnung kein Schlüssel ohne Wert hinzugefügt werden kann.
Do you have IT recruitment needs?
Der Hauptunterschied zwischen fail-fast und fail-safe Iteratoren besteht darin, ob die Sammlung während der Iteration geändert werden kann oder nicht. Fail-safe Iteratoren ermöglichen dies, fail-fast Iteratoren nicht:
In Java hat jeder Thread einen eigenen Stapel, einschließlich einer eigenen Kopie der Variablen, auf die es zugreifen kann. Wenn der Thread erstellt wird, kopiert er den Wert aller zugänglichen Variablen in seinen eigenen Stapel. Das volatile keyword sagt der JVM im Grunde genommen „Warnung, diese Variable kann in einem anderen Thread geändert werden“.
In allen Java-Versionen garantiert das volatile keyword die globale Reihenfolge beim Lesen und Schreiben einer Variablen. Dies bedeutet, dass jeder Thread, der auf ein volatiles Feld zugreift, den aktuellen Wert der Variablen liest, anstatt (möglicherweise) einen zwischengespeicherten Wert zu verwenden.
In Java 5 und neueren Versionen gehen volatile Lese- und Schreibvorgänge eine happens-before Beziehung ein, ähnlich wie beim Aneignen und Freigeben eines Mutexes. Die Verwendung volatiler keywords ist möglicherweise schneller als eine Sperre, funktioniert jedoch in einigen Situationen nicht. Das Spektrum der Situationen, in denen volatile keywords wirksam sind, wurde in Java 5 erweitert.
Insbesondere die doppelt überprüfte Verriegelung funktioniert jetzt ordnungsgemäß. Das volatile keyword ist auch für 64-Bit-Typen wie long und double nützlich, da sie in zwei Operationen geschrieben werden. Ohne das volatile keyword laufen Sie der Gefahr, veraltete oder ungültige Werte zu erhalten.
Ein häufiges Beispiel für die Verwendung von volatile keywords ist, wenn ein Flag einen Thread beendet. Wenn Sie einen Thread gestartet haben und ihn sicher von einem anderen Thread aus unterbrechen möchten, können Sie den Thread regelmäßig einen Flag überprüfen lassen (d. h., um ihn zu stoppen, setzen Sie den Flag auf true).
Indem Sie den Flag volatile machen, können Sie sicherstellen, dass der Thread, der seinen Wert überprüft, erkennt, dass er auf true gesetzt wurde, ohne dass ein synchronisierter Block verwendet werden muss. Beispielsweise:
public class Foo extends Thread {
private volatile boolean close = false;
public void run() {
while(!close) {
// do work
}
}
public void close() {
close = true;
// interrupt here if needed
}
}
Oracle veröffentlicht seit 2017 alle sechs Monate eine neue Java-Version. Die neueste Version, Java 14, wurde am 17. März 2020 veröffentlicht und führte 16 JEPs (JDK Enhancement Proposals) ein. Lernen Sie schnell die interessantesten kennen.
Informationen zu Änderungen in früheren Versionen finden Sie auf der offiziellen Oracle-Dokumentationsseite.
Die komplexen Funktionen von Scala fördern eine bessere Codierung und bieten eine Leistungssteigerung. Funktionen, Makros und Tupel sind nur einige der Verbesserungen, die Scala bietet. Scala integriert funktionale Programmierung und objektorientierte Programmierung in eine leistungsstarke Sprache.
Entwickler und diejenigen, die sie einstellen, müssen die Stärken von Scala als Sprache wahrnehmen, um die angebotenen Funktionen voll zu nutzen. Sie wurde entwickelt, um die Einschränkungen von Java zu beseitigen und bietet eine gut organisierte und sauberere Sprache.
Do you have IT recruitment needs?
Das Erstellen komplexer Anwendungen ist von Natur aus schwierig. Eine monolithische Architektur eignet sich besser für einfache, leichte Anwendungen. Es ist wichtig, die monolithische Architektur zu verstehen, da sie die Grundlage für die Microservices-Architektur darstellt, bei der jeder Dienst für sich gemäß der monolithischen Architektur implementiert wird.
Das Microservice-Muster ist eine bessere Wahl für komplexe, sich entwickelnde Anwendungen. Tatsächlich dreht sich beim Microservices-Ansatz alles um die Handhabung eines komplexen Systems. Zu diesem Zweck führt der Ansatz jedoch eine Reihe von Komplexitäten und Implementierungsherausforderungen ein.
Insgesamt ist es empfehlenswert, die Anwendung in Microservices zu unterteilen, aber auf der anderen Seite erfordert dies auch mehr technische Arbeit. Deshalb bauen viele Startups ihren MVP als Monolithen.
Java-Entwickler haben Zugriff auf eine Vielzahl von Open-Source-Big-Data-Tools: Apache Hadoop, Apache Spark und viele mehr. Die meisten Java-Ingenieure können problemlos ein neues Big-Data-Tool übernehmen, da es sich um das Erlernen einer neuen API handelt. Einige der Kernmodule dieser Tools sind in Java oder in Scala geschrieben.
In unseren anderen Blog-Beiträgen erfahren Sie mehr über Big Data in Financial Services und können sich mit den grundlegenden Begriffen zu Big Data und Data Analytics vertraut machen.
Versuchen Sie nach Möglichkeit, Tools und Ansätze wie Docker, infrastructure-as-a-code (Kubernetes, Terraform) und kontinuierliche Integration in Ihren Projekten zu verwenden. Im Rahmen neuer Projekte sind diese unerlässlich.
Bis 2022 wird der DevOps-Markt einen Wert von 6,6 Milliarden US-Dollar erreichen. Man kann also mit Recht sagen, dass neue Verfahren und moderne Technologien den Technologiemarkt prägen werden. Wollen Sie schnellere und effizientere Bereitstellungen durchführen? In diesem Fall sollte die Anwendung der Automatisierung auf Ihrer Tagesordnung stehen.
Wir wissen, dass sich jeder an Java 7 oder 8 gewöhnt hat, aber jetzt ist es Zeit, auf die neueste Version von Java umzusteigen. Oracle unterstützt Java 8 nicht mehr. Es liegt also an Ihnen, neu hinzugefügte Funktionen herunterzuladen und zu installieren und Ihr Team zu ermutigen, diesen Schritt jetzt auszuführen. Jede neue Java-Version verfügt über viele Funktionen und Verbesserungen, die Sie in Ihrem Projekt verwenden können.
Bei der Aktualisierung einer sehr alten Anwendung sollten sorgfältige, schrittweise Aktualisierungen in Betracht gezogen werden, die durch umfangreiche automatisierte und manuelle Tests des Systems, seiner Komponenten, Kernfunktionen und miteinander verbundenen Anwendungen verstärkt werden.
Aktualisieren Sie also zuerst von Java 7 auf Java 8 in einer Staging-Umgebung, testen Sie das System gründlich, gehen Sie zur Produktion über und experimentieren Sie dann mit den Updates für Java 9.
Wenn die Version des Java-Systems noch älter ist – und wir waren kürzlich an einem Unternehmensprojekt beteiligt, das Java 4 (!) verwendet -, wird die Aktualisierung mit Sicherheit eine Herausforderung sein, und Sie benötigen dafür hochklassige Ingenieure. Je länger Sie warten, desto schwieriger wird es. Ergreifen Sie jetzt die nötigen Maßnahmen.
Es ist sehr wichtig, dass die Dokumentation ab dem ersten Entwicklungstag erstellt und regelmäßig aktualisiert wird. Dadurch enthalten die Dokumente alle notwendigen Informationen, um die Softwareanalyse und die mögliche Implementierung neuer Mitarbeiter zu erleichtern.
Und selbst später, wenn das System in andere Module oder APIs (entweder extern oder intern) integriert wird, sollte der Prozess ebenfalls gut dokumentiert sein. Dann ist es keine separate Anwendung mehr, sondern ein Live-Ökosystem von IT-Lösungen, die koexistieren und miteinander kommunizieren.
Überlegen Sie, wie viel teurer und schwieriger es wäre, Änderungen in fünf Jahren vorzunehmen, wenn Sie jetzt keine Maßnahmen ergreifen und die Änderungen dokumentieren.
Vermeiden Sie es, die Ausnahmen hinzunehmen. Der Stack-Trace ist die wertvollste Information zur Fehlerbehebung. In dem Produktionssystem, in dem es vorrangig darum geht, das System aufzurufen und dann die Grundursache zu finden, sind diese Ausnahmen wertvoll, da Sie ohne diese niemals feststellen können, was in diesem Moment mit Ihrer Anwendung passiert ist.
Drucken Sie die Stapelverfolgung andererseits nicht mehrmals. Das Drucken eines Stack-Trace ist ein ressourcenintensiver Prozess und sollte gesteuert werden, d. h. man sollte mehr Informationen im DEBUG- oder INFO-Modus, und nur wichtige Informationen im PRODUCTION-Modus drucken.
Dies ist einer der häufigsten Gründe für Produktionsprobleme im letzten Jahrzehnt. Stellen Sie sicher, dass Sie die Datenbankverbindung immer schließen, damit sie wieder für den Pool freigegeben wird. Dies ist auch eine der Best Practices von JDBC.
Ein häufiger Fehler besteht darin, die Verbindung nicht im letzten Block eines Try-Catch zu schließen. Wenn ein Verbindungspoolleck vorliegt, ist Ihr Verbindungspool bald erschöpft und Ihr Benutzer wird eine Verlangsamung wahrnehmen.
Es gilt die Verwendung einer Produktionsdatenbank für Systemtests zu vermeiden – dafür sollten Mocks verwendet werden. Komischerweise haben wir vor einiger Zeit einen Vertrag für eine Investmentbank abgeschlossen, die genau das getan hat.
Infolgedessen waren die Tests sehr ressourcenintensiv, wirkten sich auf die Leistung des Produktionssystems aus und die Coverage war gering (angeblich als Kompromiss für die Leistung). Das sollte vermieden werden.
Do you have IT recruitment needs?
Dies ist einer der häufigsten Fehler von Anfängern und fortgeschrittenen Java-Programmierern, die nichts über Paging oder Paginierung wissen. Sie können nicht einfach jeden Datensatz, z.B. Bestellung oder Handel, aus der Datenbank in einem Aufruf laden.
In einigen Fällen geht Ihnen natürlich der Speicher aus und es stellt auch eine Verschwendung von Netzwerkbandbreite, CPU und Speicher dar, weil der Benutzer möglicherweise nicht alle diese Daten benötigt. Zweitens können Sie die Daten nicht für immer in Ihrer Anwendung behalten, da sie möglicherweise veraltet sind und diese erneut geladen werden müssen.
Anstatt alle Datensätze auf einmal zu laden, sollte man eine Art Paginierung oder verzögertes Laden implementieren, damit nicht alles am Anfang geladen werden muss.
Es gibt kaum einen Code, in dem etwas nicht fest codiert ist – insbesondere wenn Zeitdruck oder enge Budgetbeschränkungen bestehen – wird so für Werte wie URLs, Verzeichnispositionen, Benutzernamen / Kennwörter, Cache-Größen, Protokollstufen usw. verfahren, führt der Code zu einem Produkt, das schwer zu warten, nicht übertragbar und schwer anzupassen ist.
Anstatt Konfigurationsparameter fest zu codieren, müssen diese in einer Eigenschaftendatei externalisiert werden – hierbei ist das YAML-Format eine der beliebtesten Optionen. Es ist nicht nur leicht von der Maschine zu analysieren, sondern auch für einen Menschen gut lesbar (auch wenn es nicht technisch ist).
Obwohl Java plattformunabhängig ist, können Sie Ihre Java-Anwendungsplattform abhängig machen, wenn Sie nicht aufpassen. Programmierer sollten nichts codieren, was mit dem lokalen Betriebssystem zusammenhängt, sondern darauf abzielen, Dinge zu abstrahieren, die sie übertragbarer, universeller und leichter zu warten machen.
Das Packen von Utility-JAR-Dateien an mehreren Stellen, insbesondere verschiedener Versionen derselben Utility-JAR an verschiedenen Orten, ist die Ursache für viele Produktionsprobleme.
Sie müssen über eine saubere Build- und Versionsverarbeitung verfügen, insbesondere für interne Anwendungen. Erwägen Sie die Verwendung von Maven für das Abhängigkeitsmanagement. Dies ist wesentlich leichter, als versionierte JAR-Dateien im lib-Ordner zu speichern.
Die genannten Dinge können einen enormen Unterschied bei der Entwicklung und Wartung einer realen Java-Anwendung bewirken. Wenn Sie diese Details beachten, können Sie Ihr Projekt stärker vorantreiben. Ein guter Java-Architekt stellt sicher, dass die Anwendung sowohl einfach zu warten als auch zu unterstützen ist.
Die Einstellung effektiver und freiberuflicher Java-Entwickler ist nicht gerade einfach. Sie müssen viel Zeit und Mühe investieren, um die besten Kandidaten aus einem riesigen Talentpool auszuwählen. Wir hoffen, dass die oben genannten Richtlinien Ihnen dabei helfen, den gesamten Prozess zu rationalisieren, sodass Sie talentierte und zu Ihren Projekten passende Mitarbeiter/innen finden werden.
DevsData – a premium technology partner
DevsData is a boutique tech recruitment and software agency. Develop your software project with veteran engineers or scale up an in-house tech team with developers with relevant industry experience.
Free consultation with a software expert
🎧 Schedule a meeting
“DevsData LLC is truly exceptional – their backend developers are some of the best I’ve ever worked with.”
Nicholas Johnson
Mentor at YC,
Ex-Tesla engineer,
Serial entrepreneur
Categories: Big data, data analytics | Software and technology | IT recruitment blog | IT in Poland | Content hub (blog)
“I interviewed about a dozen different firms. DevsData LLC is truly exceptional – their backend developers are some of the best I’ve ever worked with. I’ve worked with a lot of very well-qualified developers, locally in San Francisco, and remotely, so that is not a compliment I offer lightly. I appreciate their depth of knowledge and their ability to get things done quickly. “
Nicholas Johnson
CEO of Orange Charger LLC,
Ex-Tesla Engineer,
Mentor at YCombinator