1、在数据流图中,用标有名字的箭头表示数据流,即眼箭头方向传送数据的通道,一般在旁边标注数据流名。在程序流程图中,用标有名字的箭头表示控制流
2、结构化程序设计的思想(基本原则)包括:自顶向下、逐步求精、模块化、限制使用goto语句
3、软件设计中模块划分应遵循的原则是高内聚低耦合、模块大小规模适当、模块的依赖关系适当等。
模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。
(耦合性是模块间互相连接的紧密程度的度量,而内聚性是指一个模块内部各个元素间彼此杰结合的紧密程度)
4、在软件开发中:
需求分析阶段产生的主要文档是软件需求规格说明书
可行性分析阶段产生的主要文档是可行性分析报告
总体设计阶段产生的主要文档是概要设计说明书
概要设计阶段编写的主要文档是集成测试计划
5、算法的有穷性是指算法程序的运行时间是有限的
算法的空间复杂度指算法在执行过程中所需要的计算机存储空间。
6、对长度为n的线性表排序,在最坏情况下,冒泡排序、快速排序和直接插入排序的比较次数都是n(n-1)/2,堆排序算法的计较次数是O(nlog2(n))
7、数据库设计的四个阶段:
需求分析阶段:
概念设计阶段:
逻辑设计阶段:E-R图转化成关系数据模型(把图行分析出来的联系反映到数据库中,即设计出表)(实体和联系都可以表示成关系)
物理设计阶段:
补充:在E-R图中实体集用矩形表示,属性用椭圆表示,联系用菱形表示
8、Java的三种注释方法:
//注释的内容:单行注释
/....../:多行注释
/*....../:这种方式和第二种方式相似。这种格式是为了便于javadoc程序自动生成文档。
9、Java中:extends 继承类,implements 实现接口
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,
Java中不支持多重继承,但是可以用接口来实现,这样就要用到implements,
继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 ,比如 class A extends B implements C,D,E
10、在Java的异常处理中,无论是否发生异常,其后的代码块都会被执行的关键字是finally
11、RandomAccessFile类同时实现了DataInput和DataOutput接口
12、 派生出大多数Swing组件的类是Container
13、栈(先进后出的线性表)按照先进后出的原则组织数据,所以入栈最早的最后出栈。数据的插入和删除都是在栈顶进行操作
栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点
14、循环队列是线性结构,有队头和队尾两个指针;
在循环队列中需要队头指针和队尾两个指针来共同反映队列中元素的动态变化情况,即由队头指针和队尾指针共同决定
循环队列是线性结构的线性表
循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针
队列是先进先出的线性表
补充:带链队列、带链栈是线性结构。
树是简单的非线性结构,所以二叉树作为书的一种也是一种非线性结构
15、当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2(n)次,而顺序查找需要比较n次
16、链式存储结构既可以针对线性结构也可以针对非线性结构
顺序存储结构只针对线性结构
顺序存储结构的存储一定是连续的,链式存储结构的存储不一定是连续的
链式存储结构中的每个结点都由数据域与指针域两部分组成,增加了存储空间,因此顺序存储结构比链式存储结构节省存储空间
17、几种图介绍:
N-S图:也被称为盒图或NS图(Nassi Shneiderman图),是结构化编程中的可视化建模。用方框图来代替传统的程序流程图
特点:
1)形象直观,功能域明确,具有良好的可见度;
2)很容易确定局部和全局数据的作用域;
3)不可能任意转移控制;
4)很容易表示嵌套关系及模块的层次关系;
5)复杂度接近代码本身,修改需要重画整个图;
6)它强制设计人员按SP方法进行思考并描述他的设计方案,因为除了表示几种标准结构的符号之处,它不再提供其他描述手段,这就有效地保证了设计的质量,从而也保证了程序的质量。
PAD图(问题分析图):是继承程序流程图和方框图的又一种主要用于描述软件详细设计的图形表示工具
E-R图:也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
成分:矩形框,菱形框,椭圆形框,连线
矩形框:表示实体,在框中记入实体名。
菱形框:表示联系,在框中记入联系名。
椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其名称下划一下划线。
连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。)
18、在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表
19、在面向对象方法中,对象有如下一些基本特点:表示唯一性、分类性、多态性、封装性、模块独立性好
20、在数据管理技术发展的三个阶段(人工管理阶段->文件系统阶段->数据库系统阶段)中,数据共享最好的是数据库系统阶段
数据库管理系统是数据库的结构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是一种在操作系统支持下的系统软件
21、与其他面向对象语言相比,Java语言突出的特点是解释型,与平台无关
22、运算符:
+:加
-:减
*:乘
/:除,取结果
%:取余
a++:先输出a的原值,后做+1运算
++a:先做+1运算,再输出计算之后的值
a--:先输出a的原值,后做-1运算
--a:先做-1运算,再输出计算之后的值
&&:逻辑与(都对则对,一个错两个都错:true&&true==true,true&&false==false,false&&false==false)
||:逻辑或(一个对两个都对:true||false==true,true||true==true,false||false==false)
!:逻辑非(!true==false)
&:位与(和&&一样的判断true和false,当&两边不是判断条件而是数字时,结果为&右边的那个数,例如:8&2==2,8&8==8)
|:位或(和&||一样的判断true和false,当|两边不是判断条件而是数字时,结果为|右边的那个数)
~:取反(应用于数字的取反,~a=-(a+1)。~123=-124)
^:位异或(应用与true和false以及数字.当a,b是两个数时,如果a>b,a^b==a+b;如果a<=b,a^b==b-a),判断ture和false的情况如下:
true^true==false true^false==true false^true==true false^false==false
<<:左移位(a<<b,将a转化成二进制数之后,二进制数的小数点右移b个单位,再转化成十进制。即a<<b==a乘以2的b次方)
>>:右移位(a>>b,将a转化成二进制数之后,二进制数的小数点左移b个单位,再转化成十进制。即a>>b==a除以2的b次方)
>>>:无符号右移位(a>>>b,
当a>=0时,将a转化成二进制数之后,二进制数的小数点左移b个单位,再转化成十进制。即a>>b==a除以2的b次方。
当a<0时,将转化成二进制数之后,取反码的补码,补码的小数点左移b个单位,再转化成十进制。)
+=:相加结果赋予左侧(即a+=b等价于a=a+b)
-=:相减结果赋予左侧(即a-=b等价于a=a-b)
*=:相乘结果赋予左侧(即a*=b等价于a=a*b)
/=:相除结果赋予左侧(即a/=b等价于a=a/b)
%=:取余结果赋予左侧(即a%=b等价于a=a%b)
&=:与结果赋予左侧(即a&=b等价于a=a&b)
|=:或结果赋予左侧(即a|=b等价于a=a|b)
^=:异或结果赋予左侧(即a^=b等价于a=a^b)
<<=:左移结果赋予左侧(即a<<=b等价于a=a<<b)
>>=:右移结果赋予左侧(即a>>=b等价于a=a>>b)
>>>=:无符号右移结果赋予左侧(即a>>>=b等价于a=a>>>b)
三元运算符:条件表达式 ? 值1:值2(如果条件式的值为true,则整个表达式取"值1",负责取"值2")
运算符优先等级:
1、括号:()
2、正、负号:+、-
3、 一元运算符:++、--、!
4、 乘、除:*、/、%
5、 加、减:+、-
6、 移位运算:>>、<<、>>>
7、 比较大小:<、>、<=、>=
8、比较是否相等:==、!=
9、位与运算:&
10、位异或运算:^
11、位或运算:|
12、逻辑非运算:&&
13、逻辑或运算:||
14、三元运算符:? :
15、赋值运算符:=
23、switch:
能用于switch判断的类型有:byte、short、int、char(JDK1.6),还有枚举类型,但是在JDK1.7后添加了对String类型的判断
case语句中少写了break,编译不会报错,但是会一直执行之后所有case条件下的语句而不再判断,直到default语句
case语句中的值必须是常量
若果没有符合条件的case就执行default下的代码块,default并不是必须的,也可以不写
以下代码输出为:A
public static void main(String[] args) {
String a = "A";
switch (a){
case "B":
System.out.print("B");
break;
case "A":
System.out.print("A");
break;
case "C":
System.out.print("C");
break;
}
}
以下代码输出为:AC
public static void main(String[] args) {
String a = "A";
switch (a){
case "B":
System.out.print("B");
case "A":
System.out.print("A");
case "C":
System.out.print("C");
break;
}
}
24、Java语言的四大特性:抽象、封装、多态和继承
25、方法重载(method overloading):[摘录来源](https://blog.csdn.net/xkfanhua/article/details/80561673)
补充:重载属于Java多态机制
在Java中,同一个类中的多个方法可以有相同的方法名称,但是有不同的参数列表,这就称为方法重载。
参数列表又叫参数签名,包括参数的类型、参数的个数、参数的顺序,只要有一个不同就叫做参数列表不同。
重载时面向对象的一个基本特性。
以下为代码例子:
public class Demo1 {
//一个普通的方法,不带参数,无返回值
public void add(){
//method body
}
//重载上面的方法,并且带了一个整型参数,无返回值
public void add(int a){
//method body
}
//重载上面的方法,并且带了两个整型参数,返回值为int型
public int add(int a,int b){
//method body
return 0;
}
}
通过上面的例子,不难看出,重载就是在一个类中,有相同的函数名称,但形参不同的函。重载的结果,可以让一个程序段尽量减少代码和方法的种类。
说明:
1、参数列表不同包括:个数不同、顺序不同、类型不同
2、仅仅参数变量名称不同是不可以的
3、跟成员方法一样,构造方法也可以重载
4、声明为final的方法不能被重载
5、声明为static的方法不能被重载,但是能够被再次声明
方法重载的规则:
1、方法名称必须相同
2、参数列表必须不同
3、方法的返回类型可以相同亦可以不相同
4、仅仅返回类型不同不足以称为方法的重载zhuo
方法重载的实现:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,已选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨
26、equals方法:用于判断两个字符串是否完全相等(结果为Boolean类型)
contact方法:用于字符串(String)的连接
replace()方法:通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。
public String replace(char oldChar,char newChar)
例如,以下代码结果为:China$$Dream
public static void main(String[] args) {
String s1="China";
String s2=s1.concat("Dream");
String s3=s2.replace("aD","a$$D");
System.out.println(s3);
}
27、Java各种常见异常:https://blog.csdn.net/yangzhengjianglove/article/details/81233784
补充:
异常发生时,输出堆栈使用的跟踪方法是printStackTrace()
try-catch语句中:catch中的对象类型是try中可能抛出的异常类或其父类
28、HashMap:使用<关键字,值>的形式保存数据,允许将null用作关键字,也允许将null用作值。但是不能够保证其中元素的顺序。
TreeMap:使用方法与HashMap使用方法相同,但是会对其中的元素自动排序
29、字节流、字符流
必看文章:[https://www.cnblogs.com/progor/p/9357676.html]
(https://www.cnblogs.com/progor/p/9357676.html)
补充:OutputStream中的flush()方法的功能是:把缓冲的全部字节写入输出流
PipedInputStream类是实现线程之间通信的类
InputStream类中available()方法的功能是返回输入流中可读字节数
Reader是输入流,Writer是输出流
补充:
代码实例1:运行结果为:生成文件abc.txt,且该文件内容为test
public class test9 {
public static void main(String[] args) {
try {
PrintWriter out = new PrintWriter(new FileOutputStream("d:\\abc.txt"));
String content ="test";
out.print(content);
out.close();
} catch (FileNotFoundException e) {
System.out.println("File Not Found!");
}
}
}
注意点:此题的陷阱在于catch中的错误提示,本题的代码作用是在d盘中生成新的文件abc.txt,不需要判断d盘中是否有该文件
30、JOptionPane:
基本结构为:JOptionPane.showMessageDialog(null, “消息对话框”,”提示框名字”,JOptionPane.INFORMATION_MESSAGE);
四种消息提示框方法:
showConfirmDialog():确认对话框
showInputDialog():输入对话框
showMessageDialog():消息对话框
showOptionDialog():选择对话框
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE
INFORMATION_MESSAGE
WARNING_MESSAGE
QUESTION_MESSAGE
PLAIN_MESSAGE
转载:https://blog.csdn.net/tjk123456/article/details/77868034
31、Java线程构成:代码、虚拟的CPU、代码所操纵的数据
补充:线程是Java程序中的单个执行流
为了使线程之间同步,通常使用的方法是wait()和notify()
代码实例(线程启动方法):
public class ThreadTest extends Thread{
public static void main(String[] args) {
ThreadTest b = new ThreadTest();
b.start();
}
public void run(){
System.out.println("insist on");
}
}
new Runnable() {
@Override
public void run() {
}
};
32、对象锁:
当synchronized(){}语句块执行完毕后,对象锁将自动释放;
当在当synchronized(){}语句块中出现异常时,对象锁将自动释放;
线程A在当synchronized(){}块中调用x.wait(),则A将释放对象x的锁
在对共享对象加锁以实现并发控制时,使用的关键字时synchronized
33、Applet:可由浏览器自动调用的方法是:init()方法,start()方法,paint()方法
可能被多次调用的是:start()和stop()
init()方法用来完成主类实例的初始化工作,
start()方法用来启动浏览器运行Applet的主线程
paint()方法的主要作用是在Applet的界面中显示文字,图形和其他界面表示元素
属于Applet生命周期的方法是:start(),destroy()
参考文章:https://www.runoob.com/java/java-applet-basics.html
34、笛卡尔积:简单的来说就是两个集合相乘的结果,比如集合A{a1,a2,a3} 集合B{b1,b2}
他们的笛卡尔积是 A*
B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)},即任意两个元素结合在一起
自然连接:自然连接是一种特殊的等值连接,他要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉
自然连接算法易懂讲解:https://zhidao.baidu.com/question/498844735021942444.html
自然连接算法详细讲解:https://wenku.baidu.com/view/b4e78276910ef12d2af9e7eb.html
投影运算:对于关系内的域指定可引入新的运算(在原有关系的内部进行,即关系R—>关系S)
35、实例方法(对象方法)与类方法:
二者的区别:
实例方法的方法类型前没有static,类方法的方法类型前有static
类方法可以通过类名调用,调用格式为类名+方法名,而实例方法不能通过类名调用,只能通过类创建对象,然后通过对象调用,即实例方法只能通过对象来调用
类方法不能操作实例变量。因为在类创建对象前实例成员变量还没有分配内存,与此同时,类的实例方法也不会分配入口地址。因此,只有该类创建对象后,类的实例方法才会分配入口地址
类方法是属于整个类的,而实例方法是属于类的某个对象的
在类方法中调用本类的类方法可直接调用
类方法的限制:类方法中不能引用对象变量;类方法中不能调用类的对象方法;在类方法中不能使用super、this关键字;类方法不能被覆盖
实例方法(对象方法):对象方法中可以引用对象变量,也可以引用类变量;对象方法中可以调用类方法;对象方法中可以使用super、this关键字
36、软件测试的目的是为了发现错误而执行程序的过程(并不涉及改正错误)
程序调试的基本步骤:错误定位、修改设计和代码,已排除错误、进行回归测试、防止引进新的错误。
程序调试通常称为Debug,即排错。
软件测试的基本准测:所有测试都应追溯到需求、严格执行测试计划,排除测试的随意性、充分注意测试中的群集现象、程序员应避免测试自己的程序、穷举测试不可能、妥善保存测试计划等文件
37、Java基本数据类型(String不属于):boolean,char,float,byte,short,int,long,double
38、Java命名规范
1、项目名全部小写
2、包名全部小写
3、类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写
4、变量名、方法名首字母小写,如果名称由多个单词组成,第一个单词后的每个单词的首字母都要大写
5、常量名必须大写
6、所有命名规则必须遵循以下规则:
1)、名称只能由字母、数字、下划线、$符号组成
2)、不能以数字开头
3)、名称不能使用JAVA中的关键字。
4)、坚决不允许出现中文及拼音命名。
39、跳转语句:
break:跳出全部循环,在switch选择结构中也可以使用
continue:跳出本次循环,选择结构不认同
goto:
static void Main(string[] args)
{
goto Mark;
Console.WriteLine("第一行");
Mark:
Console.WriteLine("第二行");
}
return:如果方法有返回值类型return就返回值,在void中也可以使用return,这样的话,return后面的语句就不会执行
throw:抛出异常,后面语句也不会执行,跳转到捕捉异常的地方(有try-catch的地方)
40、二叉树的基本性质3:在任意一颗二叉树中,度为0的叶子节点总是比度为2的结点多一个
41、数据库应用系统中的核心问题是数据库的设计
42、Vector类中,在集合的最后增加一个元素的方法是addElement()
43、将内存缓冲区内容转换成字符串的方法是toString(String charsetName)
44、将一个文件的内容写到另一个文件
public class test5 {
public static String file ="d:\\book1.java";
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new FileReader("d:\\book1.txt"));
PrintWriter out = new PrintWriter(file);
String s =null;
while ((s=in.readLine())!=null){
out.write(s);
}
out.close();
in.close();
}
}
45、javax.swing.text包提供的功能是支持文档的显示和编辑
46、键盘事件处理方法:keyPressed(keyEvent);keyRelased(keyEvent);keyTyped(keyEvent)
注意:keyDown(keyEvent)不属于键盘监听事件
47、param标签
语法格式:<param name="参数名称"/>或<param name ="名称">
标签属性:name(定义参数的名称(用在脚本中),必须参数),type(定义MIME类型参数,html5不支持),value(描述参数值),valuetype(规定值的MIME类型,值:ata、ref、object(html5不支持))
代码实例:将参数 "autoplay" 设置为"true",音频会自动播放
<object data="1.mp4">
<param name="autoplay" value="true">
</object>
48、web中通常使用的传值方法:
1、request,response
request.getAttribute(参数名);
request.setAttribute(参数名,值)
2、session:同一用户同一界面
HttpSession hs = request.getSession(true);
hs.setAttribute(参数名,值);
hs.getAttribute(参数名)
3、ServletContext:同一用户不同界面
ServletContext sc = this.getServletContext();
sc.setAttribute(参数名,值);
sc.getAttribute(参数名);
49、几种类及其修饰符的描述:
abstract类只能用来派生子类,不能用来创建abstract类的对象
abstract不能与final同时修饰一个类
abstract方法必须在抽象类中声明,但abstract类定义中可以没有抽象方法
50、Java 中基本数据类型不算对象,但是每个基本数据类型都有对应的包装类,比如int的包装类就是Integer,同样的float->Float,short ->Short ,long-> Long,double-> Double,byte-> Byte,char-> Character,boolean->Boolean
例如:a和b都是整数类型变量并且他们的值相等
a=Integer.parseInt("1024");
b=Integer.valueOf("1024").intValue;`
补充:基本数据类型的字节及位数:
byte:1,8
short:2,16
int:4,32
long: 8,64
float: 4,32
double:8,64
char:2,16
boolean:1,8
51:String,StringBuffer,StringBuilder的用法及其区别
参考文章:https://blog.csdn.net/qq_37856300/article/details/84340288
补充:
代码实例1:输出结果为Hellothere
public class test8 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("Hello");
if ((s.length()>=5)&&(s.append("there").equals("False"))){
s.replace(0,6,"False");
}
System.out.println(s);
}
}
注意:append()方法已经被调用
代码实例2:输出结果为HFalseHHH
public class test8 {
public static void main(String[] args) {
StringBuffer s = new StringBuffer("HelloHHHH");
s.replace(1,6,"False");
System.out.println(s);
}
}
注意点:
replace()方法
1、代码结构:replace(start,end,String);
2、注意点:start为索引位置,例如replace(0,5,"a"),其是将索引位置为0到4,即[0,5)的元素置换为a
代码实例3:输出结果为s1.equals(s2)
public class test8 {
public static void main(String[] args) {
String s1 ="abc"+"def";
String s2 = new String(s1);
if (s1==s2){
System.out.println("s1==s2");
}
if (s1.equals(s2)){
System.out.println("s1.equals(s2)");
}
}
}
代码实例4:输出结果为aceg
public class test8 {
public static void main(String[] args) {
String s = "abcdefg";
for (int i=0;i<s.length();i+=2){
System.out.print(s.charAt(i));
}
}
}
52: