1 什么是分布式锁?
在单机应用中,多个线程同时访问同个资源时,为了保证数据不混乱,这时候就会使用到锁用来保证数据的同步。但是在分布式的应用中却无法做到,因为分布式应用线程可能会在不同服务器的jvm里面,无法使用jvm自带的锁。
通常有三种实现分布式锁的方法,分别是利用数据库实现、利用redis缓存实现和利用zookeeper实现。
2 maven生命周期
- clean,清除原本的构建信息
- validate,验证,验证项目是否正确,是否缺少必要信息
- compile,编译
- test,测试, 使用单元测试框架运行测试
- package,打包,打包生成对应的jar包或者war包
- install,安装,将打包的项目推到本地仓库中,以供给其他项目使用
- deploy,部署,将打包的项目推送到远程仓库中,以供给其他开发人员使用
3 为什么线程执行要调用start而不是直接run
(直接run,跟普通方法没 什么区别,先调start,run才会作为一个线程方法运行)
start方法相当于把线程放到等待队列中去,等待CPU调用,而run方法只是相当于一个不同的方法,相当于直接运行相关的代码。
多线程本质上讲是分时利用cpu,以达到宏观上的并行。
4 IO 会阻塞吗?readLine 是不是阻塞的?
IO分为了阻塞IO和非阻塞IO,常见的阻塞IO有socket,非阻塞IO则有NIO。
使用readLine()时程序会一直阻塞到接收到换行符或回车符为止,如果没有收到换行符客户端那边就被close或者发生异常时,那么readLine()的结果就会是null。