Java面试复习(一)

2017年8月20日
0:24

一、基础
1.概述
Java于1995年Sun公司开发(詹姆斯·高斯林)
2.三个方向
JavaSE 、JavaME、JavaEE
3.开发步骤
①编写源码(.java)–> ② 编译(.class)–> ③运行(JDK运行.class字节码文件)
4.Java虚拟机
可运行是可运行Java字节码的虚拟计算机系统,实现Java跨平台。
内存中的栈(stack)、堆(heap)和静态区(static area)
栈(stack):基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用内存中的栈空间,栈空间操作起来最快但是栈很小。
堆(heap):通过new关键字和构造器创建的对象放在堆空间。
静态区(static area):程序中的字面量,如直接书写的100、”hello”和常量都是放在静态区中。
5.数据类型
1):基本数据类型:byte、short、int、long、float、double、char、boolean
1字节=8位
简单类型 boolean byte char short int long float double
封装器类 Boolean Byte Character Short Integer Long Float Double
二进制位数 1 8 16 16 32 64 32 64
2): 引用数据类型:类、接口、数组、String。
3):数据类型转换:由内存分配空间(二进制位数)小的向内存分配大的转换为自动转换;
反之需要强转。
6.逻辑运算符
&和&&区别:
&:无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:
|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
7.位运算符:用于操作二进制位的运算符
二进制表示负数:先取反码–>补码(负数)
5–>-5 0000 0000 0000 0000 0000 0000 0000 0101(5原码)
–>1111 1111 1111 1111 1111 1111 1111 1010(反码)
–>1111 1111 1111 1111 1111 1111 1111 1011(-5补码)

    “<<”位左移低位补0
    “>>”位右移高位补0
    “>>>”无符号右移,不管数值是正负,向高位补0
    “&”位与:取位相同的
    5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
    3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
    1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0001
    5&3=1
    “|”位或:
    5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
    3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
    7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111
    5|3=7
    “~”位非:
    5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
    -6转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010
    ~5=-6
    “^”位异或:
    5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
    3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
    6转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110
    5^3=6
8.逻辑判断条件
    If  switch  do while   while  for
9.跳转语句
    break:跳出循环,执行下一条语句,可跳至某标记,如mark:
    continue:结束当前循环,进入下次循环,也可使用标记。
    return:结束方法执行。

二、面向对象程序设计(OOP)
1.对象:用来描述客观事物的一个实体,由一组属性和方法构成。
2.构造方法及其重载:同一个类中,方法名相同(与类名相同),参数列表不同的,与返回类型无关。
3.static:修饰属性、方法、和代码块。执行顺序 类变量–>静态块–>再创建对象–>调用方法。
4.封装:将类的状态信息隐藏在类的内部,不允许外部程序直接访问。而是通过该类的特定方法来实现对隐藏信息的访问和操作。
5.继承:子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
6.方法重写:①方法名必须和被重写的方法名相同 ②参数列表相同 ③返回类型相同或为子类 ④访问权限不能缩小
7.抽象类:可以修饰类(不能实类化)、方法(子类必须重写,如不重写页为抽象类);不能修饰属性和构造器;抽象类中可以有构造器和普通方法。
8.final:可以修饰类、属性、方法,不能修饰构造器;可与抽象abstract相反记忆。终类:String、Math不能有子类。
9.多态:具有表现多种形态能力的特征。(多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。)
10.异常:object–>Throwable–>
Error(一般虚拟机抛出,如AWTError、ThreadDeath)
Exception:SQLException、ClassNotFoundException、RuntimeException。
RuntimeException:ArithmeticException、NullPointerException、
NumberFormatException
Checked异常:需要抛出的异常,比如IOException、FileNotFoundException。
自定义异常类:需继承Exception(Checked异常)、RuntimeException(RuntimeException异常)

