Quesiti tecnici per il reclutamento di sviluppatori

March 15, 2017 | Author: Davide Gurgone | Category: N/A
Share Embed Donate


Short Description

Download Quesiti tecnici per il reclutamento di sviluppatori...

Description

Sviluppo Web

Quesiti per la valutazione di uno sviluppatore Java

Sviluppo web: conoscenza generale Conoscenza di base dell’ambito web, HTTP

Cos'è HTTP? Acronimo di HyperText Transfer Protocol, ovvero il protocollo di trasferimento dati, usato per scambiare documenti ipertestuali ed elementi a corollario (img, js, css). Un server HTTP resta generalmente in ascolto sulla porta 80 e serve le richieste dei client, usando il protocollo TCP a livello 4 (trasporto). Livelli TCP

Livello

Descrizione

7

Livello di applicazione

6

Livello di presentazione

5

Livello di sessione

4

Livello di trasporto

3

Livello di rete

2

Livello di collegamento dati

1

Livello Fisico

Non è essenziale conoscere i livelli tcp per essere buoni sviluppatori, ma sapere quanto il candidato conosce in questa materia può essere utile per capire il grado di preparazione. Una risorsa HTTP può essere identi!cata univocamente tramite il proprio URI (uniform resource identi!er), per esempio http://davide.gurgone.it/index.html HTTP è stato progettato per la scalabilità dei servizi, pertanto non è previsto il concetto di sessione, al !ne di consentire la replica speculare, su più istanze server, della stessa risorsa. Per poter proter proteggere i dati si prevede l’uso dell’header Authentication Basic. L’autenticazione avviene così ad ogni richiesta.

Quali sono i metodi HTTP?

Per gestire la comunicazione tra client e server, HTTP mette a disposizione alcuni metodi, discussi di seguito.

Pagina 1 - 10

Metodo GET

Funzione (in sintesi) Usato per ottenere il contenuto indicato come URI

POST

Usato per inviare informazioni al server

HEAD

Analogo a GET, ma restituisce solo le intestazioni della risposta

PUT DELETE

Usato per aggiornare una risorsa sul server Usato per eliminare una risorsa sul server

TRACE

Strumento di monitor, restituisce al client la richiesta e"ettuato

OPTIONS

Nel colloquio client server, restituisce le modalità di dialogo per ottenere una risorsa

CONNECT

Usato per instaurare un tunnel verso la risorsa desiderata

I browser moderni gestiscono ancora solo GET e, tramite uso di form, POST. Per utilizzare gli altri metodi è necessario utilizzare codice JavaScript, per eseguire richieste asincrone.

Cosa si intende per idem-potenza?

un metodo HTTP può essere idempotente, quando la stessa richiesta ripetuta più volte, produce lo stesso identico risultato. È il caso tipico di GET ed HEAD. È importante in un sistema conoscere questo concetto al !ne di ottimizzare le chiamate, mediante meccanismi di caching adeguati.

Cos'è lo sviluppo REST di un applicazione? Representational State Transfer, modalità o stile di sviluppo che prevede l’uso consapevole del protocollo HTTP. Per comprendere appieno lo sviluppo rest, si immagini di avere le proprie risorse come fossero su un !lesystem, in un albero di directory reale e dover utilizzare i metodi HTTP per potervi accedere in lettura / scrittura:

Metodo

Richiesta

Risultato

http://treis.it/clienti

Mostra l’elenco dei clienti della propria azienda

POST

http://treis.it/clienti/facebook

Aggiungi Facebook tra i clienti

GET

http://treis.it/clienti/facebook

Mostra l’anagra!ca di Facebook

PUT

http://treis.it/clienti/facebook

Aggiorna le informazioni del cliente

http://treis.it/clienti/swteam

Elimini un vecchio cliente

GET

DELETE

Pagina 2 - 10

Sviluppare utilizzando rotte di questo tipo consente di mantenere ordine nel sito, nel codice e poter sviluppare meglio i sistemi di cache.

Cos'è un virtualhost

