自从 由美国主导openAi公司开发的gpt大模型问世以来,人工智能技术一直在推动整个科技行业发展,所以当下全球大公司都在布局Ai产品应用,这是这二年出了好几千个Ai产品应用,全球大大小小甚至超出近上万的Ai模型,当下的百模大战,犹如春秋战国的百家争鸣。不少作因此定为这二年为人工智能爆发元年,很多所以企业都在尝试将自己的业务和大模型融合,造成了当下越来越多的企来需要懂Ai应用开发,企业不一定需要自己开发大模型,只需要本地购建大模型,进行参数微调,业务对接,就可以将自己的业务和Ai融合,由于基于python人工智能开发,大部份教学都 是python方便实验,是一种解释型、面向对象、动态数据类型的高级程序设计语言。被称为胶水语言,就导致在人工智能时代,python会得到越来越的应用场景,加上python 开发快捷,效率高,在初创公班司最早的跑出产品demo ,所以也造 成了越来越多公司在采用python做开发,并且pyton 语言易于表达的天性,广泛应用三维设计,Python 应用场景广泛,软件编程 ,人工智能, 机器学习,数据分析,科学研究,等领域,所以作为一个程序员python是当下必要学的一门语言,本次整理文档就是以python 为基础,涉及数据获取,分析,整理,大模型接入,接口调用,业务融合,方便家快速学习的文档

所以整理一下python 基础应用开发,

初始环境,安装python  并配置编辑器,设置编码为utf-8

基础概念:进制与字节

  • ASCII 255        1bytes   最早的计算机内存和设计的原因,内存很少,加上当时设计的时候,只考虑了以英文为主的编码,这个只能装256位表达的字节编吗叫  Ascll
  • 1980 gb2312    7xxx      当计算机内存加大发发展到1980时候,开始支持中文编码,包括6763个汉字和682个其它符号。
  • 1995 GBK1.0    2w+   增加少数民族字符,增加各种符号字节
  • 2000 GB18030   27xxx
  • unicode 2bytes     全球统一字节,支持所有国家的字节表示
  • utf-8en: 1byte,zh: 3bytes    经过压缩优化后的字节,也就是我们以后优先选 用的字节编码

进制,

算机二进制(Binary)的原理是其中只包含两种状态,通常表示为0和1。这种二进制系统是计算机内部信息处理的基础。

计算机使用二进制的原理和和物点有以下几点:

  1. 原理:计算机内部使用的主要组件是电子开关,也称为逻辑门。逻辑门只有两个状态,打开或关闭,与二进制的0和1对应。就是通电和不通电二种状态

  2. 简单可靠:采用0,和1来表示态  可以简化计算和设计,避免了复杂情况下的混乱和错误。

  3. 容易实现:电子元件在高电压和低电压之间切换更容易实现,从而方便了电路设计和工程实现。

  4. 兼容性:二进制是一种通用的表示方式,在不同类型的计算机和系统中都能够得到良好的兼容性。
    但是如果要表过一个很长的数字二进制就太难抄写了,为了好观看,所以发明8进制,和16进制,但是计算机本质上只认识二进制。计算机中的任何数据,包括文字、数字、图像用二进制表达内容太长了,
    都可以转换为二进制编码存储和处理。计算机通过逻辑门执行二进制运算,例如加法、乘法等。同时,二进制系统还可以通过编码方法表示其他进制,如十进制、十六进制等。这【了

字符串处理预先了解,为了快速入门,和案例演示,先了解一下以下常用方法。

python处理字符串有四种党见方法,模板方式和变量占位符,以下示例中name是通过input 接收的变理,主要是演示如何格式化输出变量。官方推荐推荐使用第三种

方式一:string = ''' name  '''+ name + ''' 随意字符'''   直接拼变拼接,会在内存中创建很多内存,不建议使用,

方式二  str = ''' Name:%s    age: %s ''' %(name,age)

方式三,str = ''' name:{_name}'''.format(_name = naem)  推荐

