1. 1 无处安放 汪峰
  2. 2 平凡之路 朴树
  3. 3 往后余生 马良
  4. 4 牧马城市 毛不易
无处安放 - 汪峰
00:00 / 00:00

词:汪峰

曲:汪峰

我闻到初春的味道

那如同儿时梦境新鲜的芬芳

也尝到思念的苦涩

这回望远方秋雨般无垠的萧索

心爱的人啊

多年以后是否还记得我的惦念

我的忧愁和挣扎

你知不知道

没有你我那颗叮叮当当的心啊

总是这样 这样无处安放

我去到来时的路上

还是那躺在公路尽头的月亮

电台里放着披头士

可那在我身旁熟睡的你在哪里

思念的人啊

人们常说时间会让爱变得淡忘

变得模糊和破碎

可你知不知道

没有你我那颗叮叮当当的心啊

总是这样 这样无处安放

回望这纷乱的生活

有太多人在我心底匆匆掠过

可当我想念的时候

却只有你让我静静地流下眼泪

心爱的人啊

时光飞逝我们终究要渐渐老去

渐渐恐惧和放弃

可你知不知道

没有你我那颗叮叮当当的心啊

终将这样 这样无处安放

终将这样 这样无处安放

Clay 的技术空间

用进废退 | 艺不压身

前言

前端项目发布新版本时,会经常遇到需要清理缓存的问题,以下是 Vue 项目禁用缓存的方法。

HTML 内容

在 HTML 页面(如 index.html)的 <head> 标签中添加 meta 配置。

1
2
3
<meta http-equiv="pragram" content="no-cache" />
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="expires" content="0" />
阅读全文 »

技术选型

常用的网络框架

  • Boost.Asio:Boost.Asio 是一个跨平台的 C++ 网络编程库,提供了异步 I/O 操作的抽象。它可以处理 TCP、UDP、SSL 等协议,并提供了丰富的异步操作和事件处理机制。

  • POCO C++ Libraries:POCO 是一个功能强大的 C++ 类库,其中包含了丰富的网络通信模块,包括 HTTP、SMTP、POP3、FTP 等协议的支持,以及 WebSocket、WebSocket Secure 等高级功能。

  • cpp-netlib:cpp-netlib 是一个轻量级的 C++ 网络编程库,提供了 HTTP、HTTP client、HTTP server 等模块。它设计简单,易于使用,并提供了现代 C++ 风格的 API。

  • Muduo:Muduo 是一个基于事件驱动的 C++ 网络库,用于构建高性能的服务器应用。它提供了事件循环、线程池、定时器、TCP/UDP 服务器等模块,可以处理大量的并发连接。

  • C++ REST SDK:C++ REST SDK 是由微软开发的一个 C++ 库,用于构建基于 HTTP 的服务和客户端。它提供了现代 C++ 风格的 API,并支持异步操作和并发处理。

  • Crow:Crow 是一个轻量级的 C++ 微型网络框架,用于构建 RESTful 风格的 Web 服务。它简单易用,适合快速开发小型的 Web 应用。

  • Beast:Beast 是 Boost 库的一部分,提供了现代 C++ 风格的 HTTP 和 WebSocket 功能。它设计简单,易于集成,并且具有高性能和可扩展性。

阅读全文 »

注册账号

DockerHub 官网注册账号,该账号是免费注册的。

创建个人仓库

登录 DockerHub 的官网,创建新的镜像仓库。

阅读全文 »

大纲

前言

在开发或学习时,有时候想编写一个数据库操作的小 Demo,但又不想利用 MySQL、Oracle 等数据库进行建库建表操作,因为只想写个小案例,感觉没必要弄个很大很麻烦的数据库。而且这个案例中的数据用完之后就不再需要了,所以也不需要进行数据的持久化操作。那有没有什么方案可以满足这个需求呢?答案是肯定的,H2 是一款内存数据库,适合在学习阶段、开发阶段调试代码使用,并不适用于生产阶段,可以满足学习与调试代码的需求。

阅读全文 »

大纲

ThreadLocal 的介绍

  • (1) 在 Java 中,ThreadLocal 是为每个线程独立存储变量的机制。它使得每个线程都能拥有一个独立于其他线程的变量副本,这样可以避免线程间的变量共享,从而保证线程安全。ThreadLocal 实例通常是类中的私有静态字段(属性),使用它的目的是希望将状态(例如,用户 ID 或者事务 ID)与线程关联起来。
  • (2) ThreadLocal 实现了每一个线程都有自己专属的本地变量副本,主要解决了让每个线程都可以绑定自己的变量值。通过调用 ThreadLocal 的 get()set() 方法,获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。如果不使用 ThreadLocal 或者其他手段(比如加锁)来控制共享变量的并发修改,那么就会出现线程安全问题,其根本原因在于 Java 内存模型(JMM) 的结构。
阅读全文 »

前言

版本说明

本文的内容适用于 XXL-JOB 的 2.3.13.0.0 版本。

初始化数据库

在 MySQL 执行 XXL-JOB GitHub 仓库中的 SQL 初始化脚本,初始化完成后一共有 8 张表

