吉森的技术小站 吉森的技术小站
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

吉森

Fuel your ambition
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
全部标签
技术文章 CommonJS ES模块 JavaScript 模块化 函数式编程 Stream API Optional 空指针异常 Cookie SSO 单点登录 Web安全 Java 会话管理 Apache Commons JCS 缓存 LRU 分布式缓存 VFS 虚拟文件系统 文件操作 HTTP FTP SFTP Hutool 工具包 日期时间 字符串处理 集合操作 验证码 Excel 加密 guava 集合框架 并发工具 Google Spring Boot AOP 自定义注解 日志记录 字符串操作 String.join StringJoiner Stream 性能优化 POI OOM Electron Vue Gradle 文件格式 二进制文件 字节序 System属性 user.dir 设计模式 Java基础 equals 比较运算符 Http servlet 效率 IDE Intellij Java8 项目管理工具 maven 优化 编程语言 lombok lambda

怎么写好技术文章?

吉森 2025-08-25 随笔 0 人阅读

本文译自https://www.everythingtechnicalwriting.com/the-technical-writing-process/,部分内容有增删。

很多人都问过我:"我不是天生会写作的人,怎样才能写好技术文章?"

我的答案很简单:按照一套清晰的写作流程来做。

写技术文章其实和其他创作一样,都有一定的难度,尤其是当你要写一些全新的、不熟悉的内容时。即使是那些"天生会写作"的人,如果没有一套系统的方法,也会遇到困难。

一套好的写作流程,能够把看似复杂的"写技术文章"这件事,拆解成一个个具体的小步骤。这样你就可以一步步地完成,不会感到无从下手。

阅读全文

CommonJS与ES模块:新手完全指南

吉森 2025-08-21 前端技术分享 0 人阅读

# CommonJS与ES模块:新手完全指南

如果你是JavaScript新手,一定会对代码中时而出现的require(),时而出现的import感到困惑。为什么JavaScript会有两套不同的模块导入方式?它们有什么区别?什么时候该用哪一个?本文将用最通俗易懂的方式为你解答这些问题。

# 🎯 什么是模块化?

在深入了解CommonJS和ES模块之前,我们先来理解什么是模块化。

想象一下,你在搭建乐高积木。每个积木块都有特定的功能,你可以把它们组合起来创造出复杂的作品。JavaScript的模块化就是这个道理——我们把代码分割成一个个独立的"积木块"(模块),每个模块负责特定的功能,然后通过导入导出的方式把它们组合起来。

阅读全文

Java Stream findFirst方法的空指针陷阱详解

吉森 2025-08-14 JavaJava基础 0 人阅读

# 前言

在Java 8引入Stream API后,函数式编程风格在Java开发中变得越来越流行。然而,在使用Stream API的过程中,开发者经常会遇到一些意想不到的陷阱。本文将深入分析一个在生产环境中实际遇到的问题:Stream的findFirst方法引发的空指针异常。

这个问题看似简单,但背后涉及到Optional类的设计原理、Stream API的内部实现机制,以及Java中null值处理的最佳实践。通过本文的学习,你将能够:

  • 理解Stream findFirst方法的工作原理
  • 掌握Optional类的正确使用方式
  • 学会避免常见的空指针异常陷阱
  • 掌握处理可能为null的Stream元素的最佳实践
阅读全文

深入理解Cookie生命周期:一次SSO单点登录问题的排查与解决

吉森 2025-08-12 随笔技术分享 0 人阅读

# 前言

在现代企业级应用开发中,单点登录(SSO)已经成为提升用户体验和简化系统管理的重要技术手段。然而,在实际实施过程中,开发者往往会遇到各种细节问题,其中Cookie的生命周期管理就是一个容易被忽视但影响重大的技术点。

本文将通过我参与的一个真实的项目案例,深入分析Cookie在SSO系统中的作用机制,并提供完整的解决方案和最佳实践。

# 背景介绍

# 项目概况

我为公司开发的财务软件搭建了一个SSO(Single Sign-On,单点登录)服务器,用于实现用户在多个应用系统之间的统一身份认证。公司的财务软件主要由两个独立应用组成:

  • 财务应用(A应用):负责财务核算、报表生成等核心财务功能
  • ERP应用(B应用):负责业务流程管理、数据录入等业务功能

在业务流转过程中,A应用和B应用存在多处相互跳转的场景,例如:

  • 在A应用中查看凭证时,需要跳转到B应用查看凭证的业务源单
  • 在B应用中生成业务单据后,需要跳转到A应用下推相关财务凭证
阅读全文

函数式编程入门——拥抱函数式时代

吉森 2022-03-25 JavaJava基础 0 人阅读

面向对象和函数式这两种编程范式孰优孰劣的问题,已经争论了数十年。时至今日,很多主流编程语言都给出了自己的结论:两个都要。但是种种迹象表明,现在的确是一个函数式编程的时代,旧语言逐渐引入函数式的特性,新语言在设计之初就考虑更多函数式的设计,这篇文章帮助大家对函数式编程有一个基本的了解。

# 函数式与面向对象之争

函数式编程的理念其实出现的很早,1958年诞生的lisp就是一种函数式编程语言。但在面向对象这一概念出现之后,函数式语言就处于下风,过去二三十年流行的C++、Java等语言都是面向对象的编程语言。反观函数式语言,几乎从来没有真正成为榜单上主流的编程语言。究其原因,一是面向对象的理念更符合人类的直觉,二是早期函数式编程经常在性能上存在一些问题。

