自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 问答 (4)
  • 收藏
  • 关注

原创 大话设计模式读后感

实现计算器可扩展、易维护。

2024-04-09 16:41:47 107

原创 二叉树的创建、遍历

【代码】二叉树的创建、遍历。

2023-09-04 21:31:03 86

原创 AQS详解

如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CANCELLED:值为1,在同步队列中等待超时或被中断,需要从同步队列中取消该Node的节点,其节点的waitStatus为CANCELLED,即结束状态,进入该状态后的节点将不会再变化。线程A处理完资源后,释放资源,同时将Status=0,线程释放锁。

2023-08-20 23:15:27 79

原创 浅拷贝与深拷贝

简单的说就是浅拷贝只拷贝对象,不拷贝引用。深拷贝对象引用全拷贝

2023-08-16 21:31:44 81

原创 Java:强引用,软引用,弱引用和虚引用

软引用是用来描述一些有用但并不是必需的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会回收该对象。因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如网页缓存、图片缓存等。物品,不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。强引用: 如果一个对象具有强引用,那就类似于。

2023-08-16 16:56:02 48

原创 equals方法和==和hashcode的详解

但是对于其他类型,都是存在堆里面的动态分配内存,所以每一次新建一个数据都会动态分配一个内存地址,所以==的时候,当然内存地址是不一样的。引用类型:对于equals方法来说,如果没有重写equals方法,比较的是Objectlei中的方法,也就是内存地址。,所以当你对基本类型==的时候,内容相同的肯定返回的是true。因为实质上,他们的地址也是相同的。由此引出疑问,==为什么基本类型比较的是值,而引用类型比较的是内存地址呢?如果是== 基本数据类型比较的是值,引用数据类型比较的是内存地址。

2023-08-15 17:51:22 26

原创 if test 0 踩坑

mybatis

2023-02-06 14:35:44 4

原创 Set集合去重原理

set集合在添加元素时,实际上底层添加到HashMap中, public boolean add(E e) { return map.put(e, PRESENT)==null; }private transient HashMap<E,Object> map;要传入的元素作为Key值,创建Object对象作为虚拟值,private static final Object PRESENT = new Object();因为底层时hash表,所以存

2022-03-07 22:05:17 456

原创 crud一对多与多对多

基于一对多和多对一,进行增删改查的操作;每种两个实例方法,一共八种,其中:主表:增:对从表没有任何影响删:在删除主表前,会先删除关联改主表的从表改:暂时发现不能修改与从表关联的主键id查:先查询出具体主表对象,然后出改主表关联的从表的set集合;然后进行iterator迭代遍历从表:增:增加一条属性,先获得需要关联的主表对象,然后在获得从表对象,把主表对象设置如从表对象属性删:删除对主表,没有任何影响改:修改对主表没有影响,不过若是要修改关联主表对象,需先获得新的主表对象实

2022-03-01 17:23:55 68

原创 Calende日历的制作

