Java

Miért ezt írja ki a program? (Java)

Fórumok

Lehet, hogy elmaradtam valamiben. Nem szoktam publikus változókat használni, csak ritkán.

Miért ezt írja ki az alábbi progi?: "B 2"


class A {
public int a = 2;
public void f() {
a+=5;
System.out.print("A ");
}
}

class B extends A {
public int a = 7;
public void f() {
this.a += 3;
System.out.print("B ");
}
}

public class task4 {
public static void main(String[]args) {
A x = new B();
x.f();
System.out.println(x.a);
}
}

készletkezelés

Fórumok

Sziasztok!

Tipikus készlekezelési probléma.
Adott egy termék és a következő lépések:
1. user A olvas, 10 db van belőle hozzá szeretne tenni 5 db-ot
2. user B olvas, 10 db van belőle el szeretne venni 2 db-ot
3. user B visszaírja az adtot 10-2 = 8
4. user A visszírja az adatot 10+5 = 15
A készle hibásan 15 lesz, pedig 13-nak kellene lenni.

A környezet amiben meg van valósítva Java EE.

A problémát úgy oldjuk meg, hogy soba állítjuk ezeket a kéréseket, és egy singleton osztály kezeli a készletet. Így atombiztosan működik, mert az egyes ejb-k a singleton sztálynak adják át, hogy az xy azonosítójú terméknek a készletét változtasd meg x-el. Mivel csak ő olvassa és írja az adatokat azért az adat mindíg konzisztens lesz.

Ez a megoldás bőven kiszolgálja a jelenlegi igényeket, viszont ha drasztikusan meg fog növekedni a felhasználószám, akkor gond lesz a kérések sorba állítása, drasztikusan csökkenhet a teljesítmény.
Mert ha van A, B, C, D, E termék készletének módosítására kérés, azok mehetnek nyugodtan párhuzamosan, ellenben ha 10 db A-termék készletének módosítására van igény, akkor azok lehetnek sorba állítva.

Erre a problémára van valami design pattern?

Nyílt forrású java projektek gyakorlásra

Fórumok

Sziasztok!

Szeretném átképezni magam java-ra, pár hónapja kezdtem. Kérlek írjatok nyílt forráskódú java projekteket (lehetőleg github reposokat) amihez tudnék javításokat, új funkciókat beküldeni gyakorlás céljából. Próbáltam keresgetni, de jobb szeretném ha olyanokat tudnék bővíteni amit a magyar közösség is használ. Lehetőleg olyanokat írjatok ahol aktívak a collaborator-ok és nem kell heteket várnom meg sírnom nekik, hogy átnézzék és elfogadják a PR-t. :)

Köszi!

PrimeFaces DataTable renderelés lassú

Fórumok

Sziasztok!

Adott egy form rajta egy DataTable komponens 10 oszloppal cellánként 1 vagy 2 output labellel.
Minél több sort kell lerenderelnie annál lassabb.
Viszonylag gyorsa adónak hozzá új sorok a felhasználói interakció során aminek kb 0,8-1 másodperc körül kellene lennie, de ez 150 tétel környékén már 2 másodperc, 250 tétel környékén 4-5 másodpercre esik vissza.

Ha a

liveScroll=true

opció be van kapcsolva akkor nincs gond a teljesítménnyel viszont a táblázat scrollozásakor érdekes sor duplikálódásokat találunk (a modellben egyszer szerepló tételt többször jeleníti meg).

Valaki tapasztalt már ilyen jelenséget?

nagy mennyiségű adat cachelése

Fórumok

Nagy mennyiségű adatot (több millió rekord) szeretnék cahe-elni és erre keresek valami jó módszert.

A fejlesztési környezet MySql és Java EE 7 (GlassFish).

Van egy kereskedelmi rendszer ahol termékeket értékesítenek. A termékek mozgása egy táblában található. Vannak különböző mozgásnemek melyek növelhetik, csökkenthetik a készletet vagy nincs készlet hatásuk.
Pl:
FORGALOM
ID_CIKK
DATUM
MENNYISEG
EGYSEGAR

Szükség van kimutatások készítésére egy adott időszak forgalmáról. Mennyi volt az adott időszak elején a nyitó készlet, mennyi volt a növekedés, csökkenés, a forgalom valamilyen módon számított fogyasztói és beszerzési árakon (többféle módon lehet számolni ez lényegtelen most a probléma szempontjából)

Jelenleg tervek szerint úgy működne a dolog, hogy egy éjszaki job leválogatja, hogy egy adott terméknek adott napon volt-e bármilyen mozgása és azt beleteszi egy cache táblába és a kimutatások már ebből a táblából dolgoznának.

