2023 Inżynierka
55. Popularne interfejsy komunikacyjne w mikrokontrolerze.
- RS-232 - standardowy interfejs szeregowy. "1" logiczną definiuje napięcie od -15 V do -3 V, zaś "0" napięcie od +3 V do +15 V. Może działać w trybie asynchronicznego i synchronicznego przesyłu danych. - I2C - Interfejs Inter-Intergrated Circuit oznacza "pośredniczący pomiędzy układami scalonymi". Standard ten określa dwie najniższe warstwy modelu odniesienia OSI: warstwę fizyczną i warstwę łącza danych. Do transmisji wykorzystuje dwie dwukierunkowe linie: *SDA - linia danych (ang. Serial Data Line) *SCL - linia zegara (ang. Serial Clock Line). I2C może działać w 3 trybach: *Tryb Standard: prędkość transmisji 100 kbps, 7-bitowa przestrzeń adresowa *Fast Mode: prędkość transmisji 400 kbps, 10-bitowa przestrzeń adresowa *High Speed Mode: prędkość transmisji 3,4 Mbps SPI - interfejs o możliwościach i właściwościach podobnych do I2C, o większej szybkości transmisji danych sięgającej kilka MB/s. Jeden z najczęściej używanych interfejsów komunikacyjnych pomiędzy systemami mikroprocesorowymi a układami peryferyjnymi takimi jak np. pamięci flash, karty SD itp. Komunikacja poprzez SPI odbywa się synchronicznie za pomocą 3 linii: -MOSI (ang. Master Output Slave Input) - dane dla układu peryferyjnego -MISO (ang. Master Input Slave Output) - dane z układu peryferyjnego -SCLK (ang. Serial CLocK) - sygnał zegarowy (taktujący, synchronizujący)
54. Sposoby obsługi zdarzeń w mikrokontrolerze.
-Przerwanie (ang. Interrupt) - zmiana sterowania, niezależnie od aktualnie wykonywanego programu, spowodowana pojawieniem się sygnału przerwania. Pojawienie się przerwania powoduje wstrzymanie aktualnie wykonywanego programu i wykonanie przez kontroler procedury obsługi przerwania. Przerwania można podzielić na: *Zewnętrzne - przerwanie sygnałem z zewnątrz *Wewnętrzne - takie jak np.: timery (w momencie upłynięcia określonego czasu powstaje sygnał przerwania), exception (w wyniku błędu układ kontrolujący pracę systemu wysyła sygnał przerwania) -Zapytywanie (ang. Polling) - aktywne, okresowe, próbkowanie (sprawdzanie) statusu urządzeń zewnętrznych przez kontroler i dokonywanie odpowiednich akcji na podstawie aktualnego statusu.
23. Charakterystyka i zastosowania podstawowych struktur danych: stos, kolejka, kolejka priorytetowa, struktura Find-Union, słownik.
-Stos jest to struktura danych umożliwiająca przechowywanie zbioru elementów i wykonywania operacji wkładania i usuwania elementów. Obowiązuje przy tym zasada LIFO - last in, first out. Stos wykorzystuje się np. w maszynie wirtualnej Javy. -Kolejka jest to struktura danych. Nowe elementy są dodawane na końcu kolejki, a pobierane z początku co reprezentuje strategia FIFO - first in, first out. Specjalnym term-31przypadkiem kolejki jest kolejka priorytetowa, która oprócz działania kolejki podstawowej, nadaje elementom priorytet. Oznacza to, że na wyjściu pojawią się niekoniecznie dane, które oczekują najdłużej, ale te o największym priorytecie. Kolejkę stosuje się np. w zarządzaniu wątkami. -Find-union struktura danych, która przechowuje dla ustalonego zbioru (uniwersum) jego podział na mniejsze, rozłączne zbiory.. Struktura taka umożliwia dwie operacje: • Find: Określająca zbiór, do którego należy element. • Union: Łączy dwa zbiory w jeden. -Słownik jest to struktura danych nie zakładająca żadnego porządku. Podstawowymi operacjami są dodawanie, usuwanie elementów oraz sprawdzenie czy element należy do słownika. Aby zapewnić szybkość pracy słowników wykorzystuje się algorytmy hashujące do umiejscowienia elementów w strukturze. Algorytm hashujący wylicza pozycję w strukturze na podstawie wartości klucza, którą może być np. suma wartości poszczególnych znaków. Słownik wykorzystuje się np. do indeksowania w bazach danych.
22. Najważniejsze algorytmy wyszukiwania i sortowania, przegląd i zastosowania.
-Wyszukiwanie liniowe- Sprawdzanie kolejno elementów, aż do znalezienia właściwego elementu. Algorytm ten ma złożoność O(n). Bardzo wolne, użyteczne, gdy nie mamy informacji na temat przeszukiwanych danych lub informacja ta jest nieprzydatna (np. liczby idealnie losowe). -Wyszukiwanie binarne- Przy wyszukiwaniu binarnym zakładamy, że zbiór elementów do przeszukania jest posortowany. Dzięki temu możemy łatwo odrzucić dużą liczbę elementów, gdzie poszukiwana wartość na pewno się nie znajduje. Przykład dla posortowanej tablicy. Tablicę dzielimy na 2 i odrzucamy jej jedną połowę w zależności od wyniku porównania. Krok ten powtarzamy do momentu odnalezienia poszukiwanego elementu. Algorytm ten ma złożoność O(log n). -Sortowanie przez selekcję, Selection sort. Polega np. na znajdowaniu najmniejszego elementu w zbiorze i wstawianiu go na pierwsze wyznaczone miejsce. Wadą tego algorytmu jest jego brak zależności w stosunku do rozkładu elementów w danym zbiór. -Sortowanie przez wstawianie, Insertion sort Stosuje się dla niewielkiej liczby elementów. Jego złożoność wynosi O(). Algorytm polega na sukcesywnym wstawianiu kolejnych elementów na właściwą pozycję w już uporządkowanym fragmencie ciągu. -Quick sort-Algorytm wykorzystuje technikę "dziel i zwyciężaj". Według ustalonego schematu wybierany jest jeden element w sortowanej tablicy (pivot), który może być dowolnym elementem zbioru danych. Następnie ustawiamy elementy mniejsze na lewo od tej wartości, natomiast większe lub równe na prawo. W ten sposób powstaną nam dwie części tablicy (niekoniecznie równe), które sortujemy osobno według tego samego schematu.
3. Układy równań liniowych: różne metody rozwiazywania, liczba rozwiązań.
1.) Warunki rozwiązywalności układu równań opisuje twierdzenie Kroneckera-Capellego: -Jedno rozwiązanie (układ oznaczony) - rząd obu macierzy jest równy liczbie niewiadomych - Jeżeli rząd macierzy głównej jest taki sam jak rząd macierzy uzupełnionej, ale jest mniejszy od liczby niewiadomych to układ równań ma nieskończenie wiele rozwiązań.. -Brak rozwiązań (układ sprzeczny) - rząd macierzy głównej jest mniejszy od rzędu macierzy rozszerzonej. 2.) Wzory Cramera W tej metodzie przedstawiamy układ równań w postaci macierzy. Następnie liczymy wyznacznik główny (W) i wyznaczniki względem kolumn (Wx, Wy, Wz , itd...). Otrzymane wyniki pozwalają na wyliczenie parametrów dzieląc wyznacznik względem kolumny przez wyznacznik główny. Jeśli W = 0 i pozostałe wyznaczniki też są równe zero, układ ma nieskończenie wiele rozwiązań (jest nieoznaczony). Jeśli W = 0 i co najmniej jeden z pozostałych wyznaczników jest różny od zera, to układ nie ma rozwiązania (jest sprzeczny). 3.) Metoda eliminacji Gaussa Umożliwia rozwiązanie macierzy Cramera bez liczenia wyznaczników. Polega na sprowadzeniu macierzy powstałej z równań do postaci macierzy trójkątnej, czyli takiej, która ma zera pod przekątną macierzy. Aby to uzyskać możemy zamieniać wiersze między sobą, dodawać je do siebie, oraz mnożyć przez liczbę różną od zera.
49. Efekt aliasingu i metody jego zwalczania. Aliasing a częstotliwość próbkowania.
Aliasing - nieodwracalne zniekształcenie sygnału w wyniku zbyt małego próbkowania. Efekt wizualny to schodki w miejscu gdzie powinna być linia. Aliasing występuje przy procesie rasteryzacji, czyli próbie przełożenia figury na konkretne piksele. Częstotliwość próbkowania musi być przynajmniej dwa razy większa od częstotliwości sinusoidalnego sygnału analogowego. Krytyczna wartość połowy częstotliwości próbkowania nazywana jest częstotliwością Nyquista. Metody zwalczania aliasingu zwykle opierają się o wykorzystanie filtrów antyaliasingowych obcinających badane pasmo do pożądanego zakresu.
53. Architektura harwardzka a architektura von Neumana.
Architektura harwardzka jest architekturą komputera, w której w odróżnieniu od architektury von Neumanna, pamięć danych programu jest oddzielona od pamięci rozkazów. Prostsza budowa architektury harwardzkiej (w stosunku do von Neumanna) przekłada się na większą szybkość działania - dlatego ten typ architektury jest często wykorzystywany np. przy dostępie procesora do pamięci cache. Separacja pamięci danych od pamięci rozkazów sprawia, że ta architektura jest obecnie powszechnie stosowana w mikrokomputerach jednoukładowych, w których dane programu są najczęściej zapisane w nieulotnej pamięci ROM, natomiast dla danych tymczasowych wykorzystana jest pamięć RAM. Architektura von Neumanna jest architekturą komputera, w której system komputerowy nie posiada oddzielnych pamięci do przechowywania danych i instrukcji. Instrukcje jak i dane są zakodowane w postaci liczb. Bez analizy programu trudno jest określić czy dany obszar pamięci zawiera dane czy instrukcje. Wykonywany program może się sam modyfikować traktując obszar instrukcji jako dane, a po przetworzeniu tych instrukcji zacząć je wykonywać.
11. Podstawowe cechy relacyjnych baz danych
Baza danych jest zbiorem relacji. Stąd historycznie pochodzi nazwa relacyjny model danych i relacyjna baza danych. W matematyce definiuje się relację jako podzbiór iloczynu kartezjańskiego zbiorów wartości. Reprezentacją relacji jest dwuwymiarowa tabela złożona z kolumn i wierszy. Założenia w relacyjnej bazie danych są następujące: -Liczba kolumn jest z góry ustalona. -Z każdą kolumną jest związana jej nazwa oraz dziedzina, określająca zbiór wartości, jakie mogą wystąpić w kolumnie. -Na przecięciu wiersza i kolumny znajduje się pojedyncza (atomowa) wartość należąca do dziedziny kolumny. -Wiersz reprezentuje jeden rekord informacji np. osobę.
1. Całka nieoznaczona, oznaczona, zastosowanie i techniki obliczania.
Całki dzielą się na oznaczone oraz nieoznaczone .Całka nieoznaczona funkcji f w pewnym przedziale (a,b)) to zbiór wszystkich funkcji pierwotnych tej funkcji. Całka oznaczona to pole powierzchni między wykresem funkcji f (x) w pewnym przedziale [a,b] a osią odciętych. Zastosowaniem całek nieoznaczonych mogą służyć na przykład do obliczenia całek oznaczonych. W czasie studiów na tej uczelni poznaliśmy dwie techniki ich obliczania. Jedną z nich jest metoda przez podstawianie, a druga z nich to całkowanie przez części. Całkowanie przez części to obliczenie interesującej nas całki zastępujemy obliczeniem innej całki (łatwiejszej do obliczenia). Całkowanie przez podstawienie- istotą metody jest zastąpienie oryginalnej funkcji inną funkcją, której całkę nieoznaczoną potrafimy wyznaczać. Zastosowaniem całek oznaczonych jest między innymi obliczanie pól powierzchni figur płaskich, długości łuku krzywej oraz objętości i pola powierzchni bryły obrotowej. Sposobem ich obliczania jest między innymi zastosowanie twierdzenia Newtona-Leibnitza czy przybliżone metody numeryczne.
24. Drzewa binarne i drzewa n-arne w algorytmice. Charakterystyka, sposoby implementacji i zastosowania.
Drzewa binarne są to drzewa, w którym liczba synów każdego wierzchołka nie wynosi więcej niż dwa. Szczegółowymi odmianami drzew binarnych są: 1. Drzewa regularne - liczba synów wierzchołka wynosi 0 lub 2 2. Drzewa binarnych poszukiwań (BST) - lewe poddrzewo każdego węzła zawiera elementy wyłącznie o kluczach mniejszych niż klucza danego węzła. Drzewa BST pozwalają na szybkie wykonanie operacji podstawowych tj. np. wyszukiwanie w czasie O(log n). a. Drzewa AVL - szczególny przypadek drzew BST, które poprzez wykorzystanie algorytmu AVL balansują wielkość poddrzew. b. Drzewa Czerwono-Czarne - szczególny przypadek drzew BST, wyważenie jest poprzez używanie algorytmu kolorującego węzły. Korzeń drzewa jest czarny i liście są czarne. Czarny wierzchołek może mieć tylko czerwonych synów i analogicznie czerwony wierzchołek tylko czarnych synów. Jeżeli to się nie zgadza to trzeba dokonać wywarzenia (kolory idą na zmianę). 3. Kopce - Drzewo w której wartość synów jest w stałej relacji z wartością rodzica (np. wartość rodzica jest nie mniejsza niż wartość potomka). Zastosowanie kopców: implementacja kolejek priorytetowych, ponieważ zawsze ustala element najmniejszy bądź największy oraz sortowanie (heap sort) z tego samego powodu. Sposoby implementacji drzew binarnych: • Implementacja Tablicowa - każdemu węzłowi opisanemu indeksem n odpowiadają synowie o indeksach 2n oraz 2n+1 • Implementacja Dynamiczna - każdy węzeł posiada wskaźniki do węzła syna lewego oraz prawego Drzewa n-arne są to drzewa które mogą mieć n synów. Te drzewa implementuje się poprzez dodanie do wierzchołka rodzica, listy wierzchołków dzieci. Drzewa wykorzystuje się jako przechowywanie struktur, które podaje się częstym sortowaniom bądź/i wyszukiwaniu konkretnych elementów poprzez krótki czas wykonywania tych operacji.
28. Pojęcie dziedziczenia na przykładzie języków Java i C++.
Dziedziczenie jest to mechanizm programowania obiektowego, dzięki któremu można stworzyć hierarchię klas. Dziedziczenie powoduje przekazanie swoich pól oraz metod do klas dziedziczących przez co ich możliwości ulegają rozszerzeniu. Klasa dziedzicząca jest nazywana klasą pochodną (w j. angielskim: subclass lub derived class), zaś klasa, z której następuje dziedziczenie — klasą bazową (w ang. superclass). W Javie dziedziczenie jest realizowane za pomocą słowa kluczowego extends. W C++ z wykorzystaniem dwukropka. W przeciwieństwie do Javy, w C++ istnieje możliwość wielodziedziczenia. Brak mechanizmu wielokrotnego dziedziczenia wymaga wielokrotnej implementacji i utrzymania tych samych cech różnych klas, niestety powoduje też pewne problemy np. problem diamentu , łańcuchowe wywołanie konstruktorów. W języku Java dziedziczone są wszystkie zmienne i metody nadklasy za wyjątkiem konstruktorów. W języku C++ nie są dziedziczone: konstruktory i destruktory klasy, przeciążony operator i tzn. przyjacielskie klasy (czyli taka która udostępnia wszystkie swoje składniki innej klasy- nawet te chronione i prywatne).
51. Implementacje podstawowych elementów pasywnych (rezystorów, kondensatorów i cewek).
Elementem pasywnym nazywamy element elektroniczny niewytwarzający energii elektrycznej. Występują w nim jedynie straty energii. Takie elementy mogą jednak magazynować energię elektryczną. Rezystor służy do ograniczania prądu płynącego w obwodzie poprzez zmianę energii elektrycznej w ciepło. Jednostką definiującą opór rezystora są Ohmy (Ω). Rezystory możemy łączyć w sposób szeregowy lub równoległy. W połączeniu szeregowym rezystancja zastępcza jest sumą poszczególnych wartości rezystancji rezystorów. W połączeniu równoległym odwrotność rezystancji zastępczej jest sumą odwrotności poszczególnych wartości. Kondensator jest elementem elektronicznym, który służy do gromadzenia ładunków elektrycznych. Podstawowym parametrem użytkowym kondensatorów jest pojemność C wyrażana w faradach (F). Kondensatory możemy łączyć w sposób szeregowy lub równoległy, przy czym obliczanie pojemności zastępczej jest odwrotna w stosunku do liczenia rezystancji zastępczej oporników. W połączeniu szeregowym odwrotność pojemności zastępczej jest sumą odwrotności poszczególnych wartości pojemności kondensatorów. W połączeniu równoległym pojemność zastępcza jest sumą poszczególnych wartości pojemności kondensatorów. Cewka jest to element elektroniczny, który umożliwia skupienie energii pola magnetycznego powstałego na skutek przepływu prądu przez cewkę. Składa się z pewnej liczby zwojów przewodnika nawiniętych np. na powierzchni walca/pierścienia/na płaszczyźnie. Indukcyjność jest podstawowym parametrem elektrycznym opisującym cewkę i jest wyrażona w jednostce henr [H]. Cewki możemy łączyć w sposób szeregowy lub równoległy na takiej samej zasadzie jak rezystory.
52. Filtr dolnoprzepustowy RC. Co to jest częstotliwość graniczna i pasmo przenoszenia filtru.
Flirt dolnoprzepustowy jest to układ elektroniczny przetwarzający sygnał, który przepuszcza częstotliwości sygnału poniżej ustalonej częstotliwości granicznej. Sygnały powyżej częstotliwości granicznej są tłumione. Częstotliwością graniczną określamy wartość graniczną, dla której kończy się umowne pasmo przepustowe filtru. Jest to częstotliwość, poza którą tłumienie wnoszone przez filtr staje się większe niż 3 dB. Pasmo przenoszenia flirtu jest to zakres częstotliwości, w którym tłumienie sygnału jest nie większe niż 3 dB.
5. Grafy i ich typy, metody reprezentacji grafów.
Graf struktura matematyczna służąca do przedstawiania i badania relacji między obiektami. W uproszczeniu graf to zbiór wierzchołków, które mogą być połączone krawędziami w taki sposób, że każda krawędź kończy się i zaczyna w którymś z wierzchołków. Rodzaje: · spójny - graf spełniający warunek, że dla każdej pary wierzchołków istnieje ścieżka, która je łączy. · Zorientowane (skierowane)(ruch po krawędziach tylko w kierunku wskazywanym przez strzałkę) i niezorientowany (bez strzałek). · Proste niezorientowany, bez pętli, dwa wierzchołki mogą być połączone najwyżej jedną krawędzią · Multigrafy para wierzchołków może być połączona więcej niż jedną krawędzią. · Regularny - wszystkie wierzchołki mają ten sam stopień (tyle samo „nóżek" od nich odchodzi.) · Pełny - każdy wierzchołek jest połączony krawędzią z każdym innym. Metody reprezentacji grafów: · Macierz sąsiedztwa - zawiera dane na temat połączeń między wierzchołkami (macierz składająca się z 0 i 1 oznaczających brak/istnienie połączenia z danym wierzchołkiem) · Lista sąsiedztwa - dla każdego wierzchołka zapamiętywana jest lista sąsiadujących z nim wierzchołków · Macierz incydencji - kolumny odpowiadają krawędziom, a wiersze wierzchołkom
7. Zasada indukcji matematycznej
Indukcja matematyczna jest to metoda dowodzenia twierdzeń o prawdziwości nieskończonej liczby stwierdzeń oraz definiowania rekurencyjnego. W pierwszym etapie przeprowadza się dowód dla elementu pierwszego (tj. dla liczby 1), następnie udowadnia się, że przy założeniu, że twierdzenie jest prawdziwe dla liczby n, jest ono prawdziwe dla n+1. Złożenie obu kroków jest dowodem dla dowolnego n. Metodę indukcji matematycznej zaproponował Blaise Pascal.
39. Zapewnienie jakości oraz testowanie oprogramowania - normy, metody, kryteria.
Jakość oprogramowania jest to ogół cech wyrobu określanych jako „pewien stopień doskonałości". Model jakości możemy określać na podstawie składowych: 1) Funkcjonalność - Odpowiedniość, Dokładność, Współdziałanie, Zgodność, Bezpieczeństwo 2) Niezawodność - Dojrzałość, Tolerancja błędów, Odtwarzalność 3) Użyteczność - Zrozumiałość, Łatwość uczenia, Łatwość posługiwania się 4) Efektywność - Charakterystyka czasowa, Wykorzystanie zasobów 5) Pielęgnowalność - Dostępność, Podatność na zmiany, Stabilność, Łatwość walidacji 6) Przenośność - Dostosowalność, Instalacyjność, Zgodność, Zmienność Zapewnienie jakości oprogramowania - Zgodnie z normą jest to „planowany i systematyczny wzorzec wszystkich działań potrzebnych dla dostarczenia adekwatnego potwierdzenia, że element lub produkt jest zgodny z ustanowionymi wymaganiami technicznymi". Zapewnienie jakości oprogramowania oznacza kontrolowanie: 1. Czy plany są zdefiniowane zgodnie ze standardami 2. Czy procedury są wykonywane zgodnie z planami 3. Czy produkty są implementowane zgodnie z planami
35. Narzędzia programowania operacji wejście-wyjścia w języku Java.
Java do operacji wejścia-wyjścia wykorzystuje strumienie. Domyślnie użytkownik ma dostęp do trzech standardowych strumieni: • System.out - strumień wyjścia • System.in - strumień wejścia • System.err - strumień diagnostyczny Dodatkowo, programista ma także dostęp do innych strumieni. Na przykład do tych zawartych w pakiecie Java.IO. Dostępne są między innymi FileInputStream oraz FileOutputStream używane do zapisu oraz odczytu danych z pliku. Alternatywą dla strumieni jest pakiet Java.NIO (Non-blocking IO), który umożliwia zaprogramowanie wejścia i wyjścia w oparciu o kanały (channels), bufory (buffers). Informacje z kanału mogą być wczytane do bufora, a informacje z bufora mogą być zapisane do kanału. Przykładowymi klasami są FileChannel wykorzystywany do pracy z plikiem lub SocketChannel, który umożliwia komunikację przez Internet.
8. Twierdzenie Bayesa
Jest to twierdzenie teorii prawdopodobieństwa, wiążące prawdopodobieństwa warunkowe dwóch zdarzeń warunkujących się nawzajem. pozwala na uniknięcie obliczeńo dużej złożoności. Algorytm bayensa pozwala na klasyfikacje danego obiektu do danej klasy wiec jest stosowany w dziedzinach sztucznej inteligencji Metody bayesowskie mają szereg zastosowań praktycznych - pozwalają obliczyć, z użyciem matematycznego modelu badanego zjawiska wraz z jego prawdopodobieństwem, m.in. oszacowania, prognozy i przedziały wiarygodności nieznanych parametrów
27. Rola klas, interfejsów i mixinów w programowaniu na przykładzie języka Java.
Klasa w Javie to opisanie jakiegoś bytu za pomocą zestawu pól oraz metod. Tworząc klase w JAVIE rozpoczynamy od słowa kluczowe class, a te z kolei poprzedza specyfikator dostępu. Klasa jest szablonem na podstawie której tworzymy obiekty. Interfejsy pozwalają na definiowanie zachowań polimorficznych, stanowią wzór dla klas implementujących je i zawierają przede wszystkim abstrakcyjne metody, które muszą zostać implementowane przez klasę. JAVA umożliwia również tworzenie tzn. interfejsów funkcyjnych zawierających tylko jedną klasę abstrakcyjną, na ich podstawie, możemy tworzyć wyrażenia lambda. Mixin to klasa zawierająca metody do wykorzystania przez inne klasy, bez potrzeby dziedziczenia po nim. W Javie możliwe jest korzystanie z mixinów od wersji 8, gdy do interfejsów została wprowadzona możliwość użycia słowa kluczowego default definiującego domyślną implementację danej metody. Dzięki temu, implementując interfejs z taką metodą, nie jest wymagane ponowne pisanie jej definicji.
13. Mechanizm współbieżności pracy wielu użytkowników w systemie zarządzania bazami danych.
Kluczowe z punktu widzenia wydajności aplikacji bazodanowej jest współbieżne wykonywanie transakcji, jednak musi być ono realizowane tak, aby użytkownicy nie przeszkadzali sobie. Aksjomaty współbieżnego wykonywania transakcji ACID: • Atomowość (niepodzielność) - albo wszystkie akcje wchodzące w skład transakcji są wykonywane albo żadna. • Spójność - po wykonaniu transakcji stan bazy danych powinien być spójny (pod warunkiem, że przy rozpoczynaniu transakcji stan bazy danych był spójny). • Izolacja - wynik działania transakcji powinien być taki sam, jakby od chwili rozpoczęcia transakcji nie działała na wspólnych danych żadna inna transakcja. Każdy użytkownik powinien mieć odczucie, że sam korzysta z bazy danych. • Trwałość - dane zatwierdzone przez transakcję powinny być dostępne nawet w sytuacji awarii oprogramowania lub sprzętu. Podstawowe mechanizmy, dzięki którym serwer zapewnia, że przedstawione w poprzednim punkcie aksjomaty są spełnione: Blokady - ograniczają działanie innych transakcji na zablokowanym obiekcie. Dzienniki - opisują działanie transakcji. W oparciu o ten opis można wycofać transakcję, jak i odtworzyć stan bazy w przypadku awarii Migawki - przechowywanie wielu wersji tych samych rekordów.
26. Konstrukcja obiektów i zarządzanie pamięcią operacyjną w Javie i C++.
Konstrukcja obiektów w obu tych językach odbywa się przy użyciu konstruktora. W momencie wywołania konstruktora tworzonemu obiektowi przypisywane jest odpowiednie miejsce w pamięci. W Javie występuje tzn. konstruktor domyślny (bezparamterowy, zdefiniowany przez kompilator jeżeli w kodzie nie będzie dostępny żaden inny) oraz konstruktor domyślny (zawierający parametry). W C++ oprócz tych dwóch konstruktorów istnieje jeszcze: konstruktor kopiujący (którym jedynym argumentem niedomyślnym jest referencja do obiektu swojej klasy) oraz konstruktor konwertujący (konstruktor, którego jedynym argumentem niedomyślnym jest obiekt dowolnej klasy lub typ wbudowany. Powoduje niejawną konwersję z typu argumentu na typ klasy własnej konstruktora. ) Zarządzanie pamięcią operacyjną w Javie odbywa się z pomocą Garbage Collectora, który identyfikuje obiekty już nieużywane, czyli takie, do których program nie ma dostępu przez żadne referencje, i usuwa je z pamięci. Natomiast w języku C++ programista jest zmuszony do manualnego zwalniania pamięci przy użyciu destruktora.
33. Lambda-wyrażenia i interfejsy funkcyjne w języku Java.
Lambda wyrażenia powstały, aby ułatwić zapis i sprawić by kod był czytelniejszy. Są one pewnego rodzaju anonimowymi metodami. Aby móc stosować lambda wyrażenia należy wykorzystać interfejs funkcyjny. Interfejs funkcyjny to taki, który posiada tylko jedną metodę. Tę metodę będzie definiować właśnie lambda wyrażenie.
17. Logika boolowska i jej zastosowania w warstwie sprzętowej komputerów.
Logika boolowska używa operacji logicznych i posługując się zmiennymi binarnymi opisuje przetwarzanie informacji. Występują w niej trzy główne operacje logiczne: AND, OR i NOT. AND - zwany inaczej koniunkcją zwraca wartość logiczną 1 wtedy i tylko wtedy, gdy obie wyrażenia mają wartość logiczną 1. OR - zwany inaczej alternatywą zwraca wartość logiczną 1, gdy chociaż jedno z wyrażeń ma wartość logiczną 1. NOT - zwraca wartość logiczną przeciwną do wartości logicznej przekazanego wyrażenia. Zastosowanie: Układy realizujące pojedyncze operacje logiczne, nazywamy funktorami logicznymi lub bramkami logicznymi (ang. logical gates). Z nich buduje się układy cyfrowe w komputerach np. dekoder binarny, multiplekser, sumator, no i wszelkie złożone bramki.
48. Metody kompresji w standardzie MPEG.
MPEG jest nazwą kodową oznaczającą Moving Picture Experts Group. Techniki kompresji bazują na znajomości ograniczeń ludzkiego obrazu i wykorzystują: Próbkowanie chrominancji - informacje o kolorze piksela przekłada się na reprezentacje YCbCr (Y - jasność, Cb,Cr - nasycanie i odcień chrominancji). Dzięki temu informacja przekazywana do oka jest taka sama, a zyskujemy na zmniejszeniu ilości informacji, ponieważ na każde 2x2 punkty luminancji przypada jeden punkt chrominancji Cb oraz Cr. Kompresja ruchu - Zamiast przechowywać osobne całe klatki przechowuje się klatkę kluczową oraz klatkę zawierającą informację które piksele zmieniły swoje cechy. Kodowanie transformatowe - Obraz dzielony jest w bloki, na których dokonuje się transformacji kosinusowej, która zmienia informacje zawarte w bloku na informację o wolnych i szybkich zmianach luminancji i chrominancji. Kodowanie Huffmana - Wszelkie informacje przekazywane są kodowane kodem Huffamana, który na podstawie zliczania prawdopodobieństwa wystąpienia konkretnych ciągów zer i jedynek tworzy krótsze ciągi mapując poprzednie wartości. Kolejność wykonania i implementacja zależna jest od konkretnego przypadku MPEG jak np. MPEG1, MPEG2, MPEG4.
36. Zarządzanie projektem budowy oprogramowania: rodzaje działań, dobór metodyki oraz kontekst pozatechniczny.
Metodyka to zestaw pojęć, notacji, modeli, języków, technik i sposobów postępowania określający między innymi takie rzeczy jak: • fazy projektu • role uczestników projektu • notacje, których należy używać • powstającą dokumentację Ze względu na brak metodyk uniwersalnych konieczne jest dobranie najbardziej pasującej metodyki do danego projektu. Zdarza się też, że wybierane i łączone w całość są elementy z różnych metodyk, które najlepiej pasują do projektu. Zarządzanie projektem to realizacja działań czy też procesów prowadzących do wykonania oczekiwanego produktu. Procesy te można podzielić na: • Procesy inicjujące - procesy wstępnej fazy projektu mające na celu określenie kierunku projektu. • Procesy planowania - dotyczą przygotowania planu projektu oraz określenia zadań niezbędnych do jego ukończenia. • Procesy wykonawcze - realizują plan zgodnie z założeniami. • Procesy kontrolne -służą sprawdzeniu czy realizacja projektu postępuje zgodnie z planem. • Procesy końcowe - skupiają się na formalnym podsumowaniu i zamknięciu projektu. Kontekstem pozatechnicznym projektu budowy oprogramowania jest na przykład aspekt ekonomiczny, w którego skład wchodzą wszelkie koszty (np. szkoleń, zakupu narzędzi), gwarancje dla klientów czy reklamowanie produktu.
19. Miary efektywności obliczeniowej procesorów, pojemności pamięci komputerowej oraz wydajności systemów obliczeniowych.
Miary efektywności obliczeniowej procesorów. wydajności mówią nam, jak szybko procesor może wykonywać dane zadanie. • Pamięć cache - do operacji na danych oraz do wymiany danych pomiędzy komponentami komputera. Im większa tym lepiej. (MB) • Częstotliwość taktowania (Hz). • Technologia wykonania - rozmiar tranzystorów. Im mniejszy tym szybszy (w nanometrach) • Liczba rdzeni i wątków • Pobór mocy • Prędkość transmisji Pojemności pamięci komputerowej Bit, bajt- najmniejsza adresowalna jednostka informacji Kilobajt, megabajt, gigabajt, terabajt - wykorzystują jednostki z układu SI - mnożenie kolejno o 1000, 1000 000 itd. Kibibajt, mebibajt, gibibajt, tebibajt - wykorzystuje się potęgi dwójki Wydajności systemów obliczeniowych Moc obliczeniową komputerów mierzy się w jednostce FLOPS (ang. Floating point operations per second) - operacje zmiennoprzecinkowe na sekundę. tFLOP i pFLOP (teraflop- tysiące miliardów, petaflop- miliony miliardów) Rozwój technologii półprzewodnikowych powoduje wykładniczy wzrost mocy obliczeniowej kolejnych generacji komputerów.
46. Modele barw.
Modele barw w grafice komputerowej zajmują się przedstawieniem koloru. Wyróżniamy różne modele barw w stosunku do ich przeznaczenia. Najpopularniejsze modele barw to: model RGB, CMYK, HSV oraz CIE xyz. Model RGB powstał jako jeden z pierwszych, jego zastosowaniem jest odwzorowanie koloru na wszelkiego rodzaju wyświetlaczach. Na kolor konkretniej plamki monitora mają wpływ trzy składowe: składowa koloru czerwonego, zielonego oraz niebieskiego. Kolory otrzymuje się poprzez mieszanie się składowych w odpowiednich proporcjach w sposób addytywny, czyli sumowanie. Model CMYK posiada następujące składowe: Cyjan, Magenta, Yellow oraz Black. Jest modelem substratywnym, co oznacza, że kolor uzyskuje się poprzez odjęcie wartości od koloru białego. Model CMYK jest ewolucją modelu CMY, gdzie występował problem z artefaktami koloru szarego, dlatego postanowiono zastąpić to osobną składową przeznaczoną na kolor czarny. Modelu CMYK używa się w druku. Model HSV posiada składowe: Hue(kolor), Saturation(nasycenie), Value(jasność). Model wykorzystywany jest w programach graficznych jako pomoc dla grafików w wyborze odpowiedniego koloru. Model CIE xyz jest standaryzowanym modelem barw, używającym trzech fikcyjnych składowych xyz mających za zadanie odzwierciedlić długość fali świetlnej. Modelu tego używa się do stworzenia wykresu chromatyczności mającego za zadanie odzwierciedlić zakres widzialny przez ludzkie oko. Jest przydatnym modelem w celu opisu charakterystyki danego wyświetlacza i może stanowić podstawę do konwersji barw przy przesyłaniu koloru między różnymi urządzeniami.
6. Relacje binarne, własności i metody reprezentacji
Niech X i Y będą dwoma zbiorami. Dowolny podzbiór r produktu kartezjańskiego X×Y nazywamy relacją dwuargumentową (binarną) w X×Y. zwrotna: relacja jest zwrotna, gdy każdy x jest w relacji z samym sobą przeciwzwrotność: relacja jest przeciwzwrotna, gdy x nie jest w relacji z samym sobą. symetryczność: relacja jest symetryczna, jeśli weźmiemy x i on jest w relacji z y, to y jest jednocześnie w relacji z x. asymetryczność: relacja jest asymetryczna, gdy istnieje tylko w jedną stronę. przechodniość: jeśli x jest w relacji z y, a y jest w relacji z, to x też jest w relacji z z. spójność: relacji spójnej jeśli ze zbioru wylosujemy sobie jakieś dwa dowolne elementy x i y, to mogą być tylko 3 warianty 1) wybrany element x jest w relacji z innym elementem y, 2) element y jest w relacji z wybranym x, 3) x=y. Metody reprezentacji: · Wypisanie par należących do relacji, · Tabela (macierz), · Graf
4. Wartości własne macierzy i ich zastosowanie w informatyce.
Obliczanie wartości własnych macierzy jest możliwe tylko na macierzach kwadratowych, czyli takich które mają taka samą liczbę kolumn oraz wierszy. Od macierzy odejmuje się macierz jednostkową (czyli taką, która ma same jedynki na przekątnej i resztę zer)pomnożoną przez pewną niewiadomą λ. Z tak powstałej macierzy oblicza się jej wyznacznik, zwany również równaniem charakterystycznym macierzy. Wyznacznik ten porównuje się do zera oraz oblicza jego pierwiastki, które są wartościami własnymi macierzy. Zastosowanie: · Wyznaczenie wektorów własnych · Algorytmy wykorzystywane przez wyszukiwarki np. PageRank (Google). · Redukcja liczby parametrów w sieciach neuronowych · Wykres chromatyczności
60. Istota mechanizmu pamięci wirtualnej - wady i zalety tego rozwiązania.
Pamięć wirtualna jest techniką umożliwiającą wykonywanie procesów, pomimo że nie są one w całości przechowywane w pamięci operacyjnej. Techniki realizacji pamięci wirtualnej: -stronicowanie na żądanie - polega na podziale logicznej przestrzeni adresowej procesów na bloki o rozmiarze takim jak bloki pamięci fizycznej (ramki). W stronicowaniu na żądanie strona jest sprowadzana do pamięci dopiero wtedy, gdy jest potrzebna (gdy pojawia się do niej odwołanie). Odwołanie do strony, która jest poza pamięcią powoduje błąd braku strony (ang. page fault). -segmentacja na żądanie - polega na identyfikacji programu jako zbioru segmentów. Segment jest jednostką logiczną, taką jak: program główny, procedura, funkcja, stos, tablica symboli, tablice, zmienne lokalne i globalne. Istnieje tablica segmentów. Każda pozycja tablicy zawiera fizyczny adres początku segmentu i rozmiar segmentu. -segmentacja ze stronicowaniem - każdy segment ma swoja tablicę stron. Deskryptor segmentu zawiera adres tablicy stron segmentu, długość segmentu i pomocnicze bity. Tworzony jest segment w pamięci, który jest podzielony na strony - dalej działa jak stronicowanie. Zalety pamięci wirtualnej: -logiczna przestrzeń adresowa może być dużo większa od fizycznej przestrzeni adresowej -system operacyjny może wykonywać większą liczbę procesów ze względu na dużą przestrzeń adresową wspomaga ochronę pamięci, ze względu na zastosowanie segmentów Wady pamięci wirtualnej: -Proces szamotania - gdy proces ma mniej ramek niż liczba aktywnie używanych stron, dochodzi do szamotania. -jest ona o wiele wolniejsza niż przy bezpośrednim korzystaniu z pamięci fizycznej, mimo to pozwala na przechowywanie bardzo dużej ilości danych
12. Podstawowe elementy i znaczenie diagramów związków encji oraz zasady prawidłowego projektowania schematów bazy danych.
Podstawowe elementy diagramów związków encji: Encja - to odróżnialny od innych byt, o którym chcemy przechowywać jakieś informacje Atrybut - część encji, opisująca część danych o jakimś typie, które chcemy przechowywać w danym rekordzie tej encji Klucz - zbiór atrybutów danej encji, których wartości jednoznacznie identyfikują każde wystąpienie instancji encji. Typy danych Związek - powiązanie występujące pomiędzy dwoma encjami Zasady projektowania schematów bazy danych -projekt powinien gwarantować: -poprawność modelu, czyli jego zgodność z rzeczywistością; -istotność każdego elementu modelu dla funkcjonowania firmy (organizacji) wykorzystującej aplikację (w tym także bazę danych); -kompletność modelu, czyli uzyskanie pewności, że żaden element modelu danych istotny dla funkcjonowania firmy (organizacji), nie został pominięty; -spełnienie postulatu normalizacji -każdy fakt przechowywany w bazie danych powinien być wyrażalny w niej tylko na jeden sposób; -brak wad typu redundancja (wielokrotne powtórzenie tej samej informacji), anomalie przy modyfikacji/ wstawianiu/ usuwaniu (np. uaktualniona ifnformacja w jednym wierszu pozostaje niezmieniony w innych dla i pozostaje sprzeczność w bazie).
45. Metody ochrony informacji stosowane w bankowości Internetowej.
Podstawowym mechanizmem ochrony informacji stosowanym w bankowości internetowej jest szyfrowanie przesyłanych danych. Do tego celu używa się zazwyczaj protokołu TLS, który zapewnia poufność i integralność transmisji danych, uwierzytelnienie serwera, a niekiedy również klienta. Opiera się na szyfrowaniu asymetrycznym oraz certyfikatach X.509. Chroni on użytkowników przed podmianą strony oraz atakami man in the middle. Kolejnym czynnikiem jest wykorzystywanie złożonych haseł do kont użytkowników. Dodatkowo większość banków stosuje dwuskładnikowe uwierzytelnianie, co oznacza, że oprócz danych do konta użytkownik musi podać jakieś dodatkowe informacje (np. token wysłany SMSem).
29. Istota i zastosowania polimorfizmu na przykładzie języków Java i C++
Polimorfizm / wielopostaciowość jest cechą języka, która pozwala na tworzenie uogólnionego kodu, wykorzystując do tego celu przede wszystkim hierarchie typów i dziedziczenie. W Javie polimorfizm najczęściej jest kojarzony z wykorzystaniem interfejsów i dziedziczeniem klas.List<String> someList = new ArrayList<>(); Polimorfizm inkluzyjny oparty o dziedziczenie:void printList(LinkedList<String> list) { for (String s : list) { System.out.println(s); } } Polimorfizm ad hoc polega na tym, że o wywołaniu odpowiedniej wersji metody decyduje wirtualna maszyna na podstawie typów parametrów.W C++ mamy możliwość tworzenia tzn. virtualnych metod (które moge byc zdefiniowane lub nie) i klasa dziedzicząca może je przeciążać. W javie mechanizm dziedziczenia jest stosowany dla wszystkich niestatycznych metod domyślnie. Polimorfizm parametryczny jest w Javie realizowany przy pomocy typów generycznych natomiast w c++ za pomocą tzn. templates (szablonów) Z kolei w C++ polimorfizm uzyskuje się przy użyciu funkcji wirtualnych (słowo kluczowe virtual), czyli takich, w których wiązanie odwołań z kodem następuje podczas działania programu, a nie jego kompilacji.
20. Prawo Moore'a i implikacje z niego wynikające w kontekście rozwoju sprzętu komputerowego.
Prawo Moore'a to prawo wynikające z obserwacji, że ekonomicznie optymalna liczba tranzystorów w układzie scalonym zwiększa się w kolejnych latach zgodnie z trendem wykładniczym. Prawo Moore'a które pierwotnie odnosiło się do ilości tranzystorów w jednym układzie scalonym, obecnie jest stosowane właściwie do określania praktycznie każdego postępu technologicznego. Podobne sformułowania odnoszą się między innymi do mocy obliczeniowych procesorów, pojemności dysków twardych, rozmiarów pamięci RAM, przepustowości łącz internetowych itp.
58. Problem synchronizacji procesów/wątków w programach komputerowych oraz przedstaw jakie wsparcie w tym zakresie oferują systemy komputerowe i operacyjne.
Problem synchronizacji procesów pojawia się wszędzie tam, gdzie mamy do czynienia ze współpracującymi ze sobą współbieżnymi procesami. Pojawiają się one, gdy: -Procesy współdzielą pewną strukturę danych -Wyniki działania jednego procesu stanowią dane dla innego procesu -Procesy korzystają z pewnej wspólnej puli zasobów, które pobierają i zwalniają wedle potrzeb Mechanizmy synchronizacji wątków: -Semafory - blokują sekcje krytyczne -Kolejki komunikatów - zapewniają bezproblemowe dostarczanie komunikatów do poszczególnych wątków -Monitory - obiekty, które mogą być bezpiecznie używane przez wiele wątków
31. Programowanie współbieżne - mechanizmy i narzędzia na przykładzie języka Java.
Programowanie współbieżne polega na "równoczesnym" wykonywaniu różnych zadań. W rzeczywistości, w maszynie wirtualnej Java, każde zadanie otrzymuje pewien kwant czasu. Domyślnie w Javie instrukcje są wykonywane sekwencyjnie, jedna po drugiej. Jeśli chcemy, aby jakiś fragment kodu wykonywał się "równocześnie" z głównym wątkiem należy użyć klasy Thread. Wywołanie na obiekcie klasy Thread metody start() powoduje utworzenie nowego wątku, który wykonywać będzie instrukcje zawarte w metodzie run() tego samego obiektu. Inną opcją, zamiast stworzenia klasy dziedziczącej po klasie Thread, jest implementacja interfejsu Runnable i utworzenie instancji klasy Thread na podstawie obiektu takiej klasy. W celu synchronizacji wątków oraz zapewnieniu bezpiecznego modyfikowania tych samych danych, używa się słów kluczowych synchronized oraz volatile.
43. Protokoły rutingu warstwy sieci na przykładzie protokołu OSPF.
Protokół routingu (ang. routing protocol) - używany jest do wymiany informacji o trasach pomiędzy sieciami komputerowymi, co pozwala na dynamiczną budowę tablic trasowania. Rozróżniamy 2 rodzaje routingu: -statyczny - polega na trwałej konfiguracji routerów. -dynamiczny - routery same orientują się w topologii sieci w której pracują i ustalają zasady optymalnych połączeń między sobą. OSPF (ang. Open Shortest Path First) jest dynamicznym protokołem wewnętrznym z otwartą specyfikacja. Wykorzystuje on algorytm Dijkstry. Rozsyła informacje routingu do wszystkich węzłów obsługujących połączenia międzysieciowe. Każdy router wysyła jednak tylko tę część tabeli routingu, która opisuje stan jego własnych łączy.
10. Wyznaczanie przedziałów ufności
Przedział ufności jest to konstruowany na podstawie próby losowej przedziału, o którym można powiedzieć, że zawiera prawdziwą wartość szacowania parametru. Przedziały ufności można wyznaczyć dla: -Wartości średniej rozkładu normalnego -Rozkładu normalnego o znanym odchyleniu standardowym. Prawdopodobieństwo zależy od tego, co sobie założymy. Jeśli wyznaczymy poziom ufności α=0,01, to nasze prawdopodobieństwo wynosi 99% (bo (1-0,01)*100%= 99%).średniej. Załóżmy, że chcemy wyliczyć średnią wagę studentów w Polsce. Jeżeli chcielibyśmy wyliczyć dokładną wartość musielibyśmy przebadać wszystkich studentów w Polsce. Oczywiście dałoby się to zrobić ale badania byłyby kosztowne i czasochłonne. Dlatego chcemy wybrać reprezentatywną grupę studentów i estymować (oszacować) wartość średniej. Jednak wybierając grupę, może się zdarzyć, że trafiliśmy lepiej lub gorzej. Z tego powodu zamiast podawać dokładną wartość możemy podać przedział i powiedzieć, że na 99% średnia jest w tym przedziale a to już daje nam obraz wagi całej populacji studentów.
34. Przetwarzanie strumieniowe (środki pakietu java.util.stream).
Przetwarzanie strumieniowe jest odpowiedzialne za przetwarzanie danych w postaci strumieni oraz za operacje na wielu elementach. Na strumieniach możemy wykonać szereg operacji, aby na końcu pobrać wynik tych operacji bez zmiany stanu samego strumienia. Strumienie są jednorazowego użytku (ang. nonreusable), czyli nie wykorzystujemy ich kilka razy, ponieważ każde jego użycie musi być zakończone operacją terminalną (zamykającą strumień). W strumień możesz opakować praktycznie dowolny zestaw danych. Strumienie pozwalają w łatwy sposób zrównoleglić pracę na danych. Operacje związane ze strumieniami można podzielić na trzy rozłączne grupy: ● tworzenie strumienia (metoda stream) ● przetwarzanie danych wewnątrz strumienia, ● zakończenie strumienia
25. Algorytmy rekurencyjne vs algorytmy iteracyjne, porównanie i omówienie podstawowych założeń konstrukcyjnych.
Rekurencja - odwoływanie się np. funkcji lub definicji do samej siebie. Dzięki niej łatwo jest wykonać wiele zadań, w których potrzeba jest wyników cząstkowych do obliczenia całości; np.: wyliczenie wartości silni bądź n-tej wartości ciągu Fibonacciego. Rekurencja jest często łatwiejsza w zapisaniu niż iteracja. Iteracja - czynność powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. W większości języków programowania istnieje co najmniej kilka instrukcji iteracyjnych, np.: FOR lub WHILE. Iteracja jest na ogół bardziej efektywna obliczeniowo niż rekurencja.
14. Podstawowe obiekty, konstrukcje i znaczenie języka SQL.
SQL to strukturalny język zapytań (ang. Strucured Query Language). Jest to najbardziej rozpowszechniony standaryzowany język dostępu do systemów zarządzania relacyjnymi bazami danych (RDBMS). SQL służy do zapisywania i pozyskiwania danych do i z bazy. Język ten jest rozpoznawany niemal przez wszystkie systemy baz danych, m. in. MySQL, Oracle, PostgreSQL, Sybase, Microsoft SQL Server. SQL jest językiem strukturalnym, zdefiniowanym za pomocą reguł składniowych. Występują w nim trzy rodzaje poleceń. -DDL (Data Definition Language) - język definiowania baz danych. Język DDL jest przeznaczony do tworzenia nowych baz danych. -DML (Data Manipulation Language) - język manipulowania danymi. Polecenia SQL odpowiadające językowi DML są znacznie częściej wykorzystywane gdyż realizują one funkcje zapisywania i wyszukiwania rzeczywistych danych z baz danych. -DCL (Data Control Language) - służy ona do zapewnienia bezpieczeństwa dostępu do danych znajdujących się w bazie. Za jego pomocą można na przykład nadawać czy odbierać uprawnienia poszczególnym użytkownikom czy całym grupom. Wszystkie obiekty na serwerze tworzą strukturę hierarchiczną - serwer (instancja) jest na czele tej hierarchii. Baza danych - na każdym serwerze, możemy utworzyć wiele baz danych: systemowych i użytkownika Tabela - to definicja pewnej klasy obiektów które chcemy przechowywać. Kolumn czyli atrybutów, opisujących elementy przechowywane w tabeli, Procedur wyzwalanych (triggers) - obiektów programistycznych, za pomocą których możemy realizować rozmaite cele, np. archiwizowanie modyfikowanych elementów.
47. Techniki cieniowania (shadery).
Shadery możemy podzielić na trzy główne typy: Vertex shader, Geometry shader, Pixel shader. Vertex shader na wejściu przyjmuje wierzchołki obiektów na scenie 3d i umiejscawia je na finalnej klatce. Geometry shader przyjmuje na wejściu listę wierzchołków, a następnie tworzy lub niszczy geometrię na ich podstawie. Pixel shader zwany także Fragment shaderem, w oparciu o dostarczone dane oblicza kolor każdego piksela ekranu. Techniki cieniowania możemy odnieść także do sposobu obliczania oświetlenia danych obiektów. Technikami cieniowania są np.: cieniowanie proste, cieniowanie Gourand, cieniowanie Phonga. Cieniowanie proste polega na przypisaniu jasności powierzchniom obiektu w zależności od odległości względem źródła światła. Cieniowanie Gourand'a polega na przypisaniu jasności konkretnym wierzchołkom, a następnie wyliczaniu jasności punktów na powierzchni obiektu poprzez interpolację wartości zawartych w wierzchołkach. Cieniowanie Phonga uwzględnia wektory normalne powierzchni obiektu oraz wektor normalny światła. Jasność punktu na powierzchni obiektu jest obliczana jako iloczyn wyniku dot product'u wektora normalnego powierzchni i światła, oraz jasności źródła światła.
30. Użycie tablic oraz innych struktur danych w Javie i C++. Java Collections Framework.
Struktura danych to sposób przechowywania informacji w programie. Jedną z nich jest tablica, która pozwala gromadzić dane w uporządkowanej formie. Poszczególne elementy dostępne są poprzez odwołanie się do odpowiedniego indeksu. Istnieją także w JAVIE i C++ tzn. tablice macierzowe, czy tez wielowymiarowe, w których do danego obiektu odwołujemy sie za pomocą podwójnego obiektu. W C++ istnieją również tzn. tablice znaków, które zawierych sekwencja zawiera wartosć tekstową oraz tmożna korzystac z tzn. tablic wskaźników, które zawierają zmienne zawierające wskaźniki do innych zmiennych. Jedną ze struktur danych jest lista, która zawiera pewien zestaw danych. Możliwe jest dynamiczne dodawanie nowych elementów do listy, w przeciwieństwie do tablic, gdzie na etapie inicjacji należy podać jej rozmiar. Innym typem struktury danych jest kolejka. W przypadku chęci pozyskania przez użytkownika danych zwraca je w konkretnej kolejności. Jednym ze sposobów porządkowania danych w kolejce jest wykorzystanie strategii FIFO (first in first out), a innym kolejka priorytetowa, która ustawia elementy biorąc pod uwagę przypisaną im wagę. Kolejnym typem struktury danych jest mapa. Pozwala ona na przypisanie wartości do konkretnych kluczy. Dostęp do danych następuje poprzez podanie odpowiadającego im klucza. Klucze w ramach danej mapy nie mogę się powtarzać, mogą być przypisane tylko do jednej wartości. Wszystkie wymienione struktury danych występują za równo w języku Java jak i C++.
56. Klasyfikacja systemów operacyjnych
Systemy operacyjne można podzielić na ze względu na: Sposób przetwarzania informacji: -Systemy przetwarzania bezpośredniego (interakcyjne) użytkownik wprowadza zadanie do systemu i oczekuje na wyniki. W trakcie przetwarzania jest zatem możliwa interakcja pomiędzy użytkownikiem a systemem (aplikacją). -Systemy przetwarzania pośredniego (wsadowe) - zadanie jest realizowane w czasie wybranym przez system. Po przedłożeniu zadania ingerencja użytkownika jest niemożliwa. Liczbę wykonywanych programów: -Jednoprogramowe - zwane też jednozadaniowymi - umożliwiają uruchomienie jednego zadania użytkownika. -Wieloprogramowe (wielozadaniowe) - dostarczają mechanizm przełączania kontekstu, umożliwiając w ten sposób zachowanie stanu wykonywania określonego programu (stanu procesu), a następnie odtworzenie stanu wykonywania innego programu (w szczególności innego wykonywania tego samego programu). Priorytet wykonywanych operacji (Systemy czasu rzeczywistego): -twarde - takie które mają restrykcyjnie ustalony czas wykonywania jednej operacji -miękkie - które dopuszczają do pewnego stopnia lekkie opóźnienia Systemy rozproszone - zapewniają, że system komputerowy, złożony z autonomicznych jednostek przetwarzających połączonych siecią komputerową, postrzegany jest jako całość.
37. Język UML - charakterystyka oraz sposób wsparcia różnorodnych modeli danych.
UML jest to pół-formalny język wykorzystywany do modelowania różnego rodzaju systemów. Jest językiem modelowania graficznego służącym do:
57. Problem szeregowania procesów/wątków w systemach operacyjnych.
W szeregowaniu procesów w systemach operacyjnych dużą rolę odgrywa planista procesów. Jest on częścią systemu operacyjnego odpowiedzialną za przydzielanie zadaniom czasu procesora. Planiści dzielą się na: -planistę długoterminowego - decyduje co powinno być gotowe do wykonania -planistę krótkoterminowego - odpowiada za szeregowanie procesów Przykładowe algorytmy szeregowania procesów: -FIFO - wykonuje się aż nie zostanie wywłaszczone przez siebie lub inne zadanie o wyższym priorytecie -Planowanie rotacyjne (Round-Robin) - każde z zadań otrzymuje kwant czasu; po spożytkowaniu swojego kwantu zostaje wywłaszczone i ustawione na końcu kolejki
41. Usługi i protokoły warstwy aplikacji na przykładzie protokołu HTTP.
Warstwa aplikacji jest najwyższą warstwą stosowaną w modelach OSI oraz TCP/IP. Jest to warstwa „najbliższa" użytkownikowi sieci, ponieważ udostępnia ona interfejs komunikacyjny. HTTP (ang. Hypertext Transfer Protocol) udostępnia znormalizowany sposób komunikowania się komputerów ze sobą. Określa on formę żądań klienta (tj. np. przeglądarki www) dotyczących danych oraz formę odpowiedzi serwera na te żądania. Aktualnie najczęściej używaną wersją protokołu jest wersja 1.1. Jest on zaliczany do protokołów bezstanowych (ang. stateless) z racji tego, że nie zachowuje żadnych informacji o poprzednich transakcjach z klientem. Za pomocą protokołu HTTP można np. przesyła żądania udostępnienia dokumentów WWW. Protokół zakłada wykorzystanie metod, nagłówków i faktycznej treści. Najczęściej używaną metodą do pobierania zawartości stron jest GET. Nagłówkami są zazwyczaj dane opisujące treści, serwer lub klienta.
42. Usługi warstwy transportu na przykładzie protokołu TCP.
Warstwa transportowa przede wszystkim odpowiedzialna jest za prawidłowy przebieg komunikacji oraz jej niezawodność. Określa sposób segmentacji danych oraz późniejszego ich scalania, a także identyfikuje dane pochodzące z różnych aplikacji poprzez numery portów. Dwa najpopularniejsze protokoły warstwy transportowej to TCP i UDP. TCP (ang. Transmission Control Protocol) jest protokołem połączeniowym, tworzącym tzw. segmenty. Zapewnia on niezawodne dostarczanie danych i kontrolę ich przepływu. Główną zaletą tego protokołu jest niezawodność, którą gwarantuje konieczność wysłania potwierdzenia przez hosta odbierającego dane, zanim dostanie przesłany kolejny segment. Jednocześnie przy wysyłaniu segmentu ustawiany jest "budzik" na określony czas. Jeśli potwierdzenie odbioru nie nadchodzi, segment wysyłany jest ponownie. Odbiorca wykorzystuje "numerację" segmentów do ich uporządkowania, jeśli nadeszły w niewłaściwej kolejności, a także do wyeliminowania zduplikowanych segmentów.
44. Usługi warstwy łącza na przykładzie protokołu Ethernet lub protokołów z rodziny 802.11 (WiFi)
Warstwa łącza jest odpowiedzialna za komunikację ramek między węzłami sieci (hostami, routerami, switchami). Warstwa łącza ma za zadanie uzyskać dostęp do medium i wysłać ramkę do adresata. Używane są adresy fizyczne zwane adresami MAC (ang. Medium Access Control). Adresy te przypisane są do interfejsów sieciowych. W celu sprawdzenia błędów używane są sumy kontrolne, które potrafią wykryć przekłamanie bitów w przesyłanej ramce. Protokół Ethernet ma za zadanie przesłać ramki do adresata. Zanim jednak to zrobi musi poinformować adresata, o tym że rozpoczyna połączenie. Aby uniknąć kolizji danych na łączu, Ethernet wykorzystuje mechanizm wykrywania kolizji. Przed wysłaniem ramki, sprawdzane jest łącze czy nikt nie nadaje, jeśli tak to należy poczekać, aż będzie ono wolne. Kiedy jednak nastąpi kolizja, urządzenie przestaje nadawać i przeprowadza wygłuszanie, które polega na poinformowaniu urządzeń w sieci o kolizji. WiFi jest protokołem komunikacji bezprzewodowej. W odróżnieniu do Ethernetu wykorzystuje on mechanizm unikania kolizji. Sposób postępowania w przypadku, gdy kilka urządzeń próbuje wysyłać informacje na tym samym łączu w tym samym czasie, jest następujący: każde urządzenie przed próbą wejścia na linię wysyła sygnał próbny (tzw. pilot) i jeżeli nie zaszła kolizja z sygnałem innego urządzenia - uzyskuje zgodę na nadawanie. W przypadku zapełnienia łącza protokół ten generuje duże straty czasowe.
2. Wielomian i szereg Taylora funkcji rzeczywistej.
Wielomian Taylora (w punkcie x0) przybliża wartość funkcji poprzez przybliżanie wartości jej kolejnych pochodnych. Bardziej po ludzku: kolejne pochodne danej funkcji, wyznaczone w tym samym punkcie, kodują coraz „większą" i bardziej dokładną informację o kształcie funkcji w „szerszym" przedziale, od nas zależy ile tych pochodnych weźmiemy pod uwagę.Za pomocą wielomianu Taylora możemy przybliżać funkcje. Przybliżenie jest tym dokładniejsze, im wyższy jest stopnień wielomianu. Szereg Taylora to suma nieskończonej ilości wyrazów należących do wielomianu Taylora. Rozwinięcie wielomianu w szereg Taylora pozwala na obliczenie wartości całki lub pochodnej w przypadku, gdy mamy trudności z wyliczeniem ich wartości.
32. Typy i metody sparametryzowane (generics) w Javie. Szablony (templates) w C++.
Wykorzystanie szablonów w programach pozwala skupić się bardziej na algorytmach niż na danych jakie są przetwarzane. Użycie szablonów pozwala zredukować ilość nadmiarowego kodu, ponieważ jedną funkcjonalność można zaprogramować dla wielu typów danych. W języku C++ istnieje mechanizm szablonów (templates), definiujący jedną klasę lub funkcję, którą następnie kompilator precyzuje dla wykorzystanego typu i odpowiednio dostosowuje np. wywołania funkcji lub odwołania do obiektu klasy. W Javie odpowiednikiem szablonów są tzw. generics, które zapewniają kontrolę typów na poziomie kompilacji. Jednak na poziomie wykonania, wykorzystywana jest jedna implementacja bazująca na typie Object. Z racji, że w Javie wszystkie klasy dziedziczą po klasie Object, pozwala to na wykorzystanie jednej implementacji dla wielu typów. Wprowadzenie generics (typów sparametryzowanych) dodaje ułatwienia w postaci: tworzenia bardziej czytelnego kodu wykrywania błędów w fazie kompilacji i unikania wyjątku ClassCastException
9. Testowanie hipotez statystycznych
Wykorzystuje się w celu weryfikacji hipotez statystycznych dotyczących parametrów popaulacji. Postępuje się według niniejszej procedury: -Sformułowanie hipotezy zerowej oraz alternatywnej. Załóżmy, że skuteczność pewnej terapii medycznej wynosi 80%. Zaproponowano nową terapię, której oczekiwana skuteczność powinna być lepsza (tzn. oczekujemy, że p > 0,8). Nowa terapia będzie szeroko stosowana, jeśli po badaniach wstępnych uzyskamy „pewność", że p > 0,8. -Wybór statystyki testowej- podyktowany parametrami jakie dysponujemy -Określenie poziomu istotności- definiuje mozliwosc bledu naszych obliczen -Wyznaczenie obszaru krytycznego testu -Obliczenie statystyki na podstawie próby -Podjęcie decyzji
40. Rodzaje, metody specyfikowania oraz rola wymagań w procesie wytwarzania oprogramowania.
Wymagania możemy podzielić na wymagania funkcjonalne i niefunkcjonalne. Wymagania funkcjonalne opisują funkcje wykonywane przez system, czyli co dane oprogramowanie ma być w stanie wykonać. Wymagania niefunkcjonalne opisują ograniczenia, przy których system musi realizować swoje funkcje, czyli np. używanie systemu wyłącznie za pomocą klawiatury. Metody specyfikowania wymagań: -Język naturalny - najczęściej stosowany. Wadą jest niejednoznaczność utrudniająca rozumienie tekstu oraz -elastyczność, czyli możliwość wyrażenia tej samej treści na wiele sposobów. Utrudnia to wykrycie powiązanych wymagań i sprzeczności. -Formalizm matematyczny - Stosuje się rzadko i w specyficznych celach. -Język naturalny strukturalny - czyli język naturalny z ograniczonym słownictwem i składnią. -Tablice, formularze - wymagania w postaci tablic, kojarzących różne aspekty. -Diagramy przypadków użycia - poglądowy sposób przedstawienia aktorów i funkcji systemu. Wymagania są podstawą szczegółowego kontraktu między klientem, a producentem oprogramowania. Pozwalają na jednoznaczne określenie elementów, które powinny zostać zaimplementowane w produkcie finalnym.
38. Wzorce projektowe oraz ramy programistyczne (frameworks) - charakterystyka, przykłady, zastosowania.
Wzorce projektowe - to wielokrotnie powtarzające się i pozytywnie zweryfikowane schematy rozwiązań często spotykanych problemów projektowych. Stosowanie wzorców projektowych pozwala na pisanie lepszych, bardziej efektywnych, skalowalnych, łatwiej modyfikowalnych, mniej narażonych na błędy programów. W książce Go4 opisano trzy klasy wzorców projektowych: • konstrukcyjne - tworzenie obiektów, w tym: delegowanie procesu tworzenia do innych klas (ważne ze względu na zmniejszanie współzależności w kodzie), kontrola nad sposobem tworzenia obiektów • strukturalne - zarządzanie strukturą obiektów i strukturami złożonymi z obiektów • behawioralne - zachowanie obiektów i komunikacja między nimi Przykłady wzorców: Wzorce konstrukcyjne • Factory • Factory method • Abstract factory • Singleton Wzorce strukturalne • Bridge • Flyweight Wzorce behawioralne • Iterator • Observer • Visitor Framework - szkielet do budowy aplikacji. Definiuje on strukturę aplikacji oraz ogólny mechanizm jej działania, a także dostarcza zestaw komponentów i bibliotek ogólnego przeznaczenia. Programista tworzy aplikację rozbudowując i dostosowując poszczególne komponenty do wymagań projektu. Cechy: • Odwrócenie sterowania - przepływ sterowania w aplikacji jest narzucany przez framework, nie przez programistę. • Rozszerzalność - funkcjonalność framework'u może być rozszerzana przez programistę poprzez nadpisywanie lub dodawanie nowych elementów. • Niemodyfikowalny kod - kod framework'u nie powinien być modyfikowany przez programistę podczas rozszerzania.
59. Mechanizmy obsługi pamięci operacyjnej wykorzystywane w systemach operacyjnych.
Wśród mechanizmów obsługi pamięci można wyszczególnić: -Mechanizm ochrony pamięci - każdy proces powinien mieć dostęp do swojej pamięci, ale nie powinien mieć dostępu do pamięci innych procesów. W związku z tym stosowane są sprzętowe jednostki zarządzania pamięcią zwane MMU (ang. Memory Management Unit). -Mechanizm segmentacji - zapewnia on w procesie kompilacji generowanie kodu przemieszczalnego. W trakcie ładowania programu do pamięci, wszelkie adresy zawarte w takim kodzie mogą być odpowiednio przesuwane. W takim wypadku pamięć wykorzystywana przez proces nie stanowi jednego spójnego obszaru. -Mechanizm wymiany procesów - odpowiedzialny jest za zapewnienie odpowiedniej ilości pamięci procesowi, który jest aktualnie wykonywany. -Mechanizm adresowania logicznego (pamięć operacyjna) - proces, który ma dostęp do pamięci fizycznej komputera, nie powinien mieć dostępu do całej pamięci, ale tylko do pamięci przydzielonej mu przez system operacyjny. Pamięć, taką jak ją widzi dany proces, nazywamy pamięcią logiczną.
21. Szacowanie złożoności algorytmów, klasy złożoności problemów algorytmicznych.
Zanim wykona się analizę złożoności danego algorytmu należy wykonać 2 następujące kroki: wyznaczyć zbiór operacji dominujących. Zbiór operacji dominujących danego algorytmu to zbiór takich operacji, których liczba jest proporcjonalna do liczby wszystkich operacji wykonanych przez cały algorytm. Operacją dominującą nie jest więc np. operacja wykonywana tylko jednokrotnie. Natomiast każda pętla lub odgałęzienie instrukcji warunkowej powinna zawierać operację dominującą. wyznaczyć funkcję argumentów (danych wejściowych), która stanowi rozmiar danych wejściowych Klasy złożoności obliczeniowej określają pewne typowe funkcje zależne od ilości danych, które stosowane są wyznaczenia złożoności obliczeniowej danego zadania. Do najbardziej typowych zaliczamy złożoność: Stałą (np.dowolna elementarna instrukcja przypisania, pojedynczej operacji arytmetycznej lub logicznej, porównania ) Logarytmiczną (np.algorytm wyszukiwania połówkowego, bisekcji, drzewo BST) Liniową (np.wyszukiwanie liniowe w n-elementowych ciągach nieposortowanych, sortowanie przez zliczanie i pozycyjne ) -Logarytmiczno-liniową (np. najefektywniejsze metody sortowania elementów polegające na porównaniach (kopcowe, przez łączenie, szybkie) ogólnego przeznaczenia -Kwadratową (np. proste algorytmy sortowania przez wstawianie, wybieranie, bąbelkowe, szukanie najkrótszej ścieżki w grafie metodą ) -Sześcienną -Wielomianową -Wykładniczą (np. niektóre algorytmy wykorzystujące rekurencję, np. ciąg Fibonacciego ) -Silnia (np.różne problemy kombinatoryczne polegające na przeszukiwaniu wszystkich kombinacji, wariacji czy permutacji n danych, np. niektóre algorytmy operujące na grafach).
18. Zapis binarny liczb całkowitych, zapis zmiennoprzecinkowy liczb rzeczywistych, arytmetyka komputerowa.
Zapis binarny liczb całkowitych występuje w dwóch podstawowych sposobach: 1. Zapis znak moduł Najbardziej znaczący bit (skrajny lewy) jest bitem znaku (0 - dodatni, 1 - ujemny). Pozostałe bity są traktowane jak zapis liczby dodatniej. 2. Zapis z uzupełnieniem do 2 (dwójki) Najbardziej znaczący bit koduje znak liczby, ale posiada wartość liczbową uwzględnianą przy wyliczeniu wartości zapisanej liczby. Najbardziej znaczący bit w liczbach ujemnych oznacza liczbę, od której odejmujemy wartość reprezentowaną przez pozostałe bity. W słowie liczbowym w zapisie zmiennoprzecinkowym wyróżnia się pole cechy (wykładnik, w systemach jako 2) i mantysy (liczba ułomkową) ., są to liczby całkowite za pomocą których można zapisać liczbe zmiennoprzecinkową.
50. Zasady interakcji człowiek-komputer: przedstaw i omów heurystyki Nielsena-Molicha.
Zasada I: Pokazuj status systemu System powinien zawsze informować użytkownika co się dzieje przez odpowiednie potwierdzenia i komunikaty. Użytkownik musi wiedzieć co się dzieje. Komunikaty muszą być czytelne. Zasada II: Zachowaj zgodność pomiędzy systemem a rzeczywistością System powinien mówić językiem użytkownika i posługiwać się zrozumiałymi analogiami zaczerpniętymi z rzeczywistości. Zasada III: Daj użytkownikowi pełną kontrolę Użytkownicy często wybierają błędne opcje i dlatego powinni mieć zapewnione "wyjście awaryjne", najlepiej za pomocą funkcji "cofnij" i "powtórz". Zasada IV: Trzymaj się standardów i zachowaj spójność Te same słowa, symbole, sytuacje i działania powinny być stosowane w jednakowy sposób w całym produkcie, w zgodzie z zasadami przyjętymi dla danego środowiska, platformy czy systemu operacyjnego. Zasada V: Zapobiegaj błędom Zapobieganie błędom przez dopracowany dialog z użytkownikiem jest mniej pracochłonne niż projektowanie wyrafinowanego systemu obsługi błędów. • Im mniej opcji tym lepiej • Czytelne Zasada VI: Pozwalaj wybierać zamiast zmuszać do pamiętania Działania użytkownika powinny być wynikiem wyboru z listy, a nie przywoływania z pamięci. Wszystkie potrzebne w danej sytuacji informacje i instrukcje powinny być cały czas widoczne na ekranie, aby nie obciążać pamięci użytkownika. Zasada VII: Zapewnij elastyczność i efektywność Użytkownicy powinni mieć możliwość dopasowywania sposobu wykonywania typowych zadań oraz dostępu "na skróty" do potrzebnych funkcji. Zasada VIII: Dbaj o estetykę i umiar Oszczędny układ graficzny: polepsza czytelność zmniejsza obciążenie wzroku skraca czas odszukania informacji Zasada IX: Zapewnij skuteczną obsługę błędów Komunikaty o błędach powinny być sformułowane prostym, życzliwym językiem oraz powinny wskazywać typ problemu i sposób jego rozwiązania. Zasada X: Zadbaj o pomoc i dokumentację Jeśli system jest zaopatrzony w dokumentację, powinna ona umożliwiać szybkie odnalezienie żądanej informacji, a instrukcje rozwiązywania problemów powinny być zwięzłe i dotyczyć zadań użytkownika.
15. Podstawowe zasady optymalizacji zapytań, w tym rodzaje i znaczenie indeksów w bazie danych.
określenie, które zapytania można poprawić, a możesz to sprawdzić za pomocą narzędzi, takich jak profiler SQL. zrozumienie jak dany silnik SQL wykonuje zapytanie (np. komenda: EXPLAIN QUERY PLAN, aby sprawdzić jak zachowuje się SQL za kulisami) Indeks jest pomocniczą strukturą nakładaną na tabelę (ściślej: kolumnę lub grupę kolumn), służącą polepszaniu efektywności wyszukiwania. Uwaga: indeksy pogarszają efektywność operacji update, delete i insert. Z punktu widzenia charakterystyki atrybutu indeksowego wyróżnia się trzy rodzaje indeksów: - indeks podstawowy (ang. primary index) - indeks zgrupowany (ang. clustering index) - indeks wtórny (ang. secondary index). Dla indeksu podstawowego atrybut porządkujący przyjmuje wartości unikalne. Indeks zgrupowany jest zakładany również na atrybucie porządkującym, ale w tym przypadku jego wartości nie są unikalne. Indeks wtórny jest zakładany na atrybucie, który nie jest atrybutem porządkującym pliku.