This is an old revision of the document!


Tema 3

Responsabili:

Depunctare întârziere după depășirea deadline-ului soft: -10p/zi

Deadline soft: 9 mai, ora 23:55

Deadline hard: 12 mai, ora 23:55

Obiective

În urma realizării acestei teme studentul:

  • va fi capabil să implementeze și să foloseasca un hashtable
  • isi va îmbunatați abilitatea de lucru cu liste
  • va folosi structurile de date pentru a implementa o posibilia aplicatie reala

Odata cu explozia internetului din ziua de azi a crescut, inevitabil, si gradul de risc la care un utilizator este expus in activitatea de zi cu zi. Pentru o detectie cat mai completa a numeroaselor tipuri de atacuri cibernetice, compania la care tocmai ati fost angajati va pune la dispozitie un set de date (in format JSON) ce contine statistici despre pagini web posibil”suspecte” (de exemplu: cu fisiere executabile infectate, cunoscute pentru fishing, continut ilegal sau potential daunator, etc.)

Generic numite “event-uri”, aceste date sunt stocate de catre Bitdefender intr-un depozit propriu, numit Event Correlation (EC). Pentru ca aceste inregistrari sa cuprinda o gama cat mai variata si actualizata de activitati ilegale (in vederea detectiei si preventiei) compania dispune de niste masini virtuale, numite HoneyPots (vulnerabile intentionat la atacuri) si raspandinte in diverse puncte geografice pe glob, care sa atraga in capcana hackeri si sa culeaga date despre activitatea lor: ce pagini acceseaza de pe honeypot-ul pe care tocmai (cred ca) l-au compromis, ce tipuri de atacuri initiaza, ce fisiere folosesc pentru aceasta, etc.

Cerinta

Se cere implementarea unei structuri de date care sa eficientizeze interogarea si manipularea obiectelor de tip JSON.

JSON este un acronim în limba engleza pentru JavaScript Object Notation, si este un format de reprezentare si interschimb de date intre aplicatii informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor si a altor structuri de date si este folosit in special pentru a transmite date structurate prin retea, procesul purtand numele de serializare. JSON este alternativa mai simpla, mai facila decat limbajul XML. Eleganta formatului JSON provine din faptul ca este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat alaturi de acest limbaj. Formatul JSON a fost creat de Douglas Crockford si standardizat prin RFC 4627.

Exemplu de obiect JSON:

example.json
{
  "firstName": "John",
  "lastName": "Smith",
  "isAlive": true,
  "age": 25,
  "address": {
    "streetAddress": "21 2nd Street",
    "city": "New York",
    "state": "NY",
    "postalCode": "10021-3100"
  },
  "phoneNumbers": [
    {
      "type": "home",
      "number": "212 555-1234"
    },
    {
      "type": "office",
      "number": "646 555-4567"
    }
  ],
  "children": [
  ],
  "spouse": null
}

Tipurile de baza pentru obiectele JSON sunt:

  • JSON_ARRAY: vector cu 0 sau mai multe objects
  • JSON_OBJECT: colectie de perechi cheie:valoare unde cheia este de tip string (unica in cadrul object-ului) iar valoarea poate fi de orice tip
  • JSON_STRING: secventa de 0 sau mai multe caractere ASCII
  • JSON_BOOL: true sau false
  • JSON_NUMBER: intreg
  • JSON_NULL: valoare nula, reprezentata de cuvantul null

Operatii

Operatiile pe care structura voastra de date trebuie sa le efectueze sunt:

  • load(fisier): incarca in structura voastra de date un obiect JSON dintr-un fisier
  • get(succesiune_chei): afiseaza valoarea ultimei chei din succesiunea de chei
  • put(succesiune_chei, valoare): adauga/modifica perechea ultima_cheie:valoare
  • del(succesiune_chei): sterge perechea ultima_cheie:valoare

Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/output.

Exemplu input/output

input
LOAD example.json
GET "notAKey"
GET "spouse"
GET "isAlive"
GET "age"
GET "firstName"
GET "address"
GET "address" "streetAddress"
GET "notAnObject" "streetAddress"
GET "phoneNumbers"
GET "phoneNumbers" 0
GET "phoneNumbers" 1 "type"
GET "phoneNumbers" 2 "type"
PUT "newKey" "newValue"
PUT "firstName" "Jack"
PUT "address" "state" null
PUT "notAnObject" "newKey" "newValue"
PUT "phoneNumbers" 0 "type" "office"
PUT "phoneNumbers" "type" "mobile"
GET "phoneNumbers" 2 "type"
DEL "spouse"
DEL "notAKey"
DEL "phoneNumbers" 0
DEL "phoneNumbers" 0
DEL "phoneNumbers" 0
output
JSON_NOT_A_KEY "notAKey"
null
true
25
"John"
JSON_OBJECT
"21 2nd Street"
JSON_NOT_AN_OBJECT "notAnObject"
JSON_ARRAY
JSON_OBJECT
"office"
JSON_NOT_AN_ARRAY "phoneNumbers"
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
JSON_PUT_OK
"mobile"
JSON_DEL_OK
JSON_DEL_NOT_A_KEY "notAkey"
JSON_DEL_OK
JSON_DEL_OK
JSON_DEL_NOT_AN_ARRAY

Precizari

Fisierele de test cu obiectele JSON sunt valide, nu este nevoie sa faceti verificari suplimentare.

Indicatii de implementare

Executabilul vostru se va numi tema3 si va primi exact 3 parametri: fisierul ce contine obiectul JSON, fisierul de input si fisierul de output.

Teste publice

Se vor publica pe data de 27 aprilie, ora 00:00.

Reguli pentru trimitere

Temele vor trebui trimise pe vmchecker. Atenție! Temele trebuie trimise în secțiunea Structuri de Date (CA).

Arhiva trebuie să conțină:

  • sursele voastre
  • Makefile
  • fisier README care să conțină detalii despre implementarea temei

Punctaj

  • 90 puncte obținute pe testele de pe vmchecker
  • 10 puncte: README + alte eventuale penalizări
  • Bonus 10 puncte pentru soluțiile ce nu au memory leak-uri.
  • TOTAL: 100 puncte (+10 bonus)

Coding style-ul trebuie sa fie consistent și ușor de citit. Ca ghid vă recomandăm:

sau

Citiți cu atenție Regulamentul General de Trimitere a Temelor.

Nu copiați! Toate soluțiile vor fi verificate folosind o unealtă de detectare a plagiatului. În cazul detectării unui astfel de caz, atât plagiatorul cât și autorul original (nu contează cine care e) vor primi punctaj 0 pe temele incepand de la prima si aceasta inclusiv. Heed my warning!

De aceea, vă sfătuim să nu vă lăsați rezolvări ale temelor pe calculatoare partajate (la laborator etc), pe mail/liste de discuții/grupuri etc.

FAQ

Q: Se poate folosi STL?

A: Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL nu este permisă

sd-ca/teme/teme-03.1430078090.txt.gz · Last modified: 2015/04/26 22:54 by razvan_madalin.matei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0