
开发经验
文章平均质量分 57
开发经验
BookerABC
我的键盘是我的魔杖,每一次敲击都是对逻辑的施咒。
展开
-
实例化对象有哪几种方式
这些方法都可以用来创建或复制对象,但适用的场景不同。例如,`new` 关键字是最常用的方法,而 `clone()` 方法则适用于克隆对象。反射机制可以动态地创建对象,适合在运行时加载类。序列化和反序列化则常用于网络传输或持久化存储。序列化是将一个对象转换为字节流的过程,而反序列化则是将字节流还原为对象的过程。//将一个对象实例化后,进行序列化,再反序列化,也可以获得一个对象。2. **clone() 方法**3. **通过反射机制创建**1. **new 关键字**4. **序列化反序列化**原创 2024-11-04 17:33:54 · 412 阅读 · 0 评论 -
操作字符串都有哪些类以及它们之间有什么区别
StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。- 操作频繁的情况下,如果在单线程环境中,推荐使用 StringBuilder;- 线程安全,但由于加锁的原因,效率不如 StringBuilder。- 线程不安全,效率高,多用于单线程环境。- 不频繁的字符串操作建议使用 String。- 也适用于需要频繁修改字符串的操作。- 适用于需要频繁修改字符串的操作。- 适用于不频繁修改字符串的情况。原创 2024-11-04 17:24:38 · 378 阅读 · 0 评论 -
路过的朋友,欢迎来看看通俗易懂版本的Nacos
一个更易于构建云原生应用的动态服务发现、服务配置和服务管理平台。开发测试环境和生产环境的资源(如配置、服务)隔离等,比如dev和prod。在没有明确指定配置的情况下, 默认使用的是 DEFAULT_GROUP。原创 2024-06-04 16:44:36 · 308 阅读 · 0 评论 -
java什么时候声明static方法
当你有一个方法不需访问对象状态,即不需要访问类的非静态成员变量,那么这个方法可以声明为static。总的来说,当你希望一个方法能够不依赖于类的任何实例,或者该方法的操作与类的实例状态无关,且期望在不实例化对象的情况下就能使用该方法时,就应该声明为static。:在实现单例模式时,提供一个静态的getInstance方法来返回唯一的实例对象,这也是static方法的一个典型应用。必须声明为static,因为它是在类加载时由JVM调用的,并且不需要创建类的实例。,就需要初始化时,声明为static。原创 2024-06-04 16:12:56 · 327 阅读 · 0 评论 -
java所有集合的相互关系是什么
Java集合框架是一个设计精良、功能强大的工具集,用于存储和操作对象集合。它大致分为以下几类,并且各类之间存在一定的层级关系和功能差异:### 顶级接口(根接口)1. **Collection**: 是最基础的集合接口,所有集合类都直接或间接实现了这个接口。它定义了基本的集合操作,如添加元素(`add(E element)`)、删除元素(`remove(Object o)`)、清空集合(`clear()`)、检查集合是否为空(`isEmpty()`)等。原创 2024-05-14 15:14:42 · 387 阅读 · 0 评论 -
String、StringBuffer、StringBuilder的区别
在Java中,`String`、`StringBuffer`、和`StringBuilder`都是用于处理字符串的类,但它们之间存在一些关键差异,主要涉及可变性、线程安全性和性能:1.String:-不可变性:`String`对象一旦被创建,其内容就不能改变。任何对`String`的操作,比如拼接、替换等,都会返回一个新的`String`对象,而原对象保持不变。-性能:由于每次修改都会创建新对象,因此在进行大量字符串操作时可能引起性能问题,尤其是在循环中连续拼接字符串。原创 2024-05-13 15:18:42 · 653 阅读 · 0 评论 -
hashCode()与equals()之间的关系
在Java中,`hashCode()`和`equals()`方法之间存在紧密的关系,主要体现在它们共同作用于对象的比较和存储上,尤其是在集合(如HashSet、HashMap)和哈希表的实现中。一致性:如果两个对象相等(即`equals()`返回`true`),那么它们的`hashCode()`方法必须返回相同的值。非一致性:对象不相等(`equals()`返回`false`)时,其`hashCode()`可以相同,但这可能会降低哈希表的性能,因为冲突增多可能导致链表长度增加,影响查询效率。原创 2024-05-13 14:22:49 · 164 阅读 · 0 评论 -
Tomcat中为什么要使用自定义类加载器
这样,即使不同应用中存在相同的类名,它们也是被各自的应用类加载器加载,互不影响。一个,代表Tomcat中用于加载共享类库的类加载器;在方法中,我们展示了如何通过Web应用类加载器加载类,同时这个加载器会委托给共享类加载器,模拟了Tomcat类加载的委托机制。通过创建新的类加载器来加载更新后的类,旧的类加载器和旧的类可以被垃圾回收,实现类的平滑升级。这种层次结构允许类加载器首先在本地查找类,找不到时再委托给父加载器,既保证了类加载的高效性,又确保了类的正确加载顺序,避免了类覆盖问题。中类加载器的委托逻辑。原创 2024-05-13 11:00:57 · 345 阅读 · 0 评论 -
Sychronized的锁升级过程是怎样的
4.自旋锁∶自旋锁就是线程在获取锁的过程中,不会去阻塞线程,也就无所谓唤醒线程,阻塞和唤醒这两个步骤都是需要操作系统去进行的,比较消耗时间,自旋锁是线程通过CAS获取预期的一个标记,如果没有获取到,则继续循环获取,如果获取到了则表示获取到了锁,这个过程线程一直在运行中,相对而言没有使用太多的操作系统资源,比较轻量。如果成功,线程获得锁;第二个线程来竞争锁,偏向锁就会升级为轻量级锁,之所以叫轻量级锁,是为了和重量级锁区分开来,轻量级锁底层是通过自旋来实现的,并不会阻塞线程。原创 2024-05-11 17:26:19 · 764 阅读 · 0 评论 -
ReentrantLock分为公平锁和非公平锁,那底层分别是如何实现的
无论是公平锁还是非公平锁,它们都使用了AQS的内部FIFO队列来管理等待的线程,以及通过状态位(state)和等待节点(Node)来协调线程的阻塞与唤醒。如果有其他线程已经在等待队列中,那么新来的线程就会加入到队列的末尾排队等待,而不是尝试直接获取锁。非公平锁在尝试获取锁时,不管队列中是否有其他线程在等待,总是会先尝试直接通过CAS操作快速获取锁,这可能导致新来的线程“插队”,获得锁的机会优于已经在队列中等待的线程。2. 如果快速获取失败,非公平锁仍然可能会继续尝试CAS获取锁,即使队列中已有等待线程。原创 2024-05-11 16:11:02 · 795 阅读 · 0 评论 -
Sychronized和ReentrantLock有哪些不同点
`ReentrantLock` 是 `java.util.concurrent.locks` 包下的一个类,使用时需要实例化,然后通过 `lock()` 和 `unlock()` 方法手动进行加锁和解锁操作。- `ReentrantLock` 需要程序员显式地在代码中调用 `lock()` 来获取锁,以及在合适的时机调用 `unlock()` 来释放锁,这提供了更大的灵活性但也要求更高的编程精确度。- 当 `synchronized` 代码块中发生异常时,JVM 会确保锁自动释放,避免死锁。原创 2024-05-11 10:35:44 · 852 阅读 · 0 评论 -
为什么不建议使用Executors来创建线程池
`newFixedThreadPool`和`newSingleThreadExecutor`使用的是无界队列(通常为`LinkedBlockingQueue`),这意味着如果生产任务的速度超过消费速度,队列会无限增长,最终可能导致内存耗尽(Out Of Memory Error)。综上所述,虽然`Executors`提供了快速创建线程池的简便方法,但由于其潜在的问题和局限性,对于生产环境中的应用,更推荐直接使用`ThreadPoolExecutor`来创建线程池,以便根据实际需求进行细致的配置和调整。原创 2024-05-07 14:44:08 · 243 阅读 · 0 评论 -
Dubbo 开源的一款高性能Java RPC框架
Dubbo支持多种协议,包括dubbo、rmi、hessian、http、webservice等,同时也支持多种注册中心,如zookeeper、redis、multicast、simple等。Dubbo采用了大量的中间件,比如监控、治理、限流、降级、负载均衡等,可以帮助用户解决大规模分布式服务调用的问题。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。原创 2023-12-31 03:55:18 · 476 阅读 · 0 评论 -
Linux 开源的高性能稳定服务器操作系统
我们研发项目,写代码时,使用的一般都是windows或者是MAC的操作系统,作为本地的用户使用系统,而Linux一般都是放在服务器上运行的一种高效稳定的服务器系统. 我们还是无法完全避免对于Linux的接触和使用,尤其是在一些中小型企业,一个程序员往往是多面手,称之为"全干工程师",那么这个时候我们往往可能自己要去部署项目.所以学习使用Linux是必须的,也是我们研发人员的加分项。其字面意思就是"该死的易受攻击的Linux" , 根本不是一般意义上的优秀的Linux发行版。Linux目前的一些版本。原创 2023-12-31 02:01:22 · 515 阅读 · 0 评论 -
SpringMVC 基于MVC设计理念的优秀WEB框架
11.DispatcherServlet响应用户。4 dao或者mapper包,也是属于Model层的一部分,专门用于存放操作持久层数据,实现CURD功能的代码,一般该层次的技术包含JDBC以及或者对于JDBC封装的框架技术,包含Hibernate ,MyBatis, MyBatisPlus, JDBCTemplate, JPA等等。3 service 包,属于Model层的一部分,专门用于存放模型层计算业务逻辑的代码,在MyBatis-Plus中,也提供了一些对于该层次的基础的业务逻辑的封装。原创 2023-12-31 00:44:12 · 974 阅读 · 0 评论 -
Spring 为解决应用开发的复杂性而生
1 方便解耦,简化开发 Spring通过容器,将对象的创建从代码中剥离出来,交给Spring控制,避免直接编码造成模块之间的耦合度高,用户也不必自己编码处理对象的单例和多例控制,主要关注接口功能即可,不用关注具体使用哪个实现类和实现细节问题。2 AOP切面编程 AOP切面编程是程序设计的一种概念,Spring对该概念实现的比较好,通过切面编程我们可以在不修改原有代码的情况下实现功能的增加,通常用于 事务控制,日志记录,性能检测,权限控制等等。Spring Framework的体系结构。原创 2023-12-31 00:32:48 · 419 阅读 · 0 评论 -
Ajax异步交互技术
Asynchronous Javascript And XML”(异步 JavaScript和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。在HTTP协议下,前后端交互有两种技术,一是同步,二是异步。AJAX的特点 : 异步访问,局部刷新,无需跳转页面。Ajax异步交互技术简介。原创 2023-12-30 20:44:39 · 370 阅读 · 0 评论 -
Filter过滤和Listener监听器
HttpSessionListener (处理session对象创建和销毁) HttpSessionAttributeListener (处理session域对象中的数据添加 修改 删除) HttpSessionBindingListener (处理session对象监听器绑定和解绑定接口) HttpSessionActivationListener (处理session对象钝化和活化状态接口)当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。FilterAPI运行流程。原创 2023-12-30 20:36:55 · 352 阅读 · 0 评论 -
JAVAScript 跨平台客户端脚本语言
Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,JavaScript 的正式名称是 "ECMAScript"。把整个页面规划成由节点层构成的文档,它不与浏览器、平台、语言相关,为web开发者提供一个标准可以访问站点中的数据、脚本和表现层对象.DOM编程可以实现网页内容校验和动态变化的效果。通常"基于对象"是使用对象"基于对象"没有继承的特点。没有了继承的概念也就无从谈论"多态"原创 2023-12-30 19:56:17 · 432 阅读 · 0 评论 -
Lombok 常用注解·····
Lombok 是一个 Java 库,它提供了一组注解,可以帮助开发人员简化 Java 代码。原创 2023-08-23 09:44:14 · 140 阅读 · 0 评论 -
netty底层实现是什么样的
ChannelPipeline(通道管道):ChannelPipeline是Netty中的处理器链,它由一系列的处理器组成,用于处理、转换或拦截事件和数据。EventLoop(事件循环):EventLoop是Netty中的事件处理机制,它负责处理和分发事件,以及执行对应的I/O操作。Channel(通道):Channel是Netty的核心抽象,它表示一个开放的连接,可以执行读取、写入和关闭等操作。Netty是一个高性能的网络编程框架,它提供了一种简单、高效的方式来开发可扩展的网络应用程序。原创 2023-08-21 12:45:38 · 148 阅读 · 0 评论 -
面试题:使用Java代码实现B系统与A系统企业信息定时同步
执行过程中,出现错误需要能够回滚,不能产生脏数据。系统企业信息的定时同步.具体要求如下。接口调用需要有重试机制,重试。次后,仍无法正确响应,则回滚。接口,未过期前不许重复调用。系统企业出现增,删,改,系统数据有重复,需要去重。接口接收数据,存储到。分钟同步一次企业信息。原创 2023-08-09 22:23:16 · 295 阅读 · 0 评论 -
普通Java项目实现定时任务
方法来安排定时任务的执行。该方法接受两个参数:要执行的定时任务对象和延迟时间(以毫秒为单位)。在这个例子中,定时任务将在延迟5秒后执行。方法来安排定时任务的执行。该方法接受三个参数:要执行的定时任务对象、延迟时间和时间单位。在这个例子中,定时任务将在延迟5秒后执行。方法,在其中编写了定时任务的代码。方法,在其中编写了定时任务的代码。在Java中,可以使用。以上代码创建了一个继承自。以上代码创建了一个实现了。原创 2023-08-09 22:12:25 · 85 阅读 · 0 评论 -
Apache HttpComponents Client详解
Apache HttpComponents Client(也称为HttpClient)是一个开源的Java库,用于发送HTTP请求并处理HTTP响应。它提供了一组易于使用的API,用于构建和执行HTTP请求,并处理请求和响应的各个方面,如URL处理、请求头、请求体、响应状态、响应内容等。这些只是Apache HttpComponents Client库的一些基本用法示例,它还提供了许多其他功能和配置选项,如连接池管理、代理设置、超时设置、SSL/TLS配置等,以满足更复杂的HTTP请求需求。原创 2023-08-09 12:43:23 · 181 阅读 · 0 评论 -
Caused by: java.nio.charset.MalformedInputException: Input length = 2
处理输入数据长度不正确的情况:如果输入数据的长度确实不正确,你可能需要检查数据源或数据传输过程中是否存在问题。在你的情况下,输入数据的长度为2,可能与所使用的字符集或编码方式不匹配。考虑数据源的可靠性:如果你的输入数据来自外部源(如网络、文件、数据库等),确保源数据的完整性和正确性。确认输入数据的编码方式:检查你的代码中用于读取输入数据的部分,并确认所使用的字符集是否正确。如果不确定输入数据的编码方式,可以尝试使用不同的字符集进行解码,观察是否能够成功解析数据。原创 2023-07-31 14:37:07 · 1420 阅读 · 0 评论 -
java: 警告: 源发行版 17 需要目标发行版 17
这个警告表示你正在使用 Java 17 版本编译源代码,但目标发行版设置为低于 Java 17 的版本。将目标发行版设置为与源发行版相同:在编译命令或构建工具配置中,将目标发行版设置为与源代码编译时使用的 Java 版本相同。降低源发行版:如果你的项目不需要 Java 17 特性或库,你可以将源发行版降低到与目标发行版相同或更低的版本。注意,如果你选择将目标发行版设置为低于源发行版的版本,你需要确保源代码中没有使用到高于目标版本的特性或库,以避免在目标环境中出现兼容性问题。原创 2023-07-31 13:34:52 · 18496 阅读 · 0 评论 -
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.support.DaoSupport
你可以检查项目的构建文件(如pom.xml、build.gradle等)或者IDE工具中的依赖配置,确保引入了正确的Spring Framework相关依赖。例如,如果你使用的是Spring Framework的5.x版本,你需要确保其他相关的Spring依赖库(如spring-context、spring-jdbc等)也使用相同的版本。请检查你的项目中使用的Spring Framework版本与相关依赖库的版本是否兼容。请确保依赖库的版本与你的项目兼容,并通过构建工具重新构建项目。原创 2023-07-31 13:20:32 · 1010 阅读 · 0 评论 -
java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.myb
注解是用于指定扫描MyBatis Mapper接口的路径,并将其注册为Spring Bean。根据错误信息,问题出在。这个错误是由于使用了不正确的注解配置导致的。根据错误信息,可以看出在使用MyBatis框架的。方法返回的是正确的工厂类,能够创建Mapper接口的实例。注解的一个属性,用于指定Mapper接口的工厂类。接口,并负责创建Mapper接口的实例。正确的用法应该是提供一个工厂类,该工厂类实现了。,并将Mapper接口的路径作为。方法返回的是一个实现了。原创 2023-07-31 11:42:03 · 342 阅读 · 0 评论