Value Transmitter: die Aufgabe eines Jobinterviews

Ein typischer Einstellungstest, der mir neulich begegnet ist: Von einem Producer werden Messwerte (Sekunden) mit einem Timestamp des Ist-Zeitpunktes erzeugt. Diese werden von einem Sender/Empfänger Paar über Sockets an einen Consumer übertragen.
Dort werden sie in übersichtlicher Form dargestellt.

Development Guidelines:

  • Die Verwendung von C++ Standards, C11 und neuer
  • Die Implementierung soll eine Linux und Windows Plattform abdecken
  • Das Build System für die gesamte Anwendung ist CMake
  • Die gesamte Anwendung verfügt über Unit Tests die mit google test zu erstellen sind
  • Die Versionsverwaltung git ist zu verwenden
  • Eine Dokumentation des Anwendungsentwurfs ist verfügbar
  • Die Übertragung kann von Sockets auf andere Mechanismen (Shared File) umgestellt werden. Der Impact auf die Anwendung soll begrenzt sein.

Design:

Der Testfall wurde als Statemachine umgesetzt. Aus den Anforderungen lässt sich eine Klassenhierarchy abeiten: ‚producer‘ und  ‚consumer‘  von ‚basicvalues‘, die mittels des ‚transmitters‘ übertragen werden. ‚transmitter‘ ist eine abstrakte Klasse, um flexibel bei der Übertragungsart zu bleiben, die konkrete Umsetzung im Testfall nutzt TCP-Sockets. Für diese werden zur Sicherung der Plattformunabhängigkeit die Wrapperklassen ‚tcpsocket´ und ’sockwrp‘ verrwendetn, die Implementierung des plattformspezifischen Netzwerkcodes findet sich in den Klassen ’sockwin‘ und ’socklin‘.