Carrier frequency offset
Ok so there are a couple ways to deal with this. As you pointed out there are things like the Costas Loop and PLL but I think band edge recovery is more intuitive. You can also continually apply STFT and track the frequency offset though you have the problem of time vs frequency localization. 

I'm not an expert but I would probably square the signal and find the FFT peak, afterward I would do timing recovery and then apply decision directed feedback or a PLL after demodulation to track the remaining offset.

The band-edge filter timing recovery is pretty intuitive though fred harris derivation ignores some important things/obscures them for some reason. EX he tries to argue maximum-liklihood as a way to derive it but his derivation ignores issues like symbols not being time limited so it hides lots of stuff,