Linxu系统服务管理,systemd知识/进程优先级/平均负载/php进程CPU100%怎么解决系列知识!

news2024/10/5 13:36:17

shell脚本(命令)放后台
sleep 300& 放到后台运行,脚本或命令要全路径

nohup:用户推出系统进程继续工作

【功能说明】
nohup 命令可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端
如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件中

企业应用:

nohup 路径/shell脚本 &

方法:screen
总结:让程序进入后台运行方法
1.ctrl+z,jobs,fg,bg前台的程序,进入后台,后台运行 ##临时用

2.使用screen (推荐) ##管理员常用,下班了想回家,xshell有没有执行完的任务。

3.使用&符号 ##后台运行脚本常用

screen命令

作用:保持操作过的窗口连接状态。

[root@calms ~]# yum install screen -y

2.开启一个screen窗口,指定名称

[root@calms ~]# screen -S sleep

3.在screen窗口中执行任务即可

while true;do echo wulin>>/tmp/wulin.log;sleep 1;done
#每隔一秒向/tmp/wulin.log追加wulin

4.平滑的退出screen,但不会终止screen中的任务。

ctrl+a+d
注意: 如果使用exit 才算真的关闭screen窗口

5.关闭xshell模拟下班回家,

第二天重开xshell连接。
查看当前正在运行的screen有哪些

[root@wulin ~]# screen -list

There is a screen on:
2259.sleep    (Attached)
1 Socket in /var/run/screen/S-root.

6.此时需要进入昨晚的会话,进入正在运行的screen

[root@calms ~]# screen -r sleep
在这里插入图片描述

[root@calms ~]# screen -r 2259

常用screen参数 screen -S yourname #新建一个叫yourname的session screen -ls
#列出当前所有的session screen -r yourname #回到yourname这个session screen -d yourname #远程detach某个session screen -d -r yourname
#结束当前session并回到yourname这个session

重点总结:
#1.创建screen 创建

screen 或 screnn -S 窗口名称

#2.退出窗口

ctrl+a+d

#3.显示当前所有screen窗口

screen -ls

#4.恢复,重新进入

screnn -r id

什么是进程优先级?

进程执行时候是排队执行的,需要插队,要调整。
进程重要性高,需要优先多分配CPU。调整优先级。

#记住用途
nice: 调整【程序运行时】的优先级 renice:调整【运行中的进程】的优先级

区别:
nice命令常用于修改未运行的程序再运行时的优先级,
但是对于正在运行的进程,若想要修改优先级,就需要用到renice命令。

strace:跟踪进程的系统调用

系统调用:系统为应用程序提供的连接接口
进程执行:调用很多接口。。

为什么要跟踪进程的系统调用?

查找进程执行异常的原因:

PHP进程,JAVA进程,cpu%100,怎么排查?

进程执行:调用很多接口,接口如果异常,进程就会不正常

strace是Linux环境下的一款程序调试工具,用来检查一个应用程序所使用的系统调用及它所接收的系统信息。strace会追踪程序运行时的整个生命周期,
输出每一个系统调用的名字、参数、返回值和执行消耗的时间等, 是高级运维和开发人员的排查问题的杀手锏。

-p pid 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可※
-f 跟踪目标进程,以及目标进程创建的所有子进程※
-tt 在输出中的每一行前加上时间信息,精确到微秒。例子:11:18:59.759546※

只跟踪和文件操作有关的系统调用。
命令结果输出太多了,很容易看花眼,因此可以使用过滤器,过滤掉无关信息,比如只查看文件操作信息。
[root@LNMP ~]# strace -tt -f -e trace=file /application/nginx/sbin/nginx
#<==-e trace=file的作用为只跟踪和文件操作有关的系统调用。

[root@calms ~]# strace -tt -p 80008

跟踪系统调用统计。
strace不仅能追踪系统调用,使用选项-c还能将进程所有的系统调用做一个统计分析。
[root@LNMP ~]# strace -c /application/nginx/sbin/nginx
#<==使用-c参数给进程所有的系统调用做一个统计分析。
在这里插入图片描述

使用-o选项将strace的结果输出到文件中
strace -c -o tongji.log /application/nginx/sbin/nginx

