image


Bardzo sprytny sposób na utworzenie tablicy wartości typu String:
String[] stringArray = list.toArray(new String[0]);
albo
String[] strings = list.stream().toArray(String[]::new);




java.time


Przyjrzymy się pakietowi java.time. W celu zabezpieczenia się przed problemami w kontekscie wielowątkowości korzysta się z fabrycznych metod. Klasy LocalDate, LocalTime, LocalDateTime nie posiadają publicznych konstruktorów.
System.out.println("Instant :"+Instant.now());
System.out.println("LocalTime :"+LocalTime.now());
System.out.println("LocalDate :"+LocalDate.now());

Instant :2021-10-10T18:57:31.384Z
LocalTime :18:57:31.443
LocalDate :2021-10-10






Wydrukowanie ArrayListy przy pomocy lambdy


Jeśli już dysponujemy listą i chcemy wyświetlić jej zawartosc, uzyjmy wyrazenia lambda lub nawet referencji do metod z uyciem operatora double colon.
arrayList.forEach((e)-> System.out.println(e) );
(jeśli uzywamy intellij i tak zaproponuje nam rozwiązanie z uzyciem referencji do metod)
arrayList.forEach(System.out::println);






Konstruktory i wzorzec builder


W tym artykule przedstawię kila zagadnień związanych z konstruktorami i zastosowaniem budowniczego do obsługi wielu parametrów. Obiekt zawierający wiele parametrów staje się mało czytelny, zwykle jest w porządku jeśli ich liczba ogranicza się do trzech, maksymalnie czterech. Powyżej już łatwo o pomyłki, a jeśli dalsze parametry mogą być opcjonalne możemy pokusić się o zastosowanie tzw. konstruktorów teleskoopowych. Działa to tak, że w klasie umieszczamy kilka konstruktorów zaczynając od tego z wymaganymi. Dodajemy po jednym parametrze do tych, które już są.
public class Patient {
private String name;
private String office;
private int age;
public Patient(String name){
this.name=name;
}
public Patient(String name, String office){
this(name);
this.office=office;
}
public Patient(String name, String office, int age){
this(name,office);
this.age = age;
}
}


Możemy też skorzystać z koncepcji java beans i utworzyć konstruktor bezparametrowy z dodaniem geterów i setterów. Ciekawym podejściem jest skorzystnie z modyfikacji wzorca budowniczego, w którym tworzymy niezmienny obiekt po ustanowieniu wartości opcjonalnych i wywołaniu metody build.
public class PatientProperties {
private final String name;
private final String office;
private final int age;
private final int width;
private final int height;

public static class Builder{
private final String name;
private final String office;
//optional fields
private int age=0;
private int width=0;
private int height=0;
public Builder(String name, String office){
this.name=name;
this.office=office;
}
public Builder age(int value){
age=value;
return this;
}
public Builder width(int value){
width=value;
return this;
}
public Builder height(int value){
height=value;
return this;
}
public PatientProperties build(){
return new PatientProperties(this);
}
}
private PatientProperties(Builder builder){
name=builder.name;
office=builder.office;
age=builder.age;
height=builder.height;
width=builder.width;
}
}

Utworzenie obiektu odbywa się w czytelny sposób:

PatientProperties puczyk = new PatientProperties.Builder("Puczyk","dr Alban")
.age(26)
.width(167)
.height(90).build();






Java features (9-15)


Firma Oracle zwiększyła częstotliwość wydawania nowych wersji języka, i obecnie mamy wersię 16.
Jeśli wybierasz w intellij project structure-> Project SDK i Project language level to widać z grubsza najistotniejsze zmiany które wprowadzano w poszczególnych wersjach.

              8  lambdas
              9  modules, private methods in interfaces
              10 local variable type interface
              11 local variable syntax for lambda parameters
              itd...
            
i oto przykład nowego rozwiązania dla switch (switch expressions )

W zalezności od dostarczonej zmiennej String str = "polonez"
              switch (str){
                case "maluch","polonez","zuk"-> System.out.println("polskie samochdy");
                case "audi","vw","mercedes"-> System.out.println("auta niemieckie");
                default -> System.out.println("inne niz polskie i niemieckie");
            }
            