方式四,通过花括号加索引方法  str3 = ''' name: {0}''.foramt(name)

关于字符串的演示代码:

首先定义了变量 ​name, age, job, salary​,然后通过 ​%​操作符进行字符串格式化,将这些变量传入字符串模板中。最后打印出完整的信息。但是age 定是数字,

name = "Alice"
age = 30
job = "Engineer"
salary = "$50,000" info = '''info of %s
Name:%s Age:%d Job:%s Salary:%s''' % (name, name, age, job, salary) print(info)

  

如果值不是数字是会报错,可以之前先转换。age= int(input("age"))转换变量的方法就是一个常量类型后面加一个括号加上变量str(name),打印类型用关健字,type()

例:name = input("name")

age = int(input("age"))

print(type), type(str()age)

二 输出输入语句

例:python3接收一个输入语句用input,默认接收后类 型为string  ;  老版本python2.7用raw_input  ,

在Python 2.7中,​input()​ 函数接受用户输入并将其作为Python表达式进行求值,因此如果用户输入的是字符串,会被当作变量名或语句进行处理。这意味着,如果用户输入字符串,需要加上引号("")包裹。而 ​raw_input()​ 函数返回用户输入的原始字符串,不会对其进行求值,始终将用户输入看作是字符串。所以python2.7不建议使用input ,考虚到老版本的python也经过期不用,所以这儿不作详细示例,python2.x举例来说:

  • 使用 ​input()​ 函数时,用户输入 ​hello​,会被当作变量名去寻找,如果没有定义变量 ​hello​ 就会报错。
  • 使用 ​raw_input()​ 函数时,用户输入 ​hello​,会直接返回字符串 ​'hello'​,不会做任何其他处理。

因此,如果希望简单地接收用户输入字符串,应该使用 ​raw_input()​ 函数。但是在python3以后都是用input

# 接收用户输入
num_str = input("请输入一个数字:") # 尝试将输入转换为整数类型
try:
num = int(num_str)
print("您输入的数字是:", num)
except ValueError:
print("输入错误,请确保输入的是一个数字。")
在接收用户输入时,如果需要不显示用户输入显示为密文,需要导入加密的工具,getpass 

例:以下代码功能是先定义二个变量,然后接收用户输入,最后判断用户是否输入正确

import getpass
username = 'aaa'
password = 'abc123'
input_username = input("username:")
input_password = input("password:")
if input_username == username and input_password == password:
print(f"Welcome user {input_username} login....")
else:
print("Invalid username or password!") 

  代码结构和循环语句

示例二,猜年龄,接收一个框让用户猜预定的年龄,如果猜得不对给于提示,
of_age = 100
pass_age = int(input("guess age"))
if pass_age == of_age:
print("yes,you got it.")
elif pass_age > of_age:
print("应该更小")
else:
print("猜大了")

 但是这种直接写if   代码只会流程运行一次,所以只会猜一次,为了更加接近生活,我们不是应该让用户多输几次,直到用户输入正确为止,就要用到循环语句。循环有几种方式,可以根据条件徨环几次,还可以用条件一直徨环,直到条件结束,这个条件可以直接写成true  也可以由一个变量来控制

while True:
guess_age = int(input("guess age:"))
age_of_oldboy = 18 # 假设 oldboy 的年龄是18岁 if guess_age == age_of_oldboy:
print("yes, you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")

  用变量来控制的写法可以参考:

condition = True  # 设定一个控制条件,初始值为True

while condition:
guess_age = int(input("guess age:"))
age_of_oldboy = 18 # 假设 oldboy 的年龄是18岁 if guess_age == age_of_oldboy:
print("yes, you got it.")
condition = False # 设置条件为False,退出循环
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")

  阶段示例:以下示例:编写一个猜年龄的代码,如果猜错三次,自动退出,如果猜对,立即退出

count = 0
while True:
if count == 3:
break
guess_age = int(input("guess age:"))
age_of_oldboy = 18 # 假设 oldboy 的年龄是18岁
if guess_age == age_of_oldboy:
print("yes, you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!") count += 1

试例二,如果连猜三次,询问对方还要不要猜,如果用户输入y 表示继续玩,

count = 0
age_of_oldboy = 18
while count < 3:
guess_age = int(input("Guess the age: "))
if guess_age == age_of_oldboy:
print("Yes, you got it.")
break
elif guess_age > age_of_oldboy:
print("Think smaller...")
else:
print("Think bigger!")
count += 1
if count == 3:
continue_confirm = input("Do you want to keep guessing? (y/n)")
if continue_confirm != "y":
count = 0

  

 

优化代码,将条件变量设为count

count = 0
age_of_oldboy = 18 # 假设 oldboy 的年龄是18岁 while count < 3:
guess_age = int(input("guess age:")) if guess_age == age_of_oldboy:
print("yes, you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!") count += 1

  不同的编程语言,有自己的特性,在python   中 while  可以和else 一起使用,举个例子,甚至是for 都可以和else  配套一起使用,

count = 0
while count < 5:
print("count:", count)
count += 1
else:
print("循环结束")

  对于for 和 else  一起使用的示例。这儿的else 的使用意思是执行完for 后会来执行,除非执行了bread  结构语句破坏了,就不执行里面的语句。

fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
if fruit == "orange":
print("橙子在水果列表里!")
break
print(fruit)
else:
print("橙子不在水果列表里!")

 range 函数了解 这儿插一下关于一个生成数字的函数的介绍使用:range可以生成整数,用于循环结构中

range()​函数在Python中用于生成一个整数序列,常用于循环结构中。​range()​函数有三种常见的用法:

​​range(stop)​:生成从0开始、小于stop的整数序列。
for i in range(5):
print(i)
# 输出结果为:0, 1, 2, 3, 4
for i in range(5):
print(i)
# 输出结果为:0, 1, 2, 3, 4

​​range(start, stop)​:生成从start开始、小于stop的整数序列。
for i in range(2, 5):
print(i)
# 输出结果为:2, 3, 4
for i in range(2, 5):
print(i)
# 输出结果为:2, 3, 4

​​range(start, stop, step)​:生成从start开始,以step步长递增或递减,直到小于stop的整数序列。
for i in range(0, 10, 2):
print(i)
# 输出结果为:0, 2, 4, 6, 8
for i in range(0, 10, 2):
print(i)
# 输出结果为:0, 2, 4, 6, 8

需要注意的是,​range()​函数生成的是一个可迭代对象,不是实际的列表。如果需要将其转换为列表,可以使用 ​list()​函数:

完成以下真实案例时,

需要了解一上字典和list ,列表就是一组数据,类似于装一堆用户名,比如张三,李四,这样,以下是LIst的解释和常用方法

在Python中,列表(List)是一种有序、可变且可以包含各种类型元素的数据结构。它是Python中最常用的数据类型之一,可以存储任意多个元素,这些元素可以是相同的类型或不同的类型。
列表使用方括号 ​[]​来表示,其中的每个元素以逗号分隔。例如,下面是一个包含整数和字符串的列表示例:
my_list = [1, 2, 3, "apple", "banana"]
my_list = [1, 2, 3, "apple", "banana"]​
列表有以下特点:
有序:列表中的元素按照它们在列表中的顺序排序,并且可以通过索引进行访问。索引从0开始,例如 ​my_list[0]​表示列表中的第一个元素。
可变性:列表是可变的,也就是说,可以修改、添加和删除列表中的元素。可以使用列表的方法(例如 ​append()​、​insert()​、​remove()​等)来修改列表。
允许重复:列表允许包含重复的元素。比如,​[1, 2, 2, 3, 3, 3]​是一个合法的列表。
列表是非常灵活且功能强大的数据结构,可以用于存储和操作多个相关的数据。你可以通过索引访问列表中的元素,使用切片操作获取子列表,也可以使用各种方法对列表进行排序、过滤、迭代等操作。
例如,以下是一些常见的列表操作示例:
# 创建一个空列表
my_list = []
# 添加元素到列表末尾
my_list.append("apple")
my_list.append("banana") # 访问列表中的元素
print(my_list[0]) # 输出:apple # 修改列表中的元素
my_list[0] = "orange" # 使用切片获取子列表
sub_list = my_list[1:3] # 获取索引为1和2的元素 # 迭代列表中的元素
for item in my_list:
print(item) # 移除列表中的元素
my_list.remove("banana") # 获取列表的长度
length = len(my_list)
# 创建一个空列表
my_list = [] # 添加元素到列表末尾
my_list.append("apple")
my_list.append("banana") # 访问列表中的元素
print(my_list[0]) # 输出:apple
# 修改列表中的元素
my_list[0] = "orange"
# 使用切片获取子列表
sub_list = my_list[1:3] # 获取索引为1和2的元素
# 迭代列表中的元素
for item in my_list:
print(item)
# 移除列表中的元素
my_list.remove("banana")
# 获取列表的长度
length = len(my_list)​
总之,列表是Python中非常重要和常用的数据结构,它提供了丰富的方法和操作,能够方便地处理和管理多个相关的数据。

  字典最基础了解,字典是用一个大括号装的一个带属性的key和值的数据,

在Python中,字典(Dictionary)是一种无序的、可变的、以键-值(key-value)对形式存储数据的数据结构。字典用花括号 ​{}​表示,每个键值对之间使用冒号 ​:​分隔,键和值可以是任意类型的对象。

字典具有以下特点:

  1. 无序性:字典中的键值对是无序存储的,没有固定的索引顺序。

  2. 可变性:可以添加、修改和删除字典中的键值对。

  3. 键的唯一性:字典中的键是唯一的,每个键只能对应一个值。如果插入新的键值对时,键已经存在,则会更新对应的值。

下面是一个字典的示例:

my_dict = {"name": "Alice", "age": 25, "city": "Beijing"}

在这个示例中,字典 ​my_dict​包含了三个键值对,其中每个键都是一个字符串,每个值可以是任意类型,可以是字符串、整数、列表等。

你可以通过键来访问字典中的值。例如,​my_dict["name"]​将返回字典中键为"name"的值,即"Alice"。

字典还提供了许多方法和操作,可以添加、修改、删除键值对,也可以迭代、合并、复制字典等等。

以下是一些常见的字典操作示例:

# 获取字典中的值
name = my_dict["name"] # 修改字典中的值
my_dict["age"] = 26 # 添加新的键值对
my_dict["gender"] = "female" # 删除键值对
del my_dict["city"] # 检查键是否存在
if "name" in my_dict:
print("Name is present in the dictionary.") # 获取字典的键列表
keys = my_dict.keys() # 获取字典的值列表
values = my_dict.values() # 循环遍历字典的键值对
for key, value in my_dict.items():
print(key, value)

   完整一个登际示例,要求用户输入自己的账号和密码  如果用户的密码这连输出三次失败,则锁定帐户不能在使用,

思路:新建一个空列表,用来记录用户的用户名,程序启动时,先有一个列表用来保存也经被禁用的用户名,然后先要求用户输入用户名,用户输入后去一个list  去查找,如果有这个用户名,则提示过这个用户也禁用,如果没有这个用户名,那么进入最多三次的循环的输入密码代码中,如果正确有,则提示成功,如果三次错误,则将这个用户名存入到list ,代码退出循环到让用户输入用户名界面,

  1. 首先,我们定义了两个列表 ​user_list​和 ​locked_users​,其中 ​user_list​存储了用户的信息(包括用户名、密码和是否被锁定),而 ​locked_users​用来存储被锁定的用户名。

  2. 我们还定义了一个字典 ​wrong_password_count​,用来记录每个用户连续输入错误密码的次数。

  3. 然后,通过循环模拟用户输入用户名和密码的过程,在每次循环中,用户有三次尝试的机会。

  4. 每次用户输入用户名和密码后,我们首先检查用户是否存在于 ​user_list​中,如果不存在则提示用户不存在。

  5. 接着,我们检查用户是否已经被锁定,如果已经被锁定则提示用户已被锁定。

  6. 如果用户存在且未被锁定,则检查输入的密码是否正确,如果正确则提示登录成功并结束程序。

  7. 如果密码错误,我们将该用户记录到 ​wrong_password_count​字典中,并递增错误次数。如果累计错误次数达到3次,则将该用户添加到 ​locked_users​列表中,并将该用户在 ​user_list​中的 ​'locked'​状态设为True,表示该用户已被锁定。

# 存储用户信息的列表
user_list = [
{'username': 'user1', 'password': 'pass1', 'locked': False},
{'username': 'user2', 'password': 'pass2', 'locked': False},
# 在此添加更多的用户信息
] # 存储被锁定用户的列表
locked_users = [] # 记录密码错误次数的字典
wrong_password_count = {} # 模拟用户输入用户名和密码
for _ in range(3):
username = input("请输入用户名:")
password = input("请输入密码:") user_info = None
for user in user_list:
if user['username'] == username:
user_info = user
break if user_info is None:
print("用户不存在!")
continue if user_info['locked']:
print("用户已被锁定,请联系管理员解锁。")
continue if user_info['password'] == password:
print("登录成功!欢迎,", username)
break
else:
if username in wrong_password_count:
wrong_password_count[username] += 1
else:
wrong_password_count[username] = 1 print("密码错误!")
if wrong_password_count[username] == 3:
locked_users.append(username)
user_info['locked'] = True
print("用户名 {} 已经被锁定".format(username))

  方式二,直接标记,如果输出三次则打个标记,如果标记为也禁 用,则提示

# 存储用户信息的列表
user_list = [
{'username': 'user1', 'password': 'pass1', 'locked': False},
{'username': 'user2', 'password': 'pass2', 'locked': False},
# 在此添加更多的用户信息
] def login():
# 获取用户输入的用户名和密码
username = input("请输入用户名:")
password = input("请输入密码:") # 查找用户信息
user_info = None
for user in user_list:
if user['username'] == username:
user_info = user
break if user_info is None:
print("用户不存在!")
return if user_info['locked']:
print("用户已被锁定,请联系管理员解锁。")
return # 检查密码是否匹配
if user_info['password'] == password:
print("登录成功!欢迎,", username)
else:
print("密码错误!")
user_info['locked'] = True
print("您的账号已被锁定, 请联系管理员解锁。") # 运行登录功能示例
for _ in range(3):
login()

  

  python 还有一个很大的优点,具有丰富的模块及生态,所以在解决很多工具的时候很方便,几乎我们想要的功能都有相应的模导和库。导入一个模块的方式,为import,如果是是其三库,则我们可以用pip install 安装到本地,如果是我们自己建的模块是一个文件夹,系统默认找不到自定的模型 ,

  1. 模块导入方式:你可以使用 ​import​语句来导入自定义模块。如果你将自定义模块保存为一个单独的.py文件,可以直接使用 ​import 模块名​ 来导入。

  2. 模块路径:你也可以通过 ​sys.path​来查看Python解释器的模块搜索路径。确保你的自定义模块所在的路径包含在 ​sys.path​中,这样Python解释器才能找到你的自定义模块。

另外:关健字和系统模块不要取相同的名字,否则会出错,或者出现非预期的奇怪结果。假设文件名为sys,但是又在文件中导入了sys系统模块,会出现报错。一般系统中LIb 是放系统模块,site-packages 是放第三方包的文件

import sys

print(sys.path) // 打印环境变量 
pring(sys.argv) //sys.argv​模块在需要从外部动态传入参数的场景下非常有用

import os

res = os.system("dir")   这儿只会属展幕输出结果,返回0表示成功

res = os.popen("dir")  // 打印内存地址   os.popen("dir").read() 输入目录的列表

print("res")

 

python AI 应用开发编程实战 大模型实战基础(一)的更多相关文章

  1. .Net中的并行编程-5.流水线模型实战

    自己在Excel整理了很多想写的话题,但苦于最近比较忙(其实这是借口).... 上篇文章<.Net中的并行编程-4.实现高性能异步队列>介绍了异步队列的实现,本篇文章介绍我实际工作者遇到了 ...

  2. python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  3. Python图形界面开发编程:wxPython(浅尝篇)

    Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下: Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 ...

  4. 巨蟒python全栈开发数据库攻略1:基础攻略

    1.什么是数据库? 2.数据库分类 3.数据库简单介绍 4.安装数据库 5.修改root密码 6.修改字符集 7.sql介绍 8.简单sql操作

  5. 巨蟒python全栈开发数据库攻略2:基础攻略2

    1.存储引擎表类型 2.整数类型和sql_mode 3.浮点类&字符串类型&日期类型&集合类型&枚举类型 4.数值类型补充 5.完整性约束

  6. 华为高级研究员谢凌曦:下一代AI将走向何方?盘古大模型探路之旅

    摘要:为了更深入理解千亿参数的盘古大模型,华为云社区采访到了华为云EI盘古团队高级研究员谢凌曦.谢博士以非常通俗的方式为我们娓娓道来了盘古大模型研发的"前世今生",以及它背后的艰难 ...

  7. Python做web开发,推荐几个能立马上手的小项目

    Python这门优美的语言是非常适合web开发的,基于Python的Django框架简单便捷且很强大. 那么作为新手该如何上手这门语言?一切不敲代码的学编程手段都是扯淡,今天就推荐一些适合新手练手的P ...

  8. 给Python初学者的一些编程技巧

    展开这篇文章主要介绍了给Python初学者的一些编程技巧,皆是基于基础的一些编程习惯建议,需要的朋友可以参考下交换变量 x = 6y = 5 x, y = y, x print x>>&g ...

  9. AI应用开发实战 - 手写识别应用入门

    AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...

  10. AI应用开发实战 - 从零开始搭建macOS开发环境

    AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...

随机推荐

  1. 情侣纪念日网站html5源码教程

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 预览图 直接进入我的网站吧 >> Z_ ...

  2. TienChin-课程管理-创建工程

    创建方式与之前一样,如下奉上 generateCourse 代码. @Test void generateCourse() { String path = "E:\\Desktop\\Tie ...

  3. 总结一个问题:csdn发布文章页面为空或者创作内容管理为空

    总结一个问题:csdn发布文章页面或者创作内容管理为空 解决方案: 打开chrome浏览器的设置: 点击清除数据: 选择高级里清除数据,一般24小时就可以了,不行就7天

  4. 全流程机器视觉工程开发(三)任务前瞻 - 从opencv的安装编译说起,到图像增强和分割

    前言 最近开始做这个裂缝识别的任务了,大大小小的问题我已经摸得差不多了,然后关于识别任务和分割任务我现在也弄的差不多了. 现在开始做正式的业务,也就是我们说的裂缝识别的任务.作为前言,先来说说场景: ...

  5. 【动态内存】C语言动态内存使用常见错误及其避免方法(初学者避雷)

    C语言动态内存使用常见错误及其避免方法(初学者动态内存避雷手册) 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要 ...

  6. static_cast, dynamic_cast与reinterpret_cast的区别

    在C++中,static_cast, dynamic_cast和reinterpret_cast都可用于类型转换,它们在具体使用时有什么区别?此外,更为重要的是,为什么不推荐使用强制类型转换? 1. ...

  7. UVA10225 Discrete Logging 题解

    题目传送门 前置知识 大步小步算法 题意 多组询问,每次询问依次给定 \(p,a,b\),求 \(a^{x} \equiv b \pmod{p}\) 的最小非负整数解,其中 \(a,p\) 互质. 解 ...

  8. NC24158 [USACO 2015 Jan G]Moovie Mooving

    题目链接 题目 题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from ...

  9. Linux dmesg命令使用方法详解

    一.命令简介  dmesg(display message)命令用于显示开机信息.kernel 会将开机信息存储在 ring buffer 中.您若是开机时来不及查看信息,可利用 dmesg 来查看. ...

  10. Ubuntu18.04 Server部署Flannel网络的Kubernetes

    准备服务器 ESXi6.5安装Ubuntu18.04 Server, 使用三台主机, 计划使用hostname为 kube01, kube02, kube03, 配置为2核4G/160G, K8s要求 ...