文档章节

Java常见问题总结

阿阿阿阿阿局
 阿阿阿阿阿局
发布于 2016/08/06 11:28
字数 1501
阅读 57
收藏 5
点赞 0
评论 0

1、Object有哪些公共方法?

答:clone(),equals(),hashCode(),wait(), getClass(),finalize(),notify(),notifyAll(),toString()

2、Object中finalize()的作用?

答:用于清理。finalize()方法不需要显示地调用, 在垃圾回收(GC)时会被自动先行调用的。

3、Java中四种引用方式?

答:http://my.oschina.net/eager/blog/726428

4、hashCode()的作用?

答:hashcode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值。

        在 Java 应用程序执行期间,在对同一对象多次调用 hashCode()时,必须一致地返回相同的整数,前提是将对象进行hashCode()比较时所用的信息没有被修改。

  • 如果两个对象根据hashCode()返回的整数值不等,则equals()得到的结果必定为false;
  • 如果两个对象根据equals()比较是相等的,那么调用两个对象的hashCode()必须返回相同的整数结果;
  • 如果两个对象根据equals()比较是不等的,则hashCode()不一定得返回不同的整数。

详见:http://www.cnblogs.com/dolphin0520/p/3681042.html

5、ArrayList、LinkedList、Vector的区别?

线程安全性:

  • Vector、Stack:线程安全
  • ArrayList、LinkedList:非线程安全

实现方式:

  • LinkedList:双向链表
  • ArrayList,Vector,Stack:数组

扩容方式:

Stack继承自Vector,故不分开解释。

  • ArrayList扩容原来的50%(int newCapacity = (oldCapacity * 3)/2 + 1)
  • Vector缺省情况是原来的1倍(newCapacity  = oldCapacity * 2)

 其他详见:http://blog.csdn.net/a19881029/article/details/45533733

6、String、StringBuffer与StringBuilder的区别?

  • String类为final类型
  • StringBuffer线程安全的可变字符序列
  • StringBuilder线程不安全,JDK5.0新增
  • 在构造 StirngBuffer 或 StirngBuilder 时应尽可能指定它们的容量。如果操作的字符串长度(length)不超过 16 个字符就不用了,缺省时默认构造一个容量为16的对象,否则不指定会降低性能

详见:http://blog.csdn.net/kingzone_2008/article/details/9220691

7、java.io 与 java.nio的区别?

主要区别如下表:

IO NIO
面向流 面向缓冲
阻塞IO 非阻塞IO
选择器

详见:http://my.oschina.net/eager/blog/729320

8、HashMap和Hashtable(注意 t 是小写的)的区别?

  • Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现;
  • Hashtable是线程安全的,HashMap是线程不安全的;
  • HashMap允许null作为Entry的key和value,Hashtable不允许;
  • Hashtable使用Enumeration,HashMap使用Iterator遍历;
  • Hashtable中hash数组默认大小是11,扩容的方式是 old*2+1,HashMap中hash数组的默认大小是16,扩容一定是2的指数。

9、HashMap和ConcurrentHashMap的区别?

  • HashMap是since JDK1.2,ConcurrentHashMap是since JDK1.5;
  • HashMap是线程不同步的,ConcurrentHashMap是线程同步的;
  • HashMap本质是数组+链表,ConcurrentHashMap将数据分为多个segment,默认16个。

ConcurrentHashMap详见:http://www.cnblogs.com/dolphin0520/p/3932905.html

ConcurrentHashMap实现同步分析:http://blog.csdn.net/xuefeng0707/article/details/40834595

10、Hashtable和ConcurrentHashMap的区别?

  • Hashtable采取的是synchronized整个方法,ConcurrentHashMap采取的是synchronized代码块
  • Hashtable每次同步锁整体,ConcurrentHashMap只锁当前需要用到的segment

更多关于Map的详见:http://my.oschina.net/eager/blog/729795

11、try{}里有一个return语句,finally{}里的代码还会执行吗?

会执行,在return之前执行。

public class Test {
	public static void main(String[] args) {
		int a = 1;
		System.out.println("a:"+a);
		System.out.println("result:"+getNum(a));
	}

	public static int getNum(int a) {
		try {
			a = 2;
			System.out.println("try-a:"+a);
			return a;
		} finally {
			a = 3;
			System.out.println("finally-a:"+a);
		}
	}
}

结果展示:

可能会觉得很疑惑,从输出可以看出是执行了finally中的语句,但为什么最终返回值是2。因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,所以在finally块中调用return,则会修改返回值,但是不建议这样做。

12、Excption与Error包结构?

13、OOM你遇到过哪些情况?SOF你遇到过哪些情况?

OOM(Out Of Memory):当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个Error(注:非Exception,因为这个问题已经严重到不足以被应用处理)。

  • 1)分配的少了,比如虚拟机本身可使用的内存(一般通过启动时的JVM参数指定)太少。
  • 2)应用用的太多,并且用完没释放,浪费了,此时就会造成内存泄露或者内存溢出。
    • 内存泄露:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。
    • 内存溢出:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。

常见内存溢出情况:

  • java.lang.OutOfMemoryError: Java heap space ------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。
  • java.lang.OutOfMemoryError: PermGen space ------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出

SOF(Stack Over Flow):JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。

详见:http://www.cnblogs.com/gaojing/archive/2012/10/30/2844938.html

 

