1.在软件开发过程中,采用不同的过程模型。也叫软件生命周期模型。
增量模型
是把待开发的软件系统模块化,将每个模块做为一个增量组件,从而分批次的分析、设计、编码和测试这些增量组件。
优:人员分配灵活,刚开始不必投入大量人力;可先发布部分功能给客户。
缺:并行开发可能会遭遇不能继承的风险,软件必须几倍开放式的体系结构。
瀑布模型
瀑布模型要求软件开发严格按照需求 ->分析->设计->编码->测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则.瀑布模型在每一个阶段完成后都可以 组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段.
优:大型软件开发过程中人员的组织,管理,有利于软件开发方法和工具的研究。
缺:开发过程一版都不可逆转,很难按照该模型进行(需求不明确,用户的使用环境不稳定)。
螺旋模型
遵从瀑布模型的开发过程,通过将瀑布模型的多个阶段转化到多个迭代过程中。
优:灵活
缺:需要具有相当丰富的风险评估经验和专门知识;风险大
快速原型模型
…
参考:https://www.cnblogs.com/langtianya/p/4535756.html
https://blog.csdn.net/chesteralive/article/details/49403269
2.Java中值类型和引用类型
基础数据类型的赋值是值传递,数据赋值,创建同值的新对象。
引用值类型的赋值是引用传递,传递的是对象的引用地址。
3.递归
4. 比较"ABCD"与"DCBA" 字符串
比较的时候比的是ASCII码,从第一位开始比,如果第一位能比较出谁大谁小则直接返回,若相等,比较下一个字符。
常见ASCII码的大小规则,0-9<A-Z<a-z:
1)数字比字母要小。如 “7”<“F”
2)数字0比数字9要小,并按0到9顺序递增。如 “3”<“8”
3)字母A比字母Z要小,并按A到Z顺序递增。如“A”<“Z”
4)同个字母的大写字母比小写字母要小32。如“A”<“a”
二叉树,小项堆,排序算法,哈夫曼树
链表(线性单链表,双向链表,线性链表,循环链表)
TCP/IP结构及协议分层
一趟结束后能够确定一个元素的最终位置的排序方法有: 简单选择排序、快速排序、冒泡排序、堆排序
5.字符串有8个字符,那么非空子串数为8+7+…+2+1=8*9/2=36,加上一个空串,总共的子串数量为37。
6. linux命令相关
-r 将文件系统安装为只读。
-o 指定挂载文件系统时的选项
export 用于修改环境变量
env 用于创建环境变量
7.
1 、第一范式(1NF)
指数据库表的每一列(即每个属性)都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。简而言之,第一范式就是无重复的列。
二维数据表且数据表中的列不可再分 强调原子性
2、 第二范式(2NF)
第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。
第二范式(2NF)要求实体的属性完全依赖于主关键字。
所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
简而言之,第二范式就是非主属性依赖于主关键字。
3 、第三范式(3NF)
在满足第二范式的基础上,切不存在传递函数依赖,那么就是第三范式。
简而言之,第三范式就是属性不依赖于其它非主属性。
8.SQL语法
left semi join 左内匹配
left outer join 左外匹配
联合索引的最左前缀原理
MyISAM特性:
1:不支持事务、不具备AICD特性(原子性、一致性、分离性、永久性);
2:表级别锁定形式(更新数据时锁定整个表、这样虽然可以让锁定的实现成本很小但是同时大大降低了其并发的性能);
3:读写相互阻塞(不仅会在写入的时候阻塞读取、还会在读取的时候阻塞写入、但是读取不会阻塞读取);
4:只会缓存索引(myisam通过key_buffer_size来设置缓存索引,提高访问性能较少磁盘IO的压力、但是只缓存索引、不缓存数据);
5:读取速度快、占用资源比较少;
6:不支持外键约束、只支持全文检索;
7:是MySQL5.5.5版本之前的默认存储引擎;
DELETE和TRUNCATE TABLE 区别
9.在同一类中,代码块的执行顺序
在同一类中,首先静态代码块在类加载的时候就执行了,并且只执行一次,不论是否new了对象;而构造代码块和构造方法是在每次创建对象时都会被调用,并且构造代码块的执行次序优先于类构造函数。
这里插入一个相关问题:关于类的初始化问题 (结合第10点来看)
Java 语言使用 final 关键字来定义一个常量
**编译期常量:**它的值在编译期就可以确定的常量
运行时常量: 它在运行时才能确定它的值。
**对类的依赖性:**与类的创建有没有关系。
编译期常量不依赖类,不会引起类的初始化;而运行时 常量依赖类,会引起类的初始化。
编译期常量会在编译阶段存入调用类的常量池,本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。
10.
String s1="abc"这种赋值方法经常用,会建立一个对象池,出现的第一个“abc”已经入池,当第二次出现这种语句时,就是池内的内容,所以“==”比较时,是同样的内容,所以是true;第二种是用new来实例化()缺点是会产生垃圾,s3并没有入池,所以是false,如果手动入池的话就是true。
11
用ClassLoader加载类,是不会导致类的初始化(也就是说不会执行方法).Class.forName(…)加载类,不但会将类加载,还会执行会执行类的初始化方法.
12 ArrayList 扩容
new ArrayList() 初始化大小为0
调用add方法判断数组是否为空数组;若为空数组则扩容为10
此后每次扩容为原先的1.5倍
13 Object类的方法
14 线程池
public class Main {
public static void main(String[] args) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 15, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(5), new ThreadPoolExecutor.CallerRunsPolicy());
}
}
前三个参数:核心线程有5个,最大线程数是10个,keepAliveTime是15s,如果线程池中的线程大于5,那么超15s的空闲线程就会被结束,也就是说,一定会保持5个线程不会被结束。当所有任务完成后,会保持5个空闲的线程