递归控制
数学归纳法:用户证明断言对所有自然数(非负整数)成立
为什么在讲解之前对数学归纳法做一个解释:在程序中,我们接触的都是数,在应用中我们难免不会对数做一些运算。归纳法就是很好的解决方法。
什么是数学归纳法:
用户证明断言对所有自然数成立:
1.证明对于N=1成立
2.证明N>1时:如果对于N-1成立,那么对于N成立
应用:求证:1+2+3+4+...+n = n(n+1)/2
1.1=1*2/2
2.如果1+2+3+...+(n-1)=(n-1)n/2
3.那么1+2+3+...+n=1+2+3+...+(n-1)+n=(n-1)n/2+n=n(n+1)/2
递归控制方法:
1、严格控制递归函数作用,包括参数,返回值
2、先一般,后特殊
3、每次调用必须缩小问题规模
4、每次问题规模缩小程度为1
编码一:给一个整数数组转化为链表,创建 1 2 3 4 5
链表的结构有二种格式:
单向链表:
双向链表:
在这里我们创建一个实体让他包裹一个链(单向链表)
//Node链表
public class Node {
private int values;
private Node nodeNext;
public Node(int values){
this.values = values;
this.nodeNext = null;
}
public int getValues(){
return values;
}
public Node getNodeNext(){
return nodeNext;
}
public void setNodeNext(Node nodeNext){
this.nodeNext = nodeNext;
}
使用方法
public static Node createLinkList(List<Integer> data){
if (data.isEmpty()) { //特殊判断
return null;
}
Node firstNode = new Node(data.get(0));
Node nextNode = createLinkList(data.subList(1, data.size()));//递归控制
firstNode.setNodeNext(nextNode);
return firstNode;
}
Java异常
Error和Exception的区别
1、error:程序无法处理的系统错误,编译器不做检查
2、exception:程序可以处理的异常,捕获后可能恢复
RuntimeException
1、NullPointerException 空指针异常
2、classCastException 类型转换异常
3、IllegalArgumentException 传递非法参数异常
4、IndexOutOfBoundsException 数组下标越界异常
5、NumberFormatException 数字格式异常
非RuntimeException(需要捕获)
1、ClassNotfoundException 找不到指定class的异常
2、IOException IO操作异常
Error
1、noClassDefFoundError 找不到class定义的异常
2、stackOverflowError 深递归导致栈被耗尽抛出的异常
3、OutOfmemoryError 内存溢出异常
在异常中,如果catch中有返回程序,会优先执行finally中的程序
Java异常处理的原则
具体明确:跑出的异常应能通过异常类名和message准确说明异常的类型和产生异常的原因;
提早抛出:应尽可能早的发现并抛出异常,便于精确定位问题;
延迟捕获:异常的捕获和处理应尽可能延迟,让掌握更多信息的作用域来处理异常。
Java集合框架
集合框架.png在Java集合框架中,我们主要关注的是List,Set.这也是面试过程中常问到的问题。
List,Set去表.png
数据结构考点
数组和链表的区别:
不同:1、链表是链式的存储结构;数组是顺序的存储结构。
2、链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。
3、链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。
4、相同:两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。
链表的操作:比如反转,链表环路检测,双向链表,循环链表操作队列,栈的应用:
二叉树的遍历方式及递归和非递归的区别:
红黑树的反转:
算法考点
内部排序:递归排序,交换(冒泡,快速),选择排序,插入排序
排序.png外部排序:
应掌握如何利用有限的内存配合海量的外部存储来处理超大的数据集,写不出来也要有相关的思路
哪些排序是不稳定的,稳定以为着什么:
稳定:
冒泡排序是通过不停的遍历,以升序为例,如果相邻元素中左边的大于右边的则交换.碰到相等的时就不交换保持原位.所以冒泡排序是一种稳定排序算法。
不稳定:
快速排序是不稳定的.举例8 5 6 6 。以8为基准,第一趟交换后最后一个6跑到第一位,8到最后.第二趟交换.这个6跑到5的位置.变成有序的了.两个6位置变了,所以是不稳定的,最常见的也就是sort函数了。
不同数据集,各种排序最好或最差的情况:
如何优化算法:
空间换时间
网络架构的发展过程
分布式
一个业务拆分成多个子系统,部署在不同的服务器上
集群
同一个业务,部署在多个服务器上
网友评论