Zagadnienia rekrutacyjne


Lista przykładowych zagadnień, których mozna oczekiwać na rozmowie rekrutacyjnej na stanowisko junior java developer.

Klasy i pakiety: Klasa jest podstawową jednostką słuzącą do tworzenia obiektów w paradygmacie OOP (programowania zorientowanego obiektowo). Stanowi pewien rodzaj abstrakcji dla świata który program komputerowy ma opisywać. Jeśli tworzymy katalog biblioteczny na pewno będziemy potrzebowali klas: ksiąka, czytelnik, być moze filia, a te z kolei będą posiadały wielokrotność swoich kopii (czyli instancji). Zbiór klas z róznych powodów mozemy organizować grupując je w pakiety (podobnie jak to się dzieje z katalogami i plikami).

Kolekcje. Poniewaz programowanie polega na posługiwaniu się strukturami danych i algorytmami, do grupowania danych wykorzystuje sie w javie rozbudowaną architekturę JFC (java framework collections)

Głównie są to listy, kolejki, zbiory i mapy (list, queue, set i map).

WątkiSą to fragmenty programu mogące działać współbieznie w ramach jednego procesu. W Javie rozwinęło się juz wiele mozliwości ich obsługi, a najnowszym rozwiązaniem, które ukazało się w javie 19 jako preview feature są wirtualne wątki (projekt Loom).

obsługa plików Java dostarcza pakietów java.io oraz java.nio (NIO New Input-Output - to nowsze rozwiązanie).

Java Concurrency



linux bash


Lista przykładowych poleceń

prawa dostępu do plików i katalogów

właściciel-grupa-inni 4-r 2-w 1-x

chmod [parametr] [wartosc] [plik]

shutdown now (z parametrem -h halt -r restart) wyłączanie

alias (bez parametrów - inforamacja o aliasach, np. alias l='ls -al'

find *.png przeszukiwanie z dopasowaniem do wzorca

passwd zmiana hasła

file [nazwa pliku] informacja o typie pliku, lub plikach zawartych w archiwum (z parametrem -z)

wc obliczenie bajtów, słów lub linii w pliku (-c, -w, -l czyli chars, words, lines)

cmp [plik1] [plik2] porównywanie dwóch plików

df - ile miejsca na partycjach

du - ile miejsca zajmuje plik i katalog wyrazone w blokach

more i less - gdy nie wynik nie mieści się na ekranie (uzywamy strzałek, wyjscie q. mozna wykorzystac potoki)

clear - czyszczenie terminala

pwd - aktualna sciezka

arch - info o architekturze komputera

finger - info o urzytkownikach

free -m (dostępna pamięć w megabajtach, -b bajty, -k kilobajty)

cal - kalendarz ( cal -y cały rok, cal 1979 - rok podany w argumencie, cal -j = krory dzien zkolei mamy)

date - data, mozna formatować np. date +%Y tylko rok +%d - tylko dzień, date -r plik.txt - ostatnia modyfikacja

write [user] [tty] [wiadomosc] - wysłanie wiadomości do urzytkownika. Trzeba włączyć taką mozliwość mesg y lub wyłączyć poleceniem mesg n

last - kto pracował na komputerze (-n liczba wierszy wyników)

who - zalogowani uzytkownicy

who am i - info o swojej nazwie uzytkownika

users - kto zalogowany do systemu

hostname - nazwa hosta

ifconfig - info o interfejsach sieciowych

host [domena] - info o adresie hosta

whois [domena] - czy domena jest zarejestrowana i na kogo

uptime - czas, który upłynął do uruchomienia systemu

ps - informacja o uruchomionych usługach

adduser -dodanie uzytkownika

groupadd - dodanie grupy

top - lista procesów według zajętości procesora

head - wyświetlenie pierwszych linii pliku podanego w argumencie

tail - wyswietlenie ostatnich linii pliku (np: tail 5 plik.txt

... cdn