
java
文章平均质量分 78
耶瞳
这个作者很懒,什么都没留下…
展开
-
java八股系列——Spring Bean的作用域与生命周期
Spring Bean作用域是指在Spring容器中管理的Bean对象的生命周期和可见范围。通过配置Bean的作用域,可以控制Bean的生命周期和可见范围,从而更好地管理和利用Bean对象。注:Global Session是指在整个应用程序中都可以访问和使用的会话对象。关键在于"整个应用程序",因为一个应用可能是部署在多台机器上的,而Global Session是多台机器共享的Session。Global Session可以通过不同的方式实现,例如使用数据库、缓存或分布式存储等。原创 2023-03-08 14:06:04 · 1814 阅读 · 0 评论 -
java八股系列——SpringMVC从接受请求到完成响应的过程
Spring的MVC框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。在整个过程中,Spring MVC还提供了一些其他的功能,如拦截器、数据绑定、数据验证、异常处理等。这些功能可以帮助开发者更方便地开发Web应用程序。原创 2023-03-08 10:45:29 · 1727 阅读 · 0 评论 -
java八股系列——spring事务失效场景
AOP其实就是生成bean对象的代理对象。在bean进行创建初始化时, 如果是有事务注解的方法,就会被进行增强,最终形成代理类。在说明事务失效场景之前,需要先介绍一下AOP,因为。是通过AOP实现的。原创 2023-03-07 21:29:08 · 859 阅读 · 0 评论 -
并发编程——CAS
首先看一个案例:我们开发一个网站,需要对访问量进行统计,用户每发送一次请求,访问量+1,如何实现?我们模拟有100个人同时访问,并且每个人对网站发起10次请求,最后总访问次数应该是1000次。// 总访问量 static int count = 0;// 模拟访问的方法 public static void request() throws InterruptedException {// 模拟耗时5毫秒 TimeUnit . MILLISECONDS . sleep(5);count ++;原创 2023-03-06 22:21:24 · 698 阅读 · 0 评论 -
java八股系列——依赖注入的方式
依赖注入有三种方式:构造方法注入、setter注入与属性注入。而对于属性注入,还有两种注解方式:@Autowired与@Resource。原创 2023-03-06 19:13:20 · 1445 阅读 · 0 评论 -
Java八股系列——线程池拒绝策略
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:CallerRunsPolicy、AbortPolicy(默认策略)、RejectedExecutionException、DiscardPolicy、DiscardOldestPolicy。原创 2023-03-06 13:45:58 · 260 阅读 · 0 评论 -
并发编程——可见性与有序性
JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。原创 2023-03-05 20:22:14 · 814 阅读 · 0 评论 -
并发编程——ReentrantLock
从Java 5开始,引入了一个高级的处理并发的包,它提供了大量更高级的并发功能,能大大简化多线程程序的编写。我们知道Java语言直接提供了synchronized关键字用于加锁,但这种锁一是很重,二是获取时必须一直等待,没有额外的尝试机制。而包提供的ReentrantLock用于替代synchronized加锁。原创 2023-03-05 16:03:56 · 968 阅读 · 0 评论 -
Java八股——wait、sleep与park
sleep()、wait()、park()都可以使线程进入等待状态,但是3种方式在使用上和功能上都有些不同。原创 2023-03-05 11:52:55 · 1138 阅读 · 0 评论 -
并发编程——synchronized优化原理
锁优点缺点适用场景偏向锁加锁和解锁不需要额外的消耗,和执行非同步方法比仅存在纳秒级的差距如果线程间存在锁竞争,会带来额外的锁撤销的消耗适用于只有一个线程访问同步块场景轻量级锁竞争的线程不会阻塞,提高了程序的响应速度竞争的线程如果始终得不到锁会使用自旋,消耗CPU追求响应时间,同步块执行速度非常快重量级锁线程竞争不使用自旋,不会消耗CPU线程阻塞,响应时间缓慢追求吞吐量,同步块执行速度较长。原创 2023-03-04 21:50:33 · 892 阅读 · 0 评论 -
JVM详解——执行引擎
虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够被JVM所识别的字节码指令、符号表,以及其他辅助信息。原创 2023-03-04 00:10:54 · 512 阅读 · 0 评论 -
ThreadLocal详解
ThreadLocal类能提供线程内部的局部变量。这种变量在多线程环境下访问时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。线程并发:在多线程并发的场景下传递数据:我们可以通过ThreadLocal在同一线程的不同组件中传递公共变量线程隔离:每个线程的变量都是独立的,不会互相影响。原创 2023-02-28 23:21:01 · 264 阅读 · 0 评论 -
JVM详解——垃圾回收
GC:垃圾收集(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存。不当的回收可能会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。原创 2023-02-24 11:40:26 · 840 阅读 · 0 评论 -
JVM详解——内存结构
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,具体实现有很多,以下内容如果不额外声明,默认是HotSpot JVM。JVM它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。原创 2023-02-08 10:18:04 · 3956 阅读 · 1 评论 -
字节跳动后端面经
自我介绍聊聊之前实习做的项目聊聊简历里自己的项目谈谈HashMap的结构Hashtable与HashMap的区别ConcurrentHashMap的原理线程的生命周期线程池的设计RabbitMQ与Kafka的区别AMQP的消息模型delete,truncate,drop区别脏读、不可重复读、幻读数据库的MVCC然后是两道算法题。原创 2022-11-30 15:33:17 · 605 阅读 · 0 评论 -
云南白药Java后端面经
从用户发请求到服务响应数据的过程中,SpringMVC做了什么。MyBatis怎么使用注解赋予接口功能的。一个接口多个实现类怎么指定实现类注入。依赖注入为什么注入接口而不是实现类。HashSet如何保证元素不重复。谈项目,项目的难点以及解决方案。HashMap的线程安全问题。voliate关键字的作用。谈谈Java三大特性。一道sql分组查询题。对JDK线程池的使用。原创 2022-11-14 15:06:59 · 3124 阅读 · 5 评论 -
Java八股系列——集合框架
这两个类都实现了 List 接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的,这是HashSet 之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与hashset没有任何关系,但为了说清楚ArrayList 与Vector的功能,我们使用对比方式,更有利于说明问题)。原创 2022-10-31 16:43:38 · 95 阅读 · 0 评论 -
设计满足约束的三角形类
设计一个三角形类,类中有代表三条边的int型成员,满足如下约束:(1)三角形类中的任一属性均不能被其他类存取;(2)创建出的任一三角形均满足约束:边长均为正整数,且任意两边之和大于第三边;(3)该类至多只能创建10个三角形。请完成三角形类的设计,并编写测试类,已验证以上约束。原创 2022-10-29 21:32:15 · 436 阅读 · 0 评论 -
Java八股系列——Java数据结构
Enumeration接口中定义了一些方法,通过这些方法可以枚举(一次获得一个)对象集合中的元素。这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码中已经被很少使用了。尽管如此,它还是使用在诸如Vector和Properties这些传统类所定义的方法中,除此之外,还用在一些API类,并且在应用程序中也广泛被使用。Enumeration只是接口,具体使用还得靠实现类,下面是使用示例。原创 2022-11-14 15:08:29 · 186 阅读 · 0 评论 -
八股系列——Java基础
序列化是⼀种将对象转换成字节序列的过程,用于解决在对对象流进行读写操作时所引发的问题。序列化可以将对象的状态写在流里进行网络传输,或者保存到文件、数据库等系统里,并在需要的时候把该流读取出来重新构造成⼀个相同的对象。在泛型使用过程中,操作的数据类型被指定为⼀个参数,这种参数类型在类中称为泛型类、接口中称为泛型接口和方法中称为泛型方法。Java 编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程被称为泛型擦除。29.在 Java 中定义⼀个不做事且没有参数的构造方法的作用。原创 2022-11-14 15:40:47 · 1014 阅读 · 0 评论 -
nested exception is io.lettuce.core.RedisCommandTimeoutException
org.springframework.dao.QueryTimeoutException: Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 5 second(s)原创 2022-10-04 19:50:13 · 1207 阅读 · 0 评论 -
Spring Security(八) —— 异常处理
认证自定义异常授权自定义异常至于这两个方法怎么使用,我们可以进入源码看看首先是,可以看到,该方法要求我们传入AuthenticationEntryPoint的对象}进入AuthenticationEntryPoint接口,可以看到只有一个方法,因此在authenticationEntryPoint方法中可以直接传入Lambda表达式,但那样写不美观,配置与实现应该分离,因此我们可以新建一个类去实现这个接口/***处理认证访问相关异常}/***处理权限访问相关异常。...原创 2022-07-26 11:53:04 · 1305 阅读 · 0 评论 -
Spring Security(七) ——跨域配置
CORS(Cross-OriginResourceSharing)是由W3C制定的一种基于HTTP头的跨域资源共享技术标准,其目的就是为了解决前端的跨域请求,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),使得浏览器允许这些origin访问加载自己的资源。在JavaEE开发中,最常见的前端跨域请求解决方案是早期的JSONP,但是JSONP只支持GET请求,这是一个很大的缺陷,而CORS则支持多种HTTP请求方法,也是目前主流的跨域解决方案。...原创 2022-07-26 11:08:45 · 4065 阅读 · 0 评论 -
Spring Security(六) —— CSRF
CSRF(Cross-siterequestforgery)跨站请求伪造,也叫一键式攻击(one-click-attack),通常缩写为CSRF或者XSRF,攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。CSRF通常是跨域的,因为外域通常更容易被攻击者掌控。。小明还在继续刷着邮件,殊不知他的邮件正在一封封地,如脱缰的野马一般地,持续不断地向着黑客的邮箱转发而去。=...原创 2022-07-26 11:07:25 · 4669 阅读 · 1 评论 -
Spring Security(五) —— 会话管理
当浏览器调用登录接口登录成功后,服务端会和浏览器之间建立一个会话(Session)浏览器在每次发送请求时都会携带一个Sessionld,服务端则根据这个Sessionld来判断用户身份。当浏览器关闭后,服务端的Session并不会自动销毁,需要开发者手动在服务端调用Session销毁方法,或者等Session过期时间到了自动销毁。...原创 2022-07-25 15:22:01 · 797 阅读 · 0 评论 -
Spring Security(四) —— RememberMe
RememberMe即记住我,常用于Web应用的登录页目的是让用户选择是否记住用户的登录状态。当用户选择了RememberMe选项,则在有效期内若用户重新访问同一个Web应用,那么用户可以直接登录到系统中,而无需重新执行登录操作。具体的实现思路就是通过Cookie来记录当前用户身份。...原创 2022-07-25 12:38:37 · 1536 阅读 · 0 评论 -
Spring Security(三) —— 加密系统
一般来说,即使SpringSecurity提供的加密算法很安全,但我们仍然有自己定义加密算法的需求,此时我们就需要自定义PasswordEncoder的实现类了在WebSecurityConfigurerAdapter中有这样两个静态内部类和/***构造方法,默认创建一个defaultPasswordEncoder*而defaultPasswordEncoder是由LazyPasswordEncoder设置的,可以往下看通过源码可以知道,默认的passwordEncoder是通过。...原创 2022-07-24 18:43:05 · 2280 阅读 · 0 评论 -
Spring Security(二) —— 自定义配置
http.authorizeRequests().regexMatchers("/login1").permitAll()//注意要开放登录请求接口.mvcMatchers("/hello1").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login1")//指定登录页面路径.loginProcessingUrl("/doLogin");时会拦截请求并抛出。...原创 2022-07-24 00:28:03 · 1406 阅读 · 0 评论 -
Spring Security(一) —— 整体架构与入门案例分析
在Spring Security的架构设计中,认证和授权是分开的,无论使用什么样的认证方式。都不会影响授权,这是两个独立的存在,这种独立带来的好处之一,就是可以非常方便地整合一些外部的解决方案。.........原创 2022-07-22 16:05:53 · 616 阅读 · 0 评论 -
StringRedisTemplate与RedisTemplate的区别,以及Redis的工具类封装
StringRedisTemplate与RedisTemplate区别点RedisTemplate中定义了5种数据结构操作:StringRedisTemplate常用操作基于StringRedisTemplate封装一个缓存工具类,满足下列需求:以下封装涉及到了缓存穿透与缓存击穿的解决方案,如果对两者不熟悉,可以看看我的另一篇博客了解一下这些解决方案:数据库面试题——redis缓存穿透、缓存击穿与缓存雪崩依赖:封装:如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔的个人空间.........原创 2022-07-21 17:36:40 · 954 阅读 · 0 评论 -
记一次封装接口返回值问题
当然如果不是微服务项目的话,可以直接使用我上面发的封装,如果是微服务项目就得注意我说的那几个修改点。因为是code、msg和data都变成了内部类的成员属性,所以类型都是。原创 2022-07-20 19:00:15 · 1842 阅读 · 0 评论 -
注解与反射
Java注解用于为Java代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java注解是从Java5开始添加到Java的。Java语言中的类、方法、变量、参数和包等都可以被标注。和Javadoc不同,Java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java虚拟机可以保留标注内容,在运行时可以获取到标注内容。注解一般可以分为三类元注解,标准注解,自定义注解。...原创 2022-07-19 19:49:42 · 210 阅读 · 0 评论 -
从Timer到Quartz实现动态管理定时任务
在学习定时任务前,需要先了解小顶堆结构,因为Timer和定时任务线程池底层的数据结构都是基于小顶堆,而quartz是基于时间轮算法。原创 2022-07-19 19:47:20 · 1009 阅读 · 1 评论 -
maven资源加载属性值出错的问题
注意,由于application.properties和application.yml文件接受spring样式的占位符(${…}),所以mavenfilter将更改为使用@…(可以通过设置名为resource.delimiter的maven属性来覆盖该属性。我们可以看spring-boot-starter-parent里的pom.xml,里面配置了资源分隔符插件,因此如果有需求可以自己覆盖掉。我之前一直是用${…...原创 2022-07-17 09:53:03 · 385 阅读 · 0 评论 -
springcloud springcloudAlibaba springboot 版本对应
2.0.4.RELEASE(停止维护,建议升级)1.5.1.RELEASE(停止维护,建议升级)转载 2022-07-16 19:54:48 · 1901 阅读 · 0 评论 -
idea报错Cannot access com.XXX.XXX
其实出现这个bug的时候我还懵的一批,还以为自己对maven和java出现了什么误解,因为我认为没有语法问题,我怀疑是因为我修改了包的位置,导致idea出错,重启idea和删除.idea文件都没用,最后还是清除idea缓存,才正常了。...原创 2022-07-16 14:50:40 · 606 阅读 · 0 评论 -
一遍文章搞清楚VO、DTO、DO、PO的概念、区别
下面以一个时序图建立简单模型来描述上述对象在三层架构应用中的位置对于一个逆向操作,如读取数据,也是用类似的方式转换和传递,略。VO与DTO的区别:大家可能会有个疑问(在笔者参与的项目中,很多程序员也有相同的疑惑):既然DTO是展示层与服务层之间传递数据的对象,为什么还需要一个VO呢?对!对于绝大部分的应用场景来说,DTO和VO的属性值基本是一致的,而且他们通常都是POJO,因此没必要多...转载 2022-06-24 14:22:39 · 507 阅读 · 0 评论 -
springboot项目下logback配置
配置详情可参考大佬博客:logback的使用和logback.xml详解以下是我目前使用的logback-spring配置原创 2022-06-23 20:00:33 · 804 阅读 · 0 评论 -
shiro官方示例
以下代码来自于shiro官方提供的代码,便于新手入门shiro api,中文为个人翻译,仅供参考原创 2022-06-22 19:15:41 · 249 阅读 · 0 评论 -
Error querying database. Cause: java.lang.UnsupportedOperationException
mybatis中,`resultType`的类型应该是返回集合中单个元素的类型,我直接写了list,所以报错,因此把`resultType`改成返回集合中单个元素的类型或者map之类的就可以了。原创 2022-06-04 16:11:19 · 2241 阅读 · 0 评论