第一个也不用didn't,前句有明确表示过去时间的时间状语时,才用一般过去来做.
比如:He may have killed someone last year(他可能去年杀了人,时态很明显是一般过去),这个才用didn't he?
由于情态动词的影响,对过去的推测和对现在完成的推测,看起来很像,关键就要看句中有没有明确表示过去的时间状语.
像现在第一个句子,He may have killed someone(他可能曾经杀过人),用完成时态来做也说得过去.
第二个句子before明显是完成时态的标志,所以这个用has he倒没啥好说的