自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

玖涯博客

玖涯博客:https://blog.nineya.com

  • 博客(109)
  • 资源 (4)
  • 收藏
  • 关注

原创 Hexo写文章不方便?用上GitHub Actions真的是泰裤辣

对于做个人博客的小伙伴来说 HEXO 大家肯定都是非常熟悉的吧,这是一个静态的个人博客程序,通过 HEXO + GitHub Pages 搭建免费个人博客也是很多博主的选择。但相信肯定也会有些困恼,比如博客的渲染维护太麻烦了,我要在一台新设备上写博客并推送到 GitHub Pages 还要先安装 Nodejs、HEXO 和插件?有了 GitHub Pages 完全可以放开 HEXO 专注写博客。

2023-05-31 22:37:34 101

原创 对三门问题的思考,应该细分两种情况

三门问题来源于一个娱乐节目。节目中有一位参与者和一位主持人,在参与者的面前有三扇关闭的门,其中两扇门的后面是空的,剩下一扇门后是一辆法拉利跑车。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,是空门。主持人其后会问参赛者要不要换另一扇仍然关上的门。本质问题是换另一扇门会否增加参赛者赢得汽车的机会率?网上统一的答案是“会”,但是我发现有一个很重要的一点都被网上的文章忽略了,主持人他知道中奖的门吗?

2023-04-24 18:57:26 336 1

原创 Dream 主题之 Halo 2.0 适配,以及适配前后的一些异同

经过一段时间的适配,目前 Dream 已经发布了基于Halo 2.x的第一个预发版本。目前对主题所有功能都完成了适配,但是由于Halo 2.x与1.x的一些不同,以及Thyeleaf模板引擎与FreeMaker模板渲染引擎的一些不同的特性,适配前与适配后在具体功能上还有一些明显的差异。目前也有一些博主对是否升级Halo 2.x持观望态度,本文从Dream主题的角度出发,阐述了Halo 2.3.0版本与1.6.1这两个版本上的一些不同之处。

2023-04-11 10:10:04 433

原创 Dream 主题使用手册 - 基础篇

Dream 主题基于 Halo 博客系统开发,本文将介绍本主题一些功能的使用,文档将持续更新。

2023-04-11 10:05:35 335

原创 Spring 源码分析(二)——GenericBeanDefinition 分析

BeanDefinition 中存储着 Bean 的定义信息,它具有属性值、构造函数参数值以及具体实现 Bean 提供的进一步信息,在学习 Spring 的 Bean 初始化流程之前,还是非常有必要先了解一下 BeanDefinition。

2023-04-11 10:02:04 277

原创 全文检索工具 Lucene 入门

最近在了解 Halo 博客后端源码,而全文检索是 Halo 做的比较差的一块内容,仅通过数据库的模糊查询来实现文章检索。对于搜索引擎之前了解的也不多,所以开始入门 Lucene 检索引擎,如果可以的话准备将该引擎应用于 Halo 之上。

2023-04-04 10:22:26 256

原创 互联网新理念,对于WEB 3.0 你怎么看?

WEB 3.0 这个名词走进大众视野已经有一段时间了,也曾在各个圈子里火热一时,至今各大互联网企业任旧在 WEB 3.0 上不断探索。但关于 WEB 3.0 是什么这个问题,其实大部分人都没有一个比较明确的认知,包括区块链和元宇宙等相关行业的从业人士在内,也包括我本人亦是如此。本文非技术性文章,从一个普通互联网用户角度,讲讲个人对 WEB 3.0 的理解与看法。

2023-03-11 19:08:52 590

原创 GCC编译环境升级部署

近期经常遇到使用源码编译的部署方式进行应用部署,在 GCC 编译环境上遇到各种问题,本文对升级部署 GCC 编译环境的流程以及遇到的一些问题进行记录。

2023-03-09 10:22:08 196

原创 Oauth2.0四种授权模式适用场景和授权流程介绍以及个人的一些思考

