PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


PHP Test für Fortgeschrittene: Der Gewinner, alle Fragen und Antworten

with 16 comments

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
NameRichtige AntwortenZufallszahl RAND()
Marcel851
Martin874
Fabian Polkehn717
Fabian Schmengler763
Tobias Zander664
Robert Koch631
Russell662
Matthias Dötsch619
Christian68
Philipp682
Tim685
Andreas681
Michael649
Norbert64
Robert Lillack674
muh655
Ulf Kirsten655
H. Wiens59
Torben579
neeee571
Julian515
David Maaß564
Valentin Witt574
Christian578
Alexander Faust570
Markus514
Artem Stepin559
Marcel Koch554
Benjamin595
Thorsten512
Andrea573
Paloran528
Christian525
dennis538
Simon Lauger514
Raphael558
noreply546
Ralph Meier558
Parenko, Paul552
Sascha Tietze584
Christian Haase563
Dennis Jeschke566
Thomas Sojka540

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!!

  1. 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.
  2. 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?
  3. 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?
  4. 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.
  5. 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;
  6. 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?
  7. 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?
  8. 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.
  9. In welchem Array findet man die Anzahl der Kommandozeilen-Parameter, die auch in $argc zu finden ist?
  10. Für welche der folgenden Werte von $i ist das Ergebnis false? (bool)$i
    1. $i=-1
    2. $i=0
    3. $i=.6
    4. $i=0010
  11. Für welche der folgenden Werte von $i ist das Ergebnis false? (bool)$i
    1. $i=1
    2. $i=2
    3. $i=0x01
    4. $i=(int)“FF“
  12. Bei Benutzung eines 32bit Betriebssystems ist die größte Integerzahl (signed)
    1. 2e32 (=4294967296)
    2. 2e32-1 (=4294967295)
    3. 2e31 (=2147483648)
    4. 2e31-1 (=2147483647)
  13. Um einen SQL-Befehl an den MySQL-Server zu senden, aber noch nicht das Ergebnis zurückgeliefert zu bekommen verwendet man
    1. mysql_query($query, MYSQL_BUFFERED)
    2. mysql_query($query, MYSQL_UNBUFFERED)
    3. mysql_buffered_query($query)
    4. mysql_unbuffered_query($query)
  14. Wenn ein Object serialisiert wird, wird automatisch die folgende magische Methode aufgerufen:
    1. __serialized()
    2. __wakeup()
    3. __sleep()
    4. __serialize()
  15. Um eine Methode vor dem Überschreiben durch eine Kindklasse zu schützen stellt man man das folgende Wort voran:
    1. abstract
    2. private
    3. final
    4. protected
  16. Unter welchen Umständen ist es nicht möglich, einen Standardwert für einen Parameter festzulegen bei der Deklaration einer Funktion?
    1. Wenn der Parameter vom Typ Boolean ist
    2. Wenn die Funktion eine Methode einer Klasse ist
    3. Wenn der Parameter als Referenz übergeben wird
    4. Wenn die Funktion nur einen Parameter hat
    5. Niemals
  17. Welcher Operator muß hier eingesetzt werden damit das Ergebnis True ist wenn ENTWEDER $a ODER $b True ist, aber nicht beide? ($a ??? $b)
  18. Welche der folgenden Ausdrücke multiplizieren den Wert der Integer Variablen $a mit 4?
    1. $a *= pow(2, 1);
    2. $a >>= 2;
    3. $a <<= 2;
    4. $a += $a + $a;
  19. Wie kann in PHP4 eine Klasse automatisch bei Bedarf geladen werden (bei der ersten Benutzung)?
    1. Man nutzt die magische Methode __autoload()
    2. Man definiert die Klasse mit dem Keyword „forward“
    3. Indem man einen speziellen Error-Handler implementiert
    4. Es ist nicht möglich, Klassen bei Bedarf zu laden
    5. Man nutzt bedingte „?include()“-Statements
  20. Wie werden bei einer HTTPS-Verbindung die URL und der Query-String vom Browser an den Webserver übertragen?
    1. Sie werden automatisch verschlüsselt
    2. Sie werden beide im Klartext übertragen, die nachfolgende Transaktion wird verschlüsselt
    3. Die URL bleibt im Klartext, die GET-Parameter werden verschlüsselt
    4. Die URL wird verschlüsselt, die GET-Parameter bleiben im Klartext
    5. Um die Verschlüsselung zu gewährleisten wird der Query-String in einen HTTP-Header umgewandelt und zusammen mit den POST-Parametern verschickt
  21. Um ein Array in aufsteigender Reihenfolge zu sortieren, wobei die Key-Assoziation erhalten bleibt, nutzt man welche Funktion?
    1. ksort()
    2. asort()
    3. krsort()
    4. sort()
    5. usort()
  22. Welcher der folgenden PCRE-regulären Ausdrücke matcht am besten den String „php|Gangsta“
    1. .*
    2. …|…….
    3. \d{3}\|\d{7}
    4. [az]{3}\|[az]{7}
    5. [a-z][a-z][a-z]\|\W{7}
  23. Die ???() Funktion sorgt dafür dass ein String immer eine bestimmte Mindestlänge hat.
  24. 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‘);
    ?>
    1. Ein JPEG Bild
    2. Eine Binärdatei zur Anzeige im Browser
    3. Eine Binärdatei zum Download
    4. Ein JPEG-Bild zum Download
    5. Ein defektes Bild
  25. Welche der folgenden Email-Adressen sieht ein RFC-konformer MTA als ungültig an:
    1. andre@php.net
    2. „Andre Schulz“
    3. andré@php.net
    4. andre @ php.net
  26. MySQL: Ein ??? Statement fügt eine neue Zeile in eine existierende Tabelle.
  27. Welche der folgenden SQL-Funktion ist keine Aggregat-Funktion?
    1. AVG
    2. MIN
    3. SUM
    4. MAX
    5. CURRENT_DATE()
  28. Welcher der folgenden PHP Stream Transports ist gültig?
    1. http
    2. STDIO
    3. ftp
    4. STDOUT
    5. file
  29. Wie lautet der Parameter, um jeden Browser dazu zu zwingen, auf keinen Fall Dateien ab einer bestimmten Größe zu senden?
    1. MAXFILESIZE
    2. MAX_FILE_SIZE
    3. MAX_FILESIZE
    4. FILESIZEMAX
    5. keins von denen ist korrekt und schützt den Server
  30. 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?
    1. Einen Opcode-Cache installieren
    2. Mehr Hardware für die Webserver-Farm kaufen
    3. Mehr RAM kaufen
    4. Einen Content-Cache nutzen
  31. Welche der folgenden Schritte ist wichtig bei einem Produktions-Webserver?
    1. Abschalten des error reporting (error_reporting)
    2. Anschalten des error logging (error_logging)
    3. Abschalten des error logging (error_logging)
    4. Anschalten der Anzeigt von Fehlern (display_errors)
    5. Nutzen des @ Operators um Fehler zu unterdrücken
  32. Wofür ist ein Opcode-Cache gut?
    1. Er kompiliert Scripte in binäre Dateien, damit sie schneller ausgeführt werden können
    2. Er ersetzt die Zend Engine durch einen schnelleren Interpreter
    3. Er cacht die Script-Ausgabe für eine bessere Performance
    4. Er verbessert die Performance durch Cachen des „Intermediate Codes“ (Opcode) des Parsers
    5. Er cacht das Script im Arbeitsspeicher, dadurch entfällt das Laden von der langsamen Festplatte bei jedem Request
  33. Welcher der folgenden Fehlertypen kann nicht durch einen eigenen Error-Handler abgefangen werden?
    1. E_WARNING
    2. E_ERROR
    3. E_USER_ERROR
    4. E_NOTICE
  34. Was tut ein Profiler?
    1. Er generiert ein Profil der Script-Struktur
    2. Er transformiert ein Script in ein UML-Diagram
    3. Er errechnet die Datengröße einer Scriptausgabe wenn es durch einen Webserver ausgeführt wird
    4. Er misst die exakten Zeiten für alle Befehle und Abschnitte eines Scripts
    5. Er findet potentielle Sicherheitslücken durch das Scannen des Script auf bekannte Sicherheitslücken
  35. 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!!

  1. Composite
  2. Facade / Fassade
  3. Fluent Interface
  4. Proxy
  5. ArrayAccess
  6. MVC
  7. Dependency Injection / DI
  8. i (imagegif)
  9. $_SERVER    ($_SERVER[‚argc‘])
  10. 2
  11. 4
  12. 4
  13. 4
  14. 3
  15. 3
  16. 3
  17. xor
  18. 3
  19. 4
  20. 1
  21. 2
  22. 1
  23. str_pad
  24. 5
  25. 3
  26. INSERT / INSERT INTO
  27. 5
  28. 2
  29. 5
  30. 4
  31. 2
  32. 4
  33. 2
  34. 4
  35. Debugger

Written by Michael Kliewe

Juni 9th, 2010 at 7:14 am

Posted in Allgemein,PHP

Tagged with , , ,

16 Responses to 'PHP Test für Fortgeschrittene: Der Gewinner, alle Fragen und Antworten'

Subscribe to comments with RSS or TrackBack to 'PHP Test für Fortgeschrittene: Der Gewinner, alle Fragen und Antworten'.

  1. Ach schade, nur Platz 3 mit der Zufallszahl.
    Dennoch Glückwunsch an den Gewinner.

    stietze

    9 Jun 10 at 07:27

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. ok – dann hätte Marcel nicht nur gerne gewonnen sondern hat es auch 😉

    Benjamin

    9 Jun 10 at 15:30

  8. @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

  9. 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

  10. @Michael Danke @Marcel Bitte und viel Erfolg!

    Benjamin

    9 Jun 10 at 16:05

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. @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

Leave a Reply

You can add images to your comment by clicking here.