三、高级特性
1.集合(位于java.util)
Conllection接口下有List、Set接口,ArrayList、LinkList实现了List接口,HashSet、ThreeSet实现了Set接口。

    ArrList:可为null,可重复,对数组进行封装,实现长度可变的数组,存储方式和数组相同,开辟连续空间,优点是访问数度快。
        add(obj):在末尾添加元素。
        add(index,obj):在指定下标添加元素。
        size():返回元素个数。
        get(index):获取任意下标元素。
        remove(obj):删除元素
        remove(indx):删除下标元素。
    LinkList:可为null,可重复,采用链式存储方式,有点在与插入、删除效率较高。
    HashSet:集合元素无序排列,允许为null(一个null),非线性安全。不允许有相同元素。每个元素有对应的hashcode值,所以在集合中是无序散乱的。
    ThreeSet:JavaSE中唯一自动排序的类型。

    Map接口下有HashMap、ThreeMap。
    HashMap:key-value方式存储。hashcode存储,key不允许有重复,无序,value可重复无序,线性非安全。
    ThreeMap:是红黑树算法的实现,可自动对key进行排序。
    Lterator:实现集合的遍历,Conllection的接口Lterator()方法返回一个Lterator,然后通过Lterator中的方法进行遍历;hasNext();next();
2.泛型

3.Java API
    java.lang:最基础的包,自动导入所有程序中,包含Java基础类和接口。包装类、Math类、String类等
    java.util:系统辅助类,如conllection、List、Map等
    java.io:输入输出流,对文件进行操作。
    java.net:包含与网络有关类,如Scoket、ServerSocket等类。
    java.sql:包含与数据库有关的类,如:Connection、Statement等类。
4.枚举
    Public enum Week{
        MON,TUE,WED,THU,FRI,STA,SUN
    }
5.包装类
    装箱:将基本数据类型包装成对应的引用类型,使其具有引用类型的特性。
    拆箱:将引用数据类型的对象重新简化为值类型的数据。
6.Math
    绝对值:Math.abs(-3.5)=3.5;
    最大值:Math.Max(2.5,3.5)=3.5;
    四舍五入:Math.round(11.5)=12;
    随机数:Int a=(int)(Math.Random()*10);
7.String
    str.length();获取字符串长度。
    str.equals(str2);比较字符串是否相等。
    str.equalsIgnoreCase(str2):忽略大小写比较。
    str.concat(str2):连接两个字符串。

    str.index(str2):搜索第一个出现的str2,不存在则返回-1。
    str.lastIndexOf(str2):搜索最后一个出现的str2,不存在返回-1。
    str.substring(int index,int end):提取从index开始到end结束的字符串。
    str.trim():返回不含空格的字符串。

    str.split([拆分标志],[拆分为多少]):拆分字符串。
8.StringBuffer
    StringBuffer sb=new StringBuffer("str");
    sb.toString:将sb转换为String。
    sb.append("str2"):在sb后追加str2。
    sb.insert(int index,str):将str插入sb的index下标中。
9.日期时间类
    Date:操作时间类,Date date=new Date();获取系统时间。
    Calendar:操作时间
        Calendar t=Calendar.getInstance();
        年:t.get(Calendar.YEAR);
        月,日,时,分,秒。。。。
    SimpleDateFormat:格式化时间
        SimpleDateFormat for=new simpleDateFormat(yyyy-MM-dd HH:mm:ss);
10.Random随机数
    Random rd=new Random();
    Int nu=rd.nextint(); 生成一个随机的int随机数。
    Int num=rd.nextInt(10);  生成一个0<=i<10的随机数。
11.File I/O
    创建文件:File file=new File("C:\\Users\\贵敏\\Desktop\\02.txt");
    判断文件是否存在:file.exists();
    判断是否时文件:file.isFile();
    获取路径:file.getPath();
    获取名称:file.getName();
12.Java流
    字节流
        输入流:InputStream-->FileInputStream(路径或数据源);读取文件 read();
        输出流:OutPutStream-->FileOutPutStream(路径或数据源);写入数据 write();

    字符流:
        输入流:Reader
        输出流:Writer
13.序列化与反序列化
    序列化:实现Serializable接口。
    反序列化:
14.线程
    继承Thread类创建线程实现run方法。
        start():启动线程。
        run():调用实类方法。
    使现Runnable接口实现run方法。
    线程状态:创建、就绪、运行、阻塞、死亡。
    setPrority(int a):设置线程优先级。
    sleep(long millis);线程转为阻塞。
    jion();强制执行某线程。
    yield():礼让线程,让给其它同级别或更高级别线程执行。

15.net网络编程
    1.ip地址:由32位组成,4个8位一组。
    2.端口号:0--2^16-1个
16.XML文件--可拓展性标记语言

1.解析XML文件:DOM解析、SAX解析、JDOM解析、DOM4J解析。

你可能感兴趣的:(java后端)