Oauth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准,先前曾经了解过在 spring-security-oauth2 中 Oauth 四种模式的实现,也通过 Shiro 实现了 Oauth 的授权流程。目前 spring-security-oauth2 已经被逐步废弃,Spring 也提供了新的框架 spring-authorization-server,整个框架基于 Oauth 2.1 开发。目前重新整理项目代码,借此机会详细梳理一遍 Oauth2.0 授权模式的适用场景和授权流程,

2023-03-09 09:41:54 571

原创 单点登录的几种实现方式探讨

单点登录(Single Sign On),简称为 SSO,是解决企业内部的一系列产品登录问题的方案。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,用于减少用户重复的登录操作,提升用户体验。从技术层面上讲,单点登录目前有多种实现方案,本文从博主个人的理解出发,比较这几种不同方案的优劣和适用场景。

2023-03-09 09:41:21 307

原创 MySQL 数据库运维与管理相关命令

最开始,服务器部署使用的宝塔面板,数据库运维管理全都是在宝塔上可视化操作,并没有真正的面对数据库执行过命令。出于某些原因,后续不准备再继续使用宝塔面板,所以,记录一下关于 MySQL 数据库管理方面相关的方法和命令。

2023-03-09 09:40:51 253

原创 在 Java 中,什么条件下两个 String 会是同一个对象?

这段时间工作上经常用遇到 String 对象比较的问题,这是一个比较基础的问题,但有时候对其原因还是有些迷惑,所以稍微总结一下。

2023-03-09 09:38:28 250

原创 Nacos 运维部署流程与常见配置方法

在使用 Nacos 时进行了一些配置的调整,过程中也遇到了一些问题,所以对 Nacos 部署上的一些要点进行了整理,详见官方文档:https://nacos.io/zh-cn/docs/v2/quickstart/quick-start.html部署 Nacos 需要 JDK 环境,版本要求为 1.8 及其以上版本。如果采用源码部署方案,则需要 Maven,版本要求为 3.2 及其以上版本。

2023-03-09 09:38:13 574

原创 Ubuntu 22.04 桌面美化之Mac Big Sur风格

Ubuntu 默认的桌面也是一个不错的样式,但千篇一律的主题很容易让人疲惫。本文描述了如何通过安装 gnome 桌面主题和动画,使桌面趋向于 Mac 的样式。

2022-12-08 21:26:46 13254 2

原创 在 Java 中,什么条件下两个 String 会是同一个对象?

这段时间工作上经常用遇到 String 对象比较的问题,这是一个比较基础的问题,但有时候对其原因还是有些迷惑,所以稍微总结一下。

2022-12-08 21:22:10 387

原创 通过Service Worker实现网页离线缓存、CDN并发请求和缓存版本控制

Service Worker 是一个服务器与浏览器之间的中间人角色,它可以拦截网络请求并根据网络具体情况采取适当的动作、更新来自服务器的的资源。本文通过 Service Worker 代理请求,实现网页第二次访问的离线访问和CDN并发请求功能,提高网站的访问速度,同时能够避免 jsDeliver 这类 CDN 问题造成的网站不可用的情况。......

2022-06-15 14:16:07 732

原创 低价低配的海外服务器的对比

如果你的域名没有备案,那么你使用国内的云服务器寸步难行。除此之外,海外云服务器的带宽普遍较大,能够满足一些人的特殊需求。很多人说海外服务器普遍价格低廉,但我实际的观察并非如此,海外服务器起步价普遍价格在 3-5 美元/月,而腾讯云、阿里云等云服务器厂商,他们的云服务器普遍是99元/年起步,这个价格相对来说已经很低了,且轻量应用服务器价格更加的低廉。当然其中有部分活动是针对新人的,但是普遍价格还是比较低的。本文整理了目前调研过的几个海外云服务器网站,主要关注点在于 低价低配,没有太大的应用需求。...

2022-06-09 19:28:56 3651 1

原创 网站访问速度优化之pjax

pjax 是 ajax 和 pushState 的结合,它是一个 jQuery 插件。它通过 ajax 从服务器端获取 HTML 文件,在页面中用获取到的HTML替换指定容器元素中的内容。然后使用 pushState 技术更新浏览器地址栏中的当前地址,并且保持了真实的地址、网页标题,浏览器的后退(前进)按钮也可以正常使用。