小结:strace命令很适合程序僵尸、命令执行报错等的问题,如果从程序日志和系统日志中看不出问题出现的原因,
就可以strace一下,也许有答案,不过也需要使用者有足够的耐心去查看输出!

给/etc/passwd加锁,然后用strace追踪。
[root@calms ~]# chattr +i /etc/passwd
[root@calms ~]# strace -f useradd abc
发现问题:无法打开/etc/passwd
open(“/etc/passwd”, O_RDWR|O_NOCTTY|O_NONBLOCK|O_NOFOLLOW) = -1 EACCES (Permission denied)
write(2, “useradd: cannot open /etc/passwd”…, 33useradd: cannot open /etc/passwd

企业案例:PHP进程CPU百分百了怎么解决?

1)pgrep 进程,获取进程号
2)strace -p 进程号 发现问题。

用户案例: 公司服务器CPU占用过高,报警了,第一反应是登录服务器, top 命令查看当前进程,输入 P 按cpu排序 :
在这里插入图片描述
看到有多个php-fmp进程占用cpu过高,都达到100%了于是打算监听一下进程,看看在执行什么操作,使用 strace 命令:
#监听进程
strace -o /tmp/output.txt -T -tt -F -e trace=all -p 7757
#查看log
tail -f /tmp/output.txt
结果没有看出来,cpu占用率太高了通过php慢日志开启条件,需要php-fpm.conf配置:

request_slowlog_timeout = 3 #脚本超时秒数 slowlog =
/var/log/php.log.slow #记录慢日志路径
tail -n 1000 /var/log/php.log.slow
在这里插入图片描述
然后进行优化代码

strace关键词。
在这里插入图片描述
在这里插入图片描述

企业生产经验:

资源不够用:网站运行慢。
1.没有给充足资源。
上线前压测,提前测出来承受能力。
提前预警。70% 预警时间是(资源增加的最长周期+当下百分比<80%)。

2.开发代码上线,BUG异常消耗资源,导致100%
strace,gdb.后知后觉。

3.公司推广部门(合作广告),大流量过来,广告页(CDN),(提前准备)。
运维感受到的:服务器流量增加,压力增大,CPU ,内存,磁盘都压力很大了。

所有和网站相关的部门,开发,运维、运营、市场,客服(查询 离线查询,和生产用户访问库,分开)
对于外部用户,检测,根据趋势预判。

ltrace:跟踪进程调用函数
ltrace:能够跟踪进程的库函数调用,它会显示出那个库函数调用,而strace则是跟踪进程的每一个系统调用
[root@calms ~]# ltrace /application/nginx/sbin/nginx

在这里插入图片描述
-e expr输出过滤器,通过表达式,可以过滤掉你不想要的输出
-e printf 表示之查看print函数的调用,而strace则是跟踪进程的每个系统调用
-e !printf表示查看除了printf 函数以外的所有函数调用
-f 跟踪子进程
-o filename将ltrace输出写入文件filename
-p pid指定跟踪的进程pid

[root@calms ~]# ltrace - o nginx.log /application/nginx/sbin/nginx

进程管理总结:

  1. 找出问题的进程
    top ps
  2. 调整优先级
    nice renice
  3. 进程在干什么(nginx,php,mysql)
    strace lstrace gdb
  4. 杀进程
    kill killall pkill
  5. 继承前后台切换
    ctrl+z bg fg jobs kill %1
    &后台运行
    nohup 配合&,让程序放到后台运行,并且打印输出到日志里
    screen 保持操作的对话,其不中断(运维人员客户端xshell用)

平均负载(load average)

在这里插入图片描述
查看负载命令:
top,w,uptime
平时只看负载就使用uptime

也可以查看对应的文件:
在这里插入图片描述

什么是平均负载?

衡量系统繁忙的一个综合性指标,主要是cpu/io的繁忙程度;在工作中非常常用。

工作中非常的常用,具体是哪一个指标繁忙
ps,top,sar看cpu
iostat,iotop看磁盘

一个进程的产生会占用很多的资源:
1.PID 2.内存 3.文件描述符 4. cpu 5.磁盘

