当前位置: 首页 > article >正文

【随身WiFi】随身WiFi Debian系统优化教程

0.操作前必看

本教程基于Debian系统进行优化,有些操作对随身WiFi来说可能会带来负优化,根据需要选择。

所有操作需要在root用户环境下运行,否则都要加sudo

随身wifi Debian系统,可以去某安的随声WiFi模块自行搜索刷机

点赞,关注,打赏

点赞,关注,打赏

点赞,关注,打赏


1.常用工具推荐

1.1 SSH客户端

一般系统编译了ssh服务端,所以只需要用客户端连接就行

客户端推荐 Xshell,官网下载地址

XSHELL - NetSarang Website

1.2 Linux常用工具集

在玩随身WIFI时,或多或少会使用到下面一些工具

  • curl:用于在命令行中传输数据的工具。
  • wget:用于下载文件的命令行工具。
  • nano:一个简单易用的文本编辑器。
  • vim:一个强大的文本编辑器,常用于程序开发和系统配置。
  • busybox:一个适用于嵌入式系统和单片机的工具集,包含了大部分基本的Linux工具。
  • iptables:用于配置Linux防火墙的工具。
  • iproute2:用于管理网络连接和路由的工具。
  • cpufrequtils:用于管理CPU频率的工具。

用apt 、命令安装,自己选择要安装的工具

apt update && apt install xxx0 xxx1 xxx2

2.创建swap/zram虚拟内存

2.1 创建swap

创建一个512M的swapfile并启用,充实随身wifi不到512M的可怜内存。由于没有多余的闪存空间,再分区会导致多余的麻烦,所以用创建swapfile文件的方式,而不用swap分区

swapfile文件地址任意,我选择在根目录/

dd if=/dev/zero of=/swapfile bs=1M count=512
chmod 600 /swapfile
mkswap /swapfile
swapon -p 1 /swapfile

创建之后,马上生效。下次开机生效需要在/etc/rc.local文件添加swapon命令

#nano /etc/rc.local
swapon /swapfile

至于调整swap使用积极性 vm.swappiness=100,在第9步有配置

2.2 临时创建zram

创建一个256m的zram分区,先查看内核支不支持,是否加载了zram模块,如果输出结果包含zram,则表示Zram模块已加载。

lsmod | grep zramlsmod | grep zram

加载zram内核模块,并指定设备数量为1。创建一个256MB大小的zram设备,并使用lz4算法(这算法最快)进行压缩,同时将数据分成4个流。将zram设备格式化为swap分区,启用zram设备,并设置优先级。(看不懂没关系,直接用命令就行)

modprobe zram num_devices=1
zramctl --find --size 256M --algorithm lz4 --streams 4
mkswap /dev/zram1
swapon -p 0 /dev/zram1

2.3 永久创建zram分区

网上配置zram的教程挺少的。有很多种方法里,不同内核不太兼容。所以用创建配置服务方式兼容性最强

为了方便配置和管理,我们可以将 ZRAM 配置编写成一个服务脚本,来方便随时启用和禁用:

使用你习惯的文本编辑器(如 vim 或 nano),创建一个zram.service服务配置文件:

nano /etc/systemd/system/zram.service

将以下配置并粘贴到文件中:

[Unit]
Description=ZRAM Configuration
After=local-fs.target[Service]
Type=oneshot
ExecStart=/usr/sbin/modprobe zram
ExecStart=/bin/sh -c 'echo 0.2G > /sys/block/zram0/disksize'
ExecStart=/bin/sh -c 'mkswap /dev/zram0'
ExecStart=/bin/sh -c 'swapon /dev/zram0'
RemainAfterExit=yes[Install]
WantedBy=multi-user.target

根据你 Ubuntu 系统的物理内存大小,在ExecStart行中调整需要的 ZRAM 大小,一般设置为 RAM 大小的 50%-100%。

使用以下命令启动并启用 ZRAM 服务:

systemctl daemon-reload # 重新载入服务配置文件
systemctl enable zram.service # 启用 zram 服务
systemctl start zram.service # 启动 zram 服务

