精华Java问题总结

当时在网上汇总了不知多少面试和基础题,弄了个精华总结。

1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。

2、short s1= 1; s1= s1+1; 有没有错?

s1+1运算时会自动提升类型,结果是int,赋值给s1时,将报告需要强转类型的错误。

3、short s1= 1; s1 += 1;有没有错?

+=是java规定的运算符,编译器会对它进行特殊处理,因此可以正确编译。

4、使用final关键字修饰一个变量时,引用的内容一定不能变?

使用final修饰变量时,是引用变量(也就是地址)不能变,引用变量所指向的对象中的内容还是可以改变的

5、是否可以从static方法内对非static方法调用?为什么?

        不可以。因为非static方法是与对象关联的,必须创建一个对象,才可以在该对象上进行方法调用(对象.方法)。而static方法调用时不需要创建对象,可以直接调用。如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立。

6、Overload和Override的区别?

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的方法的名称和参数完全相同,子类对象调用这个方法时,将调用子类中的定义方法,这就把父类中的方法覆盖了,这也是面向对象编程的多态性的一种表现。

7、Overloaded的方法是否可以改变返回值的类型?

如果几个重载Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。

如果两个方法的参数列表完全一样,不管返回值是否相同,都不允许。因为无法确定编程者倒底是想调用哪个方法了,因为他们被调用时看起来完全相同。

8、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?

        接口可以继承接口。抽象类可以实现(implements)接口,抽象类可以继承具体类。抽象类中可以有静态的main方法。

        记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。

9、Java中实现多态的机制是什么?

        靠的是父类(或接口定义)的引用变量可以指向子类(或具体实现类)的实例对象。

而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,而不是引用变量的类型中定义的方法。

10、abstractclass和interface有什么区别?

抽象类可以有构造方法,接口中不能有构造方法。

抽象类中可以有普通成员变量,接口中没有普通成员变量

抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

抽象类中的抽象方法类型可以是public,protected,接口中的抽象方法只能是public类型的,并且默认为public abstract。

7. 一个类可以实现多个接口,但只能继承一个抽象类。

11、String s = "Hello";s = s + "world!";执行后,原始的String对象中的内容变了没有?

        没有。因为String被设计成不可变类,所以它的所有对象都是不可变对象。只是s不再指向旧的对象了。

12、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

javac编译可以对字符串常量直接相加的表达式进行优化直接得出答案,不必要等到运行期再去进行加法运算处理

这行代码被编译器在编译时优化后,相当于直接定义了一个”abcd”的字符串,所以,上面的代码应该只创建了一个String对象。

13、final, finally, finalize的区别。

        final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

        finally是异常处理语句结构的一部分,表示总是执行。

        finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法.

14、error和exception有什么区别?

        error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。                  exception表示程序还能够克服和恢复的问题

15、Java 中堆和栈区别?
栈常用于保存方法帧和局部变量,而对象总是在堆上分配。

栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。

        栈:在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。

        堆:堆内存用来存放由 new 创建的对象和数组,在堆中分配的内存,由 Java 虚拟机的自动垃圾回收器来管理。

16、能将 int 强制转换为 byte 类型的变量吗?(引申到所有大类型转小类型)
        实际中,我们可以做强制转换,不会报错。

但是存在大类型转小类型的通病: int 是 32 位的,而 byte 是 8 位的,如果强制转化,int 类型的高 24 位将会被丢弃,所以尽量不要这样做。

17、hashCode有什么用?与 a.equals(b) 有什么关系?
        hashCode方法对应对象的 hash 值。它常用于基于 hash 的集合类,如 Hashtable、HashMap、LinkedHashMap等等。根            据 Java 规范,两个使用 equal() 方法来判断相等的对象,必须具有相同的 hash code。

18、垃圾回收的优点和原理。

        垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。

原理:可以给对象添加一个被引用的计数器,就可以判断是否已经是无引用对象。但是难以解决循环引用问题。

如果不下小心直接把 Obj1-reference 和 Obj2-reference 置 null。则在 Java 堆当中的两块内存依然保持着互相引用无法回收。

可达性分析法:通过一系列的 ‘GC Roots’ 的对象作为起始点,从这些节点出发所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引用链相连的时候说明对象不可用。 

