加载中

Java

文章分类

浏览该分类下的所有文章

237 篇文章 20

代码优化的部分实例

文章介绍了几种常见的 Java 代码优化实践:① 用 String.format 替代多次 + 拼接,提高可读性,但在循环中仍应避免使用以免性能下降;② 使用 BufferedInputStream/BufferedOutputStream 配合字节数组缓冲,减少磁盘 I/O 次数,显著提升文件复制等操作的效率;③ 将二层遍历的集合转为 Map 后通过键直接定位,降低循环次数,减少 CPU 开销;④ 强调使用完 ResultSet、PreparedStatement、Connection 等资源后及时关闭,并遵守正确的关闭顺序;⑤ 引入数据库连接池(如 Druid、C3P0 等)避免频繁创建/关闭连接,防止连接数爆炸,提高并发性能。文中通过示例代码阐明了每种优化的实现方式和注意事项。

Linux命令速查手册

本文提供Linux常用命令速查表,涵盖系统信息(arch、uname、/proc)、时间管理、关机重启、文件目录操作(cd、ls、mkdir、rm、mv、cp、ln、touch)、搜索(find、locate、which)、挂载与卸载、磁盘使用(df、du)、用户组管理(useradd、groupadd、passwd)、权限与属性(chmod、chown、chattr)、压缩打包(tar、gzip、zip、rar)以及RPM包的安装、查询、更新和验证等,帮助快速查找和使用对应指令。

HTML实现复制当前链接到剪切板

文章演示了在 HTML 页面中通过 JavaScript 实现“一键复制当前链接”。使用 `<a id="articleHref">` 保存文章地址,点击 “分享给好友” 按钮时,动态创建隐藏的 `<input>`,将链接写入并选中,调用 `document.execCommand('Copy')` 将其复制到剪贴板。代码中加入了成功、失败和异常的提示弹窗,完成复制后隐藏临时输入框,实现了简洁的分享功能。

HTML页面嵌入视频的方案

文章介绍了在HTML页面中使用`<iframe>`嵌入视频的基本方法,给出YouTube 视频的示例代码,说明`src`属性填写视频地址即可。为防止自动播放,可在`allow`属性中加入`autoplay=false`或在URL 参数中设置`autoplay=0`,并提供了相应的代码示例。

mapstruct的基本使用

MapStruct 是基于注解的编译期代码生成器,可通过普通 getter/setter 实现类型安全、无反射的 Bean 映射,避免手写冗余代码并在编译时捕获映射错误。文章先介绍其原理与优势,随后以博客评论功能为例,展示原始的繁琐 controller 实现,然后通过引入 mapstruct‑jdk8 与 processor 依赖,定义 `CommentInfoConverter` 接口(`@Mapper(componentModel="spring")`),在其中把 `HttpServletRequest` 参数转换为 `Comments` 实体,最后在 controller 中仅调用 `commentInfoConverter.map(request)` 完成对象创建,代码更简洁。文末附上运行时报的空指针异常堆栈,提示在实际使用中可能遇到的配置问题。

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

文章介绍了在 SpringBoot 项目中通过 Nginx 代理获取访客真实 IP 并解析其所属地区的实现步骤。首先编写 `IpUtil` 工具类,从 `X-Real-IP`、`X-Forwarded-For` 或 `request.getRemoteAddr()` 读取真实 IP。随后引入 `ip2region` 依赖,加载 `ip2region.db`(放在 resources),利用内置 B‑tree 算法查询 IP 对应的省、市或国家信息,并对返回结果做格式化处理。最后在控制器中调用 `IpUtil.getIpAddr` 与 `IpUtil.getIpPossession` 将 IP 属地写入评论。文中还给出线上 Nginx 配置示例,使用 `proxy_set_header` 将 `Host`、`X-Real-IP`、`X-Forwarded-For` 传递给后端,实现完整的 IP 属地显示功能。