Il Virtual Hosting è un metodo tecnico per poter ospitare più domini internet, solitamente siti web e domini di posta elettronica, in un singolo server con un singolo indirizzo IP. Questo metodo tecnico permette una maggiore e#cienza delle risorse utilizzare ed un più facile controllo poiché tutto è concentrato in un singolo sistema. Questa condizione rende però condivisi i rischi eventuali legati ad un uso improprio di un singolo dominio ospite.

Cos'è Apache

Uno dei più usati HTTP Server al mondo, soprattutto in ambiente linux / unix.

Cos'è NGINX

Web Server / Reverse proxy di abbastanza recente costruzione, molto leggero ed ad altissime prestazioni

Cos'è il file hosts

File di testo che contiene il mapping tra un indirizzo IP ed il nome dell’host (dominio). Sovra-scrive localmente le informazioni presenti nel DNS

Pagina 3 - 10

Sviluppo web Server Side base / medio

Requisiti minimi, per cui uno sviluppatore può de!nirsi tale

Cos'è JDBC e che relazione c'è con un ORM? Java DataBase Connectivity - Connettore per database che consente l'accesso alle basi di dati da qualsiasi programma scritto con il linguaggio di programmazione Java, indipendentemente dal tipo di DBMS utilizzato. Object-relational mapping - Un prodotto ORM fornisce, mediante un'interfaccia orientata agli oggetti, tutti i servizi inerenti alla persistenza dei dati, astraendo nel contempo le caratteristiche implementative dello speci!co DBMS utilizzato. Un ORM utilizza tipicamente JDBC, per accedere allo speci!co DBMS, mediante l’uso di speci!ci JDBC Driver.

Conosci un ORM in particolare? 

Un ORM in java può aderire allo standard JPA, che ne de!nisce le speci!che. Hibernate e TopLink (Oracle), sono tra i più di"usi.

Cos'è la JVM? Java Virtual Machine - Componente della piattaforma Java che esegue i programmi tradotti in bytecode dopo una prima compilazione. La JVM nasce come interprete, tuttavia, a seguito dell’introduzione di compilatori Just In Time, il bytecode viene compilato in linguaggio macchina. Questo conferisce alle applicazioni Java alte performance.

Cos'è il byte code?

Il bytecode è generalmente prodotto dalla compilazione di codici sorgenti (o !le sorgenti) scritti in linguaggio Java, anche se è possibile produrre bytecode partendo da altri linguaggi come Scala, Clojure o Groovy.

Quali sono le alternative alle JSP, perché si usano? Java Server Pages - Tecnologia di programmazione Web in Java per lo sviluppo della logica di presentazione. Si basa su un insieme di speciali tag, all'interno di una pagina HTML, con cui possono essere invocate funzioni prede!nite. In aggiunta, permette di creare librerie di nuovi tag che estendono l'insieme dei tag standard. Le librerie di tag JSP si possono considerare estensioni indipendenti dalla piattaforma delle funzionalità di un Web server, pertanto è di#cilmente scindibile da esso. Freemarker, Velocity, StringTemplate Nascono con lo scopo di poter renderizzare pagine web ed altri documenti tipicamente testuali, fuori dal contesto di un web server. Alcuni di questi sono poi stati integrati tra i layer di sviluppo web. Pagina 4 - 10

Oltre a questi, vi sono numerosi altri strumenti di templating, orientati al web, principalmente di derivazione da altri linguaggi di programmazione, come HAML, Mustache, ERB (Ruby On Rails). Questi ultimi sono stati studiati per eliminare la complessità o dal lato di sviluppo o dal lato del designer.

