Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Combinatie de conturi pentru tran...

Adaptor semnal hi to low

Jocuri Android Multiplayer online...

Diferenta consum smart meter - Co...
 Recomandare demontare+instalare ...

CAIET SERVICE PREDEAL II

Internare spital psihiatrie

CM de snooker 2024
 Scot penele dupa montajul tamplar...

Masina de spalat vase si grasimea

Noua lege de acces in paduri

Sunt ouale proaspete?
 Aplicatie invatare limba Germana

Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile
 

Number format

- - - - -
  • This topic is locked This topic is locked
42 replies to this topic

#19
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018

View Postpiramyd, on 21 septembrie 2018 - 14:12, said:

In java nu ai regulile clar scrise.
Ce reguli? Nu doreai sa vezi care-s caracterele pt. decimal si digit grouping in functie de Locale?

#20
piramyd

piramyd

    Member

  • Grup: Members
  • Posts: 346
  • Înscris: 12.04.2007

View PostLibertarian, on 21 septembrie 2018 - 14:35, said:


Ce reguli? Nu doreai sa vezi care-s caracterele pt. decimal si digit grouping in functie de Locale?

Nu. Care sunt regulile. Nu sunt de ajuns caracterele. Poate intr-o tara nu se desparte partea intreaga deloc, de exemplu.

View Postdani.user, on 21 septembrie 2018 - 14:30, said:

As masura cat mai repede ce incarca serverele. Intuitia imi zice ca e foarte putin probabil sa fie de la parsari de numere.
Ai partial dreptate. In mare parte rezolvasem de cateva zile, dar si parsari sunt in peak cateva zeci de milioane pe secunda, pe un cluster de cateva calculatoare.
Nu pot sa dau detalii.

#21
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018

View Postpiramyd, on 21 septembrie 2018 - 20:24, said:

Nu. Care sunt regulile. Nu sunt de ajuns caracterele. Poate intr-o tara nu se desparte partea intreaga deloc, de exemplu.
Nu vad niciun fel de "reguli" acolo ci doar niste tabele cu niste date pe care le extragi oricum direct din java.

#22
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View Postpiramyd, on 21 septembrie 2018 - 20:24, said:



Nu. Care sunt regulile. Nu sunt de ajuns caracterele. Poate intr-o tara nu se desparte partea intreaga deloc, de exemplu.

Deci ai un if în plus. Mare brânză.

#23
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View Postdani.user, on 21 septembrie 2018 - 14:30, said:

As masura cat mai repede ce incarca serverele. Intuitia imi zice ca e foarte putin probabil sa fie de la parsari de numere.
de obicei (nu stiu in cazul asta) , dar de obicei API-urile de java pentru parsari de numere folosesc in spate regex_patternuri  care este mult mai rau decat try and catch
in bucla  for si asta pentru ca API-urile de java sunt generaliste , iar aici i se cere optimizare.

Am intalnit in productie aceasta problema  si modul cum am rezolvat-o a fost sa-mi creeez propriul algoritm de parsare a stringului catre numar folosind doar
primitive(array-uri de charuri, si nu String care este obiect si are metadate ) si algoritm conceput de mine .
Tin minte ca am facut algoritmul inclusiv si pentru numerele negative si puteam sa creeze numere reale inclusiv cu orice precizie doream.

La cateva zeci de milioane de date, datorita acestui algoritm conceput de mine, pe care orice programator de liceu il poate face ca tema pentru acasa,
am scazut incarcarea servelor cu  50 % iar timpul de procesare a scazut cu 60 %

In cazul nostru nu avem de a face cu un programator ci un user obisnuit.

View PostLibertarian, on 22 septembrie 2018 - 07:49, said:

Nu vad niciun fel de "reguli" acolo ci doar niste tabele cu niste date pe care le extragi oricum direct din java.
Nu le vezi pentru ca nu esti programator si nu ai gandirea formata sa le vezi.Este ca si cum cineva ti-ar pune in fata o ecuatie si tu intrebi unde este ecuatia pentru ca nu
stii ce este o ecuatie.

Edited by CrocodiluMereuVesel, 22 September 2018 - 08:43.


#24
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018

View PostCrocodiluMereuVesel, on 22 septembrie 2018 - 08:41, said:

Nu le vezi pentru ca nu esti programator si nu ai gandirea formata sa le vezi.Este ca si cum cineva ti-ar pune in fata o ecuatie si tu intrebi unde este ecuatia pentru ca nu
stii ce este o ecuatie.
Nu le vad pentru ca nu exista. Programator sunt de aproape 30 de ani.

