Documente Academic
Documente Profesional
Documente Cultură
NET
1.Ce inseamna internal, protected, public, private?
modificator
access
Explicatii
public
access nelimitat
acces permis doar in clasa sau spatiul de nume in
internal
care e cuprinsa
protected
private
protected
internal
- Vertraulich / Confidential -
explicatie
public
internal
protected
derivate
implicit. acces permis doar pentru
private
protected internal
functional
In lucrul cu multithreading-ul apare o problema majora, cea a sincronizarii: mai multe fire
de executii acceseaza acelasi obiect, simulan. Solutia vine de la lock: atunci cand
primul thread acceseaza obiectul, il va tine ocupat pana la incheiere.
Folosirea firelor de executie permite rularea proceselor simultan, dar acest lucru poate
incetini executia programului, daca nu sunt folosite cu atentie.
O aplicatie C# poate deveni multi-threading in doua moduri: fie explicit prin crearea si
rularea firelor de executie, fie prin folosirea unor caracteristici ale .Net care creeaza
- Vertraulich / Confidential -
SqlDataReader
Tipul SqlDataReader este folosit pentru a citi date in cea mai eficienta metoda posibila.
NU poate fi folosit pentru scriere.
O data citita o informatie nu mai poate fi citita inca o data.
SqlDataReader citeste secvential date.
Datorita faptului ca citeste doar inainte (forward-only) permite acestui tip de date sa fie
foarte rapid in citire.
Overhead-ul asociat este foarte mic (overhead generat cu inspectarea rezultatului
si a scrierii in baza de date). Daca intr-o aplicatie este nevoie doar de informatii care vor
fi citite o singura data, sau rezultatul unei interogari este prea mare ca sa fie retinut in
memorie (caching) SqlDataReader este solutia cea mai buna.
Obtinerea unei instante de tipul SqlDataReader este putin diferita de instantierea normala
- trebuie apelata metoda ExecuteDataReader. Daca pentru instantiere este folosit
operatorul new veti obtine un obiect cu care nu puteti face nimic pentru ca nu are o
conexiune si o comanda atasate.
SqlDataReader obtine datele intr-un stream secvential. Pentru a citi aceste informatii
trebuie apelata metoda Read; aceasta citeste un singur rand din tabelul rezultat. Metoda
clasica de a citi informatia dintr-un SqlDataReader este de a itera intr-o bucla while asa
cum se vede in figura 4
la liniile 32-35.
Metoda Read intoarce true cat timp mai este ceva de citit din stream.
SqlDataReader implementeaza si indexatori (am obtinut prima coloana in exemplul din
figura 4
folosind indexatori numerici). In exemplul din figura 4 nu este foarte clar pentru cineva
care
citeste codul ca acolo este vorba de coloana CustomerID (decat daca s-a uitat si in baza
de date).
Din aceasta cauza este preferata utilizarea indexatorilor de tipul string. In acest caz codul
devine:
// Obtine rezultatul interogarii
rdr = cmd.ExecuteReader();
// Afiseaza valoarea CustomerID a fiecarei inregistrari
while (rdr.Read())
{
Console.WriteLine (rdr["CustomerID"]);
}
Fig. 8: Folosirea indexatorilor asupra unui SqlDataReader.
Valoeare indexului trebuie sa fie numele coloanei din tabelul rezultat.
Indiferent ca se foloseste un index numeric sau unul de tipul string indexatorii intorc
totdeauna un obiect de tipul object fiind necesara conversia.
Dupa ce un reader nu mai este folosit acesta trebuie inchis apeland metoda Close
SqlDataAdapter
- Vertraulich / Confidential -
Pana acum am vazut cum putem efectua operatii asupra unei baze de date folosind
obiecte de tipul SqlCommand si SqlDataReader. Problema cu aceasta abordare este ca pe
parcursul intregii tranzactii conexiunea trebuie sa fie deschisa.
Voi prezenta in continuare o metoda care nu necesita o conexiune permanenta la o baza
de date - si anume folosind obiecte de tipul DataSet si SqlDataAdapter.
Un DataSet este o reprezentare in memorie a unui data store (un sistem de stocare si
obtinere a datelor). Un DataSet contine o multime de tabele asupra carora se pot executa
diverse operatii.
Un DataSet doar retine informatii si nu interactioneaza cu un data source.
SqlDataAdapter este cel care se ocupa administrarea conexiunilor cu data source si ofera
comportamentul de lucru in mod deconectat. SqlDataAdapter deschide o conexiune doar
atunci cand este nevoie si o inchide imediat ce si-a terminmat treaba. De exemplu
SqlDataAdapter realizeaza urmatoarele
operatiuni atunci cand trebuie sa populeze un DataSet:
1. deschide conexiunea;
2. populeaza DataSet-ul;
3. inchide conexiunea;
si urmatoarele operatiuni atunci cand trebuie sa faca update in baza de date:
1. deschide conexiunea;
2. scrie modificarile din DataSet in baza de date;
3. inchide conexiunea;
Intre operatiunea de populare a DataSet-ului si cea de update conexiunile la data source
sunt inchise.
Intre aceste operatii in DataSet se poate scrie sau citi. Acestea sunt mecanismele de a
lucra in mod deconectat. Pentru ca aplicatia tine deschisa conexiunea la baza de date
doar atunci cand este necesar, devine mai scalabila.
4. Poate avea un thread parametri?
Da.
Cel mai simplu mod de a crea un thread este sa instantiem un obiect Thread, al carui
constructor va cere ca parametru un delegate de tipul ThreadStart. Delegatul va indica
ce metoda va rula in thread.
Adaugam namespace-ul, mai intai:
usingSystem.Threading;
classNumara
{
//numara pana la 10
publicvoidZece()
{
Console.WriteLine("Simple Thread");
for(inti=0;i<=10;i++)
{
Console.WriteLine(i);
}
}
}
in main():
Numaranumara=newNumara();
//obiectul Thread
Threadthread1=newThread(newThreadStart(numara.Zece));
- Vertraulich / Confidential -
threaUnu.Start();
Codul de mai sus nu reflecta puterea firelor de executie multiple, pentru ca avem doar
unul. O sa adaugam inca un thread, o sa setam numele pentru o identificare mai usoara
si vom folosi proprietatea CurrentThread care va returna firul de executie curent.
//obiectul Thread
Threadthread1=newThread(newThreadStart(numara.Zece));
Threadthread2=newThread(newThreadStart(numara.Zece));
thread1.Name="Thread One";
thread2.Name="Thread Two";
thread1.Start();
thread2.Start();
publicvoidZece()
{
for(inti=0;i<=10;i++)
{
Console.WriteLine("{0},numara :
{1}",Thread.CurrentThread.Name,i);
}
}
5. Ce reprezinta remoting?
C# Remoting Architecture
The .NET Remoting provides an inter-process communication between Application
Domains by using Remoting Framework. The applications can be located on the same
computer , different computers on the same network, or on computers across separate
networks. The .NET Remoting supports distributed object communications over the TCP
and HTTP channels by using Binary or SOAP formatters of the data stream.
The main three components of a Remoting Framework are :
1. C# Remotable Object
2. C# Remote Listener Application - (listening requests for Remote Object)
3. C# Remote Client Application - (makes requests for Remote Object)
- Vertraulich / Confidential -
6. Ce reprezinta un WebService?
Un serviciu Web (Web Service) este o aplicatie Web de tip client-server, n care un server
furnizor de servicii (numit si "Service Endpoint") este accesibil unor aplicatii client (care
nu sunt de tip browser) pe baza adresei URL a serviciului. Serviciul Web si clientii si pot
rula pe platforme diferite si pot fi scrise n limbaje diferite,deoarece se comunic prin
protocoale standard HTTP, XML, SOAP, JSON, s.a. De aceea principalul merit al serviciilor
Web este acela c asigur interoperabilitatea unor aplicatii software implementate pe
platforme diferite si cu instrumente (framework-uri) diferite. In acelasi timp aplicatiile
sunt slab cuplate (loosely coupled), n sensul c mesajele schimbate sunt standard
(self-contained) si oricare dintre aplicatii nu presupune existenta la cellalt capt a
altor facilitti dect cele continute n standarde.
Din punct de vedere al tehnologiilor folosite exist dou tipuri de servicii Web:
- Servicii de tip REST ( RESTful Web Services), n care cererile de la client se exprim
prin comenzi HTTP (GET, PUT, POST,DELETE), iar rspunsurile sunt primite ca documente
XML sau JSON;
- Servicii de tip SOAP (Simple Object Access Protocol), n care cererile si rspunsurile au
forma unor mesaje SOAP (documente XML cu un anumit format) transmise tot peste
HTTP. In astfel de servicii furnizorul expune si o descriere a interfetei API sub forma unui
document WSDL (Web Service Description Language), care este tot XML si poate fi
prelucrat de client. Un client trebuie s cunoasc metodele oferite de ctre Service
Endpoint, pe care le poate afla din descrierea WSDL.
Serviciile de tip SOAP ofer mai mult flexibilitate, o mai bun calitate a serviciilor si
interoperabilitate dect serviciile REST si sunt recomandate pentru un API mai mare
oferit clientilor. Serviciile de tip SOAP pot fi combinate pentru realizarea de operatii
complexe, ceea ce a condus la o arhitectur orientat pe servicii (SOA=Service Oriented
Architecture).
7. Ce este ViewState? Care sunt dezavantajele de la ViewState?
Controalele ASP.NET au o proprietate extrem de important din punct de vedere al
performanei: i pstreaz starea ntre postback-uri. ViewState-ul, cci despre el e
vorba, ne ajut din acest punct de vedere, dar prezint i dezavantaje care vin cu
stocarea strii controalelor: dimensiunea paginii este mai mare, valorile trebuie
serializate / deserializate la salvare / citire din ViewState, etc. Partea bun a lucrurilor
este faptul c ViewState-ul poate fi dezactivat atunci cnd se consider c nu este
necesar.
Session tine informatia pe server, iar ViewState pe client. Sintaxa ViewState este identica
cu Session.
- Vertraulich / Confidential -
este echivalent cu
class Derived : private Base //...
pe cand
struct Derived : Base //...
este echivalent cu
struct Derived : public Base //...
Tranzactii automate sunt pornite si incheiate automat de catre server. Serverul initiaza
otranzactie in momentul inceperii unei instructiuni si in functie de succesul comenzii o incheie
sau o inverseaza
- Vertraulich / Confidential -
2.
Tranzactii implicite sunt tranzactii automate compatibile ANSI SQL-92. Sunt initializate
automat la executarea oricarei comenzi dar este necesara finalizarea explicit. Pentru a active
/dezactiva se utilizeaza comanda Transact-SQL IMPLICIT_TRANSACTIONS
3.
Tranzactii definite de utilizator sunt controlate de catre utilizator cand sa inceapa si cand se
termina
4.
Tranzactii distribuite folosesc mai multe servere,pot participa doar cele care suporta
specificatia X/Open XA pentru prelucrarea tranzactiilor distribuite.
-transferul prin valoare: Metoda copiaza valoarea parametrului efectiv in parametrul formal al
subrutinei. Modificarile aduse parametrului subrutinei nu vor modifica valoarea parametrului
efectiv.
-transferul prin referinta: Se transmite parametrului formal o referinta a parametrului efectiv si
nu valoarea acestuia. In interiorul subrutinei, referinta este utilizata pentru accesul la
parametrul efectiv. Asadar modificarile parametrului formal vor afecta si parametrul efectiv.
public static void Schimb(ref int i, ref int j)...
int x=10, y=20;
Schimb(ref x,ref y);
x=10 si y=20 inainte de apelul metodei Schimb
x=20 si y=10 dupa apelul metodei Schimb
Modificatorul de parametrii out: -se utilizeaza atunci cand se doreste intoarcerea de catre
metoda a mai multor valori mediului apelant. O instructiune return intoarece o singura
valoare. Daca se doreste intoarcerea spre exemplu a doua valori atunci problema se rezolva
cu ajutorul modificatorului out. -apare atat in declaratia cat si in apelul metodei; -intoarce o
valoare dintr-o metoda. Nu este necesar ca variabila utilizata ca parametru out sa fie
initializata inainte de apelul metodei. Metoda va da acesteia o valoare. Mai mult, in corpul
metodei, un parametru out este considerat ca neinitializat.
public int InfoDreptunghi_si_Arie(out
bool patrat)
{
if (l == L)
patrat = true;
else
patrat = false;
return l * L;
}
12. De cate tipuri sunt User Controalele in ASP.NET?
13. Ce reprezinta Session? Ce durata are un session?
- Vertraulich / Confidential -
O metod prin care utilizatorul se poate autentifica nainte de a-i fi permise anumite
operaii, respectiv adugarea i editarea. Acest mecanism se bazeaz pe noiumea de
Sesiune.
O sesiune permite serverului de web s asocieze un set de date cu un anumit tip de
browser. Prin aceasta, browserul ramne, hai s spunem agat n prima pagin pe care
o afieaz. Informaia utilizat pentru aceasta este unic i este utilizat ca i cheie de
validare pentru accesul la urmtoarele pagini.
Serverul de web aga browserul prin utilizarea unui cookie. Un cookie este o secven
de cod de dimensiune mic, trimis de server clientului la accesarea unei pagini de web i
care este citit de fiecare dat cnd pagina de web este renrcat. LA primul apel al
paginii de web, cookie-ul nu exist, astfel nct serverul de web va crea o nou sesiune i
va plasa ID-ul acelei sesiuni ntr-un cookie, pe care-l va trimite apoi browserului. n
principiu, se pote stoca diferite informaii ntr-un cookie, dar deoarece cu ct mai multa
informaie este stocat, cu att mai mult memorie este necesar la server, uzual
cookie+ul conine un numr minim de informaii.
Bazat pe acest mecanism, s ncercm s restricionm accesul n adugare i
editare. Informaia stocat n cookie este suficient s fie o simpl valoare boolean. Care
s precizeze co utilizatorul are sau nu acces la aceste pagini.
Orice sesiune este lansat la apelul primei pagini dintr-o cerere i ncepe prin
lansarea n execuie a unei funcii numite Session_Start(), localizat n Global.asax. S
adugm aceast funcie:
protected void Session_Start(Object sender, EventArgs e)
{
Session["permis"] = false;
}
Proprietatea Session permite adugarea de variabile, numite variabile de sesiune.
n funcie, noi am adugat o variabil numit permis, creia i-am atribuit valoarea false.
Deci, la ncrcarea paginii Default.aspx, aceast variabil va fi fcut implicit false.
14. Ce inseamna cuvantul cheie virtual?
The virtual keyword is used to modify a method, property, indexer, or event declaration
and allow for it to be overridden in a derived class. For example, this method can be
overridden by any class that inherits it:
public virtual double Area()
{
return x * y;
}
The implementation of a virtual member can be changed by an overriding member in a
derived class.
15. Care este diferenta intre clasa abstracta si interfata?
Ce este o interfata ?
O interfata defineste un set de metode, proprietati, evenimente, indexatori. Acesti
membri vor fi implementati de o clasa sau chiar de o structura.
- Interfata contine doar signatura membrilor.
- Vertraulich / Confidential -
- Daca nu se specifica nici un modificator de acces pentru interfata, atunci cel implicit va
fi internal. Daca se afla in interiorul unei clase, o interfata poate avea modificatorii de
access private, protected, public, internal.
- O clasa poate implementa mai multe interfete.
Concluzii:
O interfata nu contine cod pentru implementare, ea contine doar signaturile.
O clasa abstracta poate contine codul complet sau partial, care poate fi rescris.
O interfata nu poate contine ca membri: constante, constructori, destructori, campuri,
membri statici sau alte interfete.
Intr-o clasa abstracta se pot defini campuri, constante, metode, proprietati.
Din punct de vedere al vitezei de executie, o interfata este mai lenta decat o clasa
abstracta.
- Vertraulich / Confidential -
Daca programul utilizatorului include referinte frecvente catre membrii unui spatiu de nume,
specificarea spatiului de nume ori de cate ori trebuie sa referiti un membru al sau devine
greoaie. Directiva using rezolva aceasta problema. Directiva using are doua forme: using
nume; si respectiv using alias=nume; Referitor la cea de-a doua forma, alias devine un alt
nume pentru clasa sau spatiul de nume specificat prin nume
19. Ce inseamana dispose?
{
try
{
// do work here
}
finally
{
base.Finalize();
}
}
Atat in Finalize cat si in Dispose, in mod normal, ar trebui eliberate resursele unmanaged
folosite de obiect. Diferenta dintre cele doua este, simplu spus, ca Dispose poate fi
executat de user (este ok sa scrii instance.Dispose(), insa Finalise este executat numai
de GC. Nu este legal sa fie executat la dorinta programatorului.
uitasem sa spun: GC vine cand vrea el, in .Net nu este controlabil momentul in care
GC va face munca de curatenie. E la fel ca programatorul care vine la munca intre 8 si
12, in functie de cat de mult a fumat cu o zi inainte.
obiect1.Afiseaza();
obiect2.Afiseaza();
- Vertraulich / Confidential -
System.Gc
Pentru a programa cu Garbage Collector, in BCL se gaseste clasa Gc.
Cu ajutorul ei, putem forta inceperea garbage collection-ului.
GC.Collect();
Un moment in care se poate folosi este cel dupa alocarea unui numar foarte mare de
obiecte si se doreste repede eliberarea memoriei. Sau atunci cand se vrea ca
executarea codului curent sa nu fie intrerupta de un eventual garbage collection.
Mai multe detalii despre acesta clasa puteti gasi pe msdn.
Se recomanda ca programatorii sa interactioneze cat mai putin cu System.Gc.
Finalize () apel implicit
Toti programatorii .Net stiu ca System.Object, clasa de baza, detine o metoda virtuala,
Finalize.
Implementarea metodei Finalize se mai numeste finalizer. Un finalizer va elibera doar
resurse externe, continute de obiectul respectiv. Implementarile finalizer sunt apelate de
GC atunci cand obiectul nu mai este folosit (cand spre el nici un alt obiect nu mai are
referinta).
Pentru suprascrierea metodei Finalize nu se foloseste clasicul override.
protectedoverridevoidFinalize()
{
}
Pentru codul de mai sus, vom primi mesajul de eroare la compilare Do not override
object.Finalize. Instead, provide a destructor.
Procedura corecta consta in definirea unui destructor:
/// <summary>
/// destructor
/// </summary>
~Persoana()
{
//cod pentru eliberarea resurselor din memorie
}
In cazul unui struct este incorect sa suprascriem Finalize pentru ca o structura este de
tip valoare, iar tipurile valoare nu sunt alocate in heap si nu vor fi luate in considerare
de garbage collecter.
Apelul pentru metoda Finalize va avea loc in momentul in care GC se apeleaza sau
atunci cand se forteaza apelarea lui.
Majoritatea claselor pe care un programator le defineste nu vor avea nevoie de o
eliberare explicita pentru ca vor fi colectate de GC.
- Vertraulich / Confidential -
publicPersoana(stringnume,stringprenume)
{
Nume=nume;
Prenume=prenume;
}
publicintCalculeazaVarsta()
{
return25;
}
publicvoidDispose()
{
//cod pentru eliberarea resurselor
Console.WriteLine("Disposed");
- Vertraulich / Confidential -
}
}
Spre deosebire de Finalize, care putea fi folosita doar pentru clase, IDisposable poate fi
utilizata si pentru structuri.
Daca un obiect suporta IDisposable, atunci se recomanda apelarea metodei Dispose.
Este o practica des intalnita ca atunci cand folosim obiecte managed care
implementeaza IDisposable , sa tratam posibilele exceptii.
try
{
p.CalculeazaVarsta();
}
finally
{
p.Dispose();
}
Pentru a scapa de acest ambalare intr-o constructie try/finally se poate folosi using.
using(Persoanap=newPersoana("Nume","Persoana"))
{
p.CalculeazaVarsta();
}
Principalul motiv pentru interactiunea cu GC il reprezinta crearea unor clase care vor
opera asupra resurselor interne, unmanaged.
Daca veti cauta pe internet despre GC, veti observa ca este una din cele mai
controversate tehnologii din .Net.
A programa intr-un mediu cu garbage collected simplifica mult modul de dezvoltare.
De exemplu, in C++, programatorii trebuie sa stearga manual obiectele alocate,
iarmemory leak-urile trebuie detectate. Pasand permisiunea garbage collector-ului
sa distruga obiectele, de managementul memoriei nu se mai ocupa programatorul, ci
CLR.
26. Ce caracterizeaza o exceptie? Unde se arunca exceptia?
- Vertraulich / Confidential -
Cuvantul cheie try nu poate aparea fara a fi completat de cuvantul cheie catch sau
definally si nici invers. Finally este optional.
- Vertraulich / Confidential -
Pot exista mai multe instructiuni catch asociate unui try. Instructiunea care se va
executa se va stabili in functie de tipul exceptiei, celelalte sunt ignorate.
staticvoidCompute(int[]numbers)
{
try
{
intsecondNumber=numbers[0];
Console.Write(secondNumber);
}
catch(IndexOutOfRangeException)
{
Console.WriteLine("Must provide more than an argument");
}
catch(NullReferenceException)
{
Console.WriteLine("Argument is null");
}
catch(FormatException)
{
Console.WriteLine("Argument is not a number");
}
catch(Exception)
{
Console.WriteLine("Another exception occured");
}
}
Se adauga instructiunile pentru blocurile catch cat mai specifice, inainte celor generale.
- Vertraulich / Confidential -
CLR cauta instructiunea catch care va trata exceptia. Daca metoda curenta in care ne
aflam cu debug-erul nu contine un bloc catch, atunci CLR va cauta in metoda care a
apelat metoda curenta, si asa mai departe conform call stack. Daca nu este gasit nici
un catch, atunci CLR va afisa un mesaj cum ca exceptia nu este tratata, unhandled
exception message, apoi va opri executia programului.
In general, instructiunea catch nu are un parametru. Totusi, il putem adauga in cazul in
care vom avea nevoie de accesul la obiectul care reprezinta exceptia. Este folositor
pentru furnizarea informatiilor suplimentare despre eroarea produsa.
catch(Exceptionexception)
{
Console.WriteLine(exception.Message);
Console.WriteLine(exception.GetType());
}
catch(FileNotFoundException)
{
Console.WriteLine("File not found");
}
finally
{
//cleanup code, close the file
if(reader!=null)
reader.Dispose();
}
}
In metoda Main :
staticvoidMain(string[]args)
{
Computecomp=newCompute();
try
{
comp.DivideTwoNumbers(5,13);
}
catch(DivideByZeroException)
{
Console.WriteLine("Exception caught here");
}
}
System.Exception
- Vertraulich / Confidential -
Dupa cum s-a putut observa in exemplele de mai sus, exceptiile sunt reprezentate prin
clase. Toate deriva din clasa de baza Exception. Se disting doua clase prin
reprezentarea a doua categorii generale de exceptii: exceptii generate de motorul de
executie SystemException si exceptii generate de programele de
aplicatieApplicationException. Ele nu adauga membri noi la clasa de baza, ci doar
definesc radacile celor doua ierarhii de clase care reprezinta exceptii. De exemplu, in
cazul impartirii la zero se produce o exceptie de tipul DivideByZeroException.
Programatorul isi poate defini propriile clase care reprezinta exceptii prin derivarea
clasei ApplicationException.
Pentru mai multe detalii, se poate consulta documentatia de pe msdn.
Un program trebuie sa trateze exceptiile intr-o maniera logica si eleganta si sa isi
continue apoi executia. Daca programul nu intercepteaza exceptia, el va fi fortat sa se
inchida.
Chiar daca nu este considerata optima, o alta modalitate de raportare a erorilor o
reprezinta codurile de retur. Ce parere aveti? Voi ati utilizat-o?
Pentru ca tratarea erorilor constituie un subiect dificil voi continua intr-un viitor articol
crearea propriilor clase de exceptii si consecintele exceptiilor neinterceptate.
// utilizare:
// a) lista = lista1 + lista2;
// b) lista += lista1;
public static ListaPersoane operator +(ListaPersoane lista1, ListaPersoane lista2)
{
// alocare memorie
Persoana[] lista = new Persoana[lista1.NumarPersoane + lista2.NumarPersoane];
// copiere elemente
for (int i = 0; i < lista1.NumarPersoane; i++)
lista[i] = new Persoana(lista1[i].Nume, lista1[i].Varsta);
for (int i = 0; i < lista2.NumarPersoane; i++)
lista[i + lista1.NumarPersoane] = new Persoana(lista2[i].Nume, lista2[i].Varsta);
// returnare rezultat
return new ListaPersoane(lista);
}
31. Ce inseamna delegat?
In programare, exista situatii cand trebuie sa executam o anumita actiune, dar fara sa
stim in avans ce metoda sau ce obiect vom apela pentru executarea actiunii. Exemplu :
la apasare, un buton va sti ca trebuie sa notifice un anumit obiect , dar nu stie exact
care. Solutia simpla consta in conectarea butonului la un delegat si apoi acesta sa indice
catre o anumita metoda.
Un delegat este un obiect care poate referi o metoda. Chiar daca nu este un obiect, o
metoda ocupa un loc in memorie, iar aici, la aceasta adresa, va fi transmis controlul la
invocarea metodei.
Un delegat reprezinta modul prin care se realizeaza comunicarea intre obiecte. Un
delegat este un tip referinta si este este echivalentul unui pointer la functie din C++.
Diferenta este ca delegates sunt type-safe si ca sunt orientati pe obiect.
Un delegat se declara cu ajutorul cuvantului delegate.
delegate tip-rez nume (lista-parametri);
tip-rez tipul valorii intoarse de metodele pe care delegatul le va apela.
nume numele delegatului.
lista-parametri lista de parametri necesari metodelor care vor fi apelate prin
intermediul delegatului.
- Vertraulich / Confidential -
Poate fi declarat in afara unei clase, sau in interior. In functie de cum se vrea
vizibilitatea lui, ii putem aplica modificatorii de acces public, private, protected,etc.
Dupa ce a fost declarat, un delegat poate apela doar metode cu acelasi tip returnat si
aceeasi lista de parametri.
Exemplu :
//declararea unui delegat
delegateintStringLengthDelegate(stringstr);
delegatestringStringReverseDelegate(stringstr);
In metoda Main :
DelegateTesttest=newDelegateTest();
//construim delegat
StringLengthDelegatestrLength=new
StringLengthDelegate(test.StringLength);
//sirul care va fi transmis functiilor
stringstr;
//apelul unei metode prin intermediul delegarii convertim de la numar la string
//pentru ca functia returneaza int
str=strLength("Test").ToString();
Console.WriteLine(str);
//construim delegat
StringReverseDelegatestrReverse=new
StringReverseDelegate(test.StringReverse);
//apelul unei metode prin intermediul delegarii
- Vertraulich / Confidential -
str=strReverse("Test");
Console.WriteLine(str);
Pe scurt: avem doua metode statice in clasa DelegateTest ale caror signaturi coincid cu
signaturile delegatilor. In Main, construim referinte de
tipul StringLengthDelegate siStringReverseDelegate, pe care le atribuim metodelor.
Se mai observa ca invocarea delegatilor determina apelul metodelor.Determinarea
metodei apelate se rezolva la momentul executiei, nu la compilare.
Multicasting
Multicasting-ul se defineste ca o facilitate a delegatilor si consta in capacitatea de a
crea un lant de metode care vor fi automat apelate la invocarea unui delegat. Delegarile
multicast trebuie sa returneze un rezultat de tip void, iar pentru crearea lor se folosesc
operatorii += si =, dupa instantierea unui delegat.
Exemplu :
//declararea unui delegat multicast
delegatevoidMulticastDelegat(stringstr);
//construim delegatii
MulticastDelegatmultiDel;
MulticastDelegateStringLength=new
MulticastDelegat(test.StringLength);
MulticastDelegatStringReverse=new
MulticastDelegat(test.StringReverse);
multiDel=StringLength;
//crearea unui delegat multicast
multiDel+=StringReverse;
class SimpleClass
{
// Static variable that must be initialized at run time.
static readonly long baseline;
// Static constructor is called at most one time, before any
// instance constructor is invoked or member is accessed.
static SimpleClass()
{
baseline = DateTime.Now.Ticks;
}
}
Static constructors have the following properties:
A static constructor does not take access modifiers or have parameters.
A static constructor is called automatically to initialize the class before the first
instance is created or any static members are referenced.
A static constructor cannot be called directly.
The user has no control on when the static constructor is executed in the program.
A typical use of static constructors is when the class is using a log file and the
constructor is used to write entries to this file.
Static constructors are also useful when creating wrapper classes for unmanaged
code, when the constructor can call the LoadLibrary method.
If a static constructor throws an exception, the runtime will not invoke it a second
time, and the type will remain uninitialized for the lifetime of the application
domain in which your program is running.
36. Ce inseamana cuvantul cheie ref? Dar out? ( see 11)
37. Care e diferenta dintre (string) obj si obj as string?
explicit cast : (string) obj
string s = (string)o;
Assigns null to s if o is not a string or if o is null. For this reason, you cannot use it with
value types (the operator could never return null in that case). Otherwise, assigns o to s.
As is a cast. With it, we gain performance and avoid exceptions when a cast is invalid.
Null is returned when the cast is impossible. For reference types, the as-cast is
recommended. It is both fast and safe.
Tip:
We can test the resulting variable against null and then use it. This eliminates extra
casts.
38. Ce reprezinta un atribut?
39. Ce moduri de pastrare a starilor pentru ASP.NET?
40. ce contine manifestul unui assembly?
- Vertraulich / Confidential -
un assembly mai conine i o seciune numit Manifest care conine metadate ce descriu
setul de fiiere dintr-un assembly. Din punct de vedere fizic, un assembly se poate identifica
printr-un fiier dll sau exe. Un alt concept cu care opereaz o aplicaie din punct de vedere
structural este domeniul aplicaiei (AppDomain). Domeniul aplicaiei conine assembly-urile
cu care opereaz o aplicaie
41. ce reprezinta GAC?
Global Assembly Cache
With the GAC, you can share assemblies across many applications. The GAC is
automatically installed with the .NET runtime.
42. Ce reprezinta un indexer?
Indexers allow instances of a class or struct to be indexed just like arrays. Indexers
resemble properties except that their accessors take parameters.
In the following example, a generic class is defined and provided with
simple get and set accessor methods as a means of assigning and retrieving values.
The Program class creates an instance of this class for storing strings.
C#
class SampleCollection<T>
{
// Declare an array to store the data elements.
private T[] arr = new T[100];
// Define the indexer, which will allow client code
// to use [] notation on the class instance itself.
// (See line 2 of code in Main below.)
public T this[int i]
{
get
{
// This indexer is very simple, and just returns or sets
// the corresponding element from the internal array.
return arr[i];
}
set
{
arr[i] = value;
}
}
}
// This class shows how client code uses the indexer.
class Program
{
static void Main(string[] args)
{
// Declare an instance of the SampleCollection type.
SampleCollection<string> stringCollection = new
SampleCollection<string>();
// Use [] notation on the type.
stringCollection[0] = "Hello, World";
- Vertraulich / Confidential -
System.Console.WriteLine(stringCollection[0]);
}
}
// Output:
// Hello, World.
43. Cum se poate porni un proces?
2.
Timer
- Vertraulich / Confidential -
2.
3.
4.
5.
6.
Metoda Count:
privatevoidCount()
{
for(inti=0;i<100000;i++)
{
result=+i;
//EXCEPTIE
this.lblInfo.Text=result.ToString();
}
}
- Vertraulich / Confidential -
- Vertraulich / Confidential -
Stim ca o instanta a clasei Timer este foarte utila atunci cand vrem sa executam cod
la anumite intervale. Clasa Timer este alegerea perfecta atunci cand avem nevoie sa
executam operatii la intervale regulate de timp, dar operatii nu de mare complexitate.
Avantajele clasei Timer asupra clasei Thread in folosirea firelor de executie sunt
controlul usor al executarii codului la un anumit interval, sleep implicit atunci cand nu
se executa codul plus faptul ca in interfata utilizator controalele pot fi accesate de codul
executat de clasa Timer.
In Compact Framework, exista limitari in ceea ce priveste notiunuea de Threading:
1.
2.
3.
Salvarea datelor ntr-un fiier binar se face prin serializare. Serializarea este o metod ce
permite transformarea unui obiect ntr-o secven de octei din care s poat fi refcut
ulterior obiectul original. Serializarea permite unui obiect s fie convertit ntr-un flux de date,
care apoi este salvat ntr-un fiier binar.
Operaia de serializare presupune parcurgerea etapelor:
- Vertraulich / Confidential -
declararea unei clase ca fiind serializabil, prin adugarea naintea definiiei clasei a
atributului [Serializable]
adugarea bibliotecilor corespunztoare: using System.IO; using
System.Runtime.Serialization. Formatters.Binary;
instanierea unui obiect din clasa FileStream: FileStream fileStream = new
FileStream("stud.dat", FileMode.Create, FileAccess.Write);
instanierea unui obiect din clasa BinaryFormatter: BinaryFormatter bf = new
BinaryFormatter();
apelul metodei Serialize() din clasa BinaryFormatter: bf.Serialize(fileStream, lista);
nchiderea stream-ului: fileStream.Close();
Procesul invers de citire a unui obiect serializat pentru a-i reface starea original se numete
deserializare. Operaia de deserializare presupune parcurgerea etapelor:
instanierea unui obiect din clasa FileStream: FileStream fileStream = new
FileStream("stud.dat", FileMode.Open, FileAccess.Read);
Citirea dintr-un fiier XML se poate face utiliznd metoda Read() din clasa abstract
XmlReader din namespace-ul System.Xml. Paii pentru citire i parsare fiier XML:
instanierea unui obiect din clasa StreamReader: StreamReader sr = new
StreamReader("nbrfxrates.xml");
citirea coninutului fiierului: string str = sr.ReadToEnd();
obinerea unui obiect din clasa XmlReader prin apelul metodei Create(): XmlReader reader
= XmlReader.Create(new StringReader(str));
prelucrarea obiectului din clasa XmlReader: while (reader.Read()) {...}
47. Cum creez o clasa serilizabila? Exemplu de clasa neserializabila!
Pn acum am vzut cum se pot salva i restaura n i din fiiere datele de tip
octet sau caracter. Dar ce e de fcut, dac avem de salvat i restaurat date mai
complexe, de exemplu obiecte ale unei clase? Evident, obiectele se pot salva sub
form de iruri de octei, dar va fi foarte greu la restaurare s mprim octeii astfel
nct s recompunem obiectele salvate. Din fericire, majoritatea limbajelor de nivel
nalt, inclusiv C#, implementeaz un mecnism simplu i fiabil ne salvare i restaurare
a obiectelor prin intermediul fiierelor. Acest mecanism poart denumirea de
serializare.
Orice clas ale crei obiecte pot fi salvate sau restaurate prin intermediul
fiierelor, va trebui fie s fie declarat serializabil, fie s implementeze o interfa
specific, numit ISerializable. n momentul n care infrastructura primete o cerere
de serializare a unor obiecte, va verifica nti dac clasa din care fac parte obiectele
implementeaz interfaa ISerializable i dac nu, va verifica dac a fost declarat ca
fiind serializabil. Dac nici una din condiii nu este ndeplinit, obiectele nu vor
putea fi serializate.
namespace unu_unu
{
[Serializable]
class Rezervare
{
- Vertraulich / Confidential -
public
{
}
public
public
public
public
}
}
Rezervare()
String Nume;
DateTime DataS;
DateTime DataP;
int nrCam;
Vom construi clasa Conturi, care va contine un vector de obiecte Cont. Clasa va
contine si o metoda de adaugare in lista a obiectelor si va implementa cele doua
interfete (articolul despre interfete).
- Vertraulich / Confidential -
//clasa Conturi
//implementeaza interfetele
classConturi:IEnumerable,IEnumerator
{
//construim un vector
ArrayListlistaConturi=newArrayList();
//variabila care va returna
//pozitia curenta a enumeratorului
privateintpozitie=1;
//metoda pentru adaugarea unui obiect de tip
// in lista
publicvoidAddEmployee(Contc)
{
//adauga in lista
listaConturi.Add(c);
}
//implementarea interfetei IEnumerable
//va returna un enumerator
publicIEnumeratorGetEnumerator()
{
return(IEnumerator)this;
}
//implementarea interfetei IEnumerator
publicboolMoveNext()
{
if(pozitie<listaConturi.Count1)
{
//incrementam
++pozitie;
returntrue;
}
//nu mai sunt elemente in colectie
returnfalse;
}
publicvoidReset()
{
//pozitia initiala
pozitie=1;
}
publicobjectCurrent
{
get
{
//returneaza elementul indicat de enumerator
returnlistaConturi[pozitie];
}
}
}
Initial, obiectul enumerator este situat inaintea primului element al colectiei. Vom apela
metoda Reset(), pentru a fi siguri de acest lucru:
ContEnumerator.Reset();
Parcurgem colectia:
//se invoca mai intai metoda MoveNext inainte de accesarea
//Current, altfel va aparea exceptie la executie
while(ContEnumerator.MoveNext())
{
Console.WriteLine((Cont)ContEnumerator.Current);
}
Un alt concept cu care opereaz o aplicaie din punct de vedere structural este domeniul
aplicaiei (AppDomain). Domeniul aplicaiei conine assembly-urile cu care opereaz o
aplicaie
O aplicatie consta din unul sau mai multe procese.
Un proces contine un program in executie. Un proces mai este definit si ca un spatiu de
memorie,
4GB, ce contine cod si date.
.NET subdivide un proces in subprocese, numite domenii de aplicatii, reprezentate de
- Vertraulich / Confidential -
System.AppDomain.
Unul sau mai multe fire managed (create in .NET) reprezentate de
System.Threading.Thread, pot rula in unul sau mai multe AppDomain din cadrul aceluiasi
proces. Fiecare AppDomain este startat cu un singur fir ; codul din acest AppDomain
poate crea alte AppDomain si fire.
Un fir este unitatea de baza la care SO aloca timp procesor. Un fir poate executa orice
parte de cod a unui proces, incluzand parti curente executate de alt fir.
Firul are propria stiva, deci variabilele locale sunt gestionate separat.
Un thread pool este o colectie de fire de lucru care executa asincron metode callback.
Thread pool furnizeaza un management al firelor de lucru.
C# suporta executia paralela a codului prin multithreading.
Un program client C# (Console, WPF sau Windows Forms) este startat intr-un singur fir
creat automat de CLR si de SO (fir principal, fir primar) si devine multifir prin crearea de
fire aditionale.
Un fir isi termina executia cand delegate-ul pasat in ctor Thread isi termina executia. O
data terminat, un fir nu poate fi restartat. Putem verifica daca un fir este in executie
folosind proprietatea IsAlive.
Spatiul de nume pentru fire este System.Threading.
51. Ce reprezinta Global.asax?
Cele trei entitati care stau la baza functionarii .Net sunt: CLR, CTS, CLS.
- Vertraulich / Confidential -
Pentru mai multe informatii despre CLR, puteti urmari un interviu cu Ian Carmichael,
despre istoria si viitorul CLR.
Common Type System
.Net este independent de limbaj (suporta peste 20 de limbaje de programare diferite). Cu
toate acestea, un programator se poate folosi de tipurile de date specifice limbajului
preferat, fara a intampina probleme.
De exemplu, in fiecare limbaj exista un cuvant cheie unic pentru a defini un tip de baza
(o variabila de tip intreg este declarata in C# ca int, in Visual Basic este declarata
cainteger sau in C++ ca int. Acestea indica in cele din urma tipul de baza System.Int32
in .Net Framework, in assembly-ul mscrolib.dll.
Common Type System defineste modul in care tipurile de date urmeaza sa fie declarate
si administrate la executie. Functionalitatea principala a CTS este de a standardiza
conventiile pe care trebuie sa le respecte toate limbajele de programare din .Net. In plus,
CTS se ocupa si de type safety.
Cu ajutorul CTS se elimina probleme legate de overflow/underflow pentru datele
numerice, sau probleme despre reprezentarea tipurilor, de exemplu, string, boolean, etc,
in alte limbaje.
CTS suporta tipurile valoare si tipurile referinta.
Observatie: Un limbaj de programare .Net nu suporta fiecare functionalitate definita de
CTS.
Important de retinut este ca CTS este o specificatie formala care arata cum trebuie sa fie
definite tipurile pentru a fi gazduite de CLR. Probabil cei mai interesati de modul cum
functioneaza CTS sunt programatorii care dezvolta instrumente de
programare/compilatoare care au ca tinta platforma .Net.
Puteti accesa http://www.dotnetlanguages.net pentru a vedea o lista cu limbajele de
programare din .Net.
Common Language Specification
Fiecare limbaj de programare indica in mod unic, cu ajutorul sintaxei proprii, aceleasi
constructii de programarare (tipuri de date, controlul fluxului) programming
- Vertraulich / Confidential -
Un assembly contine cod CIL (este similar notiunii de bytecod din JAVA) si metadata. De
exemplu, daca am clasa Agent, metadata va contine detalii despre clasa de baza a
clasei Agent, despre interfetele implementate si informatii despre fiecare membru al
clasei.
Un assembly este la randul lui descris folosind metadata. Aceste informatii reprezinta
un manifest (detalii despre versiunea curenta a assembly-ului, referinte catre assemblyuri externe).
In cele mai multe cazuri, exista o singura corespondenta intre un assembly .Net si un
fisier binar (.dll,.exe). In cazul in care scriem un program pentru desktop, executabilul
poate fi referit ca assembly-ul in sine.
Daca un assembly este compus dintr-un singur dll sau exe atunci se numeste singlefile assembly. Acesta contine instructiunile CIL, metadata si fisierul manifest intr-un
pachet bine definit, independent.
Daca un assembly este compus din mai multe fisiere binare, el se numeste multi-file
assembly. Fiecare fisier component poarta numele de modul. Unul din aceste module
trebuie sa fie considerat principal si sa contina fisierul manifest al assembly-ului.
Codul MSIL contine instructiuni care sunt independente de orice CPU. Este treaba CLR
sa transforme acest cod intermediar intr-un cod executabil pe un mediu in care regulile
CLR sunt implementate.
Compilatorul JIT
Atunci cand codul CIL compilat trebuie sa fie executat, CLR invoca compilatorul Just In
Time (Jitter). Acesta va compila instructiunile CIL in cod executabil specific masinii sau
sistemului de operare. Compilatoarele JIT se diferentiaza de cele traditionale prin faptul
ca ele transforma codul CIL in cod nativ doar cand e nevoie. De exemplu, atunci cand o
functie este apelata, codul CIL al functiei este convertit in cod nativ chiar atunci,just in
time. Daca o sectiune de cod CIL este convertita la cod nativ, data viitoare cand este
nevoie de aceasta, CLR va folosi aceeasi copie (deja compilata) fara a recompila.
Compilatoarele JIT optimizeaza codul in functie de procesor si sistem de operare, la
executie. Microsoft spune ca C# si .Net nu concureaza cu C++ din punct de vedere al
eficientei si al vitezei de executie, dar in anumite cazuri datorita compilatoarelor JIT,
codul poate devine mai rapid decat in C++.
- Vertraulich / Confidential -
- Vertraulich / Confidential -
In acest exemplu, sirul s1 este creat si apoi modificat. In acest fel exista doua versiuni
ale variabilei s1 ce vor fi stocate temporar in memorie. Metoda string.Concat creaza un nou
sir si concateneaza s1 cu rezultatul metodei ToString. Rezultatul acestei concatenari este o
noua locatie de memorie. Cand o astfel de operatie apare intr-o bucla, pot apare probleme
cu memoria si performanta generala a programului.
Solutia este sa utilizati clasa StringBuilder din spatiul de nume System.Text.
StringBuilder aloca initial un spatiu pentru 16 caractere; daca sirul devine mai mare decat
atat, el este marit automat. In urmatorul exemplu va fi alocat un singur string:
- Vertraulich / Confidential -
- Vertraulich / Confidential -
Exista si StringCollection, o colectie tipizata. Impreuna cu alte colectii din .Net care sunt
strongly typed, aceste clase tipizate sunt usor de folosit in dezvoltare datorita faptului ca
Visual Studio poate face automat validarea si nu mai e nevoie sa folosim conversia.
68. Ce inseamna un array?
Provides methods for creating, manipulating, searching, and sorting arrays, thereby
serving as the base class for all arrays in the common language runtime.
The Array class is not part of the System.Collections namespaces. However, it is still
considered a collection because it is based on the IList interface.
69. Exista pointeri in C#? Daca da unde se pot folosi?
70. Ce inseamna stride?
71. Ce reprezinta ThreadPool?
A thread pool is a collection of threads that can be used to perform several tasks in the
background. (See Using Threading (C# Programming Guide) for background information.)
This leaves the primary thread free to perform other tasks asynchronously.
Thread pools are often employed in server applications. Each incoming request is
assigned to a thread from the thread pool, so that the request can be processed
asynchronously, without tying up the primary thread or delaying the processing of
subsequent requests.
Once a thread in the pool completes its task, it is returned to a queue of waiting threads,
where it can be reused. This reuse enables applications to avoid the cost of creating a
new thread for each task.
Thread pools typically have a maximum number of threads. If all the threads are busy,
additional tasks are put in queue until they can be serviced as threads become available.
Un thread pool este o colectie de fire de lucru care executa asincron metode callback. Thread
pool furnizeaza un management al firelor de lucru.
72. Cum pot la apasarea tastei Enter sa fac submit la o pagina ASP.NET ca si cum as fi
apasat un anume buton?
73. Ce reprezinta uncheked?
74. Ce reprezinta unsafe?
75. Ce reprezinta Click and Deploy tehnology?(Publish)
- Vertraulich / Confidential -
Design Patterns.
1. Ce este un singleton?
Creational patterns - sabloane care ajuta la crearea de obiecte in loc sa trebuiasca sa fie
instantiate direct. Astfel se ofera mai multa flexibilitate permitind sa se decida ce obiecte
trebuie sa fie create intr-o anumita situatie data.
- Vertraulich / Confidential -
Builder
construieste
obiecte
complexe
separind
partea
de
constructie
de
cea
de
reprezentare.
Factory Method - creaza obiecte fara a specifica clasa obiectului ce va fi creat
Abstract Factory - grupeaza fabrici de obiecte care au ceva in comun.
Prototype - creaza obiecte clonind un obiect existent.
Singleton - creaza/returneaza o singura instanta a unei clase.
Conceptul se numeste singleton. Reprezinta o tehnica prin care se limiteaza numarul de instante
ale unei clase la una singura. Cu alte cuvinte nu pot construi decat un singur obiect din aceasta
clasa.
public class Singleton {
private final static Singleton INSTANCE = new Singleton();
// constructorul este privat si nu permite crearea unei noi instante
private Singleton() {}
// nu este obligatoriu numele getIntstance(), insa acesta se foloseste
// de obieci
public static Singleton getInstance() {
return INSTANCE;
}
}
2. Ce este un adapter?
Structural patterns - Se refera la compunerea claselor si a obiectelor pentru a obtine noi
functionalitati.
Adapter
permite
claselor
cu
interfete
incompatibile
sa
lucreze
impreuna
(adapteaza
(tipic remote).
- Vertraulich / Confidential -
"Adaptor". Acest model particular poate fi folosit atunci cand codul vostru
depinde de API-uri externe sau orice alta clasa predispusa schimbarilor
frecvente. Acest model face parte din categoria "modelelor structurale"
deoarece ne invata modul in care codul si clasele noastre trebuie
structurate pentru a le putea organiza si/sau extinde cu usurinta.
Din nou, as vrea sa readuc in discutie faptul ca design pattern-urile nu aduc
nimic nou fata de clasele traditionale. In schimb, ne ajuta sa intelegem mai
bine modul in care trebuie sa ne structuram clasele, cum putem manipula
comportamentul lor si cum putem organiza crearea acestor clase.
using System;
2
3
// Adapter Pattern - Simple
Judith Bishop Oct 2007
4
// Simplest adapter using interfaces and inheritance
5
6
// Existing way requests are implemented
7
class Adaptee {
8
// Provide full precision
9
public double SpecificRequest (double a, double b) {
10
return a/b;
11
}
12
}
13
14
// Required standard for requests
15
interface ITarget {
16
// Rough estimate required
17
string Request (int i);
18
}
19
- Vertraulich / Confidential -
20
// Implementing the required standard via Adaptee
21
class Adapter : Adaptee, ITarget {
22
public string Request (int i) {
23
return "Rough estimate is " + (int) Math.Round(SpecificRequest
(i,3));
24
}
25
}
26
27
class Client {
28
29
static void Main ( ) {
30
// Showing the Adapteee in standalone mode
31
Adaptee first = new Adaptee( );
32
Console.Write("Before the new standard\nPrecise reading: ");
33
Console.WriteLine(first.SpecificRequest(5,3));
34
35
// What the client really wants
36
ITarget second = new Adapter( );
37
Console.WriteLine("\nMoving to the new standard");
38
Console.WriteLine(second.Request(5));
39
}
40
}
41/* Output
42
Before the new standard
43
Precise reading: 1.66666666666667
44
45
Moving to the new standard
46
Rough estimate is 2
47
*/
3. Ce este un enumerator?
MS SQL 2000
1. Ce reprezinta o tranzactie? (see 10 de la C#)
2. De cate tipuri sunt joinurile? Comentarii!
Indiferent de sintaxa folosit exist mai multe moduri de legare a tabelelor i anume:
- Vertraulich / Confidential -
OuterJoin sunt o extensie a equijoinului, cnd pentru unele nregistrri dintro tabel nu exist corespondent n cealalt tabel, i dorim ca aceste nregistrri
fr corespondent s fie totui afiate.
3. Ce reprezinta un cursor?
4. Care sunt cuvintele cheie pentru SELECT?
5. Care este diferenta intre HAVING si WHERE?
6. Ce inseamna functii agregat?
7. Ce reprezinta trigerele?
8. Care e diferenta intre proceduri stocate si functii?
9. Ce reprezinta un index, dar un index clustered?
10. Ce reprezinta un connection pool?
11. SQL 2005 nu vine din start cu connection=-ul de pe alte calculatoare enabled. Ce
trebuie sa fac sa permit aceasta?
12. Care sunt avantajele procedurilor stocate? Cand se recompileaza procedurile stocate
pe server?
12. Ce reprezinta Delete Cascade?
Intrebari generale
1. ce este o sectiune critica?
2. Care e diferenta intre thread si proces?
3. Ce reprezinta un semafor?
4. Ce reprezinta un proces sau thread zombie?
5. Care e diferenta intre un socket UDP si unu TCP/IP?
6. Ce este un DTD?
7. Ce este un XML Schema?
8. Ce este un XSL?
9. Ce este XHTML?
10. Ce este un deadlock? Exemplu.
11. Ce este DOM?
12. Deadlock. Ce este ? Exemplu.
13. Ce este stiva? Dar heapul?
- Vertraulich / Confidential -
- Vertraulich / Confidential -