Java面试之基础题目

本文回答了 你应该知道的JAVA面试题 基础篇。
http://ifeve.com/java-interview-question/

  1. Java线程的状态
    答: 线程间的状态转换:
    (1). 新建(new):新创建了一个线程对象。
    (2). 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。
    (3). 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。
    (4). 阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。
    阻塞的情况分三种:
    (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中。
    (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
    (三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
    (5). 死亡(dead):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。

  2. 进程和线程的区别,进程间如何通讯,线程间如何通讯
    答: 进程与线程区别
    定义方面:进程是程序在某个数据集合上的一次运行活动;线程是进程中的一个执行路径。
    角色方面:在支持线程机制的系统中,进程是系统资源分配的单位,线程是CPU调度的单位。
    资源共享方面:进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器。
    独立性方面:进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在。
    开销方面。进程切换的开销较大。线程相对较小。(前面也提到过,引入线程也出于了开销的考虑。)
    (一)、进程间的通信方式
    管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
    有名管道 (namedpipe) : 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
    信号量(semophore ) : 信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
    消息队列( messagequeue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
    信号 (sinal ) : 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
    共享内存(shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
    套接字(socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。

(二)、线程间的通信方式
锁机制:包括互斥锁、条件变量、读写锁
互斥锁提供了以排他方式防止数据结构被并发修改的方法。读写锁允许多个线程同时读共享数据,而对写操作是互斥的。条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。
信号量机制(Semaphore):包括无名线程信号量和命名线程信号量
信号机制(Signal):类似进程间的信号处理
线程间的通信目的主要是用于线程同步,所以线程没有像进程通信中的用于数据交换的通信机制。

3.HashMap的数据结构是什么?如何实现的。和HashTable,ConcurrentHashMap的区别
答:数组+链表+红黑树。具体可以参见以下文章。
http://www.jianshu.com/p/c0642afe03e0

4.Cookie和Session的区别
答: 简单说就是HTTP协议是无状态的,服务器端需要session来跟踪用户的状态。
Session是在服务端保存的一个数据结构,用来跟踪用户的状态,这个数据可以保存在集群、数据库、文件中;Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,也是实现Session的一种方式。
http://www.jianshu.com/p/a2fe1d6441a7

  1. 索引有什么用?如何建索引?
    答: http://blog.csdn.net/evankaka/article/details/46685649

6.ArrayList是如何实现的,ArrayList和LinkedList的区别?ArrayList如何实现扩容。
答: ArrayList 的本质就是数组, ArrayList就是对数组进行动态的扩展,其add, get , remove 等等操作就是对数组的操作。每次扩容到原来大小的1.5倍。

7.equals方法实现
答:当equals重载时,这里有4个会引发equals行为不一致的常见陷阱:
定义了错误的equals方法签名(signature) Defining equals with the wrong signature.

重载了equals的但没有同时重载hashCode的方法。 Changing equals without also changing hashCode.
建立在会变化字域上的equals定义。 Defining equals in terms of mutable fields.
不满足等价关系的equals错误定义 Failing to define equals as an equivalence relation.
酷壳有篇文章专门讲解equals方法。https://coolshell.cn/articles/1051.html
8.面向对象
答:这个题目很宽泛,可以谈谈封装,继承,多态,SOLID原则。Java需要了解接口和抽象类的区别。
9.线程状态,BLOCKED和WAITING有什么区别
答:
假设t1,t2先后两个线程,都执行如下代码:
synchronized(Obj) {
Obj.wait();
}

t1先进,最后在Obj.wait()下卡住,这时java管t1的状态waitting状态
t2后进,直接在第一行就卡住了,这时java叫t2为blocked状态。

判断是否是BLOCKED可以看该线程是否在等待获取锁,WAITING从官方文档中可以知道调用Object.wait(), Thread.join(), LockSupport.park()会使得线程进入该状态。

10.JVM如何加载字节码文件
答:JVM的功能可以归纳为:
加载:通过类加载器加载类文件的过程。
链接:链接类文件,提交给JVM在运行时执行。
初始化:分配内存和调用类初始化方法设置变量值。

image.png

你可能还需要了解JVM的架构图,方法区,堆空间,栈空间,Native Memory.
http://www.jianshu.com/p/f4f580289091

  1. JVM GC,GC算法。
    答:这个网上资料很多,主要了解CMS的 Eden、Survivor 和 Tenured/Old 空间。
    G1算法的优点,和CMS垃圾收集的区别。
    12.什么情况会出现Full GC,什么情况会出现young GC。
    答: young GC清理Eden区的内存。FullGC 清理所有内存。Major GC 清理老年代。
    Initial Mark 和 Remark会stop the world.
    需要注意的是G1 GC正常情况是避免Full GC的,如果G1算法出现了Full GC,意味着系统出现了问题,要进行调优。
    G1 GC正常情况下只有young GC 和 mixed GC(Eden和Old区同时GC)。
    13.JVM内存模型
    答:
    http://ifeve.com/java-memory-model-6/
    如果能够看懂这篇文章,对内存使用和理解会更上一层楼。https://www.ibm.com/developerworks/cn/java/j-nativememory-linux/
    14.Java运行时数据区
    答:见上图,但是要注意的是在JDK1.8之后,方法区(PermGen)已经去除,相关的内容被移到了元数据区。
    http://www.infoq.com/cn/articles/Java-PERMGEN-Removed
    http://www.jianshu.com/p/6173a467165e
    15.事务的实现原理
    答: https://my.oschina.net/huangyong/blog/160012
    https://my.oschina.net/huangyong/blog/1598521.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,182评论 11 349
  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,693评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,577评论 18 399
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,498评论 3 93
  • 本篇系看完电影后的臆想,如有虚构,纯属雷同 今天晚餐后吃了个冰淇淋就直奔电影院看《亚瑟王》,后面那个翻译就省了吧,...
    楚楚弟弟粗来玩阅读 363评论 0 1