2.4 常用命令补充

  • swapon -a #启用所有swap分区。
  • swapoff -a #禁用所有swap分区。
  • swapon --show 或 swapon -s #显示当前系统中已启用的swap分区。
  • swapon -p 或 swapon --priority #将指定的swap分区设置为指定的优先级。优先级越高的swap分区,系统越倾向于将内存数据转移到该分区中。
  • free -m #查看当前内存使用情况

3. CPU调优

3.1 临时调度调优

410支持的调度策略 userspace, conservative, ondemand, powersave, performance, schedutil

其中schedutil是比较优秀的调度,我们使用cpufrequtils工具设置调度策略

安装cpufrequtils(之前已经安装了就不管)

apt install cpufrequtils

查看cpu信息,打印所有信息(这里只展示410其中一个核心作为示例)

cpufreq-info
root@4G-wifi:~# cpufreq-info 
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:driver: cpufreq-dtCPUs which run at the same hardware frequency: 0 1 2 3CPUs which need to have their frequency coordinated by software: 0 1 2 3maximum transition latency: 0.97 ms.hardware limits: 400 MHz - 2.10 GHzavailable frequency steps: 400 MHz, 800 MHz, 1000 MHz, 1.10 GHz, 1.20 GHz, 1.30 GHz, 1.40 GHz, 1.50 GHz, 1.60 GHz, 1.70 GHz, 1.80 GHz, 1.90 GHz, 2.00 GHz, 2.10 GHzavailable cpufreq governors: userspace, conservative, ondemand, powersave, performance, schedutilcurrent policy: frequency should be within 400 MHz and 2.10 GHz.The governor "schedutil" may decide which speed to usewithin this range.current CPU frequency is 1.42 GHz (asserted by call to hardware).cpufreq stats: 400 MHz:90.04%, 800 MHz:3.05%, 1000 MHz:0.54%, 1.10 GHz:0.15%, 1.20 GHz:0.12%, 1.30 GHz:0.12%, 1.40 GHz:0.34%, 1.50 GHz:0.18%, 1.60 GHz:0.29%, 1.70 GHz:0.35%, 1.80 GHz:0.35%, 1.90 GHz:0.29%, 2.00 GHz:0.52%, 2.10 GHz:3.68%  (403860)
  • cpufreq-info -f 查看当前CPU频率。
  • cpufreq-info -p 查看当前CPU模式。
  • cpufreq-info -g 查看当前支持的CPU运行模式。

我用的超频版Debian系统,cpu频率支持 400MHz - 2.1GHz

设置cpu调度策略为schedutil

cpufreq-set -g schedutil

也可以通过cpufreq-info -p查看当前CPU模式。

cpufreq-info -p

3.2 临时CPU频率调优

上面说到当前系统的cpu频率支持 400MHz - 2.1GHz(实际得看你刷的固件)。可以自定义频率范围,内核会根据你选择的调度策略控制cpu运行频率,我的建议是保持固件默认,想省点电可以降低最高频率。

cpufreq-set -d <最低频率> -u <最高频率>
#例如 cpufreq-set -d 0.5GHz -u 2GHz

 通过cpufreq-info -p查看当前CPU模式, 

cpufreq-info -p

也可以固定频率,那原先调度策略就会失效,自动设置为userspace,cpu当前频率固定为设置值

cpufreq-set -f <频率> 
#例如 cpufreq-set -d 1.0GHz

 通过cpufreq-info -f查看当前CPU频率, 

cpufreq-info -f

这里提一嘴,-c这个参数,指定cpu序号,对410好像不生效,会变成全局设置

3.3 永久生效配置

上面两步都可以马上生效,重启后失效,想要重启后仍然生效,则需要如下配置

编辑/etc/default/cpufrequtils文件(如果文件不存在,则创建它),设置你想要的最大和最小频率:

nano /etc/default/cpufrequtils

添加或修改以下行:

