本帖最后由 java 于 2019-4-27 16:52 编辑
String s=new String("xyz");创建了几个String Object?二者之前的区别是什么? 两个。第一个对象是字符串常量"xyz" 第二个对象是new String("xyz")的时候产生的,在堆中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz" 另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。 ----------- //检查型异常(Checked Exception) FileNotFoundException //非检查型异常(Unchecked Exception)数组越界、访问null对象,这种错误你自己是可以避免的。编译器不会强制你检查这种异常。 -----------------
存在i+1<i的数
-------------
二分查找要求结点 ___A___。
A.有序,顺序存储
B.有序,链接存储
C.无序,顺序存储
D.无序,链接存储
[解析] 二分查找要求结点有序且顺序存储。因为查找时,是根据中间元素的位置来确定应该是在左边查找,还是在右边查找。
-------------
如果你想列出当前目录以及子目录下所有扩展名为“.txt”的文件,那么你可以使用的命令是
---------------
String是线程安全的
因为String是不可改变的,所以是线程安全的,改不了。
String 字符串常量(产生新变量 线程安全)
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
-----------------
垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收? 1、对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。 通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。 2、可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
----------------------------
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有什么区别? Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个Set是否相等。 ==比较两个变量本身的值,即两个对象在内存中的首地址是否相同。 equals()主要是比较对象中包含的值是否相同。 1、什么是Set?(what) Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。 2、如何来区分重复与否呢?(how) “ 用 iterator() 方法来区分重复与否 ”,这是在网上流传的答案,个人认为这是个错误的答案。JPI中写的很明白:“set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2 ”,由此可见回答使用equals()区分更合适。 3、为什么用equals()而不用==来区分?(why) 应该从它俩的区别谈起,==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是 对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象, 也就出现了重复元素。所以应该用equals()来判断。
-------------------
Servlet执行时一般实现哪几个方法?
答:
public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destroy()
-----------------------
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?
https://www.cnblogs.com/hongten/ ... n_java_finally.html
上图是当程序执行完finally模块后,返回到return代码块。
但是在最后的运行效果中,我们看到的结果是:1,而不是我们想象中的:2
为什么会出现这样的情况:
总结
这一个面试题,看似简单,却暗藏杀机啊!
可是说了这么多,结果就是finally在return之后执行吗?
非也,你没看见return没有真正的执行完就开始执行finally吗?并且是先执行完了finally,才执行完return,这也就很好理解java规范中的finally在return之前执行了。
不过,按如上情况,这句话应该变成这样:finally比return先执行完毕。是不是就更容易理解了呢?
也就是说,return先被执行了,执行return的时候发现有finally,于是不能那么快执行完毕return,先去执行finally,等finally执行完毕之后,return才能执行完毕。
-------------
abstract class和interface有什么区别
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
------------
怎么获取 Java 程序使用的内存?堆使用的百分比?
1、可以使用JMAP或者JStat工具查看Java内存的详细使用情况
2、也可以使用VisualGC查看内存使用情况。可视化工具。
------------
什么是线程局部变量?做例子测试threadlocal
----------------
简述synchronized和java.util.concurrent.locks.Lock的异同?
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
|