Optional详解

本文围绕 Java 8 的 Optional 类展开,首先说明其用于避免 NullPointerException 的背景,并对 Optional 的创建方式(empty、of、ofNullable)进行源码解析。随后系统介绍常用方法:get、isPresent、ifPresent、filter、map、flatMap、orElse、orElseGet、orElseThrow,并对 each 方法的实现逻辑和使用示例进行演示,比较了 orElse、orElseGet、orElseThrow 的异同以及 map 与 flatMap 的差别。最后提供了在 Service 层和 DAO 层的实战案例,展示如何通过 Optional 完成空值判断、异常抛出和链式调用,从而提升代码可读性和安全性。

什么?十行代码实现了斗图?

文章介绍了在评论区实现“斗图”功能的简易方案。作者比较了上传图片和直接粘贴图片链接两种方式,因服务器存储有限且上传不便,选择后者。只需在页面放置一个 textarea,配合十行左右的 JavaScript:读取用户输入,若以 http:// 或 https:// 开头则自动生成 `<img>` 标签,否则保持原文本。用户可从表情包网站复制图片地址粘贴即可在评论列表中显示,实现轻量、无需额外存储的表情包展示。

博客的评论与回复功能的实现

本文详细阐述了在个人博客中实现完整评论与回复功能的思路与代码。首先设计评论表,记录博客ID、父评论ID等关联信息;实体类Comments包含基本属性及子评论列表。前端提供表单,利用QQ号自动获取昵称、头像和邮箱,并在提交前进行必填和邮箱格式校验。点击“发布”通过 Ajax 将评论数据(包括内容、昵称、父评论ID)发送至后端;点击“回复”则填充占位符并设置父评论ID,实现层级回复。后端 Controller 接收参数、保存评论并根据 parentId 为‑1 的记录遍历构建评论树,使新评论置顶、三级评论嵌套在二级评论下。整体实现保证评论显示顺序正确,支持多层嵌套回复。

面试官:synchronized可以锁字符串吗?

synchronized只能锁住同一对象的字符串,new String生成的实例地址不同,导致并发仍然执行。若使用 String.intern() 把字符串放入常量池,所有相同值的引用会指向同一对象,锁即可生效,但常量池会占用大量内存,回收只能靠 full GC,成本较高。更好的做法是使用 Guava 的 Interner (弱引用)来管理锁对象,既保证唯一引用,又能在内存不足时自动回收。总结:锁字符串必须引用相同,intern 不推荐,推荐使用 Interner 实现安全高效的锁。

博客导流到微信公众号

文章介绍了在个人博客中通过 openwrite 的“博客导流公众号”工具,将首次阅读的用户引导关注微信公众号并获取验证码,从而为公众号带来流量。实现步骤包括:在 openwrite 平台注册登录、在后台的增长工具里新建导流项目,填写博客域名和长期有效的公众号二维码链接;设置公众号关键字(如“博客”)以回复验证码;在博客页面加入指定的 JS 代码并用 `<div id="container">` 包裹文章内容。该方式只需一次操作,对用户体验影响小,却能有效提升公众号关注度。

Nginx知识总结

Nginx 是轻量级高性能的反向代理/负载均衡 Web 服务器,支持 HTTP、HTTPS 等协议,具备跨平台、低内存、非阻塞高并发等优势,常用于静态站点、虚拟主机、API 网关等场景。它采用 master/worker 进程模型,使用 epoll 实现事件驱动的异步非阻塞处理,实现数万并发连接而无需多线程。文章介绍了正向/反向代理概念、Nginx 目录结构与核心配置(worker_processes、events、http、server、location),比较了 cookie 与 session、Nginx 与 Apache 的工作模型差异,并阐述了动静分离、CDN 加速以及常用的五种负载均衡算法(轮询、权重、ip_hash、fair、least_conn),帮助读者全面掌握 Nginx 的基本原理与实战用法。