Cosa cos'è un IOC container? Inversion of Control - Le dipendenze tra i singoli componenti sono dichiarate in modo semplice. Per esempio una classe Automobile che necessita di un'oggetto di tipo Motore, dichiarerà una variabile di istanza di tipo Motore e un metodo per impostare a run-time il riferimento all'oggetto. Le dipendenze possono quindi essere "iniettate" dall'esterno: non si segue il normale $usso di controllo dei linguaggi imperativi, in cui, nel momento del bisogno, si richiamano funzioni di classi o librerie esterne. Gli oggetti non istanziano e richiamano gli oggetti dal quale il loro lavoro dipende, ma queste funzionalità vengono fornite da un ambiente esterno tramite dei contratti de!niti da entrambe le entità. Dependency injection - È una delle tecniche con le quali si può attuare l'IoC. Essa prende il controllo su tutti gli aspetti di creazione degli oggetti e delle loro dipendenze. La libreria Java Spring usa molto di"usamente la Dependency Injection con il risultato, tra le altre cose, di eliminare dal codice applicativo ogni logica di inizializzazione. Normalmente, senza l'utilizzo di questa tecnica, se un oggetto necessita di accedere ad un particolare servizio, l'oggetto stesso si prende la responsabilità di gestirlo, o avendo un diretto riferimento al servizio, o individuandolo con un "Service Locator" che gli restituisce un riferimento ad una speci!ca implementazione del servizio. Con l'utilizzo della dependency injection, l'oggetto ha in sé solamente una proprietà che può ospitare un riferimento a quel servizio, e quando l'oggetto viene istanziato, un riferimento ad una implementazione di questo servizio gli viene iniettata dal framework esterno, senza che il programmatore che crea l'oggetto sappia nulla sul suo posizionamento del servizio o altri dettagli sullo stesso.

Come sviluppare Test Driven Drive? TDD - è un processo di sviluppo del software in cui lo sviluppo vero e proprio è preceduto e guidato dalla stesura di test automatici. In java lo sviluppo dei test unitari avviene tramite jUnit e prevede che si scriva il codice di test, seguito dall’implementazione che risponde a tale test. Chiamati in sequenza, i test unitari, danno subito evidenza dell’introduzione di nuovi errori, in fase di modi!ca. Molti tool consentono, mediante report, di mostrare tali problematiche.

Pagina 5 - 10

Quali sono i layer applicativi più comuni per un'applicazione web e che utilizza un DBMS? Layer

Utilizzo

Templates

JSP / Freemarker, produzione di HTML, CSS, Javascript

Controller

Acquisizione dati, Content Negotiation, richiama i services

Services

Elabora la Business Logic, Richiama i metodi di accesso ai dati

Data Access

Metodi di accesso ai dati

Entity Bean

Modello dei dati usato dall’applicazione

A seconda della complessità del progetto, services e data access layer potrebbero essere condensati in uno solo.

Sviluppo Frontend

Spesso lo sviluppatore java si scontra con tematiche non necessariamente di competenza java. Lo sviluppo frontend, seppur contiene elementi strettamente creativi e poco analitici, in alcune sue componenti dev’esser compreso per poter fare applicazioni di qualità.

Cos'è una chiamata AJAX? Asynchronous JavaScript and XML requests - tecnica di sviluppo software per la realizzazione di applicazioni web interattive. Lo sviluppo di applicazioni HTML con AJAX si basa su uno scambio di dati in background fra web browser e server, che consente l'aggiornamento dinamico di una pagina web senza esplicito ricaricamento da parte dell'utente. AJAX è asincrono nel senso che i dati extra sono richiesti al server e caricati in background senza interferire con il comportamento della pagina esistente. Normalmente le funzioni richiamate sono scritte con il linguaggio JavaScript. Tuttavia, e a dispetto del nome, l'uso di JavaScript e di XML non è obbligatorio, come non è necessario che le richieste di caricamento debbano essere necessariamente asincrone.

Cos'è JSON? JavaScript Object Notation - formato adatto per lo scambio dei dati in applicazioni client-server. È basato sul linguaggio JavaScript, ma ne è indipendente. Viene usato in AJAX come alternativa a XML/XSLT. La semplicità di JSON ne ha decretato un rapido utilizzo specialmente nella programmazione in AJAX. Il suo uso tramite JavaScript è particolarmente semplice, infatti l'interprete è in grado di eseguirne il parsing tramite una semplice chiamata alla funzione eval(). Pagina 6 - 10

Questo fatto lo ha reso velocemente molto popolare a causa della di"usione della programmazione in JavaScript nel mondo del Web.