GOVERNOR="schedutil" # 或者 "powersave", "ondemand" 等
MAX_SPEED="21000000" # 最大频率,单位是Hz,例如3000000表示3.0 GHz
MIN_SPEED="4000000" # 最小频率,单位是Hz,例如1000000表示1.0 GHz

保存文件后,重启验证配置是否生效,不验证也可以

4. 自定义登录信息

4.1 登录前打印

修改/etc/issue,登录前打印信息

nano /etc/issue

 

4.2 登录后打印

修改/etc/motd,登录后打印信息

nano /etc/motd

 

4.3 登录时系统动态信息打印

修改 /etc/update-motd.d/10-uname

nano /etc/update-motd.d/10-uname
#!/bin/sh
# uname -snrvm
echo "\033[47m \033[30m-------------------------- 系统信息 --------------------------\033[37m \033[40m"
echo "操作系统: $(echo "$(sed 's/\\n//g;s/\\l//g' /etc/issue)")" || echo "操作系统: $(uname -o)"
echo "主机名称: $(hostname)"
echo "内核版本: $(uname -r)"
echo "软件包数量: $(dpkg --list | wc -l)"
echo "CPU架构: $(lscpu| awk '/Architecture:/ {print $NF}')"
echo "CPU核心数: $(lscpu| awk '/^CPU/ {print $2}')"
echo "核心线程数: $(lscpu| awk '/Thread per core:/ {print $NF}')"
echo "CPU温度: $(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null | awk '{print int($1/1000)}')°C"
echo ""
if output=$(mmcli -m 0 2>&1) && [ -n "$output" ]; then
get_modem() { mmcli -m 0 2>/dev/null | grep -oiP "(?<=$1\s).*" | awk 'NR==1{print}'; };
echo ""
echo "\033[47m \033[30m-------------------------- Modem信息 --------------------------\033[37m \033[40m"
[ -n "$(get_modem "own:")" ] && echo "SIM号码: $(get_modem "own:" | sed 's/^86//')"
[ -n "$(get_modem "operator name:")" ] && echo "运营商: $(get_modem "operator name:" | sed 's/CHN-UNICOM/中国联通/g; s/UNICOM/中国联通/g; s/CMCC/中国移动/g; s/CT/中国电信/g')"
[ -n "$(get_modem "state:")" ] && echo "SIM状态: $(get_modem "state:")"
[ -n "$(get_modem "power state:")" ] && echo "数据开关: $(get_modem "power state:")"
[ -n "$(get_modem "access tech:")" ] && echo "访问类型: $(get_modem "access tech:")"
[ -n "$(get_modem "signal quality:")" ] && echo "信号强度: $(get_modem "signal quality:")"
[ -n "$(get_modem "equipment id:")" ] && echo "设备ID: $(get_modem "equipment id:")"
fiip_address=$(ip addr show | grep -w inet | awk '{print $2}' | cut -d/ -f1)
echo ""
if [ -n "$ip_address" ]; then
echo "\033[47m \033[30m-------------------------- 网络信息 --------------------------\033[37m \033[40m"
echo "内网IP:"
echo "$ip_address"
curl_output=$(curl -s -m 6 cip.cc 2>&1 | sed '/^$/d') && [ -n "$curl_output" ] && {
echo "公网IP:"
echo "$curl_output"; };
fiinterfaces=$(ifconfig | awk '/^[^ ]/ && !/lo/ {gsub(/:/,"");print $1}')
echo ""
if [ -n "$interfaces" ]; then
echo "\033[47m \033[30m-------------------------- 接口信息 --------------------------\033[37m \033[40m"
echo "网络接口: "$interfaces""
convert_unit() { size=$1; awk 'BEGIN{ printf "%.2f %s", ('$size'/1024/1024), "MB" }'; }
for interface in $interfaces; do
get_bytes() { ifconfig $interface | grep -E "$1 .*bytes|$1 bytes" | sed -E "s/.*$1 bytes:([0-9]+).*/\1/;s/.*bytes ([0-9]+) .*/\1/"; }
rx=$(get_bytes RX)
tx=$(get_bytes TX)
[ $rx -gt 0 -o $tx -gt 0 ] && echo "$interface 接收: $(convert_unit $rx) 发送: $(convert_unit $tx)"
done;fi
echo ""
echo "\033[47m \033[30m-------------------------- 内存信息 --------------------------\033[37m \033[40m"
mmc_info=$(cat /sys/class/mmc_host/mmc0/mmc0\:0001/life_time)
[ -n "$mmc_info" ] && echo "内存寿命: $mmc_info"
echo "硬件内存: $(free -m | awk 'NR==2{printf "%s/%sMiB (%.2f%%)\n", $3,$2,$3*100/$2 }')"
swap_info=$(free -m | awk 'NR==3{printf "%s/%sMiB (%.2f%%)\n", $3,$2,$3*100/$2}')
[ ! -z "$swap_info" ] && echo "虚拟内存: $swap_info" && sudo swapon --show
echo ""
echo "\033[47m \033[30m-------------------------- 磁盘信息 --------------------------\033[37m \033[40m"
df -h
echo ""
echo "\033[47m \033[30m-------------------------- 运行信息 --------------------------\033[37m \033[40m"
uptime=$(uptime | sed 's/up/已运行:/g; s/mins/分钟/g; s/min/分钟/g; s/days/天/g; s/day/天/g; s/users/个登录用户/g; s/user/个登录用户/g; s/load average/平均负载/g')
echo "本地时间: $uptime"
echo ""

