When I was in China, I heard people using 不好意思 to apologize casually. I also heard the expression 对不住 in TV series and movies. Is there any differences?
对不起(*): Sorry/Excuse me
对不住: Ditto (colloquial). I'd assume it is mainly used by northern Chinese
不好意思(*): Excuse me (colloquial)
* Other meanings exist in different contexts, e.g. 对不起=let somebody down, 不好意思=be embarrassed, etc.
I am not a linguist, so I will just speak my mind. There's not too much difference between
对不住 is more formal, it often means does not live up to someone's expectations.
I may be wrong, but I always equated 对不住 with 辜负. As some of the above posters have said, 对不起 is a little bit formal, and, at least in my experience, not used too often. 不好意思 is what you generally hear. When I was living in mainland China, it seemed rare to hear 对不起, especially among friends. My Chinese friends often thought it was strange when I would say sorry to them, as we were friends and that formality seemed to put an unnecessary distance between us. It seemed to be the same for 谢谢.
I'll draw some comparisons with Japanese.
不好意思 is similar to Sumimasen （すみません), which means excuse me/sorry, depending on context. It's a more lighter version of 对不起.
对不起 is more similar to Gomenasai, which is very deep, like if you did something wrong that you really regret and wish you can undo the mistake.
Examples: 不好意思, 我们的面了卖完了。(Sorry, but our noodles are sold out.) (More formal in this sentence) 对不起, 我们的面了卖完了。(Sorry, but our noodles are sold out.) (More informal but usable.) 对不起, 我错了. (I'm sorry, it's my fault.)
对不起 More formal，对不住 and 不好意思 colloquial。不好意思 is a polysemy word,means shy
对不起: Literally means "can't make it right". Carries the connotation of being in the wrong.
不好意思: Means something like, "that was bad". Describes the action more than the character of the one saying it.