Java notas de estudio entrevista SE-

Entrevista técnico - Java SE

  • Antecedentes : Algunos estudiantes no encontraron la oferta
  1. Su propia falta de base de conocimientos

  2. Preparación bien, pero todavía no se encontró la oferta

  • Habilidades de entrevista (enfoque), el código explican
    las posiciones de selección 10, 50 personas: 10 + 40
    no se destaca

Asunto: movimiento sorpresa

1. contra de todos los candidatos y estereotipado

acumulación: 阿里巴巴 编程规范 《effective java》

2. La oposición y todos "libro-entrevista" estereotipado

Sugerencias : Mire en el libro de título , no se ven en la respuesta (escribir su propia respuesta)

Mira Título + GitHub / saber casi / blog

  • la comunicación entre hilos wait (), notify () / notify ()

Semáforo, Google guayaba Monitor de biblioteca

public class MonitorDemo {
    private LinkedList<Integer> buffer= new LinkedList<>() ;
    private static final int MAX = 10 ;
    //记录生产的数据编号
    private static AtomicInteger count = new AtomicInteger(0) ;
    //int i ;  i++ ;非原子性操作 ;  i++ 拆分成多行 ;线程安全问题
    private Monitor monitor = new Monitor() ;

    //生产数据
    public void produce(int value){
        try {
            //enterWhen:相当于加锁
            monitor.enterWhen( monitor.newGuard(  ()->  buffer.size()<MAX        )    ) ;
            buffer.addLast( value);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }finally{
            monitor.leave();
            System.out.println("生产完毕,缓冲区大小:" + buffer.size());
        }
    }

    //消费数据
    public int consume(){
        try {
            monitor.enterWhen(  monitor.newGuard(  ()-> ! buffer.isEmpty()      )      );
           return  buffer.removeFirst()  ;
        } catch (InterruptedException e) {
            e.printStackTrace();
            throw new RuntimeException(e) ;
        }finally {
            monitor.leave();
            System.out.println("消费完毕,缓冲区大小:" + buffer.size());
        }
    }

    public static void main(String[] args) {
        MonitorDemo demo = new MonitorDemo() ;

        ExecutorService executorService = Executors.newFixedThreadPool(6);
        //将线程池包装
        ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(executorService);
        //向线程池放入3个生产者

        for(int i=0;i<3;i++){
            listeningExecutorService.submit( () ->{
                while(true){
                  int result =   count.getAndIncrement(); //i++  0  1  2
                  demo.produce( result );
                    System.out.println("生产:"+ result);
                }

            }          ) ;
        }
        //向线程池放入3个消费者
        for(int i=0;i<3;i++){
            while(true){
               int result =  demo.consume() ;
                System.out.println("消费" +result);
            }
        }

        ArrayList list = new ArrayList() ;
        list.add("a") ;
    }
}

3. La resolución de problemas a nivel de fuente

  • Surge un problema? Baidu, Google, piden al maestro.

  • El entrevistador le pregunta: Por favor charla sobre la capacidad de almacenamiento de cómo ArrayList?

  • Leí por primera vez (ver el blog, documentos), por encima de su fondo es una matriz dinámica, si se determina que la expansión completa y automática de 1,5 en el add (). También he revisado el código fuente se verificó y se encontró que en array plena expansión, y por el desplazamiento de la expansión del operador.

int newCapacity = oldCapacity + (oldCapacity >> 1);

4. encontrar la oportunidad para mostrar las habilidades

Toda persona tiene alguna experiencia única, para encontrar una manera de decirle al entrevistador durante la entrevista.

"Hablar de su propia experiencia del proyecto," las tensiones proyectan, cuando termine de añadir: Estoy haciendo este proyecto y que habían encontrado un error, entonces ArrayList.asList () devuelve una lista, a continuación, mediante la lectura del código fuente encuentra en la lista devuelta eso no es una colección de listas.

