Java笔试面试题整理第二波
转载至:http://blog.csdn.net/shakespeare001/article/details/51200163
作者:山代王(开心阳)
本系列整理Java相关的笔试面试知识点,其他几篇文章如下:
1、List遍历时删除的几种方式比较
- Iterator<String> it = list.iterator();
- while(it.hasNext()){
- String item = it.next();
- list.remove(item); //报错!!!
- }

Iterator<String> it = list.iterator();
while(it.hasNext()){
String item = it.next();
list.remove(item); //报错!!!
}
- for(String s : list){
- list.remove(s); //报错!!!
- }

for(String s : list){
list.remove(s); //报错!!!
}
以上都是报java.util.ConcurrentModificationException,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection,因为在这些情况下,迭代的结果是不确定的。
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println(”———-list大小1:–”+list.size());
- for (int i = 0; i < list.size(); i++) {
- if (2 == list.get(i)) {
- list.remove(i);
- }
- System.out.println(list.get(i));
- }
- System.out.println(”最后输出=” + list.toString());

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(4);
System.out.println("----------list大小1:--"+list.size());
for (int i = 0; i < list.size(); i++) {
if (2 == list.get(i)) {
list.remove(i);
}
System.out.println(list.get(i));
}
System.out.println("最后输出=" + list.toString());
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println(”———-list大小1:–”+list.size());
- for (int i = 0; i < list.size(); i++) {
- list.remove(i);
- }
- System.out.println(”最后输出=” + list.toString());

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(4);
System.out.println("----------list大小1:--"+list.size());
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
System.out.println("最后输出=" + list.toString());
输出的结果如下:
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println(”———-list大小1:–”+list.size());
- Iterator<Integer> it = list.iterator();
- while(it.hasNext()){
- Integer item = it.next();
- if (2 == item) {
- it.remove();
- }
- System.out.println(item);
- }
- System.out.println(”最后输出=” + list.toString());

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(2);
list.add(3);
list.add(4);
System.out.println("----------list大小1:--"+list.size());
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
Integer item = it.next();
if (2 == item) {
it.remove();
}
System.out.println(item);
}
System.out.println("最后输出=" + list.toString());
对于iterator的remove()方法,也有需要我们注意的地方:
1、每调用一次iterator.next()方法,只能调用一次remove()方法。
2、调用remove()方法前,必须调用过一次next()方法。
2、Java基本数据类型及包装类
shot(短整型) 16位 Short
int(整型) 32 位 Integer
long(长整型) 64 位 Long
float(浮点型) 32 位 Float
double(双精度) 64 位 Double
char(字符型) 16 位 Character
各数据类型按容量大小(表数范围大小)由小到大排列为:
byte <—— short, char <——int <——long <——float <——double
1)运算时,容量小的类型自动转换为容量大的类型;
2)容量大的类型转换为容量小的类型时,要加强制转换符,且精度可能丢失;
如:float f = 1.2f;
3)short,char之间不会互相转换(需要强制转换),byte、short、char并且三者在计算时首先转换为int类型;
4)实数常量默认为double类型, 整数常量默认为int类型;
3、switch中的参数类型
- enum EnumTest {
- LEFT,
- RIGHT
- }
- EnumTest e = EnumTest.LEFT;
- switch (e) {
- case LEFT:
- System.out.println(”—-left—–”);
- break;
- default:
- break;
- }

enum EnumTest {
LEFT,
RIGHT
}
EnumTest e = EnumTest.LEFT;
switch (e) {
case LEFT:
System.out.println("----left-----");
break;
default:
break;
}
- String str = “abc”;
- switch (str) {
- case “abc”:
- System.out.println(”—–abc—–”);
- break;
- case “aaa”:
- System.out.println(”—–aaa—–”);
- break;
- }

String str = "abc";
switch (str) {
case "abc":
System.out.println("-----abc-----");
break;
case "aaa":
System.out.println("-----aaa-----");
break;
}
4、equals与==的区别
- if(12 == 12.0){
- System.out.println(”—–12 == 12.0——-“);
- }