19,java中会存在内存泄漏吗

内存泄漏:指一个不再被程序使用的对象或变量一直被占据在内存中。java中有垃圾回收机制,它可以保证当对象不再被引用的时候,对象将自动被垃圾回收器从内存中清除掉。

        由于Java使用有向图的方式进行垃圾回收管理,可以消除引用循环的问题,例如有两个对象,相互引用,只要它们和根进程不可达,那么GC也是可以回收它们的。

java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露.

尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景。通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。

 

 

21、线程和进程有什么区别?

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。

22、如何在Java中实现线程?

继承Thread类
class Handler extends Thread{public void run(){//方法重写}public static void main(String[] args){Thread thread = new Handler();//创建线程对象thread.start();//启动线程}
}
实现Runnable接口
class Handler implements Runnable{public void run(){//方法实现}public static void main(String[] args){Handler handler = new Handler();Thread thread = new Thread(handler);//创建线程对象thread.start();//启动线程}
}

23、Java 关键字volatile 与 synchronized 作用与区别?

    1,volatile
    它所修饰的变量不保留拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。

为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变 量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不一致的情况。 

一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。
    2,synchronized

当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。

二、当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。

三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所有synchronized(this)同步代码块的访问将被阻塞。

24、线程生命周期?

新建一个线程时,它的状态是New。当我们调用线程的start()方法时,状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且将它们的状态改变为Running。其他的线程状态还有Waiting,Blocked 和Dead

25、死锁?

指多个进程在运行过程中因争夺资源而造成的一种僵局,当处于这种状态时,若无外力作用,它们都将无法再向前推进。

原因可归结为两点:竞争资源、 进程间推进顺序非法
产生死锁的必要条件:

互斥条件:在一段时间内某资源仅为一进程所占用。
请求和保持条件:对已获得的资源保持不放。
不剥夺条件:已获得的资源只能由自己释放。
环路等待条件:存在一个进程--资源的环形链。

26、什么是线程池? 为什么要使用它?

创建线程要花费昂贵的资源和时间,如果任务来了才创建线程那么响应时间会变长,而且一个进程能创建的线程数有限。

线程池实现了线程重复利用,节约了时间和资源。

// Java线程池的完整构造函数
public ThreadPoolExecutor(int corePoolSize, // 线程池长期维持的线程数,即使线程处于Idle状态,也不会回收。int maximumPoolSize, // 线程数的上限long keepAliveTime, TimeUnit unit, // 超过corePoolSize的线程的idle时长,// 超过这个时间,多余的线程会被回收。BlockingQueue<Runnable> workQueue, // 任务的排队队列ThreadFactory threadFactory, // 新线程的产生方式RejectedExecutionHandler handler) // 拒绝策略

27、反射?

JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

28、JDK 、 JRE 、JVM有什么区别和联系?

JVM : Java 虚拟机。能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。

JRE :Java 运行时环境。包含两个部分,jvm和 Java 的一些基本类库。

JDK :Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。

这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。

29、深拷贝浅拷贝

      数据类型分为两种基础类型和引用类型:

基础类型:像Number、String、Boolean等这种为基本类型
引用类型:Object和Array

浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,修改其中任意的值,另一个值会随之变化

深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变。

30、JVM内存分为哪几部分?各个部分的作用是什么?

JVM内存区域分为五个部分,分别是堆,方法区,虚拟机栈,本地方法栈,程序计数器。


1)堆。

堆是Java对象的存储区域,任何用new字段分配的Java对象实例和数组。
2)方法区。

它用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,方法区,从JDK1.8永久代被移除。
3)虚拟机栈。

虚拟机栈中执行每个方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
4)本地方法栈。

与虚拟机栈发挥的作用相似,相比于虚拟机栈为Java方法服务,本地方法栈为虚拟机使用的Native方法服务,执行每个本地方法的时候,都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息。
5)程序计数器。

指示Java虚拟机下一条需要执行的字节码指令。

总:其中方法区和堆被JVM中多个线程共享,比如类的静态常量就被存放在方法区,供类对象之间共享,虚拟机栈,本地方法栈,pc寄存器是每个线程独立拥有的,不会与其他线程共享。

