java基础(面试篇)

Java基础

1. java基本数据类型:byte,char,short,long,int,float,double,boolean。String 不是对于基本数据类型,java有它的封装类,如:int -> Integer,为什么封装,因为java一切都对象,int初始值0,Integer初始值是null。

其他区别:通过new生成的Integer变量永远是不相等的。Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true。非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false。

2. += :short s1 = 1; s1 = s1 + 1;错,因为s1+1会转化为int。 short s1 = 1; s1 +=1;对

3. byte,short,char都可以隐式转换为int,它们的包装类型也可以

4. ==和equal  差不多,就String比较是,equal是值比较,==是引用比较

5. java四个特性:封装,继承,多态,抽象。多态-->方法重载(编译多态),方法重写(运行多态),上转型

6. PriorityQueue(优先级队列):默认是数组实现的小顶堆,可以重写比较器函数 compare()改为大顶堆

7. java 创建对象4中方法  这个写的挺好的

(1) 静态编写一个类,new 一个对象

(2)myClass.class.newInstance

(3)实现Clonenable接口,重写clone()方法

(4)IO操作,序列化与反序列化

8. javaIO流分类我这篇博客有说过

9. java反射

java基础(面试篇)_第1张图片

时间:运行时

功能:能知道这个类的所有属性和方法,并可以调用。

常用方法:Class.getClass(),Class.forName(),ClassLoader.loadClass(),getdeclaremethod(等)

Class.forName(),ClassLoader.loadClass()区别:

前者会对类初始化,执行静态代码块;后者只是装载或链接,在执行newInstance时才执行静态代码块。

前者的类加载器是加载调用forName这个方法的类加载器;后者是我们制定的类加载器

10. jdk:运行环境+开发环境

jre:运行环境

注:当java用c++时需要用JNI(使Java代码和其他语言写的代码(如C/C++代码)进行交互,是一个协议、规范)【当要了解java底层一些知识是需要掌握】。

NDK:NDK可以帮助开发者快速开发C(或C++)的动态库

11.数组和List转换

  • List换数组: 调用ArrayList的toArray()
  • 数组换List: 调用Arrays的asList()

java集合框架

java基础(面试篇)_第2张图片

 java基础(面试篇)_第3张图片

java基础(面试篇)_第4张图片

Set注重独一无二的性质,该体系集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重 复。对象的相等性本质是对象hashCode值(java是依据对象的内存地址计算出的此序号)判断 的,如果想要让两个不同的对象视为相等的,就必须覆盖Object的hashCode方法和equals方法

java基础(面试篇)_第5张图片

 HashMap根据键的hashCode值存储数据,大多数情况下可以直接定位到它的值,因而具有很快 的访问速度,但遍历顺序却是不确定的。 HashMap多只允许一条记录的键为null,允许多条记 录的值为 null。HashMap 非线程安全,即任一时刻可以有多个线程同时写 HashMap,可能会导 致数据的不一致。如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。

Java8中,查找的时候,根据 hash 值我们能够快速定位到数组的 具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决 于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后, 会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。 

java基础(面试篇)_第6张图片

 

你可能感兴趣的:(笔记)