2022-05-02 17:00:43 2246

原创 使用FreeCDN提升网站的访问速度

freecdn 是一个纯前端的 CDN 解决方案,用于降低网站流量成本,同时提高网站稳定性、安全性,并且无需修改现有的业务逻辑。其核心使用了 HTML5 中一个重要的 API —— Service Worker。它是一种浏览器后台服务,能拦截当前站点产生的 HTTP 请求,并能控制返回结果,相当于给网站加了一层反向代理。有了这个黑科技,我们可以把传统 CDN 的功能搬到前端,例如负载均衡、故障切换等,通过 JS 灵活处理各种请求。

2022-05-01 20:45:17 985

原创 网站访问速度优化之ServiceWorker

ServiceWorker 担任了服务器与浏览器的中间人角色,如果网站中注册了 ServiceWorker 那么它可以拦截当前网所有的请求,并做相应的处理动作。ServiceWorker 内容就是一段 JavaScript 脚本,内部可以编写相应的处理逻辑,比如对请求进行缓存处理,能直接使用缓存的就直接返回缓存不再转给服务器,从而大大提高浏览体验。有些开源工具包存在多个 CDN 站点,使用 ServiceWorker 可以实现自动寻找访问最快的站点,如果某个站点发生错误,可以自动切换,FreeCDN

2022-05-01 19:38:25 587

原创 Kafka 常用命令

本文以 kafka_2.5.1 版本为例,描述的常用命令,在 3.x 版本上命令有所不同。

2022-03-11 09:18:32 9928

原创 在CentOS 7.6上单机部署Kafka

本文以 kafka_2.13-3.1.0.tgz 版本为例,描述在 CentOS 7.6 上单机方式部署 kafka 的流程。

2022-03-02 09:22:37 1970

原创 Docker 一些基础使用命令

本文基于 docker 20.10.12 版本,整理了 docker 中一些常用的基础命令,命令主要分为镜像相关和容器相关两个部分。

2022-03-01 14:14:22 488

原创 在CentOS 7.6上单机部署Zookeeper

本文以 ZooKeeper 3.7.0 版本为例,描述在 CentOS 7.6 上单机方式部署 Zookeeper 的流程。

2022-03-01 13:48:29 3020

原创 SpringBoot 通过代理创建接口的实现类Bean

一、功能概述需要实现的功能是使用指定的 SDK 开发包来访问其他服务的资源,这种场景其实和Mapper、Feign 类似。所以,希望也通过接口上配置注解的方式实现。所以在本文使用了三个注解:@RkproblemMapperScan :自定义的注解,用于指定要扫描的包名;@RkproblemMapper :自定义的注解,用于标记当前接口需要被代理;@RequestMapping :SpringMvc 的注解,用于标记当前方法需要被代理,以及代理的 url。二、实现流程2.1 创建注解创建一

2022-01-20 15:18:26 1357 1

原创 Java 并发系列(二)——Semaphore源码分析

Semaphore 通常叫它信号量, 可以用来控制同时访问特定资源的线程数量,也可以用来保持资源生产者和消费者之间的资源限制关系,通过协调各个线程,以保证合理的使用资源。Semaphore 具有公平和非公平两种模式,本文通过源码对 Semaphore 的实现做简单分析。

2021-12-28 16:08:42 330

原创 Java 并发系列(一)——CountDownLatch源码分析

CountDownLatch 构造一个用给定计数初始化的并发计数器,能够协调多个线程之间的同步,当前线程在计数器倒计数至零之前一直等待,除非线程被中断。一般用于流程控制之类的场景,大流程分成多个子流程,子流程全部结束后大流程开始操作。

2021-12-27 11:32:19 238

原创 Docker-Compose Yaml编写以及基础命令

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,降低了运维成本,但是在使用过程中也会发现一些弊端,如 Docker 命令参数太多太复杂、多容器管理繁琐等。Docker-compose 便是在这场景下诞生的一个用于定义和运行多容器 Docker 的应用程序工具,它可以轻松、高效的管理容器,本文将描述 Docker-compose 的 Yaml 配置和基础命令。