31、为什么会出现4.0-3.6=0.40000001这种现象?

2进制的小数无法精确的表达10进制小数,在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现误差。

32、“==”比较的是什么?

“==”两边是对象,比较地址。

“==”两边是基本类型,比较数值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443980.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

复习Java的精华总结

小白和老手都应该看看的总结 输入 java.util.Scanner 是 Java5 的新特征&#xff0c;我们可以通过 Scanner 类来获取用户的输入。 下面是创建 Scanner 对象的基本语法&#xff1a; Scanner s new Scanner(System.in); 使用方法如下&#xff1a; //对应类型用对应的方法接…

超硬核!躺进BAT以后我总结了出现最多的15道数组题

作为一个硬核作者&#xff0c;绝不和你扯废话&#xff0c;干货无套路送你 题目一&#xff1a; 给定一个数组arr&#xff0c;求出需要排序的最短子数组长度 要求&#xff1a; 时间o(n),空间o(1) 思路&#xff1a; 有序的数组中&#xff0c;任意一个数字&#xff0c;一定小于左…

《关于我的那些面经》滴滴Java岗(附答案)

手撕单例模式 所谓单例&#xff0c;就是整个程序有且仅有一个实例。该类负责创建自己的对象&#xff0c;同时确保只有一个对象被创建。 在Java&#xff0c;一般常用在工具类的实现或创建对象需要消耗资源。特点&#xff1a;类构造器私有、持有自己类型的属性、对外提供获取实…

《关于我的那些面经》——百度后端(附答案)

作者保证&#xff0c;本系列全是纯干货真实记录&#xff0c;绝对不是某些营销号瞎编乱造的面试。 一、公司的简介 百度是全球最大的中文搜索引擎&#xff0c;是中国最大的以信息和知识为核心的互联网综合服务公司&#xff0c;更是全球领先的人工智能平台型公司。2000年1月1日创…

《兔兔公司的历史》那些年,百度的荣耀和沉沦

这是全站最硬核的兔子700文章后的第一篇软文&#xff0c;觉得喜欢的同学可以三连一波&#xff0c;如果大家喜欢&#xff0c;我会出公司的历史系列、互联网大佬系列、产品经理系列&#xff0c;大家喜欢哪个呢&#xff1f; 百度公司的发展趋势 还记得南宋词人辛弃疾的那首词吗&a…

这篇不讨好任何人的回忆录,记录了我从双非学校到BAT/TMD六offer的原因

注&#xff1a;给我想个新名字好不好呀&#xff0c;采用了直接发百元红包&#xff01;没别的&#xff0c;想让大家认识兔兔rabbit&#xff0c;说一下自己的经验教训&#xff0c;应该会对很多人有帮助。 一、前言 在今年&#xff0c;我要毕业了&#xff0c;基本结束了大学生活&…

《兔子的大厂面经合集》朋友面神策数据库,第五个问题不会,直接再见(1)

这个系列计划收集几百份朋友和读者的面经&#xff0c;作者合集方便查看&#xff0c;各位有面经屯着可以联系我哦 写数据库还真不是人人都能干的&#xff0c;硬是一道别的题都没问。

兔子,撒币

作为最硬核的你兔老大&#xff0c;我狠起来连自己都骂 一、原力第一 哈哈当然不是骂自己啦哈哈&#xff0c;其实是最近csdn出了一个活动&#xff1a;原力计划s3&#xff0c;弄得我现在整天想着&#xff0c;给你们发钱。发书。发资料。 对&#xff0c;就是这个玩意&#xff1a…

超硬核!数据库学霸笔记,考试/面试随便秒杀

废话不多说&#xff0c;上干货是兔老大的传统了&#xff0c;收藏就完事了。 目录 数据库系统概论 四个基本概念 数据模型 数据库系统结构 数据库系统模式的概念 数据库系统的三级模式结构 数据库的二级映像功能与数据的独立性 数据库系统的组成 关系 关系模式 关系数…

腾讯面试Android必问11题,我说的,不信就来看看

众所周知兔子啥都会那么一点&#xff0c;不收藏等着干啥呢 1、是否使用过本地广播&#xff0c;和全局广播有什么差别&#xff1f; 引入本地广播的机制是为了解决安全性的问题&#xff1a; 正在发送的广播不会脱离应用程序&#xff0c;比用担心app的数据泄露&#xff1b;其他的…

