请允许在我们的网站上展示广告
您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。
我已知悉
文章发布订阅~
通过邮箱订阅文章更新,您将在文章发布时收到及时的邮件提醒~
邮箱
昵称
订阅
关闭
首页
专栏
橙Bot
动态
图库
留言板
友链
1
Java如何优雅地创建不可变集合?
2
为什么IDEA不建议使用append拼接字符串?
3
Java为啥不用UTF-8解析properties文件?
4
为什么反射不再是java的最佳选择?
5
全面解析 JDK 9 新特性:模块化、性能优化与全新 API
橙序员
累计撰写
217
篇文章
累计创建
70
个标签
累计收到
4
条评论
栏目
首页
专栏
橙Bot
动态
图库
留言板
友链
搜索
标签搜索
JDK
响应式编程
R2DBC
小说
成长
公众号
事务
流处理
大数据
旅行
mongo db
SUNO
github
IDEA
安全
注解
总结
求职
分布式事务
CAP
分布式系统
loadbalancer
装修
买房
前端
方案设计
AIGC
JVM
资讯
Netty
NIO
BIO
zookeeper
RocketMQ
MySQL
stable diffusion
spring MVC
spring AOP
JDBC
mybatis
logback
docker
consul
spring event
新冠
连接池
redis
运维
nginx
hiper-v
DDD
搞笑
数据库
团建
游戏
Gradle
心情
好物
eureka
spring framework
spring boot
设计模式
apache common
ShardingSphere
KAFKA
leetcode
spring cloud
feign
ES
起点
目 录
CONTENT
以下是
开发技巧
相关的文章
2023-05-05
MVC如何简化请求处理?
本文介绍了在使用servlet开发web项目时web.xml文件的配置以及如何简化配置内容。传统方式下每个servlet需在web.xml中配置,导致文件内容过多。为此,引入了MVC框架的核心组件DispatcherServlet,通过该组件完成所有请求的映射处理。文章列举了spring mvc的配置示例,并详细介绍了DispatcherServlet的操作流程,包括初始化监听器和过滤器、注册请求映射、调用处理方法、渲染视图并返回结果给客户端。最后,文章解析了DispatcherServlet的继承关系和功能,包括HttpServletBean、FrameworkServlet和DispatcherServlet。DispatcherServlet的工作可以分为环境初始化、请求映射注册和请求调用处理三个阶段。
2023-05-05
686
0
2
开发技巧
2023-04-28
AOP如何进行功能增强
该文介绍了动态代理的实现方式,包括使用JDK动态代理和Cglib动态代理的示例代码以及实践。在使用JDK动态代理时,代理的目标是接口,而在使用Cglib动态代理时,代理的目标是对象。此外,还介绍了代理模式的实践,AOP的概念和实现原理。Spring AOP通过动态代理扩展代理对象的功能,通过代理链方式叠加增强器完成对代理对象的拓展。在Spring IOC获取Bean时,通过实现BeanPostProcessor返回对应的代理对象。文章还详细介绍了代理对象的创建流程,包括初始化前置处理和初始化后置处理,通过获取切面和增强器创建代理对象。最后,总结了代理对象创建的两个步骤和增强器获取主要流程,包括获取所有切面、过滤出可用增强器、排序切面等步骤。
2023-04-28
692
0
0
开发技巧
2023-04-22
bean工厂的功能拓展
Spring 中的应用容器 ApplicationContext 在管理 Bean 的过程中提供了更多的功能和灵活性,与传统的 Bean 工厂相比,它实现了资源加载器、环境变量、国际化消息、事件发布器、生命周期等功能接口。通过创建应用容器,我们可以实现环境变量验证、SPEL 属性编辑器、容器级后置处理器、国际化消息、事件发布和监听、生命周期监控等功能。应用容器启动时会调用 refresh 方法,依次进行容器初始化、环境变量验证、Bean 工厂初始化、自定义容器操作等流程。在关闭时,需要发布关闭事件、销毁单例、关闭 Bean 工厂等操作。通过监听容器事件可以实现对容器状态的监听,也可以创建自定义容器并重写相应方法。通过应用容器的功能,我们可以实现更多定制化的操作和管理方式。
2023-04-22
649
0
2
开发技巧
2023-04-16
bean获取&bean工厂职责梳理
本文介绍了如何通过内部类实现流程测试用例,以及Spring配置文件中如何定义嵌套的bean。在调试过程中,发现属性为内部bean时会执行特定处理逻辑,再次调用getBean()方法处理内部bean的依赖对象。内部bean处理代码示例中演示了如何解析BeanDefinitionHolder和BeanDefinition,并获取内部bean的bean定义。通过注册内部bean和保证其依赖对象的初始化,实现了内部bean的处理过程。整体流程清晰,对内部类的处理方式进行了详细讲解,有助于深入理解内部类在Spring框架中的应用。
2023-04-16
618
0
0
开发技巧
2023-04-16
spring如何解决循环依赖
在日常开发中,我们经常会遇到A、B类之间互相依赖的情况。如果需要手动创建这样的对象,就需要按照一定的顺序实例化和赋值,否则会导致循环依赖和内存溢出。为了解决这个问题,可以利用Spring容器的特性,通过配置文件将相互依赖的A、B对象交由Spring容器创建。在Spring中,当创建bean时会将其放入缓存,以便在其他对象创建时获取。通过对bean的初始化过程进行改造,可以实现循环依赖的解决方案。Spring的实现思路与手动创建对象的过程类似,主要是在创建bean时进行缓存处理。通过对bean的单例性和循环依赖进行判断,可以有效解决循环依赖导致的内存溢出问题。
2023-04-16
569
0
2
开发技巧
2023-04-09
spring如何实现依赖注入?
本文主要介绍了在上一篇关于Spring如何实现控制反转的文章中留下的一个拓展问题:如何使用容器创建依赖对象的实例。首先通过手动创建对象的过程和通过Spring容器创建对象的流程进行对比,指出了在Spring配置文件中新增属性集合和属性注入方式等改动点。接着介绍了属性注入和依赖注入两个概念,并说明了它们对代码可读性和维护性的影响。最后,针对新增功能的实现方法进行了详细讨论,并展示了Spring中的属性注入实现原理,以及对应的源码分析。通过对比和解释,帮助读者更好地理解Spring如何实现依赖对象的创建和属性注入过程。
2023-04-09
634
0
0
开发技巧
2023-04-09
spring如何实现控制反转?
摘要:控制反转(Inversion of Control)是一种编程思想,传统的对象创建流程中用户需要使用new关键字来创建对象,而控制反转则是将对象的创建和管理交由框架或容器来完成,实现了对象创建的反转。Spring框架是一个典型的控制反转的实现,通过配置xml文件来定义对象的创建方式,从而提高代码的灵活性和可维护性。为了实现控制反转,需要对配置文件进行解析和对象创建过程进行管理,包括文档加载器、对象定义文档阅读器、对象定义解析器、对象工厂等组件。通过对spring源码的分析,可以了解控制反转的具体实现过程,从而提高代码的可复用性和可测试性。
2023-04-09
856
0
0
开发技巧
2023-04-02
Mybatis如何简化CRUD过程?
本文介绍了Java如何连接数据库的过程,包括加载驱动、创建连接和执行SQL等步骤。对于CRUD操作中的重复操作,需要针对每张表进行处理,将查询结果封装到实体类中,实现数据的持久化。文章还提到了如何避免重复代码和硬编码,面对多样的查询和更新需求应该做到结果集解析一次、多处可用。针对数据库操作的需求实现,提出了解决表对象关系映射、类的持久化、保存结果集和转义数据库信息配置等4个大问题,并给出了实现步骤和对象职责的详细分析。总体而言,本文通过具体案例和步骤展示了如何用最小改动或不改动应对多样需求,提高代码复用性和安全性。
2023-04-02
1102
2
1
开发技巧
2023-03-26
记一次logback引发线上的内存报警
最近接手的服务经常出现线上内存溢出问题,导致服务需要频繁重启。经过查看内存使用记录,发现内存占用在上线后1天就达到4G以上,其中大部分内存被char数组占用了61%。这些char数组中存储了大量的日志记录,而由于老服务的日志打印过于频繁,每条日志的大小在6、7K之间。此外,阻塞队列设置得过小,并且没有设置neverBlock导致业务线程阻塞,导致堆文件里充斥着大量日志。通过查看logback的源码可以发现,当存储日志时,logback会先将日志放入阻塞队列中,根据neverBlock的值决定是采用阻塞方式还是非阻塞方式存储。neverBlock为false时,采用非阻塞方式存储,否则采用阻塞方式存储。
2023-03-26
2058
0
0
开发技巧
2023-03-26
java如何连接数据库?
本文主要介绍了如何使用Java连接数据库以及JDK如何规范不同数据库驱动的实现。对于执行SQL操作,需要包括连接数据库、执行SQL、解析结果集等步骤。文章还提到了在java.sql.*中关于SQL相关的接口和工具类的作用。针对查询MySQL数据库的技术方案,包括连接MySQL服务端、执行命令、创建数据库连接、执行SQL及解析返回结果等步骤。文章还介绍了面向对象的实现方式以及数据库驱动、数据库连接、SQL执行器和结果集对象的职责。最后,文章探讨了JDK如何封装数据库驱动、数据库连接、SQL执行器和结果集,以及其他框架如何进一步封装这些对象。文章总结了类加载阶段注册驱动和基于Java socket编程连接数据库的方法。整体来看,本文详细介绍了Java连接数据库的相关知识。
2023-03-26
871
0
0
开发技巧
2023-03-03
chatGPT来面试-数据库篇
数据库的三级缓存指的是Hibernate框架中的缓存机制,包括Session缓存、SessionFactory缓存和Query缓存。Hibernate通过这三个层级的缓存提高了应用程序的性能和响应速度。相比之下,MyBatis也提供了缓存机制,包括一级缓存和二级缓存,通过本地缓存和应用程序内存缓存来提高查询性能。缓存机制是基于Java的HashMap实现的,能够有效提高查询性能和应用程序的响应速度。此外,数据库使用MVCC保证事务的一致性,通过给数据行分配版本号,实现多个事务同时对数据库进行读写操作,保证事务之间的隔离性和一致性。MVCC的实现方法包括生成新版本号、读取相应版本的数据行和标记已提交/已删除的数据行,确保事务提交后其他事务只能读取已提交的数据版本。
2023-03-03
666
0
0
开发技巧
2022-11-26
DBCP连接池原理与配置分析【三】
本文介绍了数据库连接池的创建过程和配置属性讲解。文章主要以GenericObjectPool.create()方法为切入点,详细讲解了数据库连接池的初始化过程。在连接池的创建过程中,使用了PoolableConnectionFactory.makeObject方法来创建具体的数据库连接。这里提到了池化连接PoolableConnection继承了DelegatingConnection,实现了Connection接口,Connection接口可以执行SQL语句并返回结果。文章还介绍了Connection接口的一些主要方法,包括createStatement方法用于创建Statement对象发送SQL语句到数据库。总体来说,本文详细介绍了数据库连接池的创建和配置过程。
2022-11-26
946
0
0
开发技巧
2022-11-20
DBCP连接池原理与配置分析【二】
对象连接池属性主要封装在BaseGenericObjectPool中,包括最大连接数量、连接耗尽时是否等待、最大等待时间、连接获取顺序等属性。在连接池创建过程中,maxTotal用于初始化连接池数量,blockWhenExhausted用于指定连接耗尽时是否等待获取连接,maxWaitDuration表示最大等待时间。在连接使用过程中,testOnBorrow和testOnCreate属性用于检测连接可用性。管理空闲连接的定时任务通过durationBetweenEvictionRuns属性设置,使用ScheduledThreadPoolExecutor实现定时监控和回收空闲连接。通过设置durationBetweenEvictionRuns来指定监控空闲连接的时间间隔。这些属性和方法的使用可以有效管理和优化对象连接池的性能。
2022-11-20
1074
0
0
开发技巧
2022-11-13
DBCP连接池原理与配置分析【一】
该文章介绍了在日常工作中使用spring或手动创建连接时,dbcp的操作流程。通过手动创建数据连接并进行查询的示例,展示了如何设置数据源、创建连接、创建语句、执行语句等操作。通过代码走读,详细介绍了dbcp是如何创建数据库连接池并帮助在查询时获取可用的数据库连接。在这个过程中,首先需要创建一个驱动连接工厂,然后调用DriverManagerConnectionFactory创建数据库连接实例。最终通过DriverManager完成数据库连接的创建。文章通过代码实例和时序图的方式,介绍了dbcp在数据源创建和数据库连接管理中的作用。
2022-11-13
873
0
0
开发技巧
2022-11-05
REDIS面试问题
总结:本文分析了Redis的阻塞队列、常用数据结构以及守护线程实现方式。在阻塞队列中,Redis通过ready_keys和blocking_keys两个链表和事件循环来处理阻塞事件;常用数据结构有string、hash、list和set,分别用于缓存、存储对象、分布式栈和分布式集合;守护线程通过redission实现了分布式锁的自动续约。此外,文章还探讨了Redis的连锁设置、存储大量数据和持久化方式,以及与Elasticsearch的对比。Redis适用于简单高性能的key-value存储,而Elasticsearch适用于全文检索场景。需要根据实际需求选择合适的存储方案。
2022-11-05
756
0
0
开发技巧
2022-10-30
小站点如何做到服务冷备?
本文介绍了如何通过宝塔面板和rclone工具实现网站冷备。首先通过宝塔将整站备份,并通过FTP将备份文件同步到异地机器。具体设置包括修改FTP配置文件、配置PassivePortRange和ForcePassiveIP,并添加shell指令将备份文件拷贝到FTP目录。接着介绍了使用rclone工具同步已备份的FTP文件到本地,rclone可以实现从远程服务端复制、同步、剪切到本地客户端。最后给出了在Windows系统上编写本地同步脚本的示例。整个过程实现了0成本或者低成本网站冷备的操作,对于想要实现网站备份的用户提供了一种简便有效的方法。
2022-10-30
797
0
0
开发技巧
2022-10-27
同一机器,不同端口的泛域名解析如何做到?
nginx反向代理是机器间通信的一种方式,通过代理服务进行间接通信。代理分为正向代理和反向代理,前者常用于个人电脑上,后者常用于服务器端进行负载均衡。NGINX作为常见的反向代理工具,通过修改nginx.conf配置文件来实现对服务端的代理。配置文件结构包括全局块、events块、http块、server块和location块,其中设置了监听的主机端口、服务名称、反向代理逻辑等。实现对泛域名的反向代理可以通过前缀解析方式,将不同前缀对应的请求反向代理到同一机器的不同端口上。如果涉及不同主机的反向代理,需要在不同server块中写入相应的反向代理逻辑。要实现这些功能,需要了解nginx的配置文件结构和块指令作用域。
2022-10-27
1008
0
0
开发技巧
2022-10-22
大话DDD-领域实体与实现
这段内容主要介绍了在日常开发过程中,如何利用领域驱动设计(DDD)的思想,将业务逻辑聚合并与外部服务隔离的方法。通过引入实体、Repository和Domain Service等概念,将编程转变为面向抽象接口的编程,避免了面向具体实现的编程。在实现业务逻辑时,应该将用户抽象为领域实体,并在service层对用户的状态进行改变。此外,还介绍了DTO、VO和DO的概念及应用场景,以及Repository和Domain Service的作用。最后指出,在处理需求时,应该先总览业务问题,划分领域对象并明确信息和职责边界,然后在应用层根据业务描述编排实体和domain service,最后实现与下层数据访问、RPC调用等的交互。通过这样的设计思路,可以有效降低代码之间的耦合度,提高代码的可维护性和扩展性。
2022-10-22
855
0
3
开发技巧
2022-10-16
大话DDD:从POJO到DP的转变
该内容总结了在业务场景中用户登录注册功能的实现方法以及问题的解决方案。在传统POJO和领域对象之间的区别和优缺点进行了对比,并介绍了领域原型的实现原则。针对实现领域原型的三个主要原则,包括让隐性的概念显像化、让隐性的上下文显像化、封装多对象行为。最后讨论了Entity和Value Object的区别,以及Domain Primitive和Entity之间的区别,主要在于对象的逻辑是否有状态。整体内容重点强调了面向对象设计方法对系统建模的重要性,以及从业务需求中找到关键的业务对象(Entity和Value Object)的重要性。
2022-10-16
856
0
0
开发技巧
2022-10-09
MVCC相关问答
该文总结了关于间隙锁和readView的问题。首先介绍了间隙锁中索引为string时如何确定范围,字符串排序规则等。其次讨论了readView的开启时间和创建时机,解释了不同事务中readView的生成方式。最后通过一个示例说明了在事务中对teacherId进行更新时,事务A会读取到的值。通过MVCC的版本特性,解释了事务A对自身的readView不可见,因此在无锁select查询时仍会读取到更新前的数值。
2022-10-09
733
0
0
开发技巧
2022-09-21
SQL索引的优先级
MySQL在索引使用时,通常会将数据最小的字段放在前面,以最能确定结果的字段为主,以减小检索范围。在查询过程中,MySQL会自动调整字段顺序以优化索引顺序。举例说明了在查询指令表中某一指令在最近3个月未完成结果时,如何通过优化索引和缩小查询范围来提高查询效率。在多条件查询中,MySQL会选择扫描行数最少的索引,以减少查询时间。通过调整索引顺序、添加联合索引或缩小查询范围等方式,可以有效提高查询效率。
2022-09-21
1250
0
0
开发技巧
2022-09-18
【leetcode】刷题笔记-回溯法与贪心算法
总结:回溯法是一种搜索尝试过程,主要用于在搜索过程中寻找问题的解,当条件不满足时会返回尝试别的路径,常用于解决复杂问题。回溯法的基本步骤包括确定问题的解空间、确定扩展搜索规则以及深度优先搜索解空间等。递归和非递归是两种实现回溯法的方法,通过探索每一步可选择使用左括号或右括号的方式,及时过滤无效解并确保生成一组有效结果。通过分析回溯法的框架和实现,可以更好地理解其工作原理和应用场景。回溯法可以灵活地解决括号生成等问题,为解决其他问题提供了一种通用解题方法。
2022-09-18
857
0
0
开发技巧
2022-09-18
【leetcode】刷题笔记-分治法与动态规划
分治法是一种算法设计策略,将一个大问题分解为多个相同的子问题,递归地解决这些子问题,然后将结果合并得到原问题的解。分治法适用于问题具有规模缩小容易解决、可以分解为小问题且具有最优子结构性质、子问题解可合并为原问题解、子问题相互独立的情况。算法步骤包括分解、解决和合并。常见应用有二分搜索、归并排序、快速排序、大整数乘法等。以二分搜索为例,通过每次取中点比较大小,逐渐缩小查找范围,时间复杂度为O(logn)。另外,以寻找两个正序数组中的中位数为例,通过比较两个数组中的中位数来确定中位数所在位置,时间复杂度要求为O(log(m+n))。
2022-09-18
713
0
1
开发技巧
2022-09-18
【leetcode】刷题笔记-双指针法
本文主要介绍了三个算法问题的解决方法。首先是针对给定 n 个非负整数,找出可以容纳最多水的容器的问题,采用双指针法进行解决。其次是针对一个包含 n 个整数的数组,判断是否存在三个元素使得它们的和为0的问题,同样采用双指针法解决。最后是合并两个有序数组的问题,将一个排列好的数组合并到另一个排列好的数组中并保持顺序有序,也是采用双指针法进行解决。在解决过程中,采用了双指针移动、排序、判断和去重等操作,较为高效地解决了这三个问题。
2022-09-18
749
0
0
开发技巧
2022-09-09
kafka分区策略
Kafka在消息发送和消费过程中通过实现不同的分区策略来确保消息均匀地分发到不同的topic和partition上,以及消费者均匀地消费不同的partition。生产者的分区策略包括默认分区策略、轮询式分区策略和粘性分区策略,消费者的分区策略包括范围分配策略、轮询分配策略和粘性分配策略。当topic/partition数量或消费者数量变化时,会触发重平衡(rebalance)操作,通过加入组和组信息同步来重新分配消费者要消费的分区,确保各分区能够重新分配到消费者进行消费。整体而言,Kafka通过不同的分区策略和重平衡操作来保证消息生产和消费的高并发性和均衡性。
2022-09-09
809
0
0
开发技巧
1
2
3
4
5