To address the gaps, my suggestion would be to utilize a sphere with the same radius as the cylinders placed at the point where they intersect.
Make sure to adjust the height and width segment counts to match those of the cylinders for a seamless look.
The areas not filling the gap will remain hidden within the cylinders, out of sight.
If you're concerned about keeping vertex count low, consider using the theta parameters on the Sphere Geometry to generate only the necessary parts to fill the gap.
Check out this documentation for more information.
On the other hand, if your goal is to create a curved object with a circular cross-section, you could opt to exclude the cylinders entirely and instead extrude a circle along a curve to achieve the desired shape.
Explore this link for further details.
You may find this example helpful as well.