JVM ——知识总结(面试)
1)JAVA语言是一种强语言
2)JAVA不允许使用指针访问内存,不允许使用指针数组访问内存
3)有自动收集垃圾的作用
4)方法调用时,会创建栈帧在栈中,调用完是程序自动出栈释放,而不是gc释放
5)关键字:true、false、null都不是关键字
6)静态类不能直接访问外部参数,非静态可以
7)标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。
8)构造方法的优先级一般比代码块低
9)抽象类和接口中都可以包含静态成员常量。
10)int 和 Integer 的区别
2. 序列化、反序列化
1)序列化:把对象转换为字节序列的过程,通常应用于存储或网络传输
2)反序列化:把字节序列恢复为对象的过程
JAVA使用ObjectOutputStream作为对象输出流,ObjectInputStream是对象输入流。
只有实现了Serializable和Externalizable接口的类的对象才能被序列化。Externalizable接口继承自 Serializable接口。
对象序列化包括如下步骤:
1) 创建一个对象输出流,它可以包装一个其他类型的目标输出流,如文件输出流;
2) 通过对象输出流的writeObject()方法写对象。
不适用于静态变量。
只要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。该方法不能修饰方法和类。
对象反序列化的步骤如下:
1) 创建一个对象输入流,它可以包装一个其他类型的源输入流,如文件输入流;
2) 通过对象输入流的readObject()方法读取对象。
3. 重构的概念
对软件内部结构的一种调整,在不改变软件的可观察性前提下,提高可理解性,降低修改成本。
4. 进程和线程之间的区别
1)调度:进程:资源的基本单位。线程:CPU调度和分派的单位。同一进程中,切换线程不会引起进程的切换。
2)并发:都可以并发执行。
3)资源:进程:拥有独立单位。线程:访问所属的进程的资源。
4)独立性:进程:独立地址单位和资源。线程:线程间共享。
5)系统开销:进程:涉及CPU环境等设置。线程:仅涉及寄存器的设置、保存,不涉及存储。
6)多处理机:一个进程的多个线程可以分到多个处理机中,加快并行执行。
5. Cookie 于Session区别
存储位置不同,Cookie不安全,不能保存大数据(超过4K),但能减轻服务器压力.
6. FOR和WHILE区别
FOR指令少,简洁
7. Instanceof
指出对象是否是指定类或接口的一个实例,有3种情况会返回true
1)对象是该类的实例
2)对象是该类子类的实例(有继承关系)
3)对象是继承该类的接口类的实例
8.异常
Throwable
| -- Exception
| -- RuntimeException ->空指针,越界等
| -- IO/EOP/FileNotFount/SQL...->必须try catch
| -- Error :内存/栈爆了(程序不能处理的异常)
9. Finally
1、不管是否出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
10. java中hashmap的实现原理,
HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
简单来说,HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
数组长度:roundUpToPowerOf2中的这段处理使得数组长度一定为2的次幂
以上hash函数计算出的值,通过indexFor进一步处理来获取实际的存储位置 key(hashcode)-->hash-->indexFor-->
通过以上代码能够得知,当发生哈希冲突并且size大于阈值的时候,需要进行数组扩容,扩容时,需要新建一个长度为之前数组2倍的新的数组,然后将当前的Entry数组中的元素全部传输过去,扩容后的新数组长度为之前的2倍,所以扩容相对来说是个耗资源的操作。
11. 考察了jvm的自动装箱和拆箱
装箱就是自动将基本数据类型转换为包装器类型;拆箱就是 自动将包装器类型转换为基本数据类型。
public static Integer valueOf(int i) {
if (i >= - && i <= )
return IntegerCache.cache[i + ];
//如果i的值大于-128小于127则返回一个缓冲区中的一个Integer对象
return new Integer(i);
//否则返回 new 一个Integer 对象
}
12, ASCII
JVM ——知识总结(面试)的更多相关文章
- 【JVM 知识体系框架总结】
JVM 内存分布 线程共享数据区: 方法区->类信息,静态变量 堆->数组对象 线程隔离区 虚拟机栈-> 方法 本地方法栈->本地方法库 native 堆.程序计数器 JVM ...
- [转帖]【JVM 知识体系框架总结】
[JVM 知识体系框架总结] https://www.cnblogs.com/mousycoder/p/11612448.html JVM 内存分布 线程共享数据区:方法区->类信息,静态变量堆 ...
- java前端js和框架内容知识和面试
关于数据库知识和面试 关于JAVA知识和面试 一.多个ajax请求执行顺序问题 若点击一个操作内,发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 不会,这两个异步请求会同时 ...
- 这些不可不知的JVM知识,我都用思维导图整理好了
JVM是面试中必问的部分,本文通过思维导图以面向面试的角度整理JVM中不可不知的知识. 先上图: 1.JVM基本概念 1.1.JVM是什么 JVM 的全称是 「Java Virtual Machine ...
- JVM知识(一) 求你了,别再说Java对象都是在堆内存上分配空间的了!
求你了,别再说Java对象都是在堆内存上分配空间的了! https://baijiahao.baidu.com/s?id=1661296872935371634&wfr=spider& ...
- 【转】MYSQL DBA知识了解-面试准备
http://www.itpub.net/forum.php?mod=viewthread&tid=1825849 公司招聘MySQL DBA,也面试了10个2年MySQL DBA工作经验的朋 ...
- JVM知识(一):基础原理
学过java知识和技术人,都应该听说过jvm,jvm一直是java知识里面晋级阶段的重要部分,如果想要在java技术领域更深入一步,jvm是必须需要明白的知识点. 本篇来讲解jvm的基础原理,先来熟悉 ...
- J2EE知识总结——面试、笔试
9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.html (1)接口的默认方法 (给接口添加一个 ...
- JVM知识学习与巩固
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调 ...
随机推荐
- jQuery 实现点击页面其他地方隐藏菜单
点击页面其它地方隐藏id为messageList的div 代码: $('body').delegate("#message", 'click', function(e) { var ...
- 模拟器中安装APK报Error:INSTALL_FAILED_NO_MATCHING_ABIS
1.启动AVD Manager.exe 2.将APP的安装包.apk直接拖到模拟器中,报错 3.原来是代码里由于大小限制只开放了armeabi-v7a这个ABI,但创建的模拟机支持的CPU是其他类型的 ...
- 新建Maven项目时dtd约束出错
新建或者导入Maven项目时出错:org.apache.maven.archiver.MavenArchiver.getManifesteclipse新建maven项目时,pom.xml文件第一行报错 ...
- python摸爬滚打之day15----初识类
1.面向对象和面向过程 面向过程: 以事物的流程为核心. 优点: 负责的事物流程化, 编写简单; 缺点: 可拓展性差. 面向对象: 一切以对象为核心. 对象里封装着一切. 优点: 可拓展性强; 缺点 ...
- 005-mac下Java开发工具安装,idea,maven,git,node
1.idea 官网下载:https://www.jetbrains.com/idea/download/#section=mac 1.1.双击安装即可. 1.2.打开程序,激活,网络搜索lanyu 1 ...
- java框架之SpringBoot(14)-任务
使用 maven 创建 SpringBoot 项目,引入 Web 场景启动器. 异步任务 1.编写异步服务类,注册到 IoC 容器: package zze.springboot.task.servi ...
- data日期转化
eg: var time="2018-05-19T08:04:52.000+0000"; var d = new Date(time); var times=d.getF ...
- Centos使用natapp教程
官网:https://natapp.cn/ 首先在Natapp站注册账号 点击注册 登录后,点击左边 购买隧道,免费/付费均可 根据需要选择隧道协议,这里以web演示,购买隧道 在 https://n ...
- Django框架获取各种form表单数据
Django中获取text,password 名字:<input type="text" name="name"><br><br& ...
- CentOS 7 服务端口表
# Note that it is presently the policy of IANA to assign a single well-known# port number for both T ...