5. 清除不需要的软件包与日志文件

5.1 清理系统中不需要的软件包和日志文件

使用命令

apt-get autoremove && apt-get clean && apt-get autoclean && journalctl --vacuum-size=5M
  • apt-get autoremove:卸载已经不再需要的软件包。这个命令会移除已经安装但是没有被其他软件所依赖的软件包。
  • apt-get clean:清理已经下载的软件包文件。这个命令会删除已经下载并安装的软件包的本地缓存文件,以释放磁盘空间。
  • apt-get autoclean:清理过期的软件包。这个命令会删除已经过期的软件包,但是保留最新的软件包版本的本地缓存文件,以便以后重新安装。
  • journalctl --vacuum-size=5M:缩减系统日志文件。这个命令会删除旧的系统日志文件,只保留最近的5M大小的日志文件。

6.磁盘优化

6.1 TRIM优化

ssd的技术,我们的随身wifi的闪存也支持,能让ssd保持高速写入性能。

TRIM优化,一般不需要手动执行,内核会一周执行一次,通过命令可查看

systemctl status fstrim.timer

可以手动执行,也可以放在/etc/rc.local文件里,让他开机运行一次。

fstrim -v /

6.2 修复ext4文件系统只读

有时docker守护进程跑不起来,那可能是闪存写保护了。

mount -l 

查看挂载情况,如果是/dev/mmcblk0p14 是(ro,...),不是(rw,...)就是写保护了

尝试重新挂载为可写状态,失败的话就继续往下看

mount -w /dev/mmcblk0p14

有的体质差的在拔插随身wifi后,重启后磁盘就写保护了。特别是在有swapfile文件时,会出现这种情况,这是后就要使用e2fsck命令修复,并重启随身WiFi

e2fsck -y /dev/mmcblk0p14
reboot

7.自动识别并切换usbhub模式

7.1 自动识别是否外接usbhub,并切换模式

修改/etc/rc.local,如果接入usb就会切换usb主机模式,否则就是默认

nano /etc/rc.local
# usb auto otg
sleep 3
grep 0 /sys/kernel/debug/usb/ci_hdrc.0/device | grep speed
if [ $? -eq 0 ]
then
echo host > /sys/kernel/debug/usb/ci_hdrc.0/role
fisleep 25 && /etc/init.d/network restart
exit 0

8.修改LED灯配置

8.1 修改led配置

查看当前LED的行为

可以通过查看/sys/class/led/<名字>/trigger文件来了解当前LED的行为。例如,查看绿色LED的行为,可以使用命令

cat /sys/class/leds/green:internet/trigger