Pl: ha egy adott termékből volt egy nap 300 vevőnek eladás egy 1 beszállítótól beszerzés, akkor az a cache táblában egy soron fog megjelenni,
pl. reszelt tejszínhab, csökkenés 1300 db, növekedés 200 db, adott napi mozgás -1100 db. Ezen kívül még kiszámolom hogy mennyi volt az aznapi nyitó készlet, záró készlet, illetve készlet értéket.

Ez mind szép és jó, addig amíg nem akarja a listákat úgy lekérni, hogy benne legyen a mai dátum, mert úgy a job éjszaka fut és csak az előző napig vannak benne az adatok.

Most én négy módszert látok a probléma megoldására:

1;
Ha listákat úgy készítem el, hogy ha a mi dátum is benne van a szűrő paraméterekben akkor egyrészt dolgozok a cache táblából, a mai adatokat pedig a többi táblából szedem össze. Így bonyolult lesz a kód, másrészt ha bármilyen változtatást kell eszközölni az üzleti logikában akkor azt minden kimutatáson át kell vezetni.

2;
Futhat egy job is amely x percenként az újonnan keletkezett adatokkal frissíti a cache táblát, de itt megint fennáll a veszélye annak hogy nem kap releváns adatot. pl. 15 perces a frissítési ciklus és az utolsó óta történt valami nagyobb készletmozgás.

3;
Ha a felhasználó kér egy listát és a szűrés a mai napra is vonatkozik, csak abban az esetben frissítem a cache táblát az újonnan keletkezett adatokkal. Talán ezt tűnik a legjobb módszernek. Ha még nem volt az adott tételből mozgás aznap, akkor bele insertálom a cache táblába, ha már volt mozgás akkor csak updatelem a rekordot az új értékkel. Csak itt meg akkor lehet gond ha sok user kezd el kimutatásokat készíteni. Egyszerre rengetegszer lesz lekérve az aznapi forgalom és insertálva/updatelve a cache táblába.

4;
a 2. és 3. kombinációja.

Melyik módszert érdemes használni, vagy van e erre esetleg valami jó design pattern.

Junior Java programozó képzés egy zsák pénzért

Fórumok

Ismerősöm gondolkozik karrier váltáson és kinézte magának az IT-t. Teljesen a nulláról, olyan user-t kell elképzelni, akitől ha megkérdezed, hogy milyen telefont használ, akkor első körben az a válasz, hogy Android-osat, második körben, hogy Samsung-ot. Miután elnavigálod a beállítások közé, utána megnézni neked, hogy melyik típus.
Nem akarok reklámot csinálni, de muszáj linkelnem, hogy értsétek miről van szó:
Junior Java programozó képzés
Szóval azzal kecsegtetnek, hogy befizetsz egy zsák pénzt és hozzád vágnak egy 250k HUF nettó állást.
Meg vannak ilyen oldalak is, hogy:
Crossover
Az oldal alapján van egy ilyen képlet, hogy: x év tapasztalat = xM Ft / HUF havi gázsi.

Több fenntartásom van a fent linkelt Junior Java programozói képzéssel kapcsolatban.
Az első, hogy van egy ikertestvérem, aki BME Infót végzett és láttam, hogy hogy néz ki, amikor szoftverfejlesztő lesz valakiből. Erős alapok (pl. algebra), programozás elmélet, architectúrák, algoritmusok, hálózatok és rendszerek, stb. Lehet szidni a magyar felsőoktatást, de láttam, hogy mit tanult és nem lett belőle hülye gyerek. Random programnyelvet egy manual és 2 tutorial alapján 2 óra alatt elsajátít. Pontosan emiatt hiába kezdtem C64-en a BASIC után gépi kóddal a hobbi programozói evolúciómat, sohasem fogom magam szoftver fejlesztőnek nevezni. Az általa írt kód jobban átgondolt, jobban struktúrált, jobban megtervezett és jövőállóbb, mint amit én összekontárkodok. A tesóm szerintem zseni, de neki is évek kemény munkájára és utána szakmai tapasztalatra volt szüksége ahhoz, hogy megszerezze a mostani szaktudását. Most pedig, amikor egy projektbe embereket keresnek, sokszor a párnájába sikítana a jelentkezők színvonalán.
A második, hogyha megnézek egy rendes álláshirdetés portált, ott a junior programozói pozíciókat is felsőfokú végzettséghez kötik. Természetesen fizetést nem írnak, de tudom, hogy kevesebb, mint a fenti hirdetésben promózott összeg.
A harmadik, hogy hasonló képzést (vagy pont ezt) az index-en is nyomattak videóban, ahol a vágó képeken a jelentkező zene lejátszót dobott éppen össze. Lehet vitatkozni persze, de a saját tapasztalataim alapján az index kiváló iránytű abból a szempontból, hogy amit ott nyomatnak, abban elkezdek erősen kételkedni.

