SE复习

SE复习

面向对象

  • 封装
    对属性私有化 用get set方法进行修改和获取
  1. 良好的封装能够减少耦合。
  2. 类内部的结构可以自由修改。
  3. 可以对成员变量进行更精确的控制。
  4. 隐藏信息,实现细节。
  • 继承
    1.使用extends关键字实现继承
    2.继承父类的属性和方法
    3.不能继承构造方法
  • 多态
    向上造型
    1.用父类的声明指向之类的对象
    2.子类的声明指向父类的对象 需要强转
    重写
    1.父子之间存在继承关系时产生方法的重写
    2.方法名称要一致
    3.参数要一致
    4.返回值也要一致
    重载
    1.方法名称必须要相同
    2.重载方法的参数组合必须不一样
    3.方法名称要一致
    4.方法重载与返回值无关
  • 抽象
    抽象类
    1.含有 abstract 修饰符 class 即为抽象类
    2.抽象方法不能用private、static、synchronized、native访问修饰符修饰
    接口
    1.特殊的抽象类
    2.接口中的所有方法都必须是抽象的
    3.接口中的方法定义默认为 public abstract 类型
    4.接口中的成员变量(只能为常量)类型默认为 public static final,必须赋初值
    区别
    • 抽象类方法
      JDK 1.8以前,抽象类的方法默认访问权限为protected(可以是public和protected)
      JDK 1.8时,抽象类的方法默认访问权限变为default(可以是public和protected或者不写)
    • 接口方法
      JDK 1.8以前,接口中的方法默认,也必须是public的(只能用public)
      JDK 1.8时,接口中的方法默认public的,也可以是default的(可以是public和default)
      JDK 1.9时,接口中的方法可以是private的(可以是public和default和private)。
    • 抽象类的属性
      四个都可以使用
    • 接口的属性
      接口属性默认(什么都不写的情况下)是public static final的,所以默认是public(只能用public)

object 11种方法

  • wait()*3
  • notify()
  • notifyall()
  • hashcode()原方法输出 this
  • equals()原方法 == 判断
  • tostring()原方法输出 this
  • clone()克隆 浅克隆 protected
    浅克隆:是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
    深克隆:不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。
    pos:当前对象的地址;son:son属性所指向的地址;name:对象的name属性。
    在这里插入图片描述
  • getclass()获取类名 返回当前运行对象
  • finalize()垃圾回收 protected
    • 垃圾判定
      1.引用计数法

      给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。

      2.可达性分析算法
      从GC Roots(每种具体实现对GC Roots有不同的定义)作为起点,向下搜索它们引用的对象,可以生成一棵引用树,树的节点视为可达对象,反之视为不可达。

      (1)虚拟机栈(栈帧中的本地变量表)中引用的对象。
      (2)方法区中的类静态属性引用的对象。
      (3)方法区中的常量引用的对象。
      (4)本地方法栈中JNI(Native方法)的引用对象。

  • 垃圾回收算法
    1.标记-清除算法
    这样导致的结果会存在很多的内存碎片。
    在这里插入图片描述
    2.复制算法
    这样虽然解决了内存内存碎片问题,但是如果对象很多,重新申请新的内存空间会很大
    在这里插入图片描述
    3.标记-整理算法
    执行完标记清除全过程之后,再一次对内存进行整理,将所有存活对象统一向一端移动
    在这里插入图片描述
    4.分代收集算法
    老年代 使用复制算法
    新年代 使用标记

String

  • String StringBuild StringBuffer 区别
    String含义为引用数据类型,是字符串常量.是不可变的对象适用与少量字符串操作 final修饰char数组
    StringBuilder可变字符序列,适用单线程下在字符缓冲区下进行大量操作的情况
    StringBuffer可变字符序列,适用多线程下在字符缓冲区进行大量操作的情况

    线程安全:StringBuffer线程安全.StringBuilder线程不安全

  • String StringBuild StringBuffer 速度
    StringBuild>StringBuffer>String


集合

  • Collections
    此类不能实例化,就像一个工具类,服务于Java的Collection框架。他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作
  • Collection
    • List
      • ArrayList 和LinkedList区别
        ArrayList是数组大小确定 LinkedList是双端链表 节点
        插入 删除 当头尾时 相差不大 当中间 时LinkedList优势大
        查找 当头尾 查找时相差不大 当中间 查找时ArrayList优势较大
        当10万以上的数据量时LinkedList才显示出优势
      • Vector和ArrayList区别
        Vector是线程安全的效率低
        ArrayList是线程不安全的效率高
    • Set
      • hashset
        底层是hashmap
        需要重写hashcode方法和equals方法
      • treeset
        实现SortedSet接口
        要求可比较实现Comparable或者Comparator接口
    • Queue
  • map
    • HashMap
      线表+链表
    • TreeMap
      红黑树
    • Hashtable
      使用synchronized来保证线程安全
      不能有null值
    • ConcurrentHashMap
      段数组是final的,并且其成员变量实际上也是final的。这可以确保不会出现死锁,因为获得锁的顺序是固定的。
      Segment数组结构(可重入锁ReentrantLock)和HashEntry数组结构组成
      锁分段技术
    • LinkedHashMap
      不允许有null值
      LinkedHashMap 是HashMap的一个子类
      保存了记录的插入顺序先得到的记录肯定是先插入的,也可以在构造时用带参数,按照应用次数排序
      LinkedHashMap的遍历速度只和实际数据有关
      HashMap的遍历速度和他的容量有关
  • 扩大集合
    • HashMap默认初始化数组的大小为16,HashTable为11。前者扩容时乘2,使用位运算取得哈希,效率高于取模。而后者为乘2加1,都是素数和奇数,这样取模哈希结果更均匀。
    • ArrayList初始大小为10,每次1.5倍进行扩容
    • HashMap 初始化大小是 16 ,扩容因子默认0.75
  • iterator

IO

字节流:InputStream(FileInputStream、ObjectInputStream、BufferedInputStream)
OutputStream
字符流:Reader/Writer
FileReader/BufferedReader
FileWriter/PrintWriter/BufferedWriter

1PrintWriter(filepath);// 默认字符集

2PrintWriter(filepath,"charset");// 指定字符集

3PrintWriter(file);// 默认字符集

4PrintWriter(file,"charset");// 指定字符集

5PrintWriter(OutputStream);// 可以指定文件追加

6PrintWriter(OutputStream, true);// 可以设置自动刷新缓冲区  println()换行输入只适用println

OutputStream os = new FileOutputStream(file,true);//是否追加
Writer w = new OutputStreamWrite(os,"gdk");//指定字符集
7PrintWriter pr= new PrintWriter(w,true);//自动刷新 println
8PrintWriter pr= new PrintWriter(w);//不会自动刷新 println

线程

  • 线程创建
    1.继承Thread
    2.实现Runnable
public interface Runnable {
    public abstract void run();
}

3.实现Callable

public interface Callable<V> {
    V call() throws Exception;
}

4.线程池:4种
ExecutorService ex = Executors.newFixedThreadPool(3);//指定最大长度
ExecutorService ex = Executors.newCachedThreadPool(); // 按需求自动增长销毁
ExecutorService ex = Executors.newSingleThreadExecutor(); // 单个线程
ScheduledExecutorService ex = Executors.newScheduledThreadPool(3); // 一个定长线程池,支持定时及周期性任务执行

  • 同步-锁的类型
    • 可重入锁
      如果锁具备可重入性
    • 可中断锁
    • 公平锁
    • 读写锁
  • 通信:wait notify notifyall
  • 线程生命周期、状态
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值