面试知识点——Java
Java容器
hashmap实现原理
存储结构是链表数组,数组的每个元素都是链表(为了解决冲突,还可以将链表变成红黑树进一步降低复杂度)。
put方法:根据Key类的hashCode函数得到散列码(这就要求Key类实现hashCode函数),根据散列码找到数组里对应的位置(散列码到下标的转换有不同方法),查找是否已经有Key(这就要求Key类实现equals函数),如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树(此时要求Key实现Comparable);
get方法:思路同上,根据hashcode函数得到散列码,查找数组相应位置
如何设计好的hashcode函数?
hash=C0;
hash=C1 * hash + field.hashcode;
//C0、C1为常数
负载因子(过大,过小),再散列
java多线程
jvm内存模型
java 垃圾回收机制
对象存活状态检查
- 引用计数法(对象添加引用计数器,优点:简单高效,缺点:对象之间循环引用)
- 可达性分析算法
垃圾收集算法
对象的判定到回收之间还有两次标记,如果对象没有实现finalize方法或者已经执行过finalize方法,则直接回收,否则对象进入待回收队列(同一对象的finalize方法最多被系统调用一次)
- 标记-清除算法
- 标记-整理算法
- 复制算法
- 分代算法
新生代由于存活率较低,适合复制算法,老年代由于存活率高,适合标记清除或者标记整理算法
垃圾收集器
垃圾收集器之间的组合
Serial:新生代,单线程,复制算法收集内存,Stop the world
ParNew:新生代,复制算法,Serial的多线程版本
Parallel Scanvenge:新生代,复制算法,多线程,注重吞吐量(用户时间/总时间)
Serail Old:老年代,单线程,标记-整理算法
Parallel Old:PS的老年代版本,多线程,标记-整理算法
CMS(Concurrent Mark Sweep):老年代,多线程,标记-清除算法,四个步骤:初始标记、并发标记、重新标记、并发清除。各个阶段的作用,CMS的缺点
G1:多线程,内存分区,新生代与老年代不再物理隔离,都由一组区域组成。G1的特点。G1维护优先列表,优先回收价值大的区域。步骤:初始标记,并发标记,最终标记,筛选回收。各个阶段的作用
内存分配与回收策略
内存分为新生代和老年代,新生代分为一块较大的eden区和两块较小的survivor区,eden区和其中一块survivor区时可用的,另一块survivor区用于复制算法放置回收的对象。
对象优先分配在新生代,如果对象过大或者年龄达到条件即可晋升到老年代。
新生代对象内存分配过程:首先查看eden区空间是否够用,不够用则进行一次minor gc到survivor区,如果survivor区也不够用,通过分配担保机制转移到老年代。
java nio
面试知识点——Java的更多相关文章
- 知名互联网公司校招 Java 开发岗面试知识点解析
天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...
- Java 面试知识点解析(一)——基础知识篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(二)——高并发编程篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(三)——JVM篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(四)——版本特性篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(五)——网络协议篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java开发岗面试知识点解析
本文作者参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编 ...
- Java 面试知识点解析(六)——数据库篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Java 面试知识点解析(七)——Web篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
随机推荐
- Mysql 5.7 CentOS 7 安装MHA
Table of Contents 1. MHA简介 1.1. 功能 1.2. MHA切换逻辑 1.3. 工具 2. 环境 2.1. 软件 2.2. 环境 3. Mysql 主从复制 3.1. Mys ...
- spring cloud Eureka注册中心集群搭建
1.创建springcloud-eureka maven项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&quo ...
- gitlab原理
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 其实,说直白点写,他就是个git服务器,和github差不多,只不过,这个gitlab可 ...
- 处理Task引发的异常
处理方法:线程启动后,使用try-catch,通过wait或者waitall来捕获异常. 单个Task的情况: System.Threading.Tasks.Task task1 = new Syst ...
- 解决redis aof文件过大的问题
执行BGREWRITEAOF命令对redis的AOF进行重写 redis-cli BGREWRITEAOF 相关解释: Redis的AOF机制有点类似于Mysql binlog,是Redis的提供的一 ...
- nginx 301重定向一种实现方法
假设要使用的域名是b.com,以前的老域名是a.com,则以下设置让nginx把a.com的请求访问转发到b.com,并返回301给浏览器. server { listen 80; server_na ...
- SQLServer中处理亿万级别的数据
在SQLServer中处理亿万级别的数据(历史数据),可以按以下方面进行: 去掉表的所有索引 用SqlBulkCopy进行插入 分表或者分区,减少每个表的数据总量 在某个表完全写完之后再建立索引 正确 ...
- ionic2/cordova自定义插件集成aar包
一.准备自定义插件 1. 准备:安装plugman npm install -g plugman 2. 新建组件 plugman create --name MyPlugin --plugin_id ...
- JMeter中BeanShell Sampler调试分享
BeanShell脚本 String s = "s"; String y = "y"; boolean result = s.equals(y); vars.p ...
- .net core webapi 后台获取客户端ip地址
Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法 1.获取客户端IP地址实现方法(扩展类) 1 using Microsoft.AspNetC ...