java笔试常见知识(笔试)

1.java是由什么语言改进而重新设计的

C++

2.懒汉模式下的单例填空

就是进行加锁操作,synchronized
synchronized (LazySingleton.class){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}

3.GC回收机制,怎么回收,什么时候回收?

判断是否为垃圾的算法
引用计数算法
当有一个地方引用它时,计数器+1;引用失效时。计数器-1;当计数值为0时,表示对象不可能再被引用。

根可达算法
用于解决通过引用计数法无法找到,循环引用的垃圾对象的问题。

回收算法
标记清除算法
就是将可回收的垃圾对象进行标记定位,清除被标记的对象即可,将垃圾位变为可用位,缺点造成大量的内存碎片。

压缩回收算法(Compacting Collector)
把堆中活动的对象集中移动到堆的一端,就会在堆的另一端流出很大的空闲区域。
这种处理简化了消除碎片的工作,但可能带来性能的损失。

复制回收算法(Coping Collector)
把堆均分成两个大小相同的区域,只使用其中的一个区域,直到该区域消耗完。
此时垃圾回收器终端程序的执行,通过遍历把所有活动的对象复制到另一个区域,
复制过程中它们是紧挨着布置的,这样也可以达到消除内存碎片的目的。
复制结束后程序会继续运行,直到该区域被用完。
但是,这种方法有两个缺陷: 1)对于指定大小的堆,需要两倍大小的内存空间,2)需要中断正在执行的程序,降低了执行效率

4.相等填空==,new int和int相等会有什么问题?

  • Integer变量 和 new Integer() 变量比较 ,永远为 false。因为 Integer变量 指向的是 java 常量池 中的对象,而 new Integer() 的变量指向 堆中 新建的对象,两者在内存中的地址不同。
  • 两个Integer 变量比较,如果两个变量的值在区间-128到127 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false
  • int 变量 与 Integer、 new Integer() 比较时,只要两个的值是相等,则为true
  • 两个 new Integer() 变量比较 ,永远是 false,因为new生成的是两个对象,其内存地址不同

5.string和new string

String是常量池 new string是地址
两者==永远为false
equal是比较内容,相等即为true

6.equals和==的区别?

==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同.

==是指对内存地址进行比较 , equals()是对字符串的内容进行比较.

==指引用是否相同, equals()指的是值是否相同.

7.ArrayList和LinkedList和vector区别?

ArrayList是基于数组的,LinkedList是基于双向链表的。
ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。
LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。
ArrayList占内存小,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个指向下一个元素。

Vector和Arraylist 很像,但是他的方法都是同步的,是线程安全的,而ArrayList的方法不是,由于线程的同步必然要影响性能;

8.正则表达式

匹配数字:1*$
匹配IPv4地址:((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}

9.冒泡排序

思路:通过循环当前数组,再循环比比当前数字下标大的数字,和当前的i对比,然后大的往前,小的和i替换,大的和当前的j替换,依次比较,然后当前的i就会变成此次循环中最小的值,经过多次循环就可以形成完整的升序数组。ps:网上的那个gif完全是忽悠人的

for(int i=0;i<arr.length;i++) {
for(int j=i+1;j<arr.length;j++) {
if(arr[i]>arr[j]) {
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}

10.Java构造器

Java Constructor:Java构造器,也称Java构造方法,是一种特殊的方法。

构造器有以下几个特点:

  1. 构造器名和类名一致;
  2. 构造器用来创建对象,以及完成属性初始化操作;
  3. 构造器返回值类型不需要写,包括 void 也不能写
  4. 构造器的返回值类型实际上是当前类的类型
  5. 一个类中可以定义多个构造器,这些构造器构成方法重载
    构造器的使用其实很常见,调用语法为:new 构造器名(实际参数列表) ,假如我们现在有一个Person类,调用默认构造器:
    Person p = new Person(); // 这里的Person()其实就是调用的默认构造器!!

  1. 0-9 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值