Bevezető

Stabil alapok

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


Git és verziókezelés

1. Kezdő szint — Stabil alapok

Webfejlesztés alapjai

  • W3Schools
    HTML, CSS, JavaScript és SQL alapok kezdőknek.

  • FreeCodeCamp
    Ingyenes gyakorlatorientált webfejlesztő tananyag.

  • The Odin Project
    Az egyik legjobb teljes webfejlesztő roadmap.

  • CodePen
    Frontend kódok gyors kipróbálása böngészőben.

  • Codecademy
    Interaktív programozás tanulás több nyelven.

  • Codedex
    Gamifikált programozás tanulás.

  • Class Central
    Programozási kurzus gyűjtőoldal.

  • Coddy.tech
    Interaktív kódolási feladatok.

  • Code Step By Step
    Programozási problémák lépésenként.

  • Dev.to
    Fejlesztői közösség és cikkek.

  • NotebookLM
    AI-alapú jegyzetelés és tanulás.


Videós és gyakorló anyagok


Gyakorlás

  • Codewars
    Programozási kihívások.

  • CheckIO
    Python és TypeScript gyakorlás.

  • Exercism
    Java és sok más nyelv gyakorlása mentorálással.

  • Codingame
    Játékos programozási feladatok.

  • DevChallenge
    Magyar programozási kvízek.


Projekt ötletek

  • Todo alkalmazás
  • Jegyzet app
  • REST API
  • URL rövidítő
  • Quiz app
  • Egyszerű webshop
  • Automatizált UI tesztek webshophoz

Nem gond, ha elsőnek spagetti kódot csinálsz a lényeg, hogy kódolj és ne csak nézd egymás utána tutorialokat, hanem hogy ELKEZDJ KÓDOLNI!


2. Frontend fejlesztés

CSS tanulás


Frontend projektek és gyakorlás

  • Scrimba
    Interaktív frontend és fullstack kurzusok.

  • Replit
    Online fejlesztői környezet.


3. Java Backend fejlesztés

Java alapok


Backend roadmap


Spring Boot és backend eszközök


API fejlesztés


SQL és adatbázis


4. Automatizált tesztelés (QA / SDET)

Tesztelési alapok


Java tesztelés


API automatizálás


UI automatizálás


Linux és parancssor (Főleg back-end és QA-nál fontos.)


5. Haladó fejlesztői eszközök

Hasznos kód elemző eszközök

  • Codacy
    Automatizált kódelemzés és code quality ellenőrzés.

  • SonarCloud
    Statikus kódelemzés és technical debt figyelés.

  • SonarLint
    IDE plugin, ami valós időben jelzi a kódhibákat és rossz practice-eket.

Diagramok és architektúra


Produktivitás


6. Projektmenedzsment és közösség

Verziókezelés és projektek


Közösség és networking


7. Karrier


Könyv repository

A könyvem 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 automatizálás

Ezeket használják manapság

Playwright (nagyon modern, Udemy-n jó kurzusok vannak) Cypress (frontend fókuszú) Ranorex -Az oldala kifejetezzen segít: support.ranorex.com + (Udemy) Automatizált Teszt Keretrendszer (ATF)

Weboldalak, amiket lehet tesztelni

Utest.com
API tesztelés videókurzus
UI test playground (the internet) UI Test Automation Playground Automation Exercise (UI and Api test) Api test Demo webshop Bank fiók HR-szoftver

Selenium

A Selenium-ot érdemes először kezdőként használni és után tovább menni a bonyolultabbak felé.

Selenium alapfogalmak

Selenium WebDriver

  • Programozható tesztautomatizálási eszköz.
  • Támogatja a legtöbb böngészőt (Chrome, Firefox, Edge stb.).
  • Több nyelven is használható: Java, Python, C#, JavaScript stb.
  • Fejlesztők és tesztelők írhatnak benne automatizált funkcionális/regressziós teszteket.

Selenium Grid

  • Lehetővé teszi a párhuzamos tesztfuttatást több gépen és böngészőn.
  • Hasznos, ha sok tesztet kell rövid idő alatt lefuttatni.
  • Két fő része van: Hub: Központ, ami elosztja a feladatokat. Node-ok: A gépek, ahol a tesztek ténylegesen futnak.

