JAVA8大基本数据类型
J AVA8大基本数据类型HashMap和Hashtable的比较
Hashtable:
1.Hashtable不允许key或者value为null,线程安全,实现线程安全的方式是在修改数据时锁住整个Hashtable,效率低
2.Hashtable线程安全的,很多方法都有synchronized修饰,但同时因为加锁导致单线程环境下效率较低。
Hashmap:
1.HashMap允许有一个key为null,允许多个value为null,线程不安全
2.在多线程环境下会容易产生死循环,但是单线程环境下运行效率高;
一般建议用currentHashMap,因为他大量的利用了volatile,final,CAS等lock-free技术来减少锁竞争对于性能的影响,
ArrayList和LinkedList的比较
共性:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。
区别:List接口的实现方式不同
ArrayList实现了List接口,以数组的方式来实现的,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。
LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。
list和set的区别
List,Set都是继承自Collection接口
list:元素有放入顺序,元素可重复
和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变
set:元素无放入顺序,元素不可重复,重复元素会覆盖掉
检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变
Java 重写(Override)与重载(Overload)
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
线程
java 线程(中、高级)总结
Spring是什么
spring是一个容器,用来装javabean(java对象的) 中间层框架
ioc aop 控制反转,面向切面,避免了依赖注入等问题
Aop是什么
将程序中交叉业务逻辑(日志,事务,参数校验),封装成一个切面,然后注入到目标对象,达到方法复用的功能
IOC是什么
ioc容器:存放map对象,也就是存放的各种对象,项目启动会去读取配置文件里面的bean,
控制反转:对象A获得依赖对象B的过程,由主动变成被动的行为,对象和对象之间没有相互关联,都依赖ioc容器了
依赖注入: 动态的将某种依赖关系注入到对象中
Spring Bean生命周期
1、根据类包解析得到beanDefinition
2、构造方法的推断
3、实例化得到对象
4、对对象中的加了@Autowired直接的属性进行属性填充
5、回调Aware方法,比如 BeanNameAware BeanFactoryAware
6、调用BeanPostProcessor的初始化前的方法
7、调用初始化方法
8、调用初始化后的方法,这里会进行aop
9、如果当前创建的bean是单例的,则会吧bean放入单例池里面
10、使用bean
11、销毁
Spring的事务什么时候会失效,怎么解决
aop的时候会失效,因为spring底层会生成一个代理对象,
1、方法自调用,解决方案: 不要用this来调用,可以通过spring提供的@Autowired 来调用
2、方法不是public的也会失效, 解决方案:开启Aspectj代理模式
3、数据库不支持事务(myisam),解决方案: 使用innodb引擎
4、没有被spring管理,
5、异常被catch了
Mybaits的优缺点
sql灵活,sql写在xml中,与程序耦合度低,方便维护,可以重用,跟jdbc比较减少了大量代码,不需要手动开关连接,与各种数据库兼容,能够被spring集成,
sql语句编写量大,sql语句依赖于数据库,但是移植性差,不能随意更换数据库
#{ } ${} 的区别
#{} 是预编译处理、是占位符,会加上单引号 ,不会造成sql注入
${} 是字符串替换、拼接,不会加上单引号 ,会造成sql注入
MySql (中、高级)总结_Japhet_jiu的博客-CSDN博客
redis基本数据类型
String
hash
List 有顺序可重复
Set 无顺序,不能重复
zset 有顺序,不能重复 适合做排行榜 排序需要一个分数属性
redis怎么持久化
rdb:
默认是开启了持久化,也可以手动设置触发条件
save 500 1 #500秒内有一次修改
save 1000 10 #1000秒内有十次修改
设置自动触发持久化时间
aof(追加文件 命令日志文件)(默认关闭 appendonly yes )
appendfsync: always、everysec、no
惰性过期:访问的时候去检查key
定时过期:每隔一段时间去检查过期的key
缓存雪崩、缓存穿透、缓存击穿
雪崩:
给缓存设置数据过期时间,时间随机,
缓存预热(启动项目的时候拿个接口来查询缓存,存起来)
穿透:(数据库没有,缓存也没有数据,预防攻击)
接口增加校验
如果数据库、redis都没有数据,可以把这个redis key设置为null,然后设置有效时间30秒,避免暴力攻击
击穿:(缓存没有,数据库有)
热点数据可以设置永不过期等
Redis主从搭建集群
搭建Redis集群_Japhet_jiu的博客-CSDN博客
SpringCloud 和 Dubbo的区别
底层协议: springcloud是基于http协议 ,dubbo是基于tcp协议
注册中心:springcloud使用eureka,nacos等,dubbo是 zookeeper
模型定义:springcloud是一个应用定义定义为服务,dubbo将一个接口定义为一个服务
什么是Hystrix (断路器)
阻止故障的连锁反应,实现熔断
快速的失败,实现优雅降级
提供实时的监控和警告
线程隔离:互不影响,但是会建很多线程
型号量隔离:型号量有限
分布式事务(Seata)
XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
优点:
事务的强一致,满足ACID原则
常用数据库都支持,实现简单,没有代码侵入
缺点:
因为一阶段需要锁定数据库资源,等待二阶段结束才能释放,性能差
依赖关系数据库实现事务
TCC模式:最终一致的分阶段事务模式,有业务侵入
T: try 资源检查和预留 C: confirm 业务执行和提交 C: Cancel 预留资源的释放
优点:
一阶段完成直接提交事务,释放数据库资源,性能比较好
相比AT模式,无需生成快照,无需使用全局锁,性能最差
可以使用非事务型数据库(比如redis)
缺点:
有代码侵入,需要人为去编写 Try ,confirm 和cancel 接口,太麻烦
软状态,事务最终一致
需要考虑Confirm 和Cancel 的失败情况,做好幂等处理
AT模式:最终一致的分段式事务,无业务侵入,也是seata默认的模式
优点:
一阶段完成直接提交事务,释放数据库资源,性能比较好
利用全局锁实现读写隔离
没有代码侵入,框架自动完成回滚或提交
缺点:
两阶段之间属于软状态,属于最终一致
框架的快照功能会影响性能,但比XA模式要好
SAGA模式:长事务模式,有业务侵入
优点:
一阶段直接提交事务,无锁,性能好
不用编写TCC中的三个阶段,实现简单
缺点:
软状态持续时间不确定,时效性查
没有锁,没有事务隔离,会有脏读
如何确保rabbitmq消息的可靠性
开启生产确认机制,确保生产消息能到达队列
开启消息持久功能,确保消息未消费前在队列中不会丢失
开启消费者确认机制为auto,由spring确认消息后处理成功后完成ack
开启消费者失败重试机制,并设置 messageRecoverer,多次重试失败后将消息放在另外一个异常交换机里面,由人工去处理
什么是死信交换机
消费者的消息被拒绝,或者消息消费失败,返回了nack
消息长时间没有被消费,(过期消息)
消息队列满了,很久之前的的消息会变成死信
消息堆积的解决方案
队列上绑定多个消费者,提高消费速度
开启线程池,提高消费速度
使用惰性队列
惰性队列(Lazy Queues)
所有消息直接存入磁盘,不是写在内存里面
消费者消费消息的时候,才回去从磁盘中读取,加载到内存
支持上百万数据存储
rabbitmq的高级场景
rabbitmq的高级场景_Japhet_jiu的博客-CSDN博客
linux 查看8080端口
netstat -anp|grep 8080
ps -aux|grep java
linux 查看磁盘空间
du -sh *
linux 查看CPU信息
cat /proc/cpuinfo
linux 查看物理内存等信息
free -h
linux远程发送文件
scp -i C:\Users\29574\Downloads\xxxxxxx..pem C:\Users\29574\Desktop\xx\xx\ROOT.zip [email protected]:/home
后续更新,请等待。。。。