当前绿灯触发器选择为[none],可以设置成其他的

修改LED的行为

通过向trigger文件写入新的行为来修改LED的行为。例如,将绿色LED设置为常量状态,可以使用命令

echo default-on > /sys/class/leds/green:internet/trigger

该命令让触发器选择为[default-on],绿灯常量

想要永久有效,将设置写入/etc/rc.local让其重启依旧生效

#编辑 /etc/rc.local 加入,具体自己设置对应trigger
sleep 10
echo default-on > /sys/class/leds/red:os/trigger
echo phy0rx > /sys/class/leds/blue:wifi/trigger
echo cpu > /sys/class/leds/green:internet/trigger

8.2 led灯名称与触发器解释

三色LED地址

  • 红灯:/sys/class/leds/red:os
  • 蓝灯:/sys/class/leds/blue:wifi
  • 绿灯:/sys/class/leds/green:internet

触发器行为(有些行为,你刷的系统内核不支持)

  • usb-gadget:USB设备连接状态
  • usb-host:USB主机连接状态
  • rfkill-any:RFkill任何状态改变
  • rfkill-none:RFkill无状态改变
  • kbd-scrolllock:键盘滚动锁定灯状态
  • kbd-numlock:键盘数字锁定灯状态
  • kbd-capslock:键盘大写锁定灯状态
  • timer:定时器事件
  • heartbeat:心跳事件
  • cpu:CPU状态
  • default-on:常量开启状态
  • panic:恐慌报警状态
  • mmc0:存储卡状态
  • bluetooth-power:蓝牙电源状态
  • hci0-power:HCI0电源状态
  • rfkill0rfkill1等:RFkill设备状态‌
  • netdev:基于网络接口的活动(如传输数据)触发。
  • phy0rx:无线设备接收操作,表示WIFI连接状态
  • phy0tx:无线设备发送操作,表示WIFI连接状态

9.一些配置内核参数的正or负优化

9.1 通过配置sysctl.conf,配置内核参数

使用命令

nano /etc/sysctl.conf
vm.swappiness=100
vm.vfs_cache_pressure=50
vm.panic_on_oom=0
vm.dirty_ratio=50
vm.dirty_background_ratio=30
vm.min_free_kbytes=10240
vm.max_map_count=262144
vm.dirty_expire_centisecs=3000
vm.dirty_writeback_centisecs=15000net.ipv6.conf.all.forwarding=1
net.ipv6.conf.all.proxy_ndp=1
net.ipv6.conf.all.accept_ra=2
net.ipv4.ip_forward=1
net.core.somaxconn=2048
net.ipv4.tcp_max_syn_backlog=8192
net.core.netdev_max_backlog=32768
net.ipv4.tcp_keepalive_time=600
net.ipv4.icmp_echo_ignore_all=0
net.ipv4.tcp_abort_on_overflow=0
net.ipv4.tcp_fack=1
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_fastopen=3
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_keepalive_intvl=30
net.ipv4.tcp_keepalive_probes=3
net.ipv4.ip_default_ttl=128
net.core.message_burst=10
net.core.busy_read=50
net.core.optmem_max=20480
net.ipv4.tcp_challenge_ack_limit=9999
net.ipv4.tcp_max_orphans=32768
net.ipv4.tcp_max_tw_buckets=32768
net.ipv4.udp_rmem_min=8192
net.ipv4.udp_wmem_min=8192
net.ipv4.ip_local_port_range=1024 65000
net.ipv4.tcp_mem=131072 262144 524288
net.ipv4.udp_mem=262144 524288 1048576
net.ipv4.tcp_wmem=8760 256960 4088000
net.ipv4.tcp_rmem=8760 256960 4088000
net.core.rmem_default=524288
net.core.rmem_max=8388608
net.core.wmem_default=524288
net.core.wmem_max=8388608

在修改 /etc/sysctl.conf 文件后,需要运行以下命令使其永久生效:

sysctl -p

如果本文对你有帮助,欢迎点链接打赏支持!