Non-programatorul esti tu, care te bagi in seama aiurea cu tot felul de minciuni si habarnisme(aberatii scoase de pe goagle aiurea) - nu ar fi pentru prima oara cand o faci. Si nici macar un sistem de ecuatii de gradul intai nu il intelegi si nu il poti rezolva(clasa a 9a parca). ;)

#25
Libertarian

Libertarian

    Junior Member

  • Grup: Members
  • Posts: 196
  • Înscris: 19.09.2018

View PostCrocodiluMereuVesel, on 22 septembrie 2018 - 08:41, said:

de obicei (nu stiu in cazul asta) , dar de obicei API-urile de java pentru parsari de numere folosesc in spate regex_patternuri  care este mult mai rau decat try and catch
in bucla  for
Bati campii grav. In primul rand functiile de parsare de numere din java de obicei NU folosesc regex, de exemplu Integer.parseInt nu o face si nici NumberFormat sau DecimalFormat parse() nu o fac.  Doi, Java are un engine regex chiar foarte performant. Oportunitatea crearii unei functii custom pentru parsarea de numere reala e dictata strict de cerinte si doar daca ai verificat riguros ca ar fi o problema de performanta ca isi are originea in viteza parsarii.

View PostCrocodiluMereuVesel, on 22 septembrie 2018 - 08:41, said:

Am intalnit in productie aceasta problema  si modul cum am rezolvat-o a fost sa-mi creeez propriul algoritm de parsare a stringului catre numar folosind doar
primitive(array-uri de charuri, si nu String care este obiect si are metadate ) si algoritm conceput de mine .
Aoleo, String are metadate? Cum ar fi preistoricul serial uid care-i doar o constanta sau hash care nici nu e calculat pana nu se apeleaza functia hashcode? Care ar fi relevanta acestor "metadate", de ce ai simtit nevoia sa subliniezi cu rosu? Vrei sa zici ca acestea "franeaza" perfomanta operatiunilor cu stringuri? Posted Image String e obiect. Doar ca nu asta ar fi problema principala nici pe departe. Ci alta. Dar trebuie sa fii programator ca sa stii care . Posted Image

View PostCrocodiluMereuVesel, on 22 septembrie 2018 - 08:41, said:

Am intalnit in productie aceasta problema  si modul cum am rezolvat-o a fost sa-mi creeez propriul algoritm de parsare a stringului catre numar folosind doar
primitive(array-uri de charuri, si nu String care este obiect si are metadate ) si algoritm conceput de mine .
Tin minte ca am facut algoritmul inclusiv si pentru numerele negative si puteam sa creeze numere reale inclusiv cu orice precizie doream.

La cateva zeci de milioane de date, datorita acestui algoritm conceput de mine, pe care orice programator de liceu il poate face ca tema pentru acasa,
am scazut incarcarea servelor cu  50 % iar timpul de procesare a scazut cu 60 %
Si marmota invelea staniolu-n ciucalata.

Edited by Libertarian, 22 September 2018 - 10:27.


#26
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018
Puisor, nu intelegi conceptul de spatele unui regex-pattern si nici cum functioneaza, cat despre String, puisor nu intelegi conceptul de obiect si cum este implementat un obiect in java
Cand ai obiecte ai si metadate puisor, care iti umpla memoria pt a tine in minte valoarea in sine (care este primitiva).
In java , obiectele String, Integer,Double sunt containere care contin primitiva in sine + metode de transformare, prin asta se deosebesc de primitvele int, char, long, double.
Puisor asta este intrebare eliminatorie la interviul de java: Care este diferenta dintre  Integer, Double, Long si int, long, double

Quote

Si marmota invelea staniolu-n ciucalata.
La tine da, la mine nu
Asa cum spuneam: tu nu esti programator si nici c-o sa devi in scurt timp.
Auzi la el  containere de date pt prelucrari masive, hahaha Posted Image Posted Image Posted Image

Puisor pune mana si fa-ti prorpiul algoritm de parsare daca te tin suruburile si nu mai fi utilizator de api-uri facute de altii, auzi la el este programator de 30 de ani , hahahaha :lol: :lol: :lol: , Doamne de unde ii scoti, numai tu stii :lol: :lol:

Deci rad cu lacrimi, haha :lol:

Edited by CrocodiluMereuVesel, 22 September 2018 - 11:01.


#27
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
String = array de char + logica immutable

#28
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View Postdani.user, on 22 septembrie 2018 - 10:49, said:

String = array de char + logica immutable
String  =  array de char + container + metode de parsare + alte metode (adica obiect)

#29
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Container de ce cand array-ul de char e deja containerul?

