发表于: 2020-09-22 23:14:44
0 1499
今天完成的事情:复习相关知识点,看自己买的面试题。这边项目在等PM修改好原型图和需求。
明天计划的事情:消息队列实现下,复习java知识点。
遇到的问题:暂无
收获:
java 15新特性
前几天发布的java 15和苹果发布会在同一天。自己总结几条新增特性。
1. EdDSA数字签名算法
EdDSA与现有的签名方案相比,具有更高的安全性和性能。
2.隐藏类
此功能可实现需要在运行时生成类的框架。框架生成类需要动态扩展其行为,但又想限制类的访问。隐藏类只能通过反射访问,不能通过普通字节码,独立于其他类的加载,减少框架的内存占用。
3.ZGC功能转正
通过减少GC停顿时间提高性能。
4. 文本块功能转正
文本块是一种多行字符串文字,它避免了大多数的转义序列的需要。
5.Shenandoah 垃圾回收算法转正
该算法通过与正在运行的java线程同时进行疏散工作来减少GC暂停时间,暂停时间和堆大小无关,无论堆是200mb还是200GB,时间一致。
面向对象的特性以及对其理解
继承:继承是从已有类中得到继承信息,创建新类的过程。被继承的类是父类,继承的类被称为子类。子类可以继承父类的实例变量和方法,宁外还能修改和增加新的方法。
封装:通常认为是把数据和操作数据绑定起来,对外只提供数据调用的接口。java中就是把客观事物抽象成类,类中就是对数据和方法的隐藏。
多态:允许不同类的对象对同一消息作出不同的响应。细分为编译时多态和运行时多态。如果将对象的方法视为向外提供的服务,那么运行时多态可以解释为,A系统调用B系统的方法,B系统提供了多种服务,但对A来讲都是透明的。方法重载是编译时多态,方法重写是运行时多态。
方法重写和方法重载。
重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重载对返回类型没有特殊的要求
重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。final,构造方法不能被重写,声明的staic不能被重写,但可以从新声明。重写的方法不能抛出比被重写方法更广泛的异常,重写的方法能够抛出任何非强制异常(UncheckedException,也叫非运行时异常),无论被重写的方法是 否抛出异常。
抽象:抽象是将一类对象的共同特征总结出来构造类的过程。包括数据抽象和行为抽象,抽象只关注对象有哪些行为和属性。
消息队列
什么是MQ?为什么要用?为什么不用java自带的mq?MQ有什么缺点?
什么是?简单理解就是把传输的消息放到队列中,按照先进先出原则。
为什么要用?
解耦,异步,削峰/限流。
异步:就是在一个业务操作后,只需要把自己操作的结果放到放到消息队列中,例如在订单支付过程中,需要有优惠券,积分,短信等,一个简单的思路就是,按照链路执行,订单支付后扣券,然后加积分,发送短信,但是响应时间太长了,而且后续如果还有新的需求,又要在这个系统中增加代码并从新发布
另一种思路就是支付成功后的消息放到队列中,其他的系统取到后异步执行,同时达到解耦作用。
当大量请求的时候,超过系统能够处理的能力,可以用消息队列。例如大促销时高并发。
为什么不用java自带?
1. 高可用,运用了消息队列的情况下,肯定不是单机,如果当前系统挂了,消息队列毫无意义了,一般消息队列都是集群分布式。
2.数据丢失问题,自带的没有消息解决方案。
Mq缺点?
1. 系统复杂性。重复消费,消息丢失,消息顺序消费。这些情况的处理。
2. 数据一致性。运用分布式事务,要么一起成功,要么一起失败。
3. 可用性。
评论