图片被和谐,可以点上面链接打赏
如果图片被和谐,可以点上面链接打赏

相关文章:

【随身WiFi】随身WiFi Debian系统优化教程

0.操作前必看 本教程基于Debian系统进行优化&#xff0c;有些操作对随身WiFi来说可能会带来负优化&#xff0c;根据需要选择。 所有操作需要在root用户环境下运行&#xff0c;否则都要加sudo 随身wifi Debian系统&#xff0c;可以去某安的随声WiFi模块自行搜索刷机 点赞&am…...

【WORD】批量将doc转为docx

具体步骤进行&#xff1a; 打开Word文档&#xff0c;按下AltF11快捷键&#xff0c;打开VBA编辑器。在VBA编辑器中&#xff0c;左侧的“项目资源管理器”窗口会显示当前打开的Word文档相关项目。找到您要添加代码的文档项目&#xff08;通常以文档名称命名&#xff09;&#xf…...

JAVA Web_定义Servlet2_学生登录验证Servlet

题目 页面StudentLogin.html中有一HTML的表单代码如下&#xff1a; <form action"studentLogin" method"post">学生姓名&#xff1a;<input type"text" name"stuName" value""><br>登录密码&#xff1a;…...

深入理解设计模式之模板方法模式 1d87ab8b42e98069b6c2c5a3d2710f9a

深入理解设计模式之模板方法模式 深入理解设计模式之模板方法模式 在软件开发的漫长征程中&#xff0c;我们常常会遇到各种复杂的业务逻辑&#xff0c;其中部分逻辑具有相似的流程框架&#xff0c;但在具体细节上又有所不同。这种情况下&#xff0c;模板方法模式就如同一位得…...

Unity入门笔记(缘更)

内容来源SiKi学院的Luna’s Fantasy 文章目录 一、基础知识1.准备2.基础知识1.层级(Layer)2.轴心点3.预制体(Prefab)4.刚体组件(Rigidbody)5.碰撞器组件(BoxCollider) 二、代码1.移动 一、基础知识 1.准备 Unity安装&#xff1a; https://unity.cn 2.基础知识 1.层级(Layer…...

【Python】用Python写一个俄罗斯方块玩玩

【Python】用Python写一个俄罗斯方块玩玩 一、引言1.成品效果展示 二、思考准备1.思考设计2.代码设计2.1 游戏页面2.2 控件设计2.2.1 方块生成2.2.2 方块碰撞2.2.3 方块消融2.2.4 游戏主循环2.2.5 游戏窗口 三、游戏完整版 一、引言 今日看到侄子在玩游戏&#xff0c;凑近一看…...

Java 本地缓存的实现:常见的四种方式

在 Java 中&#xff0c;常用的本地缓存实现主要有以下几种&#xff0c;以下是它们的代码示例及适用场景&#xff1a; 一、‌使用 ConcurrentHashMap 实现简单缓存‌ 适合轻量级、无需复杂淘汰策略的场景。 import java.util.concurrent.ConcurrentHashMap;public class Simp…...

记录一次生产中mysql主备延迟问题处理

登录库&#xff1a; mysql -uXXXX -pXXXX -P3306 -hXXXXXX -A 备库上执行&#xff1a;show slave status\G 查看 seconds_Behind_Master&#xff0c;延迟 2705s&#xff0c;而且还一直在增加。 SHOW CREATE TABLE proc_i_income_temp; -- 查看表的结构 show index from proc…...

路由器原理与配置技术详解

一、路由基础原理 1.1 路由器的核心功能 网络层设备&#xff1a;工作在OSI参考模型第三层&#xff0c;实现不同网络间的互联互通智能路径选择&#xff1a;基于路由表为数据包选择最优传输路径协议转换&#xff1a;处理不同网络接口间的协议差异&#xff08;如以太网与PPP&…...

第五节:React Hooks进阶篇-如何用useMemo/useCallback优化性能

