- 博客(419)
- 资源 (26)
- 收藏
- 关注
原创 java 通过request 获取ip 工具类
地理位置定位:通过获取客户端的IP地址,可以查询其所在的地理位置信息,例如国家、省份、城市等,以便提供更加个性化的服务。防止恶意攻击:通过获取客户端的IP地址,可以检测到来自同一IP地址的大量请求,从而识别出可能的恶意攻击行为。记录用户访问日志:当用户访问网站时,可以通过获取其IP地址来记录其访问日志,以便进行数据分析和统计。网络监控:通过获取客户端的IP地址,可以对网络流量进行分析和监控,以便及时发现和解决网络故障。在Java Web开发中,获取客户端的IP地址是非常常见的需求。
2024-04-19 15:58:37 158
原创 springboot redission 自定义注解实现分布式锁
在实际项目中,可以根据需要对`DistributedLock`类和`DistributedLockAspect`类进行扩展和优化。* Redis URI的写法是:redis://[:password@]host[:port][/db-number][?* option:可选,连接选项,例如timeout、ssl等。* port:可选,Redis服务器的端口号,默认为6379。* password:可选,用于连接Redis服务器的密码。* db-number:可选,要连接的数据库编号,默认为0。
2024-04-10 19:49:03 598
原创 springboot3 redis 实现分布式锁
基于缓存数据库:如使用Redis实现分布式锁,利用其原子操作和高性能的特点来控制资源的访问。基于ZooKeeper:利用ZooKeeper的顺序临时节点特性来实现分布式锁,适合复杂的分布式系统环境。分布式锁是一种在分布式系统中用于控制不同节点上的进程或线程对共享资源进行互斥访问的技术机制。可重入性:允许同一个节点上的同一个线程在已经获取锁的情况下再次获取锁,而不会导致死锁。基于文件系统:通过在文件系统中创建锁文件的方式来实现,适用于需要跨进程或跨主机的锁。本文介绍的是基于redis的分布式锁。
2024-04-09 20:09:51 324 1
原创 docker中容器间通信,内网连接mysql,pg数据库
安装pgdocker run --restart=always --privileged=true --name pg16 -e POSTGRES_PASSWORD=db12345678 -p 15432:5432 -d postgres:16安装mysqldocker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=db123456! --name mysql8 -v /mnt/mysql8:/var/lib/mysql57 mysql:8
2024-03-20 17:10:30 108
原创 java md5工具类
这个工具类包含一个静态方法`calculateMD5`,它接受一个字符串作为输入,返回该字符串的MD5哈希值的十六进制表示。在`main`方法中,代码演示了如何使用这个工具类来计算一个测试字符串的MD5哈希值,并将结果打印到控制台。在Java中,你可以使用`java.security.MessageDigest`类来生成MD5哈希。* @param input 要计算哈希值的字符串。// 将字节数组转换为十六进制字符串。* @return MD5哈希值的十六进制表示。* 计算字符串的MD5哈希值。
2024-02-12 10:32:03 607
原创 【无标题】
在这两个方法中,都使用了`SecretKeySpec`类来生成密钥对象,并使用`Cipher`类来进行加密和解密操作。Java环境下的AES加密工具类是一个用于执行AES对称加密和解密操作的辅助类。在AES加密中,加密与解密使用同一个密钥,这个密钥需要保密,且通常不会直接在网络上传输,以防泄露。- 在实际生产中,为了提高安全性,通常会结合RSA等非对称加密算法来加密AES的密钥,并通过网络传输给接收方。在使用AES加密工具类时,需要注意密钥管理和保护,确保密钥不被未授权的第三方获取。
2024-02-10 20:28:43 470
原创 消息队列适用于以下场景
1. 异步处理:当一个操作需要花费较长时间才能完成时,可以使用消息队列将任务放入队列中,让后台进程异步地处理这些任务。使用消息队列可以将这些请求暂存起来,然后按照系统的处理能力逐步处理,避免系统因为瞬时流量过大而崩溃。2. 解耦系统组件:在微服务架构中,不同的服务之间可以通过消息队列进行通信,实现松耦合。通过消息队列,可以将这类任务放入队列中,等到指定的时间再进行处理。通过消息队列,可以确保各个服务之间的操作顺序和一致性。消息队列适用于需要异步处理、解耦、流量削峰、延迟处理、分布式事务和事件驱动等场景。
2024-02-10 17:53:38 419
原创 为什么QQ使用UDP协议,而微信使用TCP协议以下是一个简单的Java KCP收发数据的示例代码: java复制代码import io.netty.buffer.Byte
但对于QQ这样的成熟产品,早期的设计选择可能已经深入人心,且用户习惯已经形成,因此即使技术上有了新的可能,也可能不会轻易改变原有的协议选择。1. **技术背景**:在QQ发展的早期阶段,服务器的技术条件有限,尤其是对于支持大量TCP并发连接的技术。2. **协议特性**:UDP协议由于其无连接的特性,传输速度快,适用于对实时性要求高的场景,如在线通信。QQ使用UDP协议的原因主要是由于早期的技术限制和对实时性的高要求,而微信使用TCP协议则是基于现代技术的成熟度和对数据传输可靠性的重视。
2024-02-06 10:30:47 463
原创 查询一个Java实现类实现了哪个接口
调用Class对象的getInterfaces()方法,返回该类实现的所有接口的Class数组;要查询一个Java实现类实现了哪个接口,可以使用反射机制。// 获取MyClass类实现的所有接口的Class数组。// 遍历Class数组,输出每个接口的名称。// 获取MyClass类的Class对象。遍历Class数组,输出每个接口的名称。获取该类的Class对象;
2024-02-05 23:40:35 452
原创 非springboot 使用aop 切面
然后,我们使用工厂创建一个代理对象(MyServiceImpl),并将其注入到MyApp类的实例中。在这个示例中,我们使用了一个简单的跟踪拦截器来输出方法调用的信息,并在实际开发中可以根据需要使用其他拦截器和通知类型来实现更复杂的AOP逻辑。由于Spring AOP库并不直接支持非Spring应用,你需要将Spring AOP库作为依赖项添加到项目中,并使用Spring AOP的基本概念手动实现AOP。这可以通过创建一个代理对象来实现,该对象实现了目标对象的接口,并在调用方法时执行AOP逻辑。
2024-02-05 21:42:18 688
原创 gradle 下载不下来,distributionUrl 设置本地路径
distributionBase=GRADLE_USER_HOMEdistributionPath=wrapper/distszipStoreBase=GRADLE_USER_HOMEzipStorePath=wrapper/dists#distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zipdistributionUrl=file\:///E:/software-program-package/ja
2024-02-03 22:28:28 655
原创 android studio proxy 设置国内代理
IPV4/IPV6: mirrors.opencas.cn 端口:80IPV4/IPV6: mirrors.opencas.org 端口:80IPV4/IPV6: mirrors.opencas.ac.cn 端口:80。IPv4: ubuntu.buct.edu.cn/ 端口:80IPv4: ubuntu.buct.cn/ 端口:80IPv6: ubuntu.buct6.edu.cn/ 端口:80。mirrors.tuna.tsinghua.edu.cn 端口:80。
2024-02-02 21:31:41 845
原创 springboot2.7继承swagger knif4j
我的是“com.example.demo.demos.web”注意group这里要用自己项目的包路径。maven pom依赖。
2024-01-30 21:20:16 410
原创 一直傻傻分不清 count(*) count(id) count(1) 这次终于整明白了
`COUNT(column)`:`COUNT(column)` 指定了要计数的具体列,它仅计算指定列中的非空值的行数。这意味着它会忽略所有列中的NULL值,只计算非空行的数目。- `COUNT(*)`:`COUNT(*)` 是一种特殊的语法,它返回结果集中的行数,不考虑任何列的值。- `COUNT(1)`:`COUNT(1)` 是一种常用的优化写法,它不考虑任何具体的列,只关注行的存在与否。- `COUNT(*)`:`COUNT(*)` 是一种特殊的语法,它会扫描整个表的所有行,不考虑任何列的值。
2023-08-30 19:37:28 542
原创 springboot docker
当你使用Docker构建和运行Spring Boot应用程序时,只需在Dockerfile中定义容器的构建规则,并在Docker中运行构建好的应用程序镜像。1. 编写Dockerfile:在项目的根目录下创建一个名为`Dockerfile`的文件,并在该文件中定义Docker镜像的构建规则。3. 运行Docker容器:构建完成后,可以使用以下命令在Docker中运行你的Spring Boot应用程序。上述命令将会在本地的8080端口启动Docker容器,并将容器内部的8080端口映射到主机的8080端口。
2023-08-30 19:22:53 813
原创 ddd 领域事件 springboot 代码案例
/ 将监听器实例注入到控制器中,以便在领域事件发生时通知监听器进行处理。可以在这里使用依赖注入框架如CDI或Spring完成注入,这里省略具体实现。// 注入领域事件监听器实例。// 业务逻辑,创建订单等操作...
2023-08-29 22:43:58 456
原创 领域驱动设计入门指南
值对象的主要特点是它们的不变性,即在对象的生命周期内,它们的值不应该发生变化。4. 领域事件(Domain Event):领域事件表示领域中发生的重要行为,例如,一个新订单的创建、一个客户取消了订单等。领域驱动设计是一种软件开发方法,它侧重于核心概念,如实体、值对象、聚合和领域事件。1. 阅读书籍和教程:有许多关于领域驱动设计的优质书籍和在线教程,例如 Eric Evans 的《领域驱动设计》。以下是一个简单的Java代码示例,演示了如何使用领域驱动设计(DDD)的概念来定义实体、值对象和聚合。
2023-08-28 22:35:01 139
原创 java springboot sql防注入的6种方式
4. 使用ORM框架中提供的查询构造器(Query Builder):ORM框架通常提供查询构造器或查询构造API,这些API可以帮助我们构建数据库查询语句,而无需手动编写SQL语句。1. 参数绑定:通过使用参数绑定,将用户输入的数据作为参数传递给SQL语句,而不是将其直接拼接到SQL语句中。6. 使用安全的编码方式:在将用户输入插入到SQL语句中时,确保使用合适的编码方式进行转义,例如使用转义函数或参数化查询。5. 输入验证和过滤:对于用户输入的数据,应该进行验证和过滤,确保其符合预期的格式和类型。
2023-08-24 14:40:21 3377
原创 W18.4、单元测试
6. 定期运行测试:要保持单元测试的实时性和有效性,建议定期运行测试,并及时处理测试中发现的问题。7. 编写清晰的测试文档:编写清晰、易懂的测试文档,包括测试目的、测试方法、测试数据和预期结果等。1. 编写独立的测试类:为每个要测试的类编写一个对应的测试类,保持测试代码与实际代码分离。//是否可与优惠券叠加使用: 0-不可以叠加使用,1-可以叠加使用。//是否可与优惠券叠加使用: 0-不可以叠加使用,1-可以叠加使用。3. 使用断言:使用断言来验证预期结果和实际结果是否一致,确保测试的准确性。
2023-08-24 10:12:06 1183
原创 java 用协程 实现 简单下订单功能
当一个协程被挂起时,会将当前的 Continuation 对象传递给挂起函数,挂起函数可以在完成后使用该 Continuation 对象来恢复协程的执行。2. 挂起和恢复:协程的挂起和恢复是通过挂起函数(即标记为 `suspend` 的函数)来实现的。1. 协程的基本概念:协程是一种轻量级的线程(或称为协程),它可以在代码中以类似于普通函数调用的方式被挂起 (suspend) 和恢复 (resume)。4. 挂起点:在协程的执行过程中,通过挂起点(suspend point)来标识协程的暂停和恢复点。
2023-08-20 20:16:24 228
原创 java 协程线程池示例
在 Java 中使用 Kotlin 协程需要依赖`kotlinx-coroutines-core`库,同时需要借助 Kotlin 协程的支持库`kotlinx-coroutines-jdk8`。这两个库可以通过 Gradle 或 Maven 进行依赖管理。下面是一个示例,展示如何在 Java 中使用 Kotlin 协程和线程池来执行异步任务:首先,添加以下依赖到你的构建文件中:对于 Gradle:```groovy```对于 Maven:```xml```
2023-08-19 17:22:34 257
原创 win11安装ubuntu 子系统安装过程及注意事项
输入:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。重新打开已经安装的子系统,等几分钟,输入账户和密码。你的win11 ubuntu子系统就安装成功了。由于子系统是系统自带组件,需要安装软件支持。第二步:应用商店安装 ubuntu。第四步 下周wsl 更新程序并安装。再次打开ubuntu,就是这样。第三步,运行linux子系统。第一步 :安装系统必须组件。回车,输入Y,重启!
2023-08-19 11:16:36 1043
原创 java 一个注解实现限流
在`main`方法中,我们创建了`RateLimitAspect`切面实例,并通过`aspectOf`方法获得代理对象。上面的例子中,`Main`类中的`doSomething`方法被`@RateLimit(5)`注解标注,表示该方法在1秒内最多只能被调用5次。`RateLimitAspect`类是一个切面类,通过`@Around`注解实现对被`RateLimit`注解标注的方法的拦截。上面的代码定义了一个名为`RateLimit`的注解,通过给方法添加这个注解,可以限制方法的访问频率。
2023-08-17 19:35:01 307
原创 都说go协程性能好,这次我们来试试java协程
在每个任务的逻辑中,我们首先输出正在下载的网页的URL和当前协程的名称,然后调用 `downloadWebPage()` 方法下载网页的内容,并输出下载完毕的消息。在协程执行过程中,所有的纤程调度和切换都是由调度器控制的。在Java中,协程(Coroutine)是一种轻量级的线程解决方案,它可以在代码中实现类似于多线程的并发操作,但不涉及线程的创建和切换开销。协程可以使用栈来存储执行上下文,因此在切换协程时,只需保存和恢复栈上的状态,而无需保存和恢复整个线程的状态,从而减少线程切换的开销。
2023-08-14 20:14:45 137
原创 一个注解实现分布式锁
否则,节点需要等待或执行相应的逻辑。等到获得锁的线程或实例执行完成后,释放锁,其它等待的线程或实例才能获取锁并执行相应的业务逻辑。需要注意的是,分布式锁的实现需要考虑一系列问题,例如锁的超时处理、可重入性、死锁检测等。通过以上方式,节点可以通过锁服务获取到分布式锁,并根据锁服务的协调来保证资源的互斥访问。当节点不再需要锁时,它会向锁服务发送释放锁的请求,锁服务将会删除相应的节点。需要注意的是,使用 Redis 实现分布式锁时,需要确保 Redis 服务的高可用性和可靠性,以避免单点故障导致的锁失效问题。
2023-08-13 22:02:19 307
原创 springboot高级教程基于 redis 通过注解实现限流
2. 编写切面类`RedisLimitAspect`,在方法执行前调用`RedisLimit`组件实现限流。注意:在使用`@RedisLimit`注解时,每个方法对应的key不应该相同,否则会出现相互干扰的情况。1. 自定义注解`@RedisLimit`,并定义注解元素,如限流的时间、限流的次数等。可以通过自定义注解的方式来标注需要限流的方法,在方法执行前进行限流的检查。4. 在需要进行限流的方法上添加`@RedisLimit`注解。
2023-06-23 11:17:18 672
原创 springboot 全局异常处理
@ControllerAdvice` 注解用于定义异常处理器,`@ExceptionHandler` 注解用于定义处理异常的方法。`handleRuntimeException` 方法处理 `RuntimeException` 类型的异常,而 `handleMyException` 方法处理 `MyException` 类型的异常。上述代码定义了一个全局异常处理器,可以处理所有异常。如果你需要为不同类型的异常定义不同的处理方法,可以在 `@ExceptionHandler` 注解中指定异常类型。
2023-06-21 17:14:32 142
原创 nginx fair负载均衡方式使用
1. 下载Fair模块源代码: 在 https://github.com/gnosek/nginx-upstream-fair/releases 下载最新版本的Fair模块源代码。2. 下载Nginx源代码: 在 http://nginx.org/en/download.html 下载最新版本的Nginx源代码。现在,您已经成功安装了fair插件,并可以在Nginx配置文件中使用fair指令,并启用Fair负载均衡方式了。其中,`<path_to_fair_module>`为Fair模块源代码的路径。
2023-06-13 18:29:30 1972
原创 springboot WxJava 收发企业微信 应用消息
在上面的代码中,我们使用WxCpService实现了发送企业微信应用文本消息。我们使用WxCpMessage对象来构建消息内容,设置接收者的userId,以及应用ID等参数,最后调用wxCpService的messageSend方法来发送消息。在上面的代码中,我们实现了WxCpMessageHandler的handle方法,处理接收到的企业微信应用消息。在上面的代码中,WxCpConfigStorage是配置存储类,需要在Spring Boot中配置,并且需要在WxCpService实例化之前进行配置。
2023-06-10 18:02:55 2204
原创 java 连接chatgpt
上面的代码中,我们设置了请求Header中的Content-Type为application/json,这是因为要发送JSON格式的数据给ChatGPT。上面的代码中,我们使用JSONObject创建了请求的Body,也可以使用Gson等JSON解析库来构建JSON数据。在上面的代码中,我们使用HttpPost请求,请求的URL是ChatGPT的Endpoint地址,需要根据自己的访问权限和需要发送的数据类型进行替换。// 模型的温度,可控制生成文本的多样性。// 生成的响应文本的最大长度。
2023-06-10 17:32:17 3852 1
压力测试工具wrk在centos7,ubuntu18,20,wsl-ubuntu18,20的二进制包
2022-08-10
node大礼包.zip,node6,node8,node10,node12 window
2019-07-21
java 打包rpm打包文档.zip
2019-06-17
java word(doc docx excel) to pdf
2019-04-29
IntelliJ idea 2018.3版本汉化包,
2019-03-25
poi excel 导出实例
2018-04-10
java webservice 获取天气信息
2018-01-09
java wesocket 简易聊天
2017-12-28
mybatis-generator-core
2017-11-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人