54 归档分页
370 留言互动
4 核心专题

最近更新

Java 2022-09-08

mapstruct的基本使用

MapStruct 是基于注解的编译期代码生成器,可通过普通 getter/setter 实现类型安全、无反射的对象映射,避免手写冗余代码并在编译时捕获映射不完整或类型不匹配的问题。文章先展示了原始的博客评论接口实现,代码臃肿且不易维护,随后引入 MapStruct 依赖并创建 `CommentInfoConverter` 接口,在其中通过默认方法把 `HttpServletRequest` 的参数转换为 `Comments` 实体,控制层只需调用 `commentInfoConverter.map(request)` 即可完成对象构建,代码更简洁。最后给出运行时报的 `NullPointerException` 堆栈,提示在使用旧版 1.2.0.CR1 时可能出现内部处理错误。

MapStruct 阅读全文
Java 2022-07-17

SpringBoot绕过Nginx代理获取客户端真实IP的解决方案

本文介绍在 SpringBoot 项目中通过 Nginx 代理获取客户端真实 IP 并解析其归属地的实现方案。首先在 Nginx 配置 `X-Real-IP` 与 `X-Forwarded-For` 头部,将真实 IP 传递给后端;随后编写 `IpUtil` 工具类,从请求头或 `request.getRemoteAddr()` 读取 IP;引入 `ip2region` 库并在资源目录放置 `ip2region.db`,使用 B‑tree 算法查询 IP 对应的省、市或国家信息;最后在控制层调用 `IpUtil.getIpAddr` 与 `IpUtil.getIpPossession`,将解析结果显示在评论区,实现博客评论的 IP 属地展示。

SpringBoot Nginx 阅读全文
算法 2022-09-07

NC57 反转数字

题目要求在不使用 64 位整数的前提下,对 32 位有符号整数的数字部分进行翻转,保留符号位,若翻转后超出 \[-2³¹, 2³¹‑1\] 范围则返回 0。解法思路是循环取出原数的最低位(x % 10),累乘 10 并加到结果 res 中,同时将 x 除以 10。为判断溢出,使用 long 类型暂存结果,最后检查 `(int)res == res`,若相等返回转化后的 int,否则返回 0。示例包括正数、负数、含尾零以及溢出情况。

NowCoder 阅读全文
算法 2022-09-05

NC35 编辑距离(二)

本文介绍了编辑距离的变形问题:在给定插入、删除和替换三个操作代价的前提下,求将字符串 str1 编辑为 str2 的最小总代价。要求时间复杂度为 O(n²),空间复杂度为 O(n)。文章通过动态规划构建二维数组 dp[i][j],表示将 str1 前 i 个字符转换为 str2 前 j 个字符的最小代价,初始化第一行和第一列分别对应纯插入或删除的成本,随后递推考虑字符相等、插入、删除和替换四种情况,最终返回 dp[len1][len2]。提供了完整的 Java 实现代码示例,并给出两组示例输入输出验证算法正确性。

NowCoder 阅读全文
算法 2022-09-04

NC38 螺旋矩阵

本题要求对任意 m × n 矩阵按顺时针螺旋顺序输出所有元素,数据规模 0 ≤ m,n ≤ 10,元素绝对值 ≤ 100,时间、空间均需 O(mn)。解法采用四个边界指针 left、right、up、down,循环在边界未交叉时依次遍历上边从左至右、右边从上至下、下边从右至左、左边从下至上,并在每次遍历后收缩相应边界,直至完成。代码实现简洁,先排除空矩阵,随后在 while 循环中按上述顺序加入结果列表,满足题目要求。

NowCoder 阅读全文
Java 2022-09-02

Optional详解

Optional 是 Java 8 为避免 NPE 而提供的容器类,使用 of、ofNullable、empty 创建实例,内部不可直接 new。常用方法包括:get 在值为空时抛异常;isPresent 判断是否非空;ifPresent 为空时不执行,非空时执行 Consumer;filter 根据 Predicate 过滤返回自身或空 Optional;map 将值映射为新对象并包装;flatMap 直接返回另一个 Optional;orElse、orElseGet、orElseThrow 在值为空时分别返回默认值、惰性 Supplier 或抛自定义异常。文中通过 Person 示例演示各方法用法,并给出 Service 层查询、DAO 返回 Optional 的实战场景,强调根据业务需求选用合适方法以提升代码可读性和安全性。

Java 8 阅读全文