平均负载是指单位时间内,系统处于可运行状态的平均进程数,也就是平均活跃进程数;(在特定的时间间隔内cpu运行队列中的平均进程数)

举例子
车:进程 桥:cpu队列
系统负载为0的时候(意味着一辆车没有)
0.5的时候(意味着大桥一半的路段有车)
1.0的时候(大桥的所有路段都有车,虽然桥上车辆是满的,但是此时的大桥还能进行顺畅流通)
1.7(车辆太多,大桥已经被占满了,后面等着上桥的车辆为前面车辆的70%)
2.0(桥上的车辆与桥面一样多)
3.0(等待桥上的车辆时桥面的2倍)

大桥的同行能力就是cpu的最大工作量,一个桥为1个cpu队列,2个桥为2个cpu队列

平均负载数字和cpu核数想等的时候就是cpu处理进程的临界点
2棵,每一颗4核,8核负载为8的时候,临界点为8*70%=5.6(5-8)慢的临界点

可运行状态进程:正在使用cpu或正在等待cpu处理的进程,ps命令看到处于R状态对的进程

不可中断进程:系统最常见的硬件设备的I/o相应

ps命令看到的d状态进程

最终解释(单位时间内的活跃进程数)

2颗,单颗四核cpu为例
1分钟:0.0.7 cpu处理进程1分钟的繁忙程度,忙碌1分钟
5分钟:8.0.1 cpu处理进程5分钟的繁忙程度,忙碌了5分钟
15分钟:5.05 cpu处理进程15分钟的繁忙程度,忙碌了连续15分钟,15分钟内平均为5个点

总结:
负载数值/总的核心数=1 开始慢的临界点,实际上1✖70%=关注的临界点;大于1就说明有问题。

需要关注负载的值:总的核数乘以70%(关注的点)

如何查cpu核心数?
查看物理cpu个数:
grep “physical id” /proc/cpuinfo|wc -l
grep -c "physical id " /proc/cpuinfo
查看每个物理cpu的core的个数(核数)
gfrep “cpu cores” /proc/cpuinfo|wc -l

查看逻辑cpu的个数(用以计算负载)
grep “processor” /proc/cpuinfo|wc -l

平均负载案例分析实战

用stress,mpstat,pidstat等工具,找出平均负载升高的根源

stress是Linux系统压力测试和工具,这里我们用作异常进程模拟平均负载升高的场景
mpstat是多核心cpu性能分析工具,用来临时查看每一个cpu的性能指标,以及所有的cpu平均指标
pidstat是一个常用的进程性能分析工具,用来实时查看进程的cpu,内存,I/O及上下文切换等性能指标

yum install stress -y
yum install sysstat -y
在这里插入图片描述
平均负载与cpu
:平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,并不能直接发现,到底是哪里出现了瓶颈。
平均负载阿公有可能是cpu密集型进程导致的;平均负载高并不一定代表cpu使用率高,还可能是I/O更加繁忙了;当发现负载高的时候,可以使用mpstat,pidstat工具,辅助分析负载来源

1.平均负载是运行队列中活跃的进程数
2.平均负载;1,5,15分钟内的负载
3.需要关注负载的值:总的核心数*70%关注的点
4.辅助opt,ps,uptime,sar,mpstat,pidstat,iostat,排查问题
5.starce跟踪进程系统调用

面试官会问:
你在工作中遇到过那些生产故障,是怎么解决的?
最好与数据库相关(负载高),web相关(php进程100%,java内存泄漏)

Linux系统服务管理

什么是运行级别?
就是Linux启动时处于不同的状态标识的集合
(文本模式,图形模式,重启模式,关机模式都会对应不同的运行级别)

面试可能会到:
在这里插入图片描述
查看运行级别:
在这里插入图片描述

ls -l /usr/lib/systemd/system/runlevel[0-9].target

如何切换运行级别?
C6:init
在这里插入图片描述
startx 切换到桌面

c7:
启动时加载的文件
systemctl get-default
在这里插入图片描述
设置默认运行级别方式:
systemctl set-default TARGET.target

cnetos7之前是/etc/inittab里面设置的
id:3:initdefault系统启动时,将linux设定固定的运行级别的配置行(面试可能会问到)