if(12 == 12.0){
System.out.println("-----12 == 12.0-------");
}
- public boolean equals(Object obj) {
- return (this == obj);
- }

public boolean equals(Object obj) {
return (this == obj);
}
- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String) anObject;
- int n = value.length;
- if (n == anotherString.value.length) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = 0;
- while (n– != 0) {
- if (v1[i] != v2[i])
- return false;
- i++;
- }
- return true;
- }
- }
- return false;
- }

public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
- public boolean equals(Object obj) {
- if (obj instanceof Integer) {
- return value == ((Integer)obj).intValue();
- }
- return false;
- }

public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
5、Object有哪些公用方法
- public boolean equals(Object obj) {//判断是否同一个对象,具体见上一点总结
- return (this == obj);
- }
- public String toString(){
- return getClass().getName() + “@” + Integer.toHexString(hashCode());
- }
- //返回该对象的哈希码值,重写了equals方法一般都要重写hashCode方法
- public native int hashCode();
- /**
- *wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
- *调用该方法后当前线程进入睡眠状态,直到以下事件发生。
- *(1)其他线程调用了该对象的notify方法。
- *(2)其他线程调用了该对象的notifyAll方法。
- *(3)其他线程调用了interrupt中断该线程。
- *(4)时间间隔到了。
- *此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
- *如:Person p = new Person();
- *p.wait()//使用Person p对象作为对象锁。
- */
- public final void wait() throws InterruptedException {…}
- public final native void wait(long timeout) throws InterruptedException;
- public final void wait(long timeout, int nanos) throws InterruptedException {…}
- //该方法唤醒在该对象上等待的某个线程。如p.notify();
- public final native void notify();
- //该方法唤醒在该对象上等待的所有线程。
- public final native void notifyAll();
- public final native Class<?> getClass();//获得运行时类型
- //创建并返回此对象的一个副本。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
- protected native Object clone() throws CloneNotSupportedException;
- //用于释放资源。当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。也可手动调用,自己实现一些资源的释放。
- protected void finalize() throws Throwable { }

