This page describes how the final exam will look like. General information about grading is on a separate page.

Passing this examination is required for getting credit.

Ensure that you have uploaded your public key to your submission repository.

You can attend the exam only if you have enough points for passing the course (but we will wait with the final grade until after the last deadline, hence you can improve your grade even after passing the exam).

The final exam will take place in IMPAKT/Rotunda labs and you will be required to use the computers there. Using your own device is not possible.

During the exam you will not have access to the Internet. You will be able to use your $HOME, you will have access to our GitLab and also to the materials from the labs. Apart from that, you will have access to the local manpages and we will provide documentation of Python standard library. Using any other resources (including, but not limited to your cellphones, laptops or other on-line sources) is prohibited and will result in failing the course immediately.

There will be 4-5 small tasks to complete. Our intention is to create straightforward tasks without need for any tricks in their solution and their size is supposed to be such that us, teachers, will be able to solve each task within 2-3 minutes.

The tasks will cover the major topics of this course and we expect that you will be able prepare a skeleton of the solution for all of them. We will not require a perfect working solution for all of the tasks but we will not accept an empty solution for more than one task.

The exam will be planned for 2 hours (120 minutes). We expect that most of you will be able to complete your solutions within 30 minutes (if you spend more than 30 minutes on one task, the chances are rather big that you are doing something very wrong – do not hesitate to ask for clarification or even a little help).

While we will provide automated tests for some of the tasks, we will always check your solutions manually during the exam. We might ask you to explain your solution or fix it if it contains serious bugs.

There will be exam dates through the whole month of June. All the dates are considered equal, you do not need to select the one held by the same teacher as the one you had for your labs.

There are two tries to take this exam. Extra dates in September will be open in special cases only.

Preparing for the exam

Before coming to the exam, upload your public SSH key from IMPAKT/Rotunda machine to your submission repository as exam/lab.pub.

You will use this key to fetch the assignments so make sure you also have the private part of it.

UPDATE: you can also check that you can clone the following repository.

ssh://gitolite3@lab.d3s.mff.cuni.cz:22177/testing.git

Make sure that you can clone it from Rotunda/IMPAKT machines. That can be checked remotely too, simply SSH to Rotunda first.

The purpose of the exam is to check basic understanding of the fundamental concepts. Ideally, you should be able to come to the exam with no extra preparation – we aim to check knowledge that we hope you will remember longer than is the duration of this course.

If you want to prepare for the exam, we recommend to go through the graded tasks as the exam will look similar to these. There is also the Learning outcomes section for each lab that summarizes what you should be able to explain and do yourself. The outcomes are quite detailed but they capture the absolute minimum we hope you will take away from this course.

UPDATE: we have prepared a separate page with all learning outcomes to simplify searching which lab covered each topic.

To check that your exam/lab.pub key was recognized you can try logging to the machine lab.d3s.mff.cuni.cz as user exam on port 22177 (we update the keys every hour). You will be greeted by your GitLab login and the session will be closed.

[LOGIN@u-pl1 ~]$ ssh -p 22177 -T exam@lab.d3s.mff.cuni.cz
Hello, @LOGIN

(If it asks you for a password, your key was not recognized (see above for synchronization period). If you can log in there from your laptop, you probably pushed a wrong key to your repository.)

Example task

Write a script that prints the total size occupied by your Podman images.

Your solution can ignore the fact that because of image stacking (and thus sharing of common layers) the reported sizes might be actually bigger then the really occupied disk space. In other words, feel free to simple sum the numbers given by podman images (note that these are reported in human-readable units and differ between images).

Many podman subcommands accept a --format argument that allows the user to specify the output format. The podman subcommand --help offers a short overview of functions but the corresponding manual page podman-subcommand is much more detailed.

Print the size in megabytes (feel free to ignore any rounding issues).

Hint: podman images and podman image inspect.