目录:

(1)JVM 内存区域?

(2)基本数据类型,int 初始值,integer 初始值?

(3)静态变量与实例变量区别?静态方法与非静态方法区 别?

(4)String、StringBuffer、StringBuilder 的区别?

(5)String 类的常用方法有哪些?

(6)字符串操作:如何实现字符串的反转及替换?

(7)==与 equals 的区别?

(8):接口和抽象类的区别是什么?

(9)sleep 和 wait、yield 的区别?

(10)Java 中的 final 关键字有哪些用法?

(11)try catch 中有 return,发生了异常,是走 return 还 是 finally?

(12)接口 1.8 后新特性?

(13):浅拷贝 深拷贝区别?

(14)Java 内存泄漏?

(15)什么是双亲委派模型?为什么要使用双亲委派模型?


(1)JVM 内存区域?

运行时内存划分如下区域:

方法区:存放类,静态变量,静态方法,常量(常量不等同于常量值,基本类型都属于常量值) (局部常量,成员常量,静态常量),成员方法,线程不安全

堆区:存放分配的对象,线程不安全

栈区:存放局部变量,以及运行的方法.

程序计数器:记录当前线程走到哪一步了.

本地方法栈:运行本地方法,一般是其他语言(本地方法相当于库函数,封装了对操作系统的

 (2)基本数据类型,int 初始值,integer 初始值?

8 中基本数据类型,int 初始 0,integer 初始 null

(3)静态变量与实例变量区别?静态方法与非静态方法区 别?

静态变量: 静态变量由于不属于任何实例对象,属于类的,所以在内存中只会 有一份,在类的 加载过程中,JVM 只为静态变量分配一次内存空间。

实例变量: 每次创建对象,都会为每个对象分配成员变量内存空间,实例变量 是属于实例对象 的,在内存中,创建几次对象,就有几份成员变量。

静态方法是所有对象共享的(公共的方法),

非静态方法是实例方法,必须通 过实例化对象来调用的方法。

(4)String、StringBuffer、StringBuilder 的区别?

• 第一点: 可变和适用范围。String 对象是不可变的,而 StringBuffer 和 StringBuilder 是可变字符序列。每次对 String 的操作相当于生成一个新的 String 对象,而对 StringBuffer 和 StringBuilder 的操作是对对象本身的操作,而不会生成新的对象, 所以对于频繁改变内容的字符串避免使用 String,因为频繁的生成对象将会对 系统性能产生影响。

• 第二点: 线程安全。String 由于有 final 修饰,是 immutable 的,安全性是简单而 纯粹的。StringBuilder 和 StringBuffer 的区别在于 StringBuilder 不保证同步,也 就是说如果需要线程安全需要使用 StringBuffer,不需要同步的 StringBuilder 效 率更高。

• 总结:

–操作少量的数据 = String

–单线程操作字符串缓冲区下操作大量数据 = StringBuilder

–多线程操作字符串缓冲区下操作大量数据 = StringBuffer

(5)String 类的常用方法有哪些?

• indexof(); 返回指定字符的的索引。

• charAt(); 返回指定索引处的字符。

• replace(); 字符串替换。

• trim(); 去除字符串两端空格。

• split();字符串分割,返回分割后的字符串数组。

• getBytes();返回字符串 byte 类型数组。

• length();返回字符串长度。

• toLowerCase(); 将字符串转换为小写字母。

•toUpperCase();将字符串转换为大 写字母。

• substring(); 字符串截取。

• equals(); 比较字符串是否相等。

(6)字符串操作:如何实现字符串的反转及替换?

可用字符串构造 StringBuffer 对象,然后调用 StringBuffer 中的 reverse 方法即可实 现字符串的反转,调用 replace 方法即可实现字符串的替换。

 (7)==与 equals 的区别?

区别 1. ==是一个运算符 equals 是 Object 类的方法

区别 2. 比较时的区别

• 用于基本类型的变量比较时: ==用于比较值是否相等,equals 不能直接用于基本 数据类型的比较,需要转换为其对应的包装类型。

• 用于引用类型的比较时。==运算符比较的是两个对象地址是否相同,即引用的是同一个对象;equals方法通常用于比较两个对象的内容是否相同。

 (8):接口和抽象类的区别是什么?

• 内容上的区别

• 不同:

  • 抽象类:

• 1.抽象类中可以定义构造器

• 2.可以有抽象方法和具体方法(非静态方法/静态方法)

• 3.接口中的成员全都是 public 的

• 4.抽象类中可以定义成员变量(非静态变量/静态变量,常量)

• 5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法

• 6.抽象类中可以包含静态方法

• 7.一个类只能继承一个抽象类

• 接口:

• 1.接口中不能定义构造器

• 2.可以定义抽象方法,静态方法(jdk8开始),默认方法(jdk8开始),私有方法(jdk9 开始)

• 3.抽象类中的成员可以是 private、默认、protected、public

• 4.接口中定义的成员变量实际上都是常量

• 5.一个类可以实现多个接口

• 相同:

• 1.不能够实例化

• 2.都是引用类型,都一作为方法参数和返回值类型等使用

• 3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象 方法全部进行实现,否则该类仍然需要 被声明为抽象类

• 设计层面上的区别

• 1)抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。  抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部 (行为)进行抽象。

• 2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接 口是一种行为规范,它是一种辐射式设计。

(9)sleep 和 wait、yield 的区别?

• sleep 和 wait 都是陷入了阻塞态.醒来进入就绪态.yield 陷入就绪态.

• sleep 不会释放锁,wait 会释放锁.

• sleep 是线程方法,wait 是 object 方法.

• sleep 适用于所有场景,wait 适用于同步代码块.

• sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会 给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释 放对象锁。

• wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进 入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll) 后本线程才进入对象锁定池准备获得对象锁进入运行状态。

• wait()方法为什么不写在 Thread 里面?

wait 和 notify 是两个线程之间的通信机制,每个对象都可上锁 。 在 Java 中,所有对象都有一个监视器线程在监视器上等待,为执行等待, 我们需要 2 个参数:一个线程和一个监视器(任何对象)

在 Java 设计中,线程不能被指定,它总是运行当前代码的线程。但是, 我们可以指定监视器(这是我们称之为等待的对象)。这是一个很好的设计,因 为如果我们可以让任何其他线程在所需的监视器上等待,这将导致“入侵”, 影响线程执行顺序,导致在设计并发程序时会遇到困难。请记住,在 Java 中, 所有在另一个线程的执行中造成入侵的操作都被弃用了(例如 Thread.stop 方 法)

 (10)Java 中的 final 关键字有哪些用法?

• 修饰类:表示该类不能被继承;

• 修饰方法:表示方法不能被重写;

• 修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

(11)try catch 中有 return,发生了异常,是走 return 还 是 finally?

1. 不管有没有异常,finally 块中代码都会执行;

2. 当 try.catch 中有 return 时,finally 仍然会执行;

3. finally 中最好不要包含 return,否则程序会提前退出,返回值不是 try 或 catch 中保存的返回值。

4. 在执行时,是 return 语句先把返回值写入内存中,然后停下来等待 finally 语句 块执行完,return 再执行后面的一段。

5. 至于返回值到底变不变,当 finally 调用任何可变的 API,会修改返回值;当 finally 调用任何的不可变的 API,对返回值没有影响。

(12)接口 1.8 后新特性?

java1.8 以后,接口中可定义默认(default)和静态方法(static),这两种方法都可以有具 体实现, 实现该接口的类也可继承这两种方法去直接使用,也可对其进行重写 默认方法存在的两大优势:

1. 可以让接口更优雅的升级,减少使用人员操作的负担 不必随着接口方法增加,从而修改实现代码,因为默认方法在子类中可以不用实现

2. 可以让实现类中省略很多不必要方法的空实现

(13):浅拷贝 深拷贝区别?

浅: 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的 引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主 对象里面的对象。”里面的对象“会在原来的对象和它的副本之间共享。

深:深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向 的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相 比于浅拷贝速度较慢并且花销较大。 简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍

 (14)Java 内存泄漏?

内存泄漏是:尽管对象不再被程序所使用,但垃圾回收器却无法将其回收的情况—— 因为对象仍然处于被引用的状态。 久而久之,不能被回收的内存越来越多,最终导 致内存溢出 OOM(OutOfMemoryError)。

1. 内存泄漏发生的重灾区——堆。因为堆区是用来存储新生的 Java 对象的地方, 这里也常会有不被使用的对象未被回收。为堆设置更小的内存是解决堆区内存泄漏 的常用方法。在我们启动程序的时候,便可以调整我们需要的内存空间: -Xms(初始化堆内存) –Xmx(最大堆内存)

2. 静态类型的对象的引用也会导致 Java 内存泄漏。 它在全生命周期内都不会被 JVM 回收。格外注意对关键词 static 的使用,对任何 集合或者是庞大的类进行 static 声明都会使其声明周期与 JVM 的生命周期同步,从 而使其无法回收。

3.未关闭的流 忘记关闭流也是一种导致内存泄漏发生的常见情况。一个未能关闭的流会导致两种 类型的泄漏,一种是低层资源泄漏,一种是内存泄漏。低层资源泄漏是 OS 层面的 资源,例如文件描述符,打开连接等的泄漏。JVM 会跟踪记录这些重要的资源,进 一步也就导致了内存泄漏。

4.未关闭的连接 对未关闭的连接的处理(例如数据库,FTP 服务器等)。同样,错误的实现方法也 可能导致内存泄漏。使用完连接后要及时关闭。

(15)什么是双亲委派模型?为什么要使用双亲委派模型?

类加载器,顾名思义就是一个可以将 Java 字节码加载为 java.lang.Class 实例的工具。 这个过程包括,读取字节数组、验证、解析、初始化等。另外,它也可以加载资源, 包括图像文件和配置文件

类加载器的特点: 动态加载,无需在程序一开始运行的时候加载,而是在程序运行的过程中,动态按 需加载,字节码的来源也很多,压缩包 jar、war 中,网络中,本地文件等。类加载 器动态加载的特点为热部署,热加载做了有力支持。

