Java , C++ , etc are just tools, they are just languages.
In order to be a real computer scientist, you've gotta have a very good understanding in Data Structure and OS.
for undergrad level Data Structure:
all sorts of sorting algorithms, of course
doubly linked list, Priority Queue, different kinds of hash tables, Binary Search Tree, RB tree, AVL tree,
Memory management, for example in C++, how to overload new and delete operators.
For OS ,undergrad level:
understanding device drivers and kernel, and how they interact
interprocess communication on System V
File system organization.
all these are very basic but very important, without a sound background in these areas, you can not go too far.