What’s the difference between 善于 vs 擅长
善于 = good at (general)
擅长 = skilled in/ good at (specific)

Example:
善于交際 - good at socializing (O)
擅长交際 - skilled in socializing (O)
~
善于打网球 - good at playing tennis (O)
擅长打网球 - skilled in playing tennis (O)
~
善于反手削球 - good at backhand slice (X) (too specific)
擅长反手削球 - skilled in backhand slice (a specific tennis technique) (O)
A more detailed example:

他擅长用斧頭在米粒上刻字 - He is good at lettering on rice grains with an axe
This skill is too specific to use 善于
善于用斧頭 or 善于刻字 would be fine.