

So does it wait until it has found all the matches to run the command as a giant batch instead of running it as it finds matches?
Indeed. If possible, it is typically what you want (as opposed to find ... -exec ... {} \;
which runs command for each found file) since it will run faster. You want find ... -exec ... {} \;
if the command you’re executing can run on single file only or you’re dealing with legacy system without -exec ... {} +
support.
find -type f -exec chmod 644 -- {} + find -type d -exec chmod 755 -- {} +
will only affect regular files and directories. There are other type of files (specifically block and character devices, named pipes and sockets) which those two commands would leave unaffected. In practice, I suspect you don’t have any of those to worry about so you can use
-find f
.