- 博客(63)
- 收藏
- 关注
原创 java每日一记 —— List创建的方式判断
判断一个Java List 集合是由 new 关键字实例化创建的,还是由 Arrays.asList() 方法创建的,直接从集合本身并不能直接得出结论,因为这两种方式创建的 List 实例在运行时都是 List 接口的实现类对象,表现形式上没有明显的区别。
2024-03-11 13:19:50 365 1
原创 for循环的多重跳出
前段时间面试时,面试官问我多重for循环如何跳出,我懵了,今天特别的研究了一下本文主要说的不是continue与break,而是少用的另类操作1.continue:跳出本次循环2.break:跳出整个循环。
2024-02-05 16:32:32 553
原创 jenkins环境搭建
安装方式请参考博主之前的文章:https://blog.csdn.net/weixin_44702984/article/details/128906562。将XML内的url的值替换为:http://mirror.xmission.com/jenkins/updates/update-center.json。1.通过官网下载git:https://mirrors.edge.kernel.org/pub/software/scm/git/1.创建jenkins安装目录进入该目录后下载jenkins。
2024-01-13 21:14:05 1120 1
原创 设计模式之单例模式
1.单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式2.单例模式主要解决了什么问题?资源利用率:对于那些需要频繁创建和销毁,且消耗系统大量资源的类,如数据库连接、线程池、全局缓存等,使用单例模式可以确保在整个应用中只存在一个实例,从而减少系统开销并提高资源利用效率一致性保证:当多个客户端共享同一份全局配置信息或状态时,通过单例模式可以确保所有对象都访问同一份数据源,避免因多次实例化导致的数据不一致问题。
2024-01-08 14:39:03 1329
原创 mybatis-flex与springBoot整合
1.flex同样也支持AR模式(Active Record),使用 Active Record 功能时,项目中必须注入对应实体类的 BaseMapper 对象。2.使用方式与mybatis-plus相同,只需让 Entity 类继承 Model 即可。测试连接:http://localhost:8080/emp/findById?注意官方网站为:https://mybatis-flex.com/这里和mybatis-plus的mapper层一样。这里和mybatis-plus一样。
2024-01-08 11:45:53 1200
原创 设计模式之开闭原则
对扩展开放,对修改关闭对扩展开放:意味着当系统需要增加新的功能时,可以在不修改现有代码的基础上进行扩展。通过提供抽象层和扩展点来实现新功能,而不是直接修改原有代码对修改关闭:已经完成并测试过的软件实体(类、模块、函数等)应该尽量避免被修改。一旦软件的一个部分被视为稳定且工作正常,就不应该对其源码做出改动以适应新的需求2.开闭原则到底解决了什么问题?应对需求变化:在软件开发过程中,产品经理的需求是难以完全预见的,因此代码需要具备良好的适应性来应对需求变更。
2024-01-07 13:44:50 1049
原创 java每日一记 —— BeanFactory 与 ApplicationContext 的区别
BeanFactory 与 ApplicationContext 的区别
2023-12-05 11:37:49 453
原创 springBoot集成mybatis-plus
注意:使用Mapper层时要将Mapper进行注入:代码如下。注意:使用Mapper层时要将Mapper进行注入:代码如下。3.application.yml文件中的配置。3.结论:有id就会更新,没有id就会新增。1.在UserMapper中定义接口。2.创建maven工程并且导入坐标。6.serviceImpl层。1.在service层定义。3.结论:没有ID就会新增。5.结论:有ID就会更新。1.service层代码。2.mapper层代码。5.service层。4.删除(逻辑删除)
2023-10-12 14:54:14 133
原创 String、StringBuffer和StringBuilder区别
1.请看代码/***/运行结果2.请看StringBuffer中toString()的源码@OverrideisLatin1()?3.原因:每次.toString()时都会new String(toStringCache),所以地址改变了。
2023-09-22 11:13:18 52
原创 RabbitMQ消息可靠性保障
1.RabbitMQ默认是自动ack的,需要将其修改为手动ack,也即自己的程序确定消息已经处理完成后,手动提交ack,此时如果再遇到消息未处理进程就挂掉的情况,由于没有提交ack,RabbitMQ就不会删除这条消息,而是会把这条消息发送给其他消费者处理,但是消息是不会丢的。1.消息丢失:在这个业务场景中,用户发起打车请求,如果用户消息丢失,对整体业务是没有任何影响的,用户可以再次发起打车操作,这个消息丢失问题概率很低,可以进行简单化设计,如果出现发送失败只需要回退redis中的操作即可。
2023-07-10 15:53:52 66
原创 MQ如何选型
1.功能需求:除了最基本生产消费模型,还需要MQ能支持REQUEST-REPLY模型,以提供对同步调用的支持此外,如果MQ能提供PUBLISH-SUBSCRIBE模型,则事件代理的实现可以更加简单。2.性能需求:考虑未来一到两年内产品的发展,消息队列的呑吐量预计不会超过 1W qps,但由单条消息延迟要求较高,希望尽量的短。3.可用性需求:因为是在线服务,因此需要较高的可用性,但充许有少量消息丢失。4.易用性需求:包括学习成本、初期的开发部署成本、日常的运维成本等。
2023-07-08 20:42:45 211
原创 常用消息中间件对比
特性ActiveMQRabbitMQKafkaRocketMQ所属社区/公司ApacheApacheApache/Ali成熟度成熟成熟成熟比较成熟生产者-消费者模式支持支持支持支持发布-订阅支持支持支持支持支持支持支持API完备性高高高低(静态配置)多语言支持支持JAVA优先语言无关支持,JAVA优先支持单机呑吐量万级(最差)万级十万级十万级(最高)消息延迟微秒级毫秒级可用性高(主从)高(主从)非常高(分布式)
2023-07-08 20:27:56 239
原创 消息中间件MQ
2.异步:比如快递投柜后,用户马上就结束了,不会等待到发送短信或者通知快递公司结束的,直接将消息投递到MQ,然后就直接结束,具体到扣减系统费以及后续的通知,都是异步操作的,不需要用户关心的,这就是将用户的同步操作转换为异步操作。3.流量削峰:就像用户投递快递,高峰到40W每秒,但是我们的后续处理业务每秒只能20W,还剩下20W在MQ进行堆积,这就是MQ很重要的流量削峰的能力,将用户的洪峰流量,让后台慢慢来处理,MQ承担一个缓冲的作用。2.订阅:一般是MQ的广播模式,类似于java的观察者模式。
2023-07-08 19:47:52 48
原创 服务幂等性 --- 防重表
悲观锁在使用的过程中也是会发生死锁的。这时对于用户A来说,由于表B已经被用户B锁住了,所以用户A必须等到用户B释放表B才能访问。同时对于用户B来说,由于表A已经被用户A锁住了,所以用户B必须等到用户A释放表A才能访问。要解决这个问题,非常简单,在数据库层面添加唯一索引即可,将id设置为唯一索引,也是最容易想到的方式,一旦id出现重复,就会出现异常,避免了脏数据的发生也可以解决永久性幂等。首先创建一张表作为防重表,同时在该表中建立一个或多个字段的唯一索引作为防重字段,用于保证并发情况下,数据只有一条。
2023-07-08 12:27:41 233
原创 Kafka在linux中的安装
本篇讲解以下kafka集群的搭建,这里搭建了两种Kafka集群,一种是使用ZK的传统集群,一种是不需要ZK的实验版集群,后期Kafka将会废弃ZK,但是现阶段还是推荐使用带有ZK的,因为不需要ZK的还处于实验性质Kafka的共识机制KRaft,仍然处于预览机制。未来KRaft将作为Apache Kafka的内置共识机制将取代Zookeeper,该模式在2.8版本当中就已经发布了体验版本,在3.X系列中KRaft是一个稳定release版本。
2023-07-07 22:08:05 2978
原创 手写ArrayList
**/*** 返回容器中元素的个数/*** 判断容器是否为空/*** 查询元素在集合中的索引位置* @param e 元素对象* @return int 元素索引位置,不存在返回-1/*** 是否存在某个特定的元素* @param e 元素对象/*** 添加元素到最后面* @param e 元素对象/*** 添加元素到指定位置* @param e 元素对象* @param index 指定位置/*** 将元素替换* @param e 元素对象。
2023-07-07 21:44:45 45
原创 java算法 ---- 从数组说起
1.查询O(1):数组元素的访问是通过下标来访问的,计算机通过数组的首地址和寻址公式能够很快速的找到想要访问的元素。2.插入删除O(n):数组是一段连续的内存空间,因此为了保证数组的连续性会使得数组的插入和删除的效率变的很低。插入操作对应的时间复杂度是:最好情况下是O(1)的,最坏情况下是O(n)的,平均情况下的时间复杂度是O(n)代码的执行次数并不会随着数组的数据规模大小变化而变化,是常数级的,所以查询数据操作的时间复杂度是O(1)3.数组的表示方式:使用下标来获取数组元素数据。(Array)是一种用。
2023-07-07 21:18:38 34
原创 接口幂等性的解决
当用户进行表单提交时,会重定向到另外一个提交成功页面,而不是停留在原先的表单页面。同时防止了通过浏览器按钮前进/后退导致表单重复提交。通过前端防重保证幂等是最简单的实现方式,前端相关属性和JS代码即可完成设置。可靠性并不好,有经验的人员可以通过工具跳过页面仍能重复提交。直接把token实现嵌入到方法中会造成大量重复代码的出现。因此可以通过自定义注解将上述代码进行改造。在需要保证幂等的方法上,添加自定义注解即可。1.方案介绍:通过唯一标识机制来保证幂等是一种非常常见的解决方案,同时也适合绝大部分场景。
2023-07-07 19:31:20 366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人