java面试题
子衿_青青
不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之
展开
-
什么是Java虚拟机?为什么Java被称为平台无关的编程语言
一、什么是java虚拟机?java虚拟机是执行字节码文件(.class)的虚拟机进程。java源程序(.java)被编译器编译成字节码文件(.class)。然后字节码文件,将由java虚拟机,解释成机器码(不同平台的机器码不同)。利用机器码操作硬件和操作系统二、为什么java被称为平台无关的编程语言?因为不同的平台装有不同的JVM,它们能够将相同的.class文件,解释成不转载 2017-09-19 08:35:38 · 13119 阅读 · 1 评论 -
在监视器(Monitor)内部,是如何做到线程同步的
转自:牛客网在java虚拟机中,每个对象(object和class)通过某种逻辑关联监视器,每个监视器和一个对象引用相关联,为了实现监视器的互斥功能,每个对象都关联着一把锁一旦方法或者代码块被synchronized修饰,那么这个部分就放入了监视器的监视区域,确保一次只能有一个线程执行该部分的代码,线程在获取锁之前不允许执行该部分的代码转载 2017-10-12 18:49:29 · 2244 阅读 · 0 评论 -
什么是死锁
转自:牛客网死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象,若无外力作用,他们都将无法推进下去,陷入死循环例子:当线程1和2都已经成功获取到第一个锁时,死锁就发生了。 //线程1 Synchorized(objectA){ Synchorized(objectB){ //操作转载 2017-10-12 19:05:27 · 679 阅读 · 0 评论 -
如何确保N个线程可以访问N个资源同时又不导致死锁
转自:牛客网如何确保N个线程可以访问N个资源同时又不导致死锁?答:使用多线程时,一种非常简单的避免死锁的方式就是:指定锁的顺序,并强制线程按照指定的顺序获取锁。因此所有的线程都是以同样的加锁和释放锁,就不会出现死锁了下面是详细解释:预防死锁,预先破坏产生死锁的四个条件。互斥不可能破坏,所以有如下3种方法:1.破坏 请求和保持条件1.1)进程等所有要请求的资源都空闲转载 2017-10-12 19:30:22 · 12532 阅读 · 1 评论 -
java集合类框架的基本接口有哪些
转自:牛客网java集合类框架的基本接口有哪些?答:Collection:代表一组对象,每一个对象都是它的子元素Set:不包括重复元素的CollectionList:有顺序的Collection,并且可以包含重复元素Map:可以把键(key)映射到值(value)的对象,键不能重复下面是详细解释:转自:牛客网(一)总共有两大接口:Collecti转载 2017-10-13 08:57:47 · 22937 阅读 · 1 评论 -
为什么集合类没有实现Cloneable和Serializable接口
转自:牛客网为什么集合类没有实现Cloneable和Serializable接口?答:克隆(cloning)或者序列化(serialization)的语义和含义是跟具体的实现相关的。因此应该由集合类的具体实现类来决定如何被克隆或者序列化一些解释:(1)什么是克隆?克隆是把一个对象里面的属性值,复制给另一个对象。而不是对象引用的复制(2)实现Serializabl转载 2017-10-13 09:44:55 · 15571 阅读 · 0 评论 -
什么是迭代器(Iterator)
转自:牛客网一、什么是迭代器(Iterator)?答:Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包括了可以返回迭代器实例的迭代方法。迭代器可以在迭代过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object obj)删除,可以通过迭代器的remove()方法删除二、使用Iterator的简单例子publicclass转载 2017-10-13 11:01:56 · 51771 阅读 · 1 评论 -
3个线程依次轮流打印出75个数
转自:详解使用synchronized解决三个线程依次轮流打印出75个数原帖见:http://www.iteye.com/topic/1117703问题描述:一个关于线程的经典面试题,要求用三个线程,按顺序打印1,2,3,4,5.... 71,72,73,74, 75.线程1先打印1,2,3,4,5, 然后是线程2打印6,7,8,9,10, 然后转载 2017-10-14 10:02:52 · 2075 阅读 · 0 评论 -
Java单例模式
转自:Java单例模式Java中单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在Java程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。 单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯转载 2017-10-14 11:27:07 · 369 阅读 · 1 评论 -
java堆结构,以及堆中的永久代
转自:java堆的结构以及堆中的永久代java堆不是数据接口意义上的堆(一种有序的树),而是jvm的堆,也即是运行时的数据区。所有类的实例和数组都是在堆上分配内存,它在JVM启动时被创建,对象所占的内存是由自动内存管理系统也就是垃圾回收器回收。堆内存是由存活的对象以及死亡的对象组成的。存活的对象不会被垃圾回收器回收;死亡的对象是还没有被垃圾回收器回收的对象,等下一个周期回收永久代:永久转载 2017-10-14 08:42:07 · 5380 阅读 · 4 评论 -
接口和抽象类的区别
一、接口和抽象类的区别是什么?1)接口中的成员变量都是public static final 的; 而抽象类随意,且不必是public的2)接口中的成员函数都是public abstract的;而抽象类可以存在非抽象的方法,且不必是public的3)java类能实现多个接口,但是只能继承一个抽象类4)接口和抽象类都不能被实例化。但是如果抽象类中main()方法,抽象类可以被调用转载 2017-09-19 14:58:14 · 428 阅读 · 0 评论 -
同步方法和同步代码块的区别
转自:牛客网1.同步方法使用synchronized修饰方法,在调用该方法前,需要获得内置锁(java每个对象都有一个内置锁),否则就处于阻塞状态代码如: public synchronized void save(){//内容}2.同步代码块使用synchronized(object){}进行修饰,在调用该代码块时,需要获得内置锁,否则就处于阻塞状态转载 2017-10-12 18:25:11 · 25964 阅读 · 2 评论 -
什么是面向对象
转自:一句话说明什么是面向对象--知乎把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的泛化(generation)/特化(specialization),通过多态(polymorphism)实现基于对象类型的动态分派(dynamic di转载 2017-10-30 08:38:14 · 1164 阅读 · 0 评论 -
概括解释线程的几种状态
转自:牛客网1.新建(new):新创建了一个线程对象2.可运行(runnnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权3.运行(running):可运行状态(runnable)的线程获得了CPU时间片(timeslice)4.阻塞(block):阻塞状态是指线程因为某转载 2017-10-12 10:06:05 · 880 阅读 · 0 评论 -
JDK和JRE的区别
1)JRE(Java Runtime Environment),是java运行环境,包含了JVM,java基础类库和支持文件。不包括编译器、调试器和其他工具。。。JRE是给想运行JAVA程序的用户使用的2)JDK(Java Development ToolKit),是完整的java开发软件包,包含JRE,编译器,调试器,和其他工具。可以让开发者开发、编译、执行java程序JDK是给转载 2017-09-19 09:44:14 · 308 阅读 · 0 评论 -
static关键字是什么意思?java中是否可以覆盖一个private方法或者static方法
一、static关键字是什么意思?static关键字表示静态的意思,用于修饰成员变量和成员函数。表示可以在没有类的实例的情况下,用类名.变量名或者类名.函数名,进行访问二、java中是否可以覆盖(override)一个private方法或者static方法都不能覆盖,也就是我们常说的重写,是子类继承父类,且子类中的方法和父类中的方法,方法名相同,参数个数和类型相同,返回值相转载 2017-09-19 09:59:04 · 6692 阅读 · 1 评论 -
是否可以在static环境中访问非static变量
一、是否可以在static环境中访问非static变量?不能。static变量在java中是属于类的,在类的所有实例中,它的值都是一样的。在类被JVM载入时,静态变量的值就确定了。而非静态变量是属于实例的,要在new一个实例之后,值才会存在。在static环境中,调用非static变量,可能这个变量都还不存在,当然会出错。原创 2017-09-19 10:20:57 · 7313 阅读 · 0 评论 -
java支持多继承吗?
一、java支持多继承吗?java中,类不支持多继承,接口支持多继承接口的作用是拓展对象功能。当一个子接口继承了多个父接口时,说明子接口拓展了多个功能。当一个类实现该接口时,就拓展了多个的功能转载 2017-09-19 14:12:06 · 1345 阅读 · 0 评论 -
什么是值传递和引用传递
一、什么是值传递和引用传递?值传递,是对于基本数据类型的变量而言的。传递的是该变量的一个副本,改变副本并不影响原变量引用传递,是对于对象型变量而言的。传递的是该变量地址的一个副本,并不是该对象本身链接:https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576来源:牛客网pub转载 2017-09-19 15:17:47 · 4552 阅读 · 0 评论 -
进程和线程的区别
一、进程和线程的区别1)进程是一个正在执行的程序;线程隶属于某个进程,是进程内部的一个执行序列2)进程是CPU、内存等资源占用的基本单位;线程不能占有这些资源3)进程之间相互独立,通信比较困难;线程共用一块内存区域,通信较为方便4)进程在执行过程中,包含了比较固定的入口、执行顺序、出口;而线程的这些过程会被应用程序控制转自:牛客网转载 2017-09-19 15:33:50 · 404 阅读 · 0 评论 -
数据库索引到底是什么,是怎样工作的?
转自:数据库索引到底是什么,是怎样工作的?我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引。假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name、Employee_Age 和Employee_Address。假设表Employee 有上千行数据。现在假设我们要从这个表中查找出所有名字是‘Jesus’的雇员信息。我们决定使转载 2017-10-02 10:26:19 · 329 阅读 · 0 评论 -
JAVA多线程实现的四种方式
转自:JAVA多线程实现的四种方式JAVA多线程实现的四种方式Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值转载 2017-10-02 10:59:32 · 249 阅读 · 0 评论 -
java支持的数据类型有哪些?什么是自动拆装箱?
一、java支持的数据类型有哪些?1)8种基本数据类型:byte 8位 取值范围 -2^7 ~ 2^7 -1short 16位 取值范围 -2^15 ~ 2^15 - 1char 16位 取值范围 0 ~ 2 ^16 - 1boolean 位数不明确 取值 true falseint 32位 取值范围 -2^31 ~ 2^31 - 1long 64原创 2017-09-19 10:41:42 · 6621 阅读 · 0 评论 -
解决request中文乱码
转自:解决request中文乱码问题解决request中文乱码的问题一,request.setCharacterEncoding(charset);必须写在第一次使用request.getParameter()之前,这样才能保证参数是按照已经设置的字符编码来获取。二,response.setCharacterEncoding(charse转载 2017-10-04 19:02:34 · 12739 阅读 · 0 评论