自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1.8jdk的百度云

链接:https://pan.baidu.com/s/1KErT5PutPXiR-3KZZu_wSA提取码:ydj5复制这段内容后打开百度网盘手机App,操作更方便哦

2021-02-28 18:06:43 16723

原创 一秒学会AQS

进一步理解锁和同步器的关系锁,面向锁的使用者:定义了程序员和锁交互的使用层API,隐藏了实现细节,你调用即可同步器,面向锁的实现者:Java并发大神DoungLee,提出了统一规范并简化了锁的实现,将其抽象出来,屏蔽了同步状态管理、同步队列的管理和维护、阻塞线程排队和通知、唤醒机制等,是一切锁和同步组件实现的----公共基础部分AbstractQueuedSynchronizer类AbstractQueuedSynchronizer类会执行 tryAcquire方法。

2024-12-03 15:14:09 799 1

原创 springboot面试题

starter提供了一个自动化配置类,一般命名为 XXXAutoConfiguration ,在这个配置类中通过条件注解来决定一个配置是否生效(条件注解就是 Spring 中原本就有的),然后它还会提供一系列的默认配置,也允许开发者根据实际情况自定义相关配置,然后通过类型安全的属性注入将这些配置属性注入进来,新注入的属性会代替掉默认属性。javaWeb是 Java 语言的 Web 开发技术,主要用于开发 Web 应用程序,包括基于浏览器的客户端和基于服务器的 Web 服务器。准生产环境的运行应用监控。

2023-11-13 22:57:56 435

原创 Mybatis面试题

因为在使用SqlSession第一次查询后,Mybatis会将结果放到缓存中,以后再次查询时,如果没有声明需要刷新,并且缓存没超时的情况下,SqlSession只会取出当前缓存的数据,不会再次发送SQL到数据库。若使用不同的SqlSession,因为不同的SqlSession是相互隔离的,不会使用一级缓存。缓存:合理使用缓存是优化中最常见的方法之一,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能。

2023-11-12 22:42:30 333

原创 mybatis面试题

分页插件的基本原理是使用 Mybatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql(SQL 拼接 limit),根据 dialect 方言,添加对应的物理分页语句和物理分页参数,用到了技术 JDK 动态代理,用到了责任链设计模式。这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是。的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。

2023-11-07 22:55:55 497

原创 Mybatis的工作原理

构建 mybatis 的config,xml,java的mapper,entity类config文件

2023-11-05 21:52:14 199

原创 Mybatis 概述

MyBatis 是一款优秀的框架,它支持定制化以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

2023-11-03 22:43:22 386

原创 springMVC面试题

SpringMVC的处理器拦截器()类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理,用户可以自己定义一些拦截器来实现特定的功能。而拦截器链就是将拦截器按一定的顺序联结成一条链【servlet中有过滤器链】。preHandle是前置操作,Handle执行前执行,返回布尔值,表示是否通过拦截器。如果该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果不需要再调用其他的组件去处理请求,则返回false;

2023-10-30 22:51:05 162

原创 springMVC 面试题

Controller: 用于标识此类的实例的是一个控制器@RequestMapping: 映射url路劲@ReponseBody: 返回JSON数据@RequestBody:将JSON数据转换为json数据,将json数据转换为Java对象@PathVaiable: 获得URL中路径变量中的值@Param: 获取请求参数。

2023-10-28 20:06:03 616

原创 回溯算法总结

回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。用回溯算法解决问题的一般步骤为:1、定义一个解空间,它包含问题的解。2、利用适于搜索的方法组织解空间。3、利用深度优先法搜索解空间。4、利用限界函数避免移动到不可能产生解的子空间。问题的解空间通常是在搜索问题的解的过程中动态产生的,这是回溯算法的一个重要特性。

2023-10-26 22:57:17 195

原创 SpringMVC原理及核心组件

