Bevezető

Stabil alapok

[!NOTE] Nagyon fontos, hogy meglegyenek a stabil alapok. Elsőnek érdemes megtanulni a webprogramozást. És nem, nem kell framework és különféle library!

Hasznos linkek

Python és még sok máshoz

CSS Források

Projekt vezetéshez

Teszteléshez

A könyveb repoját itt találod.

Visual Studio Code

Egy népszerű, ingyenes kódszerkesztő, amelyhez rengeteg bővítmény érhető el.

Innen tudod letölteni. https://code.visualstudio.com/ Miután letöltötted, telepítetted és megnyitottad. File -> New Text File ezután katt a “select a language”-re és válaszd ki ami kell épp.

VS Code beállítása

Format On Save-t pipáld be.

Auto Save: onFocusChange (Ha megnyitsz egy másik fájlt, akkor automatikusan ment.); Font Size: 14; Multi Cursor Modifier: ctrlCmd; Word Wrap: On;

Hotkeys

A kódodat az alt+shift+F-el tudod automatikusan formázni.

HTML: html:5

JS: clg

File -> Auto save-t pipáld be.

Bal alul Settings->Settings->Text Editor -> Formatting->Foomat On Save-t pipáld be.

View -> Word Wrap (Alt+Z =Sor tördelés)

Hely foglaló szöveg: lorem50 tab

Emmet hivatalos dokumentációja https://code.visualstudio.com/docs/languages/emmet

Emmet Cheat Sheet https://docs.emmet.io/cheat-sheet/

Prettier beállítása: ⚙️ Alapértelmezett formázónak állítás Nyomd meg: Ctrl+Shift+P Írd be: Format Document With... Válaszd: Configure Default Formatter Állítsd: esbenp.prettier-vscode

💾 Format on Save bekapcsolása Menj: File → Preferences → Settings Keresőbe írd: format on save Pipáld be: Editor: Format On Save

Settings->Extensions->Prettier-> Tab Width:4

VS Code kiegészítők listája

A felkiálltójellel ellátottak a legfontosabbak.

