栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

垃圾回收,字符编码的发展史与使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

垃圾回收,字符编码的发展史与使用

今日内容
垃圾回收机制
  • 语言介绍

      python会自动帮我们清理那些没有被绑定的数据值(使用不了的),这样
      更能释放内存的空间,保证电脑的性能。
    
  • 机制有三个阶段

    第一阶段

    引用计数:
    什么叫引用计数?就是统计那些数据值身上的绑定值是多少个;如果是0,那就为垃圾,相反,则继续保留。

eg:

name = 'jason'  # 这里计数为1,因为只要name一个绑定值
name1 = name  # 这里计数增加为2
del name1  # 这里删除了一个,计数减一为1

注意,这里有一个坑,叫循环引用

第二阶段

标记清除:
专门解决第一阶段的循环引用,将内存中产生的所有值都检查一遍,观察是否存在循环引用,如果有就做上标记,之后再一次清除。

eg:

l1 = ['jason']
l2 = ['kevin']
l1.append(l2)  # 计数为2
l2.append(l1)  # 计数为2
当我们解除绑定后,计数量都减一

第三阶段
分代回收

将标记起来的每隔一段时间检查一遍,然后将计数为一个清除掉,但是这样消耗的大

为了减轻垃圾回收机制的消耗,然后发明了三大管理来解决资源消耗的问题


越往下检查频率越低

字符编码简介

就是通过二进制0,1组成的编码串,形成我们能够看的懂得东西,那么我们还需要属于自己得编码本

计算机是由美国人发明的,所以刚开始,只有属于英文的编码本,但是随着我们国家的强大,也可以用计算机了,然后我们也发明了属于自己的编码本。

字符编码的发展史

字符编码的发展史一共分为三个阶段:

1.一家独大

计算机是由美国发明的,所以刚开始就只有英文的编码本(ASCII码);ASCII码里只有英文字母与字符的编码信息
用1bytes来存储字符
需要我们记住的:A-Z:65-90;a-z:97-122

2.群雄割据

随着时代的发展,我们国家和其他一些国家的快速发展,我们也可以用电脑了。但是电脑只有关于英文的翻译,却没有属于自己文字的编码本。所以我们就自己发明自己的编码本。
中国:GBK (里面存储中文)
至少用2bytes来存储字符
韩国:Euc_kr

3.天下一统

各用各的不能联立起来,别人的发给我,我翻译不了
于是发明了万国码
万国码(unicode):兼容万国字符;解决了不能兼容的问题
存储数据的话至少2bytes起步,但是英文还是一个。
utf是针对unicode的优化版本,主要是utf8
注意:内存用unicode,硬盘用utf8

字符编码实际操作

只有字符串才能参与编码,其他类型需要先转换成字符串才可以编码

  • 编码:(encode)

      就是用我们的字符去让计算机看懂我们的意思
    
  • 解码:(dencode)

      相反,就是计算机的字符转换成我们能看懂的字符
    

注意:当出现乱码的时候,是用什么类型编的,就用什么类型解

	基于网络传输的时候,数据必须是二进制

eg:

s1 = '加油干'
res1 = s1.encode('gbk')
print(res1)  # 编码
res2 = res1.decode('Euc_kr')
print(res2)  # 乱码
res3 = res1.decode('gbk')
print(res3)  # 正常输出
  • 解释器层面

python2解释器默认的编码是ASCII码
python3解释器默认的编码是utf8

当我们想使用python2进行操作的时候,我们需要在第一行加上
# coding:utf8
# -*- coding:utf8 -*- # 美化版本

而且,我们在写字符串的时候,还要在每个前面加一个u

文件操作简介
  • 什么是文件?

      是操作系统提供给用户可以直接操作硬盘的快捷方法
    
  • 代码操作文件流程

1.创建文件
2.打开文件
3.编辑文件
4.保存文件
5.关闭文件

  • 结构

f.open() # 打开文件
f.close() # 关闭文件

推荐使用:

with open () as f:
pass

注意:

使用关键字打开文件,填写路径为了防止特殊符号,可以在前面加r

open(r'a.txt')  # 相对路径
open(r'D:pythonday09a.txt')  # 绝对路径
res = open(r'a.txt', 'r', encoding='utf8')
今日作业
  • 作业一
    1.统计列表中每个数据值出现的次数并组织成字典战士
    eg: l1 = [‘jason’,‘jason’,‘kevin’,‘oscar’]
    结果:{‘jason’:2,‘kevin’:1,‘oscar’:1}
    真实数据
    l1 = [‘jason’,‘jason’,‘kevin’,‘oscar’,‘kevin’,‘tony’,‘kevin’]

