Java基础面试题3

1 break continue 有什么区别?
break 可以使流程跳出 switch 语句体,也可以在循环结构终止本层循环体,从而提前结束
本层循环。
continue 作用跳过本次循环体中余下尚未执行语句,立即进行下一次循环条件判定,可以
理解为仅结束本次循环
2 String s = new String("jay"); 创了几个字符串对象?
第一次调用 new String("jay"); 时,会在堆内存中创一个字符串对象,同时在字符串常量池
中创一个对象 "jay"
第二次调用 new String("jay"); 时,只会在堆内存中创一个字符串对象,指向之前在字符串
常量池中创 jay
3 this super 关键字作用
this
对象内部指代自身引用
解决成员变量和局部变量同名问题
可以调用成员变量,不能调用局部变量
可以调用成员方法
在普通方法中可以省略 this
在静态方法当中不允许出现 this 关键字
super
调用父类 成员或者方法
调用父类构造函数 4 列举出 JAVA 6 个比较常用包
java.lang;
java.util;
java.io;
java.sql;
java.awt;
java.net;
5 同步和异步有什么区别?
同步的思想是:所有的操作都做完,才返回给用户。这样用户在线等待的时间太长,给用户
一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡
死了的感觉)。这种情况下,用户不能关闭界面,如果关闭了,即迁移程序就中断了。
异步:将用户请求放入消息队列,并反馈给用户,系统迁移程序已经启动,你可以关闭浏览
器了。然后程序再慢慢地去写入数据库去。这就是异步。但是用户没有卡死的感觉,会告诉
你,你的请求系统已经响应了。你可以关闭界面了。
6 数组和 ArrayList 转换
数组转集合: Arrays.asList()
集合转数组: 集合名 .toArray() ArrayList < String > list = ** new ** ArrayList <> ();
Collections . * addAll * ( list , ** "abc" ** , ** "def" ** );
String [] array = list . toArray ( ** new ** String [ 0 ]);
System . ** out ** . println ( Arrays . * toString * ( array ));
List < String > list1 = Arrays . * asList * ( array );
System . ** out ** . println ( list1 );
7 说下 Vector ArrayList LinkedList 联系和区别 ? 分别的使用场景
线程安全
ArrayList: 底层是数组实现,线程不安全,查询和修改非常快,但是增加和删除慢
LinkedList: 底层是双向链表,线程不安全,查询和修改速度慢,但是增加和删除
速度快
Vector: 底层是数组实现,线程安全的,操作的时候使用 synchronized 进行加锁使
用场景
使用场景:
Vector 已经很少用了
增加和删除场景多则用 LinkedList
查询和修改多则用 ArrayList
8 如果需要保证线程安全, ArrayList 应该怎么做,用有几种方式
自己写个包装类,根据业务一般是 add/update/remove 加锁
Collections.synchronizedList(new ArrayList<>()); 使用 synchronized 加锁
并发包下的 CopyOnWriteArrayList<>() ,使用 ReentrantLock 加锁 9 了解 CopyOnWriteArrayList ? Collections.synchronizedList 实现线程安全有什么区
别,使用场景是怎样的 ? CopyOnWriteArrayList: 执行修改操作,会拷贝一份新的数据 (add/set/remove) ,代价昂贵,修改好后会将
原来的集合指向新的集合来完成操作,使用 ReentrantLock 来保证不会让多个线程
同时修改
场景 : 适合读操作远大于写操作的场景 ( 读操作是不需要加锁的,直接获取,但是
删除和增加需要加锁,读多写少 )
Collections.synchronizedList:
线程安全的原因就是几乎每个方法都是使用 synchronized 加同步锁
场景 : 写操作性能比 CopyOnWriteArrayList 好,但是读操作性能并不如
CopyOnWriteArrayList
10 CopyOnWriteArrayList 的设计思想是怎样的 , 有什么缺点 ?
设计思想 : 读写分离 + 最终一致
缺点 : 内存占用问题,由于写时复制,内存里面同时存在两个对象占用的内存,如果对象大
则容易发生 YongGC FullGC

你可能感兴趣的:(java,jvm,开发语言)