Spring MVC 是一个对javaWeb中Servlet 简化和封装,1.首先SpringMVC 配置DispatcherServlet 来接受所有的请求,我们通过DispatcherServlet 响应的所有数据,DispatcherServlet 是HttpServlet的子类,他的所有方法(Get,Post…)最终都会执行doDispatch方法2.根据用户的输入url通过SpringMVC handlerMapping组件 找到对应的 HandlerExecutionChain 执行链。

2023-10-24 22:41:14 768

原创 springMvc的简介

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

2023-10-23 23:00:29 1249

原创 spring面试题

另外,@Autowired是Spring提供的,@Resource是JSR-250提供的,是Java标准,我们使用的IoC容器会去兼容它,这样即使更换容器,也可以正常工作。当多个用户同时请求一个服务时,容器会给每一个请求分配一个线程,这时多个线程会并发执行该请求对应的业务逻辑,如果业务逻辑有对单例状态的修改(体现为此单例的成员属性),则必须考虑线程安全问题。对象,并对此成员变量的值进行修改操作,因此会互相影响,会有并发安全的问题。Spring的Bean默认都是单例的,某些情况下,单例是并发不安全的。

2023-10-21 23:00:14 583

原创 Spring怎么解决循环依赖的问题?

spring 容器在获取bean的时候首先从一级缓存总获取,获取不到,到二级缓存获取,如果获取不到到三级缓存获取,如果从三级缓存获取到了就会从三级缓存中删除缓存,然后将从三级缓存获取的半成品bean放到二级缓存。: 单例对象工厂map,bean name --> ObjectFactory,单例对象实例化完成之后会加入singletonFactories。二级缓存 主要存放完成实例化未初始化的单例对象map,bean name -->对于属性注入的循环依赖(单例模式下),是通过三级缓存处理来循环依赖的。

2023-10-20 00:00:01 290

原创 spring事务面试题

因为spring事务底层使用了aop,也就是通过jdk动态代理或者cglib,帮我们生成了代理类,在代理类中实现的事务功能。如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按PROPAGATION_REQUIRED属性执行。:通过编程的方式管理事务,自己设置未提交模式,自己获取连接,自己预编译,自己回滚,自己提交事务。如果存在一个事务,支持当前事务,如果不存在事务,则抛出异常。如果存在事务,支持当前事务,当前没有事务,则非事务的执行。总是非事务存在,如果存在一个活动事务,则抛出异常。

2023-10-17 22:03:57 558

原创 Spring面试题

2.@Resource是j2ee的注解,默认是根据类型匹配的,要是有多个同一类型的bean会根据,name值来找,如何没有指定name 值,就会根据实例的名字来找。@Bean 是使用 Java 代码装配 Bean,@Component 是自动装配 Bean。@Bean注解方法上,表示这个方法会返回一个Bean,@Bean需要在配置使用,类上需要加@Configuration注解。找到同一种类型的bean,然后将这一个bean注入到另外的bean中,注意注入过程中需要有setter器。

2023-10-16 22:00:53 105

原创 Spring面试题

1.调用bean的构造方法创建Bean2.通过反射调用Set方法设 bean的属性3.如果Bean 实现了实现了接口,Spring将调用(),设置Bean的name4.如果Bean实现了BeanFactoryAware接口,Spring将调用把bean factory设置给Bean5.如果存在接口,Spring 将 调用它们的(预初始化)方法,在Bean初始化前对其进行处理6.如果Bean 实现接口,spring将调用它的。

2023-10-12 00:01:34 181

原创 spring ioc源码解读

ClassPathApplication,AnnotationConfigApplicationContext 等spring容器 通过加载spring配置信息,以下以ClassPathApplication为例。

2023-10-10 00:11:39 154

原创 spring面试题

ioc 也称为控制反转,由Spring容器管理bean的整个生命周期,通过反射实现对其他对象的控制在Spring创建对象的过程中,把对象依赖的属性注入到对象中。依赖注入主要有两种方式:构造器注入和属性注入。

2023-10-08 23:45:25 130

原创 spring面试题

面向切面编程,作为面向对象的一种补充,将公共逻辑(事务管理、日志、缓存等)封装成切面,跟业务代码进行分离,可以减少系统的重复代码和降低模块之间的耦合度。切面就是那些与业务无关,但所有业务模块都会调用的公共逻辑。

