github创建action部署用户

账户准备 # 1. 创建 git 用户(禁用密码登录,更安全) sudo adduser git --disabled-password --gecos "" # 2. 一键创建 .ssh 目录并生成 Ed25519 密钥对 # (利用 -u git 确保生成的文件直接属于 git 用户,无需后续 chown) sudo -u git mkdir -p /home/git/.ssh sudo chmod 700 /home/git/.ssh sudo -u git ssh-keygen -t ed25519 -C "github-actions-deploy-key" -f /home/git/.ssh/github_actions -N "" # 3. 将公钥加入授权列表 sudo -u git sh -c 'cat /home/git/.ssh/github_actions.pub >> /home/git/.ssh/authorized_keys' # 4. 严格设置规范的权限 sudo chmod 600 /home/git/.ssh/authorized_keys sudo chmod 644 /home/git/.ssh/github_actions.pub 目录赋权 用acl权限控制 ...

October 1, 2026

腾讯COS对象存储申请API访问

创建子账号 https://console.cloud.tencent.com/cam/user/create?systemType=FastCreateV2 点击权限 输入对象存储,搜索并选择策略 创建API 点击API创建,保存下key和secret 创建COS桶 后续便可以通过API访问COS桶了

October 14, 2024

宝塔面板使用腾讯云COS自动备份

腾讯云COS自动备份 软件仓库搜索腾讯云COS并安装 配置访问存储桶的相关API信息 具体配置关联腾讯COS对象存储申请API访问 配置计划任务

October 6, 2024

centos7编译安装python3.11

sudo yum install gcc openssl-devel bzip2-devel libffi-devel wget wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz tar -xvf Python-3.11.4.tgz # 安装源码编译需要的编译环境 yum -y install gcc zlib zlib-devel libffi libffi-devel readline-devel # 安装openssl11,后期的pip3安装网络相关模块需要用到ssl模块 yum install openssl-devel openssl11 openssl11-devel # 设置编译FLAG,以便使用最新的openssl库 export CFLAGS=$(pkg-config --cflags openssl11) export LDFLAGS=$(pkg-config --libs openssl11) # 进入刚解压缩的目录 cd /home/hadoop/opt/Python-3.11.4 #指定python3的安装目录为 /usr/python 并使用ssl模块,指定目录好处是后期删除此文件夹就可以完全删除软件了。 ./configure --prefix=/usr/local/python3.11.4/python3.11.4 --with-ssl # 源码编译并安装,时间会持续几分钟 make && make install sudo ln -s /usr/local/python3.11.4/bin/python3.11 /usr/bin/python3.11 # 以下可选 # 可以删除,也可备份,按需操作即可 sudo rm -f /usr/bin/python sudo rm -f /usr/bin/pip sudo ln -s /home/hadoop/opt/python3.11.4/bin/pip3 /usr/bin/pip3 sudo ln -s /home/hadoop/opt/python3.11.4/bin/python3 /usr/bin/python sudo ln -s /home/hadoop/opt/python3.11.4/bin/pip3 /usr/bin/pip

October 6, 2024

Rust工具链安装

Windows 安装MSYS2 https://www.msys2.org/ 安装工具链 pacman -S mingw-w64-ucrt-x86_64-gcc 查看gcc版本 gcc --version 安装Rust 配置windows环境变量 将下面述地址配置到windows系统环境变量 C:\msys64\ucrt64\bin 执行安装Rust MSYS2终端内执行 curl https://sh.rustup.rs -sSf | sh 一些选择 Current installation options: default host triple: x86_64-pc-windows-msvc default toolchain: stable (default) profile: default modify PATH variable: yes 1) Proceed with standard installation (default - just press enter) 2) Customize installation 3) Cancel installation >2 I'm going to ask you the value of each of these installation options. You may simply press the Enter key to leave unchanged. Default host triple? [x86_64-pc-windows-msvc] # 手动填写 x86_64-pc-windows-gnu Default toolchain? (stable/beta/nightly/none) [stable] Profile (which tools and data to install)? (minimal/default/complete) [default] Modify PATH variable? (Y/n) y Current installation options: default host triple: x86_64-pc-windows-gnu default toolchain: stable profile: default modify PATH variable: yes 1) Proceed with selected options (default - just press enter) 2) Customize installation 3) Cancel installation >1 检验安装结果 windows终端执行 ...

October 1, 2024

openwrt通过frp代理后外网无法访问