public boolean equals(Object obj) {//判断是否同一个对象,具体见上一点总结
return (this == obj);
}
public String toString(){
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
//返回该对象的哈希码值,重写了equals方法一般都要重写hashCode方法
public native int hashCode();
/**
*wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
*调用该方法后当前线程进入睡眠状态,直到以下事件发生。
*(1)其他线程调用了该对象的notify方法。
*(2)其他线程调用了该对象的notifyAll方法。
*(3)其他线程调用了interrupt中断该线程。
*(4)时间间隔到了。
*此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
*如:Person p = new Person();
*p.wait()//使用Person p对象作为对象锁。
*/
public final void wait() throws InterruptedException {...}
public final native void wait(long timeout) throws InterruptedException;
public final void wait(long timeout, int nanos) throws InterruptedException {...}
//该方法唤醒在该对象上等待的某个线程。如p.notify();
public final native void notify();
//该方法唤醒在该对象上等待的所有线程。
public final native void notifyAll();
public final native Class<?> getClass();//获得运行时类型
//创建并返回此对象的一个副本。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
protected native Object clone() throws CloneNotSupportedException;
//用于释放资源。当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。也可手动调用,自己实现一些资源的释放。
protected void finalize() throws Throwable { }
6、Java中的四种引用:强引用、软引用、弱引用、虚引用
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。如下使用代码:
- String str= new String(“abc”); //强引用
- Refenrence sr = new SoftReference(str); //软引用
- //引用时
- if(sr!=null){
- str= sr.get();
- }else{
- str= new String(“abc”);
- sr = new SoftReference(str);
- }

String str= new String("abc"); //强引用
Refenrence sr = new SoftReference(str); //软引用
//引用时
if(sr!=null){
str= sr.get();
}else{
str= new String("abc");
sr = new SoftReference(str);
}
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
2 将堆中的对象new String(“abc”);设置为可结束的(finalizable)。
3 当heap中的new String(“abc”)对象的finalize()方法被运行而且该对象占用的内存被释放, sr被添加到它的ReferenceQueue中。
- String str = new String(“abc”);
- SoftReference<String> soft = new SoftReference<String>(str); //软引用
- str = null;
- System.out.println(”before gc:” + soft.get());
- System.gc();
- System.out.println(”after gc:” + soft.get());

String str = new String("abc");
SoftReference<String> soft = new SoftReference<String>(str); //软引用
str = null;
System.out.println("before gc:" + soft.get());
System.gc();
System.out.println("after gc:" + soft.get());
- String str = new String(“abc”);
- WeakReference<String> soft = new WeakReference<String>(str); //弱引用
- str = null;
- System.out.println(”before gc:” + soft.get());
- System.gc();
- System.out.println(”after gc:” + soft.get());

String str = new String("abc");
WeakReference<String> soft = new WeakReference<String>(str); //弱引用
str = null;
System.out.println("before gc:" + soft.get());
System.gc();
System.out.println("after gc:" + soft.get());
6.4 虚引用(PhantomReference)

Java笔试面试题整理第二波的更多相关文章
- Java笔试面试题整理第八波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第六波(修正版)
转载至:http://blog.csdn.net/shakespeare001/article/details/51330745 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第五波
转载至:http://blog.csdn.net/shakespeare001/article/details/51321498 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第四波
转载至:http://blog.csdn.net/shakespeare001/article/details/51274685 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第三波
转载至:http://blog.csdn.net/shakespeare001/article/details/51247785 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第一波
转载至:http://blog.csdn.net/shakespeare001/article/details/51151650 作者:山代王(开心阳) 本系列整理Java相关的笔试面试知识点,其他几 ...
- Java笔试面试题整理第七波
转载至:http://blog.csdn.net/shakespeare001/article/details/51388516 作者:山代王(开心阳) 1.super的作用 在Java中su ...
- Java工程师笔试题整理[校招篇]
Java工程师笔试题整理[校招篇] 隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打 ...
- Java笔试面试题007
Java笔试面试题007 1.请用正則表達式匹配出QQ号(如果QQ号码为5-10位). 解答: ^ \d{5,10}$ 2.String, StringBuffer StringBuilder的差别. ...
随机推荐
- linux 安装配置zookeeper
1.什么是zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...
- Spring Boot + Spring Cloud 实现权限管理系统 权限控制(Shiro 注解)
技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制.但这仅限于页面的显示和操作,我们的后台接口还是没有进行权限的验证,只要知道了后台的接 ...
- request.getRealPath的替代方法
在写上传小练习的时候,发现获得路径的request.getRealPath("")已经被画上线了,也就是不再建议使用. package controller; import jav ...
- JAVA概率实现--一篇最常见、最通用解决方案
日常场景:某活动抽奖,控制各等奖的出现概率 比如控制A(中奖率):20%:B(获得优惠券率):30%:C(谢谢参与率):50% 下面以封装好在main()函数里,上代码(记得导入相应的包): publ ...
- nodejs -- event 模块, 事件模块.
1. 注册事件 on 或者 addListener,触发事件 emit 1-1简单的使用: var EventEmitter = require('events').EventEmitter; var ...
- Java面试通关秘籍汇总集
一.基础篇 1.1.Java基础 面向对象的特征:继承.封装和多态 final, finally, finalize 的区别 Exception.Error.运行时异常与一般异常有何异同 请写出5种常 ...
- Quartz在Spring中动态设置cronExpression
什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...
- C++中的指针,指针函数和函数指针
指针是C或C++中的一大难题,因此弄懂指针对C和C++的学习有很大的帮助,最近一直在研究指针,因此写一篇随笔把心得记录一下. 简单来说指针也是一种变量,只不过指针变量所存储的不是我们直观上看到的,而是 ...
- 测试那些事儿—软测必备的Linux知识(一)
1.Linux入门须知 1.1文件.目录 linux文件:Linux所有的内容都是以文件形式保存,包括硬件(一切内容皆文件),并且linux不靠扩展名区分文件类型. linux文件有多种基本类型,常见 ...
- 编写简单的windows桌面计算器程序
编译环境:VS2017 主文件为: #include "stdafx.h" #include "WindowsProject5.h" #include &quo ...