学会复盘-d2
1.Java
1.做题
1.
2.
Java一个源程序只能有一个public类存在,且类名与文件名相同。Java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道该从哪里执行。
注意,内部类可以是public的,因为内部类是作为外部类的成员存在的。
3.
效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列 <StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized 修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上。
4.
JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)
- 栈区:
- 每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中
- 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
- 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
- 堆区:
- 存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。
- jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。
- 方法区:
- 又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
5.
数组的几种复制方法:
1.for循环逐一复制
2.System.Arraycopy
3.Arrays.Copyof:底层调用System.Arraycopy ,效率是四个中最高的。
4.clone方法
6.类之间存在哪几种常见关系
use-a 是依赖关系
has-a 一般是组合关系
is-a 一般是继承关系
7.封装、继承、多态
封装为了隐藏内部代码
继承为了提高代码的复用性
多态为了改变对象的行为
封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。
8.final
final 修饰符
final 变量:
final 变量能被显式地初始化并且只能初始化一次。被声明为 final 的对象的引用不能指向不同的对象。但是 final 对象里的数据可以被改变。也就是说 final 对象的引用不能改变,但是里面的值可以改变。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
final 方法
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
如下所示,使用 final 修饰符声明方法。
final 类
final 类不能被继承,没有类能够继承 final 类的任何特性。
9.中间件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)
10.并发
2.数据结构
1.栈
中缀表达式:就是日常我们理解的数学表达式,如:(3+4)*3
前缀表达式:就是依据栈,从右向左扫描表达式,
后缀表达式:根据栈,从左向右扫描表达式。
2.栈的基本运算
(1)InitStack(S)
构造一个空栈S。
(2)StackEmpty(S)
判栈空。若S为空栈,则返回TRUE,否则返回FALSE。
(3)StackFull(S)
判栈满。若S为满栈,则返回TRUE,否则返回FALSE。
(4)Push(S,x)
进栈。若栈S不满,则将元素x插入S的栈顶。
(5)Pop(S)
退栈。若栈S非空,则将S的栈顶元素删去,并返回该元素。
(6)StackTop(S)
取栈顶元素。若栈S非空,则返回栈顶元素,但不改变栈的状态
3.栈的应用:
1、符号匹配;
2、表达式求值;
3、实现函数调用
4.便于插入和删除的容器是:list map set
list 底层数据结构为双向链表,支持快速增删
vector 底层数据结构为数组,支持快速随机访问
map 底层数据结构为红黑树,除了hashmap无序,其他实现结构有序,不重复
set 底层数据结构为红黑树,除了hashset无序,其他实现结构有序,不重复
5.若一序列进栈顺序为e1,e2,e3,e4,e5,问存在多少种可能的出栈序列(42种)
6.对于栈来说,不需要判断栈满,需要判断栈空的情况
7.图的广度优先搜索算法需使用的辅助数据结构为:队列、
8.一个栈的入栈序列为1,2,3,...,n ,其出栈序列是 p 1 ,p 2 ,p 3 ,...p n 。若p 2 = 3,则 p 3 可能取值的个数是()