本周公司来学校开JAVA班的软件培训课程,主要讲解了软件开发测试流程、敏捷开发、JAVA编程规范、实战演练模拟地铁售票系统(主要实现了深度优先搜索找到最短路径)等;以下为课堂记录摘要;
------------------------------------------------------
Day1
软件开发流程预览:
[ 设计周期 ] [ 编码实现 ]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>
云化:
微服务,分而治之,面向接口
敏捷:
STORY 用户故事 贴近需求
------------------------------------------------------
Java编程规范:
String(不可变类型,每次操作都生成一个新对象) StringBuilder(操作可在同一个对象中无需新创建对象提供效率) StringBuffer()线程相关
【代码规范 代码安全 提前规避 节省时间就是延长生命】
-------------------------------------------------------
Day2
工匠精神:做就认真做,不然就是对自己生命的一种浪费。
避免编码低级错误
对象集合(hashSet)的排序是根据对象的哈希码的做哈希的key,在删除集合中的一项时不允许修改该对象的哈希码,不然会找不到
equals hashCode 重写hashCode的时候也要重写equals,不然hashCode改变了的时候集合的哈希排序失效会导致查找效率低下
hashCode默认返回对象的指针地址
String == 比较 对象的指针是否相等, 基础类型的时候才会用==,其他类型都需要equals去判断,必要时需覆盖equals方法
将不必要在循环体内的操作移到循环体外
代码性能能优化的时候要及时优化 编码能力体现在一行行代码中
涉及到IO代码的时候先定好 是否需要在本方法中释放该资源,如果需要则先要写出try catch finally块其中finally忠要释放资源
try {
//TODO
} catch () {
//TODO
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
//log
}
}
}
类型范围大小 JAVA静态语言 强类型
代码量度指标:
圈复杂度:独立路径条数 【1,10】
嵌套层数:【1,4】
有效注释比例:【5%, 20%】
有效代码行数:【1,50】
函数参数个数:【0,5】
函数变量个数:【0,5】
非结构化语句数量:【0,0】
把多个条件的组合判断的提前为:不正常的就先退出
if (a && b && c) //
改为
if (!a) return;
if (!b) return;
if (!c) return;
//
JDK > JRE > JVM
JVM中不同类对象有在堆中的各自的成员变量,但并不包含方法,因为所有的类对象都共享类方法(类方法应该是放在在栈上的)
ArrayList是线程不安全的,如果有多个线程同时操作可能会有异常比如一个在删除一个在添加
------------------------------------------------------
Day3
拥抱变化,保证自我价值
1.识别系统角色:客户、用户、其他的内部/外部用户
2.识别周边系统边界:如周边使用到的其他系统
3.需求收集:始终根据用户、客户使用系统的目的去收集需求,从每一个角色出发,反复询问 系统需要为用户提供什么服务?
4.需求建模:识别用例与参与者(用户与对应动作)-编写用例
用例模板:
用例编号:UC001
用例名称:
用例概述:
参与者:
前置条件:
后置条件:
基本事件流: 步骤1-N - 活动1-N
扩展事件流:
规则与约束:
软件设计与可视化表达:
association 关联(使用到,比如作为函数的参数)
generalization 范化(继承)
dependency 依赖
aggregation 集成,系统与部分的关系,属于依赖关系的一种
composition 组合,比集成更强的依赖关系,系统与组件不可分,生命周期一致
依赖注入:自动加载依赖的对象,如sprint中xml配置了则会在创建类的时候自动创建依赖的类?
---------------------------------------------------------
测试:
等价类:有效等价类、无效等价类
边界值
判定表方法:
--------------------------------------------------------
条件覆盖
选对行业、公司、领导
业余时间
借力,学会拒绝
做事以终为始,明确目的是什么
明确自己的优点与缺点
--------------------------------------------------------
------------------------------------------------------
Day1
软件:
自底向上发展模型
软件开发流程预览:
[ 设计周期 ] [ 编码实现 ]
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>
云化:
微服务,分而治之,面向接口
敏捷:
STORY 用户故事 贴近需求
------------------------------------------------------
云计算 分布式 集群服务:
可扩展性 高可用性
Java编程规范:
String(不可变类型,每次操作都生成一个新对象) StringBuilder(操作可在同一个对象中无需新创建对象提供效率) StringBuffer()线程相关
【代码规范 代码安全 提前规避 节省时间就是延长生命】
-------------------------------------------------------
Day2
工匠精神:做就认真做,不然就是对自己生命的一种浪费。
避免编码低级错误
对象集合(hashSet)的排序是根据对象的哈希码的做哈希的key,在删除集合中的一项时不允许修改该对象的哈希码,不然会找不到
equals hashCode 重写hashCode的时候也要重写equals,不然hashCode改变了的时候集合的哈希排序失效会导致查找效率低下
hashCode默认返回对象的指针地址
String == 比较 对象的指针是否相等, 基础类型的时候才会用==,其他类型都需要equals去判断,必要时需覆盖equals方法
将不必要在循环体内的操作移到循环体外
代码性能能优化的时候要及时优化 编码能力体现在一行行代码中
涉及到IO代码的时候先定好 是否需要在本方法中释放该资源,如果需要则先要写出try catch finally块其中finally忠要释放资源
try {
//TODO
} catch () {
//TODO
} finally {
if (fileWriter != null) {
try {
fileWriter.close();
} catch (IOException e) {
//log
}
}
}
类型范围大小 JAVA静态语言 强类型
高质量代码: 简洁、可靠、高效(最小占用资源)、可维护、可测试、可移植
代码量度指标:
圈复杂度:独立路径条数 【1,10】
嵌套层数:【1,4】
有效注释比例:【5%, 20%】
有效代码行数:【1,50】
函数参数个数:【0,5】
函数变量个数:【0,5】
非结构化语句数量:【0,0】
很多状态需要做switch对应处理的时候,可把状态码做一个哈希作为Key,建立一个对应的类来作为value,先初始化对应处理类的一个列表,
然后在switch的时候根据状态吗的哈希值直接去拿到对应对象的实例,这样可不用switch语句(缩短方法代码行数)
把多个条件的组合判断的提前为:不正常的就先退出
if (a && b && c) //
改为
if (!a) return;
if (!b) return;
if (!c) return;
//
注意代码中的魔鬼数字:修改为类的静态常量
【代码读的次数远远多于代码写的次数】
-------------------------------------------------------
代码系统无关,如路径名的分隔符/\JDK > JRE > JVM
JVM中不同类对象有在堆中的各自的成员变量,但并不包含方法,因为所有的类对象都共享类方法(类方法应该是放在在栈上的)
ArrayList是线程不安全的,如果有多个线程同时操作可能会有异常比如一个在删除一个在添加
------------------------------------------------------
Day3
拥抱变化,保证自我价值
功能性需求 + 质量需求 + 约束
1.识别系统角色:客户、用户、其他的内部/外部用户
2.识别周边系统边界:如周边使用到的其他系统
3.需求收集:始终根据用户、客户使用系统的目的去收集需求,从每一个角色出发,反复询问 系统需要为用户提供什么服务?
4.需求建模:识别用例与参与者(用户与对应动作)-编写用例
用例模板:
用例编号:UC001
用例名称:
用例概述:
参与者:
前置条件:
后置条件:
基本事件流: 步骤1-N - 活动1-N
扩展事件流:
规则与约束:
软件设计与可视化表达:
association 关联(使用到,比如作为函数的参数)
generalization 范化(继承)
dependency 依赖
aggregation 集成,系统与部分的关系,属于依赖关系的一种
composition 组合,比集成更强的依赖关系,系统与组件不可分,生命周期一致
依赖注入:自动加载依赖的对象,如sprint中xml配置了则会在创建类的时候自动创建依赖的类?
---------------------------------------------------------
测试:
等价类:有效等价类、无效等价类
边界值
判定表方法:
--------------------------------------------------------
Day4
单元测试:
语句覆盖
判断覆盖条件覆盖
工作建议:
代码:多看,多写,多讨论选对行业、公司、领导
业余时间
借力,学会拒绝
做事以终为始,明确目的是什么
明确自己的优点与缺点
--------------------------------------------------------