表名称描述
xxl_job_group 执行器信息表,用于维护任务执行器的信息
xxl_job_info 调度扩展信息表,用于存储调度任务的扩展信息,比如任务分组、任务名、机器的地址等
xxl_job_lock 任务调度锁表
xxl_job_log 日志表,用于存储任务调度的历史信息,例如调度结果、执行结果、调度入参等
xxl_job_log_report 日志报表,用于存储任务调度的日志报表,会在调度中心里的报表功能里使用到
xxl_job_logglue 任务的 GLUE 日志,用于存储 GLUE 日志的更新历史变化,支持 GLUE 版本的回溯功能
xxl_job_registry 执行器的注册表,用在维护在线的执行器与调度中心的地址信息
xxl_job_user 系统的用户表,可以用表中默认的用户名与密码进行登录
阅读全文 »

大纲

前言

什么是任务调度

任务调度就是我们常说的定时任务,定时任务是指在指定时间、指定的频率去执行任务(业务代码)。任务调度是日常开发中非常常见的一个业务场景,我们经常需要去运行一些的周期性、指定时间点等方式自动触发的异步业务逻辑。

集中式任务调度

集中式任务是与分布式任务恰好相反的概念,集中式任务就是单机任务,一个项目,一台机器,也就是我们常说的单体应用。对于集中式任务,也就是我们 Java 开发中常见的定时任务。

阅读全文 »

大纲

前言

在 Java 中,Fork/Join 框架(分支合并框架)是一种用于并行处理任务的强大工具,特别适用于那些可以递归地分解成更小任务的场景(如下图所示)。Fork/Join 框架基于 “工作窃取” 算法,允许空闲的线程从那些繁忙的线程那里窃取任务,以提高 CPU 的使用效率和程序的执行性能。

阅读全文 »

前言

为了实现不同环境构建的不同需求,这里使用到了 Maven 的 Profile 特性。因为 Profile 能够在构建时修改 POM 的一个子集,或者添加额外的配置元素。接下来将介绍 Maven 中对 Profile 的配置和激活。

阅读全文 »

前言

Java 中有 3 种主要的 I/O 模型:同步阻塞 I/O(BIO)、同步非阻塞 I/O(NIO)和异步非阻塞 I/O(AIO),除了这 3 种主要的 I/O 模型,还有多路复用 I/O 模型和信号驱动模型。它们的区别主要在于处理 I/O 操作时线程的行为方式,以及应用程序对于 I/O 完成时的处理方式。

I/O 模型介绍

I/O 模型的简介

  • 同步阻塞 I/O 模型(Blocking I/O,简称阻塞 I/O)是 Java 最早引入的模型之一,它的特点是在执行 I/O 操作时会阻塞当前线程,直到 I/O 操作完成才会继续执行后续代码。在同步阻塞 I/O 模型中,当一个线程调用读取操作时,如果没有数据可读,线程将一直阻塞在读取操作上,直到有数据到达为止。同样,当一个线程调用写入操作时,如果写缓冲区已满,线程将一直阻塞在写入操作上,直到有空间可用为止。同步阻塞 I/O 模型的优点是简单易用,但其缺点是效率较低,不适用高并发场景,因为线程在等待 I/O 操作完成时会被阻塞,无法处理其他任务。

  • 同步非阻塞 I/O 模型(Non-blocking I/O,简称非阻塞 I/O)是对同步阻塞 I/O 模型(BIO)的改进,从 Java 1.4 开始支持。在同步非阻塞 I/O 模型中,当一个线程调用读取操作时,如果没有数据可读,线程不会被阻塞,而是立即返回一个错误码或空值。同样,当一个线程调用写入操作时,如果写缓冲区已满,线程也不会被阻塞,而是立即返回一个错误码。通过不断地轮询 I/O 操作的状态,同步非阻塞 I/O 模型可以实现在等待 I/O 操作完成的同时处理其他任务。同步非阻塞 I/O 模型的优点是能够提高系统的并发性能,但其缺点是需要频繁地轮询 I/O 操作的状态,会造成 CPU 资源的浪费,而且实现相对复杂,需要一定的编程技巧。这种模型适用于需要处理多个连接但每个连接比较短(轻操作)的场景,如实时通讯系统、聊天服务器等。

  • 多路复用 I/O 模型(Multiplexing I/O)可以实现同时监控多个 I/O 操作的状态。Java 中的多路复用 I/O 一般是建立在同步非阻塞 I/O 模型(NIO)基础之上实现的,比如 Netty 网络编程框架。在多路复用 I/O 模型中,一个线程可以同时监听多个 I/O 操作的状态,当某个 I/O 操作就绪时,线程可以进行相应的读取或写入操作。通过这种方式,多路复用 I/O 模型可以在一个线程中处理多个 I/O 操作,提高系统的并发性能。多路复用 I/O 模型的优点是能够有效地减少线程的数量,降低系统资源的消耗,但其缺点是实现复杂度较高,需要一定的编程技巧。

  • 异步非阻塞 I/O 模型(Asynchronous I/O,简称异步 I/O)是最高级别的 I/O 模型之一,性能和吞吐量最高,从 Java 1.7 开始支持。它通过将 I/O 操作的结果通知给应用程序,来实现非阻塞的 I/O 操作。在异步非阻塞 I/O 模型中,应用程序发起一个 I/O 操作后,不需要等待操作完成,而是可以继续执行其他任务。当 I/O 操作完成后,操作系统会通知应用程序,应用程序再进行相应的处理。异步非阻塞 I/O 模型的优点是能够充分利用系统资源,提高系统的并发性能,但其缺点是需要操作系统的支持,在某些操作系统(如 Windows)上的支持不如 NIO 成熟,对于编程人员来说,实现相对复杂。这种模型适用于需要处理多个连接且每个连接比较长(重操作),并且要求高性能、高并发的场景,例如高性能服务器、流媒体服务器等。

阅读全文 »