Nem zárom ki, hogy jó érzékkel rendelkező, informatikára fogékony embereket fél év alatt meg lehet tanítani programot fejleszteni. A tesóm tapasztalataiból kiindulva tudom, hogy nagyon híg a felhozatal (külföldön legalábbis biztosan). Meg szeretném nyugtatni azokat is, akik esetleg sértve érzik magukat, hogy a felső fokú diplomát előhoztam. Jól tudom, hogy az nem garancia arra, hogy valakiből jó mérnököt faragnak (habár a tesóm évfolyamtársaiból (korábbi gimnáziumi osztálytársaink) szintén jó képességű szoftver fejlesztő lett). De akad ellenpélda is.

Szóval: kérlek segítsetek nekem:
1. Találkozott már valaki olyannal, aki ilyen képzéssel sikeres karrier váltást hajtott végre a nulláról? Netán az ellenkezője: ablakon kidobott pénznek bizonyult?
2. Léteznek ilyen pozíciók, ahol felsőfokú végzettség nélkül egyből jól kereső álláshoz lehet jutni, vagy ez is olyan, mint a kislányoknak meghirdetett modell képzés (lehúzás) - hogy befizeted a tanfolyamot, utána jó pénzért készítenek egy portfoliót és a végén mégsem viszi el a gyereket a világ 10 legjobb modellügynöksége közül az egyik?

Kíváncsi lennék pozitív vagy negatív tapasztalatokra. HR-esek se kíméljenek!

Köszönettel:
Dw.

GlassFish JSON-B

Fórumok

Sziasztok!

Glassfish (4.1) alatt szereznék JSON-B-t használni de a következő hibaüzenetet kapom:

java.lang.NoSuchMethodError: javax.json.stream.JsonGenerator.writeKey(Ljava/lang/String;)Ljavax/json/stream/JsonGenerator;

A http://json-b.net/users-guide.html oldalon leírt lib-ek (vagyis azok legfrisebb verziói) a GF lib könyvtárában vannak ennek ellenére jön az üzenet.

Mi lehet a gond?

Spring es Spark kapcsolat

Fórumok

Sziasztok!

Nehany napja kezdtem tanulni a springet es szeretnek nehany dolgot tisztazni.

Van a spring boot es a spring framework.Talaltam egy (rest) tutorialt, ami a bootot hasznalja. De a dokumentacioban altalanos alkalmazas szerepel, webes alkalmazast a framework oldalan emlitenek.

A boot doksiban ez a dependency szerepel:
org.springframework:spring-context:5.0.5.RELEASE
A rest doksiban ez:
org.springframework.boot:spring-boot-gradle-plugin:2.0.1.RELEASE

Mi a kulonbseg a ketto kozott? Milyen projektre erdemes hasznalni a bootot es milyenre a frameworkot?

Szamomra a rest webes projekt, ezert nem ertem miert a boot kell hozza. Meg azt se hogy miert van gradle es nem gradle.

Ha springet ossze szeretnek kapcsolni egy socket klienssel, az megoldhato message broker nelkul? Tegyuk fel, hogy en klienskent kapcsolodok a springhez 80as porton, a springen nyitva van a 9000-es port, amire egy allando service kapcsolodik es azon a porton ker le adatot, amit a kliensnek (nekem) tovabbit. Ertelem szeruen tobb kliens is lehet, ami ugyanazt a 9000-es portot hasznalna. Erre megoldas a spring szalkezelese, vagy nekem kellene uj szalakat inditani? Vagy pont erre lett kitalalva a message broker?

Csomagolas (licenszeles)

Fórumok

Van ket problemam, aminek szeretnek utana jarni.

1. Bundled Java

Azt mondjak, nem lehet legalisan szallitani a java-t az alkalmazas mellett. Mondjuk egy docker imaga-ben.
Kozben pedig pl. az Atlassian a Jira mellett ott szallitja egy konyvtarban a JRE-t. Hogy csinalja? Mi kell ahhoz?

2. GPL-essel egyutt csomagolas
Azt mondjak, hogy se nem szallithato egyutt, se nem linkelheto ossze GPL-es cuccal egy zart forraskodu proprietary software.
Hiaba nem modositotta a GPL-es library-t az ember es/vagy ertelemszeruen annak a forrasat szallitja, de akkor sem legalis:
- linkelni vele (jelentsen az barmit is, amit el lehet kepzelni ebben az esetben)
- egyutt szallitani GPL-es es proprietary sw-t (azaz pl. Ubuntu docker image-ben nem szallithato)

Hol talalok ezekre utmutatast?
Referenciat, pointert keresek.