I will be using Javascript and Typescript as reference implementation language. This is not required. I'd highly recommend you try to implement the concepts in another language, so that you understand the concepts, not just copy the source code.
You should attempt and should be able to do all exercises not marked \*.
Exercises marked \* are a bit harder, meaning they take more time. They don't require deeper theoretical knowledge. These are optional, if you're just following along.
Exercises marked \*\* are hard and take a lot more effort and often require deeper theoretical knowledge. These are not required, and I'd recommend not spending time on these, unless you have a good idea of how to solve them and want to spent a significant amount of time solving them.