超细面试(妖魔鬼怪无处遁形,面试用时一个半小时)

  • 请画出线程的生命周期,并列出创建线程的方式

    线程的5种状态:新建(New),就绪(Runnable),运行(Running),阻塞(Blocked),死亡(Dead)
    
    创建方式:继承Thread  实现Runnable   实现Callable  使用Executors

    问题来了:
      1. sleep结束后进入什么状态?
      2. Runnable和Callable的区别?
      3. FutureTask是什么
      4. Executors创建的几种线程池? ThreadPoolExecutor的参数?
      

  • 请描述Synchuronized关键字,列出他常用锁。 请描叙一下Volatile和Synchronized的区别。
      Java 虚拟机中的同步(Synchronization)基于进入和退出管程(Monitor)对象实现
    
      ReentrantLock 

    区别:
    • volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取; synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
    • volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的
    • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性
    • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。
    • volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

      问题延伸:

       ReentrantLock 和 Synchuronized有什么区别?

     

  • spring中bean的生命周期和作用域
        Spring Bean 生命周期比较复杂,可以分为创建和销毁两个过程,详情自行百度。

  

  •   spring注解@Autowired,@Resource,@Qualifier
    @Autowired采取的策略为按照类型注入(ByType)。
      public class UserService {
        @Autowired
        private UserDao userDao; 
    }

    当一个类型有多个bean值的时候,会造成无法选择具体注入哪一个的情况,这个时候我们需要配合着@Qualifier使用。@Qualifier告诉spring具体去装配哪个对象。
    public class UserService {
        @Autowired
        @Qualifier(name="userDao1")    
        private UserDao userDao; 
    }

    @Resource默认按照ByName自动注入。
    public class UserService {
        @Resource  
        private UserDao userDao; 
        @Resource(name="studentDao")  
        private StudentDao studentDao; 
        @Resource(type="TeacherDao")  
        private TeacherDao teacherDao; 
        @Resource(name="manDao",type="ManDao")  
        private ManDao manDao; 
    } 

      ①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

      ②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

      ③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

      ④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。



  • 什么是事务?并发事务会引发什么问题? 列出事务隔离级别
    问题延伸:
        1.事务的底层:aop
        2.aop的底层: 动态代理
        3.spring提供了哪几种动态代理?
        4.@Transaction的默认传播行为
        5.一个用@Transaction的方法调用另一个用了@Transaction的方法,执行几次事务,怎么做能只执行一次事务
        6.try catch包裹是否能让transaction无效(差不多这个意思)
  • JVM内存模型,并描叙各自的作用
    说这是基本,就几个,肯定要知道(显而易见 我不会)


  • 快速排序 
  • 手写单例模式并调优
  • 设计秒杀系统的架构图
  • redis的持久化RDB和AOF
  • Hashmap底层和1.8之后的改变,什么是红黑树。
    实话实说,  我游戏网名:Java开发攻城狮  ,就总有人给我出问题,就有人问过我hashmap为什么起用红黑树
  • springMVC的流程
    建议就俗一点按网上的答,不然他会问你底层源码,handleMapping怎么做的,handleAdapter又怎么做的,没看过源码,老实闭嘴等下个问题。

猜你喜欢

转载自www.cnblogs.com/ityangshuai/p/11937624.html
今日推荐