Recently, I have started interviewing interns in their final semester for an internship and to my surprise I frequently encounter a lack in what I would call foundational computer science knowledge. I don't mean data structures and algorithms, but for example

* Database Systems (relational algebra, SQL)

* Concurrent Programming

* Network Programming

It seems most are exposed to them partially through project work but without the base knowledge.

Is this typical for CS undergraduate degrees because you get to pick your own classes?