What is the difference between $\square $ and $\blacksquare $?
The difference is mainly cultural. ■ was the original symbol used by Halmos, inspired by the usage of the symbol to denote the end of a magazine article, and seems to be standard in American texts (for example, Spivak's Calculus). On the other hand, □ was pretty much universally used at my university in the UK (and is the default end-of-proof symbol in the popular
amsthm package for $\LaTeX$).
I don't know which symbol tends to be used in other cultures. There are other symbols in use, of course. QED used to be fairly standard, but is falling out of favour with the general decline in the teaching of Latin. QED was itself a translation into Latin of the Greek $OE\Delta$ that was used by mathematicians such as Euclid and Archimedes. This Wikipedia page has an interesting discussion of the ways that QED has been translated into different languages (interestingly, not including English).
I have seen other symbols used. This paper (which is famously the only PhD thesis in mathematics written by an NFL player) uses a white square with a vertical line going through it. I can't find a unicode character, so here's a screenshot from the article itself:
I already wondered about it some time ago: What is the difference between black and white square in notation?
Now I found in Mathematical Logic for Computer Science by Mordechai Ben-Ari that black square is used to indicate the end a proof and white square to indicate the end of an example/definition. That's just a convention, so it probably should be explained in the introduction to a particular book, as in this case.