外网(frp)访问openwrt,报错request entity too large 错误原因:通常是指请求的数量超过服务器的限制 解决方法:修改配置文件,登录到opnwrt的ssh页面输入 vi /etc/config/uhttpd 修改 option max_requests '50'改成500 option max_requests '50'的意思是设置最大请求数为500。 重启 切换浏览器

October 1, 2024

IDEA搭建Scala项目-helloworld

安装Scala插件 打开idea的settings 进入plugins,搜索Scala 安装 安装Scala sdk 官网 https://www.scala-lang.org/download/scala2.html 根据环境自由选择 IDEA自动下载 项目模块上右键,选择 add framework support,选择Scala,然后下载适当的SDK Hello word 新建Scala源码目录,新建Scala class,类型选Object 编写代码 object Demo { def main(args: Array[String]): Unit = { println("hello world") } } hello world

September 27, 2024

JVM参数该如何配置

背景 面试官经常会问:JVM参数该如何设置? 虽然线上项目的JVM参数在我加入团队后就没有动过了,但我们还是得学习下不是,万一后面需要了呢? JVM内存模型参数 从图中可以很清晰的看出JVM运行时内存的分布及每一个部分对应的参数 Xmx表示最大堆内存 Xms表示最小堆内存 MaxNewSize表示最大新生代大小 NewSize表示最小新生代大小 Xmn 可同时对MaxNewSize和NewSize两个参数进行配置(1.4后才有,不过现在企业一般都采用1.8以上的版本了) Xss表示线程栈大小,可以控制JVM可以生成的最大线程数 MaxPermSize表示最大永生代大小 PermSize表示最小永生代大小 我们可以看到,没有直接设置老年代的参数,但是可以通过新生代参数和堆空间大小来控制 再来张简化版的图片。 可以看到JVM大体分为heap区和非heap区,其中heap区包括新生代、老年代;非heap区包括永生代、虚拟机栈和本地方法栈等 为什么要将一块堆内存分为新生代和老年代? 将内存区域划分为新生代和老年代,是为了使用不同垃圾回收算法,提高整个系统的垃圾回收效率。 JVM在运行过程中,产生对象的生命周期时不同的,有些对象的存活时间长,有些对象的存货时间短,如果每次垃圾回收,都把所有对象都扫描一遍,势必会造成不必要的性能开销。而将堆内存分为新生代和老年代,可针对不同的区域采用不同的垃圾回收算法,比如新生代中的对象存活时间短,可以采用复制算法完成垃圾收集,而老年代中对象存活时间长,对象数量比较多,适合采用标记清楚和标记整理算法。 而复制算法需要一块对象的暂存区域,所以将新生代分为Eden和2个Survivor区,每一次垃圾收集使用Eden和一个Survivor区。 Eden和Survivor区的大小可以通过XXSurvivorRatio参数来进行设置,其表示Eden大小和survivor区大小的比例 比如有参数-Xmx1024m -Xms1024m -Xmn128m -XXSurvivorRatio=2 我可以分析得到,新生代为128M,Eden和Survivor比例为2,那么可以计算得出Eden大小为64M,两个Survivor区均是32M JVM参数设置 堆大小配置 堆大小一般与操作系统、物理内存、虚拟内存的大小有关 Xmx 一般不得大于物理内存 Xms 初始内存,如果想要增大程序的启动性能,可以增大此参数,一般可以设置为和Xmx持平,防止垃圾收集后重新分配内存 Xmn 年轻代大小,这个参数控制年轻代和老年代的大小,对性能的影响比较大,sun推荐新生代和老年代的比例为3:5 Xss 线程堆栈大小,一般默认1M,这个参数设置的越小,JVM就能生成更多的线程(不能超过操作系统的限制) NewRatio 老年代和新生代的比值 SurvivorRatio Eden大小和survivor区大小的比例 MaxTenuringThreshold 设置对象的年龄,可以控制对象在新生代中的存活次数 垃圾回收器的选择及其参数配置 UseSerialGC 使用串行收集器 UseParallelGC 使用并行收集器 UseParalledlOldGC 使用并行年老代收集器 UseConcMarkSweepGC 使用并发收集器 其他配置 此外,JVM提供了不少辅助信息获取到的配置 PrintGC PrintGCDetails PrintGCApplicationStoppedTime 垃圾收集期间程序暂停运行的时间 PrintGCApplicationConcurrentTime 垃圾收集期间,应用程序未中断执行的时间 PrintHeapAtGC 打印出垃圾收集前后的堆栈信息 PrintGCTimeStamps 垃圾收集发生时的时间戳 Xloggc:filename 将日志信息记录到文件中,便于后续分析 上述参数可以组合使用,输出易于分析的信息

