Welcome to the home assignment for Embedded Linux / C++ roles at Six Robotics.
Note: Please do not share this task or your solution with anyone outside of Six Robotics.
This task is intentionally open-ended and under-specified. Do your best to solve it as intended by the author. Please document any assumptions you make and note any shortcomings in your solution.
Limit the scope of your work to approximately one evening, focusing on demonstrating your skills and versatility not only as a C++ expert, but also as well-rounded software engineer. Stubs and empty implementations can be used to speed up your work. However, ensure that your solution builds and runs.
It is not so important exactly what you implement, what we want to see is how you think and deliver as an engineer, and that we have a good foundation for technical discussion and code review in the interview.
Your task is to make a complete delivery on a project that aims to release a C++ library publicly under the MIT license.
The library should implement the tools needed to transfer data between two programs. The library should also include an example producer and a consumer binary capapable of transfering a file. The library should be event driven.
- Ease of use
- Maintainability
- Compatibility with standard features such as ranges and algorithms
- Value semantics vs pointer semantics
- Error handling (both compile-time and runtime)
- Thread safety
- Memory usage
- Performance
- Named pipe (FIFO)
- UNIX domain socket
- Shared memory
- Huge pages
- epoll / poll / select
The library should only depend on the C++ standard library, and you are free to use any version of C++ that you prefer.
Please send your solution to us as a ZIP file within 08:00 the day of the interview.
For the technical interview you will need to bring a laptop with development environment, so you can present, run and modify your assignment.
Good luck! :)