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

吉森

Fuel your ambition
首页
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
全部分类
随笔 5 前端 1 技术分享 2 Java 27 Java基础 18 第三方库 4 Spring框架 2 Java web 1

怎么写好技术文章?

吉森 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等)
阅读全文

上一页

下一页

全部分类
随笔 5 前端 1 技术分享 2 Java 27 Java基础 18 第三方库 4 Spring框架 2 Java web 1
Theme by Vdoing | Copyright © 2024-2025 吉森 | MIT License | 吉ICP备17006653号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式