在这里插入图片描述
见面试官前,掏出来看看系列

本系列旨在为面试者见到面试官之前打发无聊时间之用
缓解面试者见到面试官之前,因为紧张而头脑一片空白又想看点知识点来提高安全感之用
# JavaSE

输入输出流(Java IO)

输入输出都称为抽象的流,流可以看作一组有序的字节集合
采用Decorator(装饰者)模型设计
使用这种设计模型的好处:运行时动态的给对象添加一些额外的职责
NIO采用了非阻塞的的方式,在处理大量并发请求时,比Socket效率高

字节流

  • 单位:字节(8bit)
  • InputStream(输入流)
    • ByteArrayInputStream
    • StringBufferInputStream
    • FileInputStream
    • PipedInputStream
    • FilterInputStream(一个封装类的基类)
      • DataInputStream
      • BufferedInputStream
      • LineNumInputStream
      • PushbackInputStream
  • OutputStream(输出流)
  • 处理输入输出是不用缓存

字符流

  • 单位:字符(16bit)
  • Reader(输入流)
  • Writer(输出流)
  • 处理输入输出用到缓存

File 类

管理文件和文件夹

  • File(String 路径)
    • 作用:根据指定路径创建一个File对象
  • creatNewFile()
    • 作用:若目录或文件存在,则返回false,否则创建文件或者文件夹
  • delete()
    • 作用:删除文件或文件夹
  • isFile()
    • 作用:判断这个对象表示的是否是文件
  • isDirectory()
    • 作用:判断这个对象表示的是否是文件夹
  • listFiles()
    • 作用:若对象代表目录,则返回目录中所有文件的File对象
  • mkdir()
    • 作用:根据当前对象指定的路径创建对象
  • exists()
    • 作用:判断对象对应的文件是否存在

Socket(套字节)

网络上的两个程序通过一个双向的通讯连接实现数据的交换。
任何一个Socket都是由IP地址和端口号唯一确定的。

  • 面向连接的Socket通信协议
    • TCP(传输控制协议)
  • 面向无连接的Socket通信协议
    • UDP(用户数据报协议)
  • Socket的声明周期
    • 打开Socket
    • 使用Socket收发数据
    • 关闭Socket

NIO(非阻塞 IO)

采用Rector(反应器)设计模式,可以处理多个事件源
在处理大量并发请求时,使用NIO要比使用Socket效率高出很多
NIO采用了非阻塞的的方式,在处理大量并发请求时,比Socket效率高

  • Selector

    • 对所有注册的Channel进行轮询访问,一旦轮询到一个Channel有注册的事件发生,进行读写操作
  • Channel

    • 双向的非阻塞通道

      采用“复用和解复用”的方式使得一个线程可以管理多个线程

  • Buffer

    • 用来保存从Channel读取/发送的数据

容器

Map

Map是用来存储键值对的数据结构

  • HashMap
  • HashTable
  • TreeMap
  • WeakHashMap

面向对象技术

重载和覆盖的区别

  • 重载(overload)
    • 定义 :一个类中,多态的表现,一个类中定义了多个同名方法,它们或有不同的参数个数、有不同的参数类型或不同的参数顺序
    • 不能通过方法的访问权限、返回值类型和抛出的异常类型来进行重载
    • 如果基类的访问权限是private,那就不能在派生类对其重载;如果派生类也定义了一个同名方法,不会达到重载的效果,算一个新的方法
  • 覆盖(override)
    • 定义 : 派生类函数覆盖基类函数,覆盖一个方法并对其重写,以达到不同的作用
    • 派生类中的覆盖方法必须要和基类中覆盖的方法有相同的函数名和参数
    • 派生类中的覆盖方法的返回值必须和基类中被覆盖的方法的返回值相同
    • 派生类中的覆盖方法所抛出的异常必须和基类(或是其子类)中的方法所抛出的异常一致
    • 基类被覆盖的方法不能为private,否则其子类只是定义了一个
  • 区别
    • 覆盖是子类和父类之间的关系;重写是同一个类中方法之间的关系
    • 覆盖只能有一个方法或一对方法产生关系;重载是多个方法之间的关系
    • 覆盖要求参数列表相同;重写要求参数列表不同
    • 覆盖关系中:调用方法体是根据对象的类型来决定 重载关系中:根据调用时的实参表与形参表来选择方法体

面向对象的特征

  • 抽象
    • 忽略一个主题中与当前目标无关的那些方面(过程抽象、数据抽象)
  • 继承
    • 子类继承父类的方法、实例变量,并且子类可以修改或新增方法
  • 封装
    • 将客观事物抽象成类,每个类有自身的数据和方法(让可信的类或对象进行操作,对不可信的进行隐藏)
  • 多态
    • 允许不同类的对象对同一消息做出响应

字符串和数组

字符串创建与存储的机制

  • String s1 = new String(“abc”) 语句 与 String s2 = new String(“abc”) 语句
    • 因为使用new,就会调用String类的构造方法,即s1和s2指向不同的内存地址
    • 若字符串中不存在“abc”,则会创建一个字符串常量“abc”,并添加到字符串池中,反之不创建。然后“new String()”会在堆中创建一个新的对象。
  • String s3 = “abc” 语句 与 String s4 = “abc” 语句
    • 因为s3和s4赋值都是“abc“所以它们引用的是同一个JVM常量池中的对象
    • 首先在常量池中查找是否存在相同的字符串被定义(依据String类的equals(Object obj)方法)若定义过,直接引用;若没定义过,先创建对象,然后加入常量池中,再将引用返回
  • String s = null
    • s是一个字符串的引用,不指向任何一个字符串
  • String s = null
    • s是一个字符串的引用,指向另外一个 ” “(空字符串) 字符串
  • String是不可变类,一旦被创建就不能被修改,因此Sring对象可以被共享而且不会导致程序混乱

”==“、equals()和hashCode有什么区别

  • ”==“
    • 用来比较变量的 值 是否相等
    • 比较 基本类型的数据 、 两个引用变量 是否相等
    • 比较两个对象是不是指向同一块存储空间
    • String s1 = new String(“abc”) 语句 与 String s2 = new String(“abc”) 语句
      • s1和s2是不同的对象,首地址不同,所以存储的数值也不同 s1 == s2 返回 false
  • equals()
    • Object类提供的,没有被覆盖的equals()方法和”==“运算符是一样的,比较的是引用
    • String类的equals()方法是用于比较两个独立对象的内容是否相同(堆中的内容是不是相同)
    • String s1 = new String(“abc”) 语句 与 String s2 = new String(“abc”) 语句
      • 虽然s1和s2首地址不同,但是两个对象中的内容是相同的,所以 s1.equals(s2) 返回 true
  • hashCode

String、StringBuffer、StringBuilder和StringTokenizer的区别

在java中的数组

  • 有 属性(length属性)
  • 有 方法(clone方法)
  • 所以数组在java中是对象

length属性、length()方法和size()方法

  • length属性
    • 获取数组的长度
  • length()方法
    • 计算字符串的长度
  • size()方法
    • 查看泛型有多少个元素

数组的初始化方式有哪几种


由于JavaSE知识内容繁杂,此文章将持续更新……觉得看后有帮助的小伙伴可以关注小名,或者收藏此文。由于本人时间,精力有限,文章中出现的错误也请大家帮忙指正~谢谢大家的阅读😁本文码字不易,还请大家多多支持小名吖!
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