行有余力,则以学文
子曰:弟子入则孝,出则弟,谨而信,泛爱众,而亲仁,行有余力,则以学文。 孔子说:“弟子们在父母跟前,就孝顺父母;出门在外,顺从师长,言行要谨慎,要诚实可信,寡言少语,要广泛地去爱众人,亲近那些有仁德的人。这样躬行实践之后,还有余力的话,就再去学习文献知识。” 《论语·学而篇》- 孔子
子曰:弟子入则孝,出则弟,谨而信,泛爱众,而亲仁,行有余力,则以学文。 孔子说:“弟子们在父母跟前,就孝顺父母;出门在外,顺从师长,言行要谨慎,要诚实可信,寡言少语,要广泛地去爱众人,亲近那些有仁德的人。这样躬行实践之后,还有余力的话,就再去学习文献知识。” 《论语·学而篇》- 孔子
PHP 位运算介绍 位运算符允许对整型数中指定的位进行求值和操作。 以下是官网的一个介绍。 例子 名称 结果 $a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。 $a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。 $a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。 ~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。 $a « $b Shift left(左移) 将 $a 中的位向左移动 $b 次(每一次移动都表示 “乘以 2”)。 $a » $b Shift right(右移) 将 $a 中的位向右移动 $b 次(每一次移动都表示 “除以 2”)。 详情请点击这里了解。 平常开发需要用位运算吗? 位运算符都是针对整数的二进制数字形式而进行的。...
Git创建不继承内容的新分支方法 在 Git 中,想创建一个新的分支,并且不想要当前分支的任何内容(即希望新分支是完全干净的,不包含当前分支的修改或提交),可以按照以下步骤操作: 方法 1:基于远程默认分支(如 main/master)创建新分支 如果你希望新分支是基于远程仓库的默认分支(而不是当前分支),可以这样做: ``` # 1. 确保本地没有未提交的修改(否则会提示你提交或暂存) git status # 2. 拉取远程最新代码(确保本地默认分支是最新的) git fetch origin # 3. 基于远程默认分支(如 origin/main)创建新分支 git checkout -b 新分支名 origin/main 方法 2:基于某个提交或分支创建全新分支 如果你想基于某个特定的提交(而不是当前分支)创建新分支: ``` # 1. 先切换到目标分支或提交(例如切换到 main 分支) git checkout main # 2. 拉取最新代码(可选) git pull origin main # 3. 创建并切换到新分支 git checkout -b 新分支名 方法 3:强制创建孤立分支(完全无历史) 如果你想创建一个完全独立的新分支(不继承任何历史): 在切换分支之前,确保你没有未提交的修改,否则 Git 可能会尝试携带这些修改到新分支: git status # 提交他们 git add . git commit -m "暂存当前修改" # 或者丢弃它们 git reset --hard # 强制丢弃所有未提交的修改 创建一个完全独立的新分支(不继承任何历史)...
Git历史重置 有时候需要克隆github的项目使用,自己进行修改需要提交到自己的代码仓库,但是会包含前仓库的大量提交历史,看起来不方便,就需要清理历史记录并重置为一个全新的提交 新项目(如git clone 的项目) # 进入项目目录 cd template-repo-master # 删除原有的.git目录(如果存在)初始化全新的Git仓库 rm -rf .git git init git add . git commit -m "Initial commit from template" git remote add origin git@github.com:your-username/your-new-repo.git git push -u origin master --force 已经将代码推送到自己的远程仓库 清理历史记录并重置为一个全新的提交 # 1. 克隆你的远程仓库(可选) git clone git@github.com:your-username/your-repo.git cd your-repo # 2.创建孤立分支(全新的历史起点) git checkout --orphan new-branch # 3. 添加所有文件到新分支 git add -A git commit -m "Initial commit (cleaned history)" #4. 删除旧的主分支 git branch -D master # 或 main # 5....
Git同时配置github和gitee 想要同时使用GitHub和Gitee,但是每次输入密码就会很麻烦。为此,本文将介绍 Git 同时配置 github和 gitee 的ssh key #查看git配置 git config --global --list #没配置过的话先配置用户名和邮箱信息 git config --global user.name “username” git config --global user.email “email” #默认没有.ssh目录, ssh-keygen -t rsa -C "xxxxxxx@xx.com" #在windows下会生成.ssh目录 [c盘/用户/用户名/.ssh] 1. 查看ssh文件 cd ~/.ssh** ls 2. 删除之前的.ssh rm -rf id_rsa id_rsa.pub 3. 生成gitee和github 的 SSH Key ssh-keygen -t rsa -C "xxxxxxx@xx.com" -f "id_rsa_github" ssh-keygen -t rsa -C "xxxxxxx@xx.com" -f "id_rsa_gitee" 4. 查看SSH Key cat id_rsa_github.pub** 5. 拷贝 ssh-rsa 开头的 ssh key,然后到github上添加ssh key 6....
MySQL 运维常用脚本 1.导出整个数据库 #mysqldump -u 用户名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysql dump -u wcnc -p smgp_apps_wcnc > wcnc.sql 2.导出一个表 #mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 mysql dump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql 3.导出一个数据库结构 mysql dump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:wcnc_db.sql #-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 4.导入数据库 #A:常用source 命令 #进入mysql数据库控制台, 如 mysql -u root -p mysql>use databasename #然后使用source命令,后面参数为脚本文件(如这里用到的.sql) mysql>source wcnc_db.sql #B:使用mysqldump命令 mysqldump -u username -p dbname < filename....
Vim介绍 Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。百度百科 使用 vim a.php # 控制屏幕光标的移动,字符、字或行的删除,移动复制某区段,以其它任何模式按esc 即可进宪普通模式 i 在当前光标字符前插入 insert a 在当前光标字符后插入 append I 在当前行首插入 Insert A 在当前行尾插入 Append o 在下方开一新行,插入 open O 在上方开一新行,插入 Open r 替代字符,将当前字符替代为紧跟着输入的字符 replace R 进入替代模式,将当前及之后的字符都替代为紧跟着输入的字符串,直到按 `` 返回 Normal 模式 Replace gj 移动到屏幕折行后的下行 gk 移动到屏幕折行后的上行 命令模式是在普通模式下按 : 进入,用于搜索、保存退出等操作。 :w 保存 :w file 另存为文件 :q 退出 :q! 放弃修改退出 :wq 保存修改并退出 移动命令 Vim 的各种移动命令主要是在标准模式下 h 光标左移 j 光标下移 k 光标上移 l 光标右移 0 跳到行首,可以理解为无穷大的...
二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。 百度百科 世界上有10种人:一种是懂得二进制的,另一种是不懂二进制的 上面这是流传在程序员之间很久的一个冷笑话。 是不是get不到梗的笑点? 没有关系,看完本文,你再来看这句话就会会心一笑。 回到过去 让我们假设你回到了初中,这时候你情窦初开。喜欢上了临街的小哥哥(小姐姐),你们俩家的窗户面对面。放寒假的时候,你们约好了某天晚上八点偷偷溜出来约会。但是不能让父母知道,所以你们不能通过打电话方式来通知对方,今晚自己是否能顺利溜出来。为了不让对方白等,你们不得不约定一种新的通信方式。 这种新的通信方式要满足: 安静–不能让父母听到,能悄无声息自然是最好了 易懂–对方看到后能立马知道你要表达的信息 因为住的很近,可以从窗户相互看到对方家里,聪明的你立马想到可以用屋子里吊灯的灯光来进行通信。 你们约定到了八点钟 如果我屋子里的灯亮着,代表我可以顺利溜出去 如果我屋子里的灯不亮,代表我无法顺利溜出去 现在你们就可以用屋子里的灯开关,来表达两种状态 开:能出来 关:不能出来 你们可以悄无声息给对方传达信息,这太完美了! 新的问题 不过过了一段时间你们发现了新问题,有时候,8点钟恰好有事情,可能要推迟半小时才能溜出来。有时候,8点钟事情比较多,可能要推迟1小时才能出来。 现在你们有四种信息要传递 今晚8点钟准时出来 今晚不能出来 今晚8点30能出来 今晚9点能出来 但是一盏灯的开关只能表示两种状态,怎么办才好呢? 聪明的你立马想到,可以再加一盏灯啊!你把书桌上的台灯放到窗前 并且更新了之前的通信方式 台灯关着,吊灯关着–今晚没戏,出不来了 台灯关着,吊灯开着–今晚8点,不见不散 台灯开着,吊灯关着–推迟半小时,今晚八点半才能溜出来 台灯开着,吊灯开着–推迟1小时,今晚9点才能溜出来 哇哦,再一次用自己的聪明才智解决了这个问题。 现在你用两盏灯,来表达四种状态。 一些思考 让我们用符号来重新表述下 我们用数字0表示灯灭 数字1表示灯亮 一盏灯的情况 0 ==> 今晚八点准时出来 1 ==> 今晚八点不能出来 两盏灯的情况 0 0 ==> 今晚没戏,出不来了 0 1 ==> 今晚8点,不见不散 1 0 ==> 推迟半小时,今晚八点半才能溜出来 1 1 ==> 推迟1小时,今晚9点才能溜出来 让我们再来简化一下箭头右边,我们用数字0,1,2,3 分别来代表今晚约会的4种状态 0: 今晚没戏,出不来了 1: 今晚8点,不见不散 2: 推迟半小时,今晚八点半才能溜出来 3: 推迟1小时,今晚9点才能溜出来 现在我们可以把两边都用数字来简化了...
PHP标准输入与输出 一、PHP STDIN、STDOUT、STDERR简介: STDIN、STDOUT、STDERR命令输入输出流,用于向控制台(linux shell终端、windows cmd终端)输入、输出内容,它们默认是已经打开的,可以直接对他们进行读写操作,它们只能在CLI(command-line interface,命令行界面)模式中使用,在Http模式时,它们是未定义的。 而他们的打开副本php://stdin、php://stdout、php://stderr 也无法输出内容到http浏览器,经测试:写入php://stderr的内容将会输入到默认站点的错误日志中,其它两种无任何效果。 STDIN/STDOUT/STDERR简介:原始流流打开副本描述STDINphp://stdin标准输入(standard input),只读,用于从控制台输入内容; STDOUTphp://stdout标准输出(standard output),只写,用于向控制台输出正常信息; STDERRphp://stderr错误输出(standard error),只写,用于向控制台输出错误信息; 官方推荐使用常量 STDIN、 STDOUT 和 STDERR 来代替它们手动打开的副本封装器php://stdin、 php://stdout 和 php://stderr。 二、PHP STDIN用法: PHP语言中"STDIN"用于从控制台读取内容,遇到此常量或者通过fopen()函数打开php://stdin脚本将会等待用户输入内容,直到用户按下回车键提交。 新建文件demo.php <?php echo "请输入内容:"; $input = fgets(STDIN); echo sprintf("输入的内容为: %s\n", $input); $handle = fopen('php://stdin', 'r'); echo "请输入: "; $stdin = fread($handle, 10); //最多读取10个字符 echo sprintf("输入为: %s\n", $stdin); fclose($handle); //php demo.php 运行代码,键盘输入123,输出结果如下 //请输入内容:123 //输入的内容为: 123 //请输入: 456 //输入为: 456 三、PHP STDOUT用法: PHP语言中STDOUT用于向控制台输出标准信息;向此常量、或者向fopen()函数打开的php://stdout写入的内容将直接输出到控制台的标准输出;标准输出的内容可以用过">“或者"1>“重定向到指定地方,比如文件。 <?php fwrite(STDOUT, "STDOUT写入的正常输出;\n"); $stdout = fopen("php://stdout", "w"); fwrite($stdout, "php://stdout写入的正常输出;\n"); fclose($stdout); // php demo....
OSI七层模型 层 作用 注 应用层 为程序提供服务 规范数据格式 表示层 数据格式转换,加密 翻译 会话层 建立和管理会话 没有指定协议 传输层 管理端到端之间的连接 TCP协议、UDP协议 网络层 IP地址和路由 IP地址、ARP协议 数据链路层 链路管理 MAC地址、帧 物理层 提供传输环境 网线、WiFi TCP/IP四层模型 层 包含 应用层 应用层、表示层、会话层 传输层 传输层 网络层 网络层 数据链路层 数据链路层、物理层 ARP协议 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。相关协议有RARP、代理ARP。NDP用于在IPv6中代替地址解析协议。 TCP/UDP协议 TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用 TCP三次握手 所谓的“三次握手”:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。 过程 第一次握手:建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。 第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据(可使用抓包工具tcpdump 命令 tcpdump -nn -i eth0 prot 80) TCP四次挥手 对于一个已经建立的连接,TCP使用改进的四次挥手来释放连接(使用一个带有FIN附加标记的报文段)。TCP关闭连接的步骤如下: 第一步,当主机A的应用程序通知TCP数据已经发送完毕时,TCP向主机B发送一个带有FIN附加标记的报文段(FIN表示英文finish)。 第二步,主机B收到这个FIN报文段之后,并不立即用FIN报文段回复主机A,而是先向主机A发送一个确认序号ACK,同时通知自己相应的应用程序:对方要求关闭连接(先发送ACK的目的是为了防止在这段时间内,对方重传FIN报文段)。...