Which string methods come up most often in interviews?
Both of them give you a part of a string, and both of them take a start position and an end position where the end is left out. The differences are all about how they treat negative numbers and arguments that are the wrong way round.
slice supports negative positions and counts them from the end of the string, so slice(-2) gives you the last two characters. substring does not support them. If you pass a negative number to substring, it treats it as zero.
slice gives you an empty string when the start position is after the end position. substring swaps them instead, so a start of five and an end of two gives you the characters from two up to five. That swapping behaviour is a well-known cause of confusion, because the same arguments produce completely different results in the two methods.
There is also a third member of the family, the substr method, which takes a start position and a length instead of a start position and an end position. It is an old function and it is officially deprecated, so avoid it in new code even though engines still support it.
The advice for an interview is to use slice and to keep using it. It has the easier behaviour to predict, it supports negative positions, and it is the method that the modern documentation points at. If you inherit code that uses substring, the difference only matters when the arguments are negative or the wrong way round.