java基础
- 数据类型:8种基本的数据类型,所占的字节数以及长度,对应的封装类型。
- collection:3种接口以及实现类(list、map、set)
- 面向对象的三大特征:
- 重写和重载的区别:
- String、StringBuilder、StringBuffer的区别
- 单例模式:
- JDK、JRE、JVM三者的区别和联系:
- JVM:工作原理、引用类型、类加载、回收机制
- 接口和抽象类的区别、用法
- Throw throws的区别:
- 线程相关
二、java web开发框架
- SSH
- Jfinal
三、mysql数据库操作
四、计算机网络:
- 基础的名词、域名、IP:
- HTTP、TCP
- Get、Post的区别
五:算法:
- 排序算法;插入排序、选择排序、冒泡排序 o(N2)
- 堆排序:
数据结构全书浏览。
8种基本的数据类型:https://www.runoob.com/java/java-basic-datatypes.html
1字节=8位=1byte 位:2进制中的一个位置
4个整型、2个浮点、一个布尔、一个字符型
| Object类 | |||||||
| Number类 | Object类 | ||||||
| byte | short | int | long | Float | double | boolean | char |
位数 | 8 | 16 | 32 | 64 | 32 | 64 | 1 | 16 |
符号位 | 1 | 1 | 1 | 1 | 1 | 1 |
|
|
范围 | 2^7 | 2^15 | 2^31 | 2^63 | 7 | 15 |
| +2^15 |
正比负少1,0 | -128 +127 | -32768 32767 |
|
| 整24 浮7 | 整48 浮15 | True 1 和 false 0 | 0-65,535 没有负 |
java.lang | Byte | Short | Integer | Long | Float | Double |
| Character |
包装类: https://www.runoob.com/java/java-number.html
封装基本类型位对象,提供多种方法调用。
装箱:基本数据类型转对象
拆箱:对象转基本数据类型
这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。Number 类属于 java.lang 包。(.valueOf()返回内置数据类型, toString())以字符串形式返回值
补充:
首先,我们看一下双等号“ == ”和equals()方法的不同之处。
双等号“ == ”,对于基本数据类型,比较的是它们的值。
对于非基本类型,比较的是它们在内存中的存放地址,或者说是比较两个引用是否引用内存中的同一个对象。
equals()是在Object基类中定义的方法。
这个方法的初始行为是比较对象的内存地址,但在一些类库中,这个方法被覆盖掉了,如String,Integer,Date等。在这些类当中equals有其自身的实现(一般是比较值),而不再是比较类在堆内存中的存放地址了。
对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,它们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号“ == ”进行比较的,所以比较后的结果跟双等号“ == ”的结果相同。
Collection 接口:都在java.util 包中,属于JDK。
包含集合框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组、日期Date类、堆栈Stack类、向量Vector类等)。集合类、时间处理模式、日期时间工具等各类常用工具包。
复杂(全):
简单(简洁):
https://blog.youkuaiyun.com/Dreamhai/article/details/80570544
下面都有三种接口,List、set接口继承Collection接口。Map是util下一个独立的接口
尽管Map接口和它的实现也是集合框架的一部分,但Map不是集合,集合也不是Map。因此,Map继承Collection毫无意义,反之亦然。
Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。
Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返 回下一个元素。
3.remove()删除当前元素。
实现collection的接口的两个子接口:List Set
List: 是一个有序的集合,提供下标、索引使用户可以操作集合内部元素(类似于数组,只不过存放的是对象),与Set不同,它允许元素重复。实现List接口的类有LinkedList,ArrayList,Vector和Stack。
Set是一种不包含重复元素的集合。通过LinkedHashSet(有序)通过链表的形式保证有序。
Map(键值对:key-value)请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
ArrayList内部是由数组是实现的,而LinkList内部是由循环双向链表实现的。两个都继承了AbstractList。AbstractList 是一个抽象类,实现了List 接口。两者都是线程不安全的,想要实现线程安全,则需要加上
Hash 寻址冲突的解决办法; https://www.cnblogs.com/gongcheng-/p/10894205.html
Hashmap的实现:https://blog.youkuaiyun.com/Jae_Peng/article/details/79562432
HashMap在Map.Entry静态内部类实现中存储key-value对。HashMap使用哈希算法,在put和get方法中,它使用hashCode()和equals()方法,对象的hashCode和equals()方法。当我们通过传递key-value对调用put方法的时候,HashMap使用Key hashCode()和哈希算法来找出存储key-value对的索引。Entry存储在LinkedList中,所以如果存在entry,它使用equals()方法来检查传递的key是否已经存在,如果存在,它会覆盖value,如果不存在,它会创建一个新的entry然后保存。当我们通过传递key调用get方法时,它再次使用hashCode()来找到数组中的索引,然后使用equals()方法找出正确的Entry,然后返回它的值。属于解决hash冲突中的链地址法。
HashCode 和equils: https://www.cnblogs.com/zcjyzh/p/9329346.html
要求:1. equils值相等的两个对象,hashcode值也相等
2. hashcode值相等的两个对象,equils值不要求相等
如果重写了equils,不重写hashcode会违反第一条规定。
即重写了键对象的equils,如果不重写HashCODE,会导致自定义的相等对象灭有相同的hachcod映射值,
线程安全的是指加上了同步(操作的时候上了锁synchronize,读音:心儿阔奈子)
总结;
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
重写和重载:Java 重写(Override)与重载(Overload) https://www.runoob.com/java/java-override-overload.html
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写! (子类继承父类)
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。(常用的是构造函数)
面向对象的三大特征:抽象、继承、多态
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
https://www.runoob.com/java/java-inheritance.html
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
支持多次继承,不支持多继承。
多态; 继承-重写-父类引用指向子类对象 https://www.runoob.com/java/java-polymorphism.html
抽象:https://www.runoob.com/java/java-abstraction.html
接口和抽象类的区别:
1:类描述对象的属性和方法。接口则包含类要实现的方法
1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
注:JDK 1.8 以后,接口里可以有静态方法和方法体了。
接口:https://www.runoob.com/java/java-interfaces.html
关键字为 interface
实现接口用implemts
public interface Hockey extends Sports, Event 多继承
包; 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
Java 8新特性; https://www.runoob.com/java/java8-new-features.html
https://www.cnblogs.com/bingyimeiling/p/10266949.html
- JDK 用于开发,JRE 用于运行java程序 ;如果只是运行Java程序,可以只安装JRE,无序安装JDK。
- JDk包含JRE,JDK 和 JRE 中都包含 JVM。
- JVM 是 java 编程语言的核心并且具有平台独立性
开发过程;
使用JDK(调用Java API)编写Java源代码,存储于.java文件中。
JDK中的编译器javac.exe将Java源代码编译成为字节码,存储在.class文件中。
JRE加载、验证、执行Java字节码。
JVM将字节码解释为机器码并映射到CPU指令集或OS(操作系统)的系统调用。