准备面试五
1、volatile和synchronized的区别
1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中获取;synchronized则是锁定当前变量,只有该线程可以访问该变量,其他线程被阻塞。
2.volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、代码块和类级别的。
3.volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
4.volatile不会造成线程阻塞,synchronized可能会造成线程阻塞。
5.volatile标记的变量不会被编译器优化;synchronized标记的变量可以被优化。
6.volatile能保证数据的可见性,但不能保证数据的原子性(不能保证复合操作的原子性),synchronized即保证了数据的可见性,也保证了原子性。
2、装箱和拆箱操作发生在引用类型和值类型之间。
3、B/S(Browser/Server),浏览器/服务器程序 C/S(Client/Server),客户端/服务端,桌面应用程序
4、HTTP:超文本传输协议 FTP:文件传输协议 POP3:邮件读取协议
5、计算机保存,组织数据的方式叫做数据结构 ,Java的数据结构有哪些?
线性表(ArrayList) 链表(LinkedList) 栈(Stack) 队列(Queue)
图(Map) 树(Tree)
6、OOP面向对象编程,面向对象(万物都可以看成一个对象,把一个物体的特征抽象化)
7、类和对象的关系?
类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例。
8、什么是隐式转换,什么是显式转换
显示转换就是类型强转,把一个大类型数据强制赋值给小类型数据;
隐式转换就是大范围的变量能够接受小范围的数据;
隐式转换和显示转换就是自动类型转换和强制类型转换。
9、Java中的包装类都是那些?
byte:Byte short:Short int:Integer long:Long float:Float double:Double char:Character boolean:Boolean
10、Java反射创建对象效率高还是通过new创建对象的效率高?
通过new创建对象的效率比较高。通过反射时,先查找类资源,使用类加载器创建,过程比较繁琐,效率低。