反模式&#xff1a;滥用导致的内存开销React 19编译器自动Memoization原理 React Hooks 性能优化进阶&#xff1a;从手动到自动 Memoization &#xff08;基于 React 18 及以下版本&#xff0c;结合 React 19 新特性分析&#xff09; 一、useMemo/useCallback 的正确使用场景…...

STL迭代器:C++泛型编程的核心工具 [特殊字符]

在C中&#xff0c;STL&#xff08;标准模板库&#xff09;的迭代器是泛型编程的核心&#xff0c;它不仅解决了指针的局限性&#xff0c;还为算法与容器之间提供了抽象的访问接口。接下来&#xff0c;我们将探讨迭代器的核心作用、与指针的关键区别以及其设计哲学。 一、迭代器的…...

ffmpeg无损转格式的命令行

将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码...

Monorepo 是什么?前端项目的多模块管理终极方案

前言 你是否曾经维护过多个前端项目?是否在多个项目之间来回复制粘贴组件,工具函数?是否经常被"组件更新没同步","构建时间太长","依赖版本冲突"等问题困扰? 这些问题都指向一个关键点: 项目结构和管理方式 今天,我来聊聊一种非常火但又容…...

对象池模式在uniapp鸿蒙APP中的深度应用

文章目录 对象池模式在uniapp鸿蒙APP中的深度应用指南一、对象池模式核心概念1.1 什么是对象池模式&#xff1f;1.2 为什么在鸿蒙APP中需要对象池&#xff1f;1.3 性能对比数据 二、uniapp中的对象池完整实现2.1 基础对象池实现2.1.1 核心代码结构2.1.2 在Vue组件中的应用 2.2 …...

条款05:了解C++默默编写并调用哪些函数

目录 1.默认生成的函数 2.无法生成的情况 2.1当成员函数有引用 或者 被const修饰 2.2.operator在基类被私有 1.默认生成的函数 class empty {};//相当于class empty { public:empty(){ ... } // 构造函数empty(const empty& rhs) { ... }// 拷贝构造~empty(){ ... } //…...

PythonFlask打造高效流式接口的实战

一、环境搭建与项目初始化 要使用 Flask 提供流式接口,首先得确保开发环境正确配置。在 Ubuntu 系统上,可借助 apt 包管理器便捷安装 Python 和 pip: sudo apt update sudo apt install python3 python3-pip对于 Windows 用户,推荐从官网下载安装包进行安装。安装完成后,…...

强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架

强化学习算法 &#xff08;一&#xff09;动态规划方法——策略迭代算法(PI)和值迭代算法(VI) &#xff08;二&#xff09;Model-Free类方法——蒙特卡洛算法(MC)和时序差分算法(TD) &#xff08;三&#xff09;基于动作值的算法——Sarsa算法与Q-Learning算法 &#xff08;四…...

设计模式(结构型)-桥接模式

目录 摘要 定义 类图 角色 具体实现 优缺点 优点 缺点 使用场景 使用案例 JDBC 和桥接模式 总结 摘要 在软件开发领域&#xff0c;随着系统规模和复杂性的不断攀升&#xff0c;如何设计出具有良好扩展性、灵活性以及可维护性的软件架构成为关键挑战。桥接模式作为一…...

【MySQL】MySQL数据库 —— 简单认识

目录 1. 数据库的介绍 1.1 什么是数据库 1.2 数据库和数据结构之间关系 2. 数据库分类 2.1 关系型数据库&#xff08;RDBMS&#xff09; 2.2 非关系型数据库 2.3 区别 一些行内名词简单解释&#xff1a; 3. 关于mysql 主要学什么 4. MySQL中重要的概念 4.1 概念 4…...

RNN - 语言模型

语言模型 给定文本序列 x 1 , … , x T x_1, \ldots, x_T x1​,…,xT​&#xff0c;语言模型的目标是估计联合概率 p ( x 1 , … , x T ) p(x_1, \ldots, x_T) p(x1​,…,xT​)它的应用包括 做预训练模型&#xff08;eg BERT&#xff0c;GPT-3&#xff09;生成本文&#xff…...

过拟合、归一化、正则化、鞍点