Cos'è JSONP?

La cosiddetta same-domain-policy è una restrizione presente nei recenti browser che impedisce a script scaricati dalla rete di accedere, tramite qualsiasi tipo di richiesta HTTP, a risorse che si trovano su server diversi rispetto a quello iniziale che ha inviato lo script. Questa inibizione non riguarda solo host diversi tra di loro, ma anche processi in ascolto su porte diverse della stessa macchina. JSONP è l’acronimo di JSON with Padding e rappresenta una tecnica che permette di ovviare a questa limitazione permettendo a un browser di accedere, ovviamente con alcuni limiti, a risorse remote indipendentemente dall’host di origine. Uno dei modi per accedere a script on-demand è quello di modi!care il DOM della pagina inserendo un nuovo tag all’interno della testata del documento. Questo approccio, nonstante permetta di accedere a !le JavaScript remoti, presenta un grosso limite: non si ha infatti  controllo sul codice generato da questa richiesta che verrà eseguoto automaticamente dall’interprete JavaScript appena lo riceverà dal server. JSONP può essere visto come un’estensione a questo approccio che permette di invocare una funzione di callback automatizzata al ricevimento di dati.

Cos'è jQuery?

Libreria di funzioni Javascript, cross-browser per le applicazioni web, che si propone come obiettivo quello di sempli!care la programmazione lato client delle pagine HTML. Fornisce tutti gli strumenti per selezionare elementi all’interno del DOM di una pagina web, manipolarli, modi!care CSS, gestire gli eventi, e"ettuare chiamate AJAX, applicare e"etti di transizione. jQuery si è di"uso enormemente grazie alla potenza espressiva della libreria, che consente di comprendere il funzionamento delle operazioni anche da parte di operatori non prettamente sviluppatori.

Come funziona jQuery?

Alla base di jQuery c’è un forte uso di regular expression, una profonda conoscenza Javascript ed il lavoro della community, molto attiva. Peculiarità della libreria sono il keychaining, che consente di operare in sequenza numerose attività, manipolando l’oggetto per modi!cazioni successive: Carica lista clienti $(‘a.loadClienti’) .addClass(‘red’) .text(‘Carica elenco clienti’);

Pagina 7 - 10

Il passaggio di contesto tramite funzioni apply() e call().

Cosa sono apply e call in Javascript?

Javascript è un linguaggio procedurale (c) ad oggetti (c++) e funzionale (lisp). È primo nel suo genere, incorpora funzionalità di linguaggi di tipo diverso. Oggi queste stesse funzionalità sono state largamente replicate da linguaggi come Ruby, Scala, Groovy. call ed apply sono le funzioni che permettono di assegnare il contesto di esecuzione ad una data funzione javascript. Sono sostanzialmente analoghe, si distinguono per la modalità con cui applicare i parametri.

A parte jQuery, quali librerie Javascript conosci?

Le più di"use sono: Prototype, Ext JS, Dojo Toolkit, MooTools, Script.aculo.us

Quali framework di frontend utilizzi maggiormente? Twitter Bootstrap, Foundation, Zimit

Perché è comodo usare un framework di frontend?

Un framework di frontend (html5 / css3 / Javascript) consente di dedicarsi interamente alla prototipazione, senza dover dedicare del tempo a ride!nire il css per la maggior parte degli oggetti comuni, come form, bottoni, immagini, etc. L’uso di griglie consente di avere un risultato ottimo, senza scrivere particolari CSS, consentendo una veloce prototipazione.

Sviluppo Java Medio

Fammi alcuni esempi di linguaggi che usano la JVM jruby, groovy, javascript, vbs

Che cos'è la reflection

