Loki是受Prometheus启发由Grafana Labs团队开源的水平可扩展,高度可用的多租户日志聚合系统。 开发语言: Google Go。它的设计具有很高的成本效益,并且易于操作。使用标签来作为索引,而不是对全文进行检索,也就是说,你通过这些标签既可以查询日志的内容也可以查询到监控的数据签,极大地降低了日志索引的存储。系统架构十分简单,由以下3个部分组成 :
1.Loki 是主服务器,负责存储日志和处理查询 。
2.promtail 是代理,负责收集日志并将其发送给 loki 。
3.Grafana 用于 UI 展示。
一、Loki与ELK/EFK对比
ELK
优势:
1、功能丰富,允许复杂的操作
劣势:
1、主流的ELK(全文检索)或者EFK比较重
2、ES复杂的搜索功能很多都用不上 规模复杂,资源占用高,操作苦难
大多数查询只关注一定时间范围和一些简单的参数(如host、service等)
3、Kibana和Grafana之间切换,影响用户体验
4、倒排索引的切分和共享的成本较高
Loki
1、最小化度量和日志的切换成本
有助于减少异常事件的响应时间和提高用户的体验
2、在查询语言的易操作性和复杂性之间可以达到一个权衡
3、更具成本效益
二、Loki的架构
promtail收集并将日志发送给loki的 Distributor 组件 Distributor会对接收到的日志流进行正确性校验,并将验证后的日志分批并行发送到Ingester Ingester 接受日志流并构建数据块,压缩后存放到所连接的存储后端 Querier 收到HTTP查询请求,并将请求发送至Ingester 用以获取内存数据 ,Ingester 收到请求后返回符合条件的数据 ; 如果 Ingester 没有返回数据,Querier 会从后端存储加载数据并遍历去重执行查询 ,通过HTTP返回查询结果 三、Loki在K8s中部署
网上的资料一般使用Helm安装,这里使用yaml部署,更适应离线的场景
grafana的部署不在此篇的讨论中,可参见之前文章:https://blog.csdn.net/u011943534/article/details/102906030
storageclass的部署也不在此篇的讨论中,可参见之前文章:https://blog.csdn.net/u011943534/article/details/100887530
1、准备镜像
docker pull grafana/loki:2.3.0 docker tag grafana/loki:2.3.0 172.16.10.160:80/grafana/loki:2.3.0 docker push 172.16.10.160:80/grafana/loki:2.3.0 docker save -o grafana-loki-2.
游戏作为最容易遭到黑客攻击行业,总是避免不了被攻击,这个问题始终是绕不过去的一个点,那么为什么黑客这么喜欢攻击游戏行业呢?
主要原因有那么几点: 1、勒索行为: 这个是绝大部分黑客攻击平台的原因,是为了勒索钱财,收取保护费。 2、恶意竞争:同行竞争的情况也非常多,大蛋糕每个人都想吃,所以由于利益的趋势,互相攻击争夺资源。
针对这种恶意攻击,市面上有一种专门的防护产品----游戏盾
游戏盾是通过封装登录器隐藏真实IP 需要修改业务IP换成游戏盾IP,然后在后台添加下 源IP 和 业务端口,然后下载封装打包工具 上传 生成新的登录器 玩家通过封装好的登录器进入游戏。是采用多机房集群部署模式,节点切换无感知,加密所有连接,实现CC零误封,避免源IP泄漏,有效杜绝服务器入侵。
注意!!!游戏盾是无视攻击的,适合客户端类,APP类使用,通过封装的方式隐藏源机器IP,要求源机上不能有暴露IP的程序,只要你的源机没有暴露,那在封装之后就是无视任何攻击。
官方下载RPM 包
http://nginx.org/packages/centos/7/x86_64/RPMS/ 2.上传服务器执行安装
rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm 3.启动nginx
systemctl start nginx 4.加入开机自启
#查看nginx 是否 开机自启 systemctl list-unit-files | grep nginx #设置nginx 开机自启
systemctl enable nginx rpm 安装方式nginx 默认安装位置在 /etc/nginx/ 目录下,
5.卸载
查看是否安装nginx rpm -qa | grep nginx 卸载前先停止nginx
systemctl stop nginx 卸载
rpm -e nginx 删除文件
rm -rf /etc/nginx/ 启动bug:
nginx: [emerg] bind() to 0.0.0.0:xxxx failed (13: Permission denied)
解决网址
https://blog.csdn.net/qq_32448349/article/details/109725173
最近在折腾面试,然后就有些组件的原理需要看源码,之前也弄过,都是用的Source Insight在win10里面搞的,今天试了一下Mac,源码60G,我这个版本是Android 11,目前是最新版的代码。
用AS看源码首先要构建项目配置文件,就是ipr和iml工具,用到Android源码里面的idegen工具,但是你用官方的mmm命令方法会报错,说文件格式不对,本来是可以用mmm命令直接生成的,但是Mac的文件系统跟官方要求的有问题,所以就放弃了,有想试试的同学可以执行下面的命令。
cd ~/aosp //具体的源码根目录 source build/envsetup.sh //用于初始化环境变量 mmm development/tools/idegen/ //生成文件out/host/linux-x86/framework/idegen.jar ./development/tools/idegen/idegen.sh//源码根目录生成文件android.ipr(工程相关设置), android.iml(模块相关配置) 反正我这条路没走通,用的野路子。
首先把目录切到development/tools/idegen/src下面,这样比较方便。
1、编译idegen的源码,把java文件编译成class文件
javac *.java //aosp/development/tools/idegen/src 2、打包所有的class文件到可执行的jar文件中
jar cvfe idegen.jar Main *.class 3、把idegen.jar文件移动到android源码根目录
/aosp/idegen.jar
4、运行idegen.jar
java -jar idegen.jar 5、等待完成,成功后如下
Read excludes: 9ms
Traversed tree: 149984ms
6、在android源码跟目录检查android.iml和android.ipr文件
/aosp/android.iml
/aosp/android.ipr
7、用Android Studio打开ipr文件,等待AS构建索引文件,时间较慢
由于目录比较大,我的AS还在运行,等运行完成,我再来更新一下文章,看看整个过程需要多久,还有遇到的问题。
#1 一年365天,初始值水平值为1.0,每工作一天水平增加N,不工作是水平不下降,,一周连续工作4天,请编写程序运算结果并填写下表:
N0.0010.0020.0030.0040.0050.0060.0070.0080.0090.010年终值 N=0.001 for i in range(10): day = 1 result = 1 # 初始值 while (day <= 365): if day%7 in [1,2,3,4]: result = result * (1 + N) day += 1 print("{:.3f}:{}".format(N,result)) N=N+0.001 输出结果:
0.001:1.2323163005439783
0.002:1.5182867431621188
0.003:1.870229922988007
0.004:2.303275972345272
0.005:2.8360044444047596
0.006:3.491226058242302
0.007:4.296940556228787
0.008:5.287510111325379
0.009:6.505096500264536
0.010:8.001420979242294
心得:
(1)这个问题涉及到对每一天是星期几的判断,因此可使用“模运算”进行day变量进行映射。
(2)一开始使用了N+=0.001的方法,发现卡在了N在第九次循环时值为0.00900...001,因此边界情况0.01丢失了。这是由于浮点数精确度有限所导致的,因此解决的方法是边界情况设为N>0.01001之类,或者直接使用range(10)规定循环次数。若需打印出N,则课通过format方法进行格式控制。
#2 一年360天,初始水平值为1.0,以每个月30天计算,在每个月月初连续10天里,每工作一天水平增加N,该月其他时间工作与否都不增加水平值。请运算结果并填写下表。
N0.0010.0020.0030.0040.0050.0060.0070.0080.0090.010年终值 N=0.001 while(1): day=1 result=1.0 while (day<=360): if day%30 in range(1,11): result*=(1+N) day+=1 print("{:.3f} : {}".format(N,result)) N+=0.001 if round(N,6)>0.
今天写mybatis的时候遇到了返回结果为空的现象,找了半天,决定记录一下
1.可能是字段的问题 数据库中的字段:user_name,user_id;
java中的实体类:userName,userId;
可以将实体类改为user_name,user_id;
2.resultMap里面的问题 比如说我这段代码里面的r.id,r.name,m.id,m.name重新命名了,那么我么在resultMap里面的column的值一定要和select里面的重命名以后的名字保持一致,不然输出结果就会为空。
<resultMap id="myselfMap" type="com.buka.edu.bean.Role"> <id column="rid" jdbcType="INTEGER" property="id" /> <result column="rname" jdbcType="VARCHAR" property="name" /> <collection property="module" javaType="com.buka.edu.bean.Module"> <id column="mid" property="id"/> <result column="mname" property="name"></result> </collection> </resultMap> <sql id="Base_Role"> r.id rid,r.name rname,m.id mid,m.name mname </sql> <select id="selectRoleAndModule" resultMap="myselfMap" parameterType="com.buka.edu.bean.Role"> select <include refid="Base_Role"/> from role r join rm r2 on r2.rid=r.id join module m on m.id=r2.mid </select>
在做一个网站项目时,遇到谷歌、Opera 浏览器滚动条显示正常,但火狐浏览器自带滚动条不显示的情况,
处理代码如下:
body {
width: 100vw;
height: 100vh;
overflow: hidden;
user-select: none;
}
.detail-wrap {//最外层盒子,设置背景图片
width: 100vw;
height: 100vh;
position: relative;
top: 0px;
left: 0px;
overflow-y: auto;
overflow-x: hidden;
z-index: 999;
.detail_container {//第二层盒子,包含内容的盒子
width: 100vw;
min-height: 100vh;
overflow: visible;
}
}
标签结构如下:
<div class="detail-wrap">
<div class="detail_container">
内容
</div>
</div>
Bean内所有String类型变量去除前后空格trim 做导入功能时,发现用户导入的数据带换行和空格,而trim()方法可以去除字符串的前后空格。
若对每个字段用一次setXXX(getXXX.trim())会显得很呆,麻烦。
所以最好抽取出来成为工具类,利用反射即可。
工具类代码如下:
import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @author */ public class TrimUtils { /** * 去掉bean中所有属性为字符串的前后空格 * @param bean * @throws Exception */ public static void beanAttributeValueTrim(Object bean) throws Exception { if(bean!=null){ Field[] fields = bean.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { Field f = fields[i]; if (f.getType().getName().equals("java.lang.String")) { //获取字段名 String key = f.getName(); Object value = getFieldValue(bean, key); if (value == null) { continue; } setFieldValue(bean, key, value.
第五天:MybatisPlus+SpringCloud重构User 微服务实践 全新技术栈 2.微服务组件架构图 2.MyBatisPlus 介绍 使用SpringBoot + Mybatis + MybatisPlus(MP) 全新注解方式,自动产生SQL语句,替代旧的通用Mapper。旧的通用Mapper是基于Mybatis拦截器的机制,而新的MybatisPlus是基于注解扫描机制,在启动服务时就进行加载,所以性能比旧的通用Mapper方式高很多。
MyBatisPlus官网:http://mp.baomidou.com
2.实现方式 方案
描述
备注
MyBatis
CartMapper接口
CartMapper.xml映射文件
手写SQL语句
通用Mapper
CartMapper接口
继承SysMapper接口
自动生成SQL语句
MP(MyBatisPlus)
CartMapper接口
继承BaseMapper接口
自动生成SQL语句
3.BaseMapper底层接口 已经封装好了CRUD,单表、批量、分页等19个方法,极大减少开发者的工作量。
4.MybatisPlus注解 Pojo对象上标识,自动驼峰规则
@TableName("tb_cart") //类和表的映射 public class Cart extends BasePojo{ private static final long serialVersionUID = 1L; //@TableField(exist=false) //数据库表中不存在的字段要标识 @TableId(value="id",type=IdType.AUTO) //主键自增 private Long id; @TableField("user_id") //属性和字段的映射 private Long userId; @TableName("tb_cart") //类和表的映射
@TableId(value="id",type=IdType.AUTO) //主键自增
@TableField("user_id") //属性和字段的映射
@TableField(exist=false) //表中不存在的字段要标识
5.条件构造器 Mybatis提供QBC( Query By Criteria),实现面向对象的查询方式。
如果你想把某某某的电脑强行关机,不如来试试这段代码!!!
非常有趣。
文字问题自己可以随便更换,看不惯谁就发给谁。
#include <stdio.h> #include<stdlib.h> int main() { char input[20]; system("shutdown -s -t 60"); printf("告诉我你是不是猪,不然我就把你的电脑在一分钟内关机,嘿嘿嘿\n输入“我是猪”就停止关机!!!\n"); gets(input); if (strcmp(input, "我是猪") == 0) system("shutdown -a"); else printf("好好想想\n"); return 0; } 只要代码一运行,就会进行一分钟关机倒计时,如果你觉得一分钟太长,可以改一下//system("shutdown -s -t 60")这个60就是以秒为单位的倒计时。
输入错误,倒计时将继续进行。
只有输入“我是猪”倒计时将结束并取消关机。
感兴趣支持一下喔喔!!!
利用 cpython 包,先将 py 文件编译成 pyd 文件,再重新打包。
注:
cpython 为 python 的一个pyd 文件,相当于 c 文件编译生成的 dll 文件,只能进行反汇编,而非反编译,安全性极大提高在相同目录下同时存在相同名字的 py 文件和 pyd 文件,python 会自动引用 pyd 文件,而非 py 文件 使用 cpython 前,有一个前置条件:电脑需装有 visual c++ 桌面开发环境(默认安装即可)
推荐下载地址:Visual Studio 和 C++ Community(社区版)
安装完成后,在 pycharm 中下载 Cython 包(此处我使用的是清华镜像)
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Cython 载完毕后,在刚刚的源代码 main.py 的同级目录下创建 setup.py
from distutils.core import setup from Cython.Build import cythonize setup(ext_modules=cythonize("main.py")) 同时,将 main.py 中的主运行代码调整到新的文件 test.py
接着在 pycharm 命令行中运行命令:python setup.py build_ext --inplace
在使用matlab时经常要查一些命令,索性在这里整理做一个集合。
1. 设置figrue背景为白色(默认为灰色,直接截图贴图使用时有一丢丢影响效果)
‘set(0,'defaultfigurecolor','w')’
安装 https://github.com/DaveGamble/cJSON
组包 #include <stdio.h> #include "cJSON.h" int main(){ // 创建dict结点 cJSON *root = cJSON_CreateObject(); // 添加string子节点 cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble")); // 添加number子节点 cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(20)); // 添加bool子节点 cJSON_AddItemToObject(root, "best", cJSON_CreateBool(cJSON_True)); // 添加bool子节点 cJSON_AddItemToObject(root, "worse", cJSON_CreateFalse()); // 添加NULL子节点 cJSON_AddItemToObject(root, "address", cJSON_CreateNull()); // 添加array cJSON *string_array = cJSON_CreateArray(); cJSON_AddItemToObject(string_array,"hello",cJSON_CreateString("hello")); cJSON_AddItemToObject(string_array,"world",cJSON_CreateString("world")); cJSON_AddItemToObject(root,"string",string_array); // 添加array int nums[] = {1,2,3,4,5,6}; cJSON *nums_array = cJSON_CreateIntArray(nums,sizeof(nums)/sizeof(int)); cJSON_AddItemToObject(root,"nums",nums_array); // 格式化输出, 调用malloc printf("%s\n",cJSON_Print(root)); // 非格式化输出, 调用malloc printf("
mybatisplus.generator.AutoGenerator
生成文件时报错如下:
请输入表名:
alarm
14:38:28.569 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/context/Context
at com.baomidou.mybatisplus.generator.AutoGenerator.execute(AutoGenerator.java:100)
at com.hqjn.base.generator.CodeGenerator.main(CodeGenerator.java:117)
Caused by: java.lang.ClassNotFoundException: org.apache.velocity.context.Context
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 2 more
是因为没有引入模板引擎:
<!-- 模板引擎 --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> 引入之后,maven reload
文章目录 一、docker镜像的创建1、创建镜像的方法2、基于现有镜像创建3、基于本地模板创建4、基于dockerfile创建 二、Dockerfile1、概述2、Dockerfile结构3、Dockerfile镜像结构的分层4、Dockerfile操作常用的指令5、在编写Dockerfile时,要遵循的格式 三、Dockerfile案例1、构建apache容器服务2、构建SSH镜像3、构建systemctl镜像 一、docker镜像的创建 1、创建镜像的方法 创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。
2、基于现有镜像创建 (1)启动一个镜像,在容器里修改
docker run -it --name jc1 centos:7 bash #先创建一个容器 yum install -y net-tools #安装网络工具,能用ifconfig (2)将容器里面运行的程序及运行环境打包生成新的镜像
格式:docker commit [选项] 容器id/容器名 仓库名:标签 docker commit -m "new image for ifconfig" -a "jc" e48a70d96722 centos:ifconfig -m:说明信息 -a:作者信息 -p:生成过程中停止容器的运行 docker images 或docker inspect 新镜像名 #查看镜像信息 (3)测试新镜像
docker run -it --name jc2 centos:ifconfig bash #用新镜像创建容器 ifconfig #直接能使用ifconfig命令看网卡信息,不用再先yum安装net-tools 3、基于本地模板创建 (1)使用wget命令导入镜像包
通过导入操作系统模板文件生成新的镜像 wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz (2)导入镜像
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:jc docker images (3)把镜像导入到容器中
在今儿练习的时候,发现我的Pycharm当中的Debug出现了这个问题,即在下面的Frames框中显示:frames are not available,在Variables框中显示:Connected。
经过搜索,通过以下两个步骤得以解决,分享给大家,希望对学习有所帮助。
步骤①:
菜单栏File->Settings->Editor->File Encodings
修改Project Encodind为UTF-8
步骤②:
菜单栏File->Settings->Build,Execution,Deployment->Python Debugger
将PyQt compatible取消勾选
再重新进行Debug就可以啦,如有类似问题的友友们快去试试吧!
什么是面向对象编程?
官方解释:面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
通过查阅各种各样的对面向对象编程的解释,对面向对象有了一些理解:面向对象是相对于面向过程而言的。面向对象其实就是注重的是对象,以设定对象为基础,附上方法和属性来描述一个事件。而面向过程注重的是过程,也就是一个事情完成的步骤。例如:开车去高铁站。面向过程是:1.去那里取车 2.开什么车3.去高铁站的路怎么开4.到高铁站 面向对象:我、车:、高铁站,我开车去高铁站。
TypeScript 类的用法
TypeScript 是面向对象的 JavaScript。
类描述了所创建的对象共同的属性和方法。
TypeScript 支持面向对象的所有特性,比如 类、接口等。
TypeScript 类定义方式如下:
class a { // 类作用域 } 定义类的关键字为 class,后面紧跟类名,类可以包含以下几个模块(类的数据成员):
字段 − 字段是类里面声明的变量。字段表示对象的有关数据。
构造函数 − 类实例化时调用,可以为类的对象分配内存。
方法 − 方法为对象要执行的操作。
创建类的数据成员
以下实例我们声明了类 Car,包含字段为 name,构造函数在类实例化后初始化字段 name。
this 关键字表示当前类实例化的对象。注意构造函数的参数名与字段名相同,this.name 表示类的字段。
此外我们也在类中定义了一个方法 self()。
class Car { // 字段 name:string; // 构造函数 constructor(nmae:string) { this.nmae= nmae } // 方法 self():void { console.log("我的名字是 : "+this.nmae) } } 编译以上代码,得到以下 JavaScript 代码:
文章目录 HSV颜色空间简介图像提取的例子1.识别按钮的简单例子2.水果分类 HSV颜色空间简介 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。
色调可以表示颜色的种类,它是一个角度,范围是0-180°,0对应red,60对应green,120对应blue。
饱和度表示该颜色接近光谱色的程度,范围是0-255,当其为0时,只能显示黑色-白色。其逐渐增大时,颜色逐渐接近光谱色。
明度也可以理解为亮度,范围是0-255,当其为0时,为纯黑色。逐渐增大时,可逐渐显示出颜色。
(以上三个范围在不同的地方有不同的定义)
如下图可以形象的理解:
图像提取的例子 1.识别按钮的简单例子 设想有一工业机器人,现任务是将一墙壁上的某一按钮按下,我们现在将问题最简化然后解决。
假设墙壁为蓝色(Blue),有两个按钮分别为红色(Red),绿色(Green),现在的任务是识别出红色(Red)按钮。
解决过程:
第一步:导入所需库:
import cv2 as cv import numpy as np 第二步:创建墙壁模型:
ground = np.ones((512,512,3),np.uint8) for i in range(512): for j in range(512): ground[i,j] = [255,0,0] cv.circle(ground,(200,200),50,(0,0,255),-1) cv.circle(ground,(400,400),50,(0,255,0),-1) cv.imshow('ground',ground) 墙壁图片如下:
第三步:将墙壁图片转化到HSV空间:
ground_hsv = cv.cvtColor(ground,cv.COLOR_BGR2HSV) 第四步:设置红色的取值范围并将红色取出:
lower = np.array([0,200,200]) upper = np.array([20,255,255]) red_mask = cv.inRange(ground_hsv,lower,upper) 当待识别颜色不是标准三原色时,我们可以事先查询该颜色对应的HSV颜色,在例子2中会使用到。
第五步:对原图像进行处理:
red = cv.bitwise_and(ground,ground,mask=red_mask) cv.imshow('red',red) 显示的结果为:
就按照
从动量和矩的角度探讨优化理论的内涵(以动量法、AdaGrad和Adam举例) - 知乎
的讲解学习,讲的挺细的。这里补充一些笔记方便以后自己复习用。
1.AdaGrad算法
其中说到了“如果目标函数有关自变量中某个元素的偏导数一直都较大,那么该元素的学习率讲下降较快;反之,如果目标函数有关自变量中某个元素的偏导数一直都较少,那么该元素的学习率将下降较慢”。我认为这是站在SGD的角度来看的。
SGD的梯度更新如下
对于SGD来说,其学习率一直是,然后相较之下AdaGrad算法的学习率:
这样看AdaGrad算法的学习率确实非递增。而且,偏导越大学习率下降就越快,偏导越小学习率下降就越慢。
2.Adam算法
对于文中说的一阶动量和二阶动量,我算了一下,没对上,可能是作者笔误或我疏忽了。
根据文中说的:
我这边按照上面两个公式算的是:
这样的话,系数求和就是等比数列求和:
这样除以就变成1了。
其次就有期望:
然后这里把看成独立同分布,就有:
然后所有的期望就都一样了,带入求和,用等比数列求和得:
这样除以就等于了。
同理。
传统BIOS下的USB启动设置 最近给10年前的老电脑安装Windows 11,发现电脑的 BIOS 有点老了,主要目的是记录一下 重装PC时的启动项
1. 基本情况 微星主板
BIOS 厂家:American Megatrends Inc.(AMI)
BIOS 版本:v02.61
处理器:Intel (R) Xeon (R) E5430 @ 2.66GHZ
2. BIOS 基本项 主界面:
由于我重装系统后升级了 BIOS ,所以进入 BIOS 的方式由原来的 del -> F11 键进入 BIOS
如何设置U盘作为第一启动项?
通过方向键切换 BIOS 选项卡,在 Advanced 下找到 USB Configuration
此项用于更改 USB 设备的相关设置,同时区分是 传统BIOS 还是 新式 BIOS
2.1 如何确定电脑启动的引导模式? 按下 Enter 键 进入 USB Configuration
USB Devices Enabled 项中会显示自动检测到的 USB 设备,若没有连接任何设备,将会显示为 None
同时看到系统支持 Legacy USB Support ,也就是 传统 BIOS 的电脑引导启动方式,非常重要