- 请画出线程的生命周期,并列出创建线程的方式
线程的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又怎么做的,没看过源码,老实闭嘴等下个问题。