自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 为什么要使用消息队列?

2.异步:以发送邮件为例,在未使用消息队列时,发送流程为:创建邮件模版,再由底层dao层拉取邮件内容,调用三方SDK发送邮件,整个过程的耗时是比较长的,就算是多线程下,也无法实现高性能,因为会长时间占用线程会造成线程阻塞,在消息队列的管理下,邮件可以直接发送到消息队列,之后直接返回“消息成功下发的结果”,后续发送业务模块实现异步的处理,不影响整个系统流程的执行,从而提高了系统的性能和响应速度。3.削峰填谷:削弱高消息并发量带来的冲击,并以平稳高效的方式处理数据。主要围绕3个功能:解耦、异步、削峰填谷。

2024-04-14 19:32:37 196 1

原创 成都用友实习一面

我常用来开发web程序,常用的注解有getmapping、autoward、source等等,遇到的问题有循环依赖,我回答循环依赖的解决是通过注解延迟一个bean生成,搞错了回答成锁问题了,真正回答是三级缓存。这块不该我负责,因为企业微信的token注册需要公司的营业执照等材料数据,对于程序的消息推送是否成功我这边是通过短信的渠道去测试整个代码流程是否能够得到成功运行,短信渠道的发送是通过腾讯云代理,通过调用第三方的SDK就可以成功发送短信。当时回答的定时任务的设计的重构,采用mq的死信队列,没回答好。

2024-04-14 17:34:48 210 1

原创 基于Redis,Redisson实现分布式锁

为什么需要分布式锁?在单点服务器一台虚拟机上进行上锁如synchronized锁,Lock锁等,只能保证在该台虚拟机上的线程互斥,但在分布式的业务下这些互斥锁无法实现不同服务器上的线程互斥,从而为了保证在分布式业务场景下实现线程的串行执行,出现了对分布式锁的需求。SetNX向Redis中添加一个key,只用当key不存在的时候才添加并返回1,存在则不添加返回0。2.为了避免误删需要将value设置为当前线程的主要标识,可以用UUID或者是一个自增的数据。分布式锁在分布式业务场景下面多个线程是可见的。

2024-04-12 14:43:08 161

原创 Redis为什么被设计成单线程?Redis6.0为什么要引入多线程?

此时单线程Redis已经有了强大的性能可以满足大部分公司需求,但此时若是还需要性能上得到提升就需要引入多线程,前面的IO复用技术本质上是同步阻塞性IO,当并发量大的情况下会出现大量阻塞还是会对性能有所影响,因此引入了多线程,跟前面提到的一样,多线程技术是用于处理。多线程的目的是通过并发来提高I/O利用率和cpu的利用率,而redis操作是基于内存的,访问速度快,cpu资源根本不是Redis的性能瓶颈,因此是单线程的。网络请求的,但数据的读写还是单线程的,由于读写是单线程的同时以避免了线程不安全的情况发生。

2024-04-11 17:56:39 118

原创 什么是线程池?好处是什么?

2.为什么使用线程池?可以根据开发环境,灵活配置线程数量,实现对线程的统一管理,提高程序的运行效率,降低系统运行压力。线程的使用分为创建、执行、销毁,线程池的使用去除了创建和销毁带来的时间开销。1.定义:将数据拉取到线程池中的队列后,启动线程进行消费。控制线程并发数量,降低服务器压力,实现对线程的统一管理;线程与任务分离,提升线程的可重用性;3.使用线程池的优点?

2024-04-11 17:36:20 111

原创 基于Redis如何去实现消息的去重功能?

线程池拉取到MQ中的消息后,数据会进入到Task类里run方法里面,然后进入到service入口,首先读取去重的参数配置(由分布式配置中心负责),一共定义两种去重逻辑写在DeduplicationType枚举上,然后后续获取出来负责根据去重的类型冲儿构建出我们的去重参数;这里内容去重的业务Key用的是消息的ID(模板ID)再加上消息发送人(接收人)再加上他的内容(消息内容)构建的。去重参数(消息信息,去重时间,去重次数,去重相关的埋点信息),通过for加强以此对消息进行去重判断,进行消息去重。

