Pytania pomocnicze - INF.04
Projektowanie, programowanie i testowanie aplikacji - pytania pomocnicze rozwijające tematy z pytań egzaminacyjnych. Łącznie: 3731. Strona 51 z 51.
Po co w programowaniu stosuje się garbage collection?
Garbage collection automatycznie zwalnia pamięć zajętą przez obiekty, które nie są już używane. Dzięki temu programista nie musi w wielu językach ręcznie usuwać takich obiektów.
Kiedy obiekt może zostać usunięty przez garbage collector?
Obiekt może zostać usunięty, gdy program nie ma już do niego żadnego aktywnego odwołania. Oznacza to, że nie można go już wykorzystać z poziomu działającego kodu.
Czy garbage collection działa natychmiast po utracie odwołania do obiektu?
Nie zawsze. Garbage collector uruchamia się według zasad środowiska wykonawczego, więc dokładny moment zwolnienia pamięci zwykle nie jest przewidywalny.
Czym garbage collection różni się od ręcznego zarządzania pamięcią?
W garbage collection pamięć zwalnia automatycznie środowisko uruchomieniowe. Przy ręcznym zarządzaniu, np. w C++, programista sam decyduje, kiedy zwolnić zaalokowaną pamięć.
Jakie języki programowania najczęściej kojarzą się z garbage collection?
Garbage collection występuje m.in. w Javie, C#, Pythonie i JavaScript. Są to języki, w których zarządzanie pamięcią jest w dużej części automatyczne.
Czy garbage collection całkowicie eliminuje problem wycieków pamięci?
Nie całkowicie. Jeśli program nadal przechowuje odwołania do niepotrzebnych obiektów, garbage collector uzna je za używane i nie zwolni zajmowanej przez nie pamięci.
Dlaczego garbage collection może wpływać na wydajność programu?
Garbage collector musi analizować obiekty w pamięci i usuwać te nieużywane. W niektórych momentach może to powodować krótkie spowolnienie działania aplikacji.
Czym architektura mikroserwisów różni się od architektury monolitycznej?
W mikroserwisach aplikacja jest podzielona na niezależne usługi. W monolicie większość funkcji znajduje się w jednej wspólnej aplikacji wdrażanej jako całość.
Dlaczego monolityczny kod źródłowy nie pasuje do mikroserwisów?
Mikroserwisy zakładają podział systemu na wiele niezależnych usług. Monolityczny kod oznacza jedną zwartą całość, co jest przeciwieństwem tej idei.
Co oznacza niezależne wdrażanie usług?
Oznacza możliwość aktualizacji jednej usługi bez konieczności publikowania całego systemu. To jedna z kluczowych zalet mikroserwisów.
Jak mikroserwisy komunikują się między sobą?
Najczęściej komunikują się przez API, np. REST, HTTP, gRPC lub kolejki komunikatów. Dzięki temu nie muszą bezpośrednio korzystać ze swojego kodu źródłowego.
Na czym polega skalowanie poszczególnych usług?
Skalowanie polega na zwiększaniu zasobów tylko dla wybranych usług, np. uruchomieniu większej liczby instancji usługi płatności. Nie trzeba skalować całej aplikacji.
Kiedy mikroserwisy są szczególnie przydatne?
Są przydatne w dużych systemach, rozwijanych przez wiele zespołów, gdzie ważna jest niezależność wdrażania, odporność na awarie i elastyczne skalowanie.
Czy mikroserwisy zawsze są lepsze od monolitu?
Nie. Mikroserwisy zwiększają złożoność systemu, dlatego dla małych aplikacji prostszy i tańszy może być monolit.
Dlaczego React Native jest uznawany za technologię cross-platform?
Ponieważ pozwala tworzyć aplikacje na różne platformy, głównie Android i iOS, na podstawie wspólnej bazy kodu. Zmniejsza to ilość pracy w porównaniu z pisaniem osobnych aplikacji natywnych.
Czym React Native różni się od Angulara?
Angular jest frameworkiem przeznaczonym głównie do tworzenia aplikacji webowych. React Native służy przede wszystkim do tworzenia aplikacji mobilnych z natywnym interfejsem.
Czy jQuery jest dobrym wyborem do tworzenia nowoczesnych aplikacji mobilnych?
Nie jest to typowy wybór. jQuery służy głównie do manipulowania elementami strony WWW i obsługi zdarzeń w przeglądarce.
Jaką rolę pełnią komponenty w React Native?
Komponenty opisują fragmenty interfejsu użytkownika, np. tekst, widok, przycisk lub listę. Aplikację buduje się przez łączenie wielu komponentów.
Co oznacza tworzenie interfejsu użytkownika w aplikacji?
Oznacza projektowanie i implementowanie elementów, z którymi użytkownik wchodzi w interakcję, np. przycisków, formularzy, ekranów i menu.
Dlaczego w tym pytaniu poprawną odpowiedzią nie jest Vue.js?
Vue.js jest frameworkiem JavaScript używanym głównie do aplikacji webowych. Do aplikacji mobilnych wymaga dodatkowych narzędzi, dlatego w tym zestawie odpowiedzi lepiej pasuje React Native.
Czym jest źródło w kontekście CORS?
Źródło tworzą trzy elementy: protokół, domena i port. Jeśli choć jeden z nich się różni, przeglądarka traktuje żądanie jako cross-origin.
Dlaczego przeglądarka może blokować żądania do API?
Przeglądarka blokuje żądanie, jeśli serwer API nie zwróci odpowiednich nagłówków CORS. To zabezpieczenie przed nieautoryzowanym dostępem do danych z poziomu obcych stron.
Jaki nagłówek najczęściej wskazuje, które domeny mogą korzystać z zasobu?
Najważniejszy jest `Access-Control-Allow-Origin`. Może wskazywać konkretną domenę, np. `https://app.example.com`, albo znak `*`, który oznacza dowolne źródło.
Czym jest preflight request w CORS?
Preflight request to wstępne żądanie HTTP metodą `OPTIONS`, które sprawdza, czy właściwe żądanie jest dozwolone. Występuje np. przy metodach `PUT`, `DELETE` lub niestandardowych nagłówkach.
Czy CORS zabezpiecza API przed wszystkimi atakami?
Nie. CORS kontroluje dostęp z poziomu przeglądarki, ale nie zastępuje uwierzytelniania, autoryzacji, walidacji danych ani ochrony przed atakami na API.
Czy CORS dotyczy komunikacji serwer-serwer?
Zwykle nie. CORS jest egzekwowany przez przeglądarkę, dlatego problem najczęściej dotyczy aplikacji frontendowej komunikującej się z backendowym API.
Dlaczego ustawienie `Access-Control-Allow-Origin: *` bywa ryzykowne?
Pozwala dowolnej stronie wysyłać żądania do zasobu z poziomu przeglądarki. Dla publicznych zasobów może być poprawne, ale dla prywatnych API lepiej wskazać konkretne dozwolone domeny.