未完待续,该博客会每一天进行更新。

© 著作权归作者所有

共有 人打赏支持
阿阿阿阿阿局
粉丝 10
博文 48
码字总数 61219
作品 0
成都
Spring Cloud常见问题之:无法注册主机名

此前,笔者已经写过多篇总结Spring Cloud常见问题的博客(详情请在本博客首页http://www.itmuch.com 搜索按钮进行搜索,关键词:常见问题)。 本文将讨论微服务无法向Eureka Server注册主机名...

周立_ITMuch
2017/10/31
0
0
自己总结的几个常见问题的解决方法

希望对你有帮助: 1、安装jdk之后做什么就可以写helloworld了? 答:设定Path环境变量暴露javac和java即可。 做法: 将jdk目录/bin设定添加到Path环境变量里去。 windows中环境变量配好之后要...

精华之王
2009/04/11
0
0
JNI入门中helloworld常见问题

看了我转载的那篇JNI入门感觉确实写得很好,但是配置细节没怎么说明,我这里说明一下。 主要是按照完成helloworld这个程序的步骤出现的问题。所有的程 序都是通过命令行来编译的。 问题一:N...

人型电脑天使心
2012/09/03
0
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
04/25
0
0
java poi导入excel日期处理

java导入execl常见问题 一,导入的日期为一串数字 如“320422192610161818” 1, 在java导出excel时获取到的日期或其他列是一串数字,并且不管怎么更改都为数字则可以判断为模板有问题 解决办...

菜鸟来了
2015/04/18
0
0
DevExpress DateEdit 5 常见问题解决方法

如何设置选择的日期大于当天? [java] view plain copy dateEdit1.Properties.MinValue = DateTime.Now.AddDays(1) 2. 如何做到只显示年、月? [java] view plain copy var formatString = ......

Miss_Hello_World
2017/10/25
0
0
ANDROID JNI之JAVA域与c域的互操作

本文讲述AndroidJava域与C域互操作:Java域调用c域的函数;c域访问Java域的属性和方法;c域生成的对象的保存与使用。重点讲解c域如何访问Java域。 虽然AndroidJNI实现中,c实现与c++实现是有...

垂盆草
2012/10/13
0
0
《成神之路-基础篇》JVM——JVM参数及调优(已完结)

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是[《成神之路系列文章》][1]的第一篇,主要是关于JVM的一些介绍。 持续更新中 JVM参数及调优 JVM实用参数系列 成为Java GC专家(5)...

05/05
0
0
书单丨5本Java后端技术书指引你快速进阶

一名Java开发工程师 不仅要对Java语言及特性有深层次的理解 而且需要掌握与Java相关的 框架、生态及后端开发知识 本文涉及多种后端开发需要掌握的技能 对于帮助提高开发能力非常有帮助 NO.1...

Java高级架构
05/30
0
0
JavaWeb07-HTML篇笔记(二)

1.1 案例一:使用JDBC完成CRUD的操作:1.1.1 需求: 对分类管理使用JDBC进行CRUD的操作. 1.1.2 分析:1.1.2.1 技术分析: 【JDBC的概述】 Ø JDBC:Java DataBase Connectivity Java数据库的连...

我是小谷粒
05/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周一乱弹 —— 你的朋友圈有点生锈了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @Devoes :分享Trademark的单曲《Only Love (电视剧《妙手仁心 II》插曲)》: 《Only Love (电视剧《妙手仁心 II》插曲)》- Trademark 手机党少...

小小编辑
今天
203
9
【面试题】盲人坐飞机

有100位乘客乘坐飞机,其中有一位是盲人,每位乘客都按自己的座位号就坐。由于盲人看不见自己的座位号,所以他可能会坐错位置,而自己的座位被占的乘客会随便找个座位就坐。问所有乘客都坐对...

garkey
今天
1
0
谈谈神秘的ES6——(二)ES6的变量

谈谈神秘的ES6——(二)ES6的变量 我们在《零基础入门JavaScript》的时候就说过,在ES5里,变量是有弊端的,我们先来回顾一下。 首先,在ES5中,我们所有的变量都是通过关键字var来定义的。...

JandenMa
今天
1
0
arts-week1

Algorithm 594. Longest Harmonious Subsequence - LeetCode 274. H-Index - LeetCode 219. Contains Duplicate II - LeetCode 217. Contains Duplicate - LeetCode 438. Find All Anagrams ......

yysue
今天
2
0
NNS拍卖合约

前言 关于NNS的介绍,这里就不多做描述,相关的信息可以查看NNS的白皮书http://doc.neons.name/zh_CN/latest/nns_background.html。 首先nns中使用的竞价货币是sgas,关于sgas介绍可以戳htt...

红烧飞鱼
今天
1
0
Java IO类库之管道流PipeInputStream与PipeOutputStream

一、java管道流介绍 在java多线程通信中管道通信是一种重要的通信方式,在java中我们通过配套使用管道输出流PipedOutputStream和管道输入流PipedInputStream完成线程间通信。多线程管道通信的...

老韭菜
今天
0
0
AB 压力测试

Ubuntu 安装AB apapt-get install apache2-utils 使用AB 压力测试 -c 并发数 -n请求总数 ab -c 3000 -n 10000 http://localhost/test/index.php AB只能测试localhost 返回结果 This is Apac......

xiawet
今天
0
0
用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
今天
1
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
今天
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部