2024-03-28 18:18:57 229

原创 基于Kafka,数据隔离的实现

3.好了现在问题就彻底解决了吗?答案是并没有,上述的多topic,多group分别一一对应,只实现的消息类型的大类之间的隔离,但我一个消息大类中有不同的消息小类,以邮件消息email为例,email邮件中有营销类和通知类,如果在某一时刻,营销类邮件有高达4000w条消息需要推送,这时候如果来一条通知类的消息在短时间类就无法发送,且一般通知类消息带有紧急急需发送性质,所以这时渠道堵塞,就会导致通知类消息无法发送,这明显不合理。2.那如何解决单个发送接口渠道出现异常从而导致消息积压,其他渠道的数据也无法发送?

2024-03-26 19:47:56 168

原创 java中什么是反射机制?为什么反射慢?

反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。2.在运行时判断任意一个类所具有的成员变量和方法。1.在运行时判断任意一个对象所属的类。3.在运行时任意调用一个对象的方法。4.在运行时构造任意一个类的对象。1、代码可读性低及可维护性。2、反射代码执行的性能低。3、反射破坏了封装性。

2024-03-21 20:33:42 181 1

原创 什么是泛型?有什么好处?

1.方便:提高代码复用性。以List接口为例,我们可以将String、Integer等类型放入List接口中而不用单独再为各个类型开辟不同的List接口。2.安全:泛型出之前,是通过Object类实现的类在运行期检查,如果类型转换出错,程序就会崩坏,而泛型可以在编译期就做类型检查,增加了程序的安全性。Java泛型,是JDK5引入的一个新特性,允许定义类和接口时使用参数,声明的参数类型在使用时用具体的参数类型进行替换。

2024-03-17 21:30:47 370 1

原创 String str=new String(“hollis“)创建了几个对象?

每一次new,都会在堆空间创造一个对象,这是毋庸置疑的,由此可以得到第一个对象。而字符串“holis”编译阶段进入到Class常量池,在运行期,第一次被调用解析从而在字符串池中创建对应的String实例也就是“holis”。一个字符串“holis”,存储在字符串常量池中,一个String对象存储在heap上。可能有人还会说有个str对象存储在stack空间,str本身只是引用,引用就是引用,不能往对象上面扯。结论:运行期两个,编译期一个。

2024-03-17 20:15:28 334 1

原创 String为什么设计成不可变的?

多个线程访问,值也不会更改,可在多个线程间进行共享,就算一旦更改,也只会是在字符串池中创建一个新的字符串对象,而不是修改同一个访问对象的值。java对字符串采用了缓存功能,从而减少堆空间的占用。JVM也开辟了字符串池(两个不同的字符串变量指向同一个字符串对象)字符串是应用最广泛的数据结构,用上述操作如字符串池,提升字符串的性能对整个应用程序的性能的提高也是有着巨大影响。String类广泛应用于存储账号密码等敏感信息,若是设计成可变的,导致传递的String内容安全性无法保证。

2024-03-17 19:52:41 359 1

原创 为什么不能用BigDecimal的equals方法做等值比较?

BigDecimal的equals方法会比较精度和值,比如0.1 和 0.10这两个数字他们虽然值一样但是精度不一样,导致结果会返回false;

2024-03-17 17:45:49 327 1

原创 为什么不能用浮点数表示金额?

会有精度丢失,eg:0.1+0.2!=0.3 而是等于0.3000000000004。

2024-03-17 17:42:50 327

原创 Java中有了基本类型为什么还需要包装类?

1.有很多地方需要使用对象而不是基本类型,比如集合的容器要求的是 Object类。2.将基本类型封装起来,添加属性和方法,丰富了基本类型的操作。3.基本类型保存在栈,包装类型保存在堆。

2024-03-17 17:38:21 364

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除