发布了文章2022-04-26
COMMAND & 形式前台进程变为后台进程。如果不指定输出重定向(例如:COMMAND >out.log 2>&1 &),输出仍然打印到前台。退出 shell 会话(其父进程),进程会收到 HUP 信号,从而退出。在另一个 shell 会话向进程发送 INT 信号,进程会退出。总结:...
发布了文章2020-09-26
我们在编写 CI 时通过声明镜像作为 job 的执行环境,每个 job 都在一个纯净的容器中执行。有时,我们需要一个 docker 容器环境来执行 docker build、docker push 等操作。查看官方的 docker 镜像,我们发现存在两个主要的版本:docker:latest、docker:dind 和 docker...
发布了文章2020-09-14
APM ( Application Performance Management ) 是应用性能管理的缩写,代表了服务的行为、可靠性、性能等的监控和管理。当应用发生故障,利用 APM 设施可以迅速检测并定位到产生故障的原因。
发布了文章2020-07-01
微服务 (网关 Kong、服务通讯 gRPC、通讯格式 Protocol Buffers、服务注册发现 etcd、熔断/降级/限流、服务网格 Istio)
回答了问题2020-05-31
如 @fefe 所说,死锁只有在所有的 goroutine 都处于等待状态时才会发生,楼主的程序应该还有其他的 goroutine 在运行,如果自己的代码中没有开启其他 goroutine,那就有可能是项目依赖开启的 goroutine。
赞了文章2020-05-22
首先我们要搞明白何谓幻读,目前网上的众多解释幻读的博文个人感觉仔细设想一下就能找出推翻的例子,就像博文把 非阻塞IO 等同为 异步IO,然后好多文章都纷纷借用,其实这俩货是完全不同,非阻塞IO 是 同步IO 中的一种模式,并非 异步IO。错误的观点都被大众认同的 "...
发布了文章2020-05-08
上篇文章《通过 GitLab Runner 实现 CI/CD 工作流(上)》我们讲解了 GitLab Runner 的部署和配置优化,这次我们来进行一次实战演练,对一个完整的前后端分离的项目进行讲解。这个项目分为前端和后端两个项目,他们有独自的代码仓库,对于不同仓库的代码提交,会触发...
关注了问题2020-04-30
发布了文章2020-04-29
我们分析一下程序执行过程,设置 P 数量以后,执行打印 The program starts ...,之后将匿名 goroutine 加入调度队列,执行 Sleep 操作,在 sleep 过程中调度器会将 main goroutine 从唯一 P 中让出,执行匿名 goroutine,而这个 goroutine 是无限循环,并且中间没有...
发布了文章2020-04-26
CI/CD 是持续集成、持续部署的意思,研发团队的开发流程以代码版本仓库(VCS)为中心,以不同的 branch 或 tag 进行代码提交,之后 VCS 会触发一系列的流水线作业,包括代码检查、单元测试、编译、打包镜像、发布镜像、触发测试环境或生产环境的部署等,这一切都是自...
回答了问题2020-04-26
如果楼主的 executor 是采用的 docker 方式,也即是使用 docker in docker 的方式进行构建镜像,那么可以将 runner 中的 /var/run/docker.sock 挂载到 executor 在执行 job 时所创建的 dind 容器中,这样,在 dind 容器中进行 build image 时,所使用的 docker daemo...
关注了问题2020-04-24
赞了文章2020-04-09
2.下载成功后---->解压得到一个ckeditor文件夹----->把ckeditor文件夹上传到服务器上(或本地的静态服务上)------>本地新建一个demo.htm如下
回答了问题2020-03-31
给模版名加前缀确实可以解决不同文件夹下的相同模版文件的命名冲突问题,对于不同文件夹下的相同文件名,我们只需要在文件内部以嵌套模版的形式标注就行了。
发布了文章2020-01-27
春节假期在家闲来无事,把大学期间使用的华硕笔记本改造成一台家庭服务器。最小化安装 CentOS 7.7 之后出现了无法启动无线网卡的情况,并且奇怪的是在经过一次休眠之后,无线网卡就会恢复启动。
回答了问题2020-01-20
我理解的是,如果返回指针,会将变量分配在堆内存中,caller 栈中只保存指向堆内存的指针;如果返回值,会直接将变量分配在 caller 栈中。
发布了文章2020-01-19
系统账号主要用于运行特定的 daemon 程序,比如我们添加专门的 Linux 用户 www 和 mysql 来运行 Nginx 和 MySQL,这是为了便于控制程序的权限(即运行此程序的账号的权限),若程序被侵入,防止攻击者可以任意执行系统中的其他行为。系统账号一般会将其登录 shell 设...
回答了问题2020-01-17
gorm 的查询结果赋值在业务层结构体指针上,如果不通过 error 的方式提示没查询到相应记录,用户只能通过结构体字段值来判断是否找到记录,如果作为结果接受者的结构体不包含主键/唯一字段,业务层判断是不那么准确的。
赞了回答2020-01-17
这个实现是不合理的:1.Gorm 是一个轻量的SQL wrapping。空记录是 DB 的正常返回,DB 层没产生过任何异常,因此 Gorm 也不应该返回 Error;2.如果业务层认为空记录是 Error,那么在业务层应该根据返回的结果为 nil,产生业务级 Error,这是业务层的责任;3.并且 Gorm ...
赞了文章2020-01-10
f函数里的x变量必须在堆上分配,因为它在函数退出后依然可以通过包一级的global变量找到,虽然它是在函数内部定义的;用Go语言的术语说,这个x局部变量从函数f中逃逸了。相反,当g函数返回时,变量y将是不可达的,也就是说可以马上被回收的。因此,y并没有从函数g中...