With a pair of resistors, Rui Santos – from RamdomNerdTutorials fame – explains how to connect your Arduino's 5V ports to the ESP8266's 3.3V ports: level shifting, of course.
There are many ways to level shift, and Rui explains 2 of them: a pair of resistors with specific values (and he shows how to calculate them – it's easy), or a US$ 2 module you can get from eBay or your favorite dealer.
Bi-directional logic level converters are small devices that are powered from both the operating voltages and safely step down 5V signals to 3.3V AND step up 3.3V to 5V, at the same time.
Personally I prefer the modules, and always have some of them near the bench. They are usually based on MOSFETs, and are more apropriate when dealing with fast signaling.