代码:

l1 = ['jason', 'jason', 'kevin', 'oscar', 'kevin', 'tony', 'kevin']
l2 = {}  # 创建一个空字典,然后通过循环放数据值
for i in l1:
    sum = l1.count(i)  # 统计出现的次数
    l2[i] = sum  # 健在则为修改,健不在则为新增
print(l2)
输出结果:
{'jason': 2, 'kevin': 3, 'oscar': 1, 'tony': 1}
  • 作业二

2.编写员工管理系统
1.添加员工信息
2.修改员工薪资
3.查看指定员工
4.查看所有员工
5.删除员工数据
提示:用户数据有编号、姓名、年龄、岗位、薪资
数据格式采用字典:思考如何精准定位具体数据>>>:用户编号的作用

代码:

l1 = {'001': {'name': 'jason', 'age': '25', 'post': '讲师', 'poy': '3w'},
      '002': {'name': 'kevin', 'age': '28', 'post': '运营', 'poy': '2.5w'}
      }
user_name = [
    {'name': 'lzq', 'pwd': '123'},
    {'name': 'gsy', 'pwd': '520'}
]  # 创建的一个多管理人员表
while True:
    print('''
            1.添加员工信息
            2.修改员工薪资
            3.查看指定员工
            4.查看所有员工
            5.删除员工数据
        ''')
    name = input('管理员是:').strip()
    pwd = input('管理系统登录密码是:')
    if {'name': name, 'pwd': pwd} in user_name:  # 判断输入的name,pwd是否在user_name里
        print('管理员验证成功!')
        while True:
            order = input('请输入你的指令:')
            if order == '1':
                i = input('请输入你需要添加员工的编号: ').strip()
                if i in l1:
                    print('已经存在')
                else:
                    name = input('请输入新增员工的姓名:')
                    age = input('请输入新增员工的年龄:')
                    post = input('请输入新增员工的职业:')
                    poy = input('请输入新增员工的薪资:')
                    l2 = l1.fromkeys([i], {'name': name, 'age': age, 'post': post, 'poy': poy})  # 根据fromkeys快速创建一个字典
                    l1.update(l2)  # 然后再将创建好的更新到l1中
                    print(f'员工:{i}添加成功')
                continue
            elif order == '2':
                i = input('请输入你要修改信息的员工编号:').strip()
                if i in l1:
                    print(f'''
                        ---------------------info----------------------
                        id:{i},username:{l1[i]['name']},age:{l1[i]['age']},post:{l1[i]['post']},poy:{l1[i]['poy']}  # 根据字典按K取值,去输出
                        ---------------------end-----------------------
                    ''')
                    l1[i]['poy'] = input('请输入你修改后的金额:')  # 健在则为修改
                    print('成功修改薪资!')
                else:
                    print('查无此人')
                    continue
            elif order == '3':
                i = input('请输入你要查看的员工编号:').strip()
                if i in l1:
                    print(f'''
                        ---------------------info----------------------
                        id:{i},username:{l1[i]['name']},age:{l1[i]['age']},post:{l1[i]['post']},poy:{l1[i]['poy']}  # 根据字典按K取值,去输出
                        ---------------------end-----------------------
                    ''')
                else:
                    print('查无此人')
                    continue
            elif order == '4':
                for i in l1:
                    print(f'''
                        ---------------------info----------------------
                        id:{i},username:{l1[i]['name']},age:{l1[i]['age']},post:{l1[i]['post']},poy:{l1[i]['poy']}  # 根据字典按K取值,去输出
                        ---------------------end-----------------------
                    ''')
                continue
            elif order == '5':
                i = input('请输入你要辞退的员工编号:').strip()
                if i in l1:
                    l1.pop(i)  # 通过直接删除编号,删除员工信息
                    print(f'{i}员工已被辞退')
                else:
                    print('查无此人')
                    continue
            else:
                res = input('其他指令为退出,是否退出?(y/q)')
                if res == 'y':
                    print('不小心输错了')
                    continue
                else:
                    print('退出成功')
                break
    else:
        print('你不是管理员,拒绝登录')
        continue
    break
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998967.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号