Metodele ce nu le apelezi n-au nici o influenta.

https://github.com/o...ang/String.java

Array-ul simplu de char e tot obiect, asa ca n-are nici un avantaj fata de string cand doar citesti din el.

Edited by dani.user, 22 September 2018 - 11:16.


#30
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View Postdani.user, on 22 septembrie 2018 - 11:05, said:

Container de ce cand array-ul de char e deja containerul?

Metodele ce nu le apelezi n-au nici o influenta.

https://github.com/o...ang/String.java

Array-ul simplu de char e tot obiect, asa ca n-are nici un avantaj fata de string cand doar citesti din el.
Mai  bine ar fi sa faci niste teste de memorie in java cu 1 milion de obiecte de tip Integer si un milion de primitive  de tip int. Apoi ai putea sa faci niste prelucrari cu aceste dataseturi  sa scoti niste timpi
de prelucrare . In java conceptul de obiect este fundamental diferit fata de C++  chiar si in gestionarea memoriei.

Lucrul valabil si pt programatorul de 30 de ani vechime a luii peste prajit'.

Asa.... ca un hint(desi n-ar trebui sa fac asta ci tu ar trebui sa-ti dai seama), pe codul sursa al clasei String,
ai asa:
public String(char value[], int offset, int count) {
	 if (offset < 0) {
		 throw new StringIndexOutOfBoundsException(offset);

Tu acolo ai niste mecanisme de throwing de exceptii care daca intra in bucle de procesare, e durere.....

De altfel asta e si intrebare eliminatorie la interviul de senior java: "Pentru procesarea de masiva de date in bucle, ce alegeti clasa String sau array-uri de char , explicati alegerea ?:"
Daca userul alege clasa String (in contextul unor procesari masive de date, deci doar in acest context,)    atunci il sunam noi

Chestiile astea sunt fineturi pe care numai un senior in java le stiePosted Image
Si apoi tot un senior de java stie ca atunci cand are procesare masiva de date, se renunta la containerele String, Integer, Long, Double si cauta se evite API-urile generice (standard library) si trece pe
primitivele de array de chars, int, long, double, etc si se lucreaza foarte mult cu array-uri iar aici  intervin tehnicile de programare invatate in liceu pt optimizare:
gasirea mijlocului/minim/maxim al unui vector, prelucrari de matrice, diagoanala principala /secundara.
Iar in bucle de procesare masiva, erorile niciodata nu se trateaza cu try and catch si cu instructiuni if then else sau  switch case Posted Image
(desigur vorbesc de procesare masiva de  date in java)

Ba chiar mai mult daca se doreste optimizarea si mai puternica, se convertesc array-urile de charuri in array-uri de bytes si se lucreaza elegant cu instructiuni la nivel
de bit ,adica programul devine din ce in ce mai asemenator cu C-ul desi este scris in java si practic la final se obtine un algortim izbitor de asemanator cu sintaxa C,
unde se prelucreaza doar  cu numere, grupate pe  vectori si primitive,  inclusiv si charurile care au fost transformate in bytes(numere) iar toate comparatiile din if--uri se fac intre numere si swith-case-urile se fac dupa valoarea numerica a charului respectiv.

Edited by CrocodiluMereuVesel, 22 September 2018 - 14:29.


#31
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,233
  • Înscris: 24.02.2007
Eu iti repet ca array'ul de char pe care il tot pomenesti e tot un obiect, tu ma iei cu int vs Integer.

I give up. Nu te obosi sa-mi raspunzi.

Edited by dani.user, 22 September 2018 - 15:21.


#32
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View Postdani.user, on 22 septembrie 2018 - 15:18, said:

Eu iti repet ca array'ul de char pe care il tot pomenesti e tot un obiect, tu ma iei cu int vs Integer.

I give up. Nu te obosi sa-mi raspunzi.
Te duci frumusel si inveti OOP-ul (calumea de data asta si conceptul de obiect) si pe langa asta mai inveti si java cu aceasta ocazie.

#33
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018
Revine cu teste si rezultate:

Stimate domn, dani.user ia priveste aici :

"C:\Program Files\Java\jdk-10.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 2018.2.4\lib\idea_rt.jar=53796:C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath
C:\Users\CrocodilulMereuVesel\IdeaProjects\test\target\classes test.App

numar de elemente: 100000000
memorie folosita(primitive integer): 383.0 [MB]
memorie folosita(obiecte Integer): 1.0 [GB]
Process finished with exit code 0

desi ambele dataset-uri contin exact acelasi informatii, diferenta fiind doar in spatiu de stocare(exemplificat  aici) dar si in mai multe chestii importante(care influenteaza
performanta unui  job de procesare pe un server , implicit si resursele si comportamentul serverului)
Ei bine, diferenta de spatiu observabila din avion(oare cat o fi in procente ? Hm...)  se datoreaza (asa cum am evidentat in posturile anterioare) de prezenta metadatelor
la nivel de obiect in java, prin metadate intelegandu-se la niver arhitectural, orice nu este primitiva.
Astfel daca imi permiti ca o analogie vizuala, un obiect Integer(ca toate obiectele)  este ca o ceapa:bulbul este valoarea primitvei(purtatoarea de informatie) iar foile de ceapa
este obiectul care infasoara primitiva.  In conditiile cand pe noi ne intereseaza doar purtatoarele de informatiei atunci mai usor este un 1Kg de arpagic decat un 1 Kg de ceapa
desi ambele plante sunt din aceiasi familie si stocheaza aceiasi informatie: ADN-ul cepei insa intr-un mod ataaaaaaat de diferit.

si codul de testare:
package test;
/**
* Hello world!
*
*/
public class App {
public static void amprentaMemorie(String comment) {
	 long total = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();
	 long KB = 1024;
	 long MB = 1024 * KB;
	 long GB = 1024 * MB;
	 double formatted = 0.0d;
	 String um = "N/A";
	 if (total >= GB) {
		 formatted = total / GB;
		 um = "[GB]";
	 }
	 else if( total >= KB && total <= GB) {
		 formatted = total /MB;
		 um = "[MB]";
	 }
	 else if(total <KB) {
		 formatted = total/KB;
		 um = "[KB]";
	 }
	 System.out.println(
		 "memorie folosita(%COMMENT%): %MEM%"
				 .replace("%COMMENT%", comment)
				 .replace("%MEM%", formatted + " " + um)
	 );
}
public static void stocarePrimitive(int n ) {
	 int[] a = new int[n];
	 for (int i = 0 ; i< n; i++){
		 a[i] = i;
	 }
}
public static void stocareObiecte(int n) {
	 Integer[] a = new Integer[n];
	 for (int i = 0 ; i< n; i++){
		 a[i] = i;
	 }
}
public static void main( String[] args ) {
	 int n = 100000000;
	 System.out.println("numar de elemente: " + n);
	 stocarePrimitive(n);
	 amprentaMemorie("primitive integer");
	 stocareObiecte(n);
	 amprentaMemorie("obiecte Integer");
}
}


De asemenea las aici si un link pentru mai multe referinte ca sa te ajute sa intelegi programul de mai sus:
https://www.quora.co...a-for-beginners Posted Image Posted Image

Edited by CrocodiluMereuVesel, 22 September 2018 - 21:45.


#34
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Catamai trolleala. char[] vs. String nu conteaza asa mult, mare branza. Asta a zis dani.user.

Trolleala prin papusoi intra in int vs Integer.

Macar fa si tu testul ala calumea, cu char vs. Character, ca sa fie troleala simetrica pe una dintre axe cu ce a spus dani.user. Nici trolleala nu mai e ce era odata.

Edited by OriginalCopy, 23 September 2018 - 09:03.


#35
CrocodiluMereuVesel

CrocodiluMereuVesel

    Member

  • Grup: Members
  • Posts: 615
  • Înscris: 23.07.2018

View PostOriginalCopy, on 23 septembrie 2018 - 08:59, said:

Catamai trolleala. char[] vs. String nu conteaza asa mult, mare branza. Asta a zis dani.user.

Trolleala prin papusoi intra in int vs Integer.

Macar fa si tu testul ala calumea, cu char vs. Character, ca sa fie troleala simetrica pe una dintre axe cu ce a spus dani.user. Nici trolleala nu mai e ce era odata.
Puna mana si invata OOP-ul, lasa design patternurile ca ai sarit peste OOP. la fel pune mana si invata java ca se vede ca   nu intelegi codul(te uiti ca mireasa la fierastrau)
numar de elemente: 100000000
memorie folosita(primitive integer): 383.0 [MB]
memorie folosita(obiecte Integer): 1.0 [GB]

Hai, la scoala cu tine.

Edited by CrocodiluMereuVesel, 23 September 2018 - 09:24.


#36
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
A pai nu asa mai, daca vrei sa arati ca stii sa citesti ce scriem, trebuie sa faci si un benchmark corespunzator.

In outputul acela trebuie sa scrie "memorie folosita de 1 char[]" si "memorie folosita de 1 String".

Hai, pune burta pe codareala.

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate