博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA基础面试小结(知识点简要)
阅读量:5264 次
发布时间:2019-06-14

本文共 2836 字,大约阅读时间需要 9 分钟。

基础知识

总结一下JAVA面试中常被问到的一些基础问题,有Star的希望读者重点关注,并熟读源码。

另外对于加Star的知识点,怕误导大家,暂时没有详细总结。希望大家熟读源码自己理解总结。谢谢!

 

String,StringBuffer,StringBuilder

StringBuffer 线程安全,速度较慢

StringBuilder 线程不安全,速度快

String final类,不可以继承

 

Static字符串常量的特点

1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期. 

2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用. 
3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象

 

Static 的作用

从属于类 不属于对象

1. static变量 全局共享 对象之间共享 方便访问

2. static方法

3. static代码块

 

Final 关键字

1. 当用final修饰一个类时,表明这个类不能被继承

2. 如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。

注:类的private方法会隐式地被指定为final方法。

3. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

 

Object有哪些基本方法

getClass()

toString()

equals()

hashCode()

wait()

notify()

notifyAll()

finalize()

clone()

equals 和 hashcode

首先equals与hashcode间的关系是这样的:

1. 如果两个对象相同(即用equals比较返回true),那么它们的hashCode值一定要相同;

2. 如果两个对象的hashCode相同,它们并不一定相同(即用equals比较返回false)  

 

线程池:Star

1. Executor

线程池顶级接口

常用方法:execute(Runnable)

作用是:启动线程任务

2. ExecutorService

Executor接口的子接口

常见方法:execute(Runnable)submit(Callable) submit(Runnable)

线程池状态:Running ShuttingDown Terminated

3. Executors

为Executor 提供工具方法,可快速提供若干种线程池。

线程池是一个进程的重量级资源。默认生命周期和JVM一致,当开启线程池后,直到JVM关闭为止,如果调用shutdown方法,那么线程池执行所有任务后,自动关闭

FixedThreadPool

CachedThreadPool (Integer.MAX_VALUE 空闲时长默认60s自动销毁)

ScheduledThreadPool

SingleThreadPool

4. ThreadPoolExecutor

核心线程

最大线程

任务队列 都是阻塞队列泛型必须是Runnable

如何实现控制5个线程并发

1. 利用Doug lee 封装的Semaphore类 acquire 和 release

2. 线程池: ThreadPoolExecutor

 

对象的可及性:

强引用:永远不会被GC回收

弱引用:当GC发现这个对象就被回收

软引用:当系统内存不足的时候,可以被GC回收

虚引用:检测对象是否被GC回收

 

Java内存模型:

方法区:静态 常量

堆 对象的实例

Java栈 对象的引用

本地方法栈

PC寄存器

分为两个部分:主内存 存放java实例对象和变量;工作内存:本地变量

操作:

Lock

Unlock

Read

Load

Use

Assign

Store

Write

特征:

原子性,有序性,可见性

 

类加载器:将类的二进制文件读取到内存当中,并放到运行时的数据区在堆去创建class对象

生命周期:加载-> 验证 -> 准备 -> 解析 -> 初始化 -> 使用 -> 卸载

常见的类加载器

启动类加载器 C语言实现 核心的lib目录下面的库

扩展类加载器 Java实现 ext目录的库

应用程序加载器

双亲委托模型

 

Java内存溢出:申请内存超出了可用内存

1. JVM栈溢出 存放 基本数据类型和基本引用

本地方法栈溢出:存放JNI(native的关键字)

方法区溢出:存放静态 和 类的信息 常量池

堆溢出:存放对象的实例

运行时常量池溢出 string

直接内存溢出

 

Java回收机制

1. 为什么有垃圾回收

方便管理内存

2. 回收哪些内存

可达性分析算法:没有被GC root引用的 会被回收

根对象:

A) 虚拟机引用的对象

B) 方法区的类静态属性引用的对象

C) 方法区中常量引用的对象

D)本地方法栈中JNI引用的对象

引用计数法

3. 垃圾回收算法

标记清除法

标记整理法 没有内存碎片

分代

年轻代: Minor GC 新生代 频率高

Eden

老年代 Major GC 老年代 频率低

常见的垃圾回收器

Serial 单线程GC

Parallel 多线程GC

GMS GC

G1 GC:jdk7引入多线程 高并发 低暂停 取代GMS GC

 

String 常量池的理解

New String(“xx”).intern() 可以转换到字符串常量池的引用

 

Java 单例

1. 懒汉式

2. 饿汉式

3. 双重校验

4. 枚举

5. 静态内部类

 

Build的作用 减少构造器

 

Volatile 保证变量的可见性

 

栈和堆的区别

存储:存储内不同 栈存储变量和引用 堆存储实例对象

速度:栈 速度快 堆 存取速度慢 因为运行时动态分配内存

线程:每个线程都有一个栈 所有线程共享一个堆

垃圾回收:栈 比较频繁

 

Equals 和 == 区别

== 引用地址比较

Eques值比较

 

JDK、JRE与JVM的区别

JDK java开发工具包

JRE java运行时的环境 包含java虚拟机,java基础类库

JVM java虚拟机

 

泛型:指定类型

注意事项:

静态方法方法中不能使用泛型

不能在catch语句中使用泛型

从泛型类派生的子类,泛型类需具体化

 

Java多态

编译时多态:表现形式重载

运行时多态:表现方法重写 与继承相关

 

集合Star

HasMap(熟读源码),HashTable之间的区别。

HashMap:首先它是线程不安全,底层是数组+链表结构(1.8之后是从尾部插入链表,链表大于8之后会转变为红黑树),负载因子是0.75

HashTable:线程安全的。

 

多线程Star

线程同步的几种方式,以及线程间通信

转载于:https://www.cnblogs.com/luisone/p/9882634.html

你可能感兴趣的文章
POJ3107 Godfather (树形DP)
查看>>
认证和授权(Authentication和Authorization)
查看>>
Mac上安装Tomcat
查看>>
CSS3中box-sizing的理解
查看>>
传统企业-全渠道营销解决方案-1
查看>>
Lucene全文检索
查看>>
awk工具-解析1
查看>>
推荐一款可以直接下载浏览器sources资源的Chrome插件
查看>>
gcd和exgcd和lcm
查看>>
货车运输-洛谷-1967-LCA+最大生成树(kruskal(并查集))
查看>>
c# 对象集合转Json
查看>>
SAP打印机配置
查看>>
SAP PI开发手册-ERP发布服务供外部系统调用(sproxy代理类)
查看>>
wav声音数据
查看>>
CRM product UI里assignment block的显示隐藏逻辑
查看>>
系统架构中的道理
查看>>
Js 实现登录验证码
查看>>
[leetcode]Path Sum II
查看>>
mysql主主同步设置
查看>>
16-类视图
查看>>