Linux系统systemd知识

系统管理守护进程,工具和库的进程,早期是init进程。
功能:用于集中管理守护进程,工具和库的集合
systemd是centos7系统启动的第一个进程,其他所有的进程是它的子进程
在这里插入图片描述
为什么要用systemd?
init启动方式缺点:

  1. 启动时间长,串行执行,启动完成后再启动另外的
  2. 启动脚本复杂,依赖关系很杂,靠脚本自己处理
  3. 相关的管理命令很多很杂

centos5-centos7启动过程
在这里插入图片描述
systemd相关路径文件
在这里插入图片描述
查看不同文件运行级别的文件路径:
在这里插入图片描述
systemctl管理服务相关命令
systemctl start crond(定时任务)
在这里插入图片描述
使用systemctl启动一个守护进程之后,可以通过systemctl status查看守护进程状态
在这里插入图片描述
systemctl设置服务开机启动,不启动,查看各个级别下服务启动状态常用命令
在这里插入图片描述
systemctl enable crond.service 原理就是创建一个软链接
systemctl enable crond.service 移除一个软链接

启动图解:

在这里插入图片描述
手工设置开机自启动:
(enable与disabled原理:对应级别的target下面做一个服务的软链接,然后在启动这个服务的时候,它会加载这个级别下的所有软链接,所有软链接就会找到程序启动的所有路径)

[root@calms ~]# rm -f /etc/systemd/system/multi-user.target.wants/crond.service
[root@calms ~l#systemctlstatus crondcrond.service -Command SchedulerEv:kunlun991
Loaded: loaded (/usr/lib/systemd/system/crond.service; disabled; vendor preset: enabled)
Active:inactive(dead)
[root@calms ~]# ln -s /usr/lib/systemd/system/crond.service/etc/systemd/system/multi-user.target.wants/crond.servicerootd
[root@calms ~]#systemctlstatus crond
Crond.service -Command SchedulerLoaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)Active:inactive (dead)root
[root@calms ~]#rm -f /etc/systemd/system/multi-user.target.wants/crond.service
[root@calms ~]#systemctl status crond
Crond.service -Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond,service; disabled; vendor preset: enabled)

systemd文件格式

  1. systemctl文件路径说明:
    在这里插入图片描述
  2. 说明
    Unit 定义通用的选项,描述信息,依赖关系
    Srevice 特殊的服务类型,具体启动,关闭,重启选项都在此部分配置
    Install 定义开机自启和不开机自启动命令实现的选项

unit常用段:
description 描述信息
documentation 说明文档的在线地址
after 定义自启动顺序,表示当前配置的服务应该晚于那些服务之后启动
wants 依赖其他的关系

serivce段常用说明
Type#定义服务类型
forking#需要父进程启动子进程的服务类型为forking
PIDFile#定义PID 文件路径(进程 PID)
ExecStart#指定启动服务命令绝对路径

ExecReload#指定重新加载服务的配置文件的命令绝对路径
ExecStop#指定停止服务命令绝对路径
ExecStartPre#在启动之前运行的命令
ExecStartPost#在启动之后运行的命令

install:
WantedBy#哪些服务需要被依赖

nginx的systemd启动文件解释:
在这里插入图片描述
自定义服务启动文件(条件):
PIDFile=/var/run/nginx.pid #pid 文件的绝对路径

ExecStart=/usr/sbin/nginx-c

/etc/nginx/nginx.conf
ExecStop=/bin/sh-c “/bin/kil1 -s TERM $ (/bin/cat /var/run/nginx.pid)”
#启动命令的绝对路径#停止服务命令的绝对路径

centos6:

centos6centos7
/etc/init.d/nginx start(shell脚本)systemctl start nginx(systemd启动文件)
serivce nginx start
chkconfig nginx on chkconfid nginx offsystemctl enable nginx systemctl disable nginx
chkconfig - -list grep 3:onsystemctl list-unit-files

面试题:

开发了一个nginx脚本/etc/init.d/nginx start如何配置脚本,能让那个脚本使用chkconfig进行开机自启动设置
答:chkconfig:2345 21 81
description:rsync service start and stop scripts