2021-12-24 11:06:16 2814

原创 Dockerfile编写以及打包 java 程序为镜像

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。本文介绍 Dockerfile 各项命令的作用,以及如何使用 Dockerfile 打包 java 程序为镜像,并导出和运行。一、DockerfileFROMFROM <image>FROM <image>:<tag>FROM <image>:<digest&

2021-12-23 11:42:37 3931

原创 Java 集合类系列(二)——常见List源码分析

List 是对有序集合的分装,可对其中每个元素的插入位置进行精确地控制,并通过索引来访问、遍历元素。List 集合中,常用的是 ArrayList 和 LinkedList 这两个类。其中,ArrayList 底层通过数组实现,随着元素的增加而动态扩容,LinkedList底层通过双向链表来实现,随着元素的增加不断向链表的后端增加节点。

2021-12-15 16:22:03 615

原创 Java 集合类系列(一)——HashMap源码分析

HashMap 在 java 里用于存储 Key-Value 结构的数据,它允许 key 和 value 为 null,是一种无序并且线程不安全的集合对象。HashMap 基于 hashing 的原理,内部使用的是数组加链表的结构,在 JDK 1.8 上对查询性能进行优化,链表长度大于一定值过后链表将重构为红黑树。本文对 HashMap 源码进行分析,了解其实现原理。

2021-12-07 14:41:12 734

原创 Java 基础之迭代器的使用

迭代器是一种设计模式,迭代器可以用于遍历集合,开发人员不必去了解这个集合的底层结构。迭代器封装了数据获取和预处理逻辑,屏蔽了容器的实现细节,无需暴露数据结构内部。在数据量非常庞大时使用迭代器进行数据迭代获取,避免全部取出占用过多的服务器资源,且可以对部分数据进行预加载,提升性能。本文将对 java 提供的 Iterator、Iterable 和 Spliterator 三个数据迭代接口做介绍,了解其使用场景。

2021-12-06 11:31:03 4115

原创 Java 锁系列(七)——StampedLock源码分析

一、StampedLock概述StampedLock 是读写锁的实现,对比 ReentrantReadWriteLock 主要不同是该锁不允许重入,多了乐观读的功能,使用上会更加复杂一些,且仅支持非公平锁,但是具有更好的性能表现。StampedLock 的状态由版本和模式组成。 获取锁方法返回一个邮戳,表示和控制与锁状态相关的访问; 这些方法的“尝试”邮戳可能会返回特殊值 0 来表示获取锁失败。 锁释放和转换方法需要标记作为参数,如果它们与锁的状态不匹配则失败。本文对 StampedLock 的实现源码

2021-11-30 16:08:28 609

原创 Java 锁系列(六)——StampedLock使用

一、StampedLock概述StampedLock 是读写锁的实现,对比 ReentrantReadWriteLock 主要不同是该锁不允许重入,多了乐观读的功能,使用上会更加复杂一些,但是具有更好的性能表现。StampedLock 的状态由版本和模式组成。 获取锁方法返回一个标记,表示和控制与锁状态相关的访问; 这些方法的“尝试”版本可能会返回特殊值 0 来表示获取锁失败。 锁释放和转换方法需要标记作为参数,如果它们与锁的状态不匹配则失败。本文描述 StampedLock 的基础使用场景,入门教程。

2021-11-25 10:36:48 2227

原创 Java 锁系列(五)——ReentrantReadWriteLock源码分析

一、ReentrantReadWriteLock概述ReentrantReadWriteLock 是读写锁的实现,读锁可以在没有写锁的时候被多个线程同时持有,写锁就是和 ReentrantLock 类似的独占锁,它同样有包含公平锁和不公平锁两种实现方式,在实例化时将同时实例化 ReadLock 和 WriteLock 实例,本文主要聚焦于 WriteLock 的实现分析,因为 ReentrantReadWriteLock 中的部分实现与 ReentrantLock 一样基于 AbstractQueuedS

2021-11-18 09:11:21 293

