Clay 的技术空间

用进废退 | 艺不压身

前言

本文主要介绍 Spring Boot 项目如何集成 Alibaba 的 OSS 服务(对象存储),教程内容同样适用于 Spring Cloud 项目。

提示

1、Spring Cloud 项目不建议继续使用 spring-cloud-starter-alicloud-oss 组件,尤其是较新版本的 Spring Cloud(例如 2021.0.1 版本),毕竟 Alibaba OSS 的官方文档也移除了该组件的使用说明。
2、Alibaba OSS 更多的使用教程请查看 官方文档

版本说明

Spring BootSpring Boot Alibaba
2.6.31.0.0
阅读全文 »

大纲

前言

官方文档

简单介绍

Spring Cache 是 Spring 提供的一个缓存框架,从 Spring 3.1 版本开始支持将缓存添加到现有的 Spring 应用程序中,从 Spring 在 4.1 版本开始,缓存已支持 JSR-107 注释和更多自定义的选项。Spring Cache 利用了 AOP,实现了基于注解的缓存功能,并且进行了合理的抽象,业务代码不用关心底层是使用了什么缓存框架,只需要简单地加一个注解就能实现缓存功能,做到了较小的代码侵入性。由于市面上的缓存工具实在太多,Spring Cache 框架还提供了 CacheManager 接口,可以实现降低对各种缓存框架的耦合;它不是具体的缓存实现,只是提供一整套的接口和代码规范、配置、注解等,用于整合各种缓存方案,比如 Ehcache、Caffeine、Hazelcast、Couchbase 等。

阅读全文 »

前言

Rsync 是一个增量备份工具,可压缩数据传输,速度快且增量备份,占用流量少。

准备工作

创建用户

1
2
3
4
5
# 创建用户组
# groupadd www

# 创建用户
# useradd -g www www -s /bin/false
阅读全文 »

大纲

前言

JVM 调优,调的是稳定,并不能让性能得到大幅提升。服务稳定的重要性就不用多说了,保证服务的稳定,GC 永远会是 JAVA 程序员需要考虑的不稳定因素之一。复杂和高并发下的服务,必须保证每次 GC 不会出现性能下降,各种性能指标不会出现波动,GC 回收规律而且干净,找到合适的 JVM 设置。比如,FULL GC 最会影响性能,根据代码问题,避免 FULL GC 频率。可以适当调大年轻代的容量,让大对象可以在年轻代触发 YONG GC,调整大对象在年轻代的回收频次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间。

阅读全文 »

前言

跨域介绍

  • 什么是跨域:浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一项不同,都属于跨域
  • 造成的原因:由于浏览器的同源策略,即 A 网站只能访问 A 网站的内容,不能访问 B 网站的内容
  • 特别注意:跨域问题只存在于浏览器,也就是说当前端页面访问后端的接口时,返回值是有的,只是服务器没有在请求头指定跨域的信息,所以浏览器自动把返回值给” 屏蔽了”
  • 解决跨域:经过上面的了解,可以得出几个解决跨域的方法(这里暂不考虑前端的实现方案),一是服务端指定跨域信息,二是在 Web 页面与后端服务之间加一层服务来指定跨域信息,比如代理服务 Nginx

提示

更多关于跨域的详细介绍内容,可以看 这里

阅读全文 »

大纲

JMM 内存模型介绍

JMM 概述

JMM 是 Java 内存模型 (Java Memory Model),本身是一种抽象的概念,实际上并不存在。它描述的是一组规则或规范,通过这组规范定义了程序中各个变量 (包括实例字段,静态字段和构成数组对象的元素) 的访问方式。

  • JMM 中关于同步的规定
    • 线程解锁前,必须把共享变量的值刷新回主内存
    • 线程加锁前,必须读取主内存的最新值,并存储在自己的工作内存
    • 加锁和解锁必须是同一把锁

由于 JVM 运行程序的实体是线程,而每个线程在创建时 JVM 都会为其创建一个工作内存 (有些地方称为栈空间),工作内存是每个线程的私有数据区域,而 Java 内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作 (读取、赋值等) 必须在工作内存中进行,首先要将变量从主内存拷贝到自己的工作内存空间,然后对变量进行操作,操作完成后再将变量写回主内存,不能直接操作主内存中的变量,各个线程中的工作内存中存储着主内存中的变量副本拷贝,因此不同的线程间无法访问对方的工作内存,线程间的通信 (传值) 必须通过主内存来完成。线程、工作内存、主内存工作交互图 (基于 JMM 规范),如下:

阅读全文 »

大纲

synchronized 的三种使用方式

  • synchronized 修饰普通方法时,是实例锁(对象锁),锁住的是当前实例对象
  • synchronized 修饰静态方法时,是类锁,锁住的是当前类的 Class 对象(反射)
  • synchronized 同步代码块,锁住的是 synchronized 后面紧接着的小括号内的对象

特别注意

  • 无论如何使用 synchronized 进行加锁,都是控制某个方法或代码块的访问,而不是控制整个类。
  • synchronized 修饰普通方法与同步代码块 synchronized(this){} 的效果是一样的,锁住的都是当前实例对象。
  • synchronized 修饰静态方法与同步代码块 synchronized(Object.class){} 的效果是一样的,锁住的都是当前类的 Class 对象。
阅读全文 »

前言

博客将流量导向微信公众号很简单,可以使用 TechGrow 的免费导流工具实现,用户扫码关注微信公众号后可以解锁全站文章,让微信公众号的粉丝数躺着增长。整个过程只需六步就可以搞定,适用于各类主流的博客,本文以 Hexo 的 NexT 主题博客举例。

提示

  1. TechGrow 开放平台的 官方文档
  2. 若使用的是 Hexo 静态博客,建议直接安装 hexo-readmore 插件,详细教程可点击这里
  3. 若使用的是 VuePress v1 静态博客,建议直接安装 vuepress-plugin-readmore-popular 插件,详细教程可点击这里
  4. 若使用的是 VuePress v2 静态博客,建议直接安装 vuepress-plugin-readmore-popular-next 插件,详细教程可点击这里

特色功能

  • 兼容主流的博客框架
  • 支持随机为博客添加引流功能
  • 支持查询用户解锁文章的历史记录
  • 支持自定义或者动态计算文章内容的预览高度
  • 支持自定义 CSS 样式,轻松适配不同风格的博客
  • 支持开放 API,灵活接入第三方私有化部署的应用服务

第一步:注册博客

浏览器访问 TechGrow 的官网 ,注册并登录账号后,进入博客的后台管理页面。首先点击左侧的菜单 博客注册,然后点击 新增 按钮,添加自己博客的信息。博客注册成功后,记录下 博客 ID,后面的步骤会使用到

阅读全文 »
0%