Ansible 实战
1. httpd 角色
- 目录
root@ubuntu1904:~#tree -f httpd/
httpd
├── httpd/default
│ └── httpd/default/main.yml
├── httpd/files
│ ├── httpd/files/httpd.conf
│ └── httpd/files/index.html
├── httpd/handlers
│ └── httpd/handlers/main.yml
├── httpd/tasks
│ ├── httpd/tasks/config.yml
│ ├── httpd/tasks/index.yml
│ ├── httpd/tasks/install.yml
│ ├── httpd/tasks/main.yml
│ ├── httpd/tasks/remove.yml
│ └── httpd/tasks/service.yml
├── httpd/templates
│ └── httpd/templates/httpd.conf.j2
└── httpd/vars└── httpd/vars/main.yml
- 各文件内容
httpd/tasks/main.yml
---
#- include: remove.yml
- include: install.yml
- include: config.yml
- include: index.yml
- include: service.yml
httpd/tasks/install.yml
---
- name: install httpdyum: name=httpd
httpd/tasks/config.yml
---
- name: configtemplate: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf backup=yesnotify: restart
httpd/tasks/index.yml
---
- name: indexcopy: src=index.html dest=/var/www/html
httpd/tasks/service.yml
---
- name: start serviceservice: name=httpd enabled=yes state=started
httpd/handlers/main.yml
---
- name: restartservice: name=httpd state=restarted
httpd/tasks/remove.yml
# remove httpd
- hosts: websrvsremote_user: roottasks:- name: remove httpd packageyum: name=httpd state=absent- name: remove apache useruser: name=apache state=absent- name: remove data filefile: name=/etc/httpd state=absent
...
httpd/templates/httpd.conf.j2
ServerRoot "/etc/httpd"
Listen {{ 80 }}
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />AllowOverride noneRequire all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">AllowOverride None# Allow open access:Require all granted
</Directory>
<Directory "/var/www/html">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted
</Directory>
<IfModule dir_module>DirectoryIndex index.html index.php index.htm
</IfModule>
<Files ".ht*">Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn<IfModule log_config_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" common<IfModule logio_module># You need to enable mod_logio.c to use %I and %OLogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio</IfModule>CustomLog "logs/access_log" combined
</IfModule><IfModule alias_module>ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">AllowOverride NoneOptions NoneRequire all granted
</Directory><IfModule mime_module>TypesConfig /etc/mime.typesAddType application/x-compress .ZAddType application/x-gzip .gz .tgzAddType text/html .shtmlAddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8<IfModule mime_magic_module>MIMEMagicFile conf/magic
</IfModule>
#EnableMMAP off
EnableSendfile on# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
role_httpd.yml
root@ubuntu1904:/data/ansible_exercise#cat role_httpd.yml
---
- hosts: websrvsremote_user: rootroles:- role: httpd
2. nginx 角色
- 目录
root@ubuntu1904:/data/ansible_exercise/roles#tree nginx/ -f
nginx
├── nginx/default
│ └── nginx/default/main.yml
├── nginx/files
│ ├── nginx/files/index.html
│ └── nginx/files/nginx.repo
├── nginx/handlers
│ └── nginx/handlers/main.yml
├── nginx/tasks
│ ├── nginx/tasks/config.yml
│ ├── nginx/tasks/file.yml
│ ├── nginx/tasks/install.yml
│ ├── nginx/tasks/main.yml
│ ├── nginx/tasks/repo.yml
│ └── nginx/tasks/service.yml
├── nginx/templates
│ ├── nginx/templates/nginx7.conf.j2
│ └── nginx/templates/nginx8.conf.j2
└── nginx/vars└── nginx/vars/main.yml
- 各文件内容
nginx/tasks/main.yml
---
- include: repo.yml
- include: install.yml
- include: config.ymltags: config
- include: file.yml
- include: service.yml
nginx/tasks/repo.yml
---
- name: copy yum repo for nginxcopy: src=nginx.repo dest=/etc/yum.repos.d/notify: yum repolisttags: repo
nginx/tasks/install.yml
---
- name: installyum: name=nginx
nginx/tasks/config.yml
---
- name: config file for 7template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version=="7"notify: restart
- name: config file for 8template: src=nginx8.conf.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version=="8"notify: restart
nginx/tasks/file.yml
---
- name: index.htmlcopy: src=index.html dest=/usr/share/nginx/html/
nginx/tasks/service.yml
---
- name: serviceservice: name=nginx state=started enabled=yes
nginx/handlers/main.yml
---
- name: yum repolistshell: yum clean all
- name: restartservice: name=nginx state=restarted
nginx/files/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
nginx/files/index.html
<DOCTYPE! html><head><p1>Hello There!</p1></head><body><a>A test message!!</a></body></DOCTYPE!
>
nginx/templates/nginx7.conf.j2
user {{ user }};
worker_processes {{ ansible_processor_vcpus**2 }};error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
nginx/templates/nginx8.conf.j2
user nginx;
worker_processes {{ ansible_processor_vcpus**2 }};error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;events {worker_connections 1024;
}http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf;
}
nginx/vars/main.yml
---
user: daemon
role_nginx.yml
root@ubuntu1904:/data/ansible_exercise#cat role_nginx.yml
---
- hosts: websrvsremote_user: rootroles:- role: nginx
3. memcached 角色
- 目录
root@ubuntu1904:/data/ansible_exercise/roles#tree memcached/ -f
memcached
├── memcached/default
├── memcached/handlers
├── memcached/tasks
│ ├── memcached/tasks/config.yml
│ ├── memcached/tasks/install.yml
│ ├── memcached/tasks/main.yml
│ └── memcached/tasks/service.yml
├── memcached/templates
│ └── memcached/templates/memcached.j2
└── memcached/vars
- 各文件内容
memcached/tasks/main.yml
- include: install.yml
- include: config.yml
- include: service.yml
memcached/tasks/install.yml
- name: installyum: name=memcached
memcached/tasks/config.yml
- name: config filetemplate: src=memcached.j2 dest=/etc/sysconfig/memcached
memcached/tasks/service.yml
- name: serviceservice: name=memcached state=started enabled=yes
memcached/templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb//4 }}"
OPTIONS=""
role_memcached.yml
root@ubuntu1904:/data/ansible_exercise#cat role_memcached.yml
---
- hosts: websrvsroles:- role: memcached
4. mysql 角色
- 目录
root@ubuntu1904:/data/ansible_exercise#tree roles/mysqld/ -f
roles/mysqld
├── roles/mysqld/default
├── roles/mysqld/files
│ ├── roles/mysqld/files/my.cnf
│ ├── roles/mysqld/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
│ └── roles/mysqld/files/secure_mysql.sh
├── roles/mysqld/handlers
│ └── roles/mysqld/handlers/main.yml
├── roles/mysqld/tasks
│ ├── roles/mysqld/tasks/config.yml
│ ├── roles/mysqld/tasks/data.yml
│ ├── roles/mysqld/tasks/group.yml
│ ├── roles/mysqld/tasks/install.yml
│ ├── roles/mysqld/tasks/link.yml
│ ├── roles/mysqld/tasks/main.yml
│ ├── roles/mysqld/tasks/path.yml
│ ├── roles/mysqld/tasks/remove_mysql.yml
│ ├── roles/mysqld/tasks/secure.yml
│ ├── roles/mysqld/tasks/service.yml
│ ├── roles/mysqld/tasks/unarchive.yml
│ └── roles/mysqld/tasks/user.yml
├── roles/mysqld/templates
└── roles/mysqld/vars└── roles/mysqld/vars/mysql_vars.yml
- 各文件内容
roles/mysqld/tasks/main.yml
---
- include: install.yml
- include: group.yml
- include: user.yml
- include: unarchive.yml
- include: link.yml
- include: data.yml
- include: config.yml
- include: service.yml
- include: path.yml
- include: secure.yml
roles/mysqld/tasks/config.yml
- name: config my.cnfcopy: src=my.cnf dest=/etc/my.cnf
roles/mysqld/tasks/data.yml
- name: data dirshell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
roles/mysqld/tasks/group.yml
- name: create mysql groupgroup: name=mysql gid=666
roles/mysqld/tasks/install.yml
- name: install deps libsyum: name=libaio,perl-Data-Dumper,perl-Getopt-Long
roles/mysqld/tasks/link.yml
- name: mkdir /usr/local/mysqlfile: src=/usr/local/mysql-5.6.46-linux-glibc2.12-x86_64 dest=/usr/local/mysql state=link
roles/mysqld/tasks/path.yml
- name: PATH variablecopy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
roles/mysqld/tasks/remove_mysql.yml
roles/mysqld/tasks/secure.yml
- name: secure scriptscript: secure_mysql.sh
roles/mysqld/tasks/service.yml
- name: service scriptshell: /bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld;/etc/init.d/mysqld start;chkconfig --add mysqld;chkconfig mysqld on
roles/mysqld/tasks/unarchive.yml
- name: copy tar to remote host and file modeunarchive: src=mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz dest=/usr/local/ owner=root group=root
roles/mysqld/tasks/user.yml
- name: create mysql useruser: name=mysql uid=667 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
roles/mysqld/handlers/main.yml
- name: restartshell: /etc/init.d/mysqld restart
roles/mysqld/files/my.cnf
[mysqld]
log-bin
socket=/data/mysql/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1[client]
port=3306
socket=/data/mysql/mysql.sock[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/data/mysql/mysql.pid
roles/mysqld/files/secure_mysql.sh
#!/bin/bash
/usr/local/mysql/bin/mysql_secure_installation <<EOFy
stevenux
stevenux
y
y
y
y
EOF
role_mysqld.yml
root@ubuntu1904:/data/ansible_exercise#cat role_mysqld.yml
---
- hosts: websrvsremote_user: rootroles:- role: mysqldtags: ["mysql", "db"]
5. PXC 角色
- 目录
-
配置文件可在我的 github 得到
Github-ansible_exercise
-
github 中目录如下
root@ubuntu1904:/data/ansible_exercise#tree
.
├── common_scripts
│ ├── loop.sh
│ ├── show_dir.sh
│ └── systeminfo.sh
├── README.rst
├── role_httpd.yml
├── role_memcached.yml
├── role_mysqld.retry
├── role_mysqld.yml
├── role_nginx.retry
├── role_nginx.yml
├── role_pxc.yml
└── roles├── httpd│ ├── default│ │ └── main.yml│ ├── files│ │ ├── httpd.conf│ │ └── index.html│ ├── handlers│ │ └── main.yml│ ├── tasks│ │ ├── config.yml│ │ ├── index.yml│ │ ├── install.yml│ │ ├── main.yml│ │ ├── remove.yml│ │ └── service.yml│ ├── templates│ │ └── httpd.conf.j2│ └── vars├── memcached│ ├── default│ ├── handlers│ ├── tasks│ │ ├── config.yml│ │ ├── install.yml│ │ ├── main.yml│ │ └── service.yml│ ├── templates│ │ └── memcached.j2│ └── vars├── mysqld│ ├── default│ ├── files│ │ ├── my.cnf│ │ ├── mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz│ │ └── secure_mysql.sh│ ├── handlers│ │ └── main.yml│ ├── tasks│ │ ├── config.yml│ │ ├── data.yml│ │ ├── group.yml│ │ ├── install.yml│ │ ├── link.yml│ │ ├── main.yml│ │ ├── path.yml│ │ ├── remove_mysql.yml│ │ ├── secure.yml│ │ ├── service.yml│ │ ├── unarchive.yml│ │ └── user.yml│ ├── templates│ └── vars│ └── mysql_vars.yml├── nginx│ ├── default│ │ └── main.yml│ ├── files│ │ ├── index.html│ │ └── nginx.repo│ ├── handlers│ │ └── main.yml│ ├── tasks│ │ ├── config.yml│ │ ├── file.yml│ │ ├── install.yml│ │ ├── main.yml│ │ ├── repo.yml│ │ └── service.yml│ ├── templates│ │ ├── nginx7.conf.j2│ │ └── nginx8.conf.j2│ └── vars│ └── main.yml├── pxc│ ├── default│ │ └── main.yml│ ├── files│ │ ├── percona.repo│ │ └── wsrep.cnf│ ├── handlers│ │ └── main.yml│ ├── tasks│ │ ├── install_pxc.retry│ │ ├── install_pxc.yml│ │ └── main.yml│ ├── templates│ └── vars│ └── main.yml└── self_report├── self_report.j2├── self_report.retry└── self_report.yml
相关文章:
Ansible 实战
Ansible 实战 1. httpd 角色 目录 rootubuntu1904:~#tree -f httpd/ httpd ├── httpd/default │ └── httpd/default/main.yml ├── httpd/files │ ├── httpd/files/httpd.conf │ └── httpd/files/index.html ├── httpd/handlers │ └── http…...
三、单元测试
三、单元测试 好的单元测试必须遵守 AIR 原则 A:Automatic(自动化)I:Independent(独立性)R:Repeatable(可重复) 单元测试应该是全自动执行的,并且非交互式的…...
“Spring管理JavaBean的过程及Bean的生命周期“
目录 引言1.弹簧容器2. Bean的生命周期2.1 配置javaBean2.2. 解析Bean的定义2.3 检查是否需要添加自己的功能2.4 初始化2.5 实现Aware接口2.6 扩展2.7. 销毁 3. 单例模式和原型模式3.1. 单例模式3.2. 原型模式 4. 总结 引言 Spring框架是一个非常流行的Java应用程序框架&#…...
@mouseover不起作用,并没有触发
我的错误代码如下: <el-rowv-for"version in item.version_list":key"version.id":class"{ blue-background: versionItem.id version.id }"mouseover.native"version.isHovered true"mouseleave.native"version…...
Vue 2 组件注册
组件名的命名规则 定义组件名的两种方式: 短横线分隔命名,Kebab Case,例如my-component-name。单词首字母大写命名,Pascal Case,例如MyComponentName。 第一种方式在模板中使用<my-component-name>引用该元素…...
学习游戏开发引擎,打造梦想中的虚拟世界!
游戏开发引擎是游戏开发过程中的关键工具,它们提供了开发者所需的各种功能和资源,加速了游戏的制作过程。以下是一些常用的游戏开发引擎以及它们的优势: Unity(Unity3D): 优势: Unity 是目前最…...
AI搜索引擎助力科学家创新
开发者希望通过帮助科学家从大量文献中发现联系从而解放科学家,让他们专注于发现和创新。 图片来源:The Project Twins 对于专注于历史的研究者Mushtaq Bilal来说,他在未来科技中投入了大量时间。 Bilal在丹麦南部大学( Universit…...
神经网络基础-神经网络补充概念-50-学习率衰减
概念 学习率衰减(Learning Rate Decay)是一种优化算法,在训练深度学习模型时逐渐减小学习率,以便在训练的后期更加稳定地收敛到最优解。学习率衰减可以帮助在训练初期更快地靠近最优解,而在接近最优解时减小学习率可以…...
android.system.ErrnoException: open failed: EPERM (Operation not permitted)
android 10(Q)开始增加了沙盒机制,不能直接把文件保存到/sdcard目录下,只能保存到APP专属目录下;AndroidManifest.xml在标签下增加属性【android:requestLegacyExternalStorage“true”】可以暂时保存到/sdcard路径下,但是Android…...
基于 KubeSphere 的应用容器化在智能网联汽车领域的实践
公司简介 某国家级智能网联汽车研究中心成立于 2018 年,是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台,旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。 目前着力建设基于大数据与云计算的智能汽车云端运营…...
面试之ReentrantLock
一,ReentrantLock 1.ReentrantLock是什么? ReentrantLock实现了Lock接口,是一个可重入且独占式的锁,和Synchronized关键字类似,不过ReentrantLock更灵活,更强大,增加了轮询、超时、中断、公平锁…...
系统学习Linux-MongoDB
概述 mongodb是一个nosql数据库,它有高性能、无模式、文档型的特点。是nosql数据库中功能最丰富,最像关系数据库的。数据库格式为BSON 相关概念实例:系统上运行的mongodb的进程,类似于mysql实例;库:每个数…...
【带着学Pytorch】2、张量(Tensor)的介绍与创建
一、Tensor介绍 1.1、 张量是什么? 最开始在出现CPU和GPU, GPU出现主要解决的问题时并行计算,在此基础上的软件层面的工作基本上围绕着并行计算进行的,张量也不例外。 首先,我们先来聊聊 编程语言,python,java ,C,C++等,他们都有的共同特点是什么?在大学中计算机类…...
UniApp 制作高德地图插件
1、下载Uni插件项目 在Uni官网下载Uni插件项目,并参考官网插件项目创建插件项目. 开发者须知 | uni小程序SDK 如果下载下来项目运行不了可以参考下面链接进行处理 UniApp原生插件制作_wangdaoyin2010的博客-CSDN博客 2、引入高德SDK 2.1 在高德官网下载对应SD…...
C# 图像处理之灰色图转化为RGB图像
咨询通义千问的“C# 图像处理之灰色图转化为RGB图像”结果,看看如何: 在C#中,可以使用Image类来处理图像。要将灰色图像转换为RGB图像,可以按照以下步骤进行操作: 1.创建一个灰色图像对象。 Image grayImage Imag…...
从零实战SLAM-第八课(非特征点的视觉里程计)
在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…...
Azure使用CLI创建VM
使用CLI创建VM之前,确保资源中的IP资源已经释放掉了,避免创建的过程中没有可以利用的公共IP地址打开 cloudshell ,并输入创建CLI的命令如下,-n指定名称,-g指定资源组,image指定镜像,admin-usernam指定用户名…...
Rust: 聊聊AtomicPtr<()>和 *const ()
在Bytes库在github源码(https://docs.rs/bytes/1.1.0/src/bytes/bytes.rs.html#94-100)有关Bytes的定义中, pub struct Bytes {ptr: *const u8,len: usize, // inlined "trait object"data: AtomicPtr<()>, vtable: &st…...
公网远程连接Redis数据库详解
文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 前言 洁洁的个人主页 我就问你有没有发挥࿰…...
天津报web前端培训班一定要选贵的吗?
根据这几年数据显示,IT行业飞速发展,岗位需求增多,Web前端是个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过五年,Web前端开发是从网页制作演变而来,名称是有很明显的时代特性。 Web前端就业形…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
【Ftrace 专栏】Ftrace 参考博文
ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...
华硕电脑,全新的超频方式,无需进入BIOS
想要追求更佳性能释放 或探索更多可玩性的小伙伴, 可能会需要为你的电脑超频。 但我们常用的不论是BIOS里的超频, 还是Armoury Crate奥创智控中心超频, 每次调节都要重启,有点麻烦。 TurboV Core 全新的超频方案来了 4不规…...
JS设计模式(5): 发布订阅模式
解锁JavaScript发布订阅模式:让代码沟通更优雅 在JavaScript的世界里,我们常常会遇到这样的场景:多个模块之间需要相互通信,但是又不想让它们产生过于紧密的耦合。这时候,发布订阅模式就像一位优雅的信使,…...
