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

标准ASCII只使用7个bit,扩展的ASCII使用8个bit。
ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。不同 ANSI 编码之间互不兼容。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。
ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,即ASCII码
ASCII码包含一些特殊空字符
 

JVM ——知识总结(面试)的更多相关文章

  1. 【JVM 知识体系框架总结】

    JVM 内存分布 线程共享数据区: 方法区->类信息,静态变量 堆->数组对象 线程隔离区 虚拟机栈-> 方法 本地方法栈->本地方法库 native 堆.程序计数器 JVM ...

  2. [转帖]【JVM 知识体系框架总结】

    [JVM 知识体系框架总结] https://www.cnblogs.com/mousycoder/p/11612448.html JVM 内存分布 线程共享数据区:方法区->类信息,静态变量堆 ...

  3. java前端js和框架内容知识和面试

    关于数据库知识和面试 关于JAVA知识和面试 一.多个ajax请求执行顺序问题 若点击一个操作内,发送两个ajax请求,其中一个请求会不会等待另一个请求执行完毕之后再执行? 不会,这两个异步请求会同时 ...

  4. 这些不可不知的JVM知识,我都用思维导图整理好了

    JVM是面试中必问的部分,本文通过思维导图以面向面试的角度整理JVM中不可不知的知识. 先上图: 1.JVM基本概念 1.1.JVM是什么 JVM 的全称是 「Java Virtual Machine ...

  5. JVM知识(一) 求你了,别再说Java对象都是在堆内存上分配空间的了!

    求你了,别再说Java对象都是在堆内存上分配空间的了! https://baijiahao.baidu.com/s?id=1661296872935371634&wfr=spider& ...

  6. 【转】MYSQL DBA知识了解-面试准备

    http://www.itpub.net/forum.php?mod=viewthread&tid=1825849 公司招聘MySQL DBA,也面试了10个2年MySQL DBA工作经验的朋 ...

  7. JVM知识(一):基础原理

    学过java知识和技术人,都应该听说过jvm,jvm一直是java知识里面晋级阶段的重要部分,如果想要在java技术领域更深入一步,jvm是必须需要明白的知识点. 本篇来讲解jvm的基础原理,先来熟悉 ...

  8. J2EE知识总结——面试、笔试

    9.2 jdk 1.8的新特性(核心是Lambda 表达式) 参考链接:http://www.bubuko.com/infodetail-690646.html (1)接口的默认方法 (给接口添加一个 ...

  9. JVM知识学习与巩固

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 我们运行和调 ...

随机推荐

  1. 20165317Java实验五 网络编程与安全

    实验五 网络编程与安全 一.中缀转后缀 参考http://www.cnblogs.com/rocedu/p/6766748.html#SECDSA 结对实现中缀表达式转后缀表达式的功能 MyBC.ja ...

  2. Docker入门6------生产力工具rancher

    rancher的安装: https://blog.csdn.net/wh211212/article/details/80932264 安装 一行命令就可以安装 sudo docker run -d ...

  3. 13.0-uC/OS-III上下文切换

    1.当uC/OS-III转向执行另一个任务的时候,它保存了当前任务的CPU寄存器到堆栈.并从新任务的的堆栈中CPU寄存器载入CPU.这个过程叫做上下文切换. 上下文切换需要一些开支. CPU的寄存器越 ...

  4. gzframework demo搭建

    感谢框架作者,这里给出他的博客 http://www.cnblogs.com/GarsonZhang/ 背景:由于作者对代码的持续开发,导致了以前博客中的下载地址和构建方法和目前的项目不对应,这里给出 ...

  5. Viewer.js插件浏览图片

    https://www.jianshu.com/p/e3350aa1b0d0 Viewer.js插件浏览图片 Viewer.js插件浏览图片 Viewer.js插件浏览图片

  6. [js]设计模式小结&对原型的修改

    js设计模式小结 工厂模式/构造函数--减少重复 - 创建对象有new - 自动创建obj,this赋值 - 无return 原型链模式 - 进一步去重 类是函数数据类型,每个函数都有prototyp ...

  7. Java 基础 IO流(转换流,缓冲)

    一,前言 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStr ...

  8. break,continue的区别

    break 终止循环, continue 跳出本次循环,进入下一次循环 username = 'Loker'passwd = '123456' for i in range(3): user = in ...

  9. CentOS 7 开机延迟解决办法

    遇到这种情况 , 开机延迟 ,  可以用下面的办法来查看 , 寻找到问题的源头 , 来看看到的是怎么回事 [root@DaMoWang ~]# dmesg |grep udev #显示系统的启动信息 ...

  10. day09 python之函数进阶

    楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y): m = x if x>y else y return mbigger = my_max(10,20)print ...