Selenium tesztek típusai

  1. Rögzítés és visszajátszás (Record & Playback)
  • Ezt a funkciót a Selenium IDE biztosítja.
  • A felhasználói műveleteket automatikusan rögzíti (kattintás, beírás, navigáció stb.).
  • Utána visszajátszható, így gyorsan lehet egyszerű teszteket készíteni.
  • Nem igényel programozási tudást, de kevésbé rugalmas.
  1. Programozott tesztelés (WebDriver)
  • Itt kódban írjuk meg a teszteket.
  • Rugalmas, skálázható, integrálható CI/CD folyamatokba (pl. Jenkins).

Assert -> Ha a feltétel nem teljesül, a teszt megáll. -> Kritikus ellenőrzésekhez Verify -> Ha a feltétel nem teljesül, a teszt tovább fut, de jelzi a hibát. -> Nem kritikus hibákhoz

Selenese

A Selenium IDE saját nyelve/parancskészlete. Egyszerű parancsokat használ, pl.: open, click, type, verifyText Támogat kommenteket is (pl. // jellel).

A Selenium Webdriver használatóról a gyakorlásaimat és jegyzeteimet itt találod.

További projektjeim: sauce-demo automation-exercise

QA (tesztautomatizálás)

Manuális vs automatizált tesztelés

Manuális tesztelés:

  • UX/UI, kinézet, felhasználói élmény
  • ad-hoc / exploratory tesztelés
  • gyors validáció új feature-re

Automatizált tesztelés:

  • ismétlődő tesztek (regresszió)
  • stabil funkciók ellenőrzése
  • gyors visszajelzés CI-ben
  • UI-t is lehet automatizálni

Fontos
➡️ amit sokszor futtatsz → automatizáld

Framework felépítése

Test layer – maga a teszt (JUnit/TestNG).
Page Object Model (POM) – UI elemek és műveletek külön osztályokban. Ha változik a HTML, nem kell minden tesztet átírni, csak ezt az egy osztályt.
Utility réteg – pl. wait-ek, config, logger.
Ez az újrahasznosítható segédkód. Driver kezelés – WebDriver setup/teardown.
Böngésző indítása és leállítása.

👉 Példa stack:

Java + JUnit/TestNG
Selenium
Maven/Gradle

CI/CD

CI (Continuous Integration):
minden commit után build + teszt fut

CD (Continuous Delivery/Deployment):
automatikus release pipeline

👉 Kapcsolat: automatizált tesztek a pipeline részei ha teszt fail → build fail

Az automatizált tesztelésben gyakran ezek a teszttípusok jönnek elő:

  • Unit teszt – egy kis egységet vizsgál, például egy metódust vagy osztályt.
  • Integration teszt – több komponens együttműködését ellenőrzi.
  • End-to-End (E2E) teszt – teljes felhasználói folyamatot vizsgál elejétől végéig.
  • Regression teszt – azt ellenőrzi, hogy egy módosítás nem rontott-e el korábban működő funkciókat.
  • Smoke teszt – gyors alapellenőrzés, hogy a rendszer fő funkciói működnek-e.
  • Sanity teszt – kisebb módosítás után célzott ellenőrzés, hogy az adott javítás rendben van-e.
  • UI teszt – felhasználói felület elemeinek működése és megjelenése.
  • API teszt – backend szolgáltatások, végpontok, request/response ellenőrzése.
  • Performance teszt – sebesség, válaszidő, terhelhetőség vizsgálata.
  • Load teszt – normál vagy nagy terhelés alatti viselkedés.
  • Security teszt – jogosultságok, adatvédelem, sebezhetőségek vizsgálata.
  • Acceptance teszt (UAT) – annak ellenőrzése, hogy az üzleti igények teljesülnek-e.

Java Unit Teszt

Ez az összefoglaló a Java beépített assert-jeit és a JUnit 5 tesztelési keretrendszer alapjait tartalmazza.


1. Java Native Assert (A nyelv része)

Elsősorban fejlesztés alatti belső logikai ellenőrzésre. Figyelem: Alapból ki van kapcsolva, a -ea (enable assertions) kapcsolóval kell futtatni a JVM-et.

SzintaxisLeírás
assert feltétel;Ha a feltétel false, AssertionError-t dob.
assert feltétel : "Üzenet";Hiba esetén az üzenet is megjelenik a konzolon.

2. JUnit 5 Életciklus (Annotációk)

Meghatározzák a metódusok futási sorrendjét a tesztelés során.

AnnotációTípusLeírás
@BeforeAllstatic voidEgyszer fut le az osztály összes tesztje előtt (pl. DB kapcsolat nyitás).
@BeforeEachvoidMinden @Test előtt lefut. Setup, példányosítás, alaphelyzet.
@TestvoidMaga a teszteset, itt fut le a vizsgált logika.
@AfterEachvoidMinden @Test után lefut. Cleanup, cache ürítés, loggolás.
@AfterAllstatic voidEgyszer fut le a legvégén. Erőforrások (pl. DB) lezárása.

3. Alap Assert-ek (JUnit 5 Assertions)

Ezekkel igazoljuk, hogy a kódunk a várt módon működik-e.

MetódusEllenőrzés
assertEquals(expected, actual)A két érték megegyezik-e.
assertNotEquals(unexpected, actual)A kapott érték eltér-e a megadottól.
assertTrue(condition)A feltétel igaz-e.
assertFalse(condition)A feltétel hamis-e.
assertNull(object)Az objektum null értékű-e.
assertNotNull(object)Az objektum létezik-e (nem null).

4. Kivételkezelés tesztelése: assertThrows

Ellenőrzi, hogy a kódunk dob-e hiba esetén megfelelő kivételt.

// A metódus visszatér a kapott kivétellel, amit tovább vizsgálhatunk
Throwable exception = assertThrows(IllegalArgumentException.class, () -> {
    myObject.doSomething(-1);
});

// Opcionális: a hibaüzenet pontos ellenőrzése
assertEquals("Negatív szám nem megengedett!", exception.getMessage());

Playwright

Mi az a Playwright?

Playwright egy nyílt forráskódú (open-source) eszköz, amely:

  • automatizálja a webes alkalmazások tesztelését,
  • támogatja a több böngészőt (Chromium, Firefox, WebKit),
  • több nyelven is használható: JavaScript, TypeScript, Python, Java, C#.

Fő előnye a Seleniumhoz képest: Gyorsabb, stabilabb és könnyebb párhuzamosan futtatni a teszteket.

Telepítés + workflow beállítása

Példa: https://github.com/Streptopelia-risoria/restful_booker_platform_demo

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

Telepítés + workflow nélkül

Lépj bele a terminálban a mappába ahova a tesztet szeretnéd.

Írd be a projekt nevét. pl.: for-test Framework: vanilla aztán javascript

Terminálba: npm init playwright@latest

A zárójelben lévőket válaszold a terminál kérdéseire. js (egyet le és enter), marad a test mappa (tab és enter), no github workflow (n), yes extension (y)

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',

Hasznos linkek a gyakorláshoz

https://playwright.dev/docs/intro https://the-internet.herokuapp.com/
http://uitestingplayground.com/

Első teszt felvételéhez

Bal oldalt válaszd ki a lombik ikont.

TOOLS (Eszközök) Pick locator: Ez a legpraktikusabb. Kattints rá, menj át a böngészőbe, és mutass rá az egérrel egy elemre (pl. a gombra vagy combo boxra). A VS Code-ban azonnal megjelenik a kód, amivel az adott elemet eléred. Record new: Elindít egy üres tesztet és egy böngészőt. Amit a böngészőben csinálsz, azt élőben kódként rögzíti egy új fájlba. Record at cursor: Ugyanaz, mint az előző, de nem új fájlt nyit, hanem a meglévő kódodba, a kurzor pozíciójához szúrja be az új lépéseket.

A fájlnevének mindig , így kell kinéznie: valami.spec.ts

Terminálba: npx playwright codegen

Futtatás

Bal oldalt üvegcse ikon és Debug Test

Vagy

npx playwright test --ui npx playwright test --debug

Jelszó beállítás

.env fájlbe írd be e felhasználónevet és jelszet.

A gitignore-ba meg, hogy ".env" ezt nem kell verziókezelés alávonni. A package.json mellé rakd.

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

Minta

import { test, expect } from "@playwright/test";
import * as dotenv from "dotenv";
dotenv.config(); // Betölti a .env fájl tartalmát


test("Google.hu", async ({ browser }) => {
  const context = await browser.newContext({
    httpCredentials: {
      username: process.env.SITE_USER || "", // A .env-ből olvassa
      password: process.env.SITE_PASS || "", // A .env-ből olvassa
    },
  });
  const page = await context.newPage();
  await page.goto("google.hu");
});

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.

Legegyszerűbb Spring Boot weboldal készítése.

Animal Shelter projekt dokumentáció.

Student Registry projekt dokumentáció.

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 https://www.justetf.com/en/search.html?search=ETFS

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.

Trading 212

Napi használatra a legjobb, évente 3%-os kamatot kapsz a készpénzedért, amit naponta kapsz meg, viszont adóznod kell ebből 15% SZJA.

Lehet tőzsdén is kereskedni rajta, portfóliót építeni és ETF-ket vásárolni. Viszont a hasznosból adóznod kell, hosszabb távú befektetéseknél érdemes Lightyear-en TBSZ számlát nyilni, mert ha 5 évig bent tartod a pénzedet a portfóliodban, akkor adómentesen hozzá tudsz jutni a hozamodhoz. Mivel nem magyar bank, ezért a TBSZ számlát neked kell bejelentened a NAV-nál és az éves adóbevallásodban feltűntetned.

Lightyear TBSZ

5 év után adómentes és nincsen számlavezetési díj, havidíj stb.

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 -> Egybe letudod tölteni az összes valutáról a kivonatot, egy hosszú pdf lesz.

Flexible Cash Funds Statement -> Pénznemenként írd ki az összegeket:
Példa:
                            |  Adott pénznem    |   HUF 
    Total Earned Interest   |   1      (USD)    |   400 
    Total Earned Interest   |   1      (GBP)    |   400  
    Total Earned Interest   |   1      (GBP)    |   400 

Érdemes ellenőrizni, hogy a szolgáltatód levont-e bármilyen forrásadót külföldön. Viszont a "Total Fees"-t ne vond le.

Trading Három vonal -> Okmányok -> Számlakivonatok -> Éves -> Az "Éves beszámolót töltsd le. Trading 212 Invest részen: "Lezárt eredmény", "Bonus", "Pénzvisszatérítés", "Készpénzkamat", kell adóznod. Ha más sorban is látsz összegeket, akkor azok után is kell adóznod!

Adóbevallás

Nav oldala -> Bejelentkezés.

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”

eSZJA -> Bal oldalt keress rá a "külföldről" szóra. -> Katt a "I. KÜLFÖLDRŐL SZÁRMAZÓ BELFÖLDÖN ADÓKÖTELES KÜLÖN ADÓZÓ JÖVEDELMEK"

"172. sor -> Trading Invest "Lezárt eredmény" "185. Egyéb külföldről származó forrásadós jövedelmek és ezek adója Revolut+Trading Jövedelem ezek ek az összegét írd be: Revolut Total Earned Interest minden pénznemét hufban amit a papíron látsz, ne te váltsd át. + Trading-en lévő Készpénzkamat összegét is add hozzá. Adó részre a 15 %-át írd be.

eSZJA felületén keress rá bal oldalt a 19-re. "19. sor "Bevétel" részre írd be a Trading Bonus és Pénzvisszatérítés összegét. Költség: 0 Ft Utána katt "A magánszemély szociális hozzájárulási adója (293. sor)" -> "286. sorba írd be a bruttó éves munkabéredet az adóbevallásod első sorában látod. "287. sorba írd be a Trading 212 Bonus+Pénzvisszatérítés összegét. "289. sor 0 és 0 "293. sor IV. negyedévéhez írd be a Trading 212 Bonus+ Pénzvisszatérítés * 0,13 (13 %) Szocho

Biztosítások

https://www.biztositas.hu/

Bank

MÁK = Magyar Állam Kincstár

https://bankszamlavalaszto.mnb.hu/

Egészpénztár megtakarítás szja-ban 20 %ot visszakapsz. Vigyázni kell vele, mert van havidíj és nem az egész befizetés megy számlára, levonják a kezelési költséget.

English

Appok:
Dualingo
RealLife English
Quizlet
Loora Ai-al lehet beszélgetni.
More
AnkiDroid
More Gamification
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:

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).

Motiváció

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