【运维学习】lvs + keepalived + 主从dns 项目搭建
需求
主机规划
环境搭建
配置主从dns
主dns
从dns
配置web服务
搭建lvs + keepalived
配置master
配置backup
更改dns配置
添加VIP
配置内核参数
更改web配置
添加VIP
配置内核参数
客户端测试
需求
主机规划
主机名 | IP | 角色 |
---|---|---|
lvs-master | 192.168.239.105 | 主lvs,同时做web和dns调度 |
lvs-backup | 192.168.239.106 | 副lvs,同时做web和dns调度 |
dns-master | 192.168.239.107 | VIP:192.168.239.100 主从dns服务器 |
dns-slave | 192.168.239.108 | |
web1 | 192.168.239.201 | VIP:192.168.239.200 |
web2 | 192.168.239.202 | |
web3 | 192.168.239.203 | |
client | 192.168.239.10 | 客户端 |
环境搭建
为所有主机配置IP、主机名、关闭防火墙与selinux。此处省略配置命令
配置主从dns
主dns
安装bind软件
[root@dns-master ~]# dnf install -y bind
配置主配置文件
[root@dns-master ~]# cat /etc/named.conf
options {listen-on port 53 { 192.168.239.100;192.168.239.107; };directory "/var/named";
};
zone "yili.com" IN {type master;file "named.yili";allow-transfer { 192.168.239.108; };
};
zone "239.168.192.in-addr.arpa" IN {type master;file "named.yilifan";allow-transfer { 192.168.239.108; };
};
配置区域文件
正向解析
[root@dns-master ~]# cat /var/named/named.yili
$TTL 1D
@ IN SOA @ admin.yili.com. ( 0 1 1 1 1 )IN NS ns1.yili.com.IN NS ns2.yili.com.
ns1 IN A 192.168.239.107
ns2 IN A 192.168.239.108
www IN A 192.168.239.200
txt IN TXT "AaBbCcDdEeFf"
反向解析
[root@dns-master ~]# cat /var/named/named.yilifan
$TTL 1D
@ IN SOA @ admin.yili.com. ( 0 1 1 1 1 )IN NS ns1.yili.com.IN NS ns2.yili.com.
ns1 IN A 192.168.239.107
ns2 IN A 192.168.239.108
200 IN PTR www.yili.com.
txt IN TXT "AaBbCcDdEeFf"
dig测试
[root@dns-master ~]# dig -t NS yili.com @192.168.239.107; <<>> DiG 9.16.23-RH <<>> -t NS yili.com @192.168.239.107
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31688
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 63188e14befb57a0010000006800c0330548ef93da209357 (good)
;; QUESTION SECTION:
;yili.com. IN NS;; ANSWER SECTION:
yili.com. 86400 IN NS ns1.yili.com.
yili.com. 86400 IN NS ns2.yili.com.;; ADDITIONAL SECTION:
ns1.yili.com. 86400 IN A 192.168.239.107
ns2.yili.com. 86400 IN A 192.168.239.108;; Query time: 0 msec
;; SERVER: 192.168.239.107#53(192.168.239.107)
;; WHEN: Thu Apr 17 16:47:47 CST 2025
;; MSG SIZE rcvd: 133
从dns
安装bind软件
[root@dns-slave ~]# dnf install -y bind
配置主配置文件
[root@dns-slave ~]# cat /etc/named.conf
options {listen-on port 53 { 192.168.239.108;192.168.239.100; };directory "/var/named";
};
zone "yili.com" IN {type slave;masters { 192.168.239.107; };file "slaves/named.yili";
};
zone "239.168.192.in-addr.arpa" IN {type slave;masters { 192.168.239.107; };file "slaves/named.yilifan";
};
dig测试
[root@dns-slave ~]# dig -t NS yili.com @192.168.239.108; <<>> DiG 9.16.23-RH <<>> -t NS yili.com @192.168.239.108
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57027
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a41f8061a58c1cc1010000006800c170045a7201efa1982f (good)
;; QUESTION SECTION:
;yili.com. IN NS;; ANSWER SECTION:
yili.com. 86400 IN NS ns1.yili.com.
yili.com. 86400 IN NS ns2.yili.com.;; ADDITIONAL SECTION:
ns1.yili.com. 86400 IN A 192.168.239.107
ns2.yili.com. 86400 IN A 192.168.239.108;; Query time: 1 msec
;; SERVER: 192.168.239.108#53(192.168.239.108)
;; WHEN: Thu Apr 17 16:53:04 CST 2025
;; MSG SIZE rcvd: 133
配置web服务
web1
安装nginx软件
[root@web1 ~]# dnf install -y nginx
更改index.html页面内容
[root@web1 ~]# echo $(hostname;hostname -I) > /usr/share/nginx/html/index.html
启动服务并测试
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# curl localhost
web1 192.168.239.201
web2
安装nginx软件
[root@web2 ~]# dnf install -y nginx
更改index.html页面内容
[root@web2 ~]# echo $(hostname;hostname -I) > /usr/share/nginx/html/index.html
启动服务并测试
[root@web2 ~]# systemctl start nginx
[root@web2 ~]# curl localhost
web2 192.168.239.202
web3
安装nginx软件
[root@web3 ~]# dnf install -y nginx
更改index.html页面内容
[root@web3 ~]# echo $(hostname;hostname -I) > /usr/share/nginx/html/index.html
启动服务并测试
[root@web3 ~]# systemctl start nginx
[root@web3 ~]# curl localhost
web3 192.168.239.203
搭建lvs + keepalived
本次项目lvs使用DR模式
配置master
安装ipvsadm、keepalived
[root@lvs-master ~]# dnf install -y ipvsadm keepalived
更改keepalived配置文件
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_web {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.239.200}
}virtual_server 192.168.239.200 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.239.201 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.239.202 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.239.203 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
vrrp_instance VI_dns {state BACKUPinterface ens160virtual_router_id 52priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.239.100}
}
virtual_server 192.168.239.100 53 {delay_loop 6lb_algo rrlb_kind DRprotocol UDPreal_server 192.168.239.107 53 {wight 1MISC_CHECK {connect_timeout 3misc_path "/etc/keepalived/checkdns.sh -h 192.168.239.107 txt.yili.com"}}real_server 192.168.239.108 53 {wight 1MISC_CHECK {connect_timeout 3misc_path "/etc/keepalived/checkdns.sh -h 192.168.239.108 txt.yili.com"}}
}
启动并测试
[root@lvs-master ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs-master ~]# systemctl start keepalived.service ipvsadm.service[root@lvs-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.239.200:80 wrr-> 192.168.239.201:80 Route 1 0 0 -> 192.168.239.202:80 Route 2 0 0 -> 192.168.239.203:80 Route 3 0 0
UDP 192.168.239.100:53 rr-> 192.168.239.107:53 Route 1 0 0 -> 192.168.239.108:53 Route 1 0 0
配置backup
安装ipvsadm、keepalived
[root@lvs-backup ~]# dnf install -y ipvsadm keepalived
更改keepalived配置文件
[root@lvs-backup ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_web {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.239.200}
}
virtual_server 192.168.239.200 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.239.201 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.239.202 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.239.203 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
vrrp_instance VI_dns {state MASTERinterface ens160virtual_router_id 52priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.239.100}
}
virtual_server 192.168.239.200 80 {delay_loop 6lb_algo rrlb_kind DRprotocol TCPreal_server 192.168.239.201 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.239.202 80 {weight 2TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
virtual_server 192.168.239.100 53 {delay_loop 6lb_algo rrlb_kind DRprotocol UDPreal_server 192.168.239.107 53 {wight 1MISC_CHECK {connect_timeout 3misc_path "/etc/keepalived/checkdns.sh -h 192.168.239.107 txt.yili.com"}}real_server 192.168.239.108 53 {wight 1MISC_CHECK {connect_timeout 3misc_path "/etc/keepalived/checkdns.sh -h 192.168.239.108 txt.yili.com"}}
}
启动并测试
[root@lvs-backup ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@lvs-backup ~]# systemctl start keepalived.service ipvsadm.service[root@lvs-backup ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.239.200:80 wrr-> 192.168.239.201:80 Route 3 0 0 -> 192.168.239.202:80 Route 2 0 0 -> 192.168.239.203:80 Route 1 0 0
UDP 192.168.239.100:53 rr-> 192.168.239.107:53 Route 1 0 0 -> 192.168.239.108:53 Route 1 0 1
更改dns配置
添加VIP
[root@dns-master ~]# ip addr add 192.168.239.100 dev lo
[root@dns-master ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.239.100/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
配置内核参数
[root@dns-master ~]# vim /etc/sysctl.conf
[root@dns-master ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
更改web配置
添加VIP
[root@web1 ~]# ip addr add 192.168.239.200 dev lo
[root@web1 ~]# ip addr show lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.239.200/32 scope global lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
配置内核参数
[root@web1 ~]# vim /etc/sysctl.conf
[root@web1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.ip_forward = 0
客户端测试
修改dns地址
[root@client ~]# nmcli connection modify ens160 ipv4.dns 192.168.239.100
[root@client ~]# nmcli connection up ens160
测试与dns服务器的连通性
[root@client ~]# ping 192.168.239.100
PING 192.168.239.100 (192.168.239.100) 56(84) bytes of data.
64 bytes from 192.168.239.100: icmp_seq=1 ttl=64 time=0.321 ms
64 bytes from 192.168.239.100: icmp_seq=2 ttl=64 time=0.362 ms
^C
--- 192.168.239.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1059ms
rtt min/avg/max/mdev = 0.321/0.341/0.362/0.020 ms
测试dns解析
[root@client ~]# ping ns1.yili.com
PING ns1.yili.com (192.168.239.107) 56(84) bytes of data.
64 bytes from 192.168.239.107 (192.168.239.107): icmp_seq=1 ttl=64 time=0.422 ms
64 bytes from 192.168.239.107 (192.168.239.107): icmp_seq=2 ttl=64 time=0.332 ms
^C
--- ns1.yili.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.332/0.377/0.422/0.045 ms
测试web lvs负载均衡
测试keepalived高可用
在lvs-master上关闭keepalived服务后发现,200的VIP漂移到了backup上
重新启动后,200VIP重新漂移到master上
相关文章:
【运维学习】lvs + keepalived + 主从dns 项目搭建
需求 主机规划 环境搭建 配置主从dns 主dns 从dns 配置web服务 搭建lvs keepalived 配置master 配置backup 更改dns配置 添加VIP 配置内核参数 更改web配置 添加VIP 配置内核参数 客户端测试 需求 主机规划 主机名IP角色lvs-master192.168.239.105主lvs&#x…...
ESP32-idf学习(二)esp32C3作服务端与电脑蓝牙数据交互
一、当前需求 目前是想利用蓝牙来传输命令,或者一些数据,包括电脑、手机与板子的数据传输,板子与板子之间的数据传输。构思是一个板子是数据接收终端,在电脑或手机下发指令后,再给其他板子相应指令,也需要…...
考道路运输安全员证应具备哪些经验?
考道路运输安全员证,通常没有明确的工作经验年限要求,但具备以下相关经验会对考试有很大帮助: 驾驶经验:报考要求取得相应的机动车驾驶证 1 年以上。有实际驾驶经验,能更好地理解驾驶员的操作规范、疲劳驾驶等问题&…...
ubtuntu安装docker拉取iwebsec镜像
docker安装: --可以在这之前换源(非必要)没有权限直接加sudo sudo apt-get update sudo apt-get upgrade 安装依赖: sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-re…...
Using the CubeMX code (一)(GPIO,PWM ,Cube AI,手写数字识别 MNIST,Demo)
该例程对使用CubeMX初始化GPIO做了示范,GPIO使用HAL库进行GPIO编程分为以下几个步骤: 一、例程简述 1. 包含必要的头文件和HAL库的相关头文件 CubeMX初始化会自动包含,对手敲HAL感兴趣的同学可以熟悉下生成的代码框架学习哦~ 2. 初始化GP…...
【第46节】windows程序的其他反调试手段中篇
目录 引言 一、利用SetUnhandledExceptionFilter/Debugger Interrupts 二、Trap Flag 单步标志异常 三、利用SeDebugPrivilege 进程权限 四、利用DebugObject:NtQueryObject() 五、OllyDbg:Guard 六、Software Breakpoint Detection 引言 在程序反调试领域,存…...
【APM】How to enable Trace to Logs on Grafana?
系列文章目录 【APM】Observability Solution 【APM】Build an environment for Traces, Metrics and Logs of App by OpenTelemetry 【APM】NET Traces, Metrics and Logs to OLTP 【APM】How to enable Trace to Logs on Grafana? 前言 本文将介绍如何在Grafana上启用 …...
第十节:性能优化-如何排查组件不必要的重复渲染?
工具:React DevTools Profiler 方法:memo、shouldComponentUpdate深度对比 React 组件性能优化:排查与解决重复渲染问题指南 一、定位性能问题:React DevTools 高级用法 使用 React Developer Tools Profiler 精准定位问题组件&…...
Spring Boot 项目中发布流式接口支持实时数据向客户端推送
1、pom依赖添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、事例代码 package com.pojo.prj.controller;import com.pojo.common.core.utils.String…...
SpringBoot整合Thymeleaf变量渲染全解析:从基础到高阶实践
Thymeleaf作为SpringBoot官方推荐的模板引擎,其核心价值在于将动态数据无缝注入静态HTML模板。本文将从基础语法到复杂场景,深入剖析Thymeleaf对各种类型变量的渲染机制。 一、环境搭建与基础配置 依赖注入 在pom.xml中引入核心依赖:<dependency><groupId>org.s…...
【verilog】Verilog 工程规范编码模板
这一套【Verilog 工程规范编码模板】,适合写清晰、可维护、可综合的 RTL 代码,适用于 FPGA/ASIC 开发: 📘 Verilog 工程级编码规范模板 1️⃣ 模块结构规范 module my_module #(parameter WIDTH 8 // 模块参数 )(input wire c…...
satoken的奇奇怪怪的错误
发了 /user/getBrowseDetail和/user/getResponDetail,但为什么进入handle里面有三次?且第一次的handle类型是AbstractHandleMapping$PreFlightHttpRequestHandlerxxx,这一次进来的时候flag为false,StpUtils.checkLogin抛出了异常 第二次进来的…...
使用prometheus-operator部署prometheus服务,并对外提供访问
先决条件: 已经部署好k8s #这里我使用的版本是1.28.12 [rootprometheus-operator /zpf/prometheus/kube-prometheus/manifests]$kubectl version Client Version: v1.28.12 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 Server Version: v1.28.12安装git服务 #安…...
FPGA阵列
FPGA(现场可编程门阵列)阵列是由多个 FPGA 芯片组成的集合,通过特定的架构和互联方式协同工作,以实现强大的计算和处理能力。以下是关于 FPGA 阵列的详细介绍: 基本原理 FPGA 是一种可重构的集成电路,内部…...
Oracle补丁安装工具opatch更新报错处理
今日,在进行Oracle补丁升级更新opatch工具包后,执行opatch命令出现了如下报错: [oracles203116 ~]$ opatch version /u01/product/oracle/12.1.0/db_1/OPatch/opatch: line 839: [: too many arguments /u01/product/oracle/12.1.0/db_1/O…...
前端笔记-html+css测试2
HTML & CSS 能力测试卷 选择题(每题2分,共20分) 下列哪个HTML5标签用于定义文档的导航链接? A) <nav> B) <navigate> C) <navbar> D) <navigation> CSS中哪个属性用于设置元素的透明度?…...
Visual Studio C++ 常用配置变量表
前言 visual studio中常用配置变量表 帮助你快速查阅,复制粘贴嘎嘎方便! 附上美图!! 一、解决方案 & 项目路径 变量含义示例(典型用法)$(SolutionDir)解决方案文件所在目录(末尾带\)$(S…...
论文阅读VACE: All-in-One Video Creation and Editing
code:https://github.com/ali-vilab/VACE 核心 单个模型同时处理多种视频生成和视频编辑任务通过VCU(视频条件单元)进行实现 方法 视频任务 所有的视频相关任务可以分为4类 文本生视频 参考图片生视频 视频生视频 视频mask生视频 VCU …...
【Python Cookbook】迭代器与生成器(一)
迭代器与生成器(一) 1.手动遍历迭代器2.代理迭代3.使用生成器创建新的迭代模式4.实现迭代器协议 1.手动遍历迭代器 你想遍历一个可迭代对象中的所有元素,但是却不想使用 for 循环。 为了手动的遍历可迭代对象,使用 next() 函数并…...
Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑
视频讲解:Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑_哔哩哔哩_bilibili Qwen2.5-VL视觉大语言模型复现过程,没碰到什么坑 今天复现下Qwen2.5-VL玩玩 https://github.com/QwenLM/Qwen2.5-VL 创建conda环境,实测22.04&#x…...
LVGL填充函数
lvgl填充函数的位置: static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) {LCD_Color_Fill(area->x1,area->y1,area->x2,area->y2,(u16*)color_p);lv_disp_flush_ready(disp_drv); }填充函数的具体内容…...
关于 传感器 的详细解析,涵盖定义、分类、工作原理、常见类型、应用领域、技术挑战及未来趋势,结合实例帮助理解其核心概念
以下是关于 传感器 的详细解析,涵盖定义、分类、工作原理、常见类型、应用领域、技术挑战及未来趋势,结合实例帮助理解其核心概念: 一、传感器的定义与核心功能 1. 定义 传感器(Sensor)是一种能够将物理量ÿ…...
回归,git 分支开发操作命令
核心分支说明 主分支(master/production)存放随时可部署到生产环境的稳定代码,仅接受通过测试的合并请求。 开发分支(develop)集成所有功能开发的稳定版本,日常开发的基础分支,从该分支创建特性…...
指形铣刀的结构
指形铣刀,作为机械加工领域中一种至关重要的切削工具,其主要结构类型多样且各具特色,深入学习这些类型对于提升加工效率与精度至关重要。 首先,我们来看看最基本的直柄指形铣刀。这种铣刀的设计简洁明了,其柄部为直线…...
【verilog】always @(*) 是Verilog 中写组合逻辑
always (*) 是 Verilog 中写组合逻辑(combinational logic) 的标准写法,下面讲解含义、作用、以及为什么这么写。 🌟 什么是 always (*)? always (*) begin// 组合逻辑 end它的意思是: “只要块中用到的任…...
【IC】STA计算
这张图很好,把STA的方法展示的很清楚! 时序分析在每个设计阶段都是必不可少的,以便在现代 IC 设计中实现时序收敛。除了准确性之外,全芯片分析的效率和可扩展性也尤为重要。因此,门级静态时序分析 (STA&am…...
Linux 常用命令总结
Linux 常用命令总结(全面版) Linux 命令行是系统管理和开发的核心工具,掌握常用命令可以极大提升效率。本文全面总结 Linux 常用命令,涵盖文件操作、进程管理、网络管理、系统监控、用户管理、软件安装等多个方面,适合…...
Muduo网络库实现 [十四] - HttpResponse模块
目录 设计思路 类的设计 模块的实现 公有接口 疑问点 设计思路 这个模块和HttpRequest一样,主要就是存储http响应的要素,但是其实真正需要设置存储的要素会比http请求少,首先,要存储http的版本号,我们最终使用的是…...
2025年CNG 汽车加气站操作工考试真题练习
CNG 汽车加气站操作工考试真题练习: 一、单选题 1、CNG 加气站的核心设备是( )。 A. 压缩机 B. 储气瓶组 C. 加气机 D. 脱水装置 答案:A 解析:压缩机是 CNG 加气站的核心设备,其作用是将天然气压缩…...
B端网站建设,怎样平衡功能与美观,满足企业多元需求?
在当今数字化时代,B端网站不仅是企业展示自身形象和产品的重要窗口,更是实现业务转化和客户关系维护的关键平台。然而,B端网站建设面临着功能需求复杂与美观设计之间的平衡问题。如何在满足企业多元需求的同时,打造一个既实用又美…...
PTA:模拟EXCEL排序
Excel可以对一组纪录按任意指定列排序。现请编写程序实现类似功能。 输入格式: 输入的第一行包含两个正整数 n (≤105) 和 c,其中 n 是纪录的条数,c 是指定排序的列号。之后有 n 行,每行包含一条学生纪录。每条学生纪录由学号(6…...
Edge浏览器安卓版流畅度与广告拦截功能评测【不卡还净】
安卓设备上使用浏览器的体验,很大程度取决于两个方面。一个是滑动和页面切换时的反应速度,另一个是广告干扰的多少。Edge浏览器的安卓版本在这两方面的表现比较稳定,适合日常使用和内容浏览。 先看流畅度。Edge在中端和高端机型上启动速度快&…...
Qt 核心库总结
Qt 核心库(QtCore) QtCore 是 Qt 框架的基础模块,提供非图形界面的核心功能,是所有 Qt 应用程序的基石。它包含事件循环、信号与槽、线程管理、文件操作、字符串处理等功能,适用于 GUI 和非 GUI 应用程序。本文将从入…...
四大wordpress模板站
WP汉主题 WP汉主题是一个专注于提供高质量WordPress中文主题的平台。它为中文用户提供了丰富的WordPress主题选择,包括但不限于企业网站模板、外贸建站模板等。WP汉主题致力于帮助用户轻松搭建专业的中文网站,无论是企业官网还是个人博客,都…...
Linux之 grep、find、ls、wc 命令
Linux之 grep、find、ls、wc 命令 “ 在 Linux 世界中,命令行是不可或缺的一部分,而掌握一些常用的命令可以帮助你更有效率地管理文件和系统。本文将为你介绍四個基礎而强大的 Linux 命令:grep、find、ls 和 wc,带你开启高效文件…...
SFC的含义
SFC 即 Single File Component,也就是单文件组件,在现代前端开发尤其是 Vue.js 框架中被广泛应用。下面将从概念、结构、优势、工作原理和应用场景几个方面详细介绍 SFC。 概念 单文件组件是一种将一个组件的模板(HTML)、逻辑&a…...
Qt 性能优化总结
Qt 性能优化总结 本文简单解析 Qt 应用程序的性能优化策略,涵盖 GUI 渲染、内存管理、信号与槽、QML 性能等核心领域,并通过具体示例展示优化效果。 1. Qt 性能优化简介 性能优化目标是减少资源消耗(如 CPU、内存、GPU)、提高响…...
亚马逊关键字搜索数据通过 Product Advertising API 来获取
亚马逊关键字搜索数据主要通过 Product Advertising API 来获取。 以下是使用该接口进行关键字搜索的一般步骤: (测试示例) 注册开发者账号:访问亚马逊开发者中心,完成三方供应商注册并同意相关开发者协议࿰…...
现代C++的范式演进与工程实践深度解析(本文序号不知道怎么整的,有点问题)
引言:C++的复兴时代 在经历了"已死语言"的质疑后,现代C++正迎来前所未有的复兴。据2024年TIOBE指数显示,C++以8.33%的占比稳居第三,较2020年上升2.1个百分点。这种复兴并非偶然——随着C++20标准的全面落地和C++23特性的逐步实现,这门已有40年历史的语言正在系…...
第二十五天 - Web安全防护 - WAF原理与实现 - 练习:请求过滤中间件
一、Celery核心机制解析 1.1 分布式架构四要素 # celery_config.py BROKER_URL redis://:passwordlocalhost:6379/0 # 消息中间件 RESULT_BACKEND redis://:passwordlocalhost:6379/1 # 结果存储 TASK_SERIALIZER json ACCEPT_CONTENT [json] TIMEZONE Asia/Shanghai核…...
springboot自定义starter(避坑教学)
在实际开发中,经常会定义一些公共组件,提供给各个项目团队使用。而在springboot的项目中,一般会将这些公共组件封装为springboot的starter。 1.命名规范 Spring官方Starter通常命名为 spring-boot-starter-{name} 如:spr…...
Python 实现日志备份守护进程
实训背景 假设你是一名运维工程师,需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求: 后台运行:脱离终端,长期监控指定目录(如 /var/log/app/)中的日志文件。自动备份…...
详解JVM的底层原理
目录 1.JVM的内存区域划分 1)程序计数器(Program Counter Register) 2)元数据区(Metaspace) 3)虚拟机栈(Java Virtual Machine Stacks) 4)堆(…...
制表符是什么?与.txt文件的关系?
李升伟 整理 制表符(Tab)是一种控制字符(ASCII码为9,Unicode为\u0009),用于在文本中创建水平间距。它的作用类似于键盘上的 Tab 键,通常表现为光标跳转到下一个预设的“制表位”(一…...
【专题刷题】双指针(三):两数之和,三数之和,四数之和
📝前言说明: 本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,按专题划分每题主要记录:(1)本人解法 本人屎山代码;(2)优质解法 优质代码;ÿ…...
Java八种常见的设计模式
一、单例模式 单例模式是(Singleton Pattern)Java中最常用的设计模式之一,它保证一个类仅有一个实例,并提供一个全局访问点。 实现单例模式的核心是将类的构造方法私有化,以防止外部直接通过构造函数创建实例。同时&am…...
用Prompt 技术【提示词】打造自己的大语言智能体
机器如何按照人类的指令执行任务的探索 机器需具备理解任务叙述的能力,以便能够按照人类的指令执行任务,为机器提供一些范例作为参考,使其能够理解该执行的任务类型。这样的学习方式称为“Instruction learning”,透过精心设计的…...
灵鉴 AI五大核心能力洞穿 “数据黑箱”云取证深度支持8大核心应用
本文关键词:灵鉴AI 、电子数据取证分析AI助手、云取证、DeepSeek大模型 1.灵鉴AI ,V1.0深度融合DeepSeek大模型技术,破解行业痛点,5大核心能力,让大模型真正“懂”电子数据分析。 2.LX-A216云取证系统,V2.…...
了解高速设计的信号完整性仿真
高速设计需要精确的信号传输,以确保最佳性能。信号完整性差会导致关键应用中的误码、数据损坏甚至系统故障等问题。介电常数、损耗角正切和插入损耗等因素会显著影响信号质量。通过使用信号完整性仿真,您可以及早发现并解决这些挑战。这种主动方法有助于…...
用 Deepseek 写的html油耗计算器
在油价高企的今天,了解自己爱车的真实油耗情况对每位车主来说都至关重要。本文将介绍一个简单实用的油耗计算方法,并提供一个可以直接使用的HTML油耗计算器。 为什么要计算油耗? 计算油耗不仅能帮助我们: 了解车辆的真实燃油经济…...