到了现在这个年代,由于计算机硬件的飞速发展,机器硬件的成本已经远远小于人力的成本,编程语言的性能相对而言已经没那么重要了,人们更多关注的是开发的效率。因此,以效率著称的函数式编程范式又一次出现在了人们的视野中。Java从JDK8开始引入了lambda表达式和stream流式计算,这两项函数式相关的特性大幅提升了Java处理数据的效率。JVM上其他的编程语言,如Scala、Kotlin和Clojure等,都较大程度上支持函数式编程。其他主流语言,如python、javascript、swift和go语言等,也都在设计之初就引入了大量函数式的特性。可以这样说,虽然面向对象的编程范式并没有被主流语言所抛弃,但是函数式的理念在开发实践中已经开始占据越来越大的份额。二者合理的整合,可能会成为未来编程语言发展的主流。

阅读全文

Java缓存技术哪家强?请找Apache Commons JCS

吉森 2021-06-03 Java第三方库 0 人阅读

大家好,我是吉森。我会持续分享一些开发技巧、经验和技术,如果你也热爱各种开发技术,欢迎关注我。

今天是Apache Commons工具包系列技术的终篇,今天的主角是:Commons JCS3。JCS指Java caching system,即java缓存系统。

阅读全文

Apache Commons VFS——让java访问资源效率超级加倍

吉森 2021-06-02 Java第三方库 0 人阅读

前面分两期介绍了 Apache Commons 工具包的一部分工具,今天继续介绍 Apache Commons 工具包中提高开发效率的一项利器:VFS。

VFS 指虚拟文件系统,不要被这个名字唬住了,它其实就是操作各种来源的文件的一套统一的 API。有了它,我们可以方便地操作本地文件、zip 和 jar 等多种压缩包中的文件、HTTP/FTP 服务器上的文件、临时文件,甚至是内存中的文件。怎么样,是不是跃跃欲试了?

阅读全文

Hutool——国产良心工具包,让你的java变得更甜

吉森 2021-05-14 Java第三方库 0 人阅读

上次我们分享了谷歌高大上的工具包Guava,这次我们来分享一款更接地气的国产工具包Hutool。

Hutool是国内程序员在工作中总结和积累而成的一套小而全的工具类库,相比于Guava,它更符合国内开发者的需求。

Hutool首次发布于2014年,最新版本为5.6.5,到目前为止已经在github上收获了1.9万个赞。

我们还是先来看一下学习Hutool的思维导图。

阅读全文

11年30个大版本,github4万星!谷歌这款java工具包值得深入学习

吉森 2021-05-13 Java第三方库 0 人阅读

11年前,谷歌开源了大名鼎鼎的guava工具库。时至今日,guava已经在github上发布了93个标签,迭代到了30.1.1版本,同时也收获了4万多颗星星。

guava就是google used java,它是一个谷歌持续维护的一个核心的java工具包,囊括了从新集合类型、不可变集合、图结构处理、并发工具、I/O、哈希、缓存等等各个方面的工具。它被各个公司各大项目广泛使用,可以说,几乎有java出现的地方就有它的身影。

事实上,guava已经成了JDK以外的又一个标准,guava里涵盖的很多东西,最终都被添加到了jdk中,如函数式编程、Stream流、Optional类、不可变集合API等等。

无论从哪个角度,guava都是值得java程序员深入学习的一个工具库。话不多说,先奉上学习guava的思维导图。

阅读全文

Spring Boot菜谱(一)——编写自动记录Controller层请求的注解

吉森 2021-04-28 JavaSpring框架 0 人阅读

今天菜品:

编写一个自动记录Controller层请求记录的注解。

# 起因

俗话说,懒惰是程序员的第一生产力。为了偷懒不在每一个Controller层方法上都编写记录日志的代码,我想到了利用AOP(面向切面编程)的方式,通过一个自定义注解来自动实现记录日志的功能。

# 解决方案

我们将上述需求分解一下,形成需要解决的问题点,如下:

  1. 编写注解,注解应该作用于方法上,并可以在运行时通过反射获取到
  2. 编写注解处理器,注解处理器应该是一个切面类,并定义在任何由RequestLog注解标注的类进行切入
  3. 通过反射获取到要注入的方法,再获取到方法的参数和返回值,利用日志将方法的参数和返回值按指定格式输出(或保存到数据库、redis等)
阅读全文

上一页

下一页

全部标签
技术文章 CommonJS ES模块 JavaScript 模块化 函数式编程 Stream API Optional 空指针异常 Cookie SSO 单点登录 Web安全 Java 会话管理 Apache Commons JCS 缓存 LRU 分布式缓存 VFS 虚拟文件系统 文件操作 HTTP FTP SFTP Hutool 工具包 日期时间 字符串处理 集合操作 验证码 Excel 加密 guava 集合框架 并发工具 Google Spring Boot AOP 自定义注解 日志记录 字符串操作 String.join StringJoiner Stream 性能优化 POI OOM Electron Vue Gradle 文件格式 二进制文件 字节序 System属性 user.dir 设计模式 Java基础 equals 比较运算符 Http servlet 效率 IDE Intellij Java8 项目管理工具 maven 优化 编程语言 lombok lambda
Theme by Vdoing | Copyright © 2024-2025 吉森 | MIT License | 吉ICP备17006653号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式