This shows you the differences between two versions of the page.
sd-ca:teme:teme-03 [2015/04/25 11:17] emil.racec [Obiective] |
sd-ca:teme:teme-03 [2015/05/08 12:37] (current) razvan_madalin.matei |
||
---|---|---|---|
Line 8: | Line 8: | ||
Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi ** | Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi ** | ||
- | ** Deadline soft: 9 mai, ora 23:55 ** | + | ** Deadline soft: 11 mai, ora 23:55 ** |
- | ** Deadline hard: 12 mai, ora 23:55 ** | + | ** Deadline hard: 14 mai, ora 23:55 ** |
+ | |||
+ | |||
+ | ==== Modificari si actualizari ==== | ||
+ | * **27 aprilie**: a fost modificat example.json si exemplul de input/output | ||
+ | * **27 aprilie**: au fost publicate testele | ||
+ | * **28 aprilie**: a fost uploadat checkerul | ||
+ | * **3 mai**: s-au adaugat explicatii ale mesajelor de eroare | ||
+ | * **3 mai**: a fost uploadata o noua versiune de teste | ||
+ | * **8 mai**: amanare deadline | ||
Line 21: | Line 30: | ||
* va folosi structurile de date pentru a implementa o posibilia aplicatie reala | * va folosi structurile de date pentru a implementa o posibilia aplicatie reala | ||
- | Ati fost angajati pentru o firma care se ocupa cu generarea de statistici despre traficul web. Datele despre traficul web sunt stocate sub forma de obiecte JSON. Treaba voastra este sa automatizati procesul de interogare si manipulare a obiectelor JSON. | ||
- | |||
- | <hidden> | ||
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.) | 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. | 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. | ||
- | </hidden> | + | |
===== Cerinta ===== | ===== Cerinta ===== | ||
Line 37: | Line 43: | ||
<code cpp example.json> | <code cpp example.json> | ||
- | { | + | [ |
- | "firstName": "John", | + | { |
- | "lastName": "Smith", | + | "firstName": "John", |
- | "isAlive": true, | + | "lastName": "Smith", |
- | "age": 25, | + | "isAlive": true, |
- | "address": { | + | "age": 25, |
- | "streetAddress": "21 2nd Street", | + | "address": { |
- | "city": "New York", | + | "streetAddress": "21 2nd Street", |
- | "state": "NY", | + | "city": "New York", |
- | "postalCode": "10021-3100" | + | "state": "NY", |
- | }, | + | "postalCode": "10021-3100" |
- | "phoneNumbers": [ | + | |
- | { | + | |
- | "type": "home", | + | |
- | "number": "212 555-1234" | + | |
}, | }, | ||
- | { | + | "phoneNumbers": [ |
- | "type": "office", | + | { |
- | "number": "646 555-4567" | + | "type": "home", |
- | } | + | "number": "212 555-1234" |
- | ], | + | }, |
- | "children": [ | + | { |
- | ], | + | "type": "office", |
- | "spouse": null | + | "number": "646 555-4567" |
- | } | + | } |
+ | ], | ||
+ | "children": [ ], | ||
+ | "spouse": null | ||
+ | } | ||
+ | ] | ||
</code> | </code> | ||
Line 76: | Line 83: | ||
===== Operatii ===== | ===== Operatii ===== | ||
Operatiile pe care structura voastra de date trebuie sa le efectueze sunt: | 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 | * **get(succesiune_chei)**: afiseaza valoarea ultimei chei din succesiunea de chei | ||
* **put(succesiune_chei, valoare)**: adauga/modifica perechea ultima_cheie:valoare | * **put(succesiune_chei, valoare)**: adauga/modifica perechea ultima_cheie:valoare | ||
* **del(succesiune_chei)**: sterge perechea ultima_cheie:valoare | * **del(succesiune_chei)**: sterge perechea ultima_cheie:valoare | ||
+ | |||
+ | Operatiile pot esua cu urmatoarele mesaje de eroare, urmate de valoarea cheii la care au esuat: | ||
+ | * **ERROR_NOT_ARRAY**: se cere un index de la o cheie care nu reprezinta un JSON_ARRAY | ||
+ | * **ERROR_NOT_OBJECT**: se cere o cheie de la o cheie care nu reprezinta un JSON_OBJECT | ||
+ | * **ERROR_INDEX_OUT_OF_RANGE**: se cere un index de la o cheie care reprezinta un JSON_ARRAY cu un numar mai mic de intrari decat index-ul cerut | ||
+ | * **KEY_NOT_FOUND**: cheia cautata nu a fost gasita | ||
+ | |||
+ | Fiecare mesaj de eroare este precedat de numele operatiei la care a aparut eroarea. | ||
Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/output. | Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/output. | ||
===== Exemplu input/output ===== | ===== Exemplu input/output ===== | ||
+ | Operatiile de mai jos sunt efectuate asupra JSON-ului din //example.json// | ||
+ | |||
<columns 100% 50% -> | <columns 100% 50% -> | ||
<code cpp input> | <code cpp input> | ||
- | LOAD example.json | + | GET |
- | GET "notAKey" | + | GET 0 |
- | GET "spouse" | + | GET 0 "firstName" |
- | GET "isAlive" | + | GET 0 "age" |
- | GET "age" | + | GET 0 "isAlive" |
- | GET "firstName" | + | GET 0 "spouse" |
- | GET "address" | + | GET 0 "notAKey" |
- | GET "address" "streetAddress" | + | GET 0 "address" "city" |
- | GET "notAnObject" "streetAddress" | + | GET 0 "address" "notAKey" |
- | GET "phoneNumbers" | + | GET 0 "notAKey1" "notAKey2" |
- | GET "phoneNumbers" 0 | + | GET 0 "spouse" 0 |
- | GET "phoneNumbers" 1 "type" | + | GET 0 "phoneNumbers" 0 |
- | GET "phoneNumbers" 2 "type" | + | GET 0 "phoneNumbers" 0 "type" |
- | PUT "newKey" "newValue" | + | GET 0 "children" |
- | PUT "firstName" "Jack" | + | GET 0 "children" 0 |
- | PUT "address" "state" null | + | PUT "aKey" "aValue" |
- | PUT "notAnObject" "newKey" "newValue" | + | PUT 0 "aKey" "aValue" |
- | PUT "phoneNumbers" 0 "type" "office" | + | GET 0 "aKey" |
- | PUT "phoneNumbers" "type" "mobile" | + | PUT 0 "address" null |
- | GET "phoneNumbers" 2 "type" | + | GET 0 "address" "city" |
- | DEL "spouse" | + | GET 0 "address" |
- | DEL "notAKey" | + | PUT 0 "spouse" "Jessica" |
- | DEL "phoneNumbers" 0 | + | GET 0 "spouse" |
- | DEL "phoneNumbers" 0 | + | PUT 0 "phoneNumbers" 1 "type" "mobile" |
- | DEL "phoneNumbers" 0 | + | GET 0 "phoneNumbers" 1 "type" |
+ | PUT 0 "children" 0 "name" "John Snow" | ||
+ | DEL 0 "firstName" | ||
+ | GET 0 "firstName" | ||
+ | DEL 0 "notAkey" | ||
+ | DEL 1 "firstName" | ||
+ | GET 0 "phoneNumbers" 0 "number" | ||
+ | DEL 0 "phoneNumbers" 0 | ||
+ | GET 0 "phoneNumbers" 0 "number" | ||
+ | DEL 0 "spouse" | ||
+ | DEL 0 "address" | ||
+ | GET 0 "address" "city" | ||
</code> | </code> | ||
Line 116: | Line 143: | ||
<code cpp output> | <code cpp output> | ||
- | JSON_NOT_A_KEY "notAKey" | + | JSON_ARRAY |
- | null | + | JSON_OBJECT |
- | true | + | |
- | 25 | + | |
"John" | "John" | ||
+ | 25 | ||
+ | true | ||
+ | null | ||
+ | GET_KEY_NOT_FOUND "notAKey" | ||
+ | "New York" | ||
+ | GET_KEY_NOT_FOUND "notAKey" | ||
+ | GET_KEY_NOT_FOUND "notAKey1" | ||
+ | GET_ERROR_NOT_ARRAY "spouse" | ||
JSON_OBJECT | JSON_OBJECT | ||
- | "21 2nd Street" | + | "home" |
- | JSON_NOT_AN_OBJECT "notAnObject" | + | |
JSON_ARRAY | JSON_ARRAY | ||
- | JSON_OBJECT | + | GET_ERROR_INDEX_OUT_OF_RANGE "children" |
- | "office" | + | PUT_ERROR_NOT_OBJECT root |
- | JSON_NOT_AN_ARRAY "phoneNumbers" | + | "aValue" |
- | JSON_PUT_OK | + | GET_ERROR_NOT_OBJECT "address" |
- | JSON_PUT_OK | + | null |
- | JSON_PUT_OK | + | "Jessica" |
- | JSON_PUT_OK | + | |
- | JSON_PUT_OK | + | |
- | JSON_PUT_OK | + | |
"mobile" | "mobile" | ||
- | JSON_DEL_OK | + | PUT_ERROR_INDEX_OUT_OF_RANGE "children" |
- | JSON_DEL_NOT_A_KEY "notAkey" | + | GET_KEY_NOT_FOUND "firstName" |
- | JSON_DEL_OK | + | DEL_INDEX_OUT_OF_RANGE root |
- | JSON_DEL_OK | + | "212 555-1234" |
- | JSON_DEL_NOT_AN_ARRAY | + | "646 555-4567" |
+ | GET_KEY_NOT_FOUND "address" | ||
</code> | </code> | ||
</columns> | </columns> | ||
Line 155: | Line 186: | ||
===== Teste publice ===== | ===== Teste publice ===== | ||
- | Se vor publica pe data de 27 aprilie, ora 00:00. | + | [[http://ocw.cs.pub.ro/courses/_media/sd-ca/teme/sd2015_tema3_checker_v2.zip|Checker]] |
Line 197: | Line 228: | ||
**A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă** | **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă** | ||
- |