一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

两个月新增 80 万行代码,Linux 内核维护为什么不会崩?

8 月初,当 Linux 5.8 RC 版本开放测试时,大多数的新闻都聚焦于它的大小,称其为“史上最大的内核版本”。正如 Linus Torvalds 本人指出的那样,“尽管没有任何一件事情能脱颖而出……但 5.8 似乎是我们有史以来最大的发行版之一。” 确实,刚刚发布的 Linux 内核 5.8 RC 具有超过 14,000 个 commit,约 80 万行新代码以及大约 100 名新贡献者。要知道,距离 5.7 正式版发布才仅仅过去了约 2 个月的时间。Linux 内核维护者 Steven Rostedt 认为,5.8 之所以变得如此之大,很有可能是因为 COVID-19 疫情让很多人难以出门旅行,所有人都因此能够在这期间完成比平时更多的工作。 Rostedt 表示,从一个经验丰富的 Linux 内核贡献者和维护者的角度来看,5.8 RC 发行版特别令人震惊的并不是它的大小,而是它的空前规模对于那些正在维护它的人来说却没有造成困扰,“我认为这是因为 Linux 具有比世界上任何软件项目都好的工作流程。” 拥有最佳的工作流程意味着什么?对 Rostedt 而言,这归结为 Linux 内核开发人员随着时间的推移建立的一系列基本规则,以使他们能够持续不断地大规模、可靠地发展 Linux 内核项目。Rostedt 站在一个 Linux 内核资深维护者的角度,为我们分享了庞大的 Linux 内核项目 30 年来是如何有条不紊地运转的。 第一个关键因素是 Git 首先让我们从 Linux 项目的历史来看。在该项目的早期(1991-2002年),人们只能直接将补丁发送给 Linus Torvalds。准确地说,Linus 从项目的子维护者那里获取补丁,而这些子维护者从其他代码贡献者那里获取补丁。随着 Linux 内核变得越来越大,代码越来越复杂,很快他们就发现,一切都变得很难扩展和跟踪,并且项目将始终面临合并不兼容代码的风险。 这导致 Linus 开始探索包括 BitKeeper 在内的各种版本管理工具。BitKeeper 是一种最早的分布式版本管理的方法,其他的版本管理系统通常使用签出/修改/签入协议,而 BitKeeper 则向所有人提供整个仓库的副本,并允许开发人员将其变更发送出去以进行合并。Linux 在 2002 年开始短暂地采用了 BitKeeper,但是由于其本身是一个专有软件,被认为不符合社区对开源工作的信念,于是该工具在 2005 年停止使用。为了寻找替代品,Linus 消失了一段时间,并带着 git 回来了,后者成为了更强大的分布式版本管理系统,并且是管理流程的第一个重要实例化。Git 的出现使 Linux 开发在今天依然运转良好。 Rostedt 为我们列出了 Linux […]

龙生   25 Aug 2020
View Details

git blame 查看文件修记录

打个比方 我们有个文件夹project project里面有一堆文件夹 aaa,bbb,ccc,我们需要找到aaa文件夹的其中某个文件file.txt的修改记录 我们可以再project上开启git操作 然后 输入 git blame -L 11,12 aaa/file.txt -L 11,12 含义是该文件的第11行和12行的修改记录   from:https://www.cnblogs.com/1179929172-zh/p/12938344.html

龙生   25 Aug 2020
View Details

git bisect 命令教程

git bisect是一个很有用的命令,用来查找哪一次代码提交引入了错误。 它的原理很简单,就是将代码提交的历史,按照两分法不断缩小定位。所谓"两分法",就是将代码历史一分为二,确定问题出在前半部分,还是后半部分,不断执行这个过程,直到范围缩小到某一次代码提交。 本文通过一个实例,解释如何使用这个命令。下面是一个代码库,请将它克隆到本地。

这个库是一个网页index.html,在浏览器打开这个网页。

网页上是一个计数器,有两个按钮。点击+号按钮,可以看到计数器没有递增,反而递减,这说明代码有问题。 现在,就要来查找,到底哪一次代码提交,引入了错误。首先,检查一下代码提交历史。

可以看到,这个库一共有101次提交。最早的第一次提交的哈希是4d83cf。 git bisect start命令启动查错,它的格式如下。

上面代码中,"终点"是最近的提交,"起点"是更久以前的提交。它们之间的这段历史,就是差错的范围。 这个例子中,我们选择全部的代码历史。起点是第一次提交4d83cf,终点是最近一次的HEAD。当然,指定其他范围也可以。

执行上面的命令以后,代码库就会切换到这段范围正当中的那一次提交,本例是第51次提交。 现在刷新浏览器,点击+按钮,发现可以正常递增。使用git bisect good命令,标识本次提交(第51次)没有问题。

既然第51次提交没有问题,就意味着错误是在代码历史的后半段引入的。执行上面的命令,Git 就自动切换到后半段的中点(第76次提交)。 现在刷新浏览器,点击+按钮,发现不能正常递增。使用git bisect bad命令,标识本次提交(第76)有问题。

执行上面的命令以后,Git 就自动切换到第51次到第76次的中点(第63次提交)。 接下来,不断重复这个过程,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。

