文档章节

Java 面试题

CRAZY261
 CRAZY261
发布于 2015/09/19 17:02
字数 985
阅读 401
收藏 30

java 常见面试题


1.java中 sleep 和 wait 的区别

  • 来自不同的类 : sleep来自Thread类,是Thread类的静态方法。而wait来自于object类。

sleep是Thread的静态方法,那个线程调用的了sleep,那个线程就会休眠(睡觉)

  • 持有锁:这一点很重要,sleep是没有释放锁的,使得该线程仍然占用这系统资源,wait方法则会释放锁,使得其他线程可以使用同步控制块或者方法。

sleep 不释放系统资源并且有时间限制,需要调用sleep(milliseconds)来指定休眠时间 wait会释放资源,并且进入线程等待池等待,这个时候其他线程可以占用CPU,直到其他线程调用notify/notifyAll唤醒等待池中的线程,然后进入就绪队列等待系统分配资源

  • 使用范围: wait,notify,notifyAll只能在synchronized块中或者synchronied控制的方法中调用。而sleep可以在任何地方调用

2.异常中Throw和Throws的区别

  • throw代表的是动作,throws是状态
  • throw用在方法中,而throws用在方法声明中
  • throw只能抛出一种异常,而throws可以抛出多个

3.内存溢出和内存泄露

  • 内存溢出(out of memory),是指程序在申请内存时,没有足够的内存空间供其使用
  • 内存泄露(menory leak):是指程序在申请内存后,无法释放已申请的内存空间。简单点说及就是,内存中存在可到达(即在有向图中,存在通路可以与其相连)且不再使用的对象。例如
   
   Vector v = new Vector (10);
   for(int i = 0;i<100;i++){
       Object object = new Object();
       v.add(object);
       object=null;
   }
   //假设以后不再使用v了

java 是通过引用来找到对象的,这里object是引用,可通过它来找到新创建的对象,简单比喻下就是,object是门牌号,这个门牌号背后的院子就Object对象,系统可以通过门牌号找到这个对象。当运行 v.add(object) 后相当于将门牌号复制了一份交给v,然后这个时候再将object = null相当于将Object的门牌号给擦除了。但因为v的手中还有门牌号的拷贝,所以系统能根据牌号找到它,而它又不会再被使用到,这样就造成了内存泄露。

4.Java是如何管理内存

Java使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。这种方式的优点是管理内存的精度很高,但是效率较低。另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。

5.String,StringBuffer 和 StringBuilder的区别

  • 可变与不可变: String类中使用字符数组保存字符串,如下就是,因为有“final”修饰符,所以可以知道string对象是不可变的。 private final char value[]; StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,如下就是,可知这两种对象都是可变的。 char[] value;
  • 是否线程安全 String中的对象是不可变的,也就可以理解为常量,显然线程安全。 StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。 StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
 public synchronized StringBuffer reverse() {  
     super.reverse();  
     return this;  
 }  
   
 public int indexOf(String str) {  
     return indexOf(str, 0);       
     //存在 public synchronized int indexOf(String str, int fromIndex) 方法  
 } 

未完待续

© 著作权归作者所有

CRAZY261
粉丝 4
博文 8
码字总数 8442
作品 0
成都
高级程序员
私信 提问
加载中

评论(1)

头号大宝贝
头号大宝贝
坐等更新呢
金九银十,史上最强 Java 面试题整理。

以下会重新整理所有 Java 系列面试题答案、及各大互联网公司的面试经验,会从以下几个方面汇总,本文会长期更新。 Java 面试篇 史上最全 Java 面试题,带全部答案 史上最全 69 道 Spring 面试...

Java技术栈
2018/09/13
0
0
提给程序员和开发者的 10 道 Java 泛型面试题

关于泛型的面试题在 Java面试中变得越来越常见,因为 Java 5问世已经有相当长的时间了,越来越多的应用已经迁移到Java 5上来了,并且几乎所有新的Java开发工作也都是在Tiger(Java 5的项目代号...

lwei
2013/10/18
13.6K
30
Java面试:投行的15个多线程和并发面试题

本文由ImportNew -一杯哈希不加盐 翻译自dzone。欢迎加入翻译小组。转载请见文末要求。 多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,...

ImportNew
2018/08/23
0
0
阿里巴巴菜鸟Java一面11个问题,你会几个呢?

近日,w3cschool app开发者头条上分享了阿里菜鸟Java程序员一些面试题。 这吸引了不少程序员小伙伴们的注意。 在分享阿里菜鸟Java程序员面经前,来看下Java面试一些面试经验分享: 0、Java高...

W3Cschool
2018/04/03
0
0
BAT等大厂Android面试书单和知识点清单

java是Android开发的基础,在BAT的初面中,会涉及到比较多的java基础知识,所以比较重要,下面我介绍的书籍内容是由浅到深。 1.Thinking in java:这本书被称为Java的三大圣经之一,虽然书比...

android自学
2018/07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
23分钟前
14
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
24分钟前
12
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
28分钟前
13
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
37分钟前
12
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
39分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部