2023-10-07 23:40:55 176

原创 java8新特性

有且仅有一个抽象方法的接口。Java中的函数式编程体现就是Lambda表达式。所以函数式接口即可以适用于Lambda使用的接口。你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方法上进行声明).我们可以在任意函数式接口上使用注解,这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。

2023-10-07 00:20:33 138

原创 Java面试题

采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。java.util.concurrent包下的容器都是安全失败,可以在多线程下并发使用,并发修改。原理:由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发Concurrent Modification Exception。缺点。

2023-10-06 00:57:09 216

原创 Java集合面试题

HashMap是无序的,迭代HashMap所得到元素的顺序并不是它们最初放到HashMap的顺序,即不能保持它们的插入顺序。LinkedHashMap继承于HashMap,是HashMap和LinkedList的融合体,具备两者的特性。每次put操作都会将entry插入到双向链表的尾部。

2023-10-04 00:54:58 178

原创 HashMap面试题

Hash 值的范围值比较大,使用之前需要先对数组的长度取模运算,得到的余数才是元素存放的位置也就是对应的数组下标。这个数组下标的计算方法是。将HashMap的长度定为2 的幂次方,这样就可以使用位运算代替%取余的操作,提高性能。// 容纳键值对的最大值// 负载因子int size;Node[] table的初始化长度length为16,默认的loadFactor是0.75,0.75是对空间和时间效率的一个平衡选择,根据泊松分布,loadFactor 取0.75碰撞最小。

2023-10-02 23:03:23 911

原创 java集合

foreach遍历的时候删除元素会导致数组删除失败,可以使用迭代器的remove()方法。1.Arraylist 基于数组实现的,linkedList基于链表实现的。

2023-09-30 00:15:52 204

原创 23种设计模式(简单介绍)

静态常量的方式,静态代码块的方式线程不安全 //线程安全,同步方法 // 效率比较低每次都需要进行判断线程安全,同步代码块 // 效率高,但是可以造成多个实例静态内部类 // 效率高 ,也不会出现安全问题枚举 // 效率高,安全。

2023-09-28 14:44:27 349

原创 ArrayList 的扩容机制

创建用户自定义长度的数组ArrayList扩容的核心从ensureCapacityInternal方法说起。可以看到前面介绍成员变量的提到的ArrayList有两个默认的空数组:**DEFAULTCAPACITY_EMPTY_ELEMENTDATA:**是用来使用默认构造方法时候返回的空数组。如果第一次添加数据的话那么数组扩容长度为DEFAULT_CAPACITY=10。

2023-09-27 07:56:09 235

原创 Java集合

ArrayList 继承了 AbstractList ,并实现了 List 接口。派生出来的,Collection有三个子接口:List、Set、Queue。的底层是动态数组,它的容量能动态增长。map集合是一个键值对的集合,可以存一个key,一个value。Queue集合就是队列,先进先出的数据结构,栈是。list集合是有序可重复的接口。set集合是无序序可重复的接口。list集合是有序可重复的接口。set集合是无序序可重复的接口。Java集合类主要由两个接口。集合体系中常用的实现类有。

2023-09-24 23:46:30 156

原创 Java面试题十二天

使用基本数据类型定义属性时,如果没有给属性赋初始值,会使用默认值(如 int 的默认值为 0),而使用包装类型定义属性,如果没有给属性赋初始值,属性的值为 null,这样可以更加清晰地表达属性的状态,在一些业务场景上,null是有实际业务含义的。:在一些特定场景下,如果使用基本数据类型定义属性,需要进行多次装箱和拆箱操作,这个操作会带来额外的性能开销和代码复杂度。而使用包装类型定义属性,可以避免这个问题,提高代码的效率和可读性。

2023-09-24 00:44:32 227

原创 Java面试题基础第十一天

