Multiple Holes On surface
You could do it with several arrays of cylinder that you use as booleans. Give your cylinder as many vertices as you want (16, 32...). Use the floor topology to precisely set the offset value of the array:

Once you apply, shade smooth the object, and auto-smooth: