PHP Test für Fortgeschrittene: Der Gewinner, alle Fragen und Antworten
So, da der PHP-Test für Fortgeschrittene offiziell beendet ist werden wir nun also den Gewinner der ZCE-Praxis-Tests ermitteln. Außerdem sind hier alle Fragen (und Antworten) aufgelistet die im Test vorkommen, sodass darüber diskutiert werden kann.
Wer den Test (nochmal) machen möchte um sein PHP-Wissen zu testen kann das natürlich weiterhin tun. Ich habe die Beschränkung auf eine IP-Adresse/Cookie/Email-Adresse etc. aufgehoben, er kann also nun von jedem beliebig oft wiederholt werden. Derjenige (oder diejenige) sollte auch aufpassen beim Weiterlesen, denn unten werden die Fragen und Antworten aufgelistet.
Also, im Topf der Auslosung sind diejenigen Teilnehmer die >= 5/10 richtige Antworten beim Test gehabt haben zwischen dem 19.05. und dem 05.06.2010. Insgesamt haben 132 Personen den Test absolviert. Der folgende SQL-Befehl gibt alle Teilnehmer inklusive einer Zufallszahl aus , sodass auch gleich der Gewinner durch den SQL-Zufall bestimmt wird:
SELECT Name, CorrectAnswers, ROUND(RAND()*100) FROM QuizSession AS s LEFT JOIN QuizUser AS u ON u.UserId = s.UserId WHERE CorrectAnswers >=5 AND StartTimestamp < 1275775200 ORDER BY CorrectAnswers DESC
Name | Richtige Antworten | Zufallszahl RAND() |
---|---|---|
Marcel | 8 | 51 |
Martin | 8 | 74 |
Fabian Polkehn | 7 | 17 |
Fabian Schmengler | 7 | 63 |
Tobias Zander | 6 | 64 |
Robert Koch | 6 | 31 |
Russell | 6 | 62 |
Matthias Dötsch | 6 | 19 |
Christian | 6 | 8 |
Philipp | 6 | 82 |
Tim | 6 | 85 |
Andreas | 6 | 81 |
Michael | 6 | 49 |
Norbert | 6 | 4 |
Robert Lillack | 6 | 74 |
muh | 6 | 55 |
Ulf Kirsten | 6 | 55 |
H. Wiens | 5 | 9 |
Torben | 5 | 79 |
neeee | 5 | 71 |
Julian | 5 | 15 |
David Maaß | 5 | 64 |
Valentin Witt | 5 | 74 |
Christian | 5 | 78 |
Alexander Faust | 5 | 70 |
Markus | 5 | 14 |
Artem Stepin | 5 | 59 |
Marcel Koch | 5 | 54 |
Benjamin | 5 | 95 |
Thorsten | 5 | 12 |
Andrea | 5 | 73 |
Paloran | 5 | 28 |
Christian | 5 | 25 |
dennis | 5 | 38 |
Simon Lauger | 5 | 14 |
Raphael | 5 | 58 |
noreply | 5 | 46 |
Ralph Meier | 5 | 58 |
Parenko, Paul | 5 | 52 |
Sascha Tietze | 5 | 84 |
Christian Haase | 5 | 63 |
Dennis Jeschke | 5 | 66 |
Thomas Sojka | 5 | 40 |
Herzlichen Glückwunsch, Benjamin! Ich habe dir bereits eine Email geschrieben mit dem Zugangslink, ich hoffe dass du die Praxis-Tests gebrauchen kannst und bald von deinem erfolgreichen ZCE-Zertifikat berichten kannst.
So, nun zu den Fragen, die während meines kleinen Tests (der wie erwähnt immernoch absolviert werden kann) gestellt werden:
ACHTUNG: AB HIER FOLGEN DIE FRAGEN, WER DEN TEST NOCH MACHEN MÖCHTE SOLLTE NICHT WEITERLESEN!!
- Um eine Klasse so zu kapseln dass sie sowohl einzeln als auch „verschachtelt“ in einer Baumstruktur verwendet werden kann wird ein Pattern benutzt. Durch dieses Pattern verhält sich das Konstrukt aus mehreren Objekten genauso wie ein einzelnes Objekt, von außen sind die inneren Objekte nicht sichtbar. Alle Aktionen werden intern durch den Baum gereicht und auf jedes Element angewendet.
- Eine Funktionalität, die in mehreren Klassen verteilt ist, soll nach außen leicht und verständlich aufzurufen sein. Dazu wird ein Muster verwendet, um die Aufrufe zusammenzufassen und zu vereinfachen. Welches Muster ist gemeint?
- Um einen Programmierfluss zu ermöglichen bietet eine Klasse die Möglichkeit, Methodenaufrufe zu verketten. Beispielsweise $mann->trink($bier)->iss($schnitzel)->fahrNachHause()->gehSchlafen();
Welches Pattern wird eingesetzt? - Um ein Objekt vor falscher Benutzung zu schützen oder um gewisse Funktionalitäten zu verbieten wird häufig ein Schutz-??? implementiert. Dadurch werden einige Methoden verboten oder der Zugriff beschränkt.
- Mit Hilfe des gesuchten Interfaces lassen sich Klassen so erweitern dass man sie wie ein Array behandeln kann. Dadurch wird soetwas möglich:
$object[$index] = $value; - Ein bekanntes Design Pattern wird heutzutage häufig verwendet um Anwendungen in 3 große Teile zu teilen: Datenhaltung, Businesslogik und Präsentationsschicht. Wie lautet die bekannte 3-buchstabige Abkürzung?
- Um Abhängigkeiten in einem System zu minimieren wird dieses Pattern häufig benutzt. Damit eine Klasse A möglichst lose mit anderen Klassen B und C zusammenhängt, die sie aber zur Erledigung ihrer Funktionalität benötigt, werden diese benötigten Objekte b und c nicht innerhalb des Konstruktors von A erstellt sondern an diesen übergeben (oder über entsprechende Setter). Wie lautet das gesuchte Design Pattern?
- Um ein Bild, welches mittels imagecreate() erstellt wurde, als GIF an den Browser zu senden oder in eine Datei zu schreiben wird die gesuchte Funktion verwendet. Nenne den 7. Buchstaben.
- In welchem Array findet man die Anzahl der Kommandozeilen-Parameter, die auch in $argc zu finden ist?
- Für welche der folgenden Werte von $i ist das Ergebnis false? (bool)$i
- $i=-1
- $i=0
- $i=.6
- $i=0010
- Für welche der folgenden Werte von $i ist das Ergebnis false? (bool)$i
- $i=1
- $i=2
- $i=0x01
- $i=(int)“FF“
- Bei Benutzung eines 32bit Betriebssystems ist die größte Integerzahl (signed)
- 2e32 (=4294967296)
- 2e32-1 (=4294967295)
- 2e31 (=2147483648)
- 2e31-1 (=2147483647)
- Um einen SQL-Befehl an den MySQL-Server zu senden, aber noch nicht das Ergebnis zurückgeliefert zu bekommen verwendet man
- mysql_query($query, MYSQL_BUFFERED)
- mysql_query($query, MYSQL_UNBUFFERED)
- mysql_buffered_query($query)
- mysql_unbuffered_query($query)
- Wenn ein Object serialisiert wird, wird automatisch die folgende magische Methode aufgerufen:
- __serialized()
- __wakeup()
- __sleep()
- __serialize()
- Um eine Methode vor dem Überschreiben durch eine Kindklasse zu schützen stellt man man das folgende Wort voran:
- abstract
- private
- final
- protected
- Unter welchen Umständen ist es nicht möglich, einen Standardwert für einen Parameter festzulegen bei der Deklaration einer Funktion?
- Wenn der Parameter vom Typ Boolean ist
- Wenn die Funktion eine Methode einer Klasse ist
- Wenn der Parameter als Referenz übergeben wird
- Wenn die Funktion nur einen Parameter hat
- Niemals
- Welcher Operator muß hier eingesetzt werden damit das Ergebnis True ist wenn ENTWEDER $a ODER $b True ist, aber nicht beide? ($a ??? $b)
- Welche der folgenden Ausdrücke multiplizieren den Wert der Integer Variablen $a mit 4?
- $a *= pow(2, 1);
- $a >>= 2;
- $a <<= 2;
- $a += $a + $a;
- Wie kann in PHP4 eine Klasse automatisch bei Bedarf geladen werden (bei der ersten Benutzung)?
- Man nutzt die magische Methode __autoload()
- Man definiert die Klasse mit dem Keyword „forward“
- Indem man einen speziellen Error-Handler implementiert
- Es ist nicht möglich, Klassen bei Bedarf zu laden
- Man nutzt bedingte „?include()“-Statements
- Wie werden bei einer HTTPS-Verbindung die URL und der Query-String vom Browser an den Webserver übertragen?
- Sie werden automatisch verschlüsselt
- Sie werden beide im Klartext übertragen, die nachfolgende Transaktion wird verschlüsselt
- Die URL bleibt im Klartext, die GET-Parameter werden verschlüsselt
- Die URL wird verschlüsselt, die GET-Parameter bleiben im Klartext
- Um die Verschlüsselung zu gewährleisten wird der Query-String in einen HTTP-Header umgewandelt und zusammen mit den POST-Parametern verschickt
- Um ein Array in aufsteigender Reihenfolge zu sortieren, wobei die Key-Assoziation erhalten bleibt, nutzt man welche Funktion?
- ksort()
- asort()
- krsort()
- sort()
- usort()
- Welcher der folgenden PCRE-regulären Ausdrücke matcht am besten den String „php|Gangsta“
- .*
- …|…….
- \d{3}\|\d{7}
- [az]{3}\|[az]{7}
- [a-z][a-z][a-z]\|\W{7}
- Die ???() Funktion sorgt dafür dass ein String immer eine bestimmte Mindestlänge hat.
- Wenn das folgende Script in einem Browser aufgerufen wird (Annahme: image.jpg existiert), was „sieht“ der User?
<?
header(‚Content-type: image/jpeg‘);
?>
<?
readfile(‚image.jpg‘);
?>- Ein JPEG Bild
- Eine Binärdatei zur Anzeige im Browser
- Eine Binärdatei zum Download
- Ein JPEG-Bild zum Download
- Ein defektes Bild
- Welche der folgenden Email-Adressen sieht ein RFC-konformer MTA als ungültig an:
- andre@php.net
- „Andre Schulz“
- andré@php.net
- andre @ php.net
- MySQL: Ein ??? Statement fügt eine neue Zeile in eine existierende Tabelle.
- Welche der folgenden SQL-Funktion ist keine Aggregat-Funktion?
- AVG
- MIN
- SUM
- MAX
- CURRENT_DATE()
- Welcher der folgenden PHP Stream Transports ist gültig?
- http
- STDIO
- ftp
- STDOUT
- file
- Wie lautet der Parameter, um jeden Browser dazu zu zwingen, auf keinen Fall Dateien ab einer bestimmten Größe zu senden?
- MAXFILESIZE
- MAX_FILE_SIZE
- MAX_FILESIZE
- FILESIZEMAX
- keins von denen ist korrekt und schützt den Server
- Welche der folgenden Maßnahmen sollte man einsetzen wenn man ein Performance-Problem hat, weil der Download von Daten eines entfernten Systems, das nicht unter eigener Kontrolle steht, sehr lang dauert?
- Einen Opcode-Cache installieren
- Mehr Hardware für die Webserver-Farm kaufen
- Mehr RAM kaufen
- Einen Content-Cache nutzen
- Welche der folgenden Schritte ist wichtig bei einem Produktions-Webserver?
- Abschalten des error reporting (error_reporting)
- Anschalten des error logging (error_logging)
- Abschalten des error logging (error_logging)
- Anschalten der Anzeigt von Fehlern (display_errors)
- Nutzen des @ Operators um Fehler zu unterdrücken
- Wofür ist ein Opcode-Cache gut?
- Er kompiliert Scripte in binäre Dateien, damit sie schneller ausgeführt werden können
- Er ersetzt die Zend Engine durch einen schnelleren Interpreter
- Er cacht die Script-Ausgabe für eine bessere Performance
- Er verbessert die Performance durch Cachen des „Intermediate Codes“ (Opcode) des Parsers
- Er cacht das Script im Arbeitsspeicher, dadurch entfällt das Laden von der langsamen Festplatte bei jedem Request
- Welcher der folgenden Fehlertypen kann nicht durch einen eigenen Error-Handler abgefangen werden?
- E_WARNING
- E_ERROR
- E_USER_ERROR
- E_NOTICE
- Was tut ein Profiler?
- Er generiert ein Profil der Script-Struktur
- Er transformiert ein Script in ein UML-Diagram
- Er errechnet die Datengröße einer Scriptausgabe wenn es durch einen Webserver ausgeführt wird
- Er misst die exakten Zeiten für alle Befehle und Abschnitte eines Scripts
- Er findet potentielle Sicherheitslücken durch das Scannen des Script auf bekannte Sicherheitslücken
- Mit einem ??? kann man Bugs identifizieren und beheben indem man durch den Sourcecode „steppt“.
So, das waren alle Fragen. Jetzt dürft ihr die richtigen Lösungen in den Kommentaren nennen, ich liste sie dann hier oben auf wenn sie korrekt sind. Wenn Fragen zu leicht oder zu schwer sind könnt ihr das auch sagen, dann passe ich den Test bald noch etwas an für diejenigen die ihn noch machen wollen.
ACHTUNG: AB HIER FOLGEN DIE ANTWORTEN, WER DEN TEST NOCH MACHEN MÖCHTE SOLLTE NICHT WEITERLESEN!!
- Composite
- Facade / Fassade
- Fluent Interface
- Proxy
- ArrayAccess
- MVC
- Dependency Injection / DI
- i (imagegif)
- $_SERVER ($_SERVER[‚argc‘])
- 2
- 4
- 4
- 4
- 3
- 3
- 3
- xor
- 3
- 4
- 1
- 2
- 1
- str_pad
- 5
- 3
- INSERT / INSERT INTO
- 5
- 2
- 5
- 4
- 2
- 4
- 2
- 4
- Debugger
Ach schade, nur Platz 3 mit der Zufallszahl.
Dennoch Glückwunsch an den Gewinner.
stietze
9 Jun 10 at 07:27
3: Chaining Pattern
5: ArrayAccess (http://de2.php.net/manual/de/class.arrayaccess.php)
6: MVC (Model-View-Controller)
Fabian
9 Jun 10 at 08:23
Argh 🙁
Steh ganz oben auf der liste ( was ich niemals gedacht hätte ) aber die Zufallszahlen haben entschieden.
So kann es gehen 🙂
Marcel
9 Jun 10 at 12:32
wow – Danke!:-)
Aber ich finde Marcel und Martin haben es mehr verdient! Daher würde ich das ganze gerne an Martin – sorry @Marcel – weiter verschenken!
Benjamin
9 Jun 10 at 15:02
Bei Frage 32 ist wohl ein Copy&Paste-Fehler unterlaufen? Es scheint, dass Frage 32 eine der Antworten aus Frage 31 ist.
Fabian
9 Jun 10 at 15:25
Ums Verdienen geht’s hier doch nicht – sondern wer’s dringender nötig hat 😀 😀 – nee, Quatsch – ich hatte zugegebenermaßen auch etwas Glück mit meinen Fragen, wenn ich mir die anderen da oben so ansehe.
Ich habe keine Bestrebungen, die Zertifizierung zu machen, daher danke für das Angebot. Da Marcel schon zu verstehen gegeben hat, dass er gern gewonnen hätte, gib die Tests doch einfach ihm 😉
Martin
9 Jun 10 at 15:26
ok – dann hätte Marcel nicht nur gerne gewonnen sondern hat es auch 😉
Benjamin
9 Jun 10 at 15:30
@Fabian: Chaining (Method Chaining) ist die Technik, die verwendet wird, das Pattern heißt „Fluent Interface“. Zumindestens wenn ich das richtig verstanden habe (und Wikipedia nennt das Pattern auch Fluent Interface)
Du hast Recht, habe den Fehler berichtigt.
@Marcel @Benjamin: Habe den Link an Marcel geschickt.
Michael Kliewe
9 Jun 10 at 15:42
Sehr nett von euch allen 🙂
Tut sich hoffentlich sehr Gut zu meiner Ausbildung 🙂
Danke nochmal an Benjamin, Martin und natürlich Michael
Marcel
9 Jun 10 at 15:43
@Michael Danke @Marcel Bitte und viel Erfolg!
Benjamin
9 Jun 10 at 16:05
Ach schade, ich dachte du löst den Test auf. 🙁 Werde ein paar Antworten posten sobald ich Zeit habe, will mich ja auch nicht zu sehr blamieren! 😉
Glückwunsch an den gewinner und Dank an Michael für das coole Quiz!
Ulf
9 Jun 10 at 17:08
Wenn ich mich recht erinnere, hatte ich so eine sinnfreie Frage über den @ Operator, für die irgendwie keine Antwort gepasst hat… Aber solch eine Frage seh ich hier nirgens?
Tharos
9 Jun 10 at 18:22
Das war wohl die besagte Frage 32, siehe Fabians Kommentar oben, da habe ich wohl beim Eintragen der Fragen in die Datenbank einen Copy&Paste Fehler gemacht, die Frage hieß fälschlicherweise „Nutzen des @ Operators um Fehler zu unterdrücken“, was ja die letzte Antwort von Frage 31 ist. Habe das aber nun auch in der Datenbank geändert, sorry dafür.
Michael Kliewe
9 Jun 10 at 18:33
ah, ok, mit dieser Fragestellung macht die Frage auch eher Sinn. Wenn dann 4 die richtige Antwort ist, kann ich Gedanken meine Punktzahl um eins erhöhen 🙂
Tharos
9 Jun 10 at 18:40
Hi Michael!
Sorry das ich hier nochmal den alten Post hier hochkrame, muss aber sein. Kannst du eine Liste mit allen richtigen Antworten veröffentlichen? Oder mir Notfalls per Mail zukommen lassen?
Wäre klasse, weil ein paar Antworten weiß ich bis heute noch nicht. Dankeschön. 🙂
Gruß, Simon
Simon
30 Sep 10 at 19:43
@Simon: Habe nun alle Ergebnisse in die Liste eingetragen. Falls Fehler drin sind bitte Bescheid sagen, ich übernehm keine Garantie für die 100%ige Korrektheit 😉
Michael Kliewe
1 Okt 10 at 20:04