有以下有几种方法,跨域资源共享我们可以通过springboot 为每一个请求设置它的请求头,来设置它的可以跨域 的路径,这样可以为每一个请求都可以跨域了我们可以通过springboot 来设置Controller类加个@CrossOrigin注解就可以进行跨域了,注意SpringMVC的版本要在4.2或以上版本才支持@CrossOrigin。nginx反向代理跨域原理如下: 首先同源策略是浏览器的安全策略,不是HTTP协议的一部分。

2023-09-21 23:50:18 253

原创 一、Java面试题基础第十天

Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter)这种参数类型可以用在类接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

2023-09-20 23:43:12 300

原创 Java基础面试题

只要我们将Java对象存储在磁盘里面就需要序列化,要将Java对象从磁盘转换到内存时就需要反序列化,

2023-09-19 23:32:50 92

原创 Java面试题第八天

*浅克隆:**浅克隆就是我们可以通过实现Cloneable接口,重写clone,这种方式就叫浅克隆,浅克隆 引用类型的属性,是指向同一个内存地址,但是如果引用类型的属性也进行浅克隆就是深克隆**深克隆:**深克隆,将一个对象克隆一份,他们之前的引用的对象的属性也是同一份。

2023-09-17 00:51:31 406

原创 java面试题基础第七天

守护线程也称之为后台线程,守护线程的主要作用于为其他线程提供服务,当守护线程守护的主线程结束后,守护线程也将结束,比如,文件下载时,一条主线程实现文件拷贝,另一条子线程用于计算下载进度,该条子线程主要为下载线程提供服务,因此计算下载进度的线程可以定义为守护线程;这种工作其实就是BIO,每次来一个请求(顾客),就分配到线程池中由一个线程(职员)处理,如果超出了线程池的最大上限(10个),就扔到队列等待。这种方式下,假设顾客非常多,职员A的工作处于饱和中,他不断的将填好表的顾客带到柜台处理。

2023-09-16 00:05:39 249

原创 java面试题第七天

在同一个类中,不同的方法拥有同样的方法名,不一样的参数列表,这就叫做方法重载**方法的重写:**描述的是父类和子类之间的。当父类的功能无法满足子类的需求,可以在子类对方法进行重写。方法重写时, 方法名与形参列表必须一致。

2023-09-15 00:05:58 740

原创 Java面试题基础第六天

Java创建对象有以下几种方式:用new语句创建对象。使用反射,使用Class.newInstance()创建对象。调用对象的clone()方法(浅克隆)。运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法(深克隆)。

2023-09-14 00:02:46 187

原创 学习Java基础面试题第五天

在学习和开发过程中,我们经常会讨论 short ,int 和 long 这些基本数据类型的取值范围,但是对于 String 类型我们好像很少注意它的“取值范围”。那么对于 String 类型,它到底有没有长度限制呢?其实 String 类型的对象,他们是有长度限制的, String 对象并不能“存储”无限长度的字符串。关于 String 的长度限制要从和两方面考虑。String类提供了一个length方法,返回值为int类型,而int的取值上限为2^31 -1。

2023-09-11 23:09:28 615

原创 java基础面试题 第四天

StringJoiner是Java 8新增的一个API,他是基于StringBuilder实现,用于实现对字符串之间通过分隔符拼接的场景。StringJoiner sj = new StringJoiner("间隔符号");//创建一个StringJoiner对象,指定拼接时的间隔符号间隔符号为:“---”1---2---3StringJoiner sj = new StringJoiner("间隔符号","开始符号","结束符号");

2023-09-10 00:02:49 299

原创 java基础面试题第二天

值转递转递的是值不会对原来数值进行修改引用传递是对象,指向同一块内存区域,修改的值会对应修改java中不存在引用传递,只有值传递。即不存在变量a指向变量b,变量b指向对象的这种情况。

2023-09-07 23:41:26 504

原创 面向对象编程的六大原则

如果对每个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有发生变化,那么类型T2是类型T1的子类型。里氏替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖 来解决问题。使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去。对类来说的,即一个类应该只负责一项职责。客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。

2023-09-06 23:22:13 148

空空如也

空空如也

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

TA关注的人

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