全盘负责,当一个类加载器加载一个类时,这个类所依赖的、引用的其他所有类都 由这个类加载器加载,除非在程序中显式地指定另外一个类加载器加载。所以破坏 双亲委派不能破坏扩展类加载器以上的顺序。

类加载器可以分为两种:一种是启动类加载器,由 C++语言实现,是虚拟机自身的 一部分;另一种是继承于 java.lang.ClassLoader 的类加载器,包括扩展类加载器、应 用程序类加载器以及自定义类加载器

 为什么双亲委派:

双亲委派保证类加载器,自下而上的委派,又自上而下的加载,保证每一个类在各 个类加载器中都是同一个类。

一个非常明显的目的就是保证 java 官方的类库\lib 和扩展类库 \lib\ext 的加载安全性,不会被开发者覆盖。 例如类 java.lang.Object,它存放在 rt.jar 之中,无论哪个类加载器要加载这个类, 最终都是委派给启动类加载器加载,因此 Object 类在程序的各种类加载器环境中都 是同一个类。

如果开发者自己开发开源框架,也可以自定义类加载器,利用双亲委派模型,保护 自己框架需要加载的类不被应用程序覆盖。

黑马Java常见面试题基础(一)相关推荐

  1. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  2. 2018常见的java面试题_2018新版Java常见面试题

    千锋西安Java编程培训班的老师总结了2018新版Java常见面试题,一起来看! 1.1.java基础 ●面向对象的特征:继承.封装.多态 继承[构造器.protected关键字.向上转型Java实现 ...

  3. 总结Java常见面试题和答案

    转载自  总结Java常见面试题和答案 int和Integer有什么区别?   答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装 ...

  4. Java常见面试题 + 答案

    Java常见面试题 + 答案 一.Java 基础 二.容器 三.多线程 四.反射 五.对象拷贝 六.Java Web 七.异常 八.网络 九.设计模式 十.Spring / Spring MVC 十一 ...

  5. Java常见面试题(2)

    Java常见面试题(2) 面向对象的三个特征 谈谈你对多态的理解 多态的好处: 什么是Java程序的主类?应用程序和小程序的主类有何不同? 为什么Java里有基本数据类型和引用数据类型 值传递和引用传 ...

  6. Java常见面试题 Java面试必看 (一)

    本篇博客是本人收集网上Java相关的资料整理所得,仅供参考. 一.Java基础 1.JDK 和 JRE区别 JDK(Java Development Kit)是针对Java开发员的产品,是整个Java ...

  7. 300+ Java常见面试题总结【JavaPub版】

    点赞再看,养成习惯 答案解析见文末 我是JavaPub,专注于面试.副业,技术人的成长记录. 这份[Java常见面试题总结]我想准备很久了,前面做面试官,后来自己也面了很多一线二线互联网公司,希望通过 ...

  8. Java常见面试题 Java面试必看 (二)

    Java常见面试题 Java面试必看 (一) 十一.Spring Boot/Spring Cloud 104.什么是 spring boot? Spring Boot 是由 Pivotal 团队提供的 ...

  9. 【面试题】Java常见面试题集锦

    Java常见面试题集锦 面试题模块 这份面试题,包含的内容了十九了模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC. ...

最新文章

  1. css3动画参数解释
  2. Ecshop文章列表页显示内容摘要
  3. 各品牌笔记本BIOS设置硬盘为兼容模式(IDE)方法
  4. opencv 转换图像为灰度
  5. 从一道面试题,到“我可能看了假源码[2]
  6. Cisco mode键的作用详解
  7. php将pdf文件存入数据库,关于tcpdf:在我的php数据库中制作pdf文件
  8. TCP相关的面试内容整理
  9. 一个figure存在多个legend:多行多列图例
  10. poj3280 Cheapest Palindrome(回文串区间dp)
  11. msdia80.dll 是干什么的?这个文件可以删除吗?
  12. 2020暨南大学计算机专硕考研经验分享
  13. win10 外接触摸屏触摸校准
  14. 机器人控制学习机器编程代码_带上机器人,让他们维护我们的代码!
  15. 计算机系统概论基本知识
  16. 搭建之星中文编程教学教程视频
  17. 完美幻灯片设计的黄金法则
  18. MVP Open Day- 微软社区大课堂招募学生啦
  19. 微信摇一摇插件ios_iOS摇一摇手机,播放微信摇一摇音效
  20. 安装和配置NFS服务器

热门文章

  1. 8月21 MATLAB元胞数组
  2. Patches Are All You Need?
  3. Connected to the target VM,address: ,transport: ‘socket‘
  4. string.h头文件
  5. Python全栈(九)Web前端基础之3.CSS常见样式和选择器
  6. 数字图像处理——第七章(小波变换和多分辨率处理)
  7. java获取当前年份(java获取当前年份后两位)
  8. JavaScript异步与同步解析
  9. Android 读取系统联系人
  10. MapReduce基本概述——分布式计算框架