WangDeer

读书、思考、Coding … => 「生活」

Who Is Worker Bee

2024-12-25 17:31:27 · 王二

难得空明

朋友圈看到中学老师的书法作品。 版本比较多,找了一个类似的。 《志公和尚万空歌》 【梁】志公和尚(宝志禅师) 撰 南来北往走西东,看得浮生总是空。 天也空来地也空,人生渺渺在其中。 大地本来无寸土,人生劳碌一场空。 日也空来月也空,来来往往不留踪。 日月星辰常运转,人亡千载永无踪。 山也空来水也空,随缘变化体无穷。 青山绿水依然在,为人一死不相逢。 田也空来地也空,换了多少主人翁。 世间多少穷后富,也有多少富后穷。 金也空来银也空,死后何曾在手中。 万两黄金拿不去,为他一世受牢笼。 生也空来死也空,生死如同一梦中。 生如百花逢春好,死如黄叶落秋风。 夫也空来妻也空,大限到了各西东。 夫妻本是同林鸟,可怜死后不相逢。 男也空来女也空,黄泉路上难相逢。 贵子贤孙休贪爱,人因痴爱堕牢笼。 幻化空身虚变现,空是色来色是空。 空手来了空手去,到头总是一场空。 朝走西,暮走东,人生恰似采花蜂。 采得百花成蜜后,一场辛苦一场空。 夜深听得三更鼓,翻身不觉五更钟。 从头仔细想一想,便是南柯一梦中。 不信但看桃李树,花开能有几时红。 任你做到公卿相,死后还归泥土中。 身归土,气归风,一片顽皮裹臭脓。 败坏不如猪狗相,何不当初问志公。 生有一,死无二,休向人前夸伶俐。 生前置下田万顷,死后只得三步地。 宽八尺、长丈二,仔细思量真个是。 若人死后带得去,志公与你亲书契。

2024-04-01 11:42:21 · 王二

Ubuntu Clean

清理 /boot 目录 查看内核版本 uname -r 列出所有的内核 dpkg --list 'linux-image*' | grep ^ii 卸载没有使用的内核 sudo apt-get remove linux-image-VERSION 清理不再使用的包 sudo apt-get autoremove 更新内核列表 sudo update-grub 清理 /lib/modules 目录 查看已安装的内核版本 apt list --installed linux-image 删除未使用的内核版本对应的目录 sudo rm -rf 5.15.0-70-generic/ 清除未使用的 snap 包 #!/bin/sh LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' | while read pkg revision; do sudo snap remove "$pkg" --revision="$revision" done

2023-04-21 15:53:23 · 王二

Porto

Porto (Software Architectural Pattern) Welcome to Porto Introduction Getting Started Layers Overview 1) Ship Layer 2) Containers Layer Containers Sections Components 1) Main Components 1.1) Components Interaction Diagram 1.2) Request Life Cycle 1.3) Main Components Definitions & Principles Routes Controllers Requests Actions Tasks Models Views Transformers Exceptions Sub-Actions 2) Optional Components Typical Container Structure Porto Quality Attributes Implementations (Built with Porto) Feedback & Questions Introduction Porto is a modern software architectural pattern, consisting of guidelines, principles and patterns to help developers organize their code in a highly maintainable and reusable way....

2023-02-17 13:46:44 · 王二

ApidocJs apigroup Support Chinese

如题 apidoc 的 @apiGroup 值如果是中文的时候没办法进行分组。官方仓库提了好多这样的 issue,貌似韩文也不支持。 有人提了 pr,但是被拒绝了,不知道为什么。 可以临时根据这个 pr 修改文件来支持中文分组,node_modules/apidoc/lib/core/workers/api_group.js 文件中的: group = group.replace(/^[^a-z]+|[^\w:.-]+/gi, ''); 替换为: group = encodeURI(group).replace(/^[^a-z]+|[^\w:.-]+/gi, ''); 这样如果线上部署生成的话就不太方便了,可以在生成文档的脚本文件中添加一行替换的代码,在生成文档前强行替换: sed -i 's/group = group.replace/group = encodeURI\(group\).replace/' node_modules/apidoc/lib/core/workers/api_group.js

