equal和==区别

1.比较基本类型

只能用==,不能用equal,这里的==比较的是两个变量的值

2.比较包装类型

==比较的是内存地址,而equal比较的是值

3.比较String类型

==比较的是内存地址,equal比较的是值

4.比较对象

==和equal比较的都是内存地址,因为equal没有被重写,没有被重写的equal都是object的equal方法

int Integer new Integer

使用equals的时候,全部为true(因为equals比较的是值)
使用==的时候
1.int和Integer、new Integer都为true,因为会进行拆箱
2.Integer和Integer进行比较的时候,如果是-128~127之间,则为true,否则为false
3.Integer和new Integer进行比较的时候,都为false
4.new Integer和new Integer比较的时候,都为false,因为地址不同

redis的类型

string list set sorted set hash

spring ioc

读取配置文件 beandefinition 实例化(beanpostprocessor init-method afterbeanPostProcessot) 初始化 装进容器

spring框架中用了哪些设计模式

(1)工厂模式:BeanFactory 就是简单工厂模式的体现,用来创建对象的实例;

(2)单例模式:Bean 默认为单例模式。singleton

(3)原型模式:prototype

(3)代理模式:Spring 的AOP 功能用到了JDK 的动态代理和CGLIB 字节码生成技术;

(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。

(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知被制动更新,如Spring 中listener 的实现–ApplicationListener。

mysql的索引什么时候失效?

1、带有运算

2、使用函数

3、使用%XXX左模糊查询,因为mysql是最左原则,使用XXX%右模糊查询是可以使用索引的,但是左模糊违背了最左原则所以不行

4、使用范围运算,not in,in > ,<都不行

5、查询的字段不是索引的最左字段,同样是因为最左原则

6、字段类型不匹配,常见的隐式数据类型转换,mobile=1356不会走索引,会转换为字符串可以查询但是,mobile='1356’会走索引

7、or条件左边的是索引字段,右边的不是。也不会走索引,因为or是一个并集

线程池核心参数

核心线程数
最大线程数
存活时间
阻塞队列
拒绝策略
(1)抛异常 java.util.concurrent.ThreadPoolExecutor.AbortPolicy。

(2)由调用者执行任务 java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy。

(3)丢弃任务 java.util.concurrent.ThreadPoolExecutor.DiscardPolicy。

(4)丢弃最早排队任务 java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy。

线程池的种类

单一线程池 newSingleThreadExecutor
可缓存线程池 newCachedThreadPool
延时任务线程池 ScheduledThreadPool
固定线程池 newFixedThreadPool

微服务

springcloudalibaba 心跳

redis持久化的两种方式

rdb (redis database):定期缓存所有的数据-相当于快照 save 900 10(900秒有10条改动就进行快照处理),dump.rdb
缺点:
1.发生问题丢的数据比较多
2.fork子线程来进行,如果数据大,会影响主线程,有延时
优点:
1.速度快
aof ( append only file ):数据发生改变会进行存入,有每次修改存入,每秒修改存入,不存储
缺点:
1.恢复的速度慢

redis缓存策略

Cache-Aside patten
Read-Through patten
Write-Through patten
Write-Behind patten

1.Cache-Aside(旁路缓存)
读 :
从 cache 中读取数据,读取到就直接返回;
cache中读取不到的话,就从 DB 中读取数据返回;
再把数据放到 cache 中。

写 :
先更新 DB;
然后直接删除 cache

2.Read-Through(读穿透)

从 cache 中读取数据,读取到就直接返回 。
读取不到的话,先从 DB 加载,写入到 cache 后返回响应。

3.Write-Through(写穿透)

先查 cache,cache 中不存在,直接更新 DB。
cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(同步更新 cache 和 DB)。

4.Write-Behind(异步缓存写入)

Read/Write Through 是同步更新 cache 和 DB,
Write Behind Caching 则是只更新缓存,不直接更新 DB,而是改为异步批量的方式来更新 DB。

mybatis框架学习

put post get的区别

put请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)
Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)

1.关于安全性:post的安全性要相对比get的高,因为get的参数都是放在url中的,可以被缓存,截取直接就能获取数据,所以一般登录密码这些信息不会明文放在url中使用get请求发送。而post的数据都是放在RequestBody,可以进行一次加密,相对安全些。

2.请求数据上限:get请求的数据会放在url后面,使用?A=B格式(A是名称,B是参数)发送,这个url一般是有长度限制的,http协议没有对url长度进行限制,这个限定主要是浏览器和服务器的限制,一般是1024字节长度。而post可以将数据放在RequesetBody中传送,这里就没有数据量的上限了,get是无请求体的,所以RequestBody只能使用post方式提交。(后面会讲一下RequesetBody)。

3.关于tcp数据包:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。实际上get会产生一个tcp数据包,post会产生两个数据,这就会造成响应时间问题,但并不是所有的浏览器都是post发两次包,

mysql索引的索引类型和数据结构

普通索引:没有任何限制
唯一索引:索引列的值必须唯一,但允许有空值
主键索引:一个表只能有一个主键,不允许有空值
联合索引:多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合
全文索引:查找文本中的关键字,char varchar text上使用

数据结构:
1.innodb引擎是用B+树,叶子节点为值,非叶子节点为索引
2.hash

索引问题:

1.not in > < !=都会让索引失效
2.使用like时,%不能在最前面
3.不能进行运算和函数操作
4.查询条件为字符串时,一定要加上引号
5.索引不包含null值,所以不要默认为null

mysql引擎

hashmap的数据结构
mysql的联合索引
锁升级
公平锁和非公平锁
reentrantlock
jvm调优参数

mysql 3306 redis 6379

http和https的区别

http以明文方式进行传输,不进行加密,而https添加了ssl证书,对浏览器和服务器之间进行通信加密

http错误码

1.1xx:信息,请求收到,继续处理
2.2xx:成功,行为被成功地接受、理解和采纳
3.3xx:重定向,为了完成请求,必须进一步执行的动作
4.4xx:客户端错误,请求包含语法错误或者请求无法实现
5.5xx:服务器错误,服务器不能实现一种明显无效的请求

具体:
2xx 成功
200 正常;请求已完成。
201 正常;紧接 POST 命令。
202 正常;已接受用于处理,但处理尚未完成。
203 正常;部分信息 — 返回的信息只是一部分。
204 正常;无响应 — 已接收请求,但不存在要回送的信息。

3xx 重定向
301 已移动 — 请求的数据具有新的位置且更改是永久的。 永久重定向 Moved Permanently
302 已找到 — 请求的数据临时具有不同 URI。 临时重定向 Found
303 请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。
304 未修改 — 未按预期修改文档。
305 使用代理 — 必须通过位置字段中提供的代理来访问请求的资源。
306 未使用 — 不再使用;保留此代码以便将来使用。

4xx 客户机中出现的错误
400 错误请求 — 请求中有语法问题,或不能满足请求。
401 未授权 — 未授权客户机访问数据。
402 需要先进行付款 — 表示计费系统已有效。
403 禁止 — 即使有授权也不需要访问。
404 找不到 — 服务器找不到给定的资源;文档不存在。
407 代理认证请求 — 客户机首先必须使用代理认证自身。
415 介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。

5xx 服务器中出现的错误
500 内部错误 — 因为意外情况,服务器不能完成请求。
501 未执行 — 服务器不支持请求的工具。
502 错误网关 — 服务器接收到来自上游服务器的无效响应。
503 无法获得服务 — 由于临时过载或维护,服务器无法处理请求。

微服务
jvm
多线程