自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java内存管理和优化

堆是 Java 虚拟机(JVM)管理的最大的一块内存区域。它主要用于存储对象实例,几乎所有的对象(除了一些基本类型的局部变量等)都在堆中分配内存。例如,当你使用new关键字创建一个对象,如,这个Object对象就存储在堆内存中。堆内存是被所有线程共享的,这意味着多个线程可以访问和操作堆中的对象。其大小可以通过 JVM 参数(如-Xmx和-Xms)来设置,-Xmx用于指定堆的最大内存,-Xms用于指定堆的初始内存。例如,表示堆的最大内存为 1GB,初始内存为 512MB。

2024-12-04 10:06:59 942

原创 正向代理和反向代理

是位于客户端和目标服务器之间的代理服务器。客户端向代理服务器发送请求,代理服务器代替客户端去访问目标服务器,并将从目标服务器获取的响应返回给客户端。例如,在一个公司网络环境中,员工想要访问外部受限网站,通过公司设置的正向代理服务器,代理服务器会以自己的身份向外部网站请求数据,然后将数据返回给员工的客户端。:是位于目标服务器前面的代理服务器。客户端请求目标服务器时,实际上是请求反向代理服务器,反向代理服务器会根据一定的规则将请求转发到真实的目标服务器,并将目标服务器的响应返回给客户端。

2024-12-03 09:55:17 599

原创 设计模式小记

设计模式即软件开发过程中针对反复出现的问题所总结归纳出的通用解决方案。它就像是建筑师手中的蓝图,能帮助开发者更高效地构建软件系统,提升软件的质量、可维护性和可扩展性。

2024-11-29 10:44:09 836

原创 Java线程池

线程池是一种多线程处理形式,用于管理和复用线程,避免频繁创建和销毁线程所带来的资源开销。在处理大量异步或并发任务(如 Web 服务器处理多个客户端请求)时,能有效提高系统性能和响应速度。

2024-11-28 10:32:17 695

原创 Java异常

可以通过继承Exception(用于检查异常)或者(用于运行时异常)来创建自定义异常。自定义异常可以更好地适应特定的业务逻辑需求。例如,在一个订单处理系统中,可以创建一个来表示库存不足的情况,或者创建一个来表示订单信息不合法的情况。

2024-11-27 10:35:00 784

原创 多线程同步和互斥有几种实现方法

它允许一组线程互相等待,直到所有线程都到达一个屏障点(barrier point)。当所有线程都到达这个点后,它们可以继续执行后续的任务。信号量可以控制同时访问特定资源的线程数量。它维护了一个许可证的计数,线程在访问资源之前需要获取许可证,访问结束后释放许可证。用于让一个或多个线程等待其他线程完成一系列操作。它有一个计数器,当计数器的值减为 0 时,等待的线程可以继续执行。方法时,它会获取该对象的锁,其他线程在这个方法执行完并释放锁之前无法访问这个方法。当一个线程访问一个对象的。可以被重置并多次使用。

2024-11-06 10:47:51 312

原创 过滤器和拦截器

例如,在一个事务管理拦截器中,前置处理方法可以开启一个事务,后置处理方法可以根据方法执行情况决定是提交还是回滚事务,异常处理方法可以在出现异常时进行事务回滚和异常处理。当客户端发送一个请求时,过滤器可以在请求到达实际处理业务逻辑的 Servlet 之前,将请求中的字符编码统一设置为 UTF - 8,确保数据的正确处理。例如,一个 Web 应用只允许来自公司内部 IP 地址段的用户访问,可以通过过滤器来检查请求的来源 IP 地址,对于不在允许范围内的 IP 地址,直接返回拒绝访问的响应。

2024-11-06 10:23:49 856

原创 synchronized和Lock 接口

是 Java 中一种实现线程同步的基本方式。它使用关键字来修饰一段代码块。其中obj是一个对象锁。当一个线程进入这个同步代码块时,它会获取obj对象的锁。如果此时有其他线程也想进入这个同步代码块并且尝试获取相同的obj对象锁,那么这些线程就会被阻塞,直到拥有锁的线程释放锁。例如,假设有一个共享的ArrayList,多个线程可能会同时对它进行读写操作。为了避免数据不一致的情况,可以使用同步代码块来保护对ArrayList的访问。是 Java 5.0 引入的一个更灵活的锁机制接口。它提供了比。

2024-11-06 10:22:14 327

原创 Srping MVC

Spring MVC 是一个基于 Java 的 Web 应用框架,它是 Spring 框架的一部分,用于构建 Web 应用程序。它遵循模型 - 视图 - 控制器(Model - View - Controller,MVC)设计模式,将应用程序的不同功能模块分离,使得代码结构更加清晰、易于维护和扩展。

2024-11-05 10:09:05 954

原创 关于redis缓存击穿、缓存穿透、缓存雪崩及其解决方案

缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中的,请求每次都会穿透缓存直接查询数据库,这样就可能导致数据库压力过大。例如,攻击者恶意构造大量不存在的查询请求,就会对数据库造成严重的负载冲击。缓存雪崩是指在某一时刻,大量的缓存 key 同时过期,或者缓存服务器出现故障,导致大量的请求直接访问数据库,从而使数据库压力骤增,甚至可能导致数据库崩溃。

