个人对设计模式的理解与实践 (持续缓更)
设计模式设计模式是什么?设计模式是我们对问题所提出的解决方案,就像一个个蓝图,通过对问题的一些综合考虑,采用最合适的设计方案来解决问题。就像一个工具箱,我们要看具体的情况,来决定使用哪把工具。那么设计模式是如何诞生的呢,设计模式最开始也是一个解决方案,只不过这个方案在各种项目中得到了验证。最终得到认可,是前辈们一个个试验,一步一个坑踩过来,最终被后人们整理,收纳,所归类的出的一种新领域 设计模式的优点 提高我们的思维能力和设计能力 使程序的设计变得标准化、流程化,增强开发效率 对代码来说,提高了可读性和复用性以及可扩展性 设计模式的六大原则 单一职责: 一个类应该只有一个会引起它变化的原因,也就是一个类只负责一个职责 开闭原则: 对扩展开放,对修改关闭 里氏代换原则: 子类应该可以替换父类对象,并保持逻辑不变 依赖倒转原则: 抽象不依赖细节,细节依赖于抽象。也就是对接口编程,不要直接使用实现类 接口隔离原则: 不应该强迫一个类实现它不需要的方法,而是使用多个精细化的接口 迪米特法则:...
写了一个 Java 中过滤实体类字段的小项目
项目简介 一个轻量级的 Java 字段过滤工具,只需两个注解即可优雅地控制接口返回字段。 为何开发这个项目? Java 在平时开发中,我们难免会遇到不想返回某些字段的情况,又或者某些字段的值过于敏感不方便展示,这种情况我们通常会新建一个类,包装成一个视图对象。那么随着业务的增长,视图对象会越来越多,所以开发了这个项目。 会不会有使用成本? 不会,仅需配置 2 个注解即可完成所有功能。并且可以将粒度细分到方法,返回同一对象,A 方法返回所有字段,B 方法返回需要的字段。 GitHub 地址:sensitive-field-filter 快速开始引入依赖目前仅支持 Spring Boot 项目,引入依赖 12345<dependency> <groupId>io.github.soora33</groupId> <artifactId>sft</artifactId> <version>1.0.0</version></dependency> 注解说明注解共有三个,其中...
如何将自己的 jar 包发布到 Maven 中央仓库?
注册 Maven 账号首先我们需要有一个 Maven 账号用来发布自己的 jar 包,打开 Maven 仓库官网,注册一个账号,这里推荐使用 GitHub 登录,使用 GitHub 登录可以后会自动获得一个命名空间,其余方式则要创建仓库验证,这里用 GitHUb 登录来做演示 命名空间命名空间用于做项目的唯一标识服,最常见的就是 io.github.xx,相信各位都在 POM 中见过不少 groupId 都是以这种形式开头的。下面我们就需要查看自己的命名空间。 GitHub 登录后,点击右上角的 Publish 在 Namespace 即可看到自己的默认空间,并且是已经经过验证的,我们就用这个命名空间来发布我们的 jar 包。 生成 用户 token有了命名空间后,我们还需要 用户 token,token 用来部署时的认证,所以要把 token 保管好,不要泄露出去。 点击个人头像,继续点击 View Account,在新页面中,点击 Generate User Token,获得自己的 token。复制好保存在一个地方。 生成的 token...
hexo & butterfly 升级与注意要点
前言 & 准备PS:不管是再怎么熟练,操作前一定要把原博客备份好!!! 最近想换个加载动画,但是在跟着弄的时候发现,博客不管是框架本身还是主题都已经跟不上了,所以打算升级一下。下面放一下升级的版本信息: Hexo:hexo 当前版本是 Current 列的信息,这里我全部更到了最新的 Latest 版本 Butterfly:我用的主题是 butterfly,在 hexo 的根目录下用 hexo cl 可以看到版本,旧的是 4.3.1,我升级到了 5.2.2 Hexo 升级Hexo 的升级非常简单,进入博客根目录,先看是否有可用更新 1234# 使用 `version` 查看当前的 hexo 版本hexo version# 查看是否有可升级版本,为空则表示当前为最新npm outdated 如果有最新版本,修改博客根目录的 package.json 文件内的版本号,下图为示例: 之后再通过命令行安装即可 1234# 安装项目依赖npm install --save# 检查是否升级成功hexo version Butterfly...
基于 ollama 从零部署大语言模型
前言环境介绍:使用的 Python 版本为 3.12.4 且需要科学上网,对电脑性能有一定需求(但也没那么离谱) 相信不少人已经体验过 Ai 带来的便利了,甚至在工作上使用 Ai 加以辅助。本文是对那些对 Ai 产生兴趣且希望在自己的设备上实际运行大语言模型的人而准备,希望可以通过这篇文章来让更多人认识和了解 Ai。本文是基于 ollama 创建和部署大语言模型,下面就开始进入正文。 ollama 是什么?ollama 是一个管理大语言模型的工具,帮助我们在本地快速创建、部署、使用大语言模型。它本身并不是一个大语言模型!还有一个名词 llama,它跟 ollama 很像,但是区别可就大了。llama 是由 Meta 开发的大语言模型,所以我们可以使用 ollama 加载 llama 这样的大语言模型。 安装 ollama进入 ollama 官网,点击下载按钮,安装到自己电脑上即可。安装完成后可以使用 ollama -v 测试是否安装成功 使用 ollama 运行 llama3.2 模型我们先简单启动一个模型进行测试,我们以 Meta 最新的 llama3.2 的 1b...
Java21 虚拟线程的研究与使用
认识虚拟线程 在 Java21 中正式引入了虚拟线程,它与我们目前所使用的传统线程(也叫平台线程)有什么区别,本文针对虚拟线程来进行研究并实战一些案例,帮助大家理解。 虚拟线程是在 Java19 中初次出现并在 Java21 中正式推出。与平台线程相比,它具有以下优势: 轻量化:虚拟线程是一个轻量化的线程,由 JVM 管理,所以创建和销毁的开销都很小,可以轻松创建上百万个线程。平台线程则是由系统内核直接管理,一个平台线程对应一个系统内核,自然创建和销毁的开销成本会比较高 无阻塞影响:在平台线程中,如果遇到阻塞时会阻塞操作系统对应的线程,导致降低系统的并发的能力。在虚拟线程中,如果遇到阻塞时并不会真正阻塞操作系统的线程,而是会自动挂起并释放资源,保证系统线程的可用性 资源管理:因为虚拟线程轻量化的原因,所以永远不应该池化,每个任务都会创建一个新的虚拟线程,使用完成后销毁。而平台线程则因为重量级,所以必须进行池化来进行资源复用 调度效率:因为虚拟线程是 JVM...
gRPC 框架的学习和使用
前言RPC在了解 gRPC 之前,我们需要先知道 RPC,也就是远程过程调用(Remote Procedure Call),它本身并非是一种协议,而是一种调用方式,允许一台机器调用另一台机器上服务的方法,而且屏蔽了底层网络通信的细节,并且支持跨语言调用。目前常见的 RPC 框架有 gRPC、Thrift、Dubbo 等。 gRPCgRPC 是由 Google 开发的现代高性能远程过程调用框架。使用 HTTP/2 作为传输协议,使用 Protocol Buffers(protobufs)作为接口定义语言。也是本文要进行认识学习的一个东西 下面是一张 gRPC 的简单工作图:基于 c++ 编写的服务端,以及与之通信的 Ruby 和 Java 客户端。不同的语言通过编译器插件将 proto 文件生成对应的代码即可使用。 RPC 与 HTTP 的对比 传输协议: HTTP 使用 HTTP/1.1 或 HTTP/2,而 gRPC 严格使用 HTTP/2。这意味着 gRPC 可以利用 HTTP/2 的多路复用、头部压缩和二进制帧等特性,提供更高效的通信。 多路复用:在...
Docker Compose 的理解与多场景应用
前言上一期我们简单介绍了 Dockerfile 及对应使用方法,本地项目打包成镜像并上传到 docker 仓库。那么本期继续对 Docker 进行深入,了解 Docker Compose 多容器编排的处理。 本文使用的为 docker compose v2,版本为 v2.28.1,v1 已经停止维护了 Docker Compose 简单认识Docker Compose 用于定义和运行多容器 Docker 应用的工具,通过一个 docker-compose.yml 文件来配置应用服务,简化了多容器环境的管理。很多复杂的项目往往需要各种各样的中间件,在以前我们需要手动一个一个配置,而现在,我们只需要执行别人写好的 docker-compose 文件即可完成各种组件和环境的引入。 安装 Docker Composemac&windowsmac 与 windows 的 Docker Compose 包含在 Docker 桌面端,直接安装桌面端 Docker 即可。 linux执行下面命令将 Docker 安装在 /usr/local/bin...
本地项目打包成镜像并上传到 docker 仓库
前言在平时编写代码时,我们可以在本地跑通的项目有时候在别人那里就是出现各种莫名其妙的错误,从而产生了 “调试环境” 的时间,而解决环境问题所需要的时间也说不定,轻则几分钟,重则以天计单位。但这个时候如果让别人直接用我们 “现成” 的环境就可以直接解决。这个就是 Docker 镜像的作用之一,但别人要用我们的镜像,我们就需要先把自己的镜像经过打包、构建、发布等一系列操作才行。 Dockerfile 编写规则首先我们来看一下编写 Dockerfile 的各种命令 123456789101112131415161718192021222324252627# 设置基础镜像FROM openjdk:17-oracle# 添加元数据到镜像LABEL author="Sora33"# 设置环境变量ENV APP_HOME /app# 创建应用目录RUN mkdir $APP_HOME# 设置工作目录WORKDIR $APP_HOME# 复制文件到镜像COPY ./target/xxx.jar $APP_HOME# 安装依赖RUN apt-get update &&...
多服务器 Kubernetes 集群的部署
环境介绍 服务器及系统版本:2 台阿里云服务器,Cenos7.8 版本 Kubernetes 版本:最新版(截止本文时间 24 年 4 月 1 日,最新版为 1.29.3) 服务器配置:4 核 8G Docker 版本:最新版(截止本文时间 24 年 4 月 1 日,最新版为 26.0.0) cri-dockerd 版本:最新版(截止本文时间 24 年 4 月 1 日,最新版为 0.3.12) 网络插件 Calico 版本:最新版(截止本文时间 24 年 4 月 1 日,最新版为 3.27.2) 前置准备 2 台或以上阿里云服务器,配置至少为 4 核 8G 因为需要从 GitHub 上下载东西,需要可以下载东西的网络 教程内出现的所有命令,如未特殊标注则默认是在每台机器上都要执行!!! 本文会从机器基础配置、基础插件安装、docker 及其 cri-dockerd、Kubernetes 以及最后的可视化 kuboard 的安装,循序渐进,并且会在每一步进行对应的解析,来更好的帮助理解 机器基础配置1....