自定义一个nginx脚本

cat >/usr/lib/systemd/system/wulinnginx…service << EOF
[Unit]
Description=DIY nginx
Documentation=https://www.wulin.com/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/application/nginx/pid/nginx.pid
Execstart=lapplication/nginx/sbin/nginx-c /application/nginx/conf/nginx.conf

ExecReload=/appalication/nginx/sbin/nginx -s reload
Execstop=/application/nginx/sbin/nginx -s stop
ExecStartPre=/bin/sh -c “/usr/bin/chown -R www:www /application/nginx/”

[Install]
wantedBy=multi-user.target
EOF

重新加载systemd配置:
systemctl daemon-reload

启动我们自己的服务
systemctl start wulinnginx

这一篇小编先写到这里了,更多内容请关注小编专栏!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630954.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS2019配合QT5.9开发IRayAT430相机SDK

环境配置 VS2019 QT5.9 编译器版本 MSVC2017_64添加系统环境变量&#xff08;完毕后重启电脑&#xff09; 从VS2019中下载Qt插件 从VS2019中添加单个编译组件 上述操作完成后用VS打开工程文件&#xff0c;工程文件地址 &#xff1a; C:\Users\86173\Desktop\IRCNETSDK_W…

337. 打家劫舍 III 树上最大独立集

这个题目其实就是 树形结构的 打家劫舍 (隔一家抢一家) 在打家劫舍中,我们是使用dp[i]记录当前的最大值,如果上一家刚抢过,就返回dp[i-2] 而对于这个题目,我们对每个节点记录两个状态,就是抢和没抢的最大值 具体转移方程如下: dfs(node,rob) 表示对于当前node节点,抢了true或…

最大连续1的个数 ||| ---- 滑动窗口

题目链接 题目: 分析: 题目中说可以将最多k个0翻转成1, 如果我们真的这样算就会十分麻烦, 所以我们可以换一种思路: 找到一个最长的子数组, 最多有k个0解法一: 暴力解法: 找到所有的最多有k个0的子字符串, 返回最长的解法二: 找到最长的子数组, 我们可以想到"滑动窗口算…

968.监控二叉树 树上最小支配集

法一: 动态规划 一个被支配的节点只会有三种状态 1.它本身有摄像头 2.他没有摄像头, 但是它的父节点有摄像头 3.他没有摄像头, 但是它的子节点有摄像头 我们 dfs(node,state) 记录在node节点时(以node为根的子树),状态为state下的所有最小摄像头 // 本身有摄像头就看左右孩子…

2024/4/28 C++day5

有以下类&#xff0c;完成特殊成员函数 class Person { string name; int *age; } class Stu:public Person { const double score; } #include <iostream> #include <string> using namespace std; class Person { string name; int *age ; publi…

Vision Pro“裸眼上车”,商汤绝影全新舱内3D交互亮相

2023年&#xff0c;Apple Vision Pro的横空出世让人们领略到了3D交互的魅力&#xff0c;商汤绝影通过深厚的技术研发实力和高效的创新迭代效率&#xff0c;带来两大全新座舱3D交互&#xff1a;3D Gaze高精视线交互和3D动态手势交互。 作为全球首创的能够通过视线定位与屏幕图标…

16.Blender 基础渲染工作流程及安装ACES

安装插件和菜单栏设置 在菜单栏的编辑里打开偏好设置 里面的插件界面 搜索node 给第三个打勾 点击安装&#xff0c;导入cat插件 安装完后&#xff0c;一定要打勾&#xff0c;选择上cat插件 这样N窗口才会显示MMD选项 导入场景 点击打开 把输出模式的帧率改为30fps 按…

CSS 之 transition过渡动画

一、简介 ​ CSS 制作 Web 动画有两种方式&#xff1a; 帧动画&#xff08;Keyframe Animation&#xff09;和过渡动画&#xff08;Transition Animation&#xff09;。针对不同的业务场景中&#xff0c;我们应该选择不同的动画方式&#xff0c;通常来说&#xff1a;对于交互元…

OpenHarmony实战开发-多层级手势事件

