This is one of the "standard results" of linear algebra.
For a hermitian operator H, eigenvectors with different eigenvalues
are always orthogonal, while for any eigenvectors with the same eigenvalue
we can use Graham-Schmidt to find an orthogonal basis of the subspace.
Here are some proofs. I don't feel like tex'ing my answers so
I didn't use dirac notation.
H is hermitian if (Y,H.X) =(H.Y,X) for all vectors X,Y
[and (,) is an inner-product s.t. (X,Y) = (Y,X)* {complex conjugate},
and (X, aY) = a(X,Y) {for a scalar a}, so that together we get
(aY,X) = (X,aY)* = (a(X,Y))* = a*(X,Y)*=a*(Y,X), and
i will use H.X to mean H(X) {ie the operator acting on x}]
Let H be a hermitian operator
claim 1 (eigenvals are real)
s'pose X is an eigenvector of H with eigenvalue x so that H.X = xX
then x is real. Since (X,H.X) = (X,xX) = x(X,X) on one hand
on the other (X,H.X)=(H.X,X) = (xX,X) = x*(X,X) on the other.
claim 2 (eigenvectors with different eigenvalues are orthogonal)
let X,Y be eigenvectors of H with eigenvals x,y respectively
and suppose they are different eigenvals.
Then (Y,H.X) = (Y, xX) = x(Y,X)
and also (Y, H.X) = (H.Y, X) = (yY, X) = y(Y,X)
subtracting these we get
(x-y)(Y,X) = 0
and since x-y isn't 0 we have (Y,X)=0.
claim 3. (eigenspaces)
all vectors that have the same eigenvalue of H form a subspace.
pf. check vector space properties . only interesting one is closure
let H.X = xX and H.Y = xY be two vectors
then H.(aX +bY)= aH.X + bH.Y = axX+bxY = x(aX + bY).
thus we can use Graham Schmidt to orthogonalize any basis of
the subspace.