2024-11-04 10:19:48 2232

原创 多版本并发控制(MVCC)原理

MVCC(Multi - Version Concurrency Control)即多版本并发控制。它是一种并发控制的方法,在数据库管理系统中用于处理多个事务对同一数据的并发访问。MVCC 的核心思想是为每个事务提供一个数据的快照视图,使得每个事务都能看到在它开始时刻的数据状态,而不管其他事务在该时刻之后对数据做了何种修改。这样可以在不使用锁或者减少使用锁的情况下,实现高效的并发读写操作。

2024-11-02 10:10:08 1645

原创 关于MyBatis你需要了解的知识

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。它使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Object)映射成数据库中的记录。例如,在一个简单的用户管理系统中,我们可以使用 MyBatis 通过一个简单的接口方法来查询用户信息,而在后台它会自动将数据库表中的字段映射到 Java 的用户对象的属性上。

2024-11-01 10:40:25 767

原创 Redis优化方案

Set 存储元素是无序且不重复的,而 List 会存储所有元素,包括重复的。对于一些有过期时间的简单键值对数据,考虑使用带有过期时间的 String 类型,避免数据长期占用内存。:如果存储的数据有一定的规律或者冗余,如存储大量日志信息,且日志格式相对固定,可以考虑在将数据存入 Redis 之前进行压缩。在读取数据时再进行解压。例如,可以使用 Snappy 或 LZ4 等高效的压缩算法。不过要注意压缩和解压带来的 CPU 开销。:检查 Redis 中所有键的过期时间设置。

2024-10-31 20:59:29 881

原创 关于死信队列在系统中的应用

死信队列(Dead - Letter Queue,DLQ)是一种特殊的消息队列,用于存放无法被正常消费的消息。在分布式商城销售系统中,它主要起到了处理异常消息的关键作用,避免消息丢失并且能够让开发人员后续对这些异常消息进行分析和处理。例如,在订单处理流程中,当订单消息由于某些原因(如消息格式错误、消费者业务逻辑异常、达到最大重试次数后仍然无法成功消费等)不能被正常消费时,这些 “问题消息” 就会被发送到死信队列,而不是直接丢弃。这确保了系统在遇到异常情况时,消息数据的完整性。

2024-10-31 14:36:36 816

原创 Spring AOP

Spring AOP(Aspect - Oriented Programming,面向切面编程)是 Spring 框架中的一个重要特性。它提供了一种在不修改原有代码的基础上,对程序的功能进行增强的方式,能够将横切关注点(如日志记录、事务管理、安全检查等)与业务逻辑分离。横切关注点是指那些在多个模块或方法中都会出现的功能。例如,在一个企业级应用中,几乎每个业务方法可能都需要进行日志记录来跟踪系统的运行情况,或者进行事务管理以确保数据的一致性。

2024-10-27 14:12:55 469

原创 DI 依赖注入

依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于实现对象之间的松散耦合。在面向对象编程中,一个对象通常会依赖于其他对象来完成其功能。依赖注入的目的是将对象之间的依赖关系从对象内部转移到外部,由外部来管理和提供这些依赖。

2024-10-27 14:03:37 440

原创 JVM垃圾回收

在 Java 中,程序员不需要手动管理内存的分配和释放。如果没有垃圾回收机制,程序员需要时刻关注内存的使用情况,手动释放不再使用的对象所占用的内存,这不仅繁琐而且容易出错,可能导致内存泄漏和程序崩溃。垃圾回收机制自动识别不再被使用的对象,并回收它们占用的内存空间,保证了程序的稳定性和可靠性。

2024-10-18 16:42:09 1889

原创 数据库与缓存一致性

先更新数据库,再更新缓存这种方法的优点是可以保证缓存中的数据始终与数据库中的数据一致。但是,如果在更新缓存的过程中出现问题,可能会导致数据库中的数据已经被更新,但是缓存中的数据没有被更新,从而出现不一致的情况。此外,这种方法在高并发的情况下可能会导致缓存被频繁更新,影响系统性能。先删除缓存,再更新数据库这种方法的优点是可以避免在更新缓存的过程中出现问题导致的不一致情况。但是,如果在删除缓存后,有多个线程同时读取数据,可能会导致这些线程从数据库中读取到旧的数据并将其放入缓存中,从而出现不一致的情况。

2024-10-16 17:41:44 315

原创 Spring IOC容器管理Bean的三种方式

新建一个XML配置文件annoconfig.xml,写入<context:component-scan base-package="com.wjf"></context:component-scan>,表示扫描base-package中包路径下的被@Component标注的类用于容器管理,优点是不需要一个一个bean注册,只需要扫描包下面的被@Component标注的类;配置Bean的id,用于标识bean,设置class指向需要配置类的全路径名,如下图。新建一个类,在其类上标注注解@Component。

2024-10-15 20:47:59 323

空空如也

空空如也

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

TA关注的人

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