多层级手势事件指父子组件嵌套时&#xff0c;父子组件均绑定了手势或事件。在该场景下&#xff0c;手势或者事件的响应受到多个因素的影响&#xff0c;相互之间发生传递和竞争&#xff0c;容易出现预期外的响应。 本章主要介绍了多层级手势事件的默认响应顺序&#xff0c;以及…

MySQL8.0 msi版本安装教程

MySQL8.0 msi 版本安装教程 1> 官网下载安装包 2> 安装MySQL 2.1双击打开下载的安装包&#xff0c;进入到下面这个页面&#xff0c;选择 Custom 选项&#xff0c;之后&#xff0c;点击next 说明&#xff1a; 2.2 选择所需产品&#xff0c;更改安装位置(当然也可以默认安…

公式SUM(A2:C4C2:D5)一共对几个单元格进行求和?

一、公式中的几个问题 1.括号和冒号是双字节的字符。 这个不用多说了&#xff0c;相信题主中是提问时书写笔误&#xff0c;实际在Excel中写公式时肯定用的是英文单字节字符。 2.括号里是两个区域&#xff0c; 但两个区域之间是怎样的运算关系并没有说&#xff0c;或者说是遗…

数据结构之顺顺顺——顺序表

1.浅谈数据结构 相信我们对数据结构都不陌生&#xff0c;我们之前学过的数组就是最基础的数据结构&#xff0c;它大概就长这样&#xff1a; 数组 而作为最简单的数据结构&#xff0c;数组只能帮助我们实现储存数据这一个功能&#xff0c;随着学习的深入&#xff0c;和问题的日渐…

远程控制软件优化(1)

远程控制软件优化&#xff08;1&#xff09; 第一版存在以下缺点&#xff1a; 1、四大部分中 Robot States 部分过于简陋&#xff0c;不适合放到论文中 2、Lidar BEV 图像显示效果非常差&#xff0c;显示不全且很稀疏 3、视频流传输延时过高&#xff0c;无法实现远程控制 以…

学python的第二十三天

原文链接&#xff1a;Python 图形化界面设计&#xff08;Tkinter&#xff09; - 简书 (jianshu.com) 子窗体&#xff08;Toplevel&#xff09; 直接上代码&#xff1a; # 子窗体 from tkinter import *def newwindow():winNew Toplevel(root)winNew.geometry(320x240)winNe…

C语言-atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

《十一》Qt各种对话框之QInputDialog

QInputDialog QInputDialog 用于方便快捷地获取一个用户输入数据&#xff0c;支持整数 int、浮点数 double、文本 QString 三种数据。按照 QInputDialog 内部的输入控件&#xff0c;又可以分为整数输入控件 QSpinBox、浮点数输入控件 QDoubleSpinBox、单行文本输入控件 QLineE…

AI大模型日报#0428:AI聊天半年涨粉1000万、元象发布多模态XVERSE-V、字节发布视觉ViTamin

导读&#xff1a; 欢迎阅读《AI大模型日报》&#xff0c;内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。AI大模型日报今日要点&#xff1a; 今日&#xff0c;AI大模型领域动作频频&#xff0c;多家科技巨头和初创公司展示了其最新研发成果。快手…

暗区突围如何申请测试资格?暗区突围测试申请的方法轻松掌握

游戏中健康系统与其它射击游戏有很大区别&#xff0c;根据受伤部位、伤势的不同&#xff0c;会有不同的表现。除了头部之外&#xff0c;其它部位如果损坏后继续受到伤害&#xff0c;那么伤害将会分摊到身体其它部位。在暗区内或者暗区外都可以对角色进行治疗&#xff0c;角色不…

FebHost:深入分析企业海外市场选通用域名还是国别域名?

企业想进入海外在线市场&#xff0c;非常重要的一个环节是如何选择一个在线品牌域名&#xff0c;很多企业面临着选择.COM还是国别域名。以下是一些需要考虑的因素。 域名可用性 一个网站的域名可以给人留下深刻的品牌印象。新企业更倾向于选择 .com、.net 和 .org 等标准通用顶…

【哔哩哔哩笔试题汇总】2024-04-28-哔哩哔哩春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新b站近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497…