package day01.日期类.Acm;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/** * @author feng .

2022-01-03 15:56:37 232

原创 选择排序0

package sort;/** * @author feng * @Date 2022/1/3 8:46 * 选择排序 * 找出最小元素,然后交换位置 */public class SelectSort { public static void main(String[] args) { int[] array = {20, 40, 30, 10, 60, 50}; int[] s1 = SelectSortMethod(array); .

2022-01-03 09:29:09 387

原创 自动拆箱与装箱,引出==与equals的比较

equals本质上是比较Object的方法的调用。 public boolean equals(Object obj) { return (this == obj); }比较的值相等的原因是很多方法重写了Object的equals方法,比如String重写了equals方法。 public boolean equals(Object anObject) { if (this == anObject) { return tru.

2021-12-22 16:31:45 99

原创 Redis缓存数据一致性问题

为什么会出现缓存数据不一致问题呢,我在修改数据库数据而缓存中并并未更新,或者更新时间慢,我读到的是数据库中的老数据,不符合我的业务需求。1.双写模式:数据更新操作。写入数据库的同时,写入缓存。出现的问题:在写缓存的时候,由于系统延时,写缓存的时候,出现缓存数据不一致问题,也就是出现脏数据问题。脏数据是暂时的,缓存过期之后,又能得到最新的数据。解决方案:设置锁的过期时间,即使不一致,在锁到期之后也会重新查数据库加入缓存。针对自己的业务场景进行锁过期时间的设定。我想让它1s就1s。2.失效模式.

2021-12-19 15:21:32 591

原创 JSR303数据校验三种方式

第一种方式:统一异常信息处理* 1.Bean字段注解,添加自己的提示* 2.开启表单校验* @Validated 注解是让 普通传参 上的注解搭配使用的* @Valid 注解 是让 实体对象传参 上的注解搭配使用的* 3.自定义统一异常处理类 @RestControllerAdvice* 4.自定义状态码信息package com.zhaoye.gulimall.product.exception;import com.zhaoye.common.utils.R;import c.

2021-12-13 22:25:54 446

原创 Springboot做项目时关于table ...xxx is exist的排查思路

1.由于我的项目整合的mybatis,所以先从xml的字段开始排查、mapper文件与到数据名是否一致、sql语句的问题。ok,没问题2.数据库的问题,sql语句在查询数据库视图工具执行时,查询失败,数据库的问题,出现问题时,先找最容易出问题的地方,从下往上一点点排查。感谢查阅。...

2021-11-10 21:08:25 979

原创 RabbitMQ消息确认高级

当交换机宕机或路由不可达时,为了保证消息不丢失,需要通知到发送者。由此引出rabbitmq的消息回退机制。声明一个组件,继承内部接口,去实现rabbitmq宕机时,消息返回给发送者,消息不会丢失。package com.zhaoye.springbootrabbitmq.config;import lombok.extern.slf4j.Slf4j;import org.springframework.amqp.core.Message;import org.springframework.a

2021-11-08 09:54:20 1768

原创 RabbitMQ发布消息之异步确认

最佳性能和资源使用,在出现错误的情况下可以很好地控制,但是实现起来稍微难些//异步确认 public static void publishAsync() throws Exception { Channel channel = RabbitMqUtils.getChannel(); //开启确认发布 channel.confirmSelect(); String queuename = UUID.randomUUID().toS

2021-11-04 09:43:08 1563 1

原创 RabbitMQ消息应答机制

消费者接收消息时突然挂掉,为了保证数据不丢失。引入消息应答机制1.消费者接收消息时手动应答,不进行批处理,批处理时,处理多个消息,而消息是否被处理完成并不知晓,所以关闭批处理。2.消息自动重新入队:消息未发送ack确认,RabbitMQ了解消息未处理,对消息进行重新排队处理,某个挂掉的消费者处理得任务重新交给其他工作完成的消费者处理。...

2021-11-03 15:31:33 169

原创 请求转发与重定向

请求转发:客户端发起请求,服务器控制器接收到请求去处理,可能式jsp、html等服务器内部资源。整个过程服务器只响应一次请求。页面url不发生改变。请求转发共享request域对象。重定向:客户端向服务器发起请求,服务端接收到之后,会把新的Url地址发送回客户端,客户端重新向服务器发起请求,整个过程请求两次,页面url发生改变。request域对象不共享。...

2021-10-24 09:19:30 66

原创 冒泡排序o

package 常见排序算法;/** * @author feng * @Date 2021/10/23 7:21 * 冒泡排序(双层for循环) */public class BuddleSort { public static void doBuddle(int[] arr) { for (int i = 0; i <arr.length-1 ; i++) { //外层循环控制趟数 // 完成一次排序后,循环次数减少i .

2021-10-23 07:37:26 50

原创 直接插入排序(简洁明了)

package 常见排序算法;import java.util.Arrays;/** * @author feng * @Date 2021/10/21 8:04 * 直接插入排序 * */class InsertSort { public static void main(String[] args) { int[] array = {1, 10, 3, 2, 5, 7}; sort(array); } public sta.

2021-10-21 10:23:50 36

原创 TreeMap使用时需要注意Key的比较

TreeMap在存放自定义类型数据时,必须进行key的比较。来实现数据的升序或降序排列无法比较key值时会抛出异常,提醒无法比较。此时,需要自定义数据类型实现比较器比较器有两种1.实现Comparable接口实现内部比较器2.实现Comparator接口实现外部比较器关于比较器,常见的String、Integer、Double等底层实现比较器,重写方法即可。Exception in thread "main" java.lang.ClassCastException: day01.

2021-10-17 21:23:05 308

原创 LinkedList源码分析

手写LInkedLsit简单实现package day01.linkedList模拟;/** * @author feng * */public class Node { // 上一个节点的地址 private Node pre ; //当前存入的元素 private Object obj; //下一个元素的地址 private Node next; public Node getPre() { return

2021-10-17 11:52:32 32

原创 Jdk中ArrayList底层源码分析

底层数组,在调用构造器的时候,初始化底层数组为{} public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};在调用add()方法之后,minCapacity为1 public boolean add(E e) {

2021-10-17 09:28:42 63

原创 spring属性值的注入

1.通过注解方式@Value2.实现@xxxAware的实现类进行属性赋值。当bean实现了对应的Aware接口,BeanFactory 就会在产生这个bean的时候根据对应的Aware接口,给这个bean注入相应的属性,这样bean就能够获取外界资源的引用了。eg:实现EmbeddedValueResolverAware接口调用值解析器实现类...

2021-10-10 17:19:13 62

原创 linux下安装redis

1.安装c语言的编译环境yum install gcc2.下载redis-6.2.1.tar.gz放/opt目录3.解压命令:tar -zxvf redis-6.2.1.tar.gz4.解压完成后进入目录:cd redis-6.2.15.在redis-6.2.1目录下再次执行make命令(只是编译好)6.如果没有准备好C语言编译环境,make会报错—Jemalloc/jemalloc.h:没有那个文件解决方案:运行make distclean在redis-6.2.1目录下再.

2021-10-07 17:47:50 63

原创 springBoot为什么拦截器没有拦截原生Servlet?

原生Servlet和springMvC的dispatcherServlet派发器的处理方式不一样 (url="/")原生Servlet没有走Spring的流程,不能被拦截器拦截。(请求路径精确匹配原则)

2021-09-28 15:51:27 474

原创 SpringBoot异常处理自动配置原理

ErrorMvcAutoConfiguration 自动配置异常处理规则容器中的组件:类型:DefaultErrorAttributes -> id:errorAttributes public class DefaultErrorAttributes implements ErrorAttributes, HandlerExceptionResolver DefaultErrorAttributes:定义错误页面中可以包含哪些数据。 容器中的组件:类型:BasicErrorControll

2021-09-26 15:50:49 72

原创 springBoot配置拦截器的步骤,未生效时,网上找答案实现这个实现那个,整蒙了,就这个。

1 实现 HandlerInterceptor接口中的三个方法2.在webConfig里面配置实现WebMvcConfigurer 重写addInterceptors,指定拦截器拦截规则(注意拦截所有请求时会将静态资源一并拦截)public class WebConfig implements WebMvcConfigurer { //注册中心 @Override public void addInterceptors(InterceptorRegistry reg.

2021-09-24 15:45:52 63

原创 springBoot内容协商原理,追踪流程

将数据以xml的方式返回给浏览器,在参数解析器解析时涉及到内容协商。@ResponseBody @RequestMapping("/test/person") public Person getPerson(){ Person person = new Person(); person.setAge(20); person.setBrith(new Date()); person.setUserName("张三");

2021-09-20 17:12:29 150

原创 SpringBoot响应流程简单分析(个人初学,学了个大概,顺一下流程。记录一下)

响应流程以向控制台输出json数据格式为例,在控制器里面添加注解@Reponse@ResponseBody@RequestMapping("/test/person")public Person getPerson(){ Person person = new Person(); person.setAge(20); person.setBrith(new Date()); person.setUserName("张三"); return person;}

2021-09-19 19:02:16 717

原创 Mybatis逆向工程

1.pom文件中引入jar包<!--mybatis逆向工程--><dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version></dependency>2.配置xml属性配置文件,在配置文

2021-08-08 09:15:48 43

空空如也

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

TA关注的人

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