2020年Java首场面试总结

2020年Java首场面试总结

一:面试遇到的问题

1:讲一下你最近做过的项目
2:说下synchronized和lock的区别,同时说下lock内部有什么方法
3:说下Java虚拟机的内存回收算法和回收原理
4:说下MySQL的优化
5:说下MySQL的索引和索引之间的区别、索引什么时候失效
6:讲下tomcat性能调优
7:说下怎样保证单例模式的线程安全
8:说下ArrayList和LinkedList的区别
9:讲下线程池的原理和几个参数
10:开启线程你了解几种方式
11:nginx你平时都是拿来作为什么用,同时怎样保证高可用
12:怎样确定一个链表里面是否有环,同时链表的最后一个节点指向的是什么
13:讲一下你了解的dockers
14:dockers是一个微型虚拟机吗?
15:讲一下redis的数据结构类型
16:Springboot的设计原理
17:springmvc默认是单例还是多例,为什么要这么设计
18:讲一下你了解的排序算法,同时说一下他们的优缺点

二:面试的问题解答

1:讲下最近的项目

这个问题没啥好说的,只要按照平时上班怎样做的项目,就怎么说就可以了,基本问题不太大。

2:说下synchronized和lock的区别,同时说下lock内部有什么方法

区别:
  • Synchronized是关键字,内置语言实现,Lock是接口。
  • Synchronized在线程发生异常时会自动释放锁,因此不会发生异常死锁。Lock异常时不会自动释放锁,所以需要在finally中实现释放锁。
  • Lock是可以中断锁,Synchronized是非中断锁,必须等待线程执行完成释放锁。
  • Lock可以使用读锁提高多线程读效率。
lock接口内的方法:
  • // 获取锁
    void lock()

  • // 如果当前线程未被中断,则获取锁
    void lockInterruptibly()

  • // 返回绑定到此 Lock 实例的新 Condition 实例
    Condition newCondition()

  • // 仅在调用时锁为空闲状态才获取该锁
    boolean tryLock()

  • // 如果锁在给定的等待时间内空闲,并且当前线程未被中断,则获取锁
    boolean tryLock(long time, TimeUnit unit)

  • // 释放锁
    void unlock()

3:说下Java虚拟机的内存回收算法和回收原理

内存回收原理请查看

4:说下MySQL的优化

MySQL的性能优化与索引的区别请查看

5:说下MySQL的索引和索引之间的区别、索引什么时候失效

MySQL的索引和索引之间的区别、索引什么时候失效

6:讲下tomcat性能调优

tomcat性能调优

7:说下怎样保证单例模式的线程安全

单例模式的线程安全
double check

public class SingletonClass {
    
     

  private volatile static SingletonClass instance = null; 

  public static SingletonClass getInstance() {
    
     
    if (instance == null) {
    
     
      synchronized (SingletonClass.class) {
    
     
        if(instance == null) {
    
     
          instance = new SingletonClass(); 
        } 
      } 
    } 
    return instance; 
  } 

  private SingletonClass() {
    
     

  } 
    
}

8:说下ArrayList和LinkedList的区别

  1. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
  2. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  3. 理论上来说在做新增和删除操作add和remove时,LinedList比较占优势,因为ArrayList要移动数据。

9:讲下线程池的原理和几个参数

线程池的原理和几个参数的详解

10:开启线程你了解几种方式

开启线程的几种方式

11:nginx你平时都是拿来作为什么用,同时怎样保证高可用

  • nginx一般拿来作为图片服务器和负载均衡使用
  • 负载均衡采用的算法有轮询算法、加权算法
    nginx的用处和算法讲解

12:怎样确定一个链表里面是否有环,同时链表的最后一个节点指向的是什么

单向链表最后一个节点指向的为null
如何确定链表中是否有环

13:讲一下你了解的dockers

dockers容器化技术让我们在Linux上面的部署操作更加方便,不再需要去配置那些繁琐的配置文件,只需要通过镜像拉取操作就可以,然后通过dockers命令启动就可以运行,是一个集装箱应用。

14:dockers是一个微型虚拟机吗?

dockers与虚拟机的区别

15:讲一下redis的数据结构类型

redis数据结构类型

16:Springboot的设计原理

Springboot的设计原理

17:springmvc默认是单例还是多例,为什么要这么设计

springmvc默认是单例还是多例

18:讲一下你了解的排序算法,同时说一下他们的优缺点

十大排序算法

猜你喜欢

转载自blog.csdn.net/qq_37469055/article/details/105741770