超硬核!我统计了BAT笔试面试出现频率最高的五道题,学会了总能碰到一道

所以说不要怕算法&#xff0c;简单的题反而出现的频率最高&#xff0c;不一定非要写个几百道才面试 两数之和 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会…

不骗你,全网首创的超硬核的万字SQL题

因为上次发了数据库原理总结&#xff0c;浏览快上万了&#xff0c;所以把我总结的题目 也送给大家 上次的数据库原理总结 一&#xff0e;根据员工工资计算其个人所得税&#xff0c;3000元为起征点&#xff0c;超出3000元的部分按照10%的比例征收个人所得税&#xff0c;例如&…

学姐腾讯产品面经

顺利拿到sp offer&#xff0c;不服不行&#xff0c;不是这块料呀 系列文章历史&#xff1a; 朋友面神策数据库&#xff0c;第五个问题不会&#xff0c;直接再见 美女学姐面了美团阿里京东&#xff0c;这些经验实在太真实了 首先&#xff0c;来个背景介绍&#xff1a; 腾讯实…

关于阿里云服务器本地访问不了的问题

一&#xff1a;前几天公司购买了一台阿里云服务器&#xff0c;让我把之前的项目都移到阿里云服务器上&#xff0c;我为此专门的研究了一下阿里云服务器的基本操作和安装流程&#xff0c;这里我说一下我们公司的服务器配置如下&#xff1a; 系统就配置就是这个情况&#xff0c;下…

超硬核!十万字c++题,让你秒杀老师和面试官(上)

我发现呀&#xff0c;这大家对面试题的需求还是很大的&#xff0c;这里总结了上千道知识点&#xff0c;能换您一个收藏吗 C 引用和指针的区别&#xff1f; 指针是一个实体&#xff0c;需要分配内存空间。引用只是变量的别名&#xff0c;不需要分配内存空间。 引用在定义的时候…

当年,学姐把这份Java总结给我,让我在22k的校招王者局乱杀

可以说&#xff0c;学姐给我的这份文档真的把我的知识查漏补缺&#xff0c;面试问到了好多&#xff0c;值得收藏。 并发编程 一.Executor 为什么使用线程池&#xff1a;手动创建线程耗费性能&#xff0c;不利于管理。 首先创建线程池有两种方式&#xff1a;使用Executors工厂…

测试必经之路(探索性测试)

接下来&#xff0c;百万年薪测试方面也会有专题哦。 测试计划&#xff1a; 测试范围、方法、资源、进度、风险 测试报告&#xff1a; 就是把测试的过程和结果写成文档&#xff0c;对发现的问题和缺陷进行分析。 一、探索性测试 评估测试用例的标准 1 测试用例对被测对象的…

大学四年自学进BAT,私下存的资源/工具/网站我全贡献出来了

这些工具/网站是我横扫BAT的重要一步&#xff0c;甚至是决定性的一步。以后会更简历书写、面试笔试、大学学习、工具等文章。 大学四年&#xff0c;上课是不可能一直上课的&#xff0c;看课本也是不可能一直看课本的。 不是说老师教的不好&#xff0c;教材写的不好&#xff0c…

我是CSDN最硬核作者,谁赞成,谁反对?

也许是现在&#xff0c;也许是未来&#xff0c;我是全网最硬核的作者&#xff0c;最值得爱学习爱编程的崽崽们关注的作者。 一、介绍自己 哈喽大家好&#xff0c;我是兔老大&#xff0c;之前叫过兔兔兔兔兔兔、兔兔RabbitMQ等&#xff0c;反正都是兔子啦&#xff0c;自从大学…

当年,学姐总结奇安信18k常问面试题

她确实拿了18k&#xff0c;真人真事&#xff0c;也不是很高&#xff0c;我没必要编。 黑色字为问题&#xff0c;红色字为答案&#xff0c;空行为一个面试过程 自我介绍 家在哪&#xff0c;工作地 测试需要掌握啥 V模型W模型 最典型的V模型版本一般会在其开始部分对软件开发…