I'm not a native speaker, but I've lived in China for a good while. (In 浙江, I should note, so someone from farther north or farther south might have different but equally valid answers.) I'll try to respond to your specific questions as well as I can based on my experience. You said "say you're in high school", so I'm going to give advice that I think would be appropriate for a high schooler:
1 Addressing a friend
In my experience, friends tend to call each other by nickname, given name or full name, with a strong preference for nicknames. Sometimes the given name might be followed by 哥 or 姐, if the person is a bit older or superior in some respect.
Even now, I don't know many of my wife's friends' full names because she never says them, using nicknames instead. What method people choose sometimes depends on features of the name, as well. For example, my wife's given name is just one character, and it's not a character that sounds good when repeated, so her friends and relatives tend to call her by her full name, defaulting to that since she has no nickname and calling her just by her given name sounds weird.
2 Girlfriend
Not having been in China at the girlfriend-having age and not having eavesdropped on any young couples, I'll abstain on this one.
3 Teacher
Surname + 老师。 Can't miss with that one, though I should note that sometimes people will use the title 老师 for people who aren't actually teachers, so watch out for that.
4 Stranger
This is where it gets tricky. It depends on age and authority, and I mess up with great frequency. Here's the chart I try to keep in my head.
Parents' generation: 阿姨,叔叔
Between parents' generation and grandparents' generation: 伯伯, 嬷嬷
Grandparents generation: 爷爷,奶奶 (姥姥 up north) (I only ever really hear young kids being asked to address people in this way. I'm in my 30s, and I don't think I'd probably address a 90-year-old this way.)