在大多数的Linux和Unix系统、及其他类Unix系统中,Shell是用户与操作系统内核交互的主要方式。作为一种强大的命令行解释器,它也支持编程功能,用户可以写脚本来处理各种任务。大多数人学习Shell脚本的最大动力是提高效率。使用Shell脚本,可以编写一个任务,然后让计算机去做,而你可以去忙其他的事情;可以编写一个任务,让计算机重复执行,而不需要你每次在命令行手动输入;可以更灵活地处理任务,比如管理用户,管理程序等。就这样,Shell脚本赋予你控制计算机的能力,一切尽在掌握。
在堡垒机中,过滤危险命令是确保系统安全的重要措施之一。要过滤的危险命令可能会因具体环境、系统配置和业务需求的不同而有所差异。需要注意的是,过滤这些命令时,应该仔细考虑它们可能带来的风险和实际业务需求。在某些情况下,某些命令可能是合法且必要的,因此在实施过滤策略时应该灵活调整。
对于开发同学来说,访问数据库,是代码中必不可少的一个环节。 系统中收集到用户的核心数据,为了安全性,我们一般会存储到数据库,比如:mysql,oracle等。 后端开发的日常工作,需要不断的建库和建表,来满足业务需求。通常情况下,建库的频率比建表要低很多,所以,我们这篇文章主要讨论建表相关的内容。 如果我们在建表的时候不注意细节,等后面系统上线之后,表的维护成本变得非常高,而且很容易踩坑。
Shell脚本的作用是监控系统的CPU、内存以及磁盘使用情况,并在超过特定阈值时记录详细的进程信息。它将这些信息写入到一个日志文件中。由于当前的系统环境中没有部署专门的监控组件,我们需要一种临时方案来监控系统资源。此方案通过Shell脚本实时测量CPU、内存和磁盘使用率,并在超过设定阈值时保存告警信息。该脚本能够帮助管理员快速发现和解决系统性能问题,确保系统稳定运行。
Redis 支持三种集群方案:主从复制模式,Sentinel(哨兵)模式,Cluster 模式。通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。
defer 在 Go 语言中是一个关键字(延迟调用),一般用于释放资源和连接、关闭文件、释放锁等。本文通过多个示例,展示了 defer 的执行顺序、参数解析、与返回值的交互、以及在闭包、panic 和 os.Exit 中的特殊行为。在实际开发中,灵活运用 defer 可以简化代码逻辑,减少重复性操作,从而提升代码质量和运行效率。
很多文章都在介绍设计模式怎么用,讲解设计模式的原理等等,设计模式的思想是编程中的精髓,用好了可以让代码结构利于维护和扩展,同时代码风格也更加优雅,V 哥也写过这样一篇文章,但很少有人从反模式的角度来讲一讲,过度滥用设计模式将给项目带来灾难。设计模式反模式(Anti-Pattern)是指那些表面上看起来像是设计模式,但实际上会导致软件设计问题的做法。这些做法可能会导致代码难以维护、扩展或测试。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
整个软件的发展历程是一部软件复杂性对抗史,软件的复杂性分为技术复杂性和业务复杂性,业务复杂性主要是建模和抽象设计,技术复杂性主要是三高(高性能,高并发,高可用)的应对,C端的业务一般以技术复杂性为主,业务复杂性为辅,而B端或者M端的业务通常以业务复杂性为主,技术复杂性为辅。本篇文章主要是从后端研发的视角结合自己多年的B C端系统建设实践谈下三高系统的建设方法论和实践,希望和大家相互交流,共同进步,同时这是我参与创作者计划的第1篇文章。
原子操作在多线程编程和并发环境中非常重要。在多个线程同时访问和修改共享资源时,使用原子操作可以避免出现竞争条件和数据不一致的问题。常见的原子操作包括原子的变量赋值、原子的计数器递增或递减等。例如,在一个多线程的计数器程序中,如果没有使用原子操作来增加计数器的值,可能会出现多个线程同时修改计数器导致结果错误的情况。而使用原子操作可以确保计数器的值在任何时候都是正确的。