
Java开发
我会有心仪offer
这个作者很懒,什么都没留下…
展开
-
黑神话悟空之抽象类与接口详解
口语化解释一下接口和抽象类多态的区别,抽象类是用于是什么的场景,接口是用于能做什么的场景。感觉更好区分的是,抽象类中间可用模板模式,进行方法的链式制定。(个人观点,请多指正)原创 2025-02-18 00:49:50 · 807 阅读 · 0 评论 -
fail-safe 机制与 fail-fast 机制分别有什么作用
由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中 对原集合所作的修改并不能被迭代器检测到 比如这种情况(贴下面这个图) , 定义了一个 CopyOnWriteArrayList,在对这个集 合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会 立刻抛出 ConcurrentModificationException 异常,从而导致遍历失败,像这种情况 (贴下面这个图)。原创 2023-09-07 08:27:23 · 155 阅读 · 0 评论 -
xxl-job进阶和原理分析
从上面的配置中可以发现,XXL-JOB的集群中有节点宕机后并不会做选举,实际上XXL-JOB的每个节点都可以提供服务,只要不是所有节点一起宕机,就不会有单点故障的问题。在XXL-JOB的架构中,调度器与执行器是分离的,并且所有的调度流程都实现了异步化,从而大大降低了调度中心的性能压力,所以一台调度中心服务器就可以满足要求了。重复调度问题一般是通过分布式锁来处理的,实现分布式锁的方式有很多,XXL-JOB选择的方式是通过数据库的锁来实现的。不过需要注意的是,XXL-JOB的集群不是。原创 2023-08-28 17:30:10 · 312 阅读 · 0 评论 -
@RequiredArgsConstructor的作用
减少代码臃肿,不用重复使用autowired当使用@autowired注入的时候,有时候会发生警告(我之前的采取方法无非就是替换成resource注解)或者采用构造器的方法进行注入但是今天了解到了@RequiredArgsConstructor。原创 2023-08-28 14:21:54 · 1783 阅读 · 0 评论 -
xxl-job:定时任务执行流程及调度机制
Spring的@Scheduled对于单机的简单任务使用起来很方便,但只能单节点运行,不利于横向扩展。原创 2023-08-23 17:23:40 · 433 阅读 · 0 评论 -
项目中定时任务的实现(Quartz和XXLJob)
项目中使用quartz和xxl-job实现定时任务原创 2023-08-22 11:48:23 · 229 阅读 · 0 评论 -
nacos下载与配置全过程(完整步骤与顺序)
之前跟着尚医通项目配置过nacos,但是之前很顺利一点也不痛苦。但是这次项目开发过程中,需要重新配置一个nacos,发现网上的步骤要么不全,要么顺序错误。所以我觉得有必要记录一下在我配置过程中正确的步骤。原创 2023-08-18 15:42:43 · 414 阅读 · 0 评论 -
Java项目使用log4j自定义log文件,并记录异常
获取到异常的信息,然后通过fatal方法放入日志,fatal 指出每个严重的错误事件将会导致应用程序的退出。基本上大家用得比较多的日志就是log4j了,基本配置就是导入依赖,设置配置文件什么的就不详细说了。主要是我网上想搜些相关知识发现都不是我想要的,所以我就来记录一下。然后想要将异常信息写入到指定log文件中,需要自定义方法。先获取到error类型的log。xml文件的结构还是这样的。原创 2023-08-15 13:55:52 · 430 阅读 · 0 评论 -
如何使用Transport类发送邮件
send方法将从Message对象中获得Session对象的引用,然后将调用Session对象中注册的Authenticator对象从中获取认证信息后传递给邮件服务器。最后调用close方法关闭与邮件服务器的连接。2. 调用Session.getInstance(Properties, Authenticator)方法获得Session类的实例对象,并把Authenticator对象注册到Session对象中。3. 使用Session对象创建代表邮件消息内容的Message对象。原创 2023-08-15 11:20:36 · 796 阅读 · 0 评论 -
个人项目实战理解微服务
但是真正的微服务,他实现了模块化,每个模块专注一个功能,每个模块都是单独的项目,比如有Springboot启动类,并且你需要建立一个cloud微服务(springcloud(在eureka或nacos上将微服务注册)),然后启动这个微服务,再把之前分工好的微服务模块通过application类启动。比如我之前项目做的邮件发送模块,就是在nacos上注册好微服务,然后在需要邮件发送逻辑的微服务里面,通过feign调用发出邮件发送的请求,这个时候邮件发送模块就进行功能的实现,这就是一个简单的微服务调用流程。原创 2023-08-11 14:49:32 · 66 阅读 · 0 评论 -
ResultMap和ResultType的区别
在实际项目中,我用到了这两种方式按我的理解来说就是,基本类型,和你已经定义好的vo类,实体类,可以直接使用resulttype接收,但是你在表中查询的列名,想查询出来之后换一个名字,或者只返回部分特定的信息,这个时候你需要自定义一个resultmap,在map中一对一的进行映射。1、resultmap:resultMap对于一对一表连接的处理方式通常为在主表的pojo中添加嵌套另一个表的pojo,然后在mapper.xml中采用association节点元素进行对另一个表的连接处理。原创 2023-08-08 17:07:33 · 520 阅读 · 0 评论 -
@ResponseBody注解的作用
HttpMessageConverter中的方法,它本是一个接口,在其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。如果是一个对象,会将对象转化为json串,然后写到客户端。当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。return一个字符串,默认跳转到这个字符串表示的页面。原创 2023-07-27 09:53:01 · 215 阅读 · 0 评论 -
Pojo类和Entity类
因为在实习过程中接触到了不同项目,所以会接触不同的对实体类的定义(还是习惯这么说),我看源代码中pojo类和Entity类都使用了@Table注解,表明他们都对应的是数据库的某一张表。里面的属性对应的就是数据库表中的字段。然后get,set方法你可以有两种方法,一种手动生成getter,setter,简单的映射关系你可以在类中使用@Column注解。或者在xml文件使用ResultMap对应。在实际应用过程中,目前我使用pojo类和entity的场景和用法都没有什么区别,创建对象,赋值取值什么的。原创 2023-07-24 10:43:58 · 176 阅读 · 0 评论 -
java开发项目时,为什么有个时候不需要导出数据库文件可以公用数据库,有时要导出为sql文件
有时候不需要导出数据库文件而可以公用数据库的情况,通常出现在团队合作开发或者多个子系统共享同一个数据库的情况下。在这种情况下,不需要将数据库数据导出为SQL文件,通过配置数据库连接信息,不同的项目或者子系统可以直接访问和操纵同一个数据库实例。一种情况是在项目迁移或者部署时,可以将数据库的结构和数据导出为SQL文件,然后再在目标环境中重新导入。在Java开发项目中,是否需要导出数据库文件或者可以直接使用公用数据库,以及是否需要将数据导出为SQL文件,通常取决于具体的需求和项目架构。原创 2023-07-18 15:57:04 · 88 阅读 · 1 评论 -
RPC在项目中的应用——Feign接口以及注解说明
调用微服务的类用façade结尾。Value是调用的微服务的项目的名称。Path是配置文件中的context/path,应该是发送请求需要加上这个前缀。此类中的@FeignClient中fallbackFactory属性指定熔断降级处理的类为WebFeignFallbackFactory。Feign的降级的两种方式:Fallback和FallbackFactory。比如每个项目文件中有个大文件夹api后缀,里面就是通过feign调用的微服务方法。Feign的调用可能会问你涉及到Feign的降级的方式。原创 2023-07-18 11:32:19 · 207 阅读 · 1 评论 -
Dto和Entity的区别,简洁易懂
网上很多都是在概念上解释,感觉似懂非懂。你可以理解成他可以有entity的所有字段或者部分字段,同时它还可以比它对标的entity类型多一些自己需要的字段。DTO(Data Transfer Object):数据传输对象,Service 或Manager 向外传输的对象。Query:数据查询对象,各层接收上层的查询请求。BO(Business Object):业务对象,可以由Service层输出的封装业务逻辑的对象。VO(View Object):显示层对象,通常是 Web 向模板渲染引擎层传输的对象。原创 2023-06-28 09:29:42 · 785 阅读 · 1 评论 -
索引失效的情况
mysql的sql查询语句中使用is null、is not null、!=对索引并没有任何影响,并不会因为where条件中使用了is null、is not null、!查询条件中使用 or,且 or 的前后条件中有一个列没有索引,涉及的索引都不会被使用到;mysql官方文档也已经明确说明is null并不会影响索引的使用。开头的 LIKE 查询比如 ,如果只有%结尾则不会失效。上文说了索引失效,这个在网上文章很多都被总结好了。创建了组合索引,但查询条件未遵守最左匹配原则;原创 2023-07-17 10:02:42 · 210 阅读 · 1 评论 -
如何克隆已完成项目代码并成功运行,环境配置(持续更新)
如果发现还是无法加载maven,直接把.mvn文件夹删掉,里面包含的是一些原项目的配置信息(版本信息),不一定适合你当前的环境。第一步吗,maven环境的配置,首先确保自己已经设置好的自定义的maven版本和repository目录正确。maven开始重新下载依赖。原创 2023-07-17 13:45:28 · 383 阅读 · 1 评论 -
Sql查询语句优化(IFNULL,ISNULL)函数
我们都知道索引失效的条件是where语句中出现or判断,在数据库查询的过程中,总会有字段设置默认值是null(默认值为null是可以走索引的),因此这个时候我们可以采取MySQL的IFNULL函数,或者SQL Server的ISNULL函数,这两个函数作用是一样的。上面代码的含义就是,查询字段的值a不为空则需要 a = b时才可被查询到,同时为null的情况也需要被查询到,因此为值为null的话则赋值b,满足等于b即可被查询到。原创 2023-07-17 09:54:53 · 1413 阅读 · 1 评论 -
quartz实现定时任务
JobDataMap:是一个JDK中Map接口实例,在任务调度时存在于 JobExecutionContext 中,可将参数对象传递给在运行的 Job 实例;首先我们需要定义实现一个定时功能的接口,我们可以称之为Task(或Job),如定时发送邮件的task(Job)ScheduleBuilder:设置任务执行计划,如多久执行一次,是否重复执行,延迟多久执行等。定义触发器,触发器Trigger最基本的功能是指定Job的执行时间,执行间隔,运行次数等。Scheduler:调度器,管理任务调取容器。原创 2023-07-17 11:55:08 · 829 阅读 · 1 评论