Wake Me Up When September Ends.

A wanderer capable of grasping the beauty of the grass, with a heart full of ancient charm, and a fondness for playful wit. Those who understand my words are knowledgeable individuals; those who decipher my code truly comprehend the essence. I am a wandering code swordsman, carrying my skills and riding freely through the digital world.

很多时候我们在git库中,不小心把应该忽略的文件或目录提交远程库中,比如.idea.ivscode等。把远程删除,本地不发生变化,以下操作即可:

1.使用git rm 命令

git rm -r –cached 要删除的文件名或目录,如:

1
git rm -r --cached .idea #--cached 只删远程仓库的文件,不会删除本地的

2.提交操作记录描述

1
git commit -m '删除XX文件'

3.推送到远程仓库

1
git push -u origin <branch_name>

算法的本质

算法(algorithm)的本质是将问题划分为一系列可执行的步骤,并通过合理的计算和操作来达到预期的结果。同一个问题可以使用不同算法解决,但计算过程中消耗的时间和资源可能千差万别。

那如何比较不同算法之间的优劣呢?目前分析算法主要从时间和空间两个维度进行。

  1. 时间维度:时间复杂度(time complexity),算法需要消耗的时间。
  2. 空间维度:空间复杂度(space complexity),算法需要占用的内存空间。

因此,分析算法利弊主要从时间复杂度和空间复杂度进行。大多时候二者不可兼得,有时用时间换空间,有时用空间换时间,来满足所在场景需要!

阅读全文 »

在PHP8.1未发布fiber之前,你可能会听到一些前辈说”PHP的yield就是协程”,但是官方文档对于yield是如下解释:

yield(生成器)提供了一种更容易的方法来实现简单的对象迭代,相比较定义类实现 Iterator 接口的方式,性能开销和复杂性大大降低。
生成器允许你在 foreach 代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。

官方的解释自然是正确和科学的,可是你的疑问是这个和协程有什么直接关系呢?

所以我将从生成器概念讲起到yield关键字使用,再到协程概念。或许你会从我的讲解得到一些解惑,当然如有不正之处,欢迎指点!

生成器的概念

在计算机科学中,生成器是一种特殊的函数,它可以按需生成一系列值,而不需要一次性生成整个序列。比较直观的例子就是汽车厂家是按照订单生产汽车,来一个订单生产一辆。而不是先大批量生产之后再分发销售。这样的好处是厂家节省资源,避免浪费。

生成器还有一个重要特性是它能够暂停和恢复执行!还是以汽车厂家生产汽车为例子,假设厂家接受了两个汽车订单,一单生产轿车一单生产suv,但是生产suv进行一半流程中发现部分零件需要等待采购。厂家自然会暂停生产suv流程,转而去生产轿车避免生产线停产等待从而浪费资源。待零件采购回来再恢复suv生产流程。

这种暂停和恢复执行的能力在处理大量数据、遍历复杂的数据结构、实现惰性计算等场景下可以节省大量内存和提高性能。原因它只在需要时才生成值,而不是一次性生成整个序列!

阅读全文 »

家里一台软路由安装了jellyfin,想把媒体目录挂载到另一台大容量的主机上。所以要将这台大容量的主机上通过Samba共享给软路由主机上,因此需将软路由主机本地文件夹映射到远程大容量的主机Samba共享目录下。

前提Samba安装配置已经在两台主机上配好,这里不再复述!

安装软件包

目前可以通过cifs-utils工具包实现。cifs-utils 是一个用于在 Linux 系统上实现与 Windows 共享文件夹交互的软件包。它提供了一组工具和库,允许 Linux 系统通过 CIFS(Common Internet File System)协议连接和访问远程 Windows 共享。

阅读全文 »