11.二分查找的次数
奇数取 中间那一个作为中值
偶数个取 中间靠左
然后不断模拟这个算法
查找的最多次数:n个元素里最多查找log二N
个元素Log2 128 = 7
12.equals和hashCode
java.lang.Object类中有两个非常重要的方法:
public boolean equals(Object obj)
public int hashCode()
equals()
方法是用来判断其他的对象是否和该对象相等
默认在object的实现是return (this == obj);
但是我们知道,String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。从而进行的是内容的比较。
需要注意的是当equals()
方法被override时,hashCode()
也要被override。按照一般hashCode()
方法的实现来说,相等的对象,它们的hash code一定相等。
1、相等(相同)的对象必须具有相等的哈希码(或者散列码)。
2、如果两个对象的hashCode相同,它们并不一定相同。
hashMap相关的:
当集合要添加新的元素时,先调用这个元素的hashCode方法,如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
参考
java异常体系
两个子类:Exception(异常)和Error(错误)
Error(错误):是程序中无法处理的错误,表示运行应用程序中出现了严重的错误。此类错误一般表示代码运行时JVM出现问题
Exception(异常):程序本身可以捕获并且可以处理的异常。
Exception异常又分为两类:运行时异常和编译异常。
运行时异常(不受检异常)此类异常属于不可查异常,一般是由程序逻辑错误引起的,在程序中可以选择捕获处理,也可以不处理。
编译异常(受检异常):Exception中除RuntimeException极其子类之外的异常。如果程序中出现此类异常,比如说IOException,必须对该异常进行处理,否则编译不通过。在程序中,通常不会自定义该类异常,而是直接使用系统提供的异常类。
除RuntimeException及其子类外,其他的Exception异常都属于可查异常。编译器会检查此类异常,也就是说当编译器检查到应用中的某处可能会此类异常时,将会提示你处理本异常——要么使用try-catch捕获,要么使用throws语句抛出,否则编译不通过。
在开发中用的是?to do
13.jre 判断程序是否执行结束的标准是所有的前台线程执行完毕
后台线程就是守护线程,前台线程就是用户线程。
14. mysql主键为啥自增主键比uuid好
MySQL
默认的索引结构是B+Tree
,代表着索引节点的数据是有序的。
不过一张表中只能存在一个聚簇索引,一般都会选用主键作为聚簇索引
聚簇索引中,索引数据和表数据在磁盘中的位置是一起的
如果使用UUID
作为主键,那么每当插入一条新数据,都有可能破坏原本的树结构。但使用自增ID
就不会有这个问题,所有新插入的数据都会放到最后。
15.什么是跨域?
- 协议不同:如 http 和 https;
- 域名不同
- 端口不同
springboot 的解决方法
**使用 @CrossOrigin 注解实现跨域 **修饰类,也可以修饰方法
通过配置文件实现跨域;
添加 @Configuration 注解,实现 WebMvcConfigurer 接口;
重写 addCorsMappings 方法,设置允许跨域的代码。
通过 CorsFilter 对象实现跨域;
和上一种实现方式类似,它也可以实现全局跨域
@Configuration // 一定不能忽略此注解
public class MyCorsFilter {
@Bean
public CorsFilter corsFilter() {
// 1.创建 CORS 配置对象
CorsConfiguration config = new CorsConfiguration();
通过 Response 对象实现跨域;
response.setHeader(“Access-Control-Allow-Origin”, “*”); return new HashMap<String, Object>() {{ put(“state”, 200); put(“data”, “success”); put(“msg”, “”); }};
通过实现 ResponseBodyAdvice 实现跨域。(过滤器来实现跨域)
是对返回结果进行处理 切面编程!