Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό — Φεβρουάριος 2025 (Ομάδα Β)¶
IMG_3279.jpeg¶
5 Φεβρουαρίου 2025 - Ομάδα Β Τμήμα Μηχανικών Η/Υ & Πληροφορικής Προγραμματισμός & Συστήματα στον Παγκόσμιο Ιστό
Για κάθε σωστή απάντηση λαμβάνετε 1 μονάδα (στις 30), ενώ κάθε λάθος στοιχίζει 0,5 μονάδα (στις 30).
Ο παρακάτω κώδικας σε ένα HTML αρχείο, θα εμφανίσει έναν σύνδεσμο (hyperlink) που όταν τον επιλέξουμε θα μας οδηγήσει στην αρχική σελίδα του Πανεπιστημίου Πατρών
<a href = "www.upatras.gr">Παν.Πατρών</a>
Ο παρακάτω κώδικας σε ένα HTML αρχείο, θα εμφανίσει μία εικόνα που όταν την επιλέξουμε θα εμφανίσει ένα παράθυρο διαλόγου (pop up) με τίτλο «Test picture»
<a href = "mypage.html">
<img src = "images/myimage.png" alt = "Test picture">
</a>
Σε ένα αρχείο CSS περιέχεται ο κώδικας .special {color: blue} Αυτό σημαίνει πως όλες οι HTML ετικέτες με id το αλφαριθμητικό "special" θα εμφανιστούν με μπλε γραμματοσειρά.
Για να πετύχουμε Responsive Web Design βασιζόμαστε αποκλειστικά στην παράμετρο viewport
Το παρακάτω είναι ένα well-formed XML αρχείο:
<?xml version = "1.0"?>
<books><book1/></books>
Ένα XML έγγραφο μπορεί να περιέχει δύο στοιχεία με το ίδιο όνομα και διαφορετικό namespace
Ένα DTD περιγράφει τη δομή ενός XML εγγράφου
Στην JavaScript οι έλεγχοι για την ύπαρξη, την ιεραρχία και τον σωστό ορισμό μεθόδων γίνονται κατά την διάρκεια του compilation (μεταγλώττισης)
Στον παρακάτω κώδικα Javascript η σειρά εκτύπωσης θα είναι: 1,3,2,4
(function() {
console.log(1);
setTimeout(function(){console.log(2)}, 1000);
setTimeout(function(){console.log(3)}, 0);
console.log(4);
})();
Ο παρακάτω κώδικας JavaScript θα επιστρέψει το πρώτο στοιχείο με id = 'button':
let element = document.querySelector('#button');
Η τοποθέτηση ενός <script> στο τέλος του <body> μπορεί να αλλάξει την εμφάνιση της σελίδας αφού φορτωθεί
Στην JavaScript, αν το list είναι ένα array, η προσπέλαση των στοιχείων του μπορεί να γίνει ως:
for (let item in list) {
...
}
Έστω ο κώδικας για node server που τρέχει στο localhost:
const express = require ('express');
const app = express ();
app.listen(3000);
app.post('/', (req, res) => {
res.send('POST request to the homepage')
})
Στη μέθοδο send() του αντικειμένου XMLHttpRequest δίνουμε πάντα σαν παράμετρο τα δεδομένα της θέλουμε να στείλουμε στον server.
1b2025FEB.jpg¶
[Προγραμματισμός & Συστήματα στον Παγκόσμιο Ιστό]
Για κάθε σωστή απάντηση λαμβάνετε 1 μονάδα (στις 30), ενώ κάθε λάθος στοιχίζει 0,5 μονάδα (στις 30)
Όνομα: .................................................... Επώνυμο: ..................................................
Σε μία HTML φόρμα, η χρήση του
<input type="password">
Ο παρακάτω HTML κώδικας δεν είναι σωστός γιατί δεν έχουμε γράψει κάποιο κείμενο μέσα στο tag <a>
<a href = "mypage.html">
<img src = "images/myimage.png" alt = "Test picture">
</a>
Σε ένα αρχείο CSS περιέχεται ο κώδικας #special {color: blue} Αυτό σημαίνει πως όλες οι HTML ετικέτες με id το αλφαριθμητικό "special" θα εμφανιστούν με μπλε γραμματοσειρά.
Για να πετύχουμε Responsive Web Design συνήθως θέτουμε την παράμετρο viewport
Το παρακάτω είναι ένα well-formed XML αρχείο:
<?xml version = "1.0"?>
<books>
Ένα XML έγγραφο μπορεί να περιέχει δύο στοιχεία με το ίδιο όνομα και ίδιο namespace
Ένα XSL περιγράφει τη δομή ενός XML εγγράφου
Στη JavaScript οι μεταβλητές μπορούν να συνδεθούν με διαφορετικό τύπο δεδομένων από αυτόν που αρχικοποιήθηκαν
Στον παρακάτω κώδικα Javascript η σειρά εκτύπωσης θα είναι: 1, 4, 3, 2
(function() {
console.log(1);
setTimeout(function(){console.log(2)}, 1000);
setTimeout(function(){console.log(3)}, 0);
console.log(4);
})();
Ο παρακάτω κώδικας JavaScript θα επιστρέψει το πρώτο στοιχείο με id = 'button':
let element = document.querySelector('button');
Η συμπερίληψη ενός script στην αρχή της σελίδας ως:
<script src="script.js"></script>
Στην JavaScript, αν το obj είναι ένα object, η προσπέλαση των ιδιοτήτων του μπορεί να γίνει ως:
for (let key in obj) {
...
}
Έστω ο κώδικας για node server που τρέχει στο localhost:
const express = require ('express');
const app = express ();
app.listen(3000);
app.post('/', (req, res) => {
res.send('POST request to the homepage')
})
Ένα promise στη JavaScript θα εκτελεστεί με μεγαλύτερη προτεραιότητα από άλλες εργασίες στην ουρά εργασιών (task queue).
2b2025FEB.jpg¶
Για την φόρτωση εξωτερικών πόρων σε JSON μορφή μπορεί να χρησιμοποιηθεί το $.ajax() του jQuery
Η σωστή κλήση ενός php αρχείου από τον browser, πρέπει να γίνεται με χρήση του πρωτοκόλλου HTTP, ακόμη και αν το PHP αρχείο βρίσκεται τοπικά, στον υπολογιστή μας
Ο παρακάτω PHP κώδικας δε θα εκτελεστεί κανονικά και θα επιστρέψει PHP error καθώς δεν επιτρέπεται σε ένα πίνακα να μένουν θέσεις κενές
$students[0]="Vasilis";
$students[4]="Kyriaki";
Θεωρείστε ότι γίνεται submit η παρακάτω φόρμα.
<form name="form1.php" method="post" action="form2.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
$username = $_POST['username '];
Ο παρακάτω php κώδικας είναι σωστός καθώς στην PHP είναι δυνατόν να γίνει συνένωση μιας μεταβλητής τύπου int με μία τύπου string χωρίς να χρειάζεται κάτι επιπλέον από τον προγραμματιστή. Η PHP θα μετατρέψει αυτόματα τη $var1 σε string.
$var1 = 2025;
$var2 = "The current year is ";
$var3 = $var2.$var1;
Ο παρακάτω PHP κώδικας θα προκαλέσει την εμφάνιση PHP error καθώς δεν υπάρχει στην HTML το tag <h7>
for ($i=1; $i<=7; $i++)
{
echo "<h".$i.">This is header ".$i."</h".$i.">";
}
Η PHP είναι cross platform, δηλαδή οι PHP εφαρμογές μπορούν να τρέξουν τόσο σε Windows όσο και σε Linux/ Unix servers
Αν εγκαταστήσουμε στον υπολογιστή μας το WAMP, έχουμε ότι χρειάζεται για την εκτέλεση web εφαρμογών υλοποιημένων σε PHP
Αν γράψουμε το παρακάτω στη μπάρα διευθύνσεων του Google Chrome, απλά ο browser θα προσπαθήσει να φορτώσει το test.php ως αρχείο κειμένου, σε κάθε περίπτωση δε θα μπορέσει να εκτελέσει τον κώδικα.
C:\wamp\www\test.php
Μελέτες σε πραγματικά συστήματα έχουν δείξει ότι η αποθήκευση ιστο-αντικειμένων σε ΚΜς αντιπροσώπων, συνεισφέρει σημαντικά ωφέλη στο χρόνο προσπέλασης ιστο-αντικειμένων, ανεξάρτητα από το μέγεθός τους.
Μια HTTP GET αίτηση ενός πελάτη για ένα σύνθετο ιστο-αντικείμενο με 10 ενσωματωμένα (embedded) αντικείμενα θα προκαλέσει αυτόματα 10 HTTP GET αιτήσεις προς τον εξυπηρετητή.
Μια επίμονη σύνδεση TCP με pipelining βελτιώνει τον χρόνο προσπέλασης καθώς ο χρήστης δεν χρειάζεται για κάθε αίτηση να περιμένει να γίνουν οι διαδικασίες σύνδεσης και αποδοχής αυτής.
Ο διαχωρισμός μεταξύ αργής και γρήγορης ευστοχίας βασίζεται στο αν το TTL του αντικειμένου έχει λήξει.
Ο πελάτης είναι δυνατόν να ορίσει ικανοποιητικά το TTL αντικειμένων, εάν ο εξυπηρετητής δεν το έχει ορίσει.
Οι HEAD αιτήσεις χρησιμοποιούνται για να μειώσουν τον αριθμό των μηνυμάτων που θα προέκυπταν αν χρησιμοποιούνταν ‘τυφλές’ If-Modified-Since αιτήσεις.
Οι εξυπηρετητές DNS αντιμετωπίζουν μεγάλο φόρτο εργασίας λόγω του ότι παρέχονται αποκλειστικά για κάθε χώρα από τις κυβερνητικές υπηρεσίες
3b2025FEB.jpg¶
Για την φόρτωση εξωτερικών πόρων σε JSON μορφή μπορεί να χρησιμοποιηθεί το Fetch API
Η PHP δε διαθέτει κάποιο μηχανισμό ελέγχου της ορθότητας των MySQL queries πριν αυτά σταλούν στη βάση δεδομένων για εκτέλεση.
Θεωρείστε ότι έχουμε ένα PHP script το οποίο κάνει ένα INSERT σε ένα MySQL table. Το MySQL table έχει ένα πεδίο με όνομα id το οποίο είναι auto increment. Ο καλύτερος τρόπος ανάκτησης της τιμής του id αμέσως μετά την εκτέλεση του INSERT είναι να εκτελέσουμε αμέσως ένα SELECT και να διαβάζουμε τη μέγιστη τιμή της στήλης id
Με την PHP μπορούμε να γράψουμε scripts τα οποία διαχειρίζονται πλήρως τα δεδομένα σε μια MySQL Β.Δ (INSERT, UPDATE, DELETE, SELECT)
Η εκτέλεση PHP scripts είναι εφικτή μόνο σε servers με UNIX/Linux λειτουργικά συστήματα
Web εφαρμογές οι οποίες έχουν φτιαχτεί με χρήση PHP δεν είναι συμβατές με κινητές συσκευές
Η παρακάτω φόρμα στέλνει με το πάτημα του submit τα δεδομένα στο αρχείο form1.php
<form name="form1.php" method="post" action="form2.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
Θεωρείστε ότι γίνεται submit η παρακάτω φόρμα.
<form name="form1.php" method="post" action="form2.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
$username = $_SESSION['username '];
Θεωρείστε ότι έχω μία απλή PHP web εφαρμογή στην οποία ο μηχανισμός του user control (login/logout κλπ) έχει υλοποιηθεί με sessions. Αν κάνω login μέσω του browser και στη συνέχεια κλείσω όλα τα παράθυρα/tabs του συγκεκριμένου browser η εφαρμογή θα με κάνει αυτόματα logout.
Οι κεφαλίδες max-age και expires χρησιμοποιούνται από τον εξυπηρετητή για να ορίσει το μέγιστο χρόνο κατά τον οποίο το αντικείμενο παραμένει έγκυρο.
Οι παροχείς περιεχομένου δεδομένων συνεχούς ροής (π.χ. video) δεν χρησιμοποιούν αντιπροσώπους με ΚΜ καθώς το μέγεθος των αρχείων είναι πολύ μεγάλο για να αποθηκευθεί σ' αυτές, κι έτσι η σύνδεση γίνεται πάντοτε με την πηγή.
Οι πελάτες έχουν τον έλεγχο του περιεχομένου στους ανάστροφους αντιπροσώπους που περιέχουν αντίγραφα ιστοτόπων
Πρωτόκολλα συνέπειας που βασίζονται στην ακύρωση απαιτούν έξτρα μνήμη στον εξυπηρετητή σε σχέση με πρωτόκολλα που βασίζονται στην επικύρωση.
Σε ένα URL http://\<host>:\<port>/\<path>?\<searchpart>, το τελευταίο συστατικό παίζει ρόλο στη δημιουργία δυναμικού περιεχομένου.
Στην διανομή αιτήσεων με Anycast, υπάρχει επιπλέον κόστος για την προώθηση μιας αίτησης σε κάθε εξυπηρετητή-αντίγραφο, καθώς πρέπει να αποφασιστεί ο προορισμός από τον δρομολογητή βάσει κριτηρίων
Στον διαφανή στατικό καθρεπτισμό, οι χρήστες γνωρίζουν την ύπαρξη των καθρεπτών και επιλέγουν αυτόν στον οποίον θέλουν να συνδεθούν.
IMG_3280.jpeg¶
Για την φόρτωση εξωτερικών πόρων σε JSON μορφή μπορεί να χρησιμοποιηθεί το XMLHTTPRequest
Για να δουλέψει σωστά μία web εφαρμογή που έχει υλοποιηθεί σε PHP αλλά συνδέεται και σε βάση δεδομένων MySQL, ο web server και ο database server δεν είναι απαραίτητο να είναι εγκατεστημένα στο ίδιο μηχάνημα, αρκεί να είναι εφικτή η επικοινωνία μεταξύ των δύο servers
Η PHP διαθέτει μηχανισμό ελέγχου της ορθότητας των MySQL queries πριν αυτά σταλούν στη βάση δεδομένων για εκτέλεση. Επομένως, αν κάποιο SQL ερώτημα έχει λάθος σύνταξη, η PHP δε θα το αποστείλει για εκτέλεση στον MySQL server
Θεωρείστε ότι έχουμε ένα PHP script το οποίο κάνει ένα INSERT σε ένα MySQL table. Το MySQL table έχει ένα πεδίο με όνομα id το οποίο είναι auto increment. Ο σωστός τρόπος ανάκτησης της τιμής του id αμέσως μετά την εκτέλεση του INSERT είναι με χρήση της συνάρτησης mysqli_insert_id ή κάποιας αντίστοιχης μεθόδου
Με την PHP, για λόγους ασφαλείας, μπορούμε να γράψουμε scripts τα οποία είτε προσθέτουν, είτε διαβάζουν δεδομένα από μία Β.Δ. (SQL εντολές INSERT και SELECT), όχι SQL εντολές τροποποίησης των δεδομένων (π.χ. DELETE ή UPDATE)
Η εκτέλεση PHP scripts είναι εφικτή μόνο σε servers με εγκατεστημένο λειτουργικό Microsoft Windows server edition
…αν μια web εφαρμογή, που έχει φτιαχτεί με χρήση PHP, θα είναι συμβατή με κινητές συσκευές, δεν εξαρτάται από την PHP αλλά από τον HTML κώδικα που ο προγραμματιστής παράγει μέσω των PHP scripts.
Η παρακάτω φόρμα στέλνει με το πάτημα του submit τα δεδομένα στο αρχείο form2.php
<form name="form1.php" method="post" action="form2.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
Θεωρείστε ότι γίνεται submit η παρακάτω φόρμα.
<form name="form1.php" method="post" action="form2.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
$username = $_GET['username '];
Στον στατικό, μη-διαφανή καθρεπτισμό, όλοι οι ιστότοποι-καθρέπτες είναι προσβάσιμοι με το ίδιο URL.
Τα πρωτόκολλα ακύρωσης εφαρμόζονται ασύγχρονα με τις αιτήσεις των πελατών.
Τα πρωτόκολλα συνέπειας που βασίζονται στην επικύρωση δημιουργούν άσκοπη/περιττή καθυστέρηση στην περίπτωση εύστοχων χτυπημάτων στην ΚΜ ενός αντιπροσώπου
Το κρύψιμο συνδέσεων συνεισφέρει, σύμφωνα με μελέτες, περισσότερο από το κρύψιμο δεδομένων στη μείωση της καθυστέρησης
Το πρωτόκολλο Piggyback Cache Validation μειώνει το κόστος περιττών εγκυροποιήσεων.
Ο παγκόσμιος ιστός δε μπορεί να χρησιμοποιηθεί για εφαρμογές που στηρίζονται σε δεδομένα [δυσανάγνωστο] κατανεμημένα σε πολλαπλούς [δυσανάγνωστο]εξυπηρετητές
[δυσανάγνωστο]ελείται από την κεφαλίδα και το σώμα, το οποίο είναι προαιρετικό για συγκεκρι[δυσανάγνωστο]
[Λείπει από τη φωτογραφία: η αρχή της τελευταίας πρότασης της σελίδας και τμήμα της μέσα στη μαύρη επικάλυψη]
Επιπλέον πηγές χωρίς μεταγραφή εδώ (λύσεις →
2025-02-b.solutions.md, ή διπλότυπες φωτογραφίες της ίδιας σελίδας):1d68383ea6043594.png,6d6f3c228f1c436b.png
Λύσεις (⚪ AI, μη επαληθευμένο)
Κατάσταση: ⚪ AI, μη επαληθευμένο Πηγή: migrated from previous_exams.md (Antigravity, 2026-10); φωτογραφίες λύσεων από το αρχείο (1d68383ea6043594.png, 6d6f3c228f1c436b.png), προέλευση άγνωστη
Προσοχή
Οι απαντήσεις 1–46 προέρχονται από το παλιό previous_exams.md (AI, χωρίς επαλήθευση)· η αρίθμηση είναι του παλιού αρχείου, επειδή η εκτυπωμένη αρίθμηση της εξέτασης δεν φαίνεται στις μεταγραφές. Η φωτογραφία 1d68383ea6043594.png αναφέρει «32)» για την πρόταση με τα 10 αντικείμενα, που στο παλιό αρχείο είναι η 25. Η πρόταση για τις 10 αιτήσεις GET (παλιό 25) έχει ΣΩΣΤΟ στο παλιό αρχείο και στη φωτογραφία 1d68383ea6043594.png, ενώ η 6d6f3c228f1c436b.png γράφει ΛΑΘΟΣ· χρειάζεται έλεγχος από το πρωτότυπο. Οι παραλλαγές IMG_3279.jpeg και IMG_3280.jpeg έχουν άλλη διατύπωση και σειρά προτάσεων (π.χ. «1,3,2,4», «$_GET», «form2.php», «Windows server edition»)· οι απαντήσεις του παλιού αρχείου αφορούν τη διατύπωση των 1b, 2b, 3b και δεν ισχύουν αυτούσιες για τις παραλλαγές. Οι δύο φωτογραφίες λύσεων διαφωνούν για την ίδια πρόταση («Μια HTTP GET αίτηση … 10 ενσωματωμένα αντικείμενα»): η 1d68383ea6043594.png γράφει «Σωστό», η 6d6f3c228f1c436b.png «Λάθος»· η πρόταση υπάρχει στη μεταγραφή της σελίδας 2 (2b2025FEB.jpg) χωρίς αρίθμηση. Η 6d6f3c228f1c436b.png έχει μορφή επεξήγησης με επικεφαλίδες και σύμβολα (❌)· η προέλευση δεν είναι γνωστή και δεν έχει επαληθευτεί.
Λύσεις — Προγραμματισμός και Συστήματα στον Παγκόσμιο Ιστό — Φεβρουάριος 2025 (Ομάδα Β)¶
Οι απαντήσεις 1–46 μεταφέρονται από το παλιό previous_exams.md και δεν έχουν επαληθευτεί· μεταφέρεται μόνο η απάντηση και η αιτιολόγηση, όχι η διατύπωση των προτάσεων. Οι φωτογραφίες λύσεων στο τέλος είναι ανεπιβεβαίωτες.
Παλιό αρχείο: 1b2025FEB.jpg (απαντήσεις 1–14)¶
1. ΛΑΘΟΣ. Το type="password" απλώς αποκρύπτει οπτικά τους χαρακτήρες (masking). Δεν παρέχει καμία κρυπτογράφηση· τα δεδομένα μεταδίδονται σε plain text εκτός αν χρησιμοποιείται HTTPS.
2. ΛΑΘΟΣ. Ο κώδικας είναι καθόλα έγκυρος. Ένα tag <a> μπορεί να περικλείει οποιοδήποτε inline ή block στοιχείο (όπως <img>) χωρίς να απαιτείται κείμενο.
3. ΣΩΣΤΟ. Ο ID selector #special εφαρμόζει το στυλ στα στοιχεία με αυτό το ID (αν και το πρότυπο HTML επιτάσσει μοναδικότητα ID ανά σελίδα).
4. ΣΩΣΤΟ. Μέσω της ετικέτας <meta name="viewport" content="width=device-width, initial-scale=1.0"> που καθορίζει την κλίμακα και το πλάτος οθόνης.
5. ΛΑΘΟΣ. Δεν είναι καλοσχηματισμένο (well-formed) επειδή δεν κλείνει η ριζική ετικέτα (λείπει το </books>).
6. ΣΩΣΤΟ. Ένα έγγραφο μπορεί να περιέχει πολλαπλά αδελφά στοιχεία με το ίδιο όνομα και namespace (π.χ. πολλαπλά <book> στοιχεία).
7. ΛΑΘΟΣ. Το XSL/XSLT περιγράφει το μετασχηματισμό και τη μορφοποίηση (styling/transformation). Τη δομή την περιγράφει το DTD ή το XML Schema (XSD).
8. ΣΩΣΤΟ. Η JavaScript είναι δυναμικά τυποποιημένη γλώσσα (dynamically/loosely typed).
9. ΣΩΣΤΟ. Τα σύγχρονα logs (1, 4) εκτελούνται πρώτα. Το setTimeout(..., 0) μπαίνει στην ουρά macrotasks και εκτελείται αμέσως μετά (3), ενώ το 2 μετά από 1 δευτερόλεπτο.
10. ΛΑΘΟΣ. Επιλέγει το πρώτο στοιχείο με ετικέτα <button>. Για επιλογή βάσει ID απαιτείται querySelector('#button').
11. ΛΑΘΟΣ. Χωρίς defer ή async, η εκτέλεση του script μπλοκάρει άμεσα την ανάλυση (parsing) του DOM.
12. ΣΩΣΤΟ. Ο βρόχος for...in διατρέχει όλα τα αριθμήσιμα κλειδιά (keys) ενός αντικειμένου.
13. ΛΑΘΟΣ. Η επίσκεψη μέσω browser στέλνει HTTP GET αίτημα. Εφόσον έχει οριστεί μόνο app.post('/', ...), θα επιστραφεί σφάλμα Cannot GET /.
14. ΣΩΣΤΟ. Τα promises ανήκουν στην ουρά microtasks, η οποία εξυπηρετείται πάντα κατά προτεραιότητα πριν από την ουρά macrotasks (task queue).
Παλιό αρχείο: 2b2025FEB.jpg (απαντήσεις 15–30)¶
15. ΣΩΣΤΟ. Το $.ajax() υποστηρίζει πλήρως ασύγχρονη φόρτωση JSON ορίζοντας dataType: 'json'.
16. ΣΩΣΤΟ. Απαιτείται πρόσβαση μέσω web server (http://localhost/...) ώστε ο διακομιστής να εκτελέσει το PHP parsing και να επιστρέψει HTML, αντί να ανοίξει ως απλό κείμενο (file:///).
17. ΛΑΘΟΣ. Στην PHP οι πίνακες είναι συσχετιστικοί και υποστηρίζουν αραιούς πίνακες (sparse arrays) χωρίς κανένα σφάλμα.
18. ΛΑΘΟΣ. Λόγω του κενού διαστήματος στο τέλος ('username '), το κλειδί δεν θα ταιριάξει με το όνομα του πεδίου ('username').
19. ΣΩΣΤΟ. Ο τελεστής συνένωσης συμβολοσειρών (.) πραγματοποιεί αυτόματη μετατροπή τύπου (type juggling).
20. ΛΑΘΟΣ. Ο PHP interpreter παράγει απλό ρεύμα κειμένου/χαρακτήρων και δεν εκτελεί σημασιολογικό έλεγχο εγκυρότητας της HTML.
21. ΣΩΣΤΟ. Υποστηρίζεται πλήρως σε όλα τα λειτουργικά συστήματα.
22. ΣΩΣΤΟ. Περιλαμβάνει Windows, Apache Web Server, MySQL Database και PHP runtime.
23. ΣΩΣΤΟ. Οι browsers δεν διαθέτουν μηχανή εκτέλεσης PHP· απαιτείται αίτηση μέσω HTTP στον Apache (http://localhost/test.php).
24. ΛΑΘΟΣ. Το μέγεθος των αντικειμένων παίζει καθοριστικό ρόλο (για πολύ μεγάλα αντικείμενα υπάρχει επιβάρυνση δικτύου/δίσκου και αντικατάστασης στην cache).
25. ΣΩΣΤΟ. Ο browser αποστέλλει ξεχωριστή αίτηση GET για κάθε επιμέρους πόρο (εικόνα, css, js).
26. ΣΩΣΤΟ. Εξαλείφει την καθυστέρηση του 3-way handshake και επιτρέπει την αποστολή πολλαπλών αιτήσεων χωρίς αναμονή της απόκρισης της προηγούμενης.
27. ΣΩΣΤΟ. Γρήγορη ευστοχία (fast hit): αντικείμενο έγκυρο εντός TTL. Αργή ευστοχία (slow hit): το TTL έληξε και απαιτείται επικύρωση (revalidation/Conditional GET).
28. ΣΩΣΤΟ. Μέσω ευρετικών μεθόδων εκτίμησης (heuristic expiration, π.χ. ποσοστό του χρόνου από το Last-Modified).
29. ΛΑΘΟΣ. Το Conditional GET (If-Modified-Since) κάνει τον έλεγχο και τη λήψη σε 1 μήνυμα (επιστρέφει 304 αν δεν άλλαξε). Η HEAD μέθοδος θα απαιτούσε 2 μηνύματα.
30. ΛΑΘΟΣ. Το DNS είναι κατανεμημένο, ιεραρχικό σύστημα παγκόσμιων εξυπηρετητών (root servers, gTLD, ccTLD, authoritative) και δεν λειτουργεί ως μονοπώλιο κρατικών υπηρεσιών.
Παλιό αρχείο: 3b2025FEB.jpg (απαντήσεις 31–46)¶
31. ΣΩΣΤΟ. Μέσω της fetch(url).then(response => response.json()).
32. ΣΩΣΤΟ. Η σύνταξη της SQL αναλύεται και εκτελείται αποκλειστικά από τον MySQL server.
33. ΛΑΘΟΣ. Επιρρεπές σε race condition ταυτόχρονων χρηστών. Ο ενδεδειγμένος τρόπος είναι η συνάρτηση mysqli_insert_id() ή $pdo->lastInsertId().
34. ΣΩΣΤΟ. Υποστηρίζονται όλες οι CRUD λειτουργίες.
35. ΛΑΘΟΣ. Εκτελείται σε Windows, macOS και Linux.
36. ΛΑΘΟΣ. Η συμβατότητα με κινητές συσκευές εξαρτάται από το frontend (HTML/CSS responsive design), όχι από το backend.
37. ΛΑΘΟΣ. Ο προορισμός καθορίζεται από το attribute action, συνεπώς αποστέλλονται στο form2.php.
38. ΛΑΘΟΣ. Τα δεδομένα φόρμας βρίσκονται στον $_POST['username'] και όχι στο $_SESSION.
39. ΣΩΣΤΟ. Τα προεπιλεγμένα cookies συνόδου (session cookies όπως το PHPSESSID) διαγράφονται αυτόματα με το κλείσιμο του περιηγητή.
40. ΣΩΣΤΟ. Καθορίζουν τη διάρκεια ζωής (freshness lifetime) στην κρυφή μνήμη (HTTP Caching).
41. ΛΑΘΟΣ. Τα video streaming CDNs χρησιμοποιούν εκτενέστατα proxy caching για video segments (HLS/DASH chunks).
42. ΛΑΘΟΣ. Οι reverse proxies ελέγχονται αποκλειστικά από τον πάροχο/διαχειριστή του συστήματος εξυπηρέτησης.
43. ΣΩΣΤΟ. Στην ακύρωση (invalidation), ο εξυπηρετητής οφείλει να διατηρεί κατάσταση (server state) με το ποιες κρυφές μνήμες έχουν αντίγραφα.
44. ΣΩΣΤΟ. Το searchpart (query string) μεταφέρει παραμέτρους για δυναμική επεξεργασία από το backend.
45. ΛΑΘΟΣ. Το Anycast αξιοποιεί την ήδη υπάρχουσα δρομολόγηση του πρωτοκόλλου BGP/IP βάσει συντομότερου μονοπατιού χωρίς πρόσθετο υπολογιστικό κόστος.
46. ΛΑΘΟΣ. Στον διαφανή (transparent) καθρεπτισμό η επιλογή γίνεται αυτόματα και αδιόρατα. Η χειροκίνητη επιλογή από τον χρήστη χαρακτηρίζει τον μη διαφανή (non-transparent) καθρεπτισμό.
1d68383ea6043594.png¶
32) Μια HTTP GET αίτηση ενός πελάτη για ένα σύνθετο ιστο-αντικείμενο με 10 ενσωματωμένα αντικείμενα θα προκαλέσει αυτόματα 10 HTTP GET αιτήσεις προς τον Server Σωστό
6d6f3c228f1c436b.png¶
Λάθος. ❌
Η HTTP GET αίτηση για ένα σύνθετο ιστο-αντικείμενο δεν προκαλεί αυτόματα 10 GET αιτήσεις προς τον server.
Ανάλυση της διαδικασίας φόρτωσης ενός σύνθετου ιστο-αντικειμένου¶
- Όταν ένας πελάτης (π.χ. browser) κάνει μία GET αίτηση για μια HTML σελίδα, λαμβάνει μόνο το αρχικό HTML.
- Το HTML μπορεί να περιέχει ενσωματωμένα αντικείμενα (π.χ. εικόνες, CSS, JavaScript, βίντεο, ανενεργά
iframe). - Ο browser είναι αυτός που δημιουργεί τις επιπλέον GET αιτήσεις για κάθε ξεχωριστό αντικείμενο που απαιτείται για την πλήρη φόρτωση της σελίδας.
- Ο web server δεν στέλνει αυτόματα τα 10 αντικείμενα. Ο browser αναλύει το HTML και ζητά όσα αντικείμενα χρειάζονται.