原创 Java 锁系列(四)——ReentrantLock源码Condition实现分析

一、Condition 概述Condition 是个接口,依赖于 Lock 接口的实现,基本的方法就是 await() 和 signal() 方法,是在 java 1.5 中才出现的,用于替代 Object 的 wait()、notify() 实现线程间的协作,相比使用 Object 的 wait()、notify(),使用 Condition 的 await()、signal() 这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来

2021-11-02 19:28:48 199

原创 Java 锁系列(三)——ReentrantLock源码分析

一、ReentrantLock 概述ReentrantLock 是一个可重入的独占锁,是基于 AQS(AbstractQueuedSynchronized,抽象队列式同步器)实现的,它有公平锁和不公平锁两种实现方式。简单查看源码,可以发现 ReentrantLock 其实是一个代理的模式,Reentranlock 的核心是其内部继承自 AbstractQueuedSynchronized 的抽象类 Sync,将 Sync 作为锁的同步基础,其中加锁/解锁等操作其实都是由 Sync 对象完成的,也是通过实例

2021-10-18 10:08:32 191

原创 Java 锁系列(二)——ReentrantLock 和 ReadWriteLock基础运用

Lock 接口提供了与 synchronized 相似的功能,和 synchronized 不同的是,Lock 在使用的时候需要显示的获取和释放锁。虽然牺牲了隐式获取释放锁的便捷性,但是对于锁的操作具有更强的可操作性、可控制性以及提供可中断操作和超时获取锁等机制。本文将描述 ReentrantLock 和 ReadWriteLock 锁的基础使用。一、ReentrantLock 运用package com.nineya.test;import java.util.concurrent.Executo

2021-09-24 15:18:55 246

原创 Java 锁系列(一)——锁分类和基础概述

一、乐观锁和悲观锁乐观锁和悲观锁从看待并发问题的不同角度延伸出来的锁概念。1.1 乐观锁乐观的看待并发问题,认为数据不会被修改,所以不对数据上锁,只是在更新的时候判断一下在此期间数据有没有被更新。常见的乐观锁实现方式有“数据版本机制”或“CAS操作”。1.1.1 数据版本机制在表中进行更新数据时,先给数据表加一个版本字段,每成功操作一次记录,记录的版本号+1。先查询那条记录,获取版本字段,更新时判断此刻版本字段的值是否与刚刚查询出来的值相等。相等说明这段时间没有其他程序对其进行操作,可以执行

2021-09-23 09:26:51 228

原创 领域驱动设计(DDD)知识点整理

摘要Eric Evans的“Domain-Driven Design领域驱动设计”简称 DDD,DDD 是一套综合软件系统分析和设计的面向对象建模方法,相比于面向对象设计(OO),DDD 是一种更加注重业务边界的设计方法,OO 更加注重抽象,从差异中寻找共同点,然后进行抽象,这是两种不同的思维方式。可以简单的理解为 DDD 是一种业务+解耦的设计实现,DDD 的业务边界思维能够很好的支持微服务拆分,与近些年提出的微服务理论不谋而合 。本文将描述领域驱动设计(DDD)的基础知识,以及 DDD 项目的基础项目

2021-08-12 09:35:42 860

SSH示例项目.zip

搭建的一个完整的Struts+Spring+Hibernate项目,项目结构清晰,分层明确。业务功能比较简单,适合初学者入门。

2020-01-22

spring aop简单示例.rar

aop的原理基于java动态代理模式,本资源是spring的aop运用简单示例,用于帮助初学者理解和运用aop技术

2019-12-13

hexo-admin2.3.0补丁.zip

hexo-admin补丁修复了hexo-admin插入图片失败的bug,同时还添加了以下功能:1.对整个插件进行了汉化、2.添加了按文章分目录存储图片的功能,方便进行图片的管理和删除、3.修复了编辑界面预览链接错误bug、4.修复了新建“导航选项的分页”失败bug。

2019-12-04

springboot.zip

一个采用springboot+mybatis+mysql搭建的简单项目示例Deom,结构清晰,帮助新手快速掌握springboot+mybatis整合。

2019-12-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除