Angular Language Service (Segít Angular projektekben: hibák, kódkiegészítés, IntelliSense.) Angular Snippets (Version 18) (Kész Angular kódrészletek (ngFor, ngIf, component stb.).) Auto Close Tag! Auto Rename Tag! Bookmarks (Kódrészek megjelölése könyvjelzőként → gyorsabb navigálás.) Bootstrap 4, Font awesome 4, Font Awesome 5 Free (Gyors Bootstrap és ikon beillesztés.) Bootstrap 5 Quick Snippets (Gyors Bootstrap és ikon beillesztés.) Black Formatter (Python kódformázó.) Bracket Pair Color DLW (Beszínezi az egyező {} [] () párokat.) Code Spell Checker (Ellenőrzi a helyesírást kódban (pl. elgépelések változónévben).) ! CodeSnap (Kódrészletből szép képet készít.) Colorful Comments (A kommenteket színesebbé teszi (// TODO, // WARNING).)! Todo Tree (A TODO-kat gyűjti össze az adott projektben.) Color Highlight (A CSS színeket kiemeli.) Copy Relative Path (Gyors másolása a fájl relatív elérési útvonalának.) CSS Peek (Ctrl+katt megmutatja, melyik CSS szabály vonatkozik az elemre.)! css-auto-prefix (Sok régi böngésző nem támogatja a modern css-t. Emiatt érdemes ezt letölteni.) ESLint (JavaScript hibakereső és szabály-ellenőrző.) Formatting Toggle (Ki/be kapcsolja a kódformázót (pl. Prettier).) Git History(Megmutatja a régi commitokat.) Git Project Manager (Projektkezelés Git-tel.) GitHub Copilot (A kódon belül segít neked, ne használd.) GitHub Copilot Chat (Ne használd.) GitHub Pull Requests (GitHub PR-ek kezelése.) GitLens - Git supercharged (Mindenre jó a Gitben: ki írta a sort, mikor, változások, diff-ek.) Image preview (Képek előnézete a kódban.) IntelliCode (Okosabb kódkiegészítés Microsofttól.) IntelliCode API Usage Examples(Okosabb kódkiegészítés Microsofttól.) JavaScript (ES6) code snippets (Hotkey, pl.: clg) Live Sass Compiler (SCSS → CSS automatikus fordítás.) Hogyan használd? https://youtu.be/eLmyLg2TcHc?si=fm0GC8UI4KZvHvDu&t=594 Live Server! npm Intellisense (NPM csomagnevek automatikus kiegészítése.)! Playwright Test for VSCode (Webtesztek futtatása Playwrighttal.) Prettier - Code formatter! Project Manager! Quokka.js (Azonnal futtatja a JavaScript kódot, még mentés nélkül. De nem működik megfelelően a Ctrl+space) Restore Terminals Markdown All in One (Markdown fájl szerkesztéshez, tartalomjegyzék létrehozáshoz stb.) Csak dizájn, kinézet:

One Dark Pro! Material Icon Theme! Power Mode Plus (Animációk gépelés közben. Csak szórakozás.) Az adatlapján menj a fogaskerékre -> Powermode:Enabled. freeCodeCamp Dark Theme One Monokai Theme

Java programozáshoz

Debugger for Java Extension Pack for Java Gradle for Java Java Java Red Hat Maven for Java Mizu Icons (Dizájn!) Project Manager for Java Spring Boot Dahboard Test Runner for Java

HTML

A HTML (HyperText Markup Language) a weboldalak alapját adó leíró nyelv. Minden, amit egy weboldalon látsz – címek, bekezdések, képek, listák, táblázatok, űrlapok – HTML tagek segítségével jelenik meg. A HTML nem programozási nyelv, hanem egy szerkezetet leíró nyelv, amely megmondja a böngészőnek, hogy melyik elem mit jelent és hogyan épül fel a dokumentum.

A HTML tagek mindig valamilyen funkciót jelölnek: van, amelyik címsort hoz létre, van, amelyik egy szöveg bekezdést, listát vagy akár űrlapot. A tagek logikusan hierarchiába rendeződnek, így a böngésző és a keresőmotorok számára is érthetővé válik a dokumentum felépítése.

Az alábbiakban áttekintjük a leggyakrabban használt HTML elemeket, amelyek az alapját képezik minden modern weboldalnak.

Címsorok (Headings) A HTML 6 különböző szintű címsort használ:

– a legnagyobb, főcím

– alcím

– kisebb alcím …

– a legkisebb címsor A címsorok hierarchiát adnak a dokumentumnak, és segítenek a keresőmotoroknak is a tartalom értelmezésében.

Bekezdés A

tag hozza létre a bekezdéseket. A böngésző automatikusan ad körülötte egy kis térközt, így tagoltabbá és olvashatóbbá válik a szöveg.

Listák A HTML kétféle listát használ:

Rendezetlen lista (unordered list)

    – felsorolás, általában pontokkal
  • – listaelem Rendezett lista (ordered list)
      – számozott lista
    1. – listaelem Táblázatok A táblázatok több részből állnak: – maga a táblázat – a fejléc sorait foglalja magába – a tartalmi sorokat tartalmazza – egy sor Import-ok link:css → CSS importáláshoz. script:src → JS importáláshoz. Az Emmet egy kódbővítő eszköz, amellyel rövid parancsokból automatikusan teljes HTML vagy CSS kódot tudsz generálni.

      HTML Emmet parancsok ! → teljes HTML5 alap sablon div →

      .box →
      #header → ul>li → beágyazott listaelem ul>li*5 → 5 darab li elem div>p>span → hierarchia p{Hello} →

      Hello

      a[href="#"] → attribútumos elem Item numbering: $ Példa számozott listaelemre:

      ul>li.item$*5

      Multiplication: * Példa ismétlésre:

      ul>li*5

      Speciális Emmet elemek a:link → a:mail → link:css → script:src → mg → CSS Emmet parancsok m10 → margin: 10px; p20 → padding: 20px; bd1-s → border: 1px solid; fw700 → font-weight: 700; fs18 → font-size: 18px; bgc#333 → background-color: #333; c#fff → color: #fff; d:f → display: flex; jc-sb → justify-content: space-between; Forrás: Emmet hivatalos dokumentáció – Cheat Sheet https://docs.emmet.io/cheat-sheet/

      CSS

      CSS szelektorok:

      Az univerzális szelektor (*) minden HTML-elemet kijelöl. Az #id szelektor csak egy elemet jelölhet. A csoportosított szelektor (h1, h2, p) több elemet is kijelöl. CSS tulajdonságok:

      padding: belső térköz width: szélesség margin: külső térköz font-weight: betűvastagság A position: fixed; rögzíti az elemet a viewporthoz.

      CSS (Cascading Style Sheets) – Lépcsőzetes stíluslapok

      A CSS egy stílusleíró nyelv, amely HTML, XML vagy SVG alapú dokumentumok megjelenését (pl. színek, betűtípusok, elrendezés, margók stb.) határozza meg.

      A „lépcsőzetes” elnevezés arra utal, hogy a stílusok öröklődnek és felülírhatók: ha több stílus vonatkozik egy elemre, a böngésző bizonyos szabályok szerint dönti el, melyik érvényesüljön.

      A CSS önmagában nem programozási nyelv, tehát logikát (pl. változókat, függvényeket, feltételeket) közvetlenül nem tartalmaz.

      Alapvetően, így néz ki:

      selector { deklaráció; -> tulajdonság neve: tulajdonság értéke; }

      Viszont léteznek kiterjesztései, mint például:

      Sass (Syntactically Awesome Style Sheets) Less Ezek lehetővé teszik, hogy változókat, ciklusokat, függvényeket használjunk, és logikusabban, modulárisan építsük fel a stílusokat. A böngésző ezeket lefordított (kompilált) CSS fájlként kapja meg.

      box-sizing Flex elrendezés:

      Flexbox egy dimenzióban működik: sorban vagy oszlopban. A float régi technika, eredetileg szöveg körbefolyatása miatt találták ki.

      Flex paraméterek:

      flex: grow shrink basis Pl.: flex: 0 0 70% grow = 0 → nem nő shrink = 0 → nem zsugorodik || shrink = 1 → alaphelyzetben összezsugorodhat, ha kisebb a hely basis = 70% → alapértelmezett szélesség 70% Float elrendezés:

      Ha float-tal két dobozt egymás mellé akarsz tenni, gyakran kell clearfix trükk, külön üres

      vagy ::after pseudo-element a „töréshez”.

      Grid elrendezés:

      Ha komplexebb layoutot akarsz, pl.: több sor és több oszlop, vagy mobilon a main és aside egymás alá kerül, a Grid sokkal rugalmasabb. A reszponzív dizájn miatt kell a grid.

      HTML szemantikus formázó (inline) tagek

      Tag Jelentés magyarul Mire utal (szemantika) kiemelés, hangsúlyos szöveg fontos információ (nem csak vastag betű) dőlt kiemelés nyomatékosítás, hangsúlyváltás beszédben kiemelt, kiemelés sárgával releváns szöveg jelölése (pl. keresési találat) apróbetűs szöveg jogi, megjegyzés, mellékinformáció mű címe könyv, film, zene, műalkotás neve idézet rövid idézet, automatikus idézőjel

      hosszabb idézet külön bekezdésben idézett szöveg rövidítés pl. HTML (title: HyperText Markup Language) definíció először bevezetett fogalom
      – fejléc cella (általában félkövér és középre igazított) – normál adatcella Div A
      egy általános blokk szintű konténer, amelynek önmagában nincs szemantikai jelentése. Főként a szerkezet kialakítására és CSS alapú stílusozásra használjuk.

      Űrlapok (Forms) Az űrlapokat felhasználói adatok bekérésére használjuk:

      – maga az űrlap action – ide küldi az adatokat a böngésző (pl. backend URL) Gyakori mezők:

      SzintMűveletLeírás
      1. FORRÁS.stream()Elindítja a folyamatot. (KÖTELEZŐ)
      2. KÖZTES.filter(x -> ...)Szűrés (csak az marad, ami TRUE).
      (Bármennyi.map(x -> x.get...)Átalakítás (pl. objektumból csak egy String).
      lehet).sorted()Sorba rendezés.
      .distinct()Ismétlődések törlése.
      .limit(n)Csak az első n darab elemet hagyja meg.
      3. LEZÁRÓ.count()Megszámolja az elemeket. (Eredmény: long)
      (Csak EGY.forEach(x -> ...)Művelet minden elemen (pl. kiírás). (Eredmény: void)
      lehet a végén!).toList()Új listába gyűjt. (Eredmény: List<T>)
      .anyMatch(x -> ...)Van-e legalább egy ilyen? (Eredmény: boolean)
      .findFirst()Visszaadja a legelsőt. (Eredmény: Optional<T>)

Haladó verzió

Java Stream API – Cheat Sheet

  1. Stream létrehozása (Forrás)

A Stream mindig valamilyen adatforrásból indul. Pontosan egyet használhatsz. Nincs felsorolva az összes fajta.

ForrásPéldaLeírás
collection.stream()list.stream()Normál stream
collection.parallelStream()list.parallelStream()Több szálon fut
Arrays.stream()Arrays.stream(array)Tömbből stream
Stream.of()Stream.of(1,2,3)Manuális stream
Files.lines()Files.lines(path)Fájl sorai
BufferedReader.lines()br.lines()Input stream

Példa:

List<String> lista = List.of("A", "B", "C");

lista.stream()
     .forEach(System.out::println);

Még léteznek más fajta források is, melyekhez más köztes elemek tartoznak, a táblázatban nincsen felsorolva az összes.

ForrásPéldaLeírás
IntStream.range()IntStream.range(1, 10)Egész számokra stream
IntStream.of()IntStream.of(1,2,3)Manuális int stream
IntStream.generate()IntStream.generate(() -> 5)Végtelen int stream
DoubleStream.of()DoubleStream.of(1.0,2.0,3.0)Manuális double stream
LongStream.range()LongStream.range(1, 10)Long típusú stream
Arrays.asList()Arrays.asList(1,2,3).stream()Listából stream
  1. Köztes műveletek (Intermediate)

Ezek nem hajtódnak végre azonnal, bármennyit használhatsz. Csak a lezáró műveletnél futnak le.

MűveletPéldaLeírás
filter().filter(x -> x > 10)Szűrés
map().map(Person::getName)Átalakítás
mapToInt().mapToInt(String::length)Átalakítás (Elem → int)
flatMap().flatMap(List::stream)Stream-ek lapítása
sorted().sorted()Rendezés
sorted(Comparator).sorted(Comparator.comparing(Person::getAge))Egyedi rendezés
distinct().distinct()Duplikátumok eltávolítása
limit().limit(5)Első n elem
skip().skip(1)Első n kihagyása
peek().peek(System.out::println)Debug
  1. Lezáró műveletek (Terminal)

Ezek a terminális (lezáró) műveletek indítják el a stream futását. Pontosan egyet használhatsz minden stream-en.

MűveletVisszatérési típusPéldaLeírásKell .orElse()?
forEach()void.forEach(System.out::println)Minden elemre végrehajtódik❌ Nem
count()long.count()Elemek száma❌ Nem
sum()int/double.mapToInt(x -> x).sum()Csak numerikus streameknél❌ Nem
average()OptionalDouble.mapToInt(x -> x).average()Átlag numerikus streameknél✅ Igen
toList()List<T>.toList()Listába gyűjtés❌ Nem
collect()bármi.collect(Collectors.toList())Gyűjtés egyéni módon❌ Nem
findFirst()Optional<T>.findFirst()Első elem✅ Igen
findAny()Optional<T>.findAny()Tetszőleges elem✅ Igen
anyMatch()boolean.anyMatch(x -> x > 10)Legalább egy egyezik❌ Nem
allMatch()boolean.allMatch(x -> x > 0)Mind egyezik❌ Nem
noneMatch()boolean.noneMatch(x -> x < 0)Egy sem egyezik❌ Nem
min()Optional<T>.min(Integer::compare)Legkisebb✅ Igen
max()Optional<T>.max(Integer::compare)Legnagyobb✅ Igen

Megjegyzés: Az Optional visszatérési értékeknél (average(), findFirst(), findAny(), min(), max()) érdemes .orElse(defaultValue)-t használni, hogy biztosan legyen egy konkrét érték, ne Optional-ként kapd az eredményt.

Enélkül "OptionalDouble[81.77380952380952]" eredményt kapsz.

lista.stream().mapToInt(m -> m.getHazaiPont() + m.getIdegenPont())
                .sum();
  1. része Optional kezelés

Ha egy terminális művelet Optional-t ad vissza (pl. average(), min(), max(), findFirst(), findAny()), akkor a következő metódusokkal dolgozhatunk:

MetódusMit csinál?Mikor használjuk?
.orElse(value)Ha az Optional üres, ad egy default értéketHa stream lehet üres, de szeretnél konkrét értéket
.orElseThrow()Ha az Optional üres, kivételt dobHa üres érték hibás állapot, és nem akarsz defaultot
.ifPresent(Consumer)Ha van érték, lefuttat egy műveletetHa csak mellékhatást akarsz, de nem kell érték
.ifPresentOrElse(if)Mindenképpen lefut, ha van / nincs találat.Ha mindkét esetben valamit kiakarsz írni.
// orElse
double avg = numbers.stream().mapToInt(i -> i).average().orElse(0);

numbers.stream().findFirst().ifPresentOrElse( // Ha van találat...
                x -> System.out.println("Első szám: " + x),
                () -> System.out.println("Nincs első szám, a lista üres.") // Ha nincs...

// orElseThrow
int max = numbers.stream().max(Integer::compare).orElseThrow();

// ifPresent
numbers.stream().max(Integer::compare)
       .ifPresent(n -> System.out.println("Max: " + n));

// ifPresentOrElse
numbers.stream().max(Integer::compare)
       .ifPresentOrElse(n -> System.out.println("Max: " + n),
                        () -> System.out.println("Nincs találat."));
  1. Collectors (gyűjtés)

A collect() segítségével összegyűjthetjük az adatokat.

.collect(Collectors.xxx())
CollectorVisszatérési típusLeírás
toList()ListElemeket List-be gyűjt (sorrend megmarad)
toSet()SetElemeket Set-be gyűjt (duplikációk eltűnnek)
toMap()MapKulcs-érték párokat hoz létre
joining(", ")StringElemek összefűzése Stringgé, elválasztóval
summingInt()intInt értékek összegzése
summingDouble()doubleDouble értékek összegzése
averagingInt()doubleInt értékek átlagának kiszámítása
averagingDouble()doubleDouble értékek átlagának kiszámítása
groupingBy(x -> x)Map<K, List>Csoportosítás kulcs alapján
partitioningBy(x ->)Map<Boolean, List>Két csoportra bont feltétel alapján

1 soros “cheat sheet”

list.stream().filter(...).map(...).collect(...)

alt text

alt text

List<String> nevek =
        people.stream()
              .map(Person::getName)
              .toList();

Stream pipeline (alap működés)

list.stream()
    .filter(x -> x > 10)   // intermediate (szűrés)
    .map(x -> x * 2)       // intermediate (átalakítás)
    .sorted()              // intermediate (rendezés)
    .collect(Collectors.toList()); // terminal (lezárás)

Magyarázat

A Stream műveletek láncolhatók (pipeline)

Kétféle művelet van:

  • Intermediate (köztes)

új Stream-et ad vissza pl: filter, map, sorted

  • Terminal (lezáró)

végrehajtja a műveletet pl: collect, forEach, count

Fontos

  • A műveletek lazy módon futnak → csak a terminal műveletnél indul el!
  • A Stream egyszer használható.
  • Nem módosítja az eredeti kollekciót.

map vs filter

// filter → kevesebb elem
list.stream()
    .filter(x -> x > 10)

// map → ugyanannyi elem, csak átalakítva
list.stream()
    .map(x -> x * 2)
  1. groupingBy

Csoportosítás Map-be.

Map<String, List<Person>> eredmeny =
        people.stream()
              .collect(Collectors.groupingBy(Person::getCity));

Eredmény: Budapest -> [Person, Person] Debrecen -> [Person]

  1. partitioningBy

Két csoportra bontás (true / false).

Map<Boolean, List<Person>> eredmeny =
        people.stream()
              .collect(Collectors.partitioningBy(p -> p.getAge() >= 18));

Eredmény: true -> felnőttek false -> gyerekek

  1. groupingBy + filter

Tipikus vizsgafeladat.

Map<String, List<Person>> eredmeny =
        people.stream()
              .collect(Collectors.groupingBy(Person::getCity))
              .entrySet()
              .stream()
              .filter(e -> e.getValue().size() > 3)
              .collect(Collectors.toMap(
                      Map.Entry::getKey,
                      Map.Entry::getValue
              ));
  1. groupingBy + counting
Map<String, Long> stat =
        people.stream()
              .collect(Collectors.groupingBy(
                      Person::getCity,
                      Collectors.counting()
              ));
  1. groupingBy + mapping
Map<String, List<String>> stat =
        people.stream()
              .collect(Collectors.groupingBy(
                      Person::getCity,
                      Collectors.mapping(
                              Person::getName,
                              Collectors.toList()
                      )
              ));
  1. Stream fájlból
List<Baseball> adatok =
        Arrays.stream(Resource.balkezesek.split(System.lineSeparator()))
              .skip(1)
              .map(Baseball::new)
              .toList();

Mit csinál? String feldarabolása sorokra első sor kihagyása (header) objektum létrehozása lista készítése

  1. Optional használat

Sok Stream művelet Optional-t ad vissza.

Optional<Person> p =
        people.stream()
              .filter(x -> x.getAge() > 30)
              .findFirst();

// Biztonságos használat:
p.ifPresent(System.out::println);

Optional<Integer> max =
    list.stream()
        .max(Integer::compareTo);

max.orElse(0);
max.ifPresent(System.out::println);
  1. Parallel Stream

Több CPU magon fut.

list.parallelStream()
    .filter(x -> x > 10)
    .forEach(System.out::println);

⚠ Nem mindig gyorsabb.

  1. Tipikus stream pipeline
adatok.stream()
      .filter(x -> x.getAge() > 18)
      .map(Person::getName)
      .sorted()
      .distinct()
      .limit(10)
      .forEach(System.out::println);
  1. SQL vs Stream gondolkodás
| SQL      | Java Stream |
| -------- | ----------- |
| SELECT   | map         |
| WHERE    | filter      |
| GROUP BY | groupingBy  |
| COUNT    | count       |
| ORDER BY | sorted      |
  1. Stream pipeline logika

forrás ↓ köztes műveletek (0..n) ↓ lezáró művelet (1)

Példa:

List -> stream() -> filter -> map -> sorted -> toList()

A stream csak a lezáró műveletnél hajtódik végre (lazy evaluation).

TOP 5 Stream művelet

list.stream()
    .filter(x -> x > 10)   // köztes (intermediate)
    .map(x -> x * 2)       // köztes
    .sorted()              // köztes
    .collect(Collectors.toList()); // termináló

Tipikus vizsgafeladat minták

  1. Páros számok
list.stream()
    .filter(x -> x % 2 == 0)
    .toList();
  1. String hossz
list.stream()
    .map(String::length)
    .toList();
  1. Összeg
int sum = list.stream()
              .mapToInt(Integer::intValue)
              .sum();

Példák a használatra

1. Megszámolás

Hány meccs volt Madridban?

long db = lista.stream()
               .filter(x -> x.getHelyszin().equals("Madrid"))
               .count();

2. Kiíratás

Írd ki a 100 pont feletti hazai meccseket!

lista.stream().filter(x -> x.getHazaiPont() > 100).forEach(System.out::println);

3. Gyűjtés

Add vissza a városok neveit ABC sorrendben, ismétlődés nélkül!

List<String> varosok = lista.stream().map(AbcKosarlabdaLiga::getHelyszin).distinct().sorted().toList();

Collectors.partitioningBy és groupingBy, parallelStream példákkal

        record Car(String type, String make, String model, Integer engineCapacity) { }


        public static void main(String[] args) {
                List<Car> cars = List.of(new Car("sedan", "BMW", "530", 1998),
                                new Car("sedan", "Audi", "A5", 1998),
                                new Car("sedan", "Mercedes", "E-Class", 2500),
                                new Car("hatchback", "Skoda", "Octavia", 1600),
                                new Car("hatchback", "Toyota", "TypeR", 1450));

                // A .toList() visszalakítjuk listává az adatfolyamot.
                List<Car> sedanCars = cars.stream().filter(x -> x.type.equals("sedan")).toList();

                // Csinálunk egy listát, amiben csak a kocsik make attribútuma szerepel.
                // map: Egy az egyhez (1:1) transzformáció. Minden autóból egy márkát (String)
                // csinál.
                List<String> carMakeList = cars.stream().map(car -> car.make).toList();

                // Csinálunk egy listát, amiben csak a kocsik make és model attribútumai
                // szerepelnek.
                /*
                 * flatMap: Egy a többhöz (1:N) transzformáció. Itt minden autóból egy Streamet
                 * csinálsz (ami a márkát és a modellt tartalmazza), majd a flatMap ezeket a kis
                 * streameket "kilapítja" egyetlen nagy listává.
                 */
                List<String> carMakeModelList = cars.stream().flatMap(car -> Stream.of(car.make, car.model)).toList();

                Stream<Integer> szamokStream = Stream.of(10, 11, 12, 13, 14);

                /*
                 * Ilyenkor a Java még nem csinál semmit. Nem szűri le a számokat, és nem írja
                 * ki a konzolra a szöveget. Csak "feljegyzi" magának, hogy:
                 * "Majd ha valaki kéri az eredményt, ezeket a számokat így kell szűrnöm."
                 */
                Stream<Integer> szurtSzamokStream = szamokStream.filter(i -> {
                        System.out.println("Vizsgálom a számot: " + i); // Ez megmutatja a "lustaságot".
                        return i % 2 == 0;
                });
                /*
                 * A Stream API olyan, mint egy gyári futószalag. A filter és a map a gépek a
                 * szalagon, de a szalag csak akkor indul el, ha a végén valaki megnyomja a
                 * gombot (ez a terminális művelet, pl. a count vagy a toList).
                 */

                /*
                 * A terminális (záró) művelet (count). A tényleges munka csak itt kezdődik.
                 */
                System.out.println("Ennyi páros szám van:" + szurtSzamokStream.count());

                // ^ Gyűjtők (Collectors), a csoportosítás és a párhuzamos végrehajtás.

                // 😊 1. Partitioning
                /*
                 * A partitioningBy egy speciális gyűjtő, ami egy feltétel alapján pontosan két
                 * részre osztja a listát: azokra, amikre igaz a feltétel, és azokra, amikre
                 * nem.
                 */

                // Map<Boolean, List<Car>>: A kulcs mindig Boolean (true/false)
                Map<Boolean, List<Car>> autokSzetvalasztasa = cars.stream().collect(
                                Collectors.partitioningBy(car -> car.type.equals("sedan"))

                );

                // true kulcs alatt lesznek a sedanok, false alatt minden más
                System.out.println("Sedanok (true): " + autokSzetvalasztasa.get(true) + "/n");
                System.out.println("Nem sedanok (false): " + autokSzetvalasztasa.get(false));

                // 😊 2. GroupingBy (Csoportosítás)

                /*
                 * Amikor nem csak két kategóriánk van, a groupingBy segítségével bármilyen
                 * tulajdonság (pl. gyártó vagy típus) alapján csoportosíthatunk.
                 */

                // Csoportosítás: Típus szerint (Map<String, List<Car>>)
                Map<String, List<Car>> tipusSzerint = cars.stream()
                                .collect(Collectors.groupingBy(Car::type));

                // 😊 3. Összetett csoportosítás (Multi-level Map)
                /*
                 * A videó végén egy komplexebb példa van, ahol nem csak listába gyűjtjük az
                 * autókat, hanem egy Map-et teszünk egy Map-be. Itt azt nézzük meg, hogy
                 * típuson belül melyik modellnek mekkora a motorja.
                 */

                // Map<Típus, Map<Modell, Hengerűrtartalom>>
                Map<String, Map<String, Integer>> csoportositottAutok = cars.stream()
                                .collect(Collectors.groupingBy(
                                                Car::type, // Elsődleges kulcs: típus (pl. sedan)
                                                Collectors.toMap(
                                                                Car::model, // Belső Map kulcsa: modell
                                                                Car::engineCapacity // Belső Map értéke: motor mérete
                                                )));

                // 😊 4. Párhuzamos Streamek (Parallel Streams)

                /*
                 * Alapértelmezetten a stream egyetlen szálon (Sequential) fut.
                 *
                 * parallelStream(): A Java felosztja a feladatot több processzorszálra
                 * (úgynevezett ForkJoinPool-t használ).
                 *
                 * Mikor használd? Csak nagyon nagy adatmennyiségnél, mert a szálak kezelése
                 * plusz erőforrásba kerül.
                 *
                 * Váltás: Menet közben is válthatsz .parallel() és .sequential() hívásokkal a
                 * láncon belül.
                 * 
                 * Nem mindig gyorsabb, thread safety gondok, sorrend nem garantált.
                 */

                // 😊 5. Párhuzamosítás
                // A parallelStream() több szálon futtatja a műveleteket
                cars.parallelStream().forEach(car -> {
                        System.out.println(
                                        "Szál: " + Thread.currentThread().getName() + " dolgozik ezen: " + car.model());
                });

collect(groupingBy)+entrySet+filter példákkal

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class ApikGrouping {

    record Felhasznalo(String nev) {
    }

    public static void main(String[] args) {
        List<Felhasznalo> lista = Arrays.asList(
                new Felhasznalo("Andrea"), new Felhasznalo("Béla"),
                new Felhasznalo("Andrea"), new Felhasznalo("Andrea"),
                new Felhasznalo("Andrea"), new Felhasznalo("Béla"));

        System.out.println("Szűrt eredmények:");

        lista.stream()
                // 1. Csoportosítás és számlálás (létrejön egy Map a háttérben)
                .collect(Collectors.groupingBy(Felhasznalo::nev, Collectors.counting()))
                // 2. Belépünk a Map bejegyzéseibe
                .entrySet().stream()
                // 3. Szűrés: csak a 3-nál nagyobb előfordulások
                .filter(entry -> entry.getValue() > 3)
                // 4. Azonnali kiíratás tárolás nélkül
                .forEach(e -> System.out.println(e.getKey() + " " + e.getValue() + "-szor szerepel a listában"));

    }

}

További példák magyarázatokkal

Kattints ide.

Java Stream – Gyakori vizsgacsapdák

1. A Stream csak a lezáró műveletnél fut le (lazy evaluation)

A köztes műveletek nem hajtódnak végre azonnal.

Példa

list.stream()
    .filter(x -> {
        System.out.println(x);
        return x > 5;
    });

❗ Ez a kód nem ír ki semmit.

Miért?

Mert nincs lezáró művelet (terminal operation).


Helyes változat

list.stream()
    .filter(x -> {
        System.out.println(x);
        return x > 5;
    })
    .count();

Most már végrehajtódik a stream.


2. A stream csak egyszer használható

Egy Stream nem használható újra.

Hibás kód

Stream<Integer> s = list.stream();

s.filter(x -> x > 5).count();
s.filter(x -> x < 5).count();

Ez futáskor kivételt dob:

java.lang.IllegalStateException: stream has already been operated upon or closed

Helyes megoldás

Új streamet kell létrehozni:

list.stream()
    .filter(x -> x > 5)
    .count();

list.stream()
    .filter(x -> x < 5)
    .count();

3. A forEach() lezáró művelet

A forEach() terminal operation, ezért nem lehet utána folytatni a streamet.

Hibás pipeline

list.stream()
    .filter(x -> x > 5)
    .forEach(System.out::println)
    .map(x -> x * 2);

Ez fordítási hibát okoz, mert a forEach() lezárja a streamet.


Helyes pipeline

list.stream()
    .filter(x -> x > 5)
    .map(x -> x * 2)
    .forEach(System.out::println);

4. peek() használata

A peek() köztes művelet, általában debug célra használjuk.

Példa

list.stream()
    .filter(x -> x > 5)
    .peek(System.out::println)
    .map(x -> x * 2)
    .toList();

A peek():

  • köztes művelet
  • általában debugolásra használják
  • nem üzleti logikára

5. instanceof

ArrayList <Animal> lista=new ArrayList <>();
lista.add(new Cat("Cirmi"));
lista.add(new Dog("Blöki"));

lista.stream()
    .filter(x -> x instanceof Cat)
    .forEach(c -> System.out.println(c));

Rövid összefoglaló

| Szabály                    | Jelentés                              |
| -------------------------- | ------------------------------------- |
| Lazy execution             | A stream csak a lezáró műveletnél fut |
| Stream egyszer használható | Új stream kell minden feldolgozáshoz  |
| Terminal operation lezár   | Utána nem lehet új művelet            |
| `peek()`                   | Debug célra használjuk                |

Menü rendszer

// 5. feladat.
    public static void menu() {

        System.out.print("5. feladat: \n");

        // try-with-resource
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))) {

            String bekertSor;           

            while (true) {
                System.out.print("Kérek egy 1990 és 1999 közötti évszámot!:");

                bekertSor = br.readLine();

                int ev = Integer.parseInt(bekertSor);

                if (ev >= 1990 && ev <= 1999) {
                    //System.out.print("Ügyes vagy!");
                    // Hívd meg a kövi feladat metódusát!
                    break; // Kilépünk a ciklusból.
                } else {
                    System.out.print("Hibás adat!");
                }
            }
        } catch (IOException e) { }

    }

enum

Az enum (angolul enumeration, magyarul „felsorolás”) egy különleges típus a Java-ban (és más nyelvekben is), aminek az a lényege, hogy egy változó csak bizonyos előre definiált értékeket vehet fel.

Olyan, mintha létrehoznál egy listát vagy halmazt az értékekből, és a változó nem lehet más, csak a listában lévő értékek egyike.

public enum Status {
    PENDING,   // függőben
    COMPLETED, // teljesített
    CANCELLED  // törölt
}

Itt a Status egy új típus, ami csak három lehetséges értéket engedélyez: PENDING, COMPLETED, CANCELLED.

Példa használatra

public class Order {
    private Status status; // változó típusa enum

    public Order(Status status) {
        this.status = status;
    }

    public Status getStatus() {
        return status;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public static void main(String[] args) {
        Order order = new Order(Status.PENDING);
        System.out.println(order.getStatus()); // PENDING

        order.setStatus(Status.COMPLETED);
        System.out.println(order.getStatus()); // COMPLETED
    }
}

Debug

Ha sok projekted pirossan jelenik meg, akkor:

Tisztítsd meg a munkafolyamatot: Nyomj Ctrl+Shift+P-t, és futtasd: "Java: Clean Java Language Server Workspace". Ezután válaszd a "Restart" gombot. Ez kényszeríti a VS Code-ot, hogy újra átnézze az összes fájlt.

Vagy lehet a package névben van nagy betű.

Vagy kattints jobb gombbal a src mappára a bal oldali fában. Válaszd a "Add Folder to Java Source Path" lehetőséget (ha felkínálja).

Vagy, csak simán töröld ki a .vscode mappát és .classpath, .project fájlt.

És a .classpath fájlba írd át a sort erre:

	<classpathentry kind="src" path="src"/>

Deadlock

thread

A programozásban a deadlock (magyarul gyakran holtverseny vagy holtpont) egy olyan állapot, amelyben két vagy több folyamat (process) vagy szál (thread) kölcsönösen egymásra vár, így egyik sem tud továbbhaladni.

Ez a jelenség leggyakrabban a párhuzamos programozás során fordul elő, amikor az erőforrások (például memória, fájlok vagy adatbázis-zárolások) elérése nincs megfelelően összehangolva.

Teszt (Playwright)

Terminálba: npm init playwright@latest JavaScript -> tests -> GitHub Actions yes -> Install Playwright browsers? yes

Egy test mappád legyen, akár kicsi akár nagy betűs. Ezután a playwright.config.js-ben csekold le ezt: testDir: './tests',

Így indítsd el a "Kattintgatós" módot

Live Server-en indítsd el az oldalt.

Kattints a bal oldali sávban a Testing (lombik) ikonra.

Az alsó részen keresd meg a "Record new" gombot.

Ekkor a Playwright megnyit egy üres böngészőt és egy "Playwright Inspector" ablakot.

Írd be a címsorba a helyi weboldalad címét (pl. http://127.0.0.1:5500).

Kezdj el kattintgatni: vegyél fel egy új questet, pipáld ki, töröld le stb.

Látni fogod, hogy az Inspector ablakban automatikusan generálódik a kód.

Ha végeztél, csak zárd be a böngészőt, és a VS Code-ban ott lesz az új tesztfájl a kész kóddal! Bal oldalt frissítsd a test explorert és nyisd le a test részt ott láthatod az imént felvitt tesztedet.

Tesztek futtatása

Live Server-en indítsd el az oldalt.

Kattints a bal oldali sávban a Testing (lombik) ikonra. A test melletti play ikonra kattints.

GitHub Actions

Ennek meg kell lennie: .github/workflows/playwright.yml

A szóközöre és tabokra nagyon figyelj.

name: Playwright Tests
on:
  push:
    branches: [ main, master ] # Ha más a branch neve, akkor írd át.
  pull_request:
    branches: [ main, master ] # Ha más a branch neve, akkor írd át.
jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-node@v4
      with:
        node-version: lts/*
    - name: Install dependencies
      run: npm ci
    - name: Install Playwright Browsers
      run: npx playwright install --with-deps
    - name: Run Playwright tests
      run: npx playwright test
    - uses: actions/upload-artifact@v4
      if: ${{ !cancelled() }}
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30

Ez az útmutató, hogy mi alapján futtassa a GitHub a teszteket.

Amikor a terminálban telepítetted a playwright-ot (npm init playwright@latest), akkor yes-t kellett nyomni a GitHub Action-s kérdésre.

A README-dbe felülre ezt másold be és persze írd be a felhasználónevet és a reponevét.

![Workflow neve](https://github.com/FELHASZNALONEV/REPO_NEVE/actions/workflows/playwright.yml/badge.svg)

playwright.config.js

A GitHub Actions egy üres szerveren fut, ahol nincs elindítva a Live Server, ezért a playwright.config.js fájlba a lentit írd bele, amivel megmondjuk a Playwright-nak, hogy indítsa el a webszervert a tesztek előtt.

export default defineConfig({

    use: { //Fontos, hogy ne duplikáld a use részt!
     //... korábbi sorok
        baseURL: "http://127.0.0.1:8080", // Így nem kell mindig beírni.
        actionTimeout: 10000, // 10 másodperc minden kattintásra/gépelésre
        navigationTimeout: 15000,

    // ... többi sorok
        trace: "on-first-retry",
    },

//... korábbi sorok
    /* Run your local dev server before starting the tests */
    webServer: {
        command: "npm run start",
        url: "http://127.0.0.1:8080",
        reuseExistingServer: !process.env.CI,
        stdout: 'ignore',
        stderr: 'pipe',
    },
// ... többi sor
});

A "projects: [..]" részen kommenteld ki a safarit és a firefox-ot, ha nem akarod a gépedre is telepíteni azokat.

package.json

A gyökér könyvtárban lévő package.json-t ki kell egészíteni a playwright függőséggel:

{
{
  }
 //... korábbi sorok 
  ,
  "devDependencies": {
    "@playwright/test": "^1.44.0"
  }
// ... többi sor
}

Valamint ennél:

  "scripts": {},

Javítsd ki erre:

"scripts": {
  "test": "npx playwright test",
  "start": "servor . 8080 --reload" 
} //Duplikálni nem szabad.

Fontos , hogy a port számnak mindenhol egyeznie kell.

Terminálba: npm install --save-dev servor

Ezek után még csekkold le, hogy tuti nem a live servert akarja használni playwright. Terminálba írd be ezt: npx playwright test

Ha hiba van írd be ezt: npx playwright show-report Meg tudod nézni részletesen a hibát.

Ezután jöhet a commitolás a master/main-be. "Add GitHub Actions workflow" címmel.

Ezután a GitHub-on az adott reponál az Actions lapfülön láthatod, hogy sikerült-e a teszt.

Teljes teszthez

Terminálban: Ezzel csak a chromium típusú böngészőben futtatod a tesztet. npx playwright test --project=chromium

npm run start

Miután elindult minden a leállításhoz a terminálban nyomd meg a ctrl+C-t. npx playwright test

Többi hasznos terminál parancs a teszteléshez: npx playwright test --ui npx playwright test --debug

Spring Boot

Ezekben a projektekben a Spring Boot alapjait mutatom be gyakorlati példákon keresztül. A részletes magyarázatok és lépések a dokumentációkban találhatók, melyeket itt tekinthetsz meg:

Spring Boot jegyzetem. https://github.com/Nagraggini/springboot-for-beginners

Legegyszerűbb Spring Boot weboldal készítése. https://github.com/Nagraggini/springboot-render

Animal Shelter projekt dokumentáció. https://github.com/Nagraggini/animal-shelter

Student Registry projekt dokumentáció. https://github.com/Nagraggini/student-registry-app

Kiberbiztonság Alapvető fogalmak megértése Kiberfenyegetések típusai: Malware (rosszindulatú szoftverek) Adathalászat (phishing) Ransomware DDoS-támadások (túlterheléses támadások) Ezek működési mechanizmusai Hálózatok alapjai: Protokollok (pl. TCP/IP) Tűzfalak VPN-ek (virtuális magánhálózat) Kiberbiztonsági eszközök: Antivírus szoftverek Behatolásérzékelő rendszerek (IDS/IPS) Titkosítás Képzések és tanfolyamok Ingyenes források: Cybrary Cisco Networking Academy Coursera Minősítések: CompTIA Security+ Certified Ethical Hacker (CEH) Certified Information Systems Security Professional (CISSP) Ezekkel versenyképesebbé válhatsz a munkaerőpiacon. Gyakorlati tapasztalat Laborkörnyezet létrehozása: Saját virtuális laborkörnyezet, ahol tesztelheted a kiberbiztonsági technikákat. Kali Linux vagy VirtualBox hasznos lehet. CTF (Capture the Flag) versenyek: Segítenek a gyakorlati készségek fejlesztésében. A cél: megtalálni és kihasználni a biztonsági résekeket egy szimulált környezetben. Doxxolás (doxxing): Személyes információk illetéktelen közzététele (megfélemlítés, zaklatás, károkozás céljából). Nevek, címek, telefonszámok, privát üzenetek vagy egyéb érzékeny adatok nyilvánosságra hozatala az áldozat beleegyezése nélkül. Gyakran közösségi médiában vagy fórumokon történik, hogy megalázzák vagy támadások célpontjává tegyék az érintettet. Törvénybe ütközhet, jogi következményekkel járhat. Etikus hekkelés A kiberbiztonság egy specifikus része, ahol a szakemberek célzott támadásokat hajtanak végre a rendszerek gyenge pontjainak feltárása érdekében. Olvass angol nyelvű szakirodalmat. Első körben érdemes a webes hekkeléssel kezdeni. Alap szinten tudni kell egy-egy script nyelvet (pl.: ASP, vagy PHP). A web nagy része PHP-ben van megírva. (Keretrendszer: Geany) Hekkernek jó a "24 óra alatt tanuljuk meg a php-t", de programozónak nem jó, mert könnyű feltörni a kódokat, amik benne vannak (pl. SQL injection). Az OWASP (Open Web Application Security Project) egy nonprofit szervezet, amelynek célja, hogy javítsa a webalkalmazások biztonságát. Ajánlott elolvasni a Web Application Hacker's Handbook 2-t. Ha már biztosan mozogsz a témában, akkor kezdj el Python-t tanulni, exploitokat írni. Tor és a biztonság mítosza – mit érdemes tudni az etikus hackelés szemszögéből? Sokan hiszik, hogy a Tor böngésző használata önmagában teljes védelmet nyújt az anonimitás megőrzésében. Valójában azonban ez messze nincs így. Egy szakmai beszélgetésből is kiderült, hogy a Tor önmagában kevés: a hatóságok figyelhetik a forgalmat, és további biztonsági rétegek nélkül könnyen azonosítható lehet a felhasználó.

Minimális védelemként ajánlott: külön router használata VPN alkalmazása MAC-cím maszkolása további kiegészítő védelmi megoldások Fontos kiemelni: már egy egyszerű portscan is bűncselekménynek számíthat, ha engedély nélkül végzik. Ez rámutat arra, hogy az etikus hackelés és az illegális behatolási kísérletek között rendkívül vékony a határvonal.

Források

youtube.com

Pénzügyi ismeretek

Hasznos linkek

https://vaslevi.hu/kisokos

Revolut

Jobb felül piaci áras megbízás -> Limitáras eladási megbízás. pl.: 1 Ft = € 0.002529

Revolut X-en érdemes tőzsdézni, de inkább dedikált platformon jó. Maradjon USD-ben az összeg nem érdemes átváltani, csak, ha tényleg kell.

Tőzsde kezdőknek

Kedvezményes kupon kódok a Binance-hoz a leírásban és " Hogyan érdemes használni a Binance felületét" videósorozat itt.

Ha valaki kezdő a tőzsdén, itt van néhány fontos tanács és lépés, amit érdemes megfontolnia:

  1. Tanulás és Kutatás: Alapok megértése: Ismerkedj meg a tőzsde alapjaival, például a részvényekkel, befektetési alapokkal, kockázattal és hozammal kapcsolatos fogalmakkal. Források és oktatóanyagok: Számos könyv, online kurzus és oktatóanyag elérhető a tőzsdei kereskedésről. Használj ki ezeket az erőforrásokat.

  2. Tervezés és Célkitűzések: Célok meghatározása: Legyenek világos céljaid a tőzsdei befektetéssel kapcsolatban: mire szeretnél befektetni, mekkora hozamot vársz és mennyi idő alatt. Befektetési terv: Készíts egy befektetési tervet, amely tartalmazza az eszközallokációt (melyik eszközökre fektetsz be), a kockázatkezelést és a hosszú távú stratégiádat.

  3. Diverzifikáció: Ne tegyél minden pénzt egy kosárba: Diverzifikálj, vagyis ne csak egyetlen részvénybe, hanem több különböző eszközbe is fektess be, hogy csökkentsd a kockázatot. Befektetési alapok: Kezdésnek fontos lehet befektetési alapokba vagy ETF-ekbe való befektetés, mivel ezek több eszközből állnak össze, így diverzifikáltabbak.

  4. Kockázatkezelés: Csak befektetni, amit megengedhetsz: Ne fektess be olyan pénzt, amit szükséged van a mindennapi kiadásokra vagy fontos kötelezettségekre. Stop-loss megbízások: Használd a stop-loss megbízásokat, hogy megvédhesd magad a nagy veszteségektől.

  5. Kezdd kis lépésekkel és idővel tanulj: Demó számla: Sok bróker kínál demó számlát, ahol virtuális pénzzel kereskedhetsz. Ez jó módja annak, hogy gyakorolj anélkül, hogy valódi pénzt kockáztatnál. Fokozatosan növeld a kockázatot: Kezdd kis összegekkel és idővel, ahogy növekszik a tapasztalatod és magabiztosabb leszel, fokozatosan növeld a kereskedési pozíciók méretét.

  6. Tanácsadás és Támogatás: Kereskedési közösségek: Csatlakozz kereskedési közösségekhez, ahol másokkal megoszthatod tapasztalataidat és tanulhatsz másoktól. Pénzügyi tanácsadó: Amennyiben szükségesnek érzed, kérj tanácsot pénzügyi tanácsadótól vagy befektetési szakértőtől.

Fontos megjegyezni, hogy a tőzsdei kereskedés kockázatokkal járhat, és nem mindig biztos a profit. Fontos, hogy alaposan tanulmányozzuk és értsük meg a tőzsdei kereskedés alapjait, mielőtt valós pénzzel kezdenénk kereskedni. A türelem, a folyamatos tanulás és a hosszú távú gondolkodásmód fontos a sikeres tőzsdei befektetésekhez.

Mi a tőzsde?

A tőzsde egy olyan intézmény vagy platform, ahol a részvények, kötvények, árucikkek, devizák és más pénzügyi eszközök kereskedése zajlik. Az emberek és vállalatok itt vásárolnak és értékesítenek részvényeket vagy más értékpapírokat azáltal, hogy meghatározzák azok árát a kereslet és kínálat alapján. A tőzsde szerepe az, hogy lehetővé tegye a befektetőknek, kereskedőknek és vállalatoknak, hogy pénzügyi eszközöket vásároljanak vagy adjanak el egymás között. Ezen kereskedési tevékenységek eredményeként az árak változnak, ami befolyásolja az adott eszközök értékét. A tőzsde lehet helyi vagy nemzetközi, és elektronikus vagy hagyományos módon működhet. A legismertebb tőzsdék közé tartoznak a New York-i tőzsde (NYSE), a NASDAQ, a Londoni Értéktőzsde (LSE), a Tokiói Tőzsde (TSE) és más hasonló intézmények világszerte. Az itt zajló kereskedés befolyásolja a gazdaságot, befektetéseket és vállalati értékeket, és az árak változása számos tényezőtől függ, például a gazdasági feltételektől, vállalati teljesítménytől és piaci trendektől.

A tőzsde egy olyan intézmény vagy platform, ahol a részvények, kötvények, árucikkek, devizák és más pénzügyi eszközök kereskedése zajlik. Az emberek és vállalatok itt vásárolnak és értékesítenek részvényeket vagy más értékpapírokat azáltal, hogy meghatározzák azok árát a kereslet és kínálat alapján.

A tőzsde szerepe az, hogy lehetővé tegye a befektetőknek, kereskedőknek és vállalatoknak, hogy pénzügyi eszközöket vásároljanak vagy adjanak el egymás között. Ezen kereskedési tevékenységek eredményeként az árak változnak, ami befolyásolja az adott eszközök értékét.

A tőzsde lehet helyi vagy nemzetközi, és elektronikus vagy hagyományos módon működhet. A legismertebb tőzsdék közé tartoznak a New York-i tőzsde (NYSE), a NASDAQ, a Londoni Értéktőzsde (LSE), a Tokiói Tőzsde (TSE) és más hasonló intézmények világszerte. Az itt zajló kereskedés befolyásolja a gazdaságot, befektetéseket és vállalati értékeket, és az árak változása számos tényezőtől függ, például a gazdasági feltételektől, vállalati teljesítménytől és piaci trendektől.

Pénzügyi és tőzsdei elemző platform: https://finviz.com

Tőzsde alapfogalmak

A tőzsdével kapcsolatos alapfogalmak megértése fontos annak érdekében, hogy eligazodjunk a pénzügyi piacokon és a kereskedésben. Néhány alapvető fogalom:

Részvény: Egy vállalat tulajdonrészét jelenti. A részvényeket a tőzsdén keresztül lehet megvásárolni, és tulajdonosuk részesülhet a vállalat nyereségéből (osztalék), valamint részvényeinek értéke is változhat.

Kereslet és kínálat: A részvények árát a kereslet és kínálat egyensúlya határozza meg. Ha több ember szeretné megvásárolni az adott részvényt, mint ahányan el szeretnék adni, az ár emelkedhet, és fordítva.

Árfolyam: Ez az az ár, amelyen egy adott részvényt vagy más eszközt a piacon kereskednek. Az árfolyam folyamatosan változik a kereskedés során.

Index: Az index egy csoport vagy több részvény árfolyamának átlaga, és azt mutatja, hogy az adott részvények vagy árucikkek ára hogyan alakul.

Bika piac és medve piac: A bikapiac olyan időszak, amikor a piaci hangulat pozitív, és az árak emelkednek. A medvepiac viszont olyan időszakot jelöl, amikor a piaci hangulat negatív, és az árak csökkennek.

Kereskedési mennyiség: Ez azt mutatja, hogy egy adott időszak alatt mennyi részvényt vagy más eszközt kereskedtek.

Tőkeáttétel (Leverage): Ez az eszközökkel való kereskedés során alkalmazott technika, amely lehetővé teszi a kisebb összeggel rendelkezők számára, hogy nagyobb értékű pozíciókat nyissanak. Ugyanakkor a tőkeáttétel magában hordozza a magas kockázatokat is.

Kereskedési megbízások: Különböző típusú megbízások, amelyeket a tőzsdén lehet adni, például a piaci megbízás (azonnali vásárlás vagy eladás a legjobb elérhető áron), a limit megbízás (meghatározott áron történő vásárlás vagy eladás), stop megbízás (bizonyos árfolyam elérésekor aktiválódó megbízás) stb.

Ezek csak néhány alapvető fogalom a tőzsdével kapcsolatban. A részletesebb megértéshez és a sikeres kereskedéshez ajánlott alaposabban megismerni ezeket a fogalmakat és azok működését a tőzsdén

Mobil applikációk tőzsdés kereskedéshez

Az elején: Revolut -> Revolut X (alacsonyabb az átváltási díj) és inkább tartsd dollárban a pénzt, ne váltsd vissza forintra.

SZJA 15 % Az adóbevalláskor az egyéb jövedelem mezőbe írd be az összeget, amennyi szereztél, 2022-től a kripto után is kell adózni.

Kereskedő botokat a Binance-en be tudod állítani, ez az egyszerűbb platform kezdőknek, viszont min. 320.000 Ft-al lehet elkezdeni. És át kell váltani pro-ra a bot használathoz.

CoinMarketCap: Friss infókat kapsz a piac állásáról.

Későbbi kereskedéshez: Meta Trader 5 Trading 212 (Nincs havidíj, vagy inaktivitási díj. Overnight díj van.)

Hogyan vásárolj ETF-et? Élet az állampapíron túl

Adózás

1000 Ft alatti adótartozást nem tart nyilván a nav. Van külön kriptó és árfolyam nyereség mezők.

Hogyan töltsd le az adózáshoz szükséges dokumentumokat?

Revolut Megtakarítások és alapok -> Továbbiak -> Kivonat -> Külön töltsd le a HUF és a többi valutáról szólü kivonatot, az időszak legyen adóév.

Trading Három vonal -> Okmányok -> Számlakivonatok -> Éves -> Az "Éves beszámolót töltsd le.

Adóbevallás

Nav oldala

Nyisd meg szerkesztésre az adóbevallásodat -> Bal oldalt keress rá a "Külföldről származó"

Külföldi kamat / Revolut jutalom / Trading “pénztárolásért járó bevétel”

Sor száma: 57–58. sor (Nyomtatvány: „Kamatjövedelem külföldről”) Ide írod a Revolut savings, referral vagy bármilyen külföldi kamatjövedelmet.

Minden pénznem összegét külön jegyezd fel és váltsd át forintra a mnb.hu-n. Átlag árral számolj.

Kamat / Revolut jutalom/ Trading “pénztárolásért járó bevétel”: Sor 57–58 (külföldi kamat) → ide írod az átszámított forintösszeget (teljes bevétel, ne a 15%-os SZJA-t). Az SZJA 15%-a a forintra átszámított összeg után számolandó.

Trading, részvény vagy kripto eladásból származó nyereség

Akkor megy a 53. sorba (nettó profit).

De ha csak tartod a pénzed és kapod a cash reward-ot, akkor nem ide, hanem kamat sorba.

English

Appok: Dualingo RealLife English Quizlet Loora Ai-al lehet beszélgetni. More AnkiDroid https://play.google.com/store/apps/details?id=io.morfin.morfinapp Aniwatch MangaToon Discord (Engedélyezd az értesítéseket a telón.)

Sure thing.= szívesen, természetesen I'm finished.=I'm done. fate=sors evaluate=értékel hostage=túsz invade=megszállni,beront slightly=némileg, sértően oak=tölgy observer=megfigyelő tail wagging=farokcsóválás belly rub=has csikizés scare off=elriaszt

💼 Alap munkahelyi kifejezések (general work phrases)

Angol kifejezés Magyar jelentés

I’m working on... Éppen ...-on dolgozom Let’s have a quick meeting. Tartsunk egy gyors megbeszélést. Could you please check this? Meg tudnád nézni ezt, kérlek? I’ll update you soon. Hamarosan frissítem az információt. I’ve just finished the task. Épp most fejeztem be a feladatot. I need some clarification. Szükségem van egy kis pontosításra. It’s still in progress. Még folyamatban van. It’s ready for review. Készen áll az ellenőrzésre. I’ll take care of it. Majd én elintézem. Thanks for your feedback. Köszönöm a visszajelzést.

🧪 Szoftvertesztelői kifejezések (QA / testing phrases)

Angol kifejezés Magyar jelentés

I’ve found a bug. Találtam egy hibát. I’m reproducing the issue. Újra előidézem a hibát. I can’t reproduce the issue. Nem tudom újra előidézni a hibát. The issue occurs only sometimes. A hiba csak néha jelentkezik. The bug is still open. A hiba még nyitott. The bug has been fixed. A hibát javították. Please verify the fix. Kérlek, ellenőrizd a javítást. The test passed. A teszt sikeres volt. The test failed. A teszt sikertelen volt. I’m running regression tests. Regressziós teszteket futtatok. It works as expected. Úgy működik, ahogy kell. I’ve added a new test case. Hozzáadtam egy új tesztesetet. I’ll log the issue in Jira. Rögzítem a hibát a Jira-ban. It’s a blocker / critical issue. Ez egy blokkoló / kritikus hiba. The environment is down. A környezet nem elérhető. Please check the logs. Nézd meg a logokat, kérlek. The build was deployed successfully. A build sikeresen települt. It needs more investigation. További vizsgálatot igényel. The feature is not implemented yet. A funkció még nincs implementálva.

💬 Meetingeken, beszélgetésekben hasznos mondatok

Angol kifejezés Magyar jelentés

Let’s go through the test results. Nézzük át a teszteredményeket. What’s the current status? Mi a jelenlegi állapot? I’ll share my screen. Megosztom a képernyőmet. Could you repeat that, please? Meg tudnád ismételni, kérlek? I didn’t catch that. Nem hallottam pontosan. I agree with that. Egyetértek ezzel. That makes sense. Ez logikus / érthető. Let’s prioritize this task. Prioritást adjunk ennek a feladatnak. I’ll check it and get back to you. Megnézem, és visszajelzek. Let’s keep it in mind for the next sprint. Tartsuk észben a következő sprintre.

💻 Technikai rövidítések (gyakori angol rövidítések a QA-ban)

Rövidítés Jelentés Magyar magyarázat

QA Quality Assurance Minőségbiztosítás QC Quality Control Minőségellenőrzés UAT User Acceptance Testing Felhasználói elfogadási teszt UI / UX User Interface / User Experience Felhasználói felület / élmény API Application Programming Interface Alkalmazásprogramozási felület DB Database Adatbázis TC Test Case Teszteset BR Bug Report Hibajelentés ENV Environment Tesztkörnyezet

Webes projekt mappa struktúrája ilyen legyen:

projekt-neve/
├── index.html                  # A fooldal (belepesi pont)
├── pages/                      # Aloldalak
│   ├── contact-us.html
│   └── about-me.html
├── assets/                     # Statikus eroforrasok
│   ├── css/
│   │   ├── main-style.css
│   │   └── header-style.css
│   ├── js/
│   │   ├── load-components.js
│   │   └── theme-switch.js
│   ├── images/
│   │   └── hero-banner.jpg
│   ├── fonts/
│   │   └── roboto-regular.woff2
│   └── icons/
│       └── favorite-icon.svg
├── components/                 # Ujrafelhasznalhato HTML reszletek
│   ├── header-component.html
│   ├── footer-component.html
│   └── sidebar-navigation.html
├── docs/                       # Dokumentacio es segedanyagok
│   ├── syllabus/               # Tananyagok (pl. istqb-syllabus-hu.pdf)
│   ├── architecture-plan.md    # A projekt felepitesenek leirasa
│   └── guides/
│       └── testing-guide.md    # Utmutatok a teszteleshez
├── tests/                      # Tesztelesi mappa (Playwright/E2E)
│   ├── e2e/                    # End-to-end tesztek
│   │   └── user-login.spec.js
│   ├── components/             # Komponens-szintu tesztek
│   │   └── header-check.spec.js
│   ├── fixtures/               # Tesztadatok
│   │   └── test-users.json
│   └── utils/                  # Segedfuggvenyek
│       └── test-helpers.js
├── playwright.config.js        # Playwright konfiguracio
├── package.json                # Fuggosegek es scriptek
└── README.md                   # Fo leiras a projektirol

Mindegyik fájl ékezet nélküli és kötöjeles (Kebab-case) legyen, valamint átlátható és konzistens.

Github branch

A Settingben állj át az új branchre és a Pages-en is.

Pages -> build and deployment -> source -> GitHub Actions -> Static HTML A branch névre figyelj, hogy megfelelő legyen beállítva.

Webfejlesztés áttekintés

Front-end fejlesztéshez használt technológiák:

HTML (HyperText Markup Language): Az alapvető nyelv a weboldalak szerkezetének létrehozásához. CSS (Cascading Style Sheets): A weboldalak megjelenésének stílusozására szolgál. JavaScript / EcmaScript: Dinamikus, interaktív funkciók hozzáadása a weboldalakhoz. Frameworks (pl. React, Angular, Vue.js): JavaScript alapú keretrendszerek, melyek megkönnyítik a dinamikus felhasználói felületek létrehozását. Responsive web design: A weboldalak adaptálása különböző eszközökre (például mobil, tablet). SVG (Scalable Vector Graphics): Vektorgrafikák megjelenítésére HTML-ben. XML (Extensible Markup Language): Adatok struktúrázására; manapság inkább JSON-t használnak front-end oldalon. Git & GitHub: Verziókövetés és közös kódkezelés mind front-end, mind back-end fejlesztők számára. Testing and debugging: A hibakeresés és a funkciók tesztelése a weboldalak és alkalmazások stabilitása érdekében. Basic UI/UX: Felhasználói felület és élmény alapfogalmak, melyek a felhasználóbarát megjelenés és működés kialakítását támogatják.

Back-end fejlesztéshez használt technológiák:

PHP: Szerveroldali programozási nyelv, amely gyakran használatos a webes alkalmazások hátterében. ASP.NET: Microsoft keretrendszer dinamikus webalkalmazások fejlesztéséhez. Komplex szerveroldali logikára van szükséged, például adatbázisokkal való mély integrációra vagy API-k készítésére. Python: Sokoldalú nyelv, amelyet webalkalmazások (pl. Django, Flask) hátterében használnak. Java: Szerveroldali nyelv nagyobb méretű alkalmazásokhoz, például vállalati megoldásokhoz. Ruby: Back-end nyelv, különösen népszerű a Ruby on Rails keretrendszerrel. SQL: Adatbázis-lekérdezésekhez használják, a back-end rendszerhez kapcsolódó adatok kezelésére. Node.js / NPM: JavaScript futtatása szerveroldalon (back-end). Express.js: Minimalista back-end keretrendszer a Node.js-hez. MongoDB: Dokumentumorientált adatbázis, amely jól működik együtt a Node.js és más modern alkalmazásokkal. API integration: Külső szolgáltatások és rendszerek integrálása webes alkalmazásokba API-k segítségével. Command line: Alapszintű parancssori ismeretek, melyek elengedhetetlenek a fejlesztési környezet kezeléséhez és a deploy folyamatokhoz. Security practices: Alapvető biztonsági gyakorlatok a webalkalmazások biztonságának megőrzéséhez.

Átfogó technológiák:

Git & GitHub: Verziókövető rendszerek, melyekkel a fejlesztők követhetik a kód változásait és közösen dolgozhatnak projekteken. HTTP: A webes kommunikáció alapvető protokollja, amelyet mind front-end, mind back-end fejlesztés során használnak.

Összefoglalva:

Front-end fejlesztő: HTML, CSS, JavaScript, front-end keretrendszerek (pl. React, Angular, Vue.js), responsive design, SVG, XML, alapvető UI/UX ismeretek Back-end fejlesztő: PHP, ASP.NET, Python, Java, Ruby, SQL, Node.js, Express.js, MongoDB, API integráció, security practice Mindkettő (vagy full-stack): Git & GitHub, HTTP, Node.js, parancssori alapok, hibakeresés és tesztelés Ez az elosztás a tipikus szerepekre épül, bár a "full-stack" fejlesztők mind front-end, mind back-end technológiákkal dolgozhatnak.

URL felépítése:

Tipikus kezdő hibák:

Túl sok időt töltenek az alapok megtanulásával (Elég, ha W3 school-on megnézni a html, css és javascript fejezeket) Nem kell elsőre a full stack fejlesztést megtanulni, elég a front-end-et és helyezkedj el azzal. Higgy a folyamatban! (Menj végig a lépéseken, a végén töltsd fel a projeketedet pl. insta clone)

Snippet shortcut:

https://docs.emmet.io/cheat-sheet/

Web developer checklist

STEP 1: Get Started STEP 2: HTML Tags What Is Web Developer? How Web Works? How Internet Works? What Is HTML, CSS And JavaScript? Head & Body Headings Paragraph List Image Anchor Form Element Tables Script Canvas Audio Video Doc Type Inline Style Block Vs Inline Path Defining STEP 3: CSS STEP 4: JavaScript Selectors Insert CSS File Color Fonts List Background Border Margin Padding Height Floats Positions Display Box Model Flexbox Animation Pseudo Class Media Query Variable Data Types Array Array Methods Object Conditions Loops Functions Call Stack Events Arrow Functions Class Object-Oriented ES6 DOM Callback Promise Http Debugging STEP 5: Other Topics STEP 6: Before Interview Bootstraps Unit Testing Github React Or Angular Redux/Ngrx Node.Js Firebase Npm, Webpack, Hosting Domain Personal Projects Online Portfolio #100dayofcodingchallenge Get Real Experience: Do Works For Free. Work For Friend & Family. Open Source Contribution Prepare For Coding Interviews: Solve Algorithm Problems Techie Programmer ©2023

40 Project ideas for Web developer

Calculator Quiz App Rock Paper Scissors Note App Stopwatch App QR Code Reader Weather App Ecommerce Website Landing Page Password Generator Tic Tac Toe Game Link Shortener Website Portfolio Website Drawing App Food Order Website Meme Generator Movie App Chat App Twitter Clone Survey App E-Book Site Instagram Clone Whatsapp Clone Netflix Clone File Sharing App Parallax Website Job Search App: Pinterest Clone Dating App Social Media Dashboard Tracker App Memory App Giphy Clone User Activity Tracker Stock-Trading App Chess Game Music Player To-Do List App Random User API Typing Speed Test

További program ötletek: Számkitalálós program. Ide kattints gomb, először kicsi a gomb, majd amikor rákattint a felhasználó, akkor kiírja, hogy mennyi idő alatt nyomott rá.

Ha rossz helyre kattintott, akkor egyre nagyobb lesz a gomb.

Hasznos linkek és források:

ElementorIT (ElementorIT Find Your Perfect Website Easily.) https://www.figma.com/ HTML+CSS https://www.youtube.com/watch?v=CtrMhe5Azys Javascript kezdőanyag https://journey.study/v2/learn/courses/1252/modules/19503/units/1 W3Schools Online Web Tutorials MDN Web Docs (mozilla.org)

Learn website development (from codehub.py): HTML -> html.com CSS -> css-tricks.com JS -> jsv9000.app DSA -> algorithm-visulizer.org GITHUB -> learngitbranching.js.org REACT -> react-tutorial.app API -> rapidapi.com/learn

Fejlesztői eszközök:

A WebStorm egy professzionális integrált fejlesztői környezet (IDE), amelyet a JetBrains fejlesztett ki, és kifejezetten webfejlesztéshez készült. Fizetős.

Visual Studio Code programot ajánlják.

HTML, CSS, JavaScript a játékfejlesztésben:

HTML: A játék alapstruktúráját hozod létre (pl. gombok a "kő", "papír" és "olló" választásához). CSS: A játék kinézetét tervezed meg. JavaScript: A játék logikáját programozod meg (pl. véletlenszerű választás a gép részéről, győztes meghatározása).

Codacy Linter hasznos a kódodhoz, automatizált korrektor. SonarLint a helyesírás-ellenőrző, ami írás közben, valós időben mutatja a hibákat.

Diagram és fájl struktúra készítéshez

A legtöbb akadály mentális. Egyszerűen csak el kell kezdeni. Problémákat kell megoldani. Meg kell nézni, hogy mi mit csinál. Mi mire jó, egy idő után össze fog állni a kép. Fontos, hogy projekt alapon tanulj.

A sikernek ára van:

Késő esték Korai reggelek Kevés barát Meg nem értettség Túlterheltség A józanságod megkérdőjelezése Saját magad drukkerének lenni

De tudod mit? Ne add fel, megéri!

Tanulási technikák (Freymann):

Az óra előtt rászánsz egy fél órát, hogy megértsd az anyagot, lényegét, felépítését. Figyelj a tanárra, nem kell mindent leírni, csak azt ami segít a tananyag megértésében. Írd le a gyakorló kérdéseket.

Azonnali ismétlés (Még aznap. Próbáld meg megválaszolni a leírt kérdéseidet.) Cipősdoboz módszer. Előtesztelés. Kis szakaszonként ismételd el az anyagot-> Ne csak gondolatban, írd le, vagy mond ki hangosan. Készíts gondolattérképet, legyen vizuális, használj színeket. Ne legyen tele az apróbb részletekkel. Egy témáról, ne csak egy térképen legyen. Használj tanuló kártyákat. Tömör, egyértelmű, készíts sajátokat. Használd a Feynman módszert. Barátoknak, családnak, képzeletbeli embereknek magyarázd el az anyagot egyszerűen, mintha egy óvodásnak magyaráznád. Oldj meg gyakorló feladatokat, vagy gyakorló teszteket.

Legalább 2744-szer próbáld meg

„Nem a bukás a kudarc, hanem ha feladod. Edison 2744 próbálkozással tanulta meg, mi működik. Te is minden hibából közelebb kerülsz a sikerhez.”

Valójában Thomas Edison 1 000–2 000 különböző anyagból próbálta kifejleszteni a megfelelő izzószálat a villanykörtéhez.

You NEED To Build These 7 Coding Projects

7 Kódolási Projekt Kezdőknek

Ez a videó 7 alapvető kódolási projektet mutat be, amelyeket érdemes megépítened, ha el akarod sajátítani a programozás alapjait. A készítő hangsúlyozza, hogy ezek a feladatok a tanulást szolgálják, és nem feltétlenül az önéletrajzba valók.

Íme a javasolt projektek listája:

  1. Egyszerű számológép alkalmazás: Segít elsajátítani a szintaxist és az alapvető számtani műveleteket.

  2. Kvíz alkalmazás: Megtanítja a felhasználói bevitel kezelését és a feltételes logikát.

  3. Teendőlista (To-do list): Segítségével megismerheted az alapvető CRUD műveleteket (létrehozás, olvasás, frissítés, törlés) és az adattárolást.

  4. Élő valutaátváltó: Fejleszti az API integrációs készségeidet.

  5. Időjárás-előrejelző alkalmazás: Szintén az API-k használatát gyakoroltatja, és bevezet a helymeghatározási szolgáltatások használatába.

  6. Blog platform: Megtanít a felhasználói bejelentkezés kezelésére és az adatok tartós tárolására.

  7. Teljesen működő e-kereskedelmi platform: Ez a legösszetettebb projekt, amely magában foglalja a fizetési integrációt, a felhasználói hitelesítést és az adatbázisokkal való munkát.

A videó végén a készítő megjegyzi, hogy ha már rendelkezel az alapokkal és az önéletrajzodhoz keresel komolyabb ötleteket, érdemes körülnézned neves egyetemek (pl. Harvard, MIT) hackathon projektjei között, vagy inspirálódni a Product Hunt weboldalon.

Gyakorlás (Kezdőtől haladó szintig): Exercism.org

Java-központú webfejlesztés: https://start.vaadin.com/ https://www.skillversum.com/note/view/e2b3bd715f5d6eefcb2f3d91e6362ec0b238d71cac3fc57c5d3c9bff7b9fb89c

Későbbre: https://www.builder.io/

PWA Tutorial for Beginners https://www.youtube.com/watch?v=4XT23X0Fjfk&list=PL4cUxeGkcC9gTxqJBcDmoi5Q2pzDusSL7