2023-02-16 13:39:23 · 王二

int(10)里面的10是什么意思?

crud 惯了,从来没深入研究过这些(一直以为是能存储的字节数)。 查了一下官方文档:Numeric Type Attributes。 MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets....

2022-06-24 12:46:57 · 王二

5-3 会话

会话 会话是一个进程组,或是多个进程组的集合。 一个会话可以至少有一个控制终端(物理终端,伪终端) 一个会话至少有一个前台进程组(前台就是指能输入的 bin/bash ),其它就是后台进程组 一个会话如果连接了一个控制终端,就叫控制进程 因为这个会话首进程 /bin/bash 是连接控制终端(伪终端设置驱动程序+tcp/ip 对端的ssh client) 的,所以创建的子进程,也会继承 bin/bash 的控制终端(0,1,2标准输出,标准输入,标准错误) 在终端的输入会影响前台进程组,ctrl+c (会终止前台进程)。 会话的创建 使用 posix_setsid() / setsid(2)创建。 不能使用组长进程调用 setsid 函数,硬要调用会报错 一般先创建一个子进程,让父进程exit,由子进程调用 setsid 调用 setsid 之后,该进程会变成组长进程,同时也会变成会话首进程 同时该进程没有控制终端(没有终端了,可以认为它没有连接显示器,没有连接键盘) 它没有控制终端了,你在终端里输入任何数据都没有反应的 phpdemo19.php <?php function showPid() { $pid = posix_getpid(); fprintf(STDOUT, "pid=%d,ppid=%d,pgid=%d,sid=%d\n",$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid)); } showPid(); $pid = pcntl_fork(); if ($pid > 0) { exit(0); } if (-1 == posix_setsid()) { echo 'error'.PHP_EOL; $erro_no = pcntl_errno(); echo pcntl_strerror($erro_no).PHP_EOL; } else { echo '会话创建成功'....

2022-06-10 21:37:27 · 王二

5-2 进程组

进程组,就是一个或是多个进程的集合,每一个进程都有个标识「组ID(PGID)」,表示该进程属于哪个进程组。 bash 进程启动之后,它会自己 setsid 把自己设置为会话首进程,也会设置自己为组长进程。 进程:正在执行的程序,这个程序是在 bin/bash 进程里启动的。 进程启动之后(通过 execve 函数启动),它会继承一些属性比如说组ID,会话ID,同时也会继承父进程已经打开的文件描述符(伪终端里的):0/标准输入,1/标准输出,2/标准错误,通过 pts、ptmx 模拟出来的。 demo17.php $pid = posix_getpid(); fprintf(STDOUT, "pid=%d,ppid=%d,pgid=%d,sid=%d\n",$pid,posix_getppid(),posix_getpgid($pid),posix_getsid($pid)); 查看当前 bash 进程 PID $ echo $$ 1031235 另外一个 SSH 连接,追踪上一个 bash 进程 $ strace -f -s 65500 -o demo17.log -p 1031235 在 bash 进程 1031235 中,执行代码 $ php demo17.php pid=1032568,ppid=1031235,pgid=1032568,sid=1031235 demo17.log # bash 进程 clone 一个子进程 1032568 1031235 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2c4847ba10) = 1032568 1032568 getpid() = 1032568 ... # 子进程将自己设置为组长进程 1031235 setpgid(1032568, 1032568) = 0 ....

2022-05-08 12:31:27 · 王二

2021-03-25 「PHP架构师」面试准备

岗位信息 职位:PHP架构师 工作职责: 负责应用类产品后端架构设计、开发与优化 负责业务整体设计,具有良好的维护性和扩展性 参与需求分析与评审,了解业务,从技术角度推进业务的安全、稳定运行 任职要求: 掌握微服务开发,拆分,saga事务模型 掌握消息队列 熟悉其他的语言 掌握docker,k8s 熟悉TCP、UDP、http协议 熟悉 linux 基础命令,了解如何排查系统性能瓶颈 熟练掌握mysql数据库的性能优化,表拆分 熟练掌握php,了解PHP的优势 统招全日制本科及以上学历,理工科专业。 知识点 saga 事务模型 概念 saga 是啥? 咱可没听过呀。 《传奇》是由布莱恩·K·沃恩(Brian K. Vaughan)撰写并由菲奥娜·斯台普斯(Fiona Staples)绘制的史诗般的太空歌剧/奇幻漫画系列,由美国公司Image Comics每月出版。该系列作品深受《星球大战》(Star Wars)的影响,并基于沃恩(Vaughan)既是孩子又是父母的想法。 —— saga 呃,貌似对找工作没啥帮助,既然是漫画先收藏起来。 再搜找到了以下相关的介绍: 1987年普林斯顿大学的 Hector Garcia-Molina 和 Kenneth Salem 发表了一篇 Paper Sagas(点这里可以看原文),讲述的是如何处理 long lived transaction(长活事务)。Saga 是一个长活事务可被分解成可以交错运行的子事务集合。其中每个子事务都是一个保持数据库一致性的真实事务。 —— 10分钟说透Saga分布式事务 The Saga design pattern is a way to manage data consistency across microservices in distributed transaction scenarios. A saga is a sequence of transactions that updates each service and publishes a message or event to trigger the next transaction step....

2022-03-24 11:59:59 · 王二

5-1 Bash进程与终端

什么是终端 能实现数据输入、输出的统称为终端。 物理终端:传统显示器、键盘,通过 VGA、HDMI、USB 等连接。 软件终端(虚拟终端/伪终端):通过 TCP/IP 协议实现的终端,能模拟出来一个实现「数据输入、输出」的终端,比如:ssh、telnet … 这篇博客介绍的比较详细:「转」彻底理解Linux的各种终端类型以及概念。 伪终端的连接过程 在linux中有物理终端,有虚拟终端(伪终端)。 sshd 服务会打开一个 [dev/ptmx],这个文件是一个伪终端主设备文件。 bin/bash 会打开一个 dev/pts(0,1…), 是一个伪终端从设备文件。 ptmx/ptsx 它们通过伪终端设备驱动程序模拟出输入和输出的功能。 bin/bash 进程就可以实现数据读取和数据写入。 ssh客户端 ——————> 远程服务器的一个进程 ——-> ssh客户端。 输入单元(ssh客户端)——–> /bin/bash进程————–> 输出单元(ssh客户端)。 bin/bash 启动之后,对终端数据的读取和写入就是通过 pts 实现的(能实现标准输入,标准输出)。 dev/pts0 0 1 2 标准输入,标准输出,标准错误。 通过 strace 命令查看sshd服务: strace 前进程关系: ├─sshd,9408 │ └─sshd,2888142 │ └─bash,2888170 │ └─pstree,2889779 -ap strace 中: $strace -f -s 65500 -o sshd.log -p 9408 # strace 查看系统调用,进行一个新的 SSH 连接 strace: Process 9408 attached strace: Process 2888330 attached strace: Process 2888331 attached strace: Process 2888336 attached strace: Process 2888342 attached strace: Process 2888343 attached strace: Process 2888344 attached strace: Process 2888345 attached strace: Process 2888346 attached strace: Process 2888347 attached strace: Process 2888348 attached strace: Process 2888349 attached strace: Process 2888350 attached strace: Process 2888351 attached strace: Process 2888352 attached strace: Process 2888353 attached strace: Process 2888354 attached strace: Process 2888355 attached strace: Process 2888356 attached strace: Process 2888357 attached # 新的SSH连接 strace: Process 2888358 attached strace: Process 2888359 attached strace: Process 2888360 attached strace: Process 2888361 attached strace: Process 2888362 attached strace: Process 2888363 attached strace: Process 2888364 attached strace: Process 2888365 attached strace: Process 2888382 attached ^Cstrace: Process 9408 detached # 终止信号 strace: Process 2888330 detached strace: Process 2888357 detached 新的 SSH 连接以后的进程关系:...

2022-03-16 15:33:55 · 王二