既然找到那个有问题的提交,就可以检查代码,确定具体是什么错误。 然后,使用git bisect reset命令,退出查错,回到最近一次的代码提交。

现在就可以开始修复错误了。 (完)   from:http://www.ruanyifeng.com/blog/2018/12/git-bisect.html

龙生   25 Aug 2020
View Details

Nginx出现403 forbidden

nginx访问时报403, 于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下: 1.    open() "/data/www/1.txt" failed (13: Permission denied), client: 192.168.1.194, server: www.web1.com, request: "GET /1.txt HTTP/1.1", host: "www.web1.com" 没有权限?于是找了不少资料,可以通过下面四步排查解决此问题。你可能只是其中之前配置有问题,不一定四个步骤都用上。   一、由于启动用户和nginx工作用户不一致所致 1.1查看nginx的启动用户,发现是nobody,而为是用root启动的   命令:ps aux | grep "nginx: worker process" | awk'{print $1}'   1.2将nginx.config的user改为和启动用户一致, 命令:vi conf/nginx.conf 二、缺少index.html或者index.php文件,就是配置文件中index index.html index.htm这行中的指定的文件。 1.    server { 2.      listen       80; 3.      server_name  localhost; 4.      index  index.php index.html; 5.      root  /data/www/; 6.    } 如果在/data/www/下面没有index.php,index.html的时候,直接文件,会报403 forbidden。     三、权限问题,如果nginx没有web目录的操作权限,也会出现403错误。 解决办法:修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,重启Nginx即可解决 1.    chmod -R 777 /data 2.    chmod -R 777 /data/www/     四、SELinux设置为开启状态(enabled)的原因。 4.1、查看当前selinux的状态。 1.    /usr/sbin/sestatus 4.2、将SELINUX=enforcing 修改为 SELINUX=disabled 状态。 1.    vi /etc/selinux/config 2. 3.    #SELINUX=enforcing 4.    SELINUX=disabled 4.3、重启生效。reboot。 1.    reboot   from:https://blog.csdn.net/qq_35843543/article/details/81561240

龙生   17 Aug 2020
View Details

解决nginx报错:nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied)

报错描述: nginx: [emerg] bind() to 0.0.0.0:8088 failed (13: Permission denied) 通过ansible远程给主机更换端口并重新启动nginx服务,出现以上报错信息(权限被拒绝)。 解决方式:经检查发现是selinux导致报错。 [root@localhost nginx]# getenforce    #查询selinux状态 [root@localhost nginx]# setenforce 0        #临时将selinux关闭 如果需要永久关闭selinux,请编辑/etc/selinux/config文件,将SELINUX=disabled。之后将系统重启一下即可。 之后重启nginx服务,发现报错已经解除。   from:https://www.cnblogs.com/python-wen/p/11358978.html

龙生   17 Aug 2020
View Details

vscode 设置整体界面字体的大小

1 打开 首选项-设置 2 按照下图1,2,3执行即可   from:https://blog.csdn.net/sunyan3517/article/details/103944040

龙生   06 Aug 2020
View Details

git常用命令速查表-桌面图

  from:https://blog.csdn.net/lovequanquqn/article/details/81744744

龙生   04 Aug 2020
View Details

bigdecimal 保留小数位

  参数定义 ROUND_CEILING Rounding mode to round towards positive infinity. 向正无穷方向舍入 ROUND_DOWN Rounding mode to round towards zero. 向零方向舍入 ROUND_FLOOR Rounding mode to round towards negative infinity. 向负无穷方向舍入 ROUND_HALF_DOWN Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round down. 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 ROUND_HALF_EVEN Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. 向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN ROUND_HALF_UP Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in […]

龙生   03 Jul 2020
View Details

Java中四舍五入

1、Math中四舍五入的方法 Math.ceil(double a)向上舍入,将数值向上舍入为最为接近的整数,返回值是double类型 Math.floor(double a)向下舍入,将数值向下舍入为最为接近的整数,返回值是double类型 Math.round(float a)标准舍入,将数值四舍五入为最为接近的整数,返回值是int类型 Math.round(double a)标准舍入,将数值四舍五入为最为接近的整数,返回值是long类型 2、Math中random生成随机数 Math.random()生成大于等于0,小于1的随机数 3、Random类生成随机数 两种构造方式:第一种使用默认的种子(当前时间作为种子),另一个使用long型整数为种子,Random类可以生成布尔型、浮点类型、整数等类型的随机数,还可以指定生成随机数的范围 4、BigDecimal处理小数 两种构造方式:第一种直接value写数字的值,第二种用String

from:https://www.cnblogs.com/testerlina/p/11349456.html

龙生   03 Jul 2020
View Details

IDEA编译通过能运行但是出现红色下划线的问题

能编译通过说明SDK导入正确,但是为啥我们点击每一个Java文件会出现好多红色的下划线 ,并提示idea cant resolve symbol 原因就是可能没有清除原来的历史缓存,导致一些错误,解决方法是 File-Invalidate Caches 然后重启IDEA,OK~困扰多年的问题解决!

龙生   03 Jul 2020
View Details
1 83 84 85 279