September 27, 2024

LRU算法

LRU算法 简述 LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。 该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t 值最大的,即最近最少使用的页面予以淘汰。 需求 实现一个缓存功能,使得插入、删除、修改的操作都是O(1)的,并且当需要清除缓存时,需要从最少使用的开始清除。 实现 思考: 一般的,要实现O(1)的时间复杂度,考虑使用hash来实现 需要从最少的元素开始删起,一种朴素的想法就是将每个元素使用时间记录下来,按时间顺序排好序,然后需要删除时,从最久未使用的元素开始删除 进而可以想到,使用链表将哈希表串联起来,头部表示使用最近使用的,尾部表示最久未使用的 如图所示: 最左边为Head,表示最近使用的;最右边未Tail,表示最久未使用的 当对节点进行操作: 删除:将节点从链表中移除 增加:将节点移动到head处 修改:将节点移动到head处 查询:将节点移动到head处

September 27, 2024

MySQL的MVVC是个什么东东

MVVC是什么 MVVC,全称Multi-Version Concurrency Control 多版本的并发控制,Multi-Version Concurrency Control,是一个可以提升数据库并发读写性能的技术。 一般的,如果对数据的库表的一行记录进行读写操作,为了保证数据的一致性,往往需要对这一行记录进行加锁操作。而加锁带来的问题就是开销变大,性能降低。而MVVC便是对这一问题提出的一种改进策略。 快照读和当前读 首先,我们先了解一下两个概念——快照读和当前读。 当前读 当前读可以理解为,所有的当前读操作都是针对的数据库最新版本的数据,在操作的时候会对资源加悲观锁,防止其他事务对数据进行修改。 如delete、update、insert、select for update、select lock in share mode等操作均是当前读 需要注意的时,在串行化的事务隔离级别下,所有的操作均是当前读 快照读 快照读的实现是基于MVVC的,读取的可能是某个版本的快照数据。 MVCC 数据库中有哪些并发场景? 读-读 读操作不会造成数据一致性问题,也没有并发控制的需要 读-写 可能造成数据不一致,需要对线程安全进行控制,否则会造成脏读、幻读、不可重复读的错误 写-写 多线程存在问题,可能会造成数据丢失 MVCC能解决什么场景下的问题? 解决读-写场景下的并发问题,可以实现读写均不会阻塞,解决脏读、幻读、不可重复读的问题 不可解决写-写场景下的并发控制问题,一般可结合乐观锁或者悲观锁来实现 MVCC如何实现并发控制的? 其实现主要依靠undo日志,版本链,Read View三个技术手段。 undo日志 undo可以理解为每次针对记录行修改时,原数据的备份。每一次针对原纪录的修改都会生成一个undo日志,将原数据拷贝到日志中记录起来 用于事务回滚 是的每个事务均有自己特有的日志记录集合 undo日志一般分为插入日志和更新日志。插入日志是执行insert操作生成的日志,在事务回滚时需要使用,在事务提交后可以丢弃掉;更新日志不仅在事务回滚的时候需要,在快照读的时候也需要,不能随便删除 版本链 数据表记录的每一行均有3个隐藏列 db_trx_id 事务id db_roll_pointer 回滚指针,指向上一个版本 db_row_id 隐藏的自增主键 这是一个简单的示例图。 很容易理解,每次修改都会undo日志,通过版本指针将这些日志串联起来,形成版本链。 Read View 读视图可以理解为快照读是生成的整个数据库系统的一个快照。其可以用来做可见性判断。因为每一个事务均有唯一的id,可以用此id来控制此事务可以看到的数据,可以是最新版本的,也可以是历史版本的。 其有如下几个参数: trx_ids 目前系统中未提交的事务id集合 low_limit_id 最大事务版本号加1 up_limit_id 处于活跃状态中的最好事务版本号 creator_trx_id 创建read view的事务版本号 可见性判断代码 MVCC和事务隔离级别的关系 MVCC如何实现RR和RC的隔离级别 在RC的隔离级别下,只要提交了都可以被其他事务读取到,每一个快照读均会生成一个最新的read view ...

September 27, 2024