过拟合 过拟合的本质原因往往是因为模型具备方差很大的权重参数。 定义一个有4个特征的输入&#xff0c;特征向量为,定义一个模型&#xff0c;其只有4个参数&#xff0c;表示为。当模型过拟合时&#xff0c;这四个权重参数的方差会很大&#xff0c;可以假设为。当经过这个模型后…...

【python画图】:从入门到精通绘制完美柱状图

目录 Python数据可视化&#xff1a;从入门到精通绘制完美柱状图一、基础篇&#xff1a;快速绘制柱状图1.1 使用Matplotlib基础绘制1.2 使用Pandas快速绘图 二、进阶篇&#xff1a;专业级柱状图定制2.1 多系列柱状图2.2 堆叠柱状图2.3 水平柱状图 三、专业参数速查表Matplotlib …...

基础知识:离线安装docker、docker compose

(1)离线安装docker 确认版本:Ubuntu 18.04 LTS - bionic 确认架构:X86_64 lsb_release -a uname -a 官方指南:https://docs.docker.com/engine/install/ 选择Ubuntu,发现页面上最低是Ubuntu20.04, 不要紧...

畅游Diffusion数字人(27):解读字节跳动提出主题定制视频生成技术Phantom

畅游Diffusion数字人(0):专栏文章导航 前言:主题定制视频生成,特别是zero-shot主题定制视频生成,一直是当前领域的一个难点,之前的方法效果很差。字节跳动提出了一个技术主题定制视频生成技术Phantom,效果相比于之前的技术进步非常显著。这篇博客详细解读一下这一工作。 …...

《Adaptive Layer-skipping in Pre-trained LLMs》- 论文笔记

作者&#xff1a;Xuan Luo, Weizhi Wang, Xifeng Yan Department of Computer Science, UC Santa Barbara xuan_luoucsb.edu, weizhiwangucsb.edu, xyancs.ucsb.edu 1. 引言与动机 1.1 背景 LLM 的成功与挑战: 大型语言模型 (LLMs) 在翻译、代码生成、推理等任务上取得巨大成…...

阅读分析Linux0.11 /boot/head.s

目录 初始化IDT、IDTR和GDT、GDTR检查协处理器并设置CR0寄存器初始化页表和CR3寄存器&#xff0c;开启分页 初始化IDT、IDTR和GDT、GDTR startup_32:movl $0x10,%eaxmov %ax,%dsmov %ax,%esmov %ax,%fsmov %ax,%gslss _stack_start,%espcall setup_idtcall setup_gdtmovl $0x1…...

android11 DevicePolicyManager浅析

目录 &#x1f4d8; 简单定义 &#x1f4d8;应用启用设备管理者 &#x1f4c2; 文件位置 &#x1f9e0; DevicePolicyManager 功能分类举例 &#x1f6e1;️ 1. 安全策略控制 &#x1f4f7; 2. 控制硬件功能 &#x1f9f0; 3. 应用管理 &#x1f512; 4. 用户管理 &am…...

《前端性能优化秘籍:打造极致用户体验》

在当下&#xff0c;网站和应用的性能表现直接关乎用户去留。快速加载、流畅交互的页面能让用户沉浸其中&#xff0c;反之&#xff0c;缓慢的响应速度则会让他们毫不犹豫地离开。对于前端开发者而言&#xff0c;性能优化不仅是技术追求&#xff0c;更是提升用户体验、增强产品竞…...

微信小程序实现table样式,自带合并行合并列

微信小程序在代码编写过程好像不支持原生table的使用&#xff0c;在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…...

学习笔记十二——Rust 高阶函数彻底入门(超详细过程解析 + 每步数值追踪)

&#x1f4a1; 彻底搞懂 Rust 高阶函数&#xff01;新手最容易卡住的语法 调用流程全讲透&#xff08;含逐步拆解&#xff09; Rust 函数式编程中有一个常见却经常让人懵的概念&#xff1a;高阶函数&#xff08;Higher-Order Function&#xff09; 一看到 fn(i32) -> i32、…...