Un programma Java in esecuzione può esaminare le classi da cui è costituito, i nomi e le signature dei loro metodi, e così via. Il supporto per la re$ection costituisce una delle più notevoli innovazioni di Java, che deriva da una tradizione di linguaggi (C, C++) in cui tutte le informazioni di tipo vengono consumate dal compilatore, al punto che il programma in esecuzione non ha neppure nozione di come la propria memoria sia suddivisa in variabili. Leone leone = (Leone) Class.forName(“it.treis.animali.Leone”); La re$ection è alla base del funzionamento di numerosi framework. Ogni volta che si con!gura il WEB-INF/web.xml di una web application o si descrive il comportamento di Spring tramite !le xml, si predispone l’applicativo all’uso della re$ection. Con le annotazioni il comportamento è parzialmente cambiato, spostando la risoluzione delle classi anche in fase si compilazione. Pagina 8 - 10

Che cos'è un'annotazione?

È un modo per aggiungere metadati nel codice sorgente Java che possono essere disponibili al programmatore durante l'esecuzione. In fase di con!gurazione di un’architettura applicativa, è usata come alternativa alla tecnologia XML.

Cosa si può annotare? (Metodi, Classi, Proprietà, Package, nessuno di questi) È possibile annotare tutte queste cose.

Cos'è JPA? Java Persistence API - framework per il linguaggio di programmazione Java che si occupa della gestione della persistenza dei dati di un DBMS relazionale. Le API JPA sono state nate a partire dal lavoro di Hibernate Annotation, sono state estese e standardizzate.

Che relazione c'è tra Hibernate e JPA?

Hibernate risponde all’esigenza di standardizzare l’accesso alla base dati, senza la complicazione introdotta con gli standard EJB. JPA si basa su questo lavoro.

Che relazione c'è tra Spring e JPA?

Spring è un framework molto esteso che comprende tanti ambiti diversi, nello sviluppo di applicativi Java. In un’applicazione Spring e Hibernate (jpa), il primo si occupa di instanziare gli oggetti necessari al funzionamento dell’implementazione JPA scelta, per esempio Hibernate.

Cos'è lo stacktrace?

È il report degli stack frame ad un certo istante di tempo, durante l’esecuzione di un applicazione. La stampa dello stacktrace, in caso di eccezione, fornisce l’indicazione completa dell’origine di tale eccezione (o almeno ci prova nda).

Sviluppo Java Avanzato (Senior) A che livello vengono risolte le annotazioni? (Compile, Runtime, Entrambi) Entrambi. Le annotazioni sono state studiate per fornire meta-informazioni su più livelli. In fase di Runtime, tali informazioni sono esportate agli oggetti instanziati e possono essere utilizzate per modi!care il comportamento di un componente. I più noti framework ne fanno largo uso e la facilità di produzione / uso di un’annotazione, hanno facilitato la di"usione di tale pratica.

Cosa sono i Generics?

Servono per poter costruire collezioni di dati omogenee e fornire indicazioni sulla tipologia dei dati, in fase di compilazione.

Pagina 9 - 10

Essendo risolti in fase di compilazione, il limite è facilmente aggirabile, resta pertanto una pratica usata in fase di sviluppo.

Da quale release Java sono stati introdotti i Tipi Generici? Java 5.

A che livello vengono risolti i tipi generici? (Compile, Runtime, Entrambi) A causa di problemi legati alla retro-compatibilità, i tipi generici sono risolti in fase di compilazione.

Che cos'è lo Heap?

Area di memoria riservata allo storage degli oggetti java.

Che cos'è la Permanent Generation?

Area di memoria riservata allo storage delle informazioni legate ad una classe che sta caricando.

Quando viene usata la Permanent Generation?

Ogni volta che viene instanziato un oggetto java, si preleva il codice immagazzinato nella heap, in mancanza di questo, il ClassLoader provvederà a cercarlo nel classpath.

Che cos'è un thread?

è la suddivisione di un processo in più sottoprocessi, che vengono eseguiti in concorrenza da un sistema di elaborazione monoprocessore o multiprocessore.

In un'applicazione web classica, quando ci si deve occupare dei thread?

(Qui lo becchi subito un impostore, se ti campa per aria una risposta non sa cosa sono i thread. La risposta più semplice è «Mai», la più articolata è «Ce ne occupiamo solo se dobbiamo scrivere un application server», la più sistemistica è «Ce ne occupiamo solo in fase di tuning dell'application server» )

Pagina 10 - 10

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF