Diferença entre o tipo genérico e o tipo curinga

Eu sou um novato em genéricos e minha pergunta é: que diferença entre duas funções:

função 1:

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

}

função 2:

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

}

Obrigado.