Los puntos muestran por comparación

  • clase de optimización (JVM, la optimización de SQL)

  • JVM optimización: 1:00 acabado el proyecto, que lleva a cabo una prueba de esfuerzo con jmeter encontró que el tiempo de respuesta es demasiado lenta (o de utilización de la memoria es demasiado alto), entonces jvisualvm que analizó el caso de la memoria de la JVM. Después del análisis, se encuentran, además, que muchos proyectos en objetos pequeños, y encontraron que estos pequeños objetos son relativamente corto ciclo de vida de un objeto. Entonces creo que, probablemente, porque el objeto es demasiado corto, lo que resulta en una falta de capacidad de pila nueva generación, lo que permite objetos mucho más cortos para escapar de la vieja era. Como resultado, la nueva generación y la vieja era de los objetos son muchas, se acelerará la recuperación de la frecuencia de GC, lo que reduce el rendimiento del sistema. En este sentido, manipuló la nueva generación de tamaño de la memoria, y aumentar el umbral de la nueva generación de vejez de escape. Después de volver a probar, nos encontramos con una gran cantidad de funcionamiento sin problemas.

PD: sólo un poco más de 200 palabras, decirle al entrevistador que tiene un buen hábito de pruebas de rendimiento, va a identificar problemas, analizar los problemas, y la voluntad de sintonía JVM!

  • Cuando el proyecto terminó, tuve una prueba de esfuerzo con jmeter, y se encontró que el tiempo de respuesta es demasiado lenta. Luego utiliza la herramienta para encontrar mysqldumslow al proyecto de ejecución de tiempo más largo que la instrucción SQL, así que supongo que es demasiado baja el rendimiento de SQL arrastrado todo el sistema. Entonces les explico a ver el plan de ejecución de SQL y se encontró que esto no hizo índice de SQL escritura y una mesa impulsada gran mesa pequeña, es particularmente lento. Después de eso, voy a darle vuelta donde consultar campos, además de un índice, y en lugar de una pequeña mesa de tablas. A continuación, prueba de nuevo, el tiempo de respuesta se acorta mucho.

PD: Este es el punto de la serie "optimización de SQL", el proceso específico es: Posicionamiento lenta SQL-> consulta SQL de ejecución utilizando explicar los planes para SQL analizar razones de la lenta aplicación -> optimización de SQL. Lo anterior "pequeña mesa grande basada en tablas" y similares es la optimización de SQL plazo.

  • tipo de algoritmo: algoritmos de cadena (el algoritmo KMP)

6. precipitación Técnica

Los datos apoyan: GitHub, blogs, columnas, número público de micro-canales, para liberar proyecto Ali nube

7. El fabricante de diferencia

murciélago, el grupo estadounidense, byte movilizarse, Google facebook

Las estructuras de datos y algoritmos, el sistema operativo de red, patrones de diseño, distribuido, el pensamiento lógico (8 + 11)?

8. Construcción de la mente

Respondió correctamente, pero el entrevistador era "negativo"

  1. La respuesta del libro entrevista, estereotipado

  2. El entrevistador sí mismo en la tecnología de demostración, cambie su actitud, que no están sujetos a la interferencia.
    Normal Entrevistador: Su guía para responder, y no tratar de asustar
    no ha utilizado la lista de los que subclase común ?? Matriz? Expansión dinámica, no fuera de los límites?

  3. Si se le pide que no lo hará? Asegúrese de conocer el resultado de sus propias ideas / Un marco similar, aunque no se utiliza este nuevo marco, pero he utilizado productos similares, y creen que son casi lo mismo, y luego responder a la realización del principio de productos similares.

mybatis \ APP

Nuevo marco DAO? La asignación del archivo / NOTA: La clase de entidad - mesa, entonces la trama en sí es la API de porquería ...

MQ: rabitmq rocketmq kafka \ 新 MQ

Publicado 41 artículos originales · ganado elogios 1 · visitas 548

Supongo que te gusta

Origin blog.csdn.net/qq_41620020/article/details/105165835
Recomendado
Clasificación