1, GC é o quê? Por que deveria haver GC?
A: GC é um meio de coleta de lixo, gerenciamento de memória é onde os programadores propensas a problemas, e esquecer ou programa de recuperação de falsa memória vai levar à instabilidade ou até mesmo falhas do sistema, funcionalidade GC fornecido pelo Java pode monitorar automaticamente o objeto excede o alcance de modo a atingir o objectivo de recupera automaticamente a memória, a linguagem Java não fornece uma operação de método de exibição da liberação de memória alocada. programadores Java não precisa se preocupar com o gerenciamento de memória, porque o coletor de lixo será automaticamente gerenciado. Para um pedido de coleta de lixo, chame o seguinte :. System.gc () ou Runtime.getRuntime () gc (), mas pode ser mascarado JVM de lixo reciclagem de exibição chamada.
A coleta de lixo pode efetivamente evitar vazamentos de memória, uso eficiente de memória pode ser usado. coletor de lixo é geralmente como um fio de baixa prioridade separada para executar, memória heap está morto ou não usado por um longo tempo para limpar e recuperar em circunstâncias imprevisíveis, o programador não pode chamar para coletor de lixo em tempo real tudo de um objeto ou objetos para coleta de lixo. Java no início do nascimento, coleta de lixo é um dos maiores destaques de Java, porque a programação do lado do servidor necessários para efetivamente prevenir vazamentos de memória, mas as coisas mudaram, e agora coleta de lixo do Java tornou-se algo a ser criticada. IOS sistema de terminal inteligente móvel tem geralmente se sentir melhor experiência do usuário do que o sistema Android, em que uma razão profunda é que a natureza imprevisível do sistema Android de coleta de lixo.
NOTA: Há muitos, incluindo mecanismo de coleta de lixo: coleta de lixo cópia geracional, marcando coleta de lixo, coleta de lixo incremental e outros meios. Java Standard processar tanto montão pilha lá. Guardar as variáveis locais originais tipo de pilha, pilha contém o objeto a ser criado. plataforma Java para a recuperação de memória heap e reutilização do algoritmo básico é chamado de marca e varredura, mas foi melhorada Java, uma "coleta de lixo de gerações." Esta abordagem vai seguir o ciclo de vida de uma memória objeto heap Java é dividido em diferentes áreas, processo de coleta de lixo, o objeto pode mover-se para uma área diferente:
- Éden (Éden): Este é o nascimento da primeira área de alvo, e para a maioria dos objetos, este é o seu único existia na área.
- Survivors Park (sobrevivente): From the Garden of Eden sobreviveu para baixo o objeto será movido aqui.
- Lifetime Yang Garden (Tenured): Este é o destino dos sobreviventes idade suficiente para objeto. A coleção geração jovem (Minor-GC) teve> processo não vai tocar este lugar. Quando a geração mais jovem pode não objetos a cobrar para o parque curtindo a vida, ele irá acionar uma coleção completa (Major-GC), há também pode envolver a compressão, a fim de liberar espaço suficiente para objetos grandes.
Associado com parâmetros de JVM coleta de lixo:
-Xms / -Xmx - O tamanho máximo do tamanho inicial pilha / pilha
-Xmn - a geração mais jovem tamanho da pilha
XX: -DisableExplicitGC - deixe que System.gc () não tem qualquer efeito
-XX: + PrintGCDetails - GC imprimir detalhes
-XX: + PrintGCDateStamps - GC selo a operação de impressão
-XX: newSize / xx: MaxNewSize - definir novo tamanho de geração / tamanho máximo cenozoic
-XX: NewRatio - rácio geração mais velha pode ser conjunto e a nova geração
-XX: PrintTenuringDistribution - conjunto após cada nova distribuição de saída geração GC na era alvo dos sobreviventes Paraíso
XX: InitialTenuringThreshold / XX: MaxTenuringThreshold: definir o valor inicial do ano velho e o limite máximo
XX: TargetSurvivorRatio: set utilização alvo área sobreviver
2, String s = new String ( "xyz"); criou várias objeto String?
A: Os dois objetos, uma área estática de "xyz", com um novo é criado no objeto na pilha.
3, classe abstrata e diferenças de classe normais:
A: A classe contém métodos abstratos é chamado de uma classe abstrata, mas isso não significa que uma classe abstrata pode ter apenas métodos abstratos e categoria geral, como também pode ter variáveis de membro e comum método membro. Note que existem classes abstratas e classes comuns três diferenças:
1) método abstrato deve ser público ou protegido (porque se é privado, não é herdada por subclasses, subclasses não pode implementar este método), o padrão é público por padrão. .
2) Uma classe abstracta não pode ser usado para criar objectos;
3) Se uma classe herda a partir de uma classe abstracta, as subclasses da classe pai resumo deve implementar. Se a subclasse não percebe o método abstrato classe pai, também deve ser definida como uma subclasse de uma classe abstrata.
Em outros aspectos, a classe abstrata e classe normal e não há diferença
4, a interface é hereditária (estende-se) na interface? Se classe abstrata pode implementar (implementos) interfaces? Abstract classe é classe específica hereditária (classe concreta)?
Resposta: A interface pode ser herdada interfaces e suporta herança múltipla. Uma classe abstrata pode implementar (os implementos) interfaces, classes herdam a classe abstrata pode herdar determinada classe abstrata.
5, um ".java" classe se o arquivo de origem pode conter múltiplas (não uma classe interna)? Quais são os limites?
A: Sim, mas um arquivo de origem só pode ter uma classe pública (public class) e o nome do arquivo eo nome da classe deve ser totalmente consistente com a classe pública.
6, classe interna anônima (classes internas anônimas) pode herdar outras classes? Posso implementar uma interface?
A: Você pode herdar de outras classes ou implementar outras interfaces, comumente usados desta forma programação Swing e o desenvolvimento do Android para implementar ouvintes de eventos e callbacks.
7, classe interna pode referir-se aos seus membros contendo classe (fora da classe) fazer? Existe alguma restrição?
A: Um objeto classe interna pode acessar os membros fundadores de seu objeto classe externa, incluindo membros privados.
8, palavra-chave final do Java no que uso?
representação da classe não pode ser herdada; (2) métodos de modificação:: A: (1) as classes modificadores Método representação não podem ser reescritos; (3) modificação de variáveis: variáveis só podem representar uma atribuição não podem ser modificados após a (constante).
class A {
static {
System.out.print("1");
}
public A() {
System.out.print("2");
}
}
class B extends A{
static {
System.out.print("a");
}
public B() {
System.out.print("b");
}
}
public class Hello {
public static void main(String[] args) {
A ab = new B();
ab = new B();
}
}
A: Resultado da Execução: 1a2b2b. Quando você cria um construtor do objeto está chamando seqüência: membro estático inicializar e, em seguida, chamar o construtor da classe pai, membro do então initialize não-estático, e, finalmente, chamar-se construtor.
Dica: Se você não pode dar a resposta correta a esta pergunta, o que indica que a questão 21 Java mecanismo de carregamento de classe ainda não está totalmente compreendido antes, e rapidamente olhar e ver.
9, a conversão entre tipos de dados: como converter um tipo de dados primitivo corda? Como converter tipos de dados básicos de cordas?
A: O método chamando parseXXX (String) correspondentes aos tipos de embalagem ou valueOf (corda) para retornar o tipo de base correspondente de dados básicos, um método em que os tipos de dados de base e a cadeia de vazio ( "") ligado a (+), ou seja a sua sequência de caracteres correspondente é obtido, outro método é a chamar a sequência classe método valueOf () retorna uma cadeia correspondente
10, e como reverter a seqüência de substituição?
A: Muitos métodos podem escrever suas próprias implementações também pode usar métodos da string ou StringBuffer / StringBuilder em. Há um plano comum é alcançado perguntas revertendo seqüência recursiva, código da seguinte forma:
public static String reverse(String originStr) {
if(originStr == null || originStr.length() <= 1)
return originStr;
return reverse(originStr.substring(1)) + originStr.charAt(0);
}
11, como GB2312 codificado string em ISO-8859-1 string codificada?
A: O código é como se segue:
String s1 = "你好";
String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");
12, a data ea hora:
como obter a data, horas, minutos, segundos?
Como obter o número de milissegundos de pelo 00:00:00 janeiro em 1, 1970, para o presente?
Como obter o último dia de um mês?
Como formatar data?
A: Pergunta 1: Criar instância java.util.Calendar, chama seu método get () passando parâmetros diferentes para obter o valor dos corresponde parâmetros. 8 pode ser usado em Java java.time.LocalDateTimel para obter o código mostrado abaixo.
public class DateTimeTest {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
System.out.println(cal.get(Calendar.YEAR));
System.out.println(cal.get(Calendar.MONTH)); // 0 - 11
System.out.println(cal.get(Calendar.DATE));
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
System.out.println(cal.get(Calendar.MINUTE));
System.out.println(cal.get(Calendar.SECOND));
// Java 8
LocalDateTime dt = LocalDateTime.now();
System.out.println(dt.getYear());
System.out.println(dt.getMonthValue()); // 1 - 12
System.out.println(dt.getDayOfMonth());
System.out.println(dt.getHour());
System.out.println(dt.getMinute());
System.out.println(dt.getSecond());
}
}
Pergunta 2: Os seguintes métodos podem obter o número de milissegundos.
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis(); // Java 8
Problema 3: O código como mostrado abaixo.
Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH);
Pergunta 4: subclasse (por exemplo classe SimpleDateFormat) no método formato utilização java.text.DataFormat (Data) pode ser data formatada. Java 8 pode ser usado para formatar o código de data e hora java.time.format.DateTimeFormatter mostrado abaixo.
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
class DateFormatTest {
public static void main(String[] args) {
SimpleDateFormat oldFormatter = new SimpleDateFormat("yyyy/MM/dd");
Date date1 = new Date();
System.out.println(oldFormatter.format(date1));
// Java 8
DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date2 = LocalDate.now();
System.out.println(date2.format(newFormatter));
}
}
Suplementar: Data de Java e tempo API sempre foi algo a ser criticado, a fim de resolver este problema, Java 8 introduz nova data e hora API, incluindo LocalDate, LocalTime, LocalDateTime, Relógio, instantâneas outras categorias, estas classes o projeto usa o mesmo modo, por isso é design thread-safe.
13, imprima a hora ontem.
import java.util.Calendar;
class YesterdayCurrent {
public static void main(String[] args){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
System.out.println(cal.getTime());
}
}
Em Java 8, o seguinte código pode ser utilizado para atingir a mesma funcionalidade.
import java.time.LocalDateTime;
class YesterdayCurrent {
public static void main(String[] args) {
LocalDateTime today = LocalDateTime.now();
LocalDateTime yesterday = today.minusDays(1);
System.out.println(yesterday);
}
}