Diferencia entre tipo genérico y tipo comodín

Soy un novato en genéricos y mi pregunta es: ¿qué diferencia hay entre dos funciones:

función 1:

public static <E> void funct1  (List<E> list1) {

}

función 2:

public static void funct2(List<?> list) {

}

Gracias.