Développeur(se) Fullstack Java/ Angular F/H
toHero
Montpellier, FR1 month ago
24 views11 saves0 applies
Prepare for this role
Job Type
full time
Description
L'entreprise toHero est un studio de développement fondé en 2015 expert en transformation digitale et en technologie open source qui opère aussi bien pour des clients grands comptes que pour des PME et des start-ups. Nous proposons une offre à 360° sur tous les sujets de transformation digitale : audits, identification de besoins, chantier UX/UI, développement, hébergement, infogérance, maintenance et formation. La force de toHero réside dans notre culture axée sur la transparence, la qualité et le delivery management. Nous sommes constamment à la recherche de collaborateurs en mesure d'apporter de nouvelles perspectives et de nouvelles expériences à nos clients. Si tu recherches un lieu de travail stimulant, rempli de défis technologiques et de bonne humeur, n'hésite plus et rejoins-nous ! Plus d’informations : www.tohero.fr Description du poste Dans le cadre de notre croissance, tu intégreras notre équipe en tant que développeur d'applications Web métiers, sous la responsabilité directe du chef de projet. Ta mission principale sera de spécifier et de concevoir des applications métiers Web innovantes, tout en assurant une réponse précise aux besoins spécifiques de nos clients. Missions principales : Participer aux évolutions et correctifs : Tu interviendras dans un environnement Monorepo NX, en contribuant à l'amélioration continue de nos applications existantes. Apporter une valeur ajoutée : En intégrant une équipe technique composée de développeurs Angular et Java, tu contribueras activement à l’optimisation des processus de développement et à l’implémentation de nouvelles fonctionnalités. Promouvoir les bonnes pratiques : En tant qu'expert d'Angular/JAVA, tu seras porteur des bonnes pratiques de développement, garantissant ainsi la qualité et la maintenabilité du code produit. Réaliser des tests unitaires : Tu participeras à l’écriture et à l’exécution de tests unitaires pour assurer la robustesse et la fiabilité des applications développées. Garantir la maintenabilité applicative : Tu veilleras à ce que les applications soient conçues de manière à être facilement maintenables, permettant ainsi une évolutivité dans le temps. Profil recherché Compétences requises : Pour répondre de manière optimale aux exigences de ce poste, il est essentiel que tu disposes des compétences suivantes : Maîtrise d'Angular : Une connaissance approfondie de ce framework est indispensable pour le développement d'applications dynamiques et performantes. Maîtrise de Java et Spring : Une solide expérience avec ces technologies est nécessaire pour assurer le bon fonctionnement et l’évolution de nos applications. Autonomie sous Ubuntu (Linux) : Une bonne maîtrise de l’environnement Linux est requise, te permettant de travailler efficacement et de résoudre les problèmes qui peuvent survenir. Rigoureux et pragmatique, tu as le sens du travail en équipe et du travail bien fait. De formation BAC+5 ou BAC+3, tu justifies d'une première expérience d’au moins 2 ans sur un poste similaire. Ambiance et rémunération : Chez toHero, la bonne humeur est toujours la bienvenue, et nous croyons fermement que la convivialité contribue à la performance collective ! La rémunération que nous proposons pourra varier en fonction de ton niveau technique, de ton expérience ainsi que de tes compétences. Nos avantages Tickets restaurant Mutuelle d'entreprise Les croissants du vendredi ! CE actif Réf: 6cc7e777-c1e9-4a29-a633-d1366c2e3374 Je postule à cette offre Développeur(se) Fullstack Java/ Angular F/H CDI Temps plein Montpellier Civilité * Madame Monsieur Mx Nom * Prénom * E-mail * Numéro de téléphone * Disponibilité * Sélectionnez votre disponibilité immédiate 15 jours 1 mois 2 mois 3 mois + 3 mois Attentes salariales (Brut/an) * Sélectionnez la tranche de salaire Inférieur à 15 000€ 15 000€ - 20 000€ 20 000€ - 25 000€ 25 000€ - 30 000€ 30 000€ - 35 000€ 35 000€ - 40 000€ 40 000€ - 45 000€ 45 000€ - 50 000€ 50 000€ - 55 000€ 55 000€ - 60 000€ 60 000€ - 65 000€ 65 000€ - 70 000€ 70 000€ - 75 000€ 75 000€ - 80 000€ 80 000€ - 85 000€ Supérieur à 85 000€ Photo Choisir un fichier Format autorisé: JPG. Poids maximum : 2 Mo. CV * Choisir un fichier Format: .PDF, .DOCX, .DOC, .JPG. Poids max. : 2 Mo. Dans le cadre de la création de votre profil de candidature sur le site carrière de la société toHero , les informations recueillies ci-dessus sont traitées selon la base légale des mesures précontractuelles à la mise en relation avec la société toHero et à la conclusion d’un éventuel contrat de travail avec celle-ci, et selon l’intérêt légitime à la constitution d’une CVthèque. Aucun transfert hors de l’Union Européenne ne sera opéré. Sauf action de votre part, la durée de conservation de vos données n’excède pas 2 ans. En application des standards et des politiques de sécurité (PSSI) en vigueur, les mesures techniques efficaces et optimales sont appliquées aux traitements des données (accès et protocoles sécurisés, gestion des droits et administration, sensibilisations des collaborateurs, etc.). Conformément au règlement Européen relatif à la protection des données, vous disposez d’un droit d’opposition, d’accès de rectification, de suppression des présentes données. J'accepte que l'entreprise toHero conserve mes données personnelles pendant une durée de 2 ans afin d'être recontacté(e) pour de nouvelles opportunités --> --> Je postule Merci de bien vouloir compléter tous les champs obligatoires. (Les champs obligatoires sont suivis d'une *) * Champs obligatoires Partager l'offre &via=We_Recruit_" target="_blank" class="hover-color1"> Partager par email --> (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) { return; } js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/fr_FR/sdk.js#xfbml=1&version=v2.3"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.parentNode.insertBefore(js, fjs); t._e = []; t.ready = function(f) { t._e.push(f); }; return t; }(document, "script", "twitter-wjs")); $(".dropdown dt a").on('click', function() { $('ul[data-id=' + $(this).attr('data-id') + ']').slideToggle('fast'); }); $(document).bind('click', function(e) { var $clicked = $(e.target); if (!$clicked.parents().hasClass("dropdown")) { $(".dropdown dd ul").hide(); } }); $('.mutliSelect input[type="checkbox"]').on('click', function() { var inputId = $(this).attr('class'); var selectId = inputId.replace('custom-control-input checkbox-color1 checkbox-element question-', ""); var title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(), title = $(this).val() + ","; if ($(this).is(':checked')) { var html = ' ' + title + ' '; $('.multiSel-' + selectId).append(html); $(".hida-" + selectId).hide(); } else { $('span[title="' + title + '"]').remove(); var ret = $(".hida"); $('.dropdown dt a').append(ret); } }); var isSafari = !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/); if (isSafari) { var form = document.getElementById('form'); // form has to have ID: form.noValidate = true; form.addEventListener('submit', function(event) { // listen for form submitting if (!event.target.checkValidity()) { event.preventDefault(); // dismiss the default functionality document.getElementById('errorMessageDiv').style.display = 'block'; } }, false); } var questions = []; questions.forEach( function(q) { $('.question-' + q.id) .click( function() { if (q.type === 2 || q.type === 3) { var query = q.choices.find( function(c) { return $('#question-' + c.id).is(':checked'); }); if (query) { $('.question-' + q.id).attr("required", false); } else { $('.question-' + q.id).attr("required", true); } } }); }); (function(d, s, id) { var js, iajs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) { return; } js = d.createElement(s); js.id = id; js.async = true; js.src = "https://apply.indeed.com/indeedapply/static/scripts/app/bootstrap.js?hl=fr"; iajs.parentNode.insertBefore(js, iajs); }(document, 'script', 'indeed-apply-js')); $(".checkbox-element").each((index, element)=>{ $(element).on('click', function(){ var $this = $(this); var questionId = $this.data('question-id'); var otherCheckboxes = $('.question-'+questionId); var checkedElements = otherCheckboxes.toArray().filter(i=>$(i).is(':checked')); var questionInput = $("#question-"+questionId); questionInput.val(checkedElements.length ? "OK":""); questionInput.trigger('focus'); questionInput.trigger('blur'); window.formValidator.element("#question-"+questionId); }) }) $(document).ready(function() { $('.description-blocks a').attr('target', '_blank'); $('input[type="file"]').each(function(index, element){ $(this).change(function(){ $(this).blur().focus().blur(); }); }) }); $('#form').on('keyup keypress', function(e) { var keyCode = e.keyCode || e.which; if (keyCode === 13) { e.preventDefault(); return false; } }); $.validator.methods.phoneNumber = function(value, element) { return this.optional(element) || /^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,5})|(\(?\d{2,6}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/.test(value); }; window.formValidator = $("#form").validate({ ignore: [], rules: { phone: { required: true, phoneNumber: true }, }, errorPlacement: function(error, element) { console.log(error, element); error.addClass('invalid-feedback'); if (element.is('input[type=radio], input[type=checkbox]')) { element.parent().parent().append(error); } else { error.insertAfter(element); } }, highlight: function(element, errorClass, validClass) { $element = $(element); if ($element.is('input[type=hidden].qcm-field')) { var questionId = $element.data('question-id'); var div = $('div[data-question-id="' + questionId + '"]'); div.addClass(errorClass); div.find("button").addClass(errorClass); div.removeClass(validClass); div.find("button").removeClass(validClass); } else { $element.parent().addClass(errorClass).removeClass(validClass); $element.addClass(errorClass).removeClass(validClass); $element.parent().find("button").addClass(errorClass).removeClass(validClass); } }, unhighlight: function(element, errorClass, validClass) { $element = $(element); if ($element.is('input[type=hidden].qcm-field')) { var questionId = $element.data('question-id'); var div = $('div[data-question-id="' + questionId + '"]'); div.addClass(validClass); div.find("button").addClass(validClass); div.removeClass(errorClass); div.find("button").removeClass(errorClass); } else { $(element).parent().removeClass(errorClass).addClass(validClass); $(element).addClass(validClass).removeClass(errorClass); $(element).parent().find("button").addClass(validClass).removeClass(errorClass); } }, submitHandler: function(form) { var shouldSubmit = true; if (shouldSubmit) { form.submit(); var button = $('button[type="submit"]'); $('#loader').removeClass("hidden"); $('#submit-button').addClass("hidden"); $($('.cta-apply')[0]).addClass('hidden'); $($('.cta-apply')[1]).addClass('hidden') setTimeout(function() { button.attr('disabled', 'disabled'); button.prop('disabled', true); }, 0); } }, errorClass: "is-invalid", validClass: "is-valid", }); jQuery(document).ready(function($) { $(document).on('click', '.dropdown-menu', function(e) { e.stopImmediatePropagation(); e.stopPropagation(); }); }); jQuery.extend(jQuery.validator.messages, { required: "Ce champ est obligatoire", phoneNumber: "Ce numéro de téléphone est invalide", email: "Veuillez indiquer une adresse e-mail valide", }); var placeSearch; var autocompletes = []; var componentForm = { street_number: 'short_name', route: 'long_name', locality: 'long_name', administrative_area_level_1: 'short_name', country: 'long_name', postal_code: 'short_name' }; function initAutocompletes() { $('.custom-autocomplete').each((index, element) => { autocompletes.push({ element: element, autocomplete: new google.maps.places.Autocomplete(element, { types: ['geocode'] }) }); }); } function geolocate(element) { if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { var geolocation = { lat: position.coords.latitude, lng: position.coords.longitude }; var circle = new google.maps.Circle({ center: geolocation, radius: position.coords.accuracy }); var autocomplete = autocompletes.find(i => i.element === element).autocomplete; autocomplete.setBounds(circle.getBounds()); }); } } $(function() { $(".datepicker").each( function(index, element) { var $elem = $(element); $elem.datepicker($.datepicker.regional["fr"]); }); $(".ui-datepicker").addClass("font2"); }); { "@context" : "http://schema.org/", "@type" : "JobPosting", "title" : "D\u00E9veloppeur(se) Fullstack Java/ Angular F/H", "datePosted" : "2026-05-07T08:47:28+00:00", "hiringOrganization": { "@type": "Organization", "name": "toHero" , "logo": "https://wio.blob.core.windows.net/werecruit/0d2952c0-f918-48ff-a3e2-3853f3a99756.png" }, "jobLocation": { "@type": "Place", "address": { "@type": "PostalAddress", "addressLocality": "Montpellier", "addressRegion": "Occitanie", "postalCode": "34090", "addressCountry": "FR" } }, "description" : "\u003Cp\u003EDans le cadre de notre croissance, tu int\u0026eacute;greras notre \u0026eacute;quipe en tant que d\u0026eacute;veloppeur d\u0027applications Web m\u0026eacute;tiers, sous la responsabilit\u0026eacute; directe du chef de projet. Ta mission principale sera de sp\u0026eacute;cifier et de concevoir des applications m\u0026eacute;tiers Web innovantes, tout en assurant une r\u0026eacute;ponse pr\u0026eacute;cise aux besoins sp\u0026eacute;cifiques de nos clients.\u003C/p\u003E\n\u003Cp\u003E\u0026nbsp;\u003C/p\u003E\n\u003Cp\u003E\u003Cstrong\u003EMissions principales :\u003C/strong\u003E\u003C/p\u003E\n\u003Cul\u003E\n\u003Cli\u003EParticiper aux \u0026eacute;volutions et correctifs : Tu interviendras dans un environnement Monorepo NX, en contribuant \u0026agrave; l\u0027am\u0026eacute;lioration continue de nos applications existantes.\u003C/li\u003E\n\u003Cli\u003EApporter une valeur ajout\u0026eacute;e : En int\u0026eacute;grant une \u0026eacute;quipe technique compos\u0026eacute;e de d\u0026eacute;veloppeurs Angular et Java, tu contribueras activement \u0026agrave; l\u0026rsquo;optimisation des processus de d\u0026eacute;veloppement et \u0026agrave; l\u0026rsquo;impl\u0026eacute;mentation de nouvelles fonctionnalit\u0026eacute;s.\u003C/li\u003E\n\u003Cli\u003EPromouvoir les bonnes pratiques : En tant qu\u0027expert d\u0027Angular/JAVA, tu seras porteur des bonnes pratiques de d\u0026eacute;veloppement, garantissant ainsi la qualit\u0026eacute; et la maintenabilit\u0026eacute; du code produit.\u003C/li\u003E\n\u003Cli\u003ER\u0026eacute;aliser des tests unitaires : Tu participeras \u0026agrave; l\u0026rsquo;\u0026eacute;criture et \u0026agrave; l\u0026rsquo;ex\u0026eacute;cution de tests unitaires pour assurer la robustesse et la fiabilit\u0026eacute; des applications d\u0026eacute;velopp\u0026eacute;es.\u003C/li\u003E\n\u003Cli\u003EGarantir la maintenabilit\u0026eacute; applicative : Tu veilleras \u0026agrave; ce que les applications soient con\u0026ccedil;ues de mani\u0026egrave;re \u0026agrave; \u0026ecirc;tre facilement maintenables, permettant ainsi une \u0026eacute;volutivit\u0026eacute; dans le temps.\u003C/li\u003E\n\u003C/ul\u003E", "employmentType" : "FULL_TIME" } Nos dernières offres Chef de Projet web technico-fonctionnel F/H CDI Temps plein Montpellier Je postule Développeur PHP F/H CDI Temps plein Montpellier Je postule Business Developer (H/F) CDI Temps plein Montpellier Je postule Développeur(se) Fullstack Java/ Angular F/H CDI Temps plein Montpellier Je postule Voir plus d'offres Offres Candidature spontanée Liens utiles Cookies Plan du site Connexion recruteurs Préférences des cookies Propulsé par Logiciel de gestion de candidature et de multidiffusion $('#offers-block').on('click', function (event) { event.preventDefault(); var targetBlock = $(this).attr('href'); scrollTo($(targetBlock)); }); function scrollTo( target ) { console.log(target); if( target.length ) { $("html, body").stop().animate( { scrollTop: target.offset().top - 100 }, 1000); } } let isFacebookApp = function () { let ua = navigator.userAgent || navigator.vendor || window.opera; return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1); }; if (isFacebookApp()) { $('input[type=file]').removeAttr('accept'); } window.didomiConfig = {"$id":"1","cookies":{"$id":"2","didomiTokenCookieName":"tohero-didomi-token","iabCookieName":"tohero-iab","local":{"$id":"3","customDomain":"careers.werecruit.io"}},"app":{"$id":"4","name":"toHero","logoUrl":"https://wio.blob.core.windows.net/werecruit/0d2952c0-f918-48ff-a3e2-3853f3a99756.png","vendors":{"$id":"5","iab":{"$id":"6","all":false,"stacks":{"$id":"7","ids":null,"auto":true},"enabled":true,"exclude":[],"include":[573],"version":2,"restrictions":[]},"include":["c:googlemap-9N3cX3nh","c:googlemap-JmVpTQhR","c:indeed-3K8TJDqt","c:googleana-4TXnJigR","c:vimeo","c:youtube","c:azure-6AVFBHt8"],"didomi":["twitter","facebook","google"]},"privacyPolicyURL":null,"essentialPurposes":["cookiesst-96VCc9mM"],"gdprAppliesGlobally":true,"gdprAppliesWhenUnknown":false},"theme":{"$id":"8","css":".didomi-button-highlight {\n color: rgb(255,255,255) !important;\n}","font":"Open\u002BSans","color":"#F70085","linkColor":"#FFFFFF"},"notice":{"$id":"9","content":{"$id":"10","notice":{"$id":"11","fr":"Avec votre consentement, We Recruit et \u003Ca href=\u0022javascript:Didomi.preferences.show(\u0027vendors\u0027)\u0022\u003Enos partenaires\u003C/a\u003E utilisent les cookies ou des technologies similaires pour stocker, acc\u00E9der \u00E0 et traiter des donn\u00E9es personnelles telles que vos visites \u00E0 ce site Web, les adresses IP et les identifiants des cookies. Certains partenaires ne demand
This job is found at InterviewStack.io
Skills
angularjavalinuxjavascripthtmlphp