学会复盘-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)

  • 栈区:
  1. 每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中
  2. 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
  3. 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
  • 堆区:
  1. 存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。
  2. jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。
  • 方法区:
  1. 又叫静态区,跟堆一样,被所有的线程共享。它用于存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

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种)

f(5)=c(10,5)/6=\frac{(10-5)!}{5!}/6=42

6.对于栈来说,不需要判断栈满,需要判断栈空的情况

7.图的广度优先搜索算法需使用的辅助数据结构为:队列、

8.一个栈的入栈序列为1,2,3,...,n ,其出栈序列是 p 1 ,p 2 ,p 3 ,...p n 。若p 2 = 3,则 p 3 可能取值的个数是()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值