Sounds normal although frustrating. He has tantrums because he is frustrated. He wants so much to do things and so little in his life is within his control. Things that helped us were:
1. Looking at the long term. The goal is not to have an obedient quiet child. The goal is to raise a thinking, questioning, empathetic adult. The goal is not to win. Winning implies a loser - you win, he loses - not the goal.
2. Assume positive intent. He is doing the best he can for who he is now. Not who he will be tomorrow and not who you want him to be.
3. Avoid battles when possible. They do nobody any good. He does not learn anything when you 'win'. Nor did 'winning' any of these battles help me feel good.
4. Give 2 positive choices. Giving too many choices is sometimes confusing. Giving two gives him power over his environment - 'do you want cereal or toast for breakfast?'
5. Playful parenting - make it a game - can the toothbrush talk? 'wow, DS, I really want to get those back teeth clean today, can I, can I, can I, pleeeease?'
6. Decide which issues are non-negotiable, which you have a stake in and which you don't really care about. For me non-negotiable was safety (and spitting, sorry I just couldn't handle this one), things I had a stake in would be getting him dressed so I could get to work and he could get to school, things I couldn't care less about were things like which shirt he wore.
Things that are non-negotiable are just that - he tries to run into the street, I hold his hand and say - I can't let you run into the street, a car could hit you, he loses it, I carry him inside and sit with him until he is done crying/yelling.
Things that we each have a stake in are open to discussion and problem solving. He won't put his coat on, we need to go. I say, it is cold out, he says, I don't want to put my coat on. I say ok, scoop up the coat and we go. Chances are good he will decide he wants the coat.
Things I don't care about. I say - DS it's time to get dressed - he yells, I don't want the blue shoes. I say - ok, you pick shoes, now let's get the ones you picked on.
7. The do-over - a life saver. Works best when you can see things are headed down the wrong path but before a tantrum. Goes like this - me - DS, I see you are mad about your chair being to far out - do you want to be mad or do you want to be happy? OK, would you like a do-over? Me -Wow, DS, it looks like your chair is too far from the table, would you like me to push it in or would you like to do it yourself? Then give him a hug.
Once he is having a tantrum, he is done learning for the moment. The fastest way DS got over them was to give him a hug. I personally think teaching children they cannot be mad or sad is wrong. DS is entitled to his emotions and allowed to express them as long as he is not hurting someone else. I think any learning that will occur happens after the tantrum is over anyway.
I never put him in another room because he was crying or yelling - to me that taught the lesson - 'mommy only loves you when you are nice, not when you are angry or sad.'