计算机常用字符有几种?

3、数组实例化有几种方式?

4、Java 中各种数据默认值

5、Object 类常用方法有那些?

6、java 中是值传递引用传递?

8、构造方法能不能重写?能不能重载?

9、内部类与静态内部类的区别?

10、Static 关键字有什么作用?

16、Java 中的包装类都是那些?

17、一个 java 类中包含那些内容?

18、那针对浮点型数据运算出现的误差的问题,你怎么解决?

19、面向对象的特征有哪些方面?

21、接口有什么特点?

22、抽象类和接口的区别?

24、普通类与抽象类有什么区别?

25、什么是接口?为什么需要接口?

26、接口有什么特点?

27、拷贝和浅拷贝的区别是什么?

31、用最有效率的方法算出 2 乘以 8 等于几?

33、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?

34、一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?

4、带集合参数的构造器

6、并发集合和普通集合如何区别?

7、Map 有什么特点

8、集合类存放于 Java.util 包中, 主要有几 种接口

11、Vector( 数组实现、 线程同步)

17、数组和分别比较适合用于什么场景,为什么?

21、请用两个队列模拟堆栈结构?

23、数据结构基础之双向

27、你所知道的集合类都有哪些?主要方法?

30、写一段代码在遍历 ArrayList 时移除一个元素

1、Java 中异常分为哪两种?

2、异常的处理机制有几种?

3、如何自定义一个异常

1、不管有木有出现异常,finally 块中代码都会执行;

3、finally 是在 return 后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管 finally 中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在 finally 执行前确定的;

4、finally 中最好不要包含 return,否则程序会提前退出,返回值不是 try 或 catch 中保存的返回值。

10、Java 异常处理机制的理解?

14、在 Java 异常处理的过程中,你遵循的那些最好的实践是什么?

16、你曾经自定义实现过异常吗?怎么写的?

18、Java 中的异常处理机制的简单原理和应用。

2、字节流如何转为字符流?

3、常用 io 类有那些

4、如何将一个 java 对象序列化到文件里?

6、字节流和字符流的区别?

7、多路复用 IO 模型

8、如何实现对象克隆?

10、什么是 java 序列化,如何实现 java 序列化?

14、NIO 和 IO 对应用的设计有何影响

17、字节流与字符流的区别

19、信号驱动 IO 模型

2、Java 反射创建对象效率高还是通过 new 创建对象的效率高?

3、什么叫对象序列化,什么是反序列化,实现对象序列化需要做哪些工作?

4、哪里会用到反射机制?

5、反射机制的优缺点?

6、实现 Java 反射的类:

7、动态代理是什么?有哪些应用?

10、获取 Class 对象有几种方法

11、除了使用 new 创建对象之外,还可以用什么方法创建对象?

13、反射的实现方式:

14、反射使用步骤(获取 Class 对象、调用对象方法)

1、什么是 java 序列化?

2、保存(持久化)对象及其状态到内存或者磁盘

3、序列化对象以字节数组保持-静态成员不保存

6、序列化用户远程对象传输

8、序列化并不保存静态变量

9、序列化(深 clone 一中实现)

10、Transient 关键字阻止该变量被序列化到文件中

11、如何实现 java 序列化?

12、Transient 关键字阻止该变量被序列化到文件中

13、静态变量的序列化?

七、Java 注解面试题 1、4 种标准元注解是哪四种?

2、什么是注释?他们的典型用例是什么?

3、从标准库中描述一些有用的注释。

5、可以从注释方法声明返回哪些对象类型?

6、哪些程序元素可以注释?

7、有没有办法限制可以应用注释的元素?

10、你怎么能检索注释?这与保留政策有何关系?

11、Q11,是否可以扩展注释?

3、如何在 java 中实现线程

16、有三个线程 T1,T2,T3,如何保证顺序执行?

22、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗 synchronized 关键字最主要的三种使用方式

23、什么是线程安全?Vector 是一个线程安全类吗?

24、Java 中实现多线程有几种方法

26、基于线程池的方式

27、如何停止一个正在运行的线程

由于篇幅有限,完整面试题和答案解析开头和文末皆有获取方式哦

1、JVM 运行时内存

3、新生代、老年代、永久代

4、32 位和 64 位的 JVM,int 类型变量的长度是多数?

12、JAVA 强引用、软引用、弱引用、虚引用

13、虚拟机栈(线程私有)

15、你能保证 GC 执行吗?

16、怎么获取 Java 程序使用的内存?堆使用的百分比?

17、在老年代-标记整理

20、堆(Heap-线程共享) -运行时数据区

24、什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”?

28、你知道哪些 JVM 性能调优

29、说一下 JVM 的主要组成部分及其作用?

30、队列和栈是什么?有什么区别?

1、MySQL 中有哪些不同的表格?

3、MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?

6、MyISAM 表格将在哪里存储,并且还提供其存储格式?

9、如何显示前 50 行?

10、第一范式(1st NF - 列都是不可再分)

11、第二范式(2nd NF- 每个表只描述一件事情)

12、第三范式(3rd NF- 不存在对非主键列的传递依赖)

15、为表中得字段选择合适得数据类型

17、什么情况下设置了索引但无法使用

18、并发事务带来哪些问题?

19、SQL 语言包括哪几部分?每部分都有哪些操作关键

21、说说对 SQL 语句优化有哪些方法?

22、什么是乐观锁、悲观锁、时间戳、行级锁、表级锁、页级锁

5、如何使用 memcached 的多线程是什么?如何使用它们?

7、memcached 对 item 的过期时间有什么限制?(为什么有 30 天的限制?)

10、为了让 memcached 更有效地使用服务器的内存,可以在各个服务器上配置大小不等的缓存空间吗?

11、什么是 binary 协议?它值得关注吗?

14、究竟为什么使用 slab 呢?

15、memcached 能保证数据存储的原子性吗?

3、你说的 NoSQL 数据库是什么意思?

4、NoSQL 数据库有哪些类型?

8、journal 回放在条目(entry)不完整时(比如恰巧有一个中途故障了)会遇到问题吗?

9、分析器在 MongoDB 中的作用是什么?

11、 如果用户移除对象的属性,该属性是否从存储层中删除?

13、能否使用日志特征进行安全备份?

15、为什么我的数据文件如此庞大?

16、如何执行事务/加锁?

18、为什么要使用和不使用 NoSQL 数据库?

19、说一说 NoSQL 数据库的几个优点?

1、String 是基本数据类型吗?

5、怎么比较两个字符串的值一样,怎么比较两个字符串是否同一对象?

7、Spring 应用程序有哪些不同组件?

10、什么是依赖注入?

15、列举 IoC 的一些好处。

17、spring 提供了哪些配置方式?

23、自动装配有哪些方式?

24、如何在 spring 中启动注解装配?

25、自动装配有什么局限?

27、什么是基于注解的容器配置

33、 注解有什么用?

2、负载平衡的意义什么?

4、什么是 Hystrix 断路器?我们需要它吗?

5、什么是 Hystrix?它如何实现容错?

7、什么是服务熔断?什么是服务降级

8、Eureka 和 zooer 都可以提供服务注册与发现的功能,请说说两个的区别?

10、什么是 Hystrix 断路器?我们需要它吗

14、说说 RPC 的实现原理

15、微服务之间是如何独立通讯的?

18、你所知道的微服务技术栈?

7、如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?

9、如何确保消息不丢失?

10、消息基于什么传输?

11、如何保证消息的顺序性

14、如何保证高可用的?

16、如何保证消息的可靠传输?如果消息丢了怎么办

17、如何避免消息重复投递或重复消费?

19、如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决

22、topic 交换器(模式匹配) ?

3、默认使用的是什么通信框架,还有别的选择吗?

5、一般使用什么注册中心?还有别的选择吗?

6、dubbo 都支持什么协议,推荐用哪种?

7、服务提供者能实现失效踢出是什么原理?

8、Dubbo 的整体架构设计有哪些分层?

9、如何解决服务调用链过长的问题?

10、说说核心的配置有哪些?

11、Dubbo 推荐用什么协议?

12、默认使用什么序列化框架,你知道的还有哪些?

13、画一画服务注册与发现的流程图?

14、Dubbo 集群容错有几种方案?

15、服务上线怎么不影响旧版本?

16、Dubbo 服务降级,失败重试怎么做?

18、Dubbo 用到哪些设计模式?

20、服务调用是阻塞的吗?

21、Dubbo 支持分布式事务吗?

22、Dubbo 可以对结果进行缓存吗?

2、MyBatis 实现一对一有几种方式?具体怎么操作的?

4、MyBatis 实现一对多有几种方式,怎么操作的?

6、Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?

7、当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

9、通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?

15、Mapper 编写有哪几种方式?

16、简述 Mybatis 的插件运行原理,以及如何编写一个插件。

17、MyBatis 编程步骤是什么样的?

2、zooer 的数据结构(树)? 讲一下基于它实现的分布式锁?基于它实现的 Master 选举?基于它的集群管理?zooer 的注册(watch)机制和轮询机制的使用场景?

4、讲一下如何用 zooer 实现分布式锁?

6、Zooer 的同步过程,写操作流程,读操作流程

7、ZK 的部署方式有哪几种?集群中的角色有哪些?集群中最少需要几台机器

11、ACL 权限控制机制

16、zk 节点宕机如何处理?

17、zooer 是如何保证事务的顺序一致性的?

18、分布式集群中为什么会有 Master?

21、集群最少要几台机器,集群规则是怎样的?

22、集群支持动态添加机器吗?

23、Zooer 对节点的 watch 监听通知是永久的吗?为什么不是永久的?

26、说几个 zooer 常用的命令。

栈( stack)是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈顶(top)。它是后进先出(LIFO)的。对栈的基本操作只有 push(进栈)和 pop(出 栈)两种,前者相当于插入,后者相当于删除最后的元素。

10、栈和队列的共同特点是?

11、栈通常采用的两种存储结构是?

12、用表示线性表的优点是?

13、增加头结点的目的是?

14、在计算机中,是指?

1、数据里有{1,2,3,4,5,6,7,8,9},请随机打乱顺序,生成一个新的数组(请以代码实现)

2、给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

3、如何解决样本类别的不均衡问题?

4、在神经网络训练过程中,为什么会出现梯度消失的问题?如何防止?

6、冒泡、插入、快速、希尔、归并

7、K-Means 或 KNN 中,通常使用欧式距离来表示最近的数据点之间的距离,有时候也使用曼哈度距离,对比两者的区别。

8、参数模型与非参数模型

9、生成模型与判别模型

11、桶、基数、剪枝、回溯

18、有两个篮子,分别为 A 和 B,篮子 A 里装有鸡蛋,篮子 B 里装有苹果,请用面向对象的思想实现两个篮子里的物品交换(请用代码实现)

19、假设今日是 2015 年 3 月 1 日,星期日,请算出 13 个月零 6 天后是星期几,距离现在多少天(请用代码实现,谢绝调用 API 方法)

21、写出代码判断一个整数是不是 2 的阶次方(请代码实现,谢绝调用 API 方法)

1、elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段 。

2、elasticsearch 索引数据多了怎么办,如何调优,部署

12、详细描述一下 Elasticsearch 更新和删除文档的过程。

13、客户端在和集群连接时,如何选择特定的节点执行请求的?

15、在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索引的?

18、拼写纠错是如何实现的?

21、介绍下你们电商搜索的整体技术架构?

22、介绍一下你们的个性化搜索方案?

23、是否了解字典树?

24、Elasticsearch 对于大数据量(上亿量级)的聚合如何实现

3、数据文件分段 segment(顺序读写、分段命令、)

8、如何获取 topic 主题的列表

9、生产者和消费者的命令行是什么?

13、Kafka 判断一个节点是否还活着有那两个条件?

14、为什么需要消息系统,mysql 不能满足需求吗?

15、讲讲 kafka 维护消费状态跟踪的方法

16、消费者如何不自动提交偏移量,由应用提交?

17、Kafka 与传统 MQ 消息系统之间有三个关键区别

19、消费者故障,出现活锁问题如何解决?

20、讲一下主从同步:

1、微服务架构有哪些优势?

2、设计微服务的最佳实践是什么?

3、单片,SOA 和微服务架构有什么区别?

4、微服务有哪些特点?

5、微服务架构如何运作?

6、在使用微服务架构时,您面临哪些挑战?

7、微服务架构的优缺点是什么?

8、微服务有什么特点?

9、什么是领域驱动设计?

10、SOA 和微服务架构之间的主要区别是什么?

11、为什么需要域驱动设计(DDD)?

13、什么是无所不在的语言?

17、什么是 Spring 引导的执行器?

21、你能否给出关于休息和微服务的要点?

23、什么是不同类型的微服务测试?

24、什么是有界上下文?

26、什么是双因素身份验证?

27、双因素身份验证的凭据类型有哪些?

28、PACT 在微服务架构中的用途是什么?

29、什么是客户证书?

1、绝对路径用什么符号表示?当前目录、上层目录用什么表示?主目录用什么表示? 切换目录用什么命令?

2、使用什么命令查看 ip 地址及接口信息?

3、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当

4、通过什么命令指定命令提示符?

5、查看文件有哪些命令

6、列举几个常用的 Linux 命令

7、怎么对命令进行取别名?

8、建立软链接(快捷方式),以及硬链接的命令

9、当你需要给命令绑定一个宏或者按键的时候,应该怎么做呢?

10、查看文件内容有哪些命令可以使用?

11、随意写文件命令?怎么向屏幕输出带空格的字符串,比如”hello world”?

12、你的系统目前有许多正在运行的任务,在不重启机器的条件下,有什么方法可以把所有正在运行的进程移除呢?

13、移动文件用哪个命令?改名用哪个命令?

14、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?

15、怎样一页一页地查看一个大文件的内容呢?

16、Linux 下命令有哪几种可使用的通配符?分别代表什么含义?

17、用什么命令对一个文件的内容进行统计?(行号、单词数、字节数)

18、Grep 命令有什么用? 如何忽略大小写? 如何查找不含该串的行?

19、Linux 中进程有哪几种状态?在 ps 显示出来的信息中分别用什么符号表示的?

20、怎样查看一个 linux 命令的概要与用法?假设你在/bin 目录中偶然看到一个你从没见过的的命令,怎样才能知道它的作用和用法呢?

21、怎么查看当前进程?怎么执行退出?怎么查看当前路径?

22、Ls 命令执行什么功能? 可以带哪些参数,有什么区别?

23、你平时是怎么查看日志的?

24、终端是哪个文件夹下的哪个文件?黑洞文件是哪个文件夹下的哪个命令?

25、删除文件用哪个命令?如果需要连目录及目录下文件一块删除呢?删除空文件夹用什么命令?

26、怎么使一个命令在后台运行?

27、目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?

28、使用哪一个命令可以查看自己文件系统的磁盘空间配额呢?

小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【999】即可免费获取

在具体的讲述中英文字符的显示与存储以前,我们可以先了解下面的一个示例:这里有256个学生,我们按照从0到255的顺序每人给一个学号,对于每个学生来讲,这个学号是唯一确定的。但是只是从这个学号上,我们看不出来一个学生具体的长相特点。为了能够知道这个学生的长相信息,我们又为每个学生拍了照片,并且对照片进行M行N列的扫描,对某一点来讲,如果该点是亮点,则在该位置标志为1,如果该点是暗点,则该位置标志为0。这样对整个照片扫描完毕,我们就得到了一长串的二进制数。这一长串二进制数就是描述学生照片的信息,也可以说我们已经把这张照片数字化了。然后我们把这些照片信息按照学号的顺序存放到一个文件中,这个文件就是我们的照片库。在日常的学生管理中,比如说在学生的成绩单上,住宿登记册上等,我们只是使用学生的学号,因为学号能够唯一的确定一个学生,而且其信息量比照片的信息量要小得多;但在档案上等需要知道学生长相的位置则需要根据学号到照片库中把该生的照片信息提取出来,然后根据这串二进制数码描画出这个学生的照片。在我们的微机操作系统中,正是利用这种方法来实现中英文文字的显示与存储的。

1. 英文字符的显示与存储特点

在微机中常用的英文字母及其他符号共有256个。就象前边管理学生的方法一样,在微机的存储器中存储这些英文符号有两种不同的方式:组成每个符号的点阵和对每个符号的特定编码。

在计算机设计初期,人们把最常用的128个英文符号(包括26个英文字母,0至9的数码以及其他的常用符号)按一定的顺序给予一个编码,目前这套编码是国际通用的,那就是ASCII码,把另外的利用率相对较低的128个符号作为扩展的ASCII码。

同时在微机的字符发生器中按编码顺序存储了每个符号的字符点阵,也就是他们的字模,供显示或者打印用。一般情况下,显示用的这些点阵通常是8×8点阵,即每个符号要占用8个字节的存储空间。

例如英文字母A的ASCII码是65,即41H(在这里H代表16进制数),它的字符点阵可以参看下图:

对英文符号来说,只有在字符发生器和打印的时侯才使用其字符点阵。我们在键盘上键入字符A,事实上在内存传递的只是一个数值41H,即这个字符的ASCII码,只有当这个数值41H被送往显示缓冲区或者送往打印机时,系统才从其点阵库中抽取出它的点阵信息,根据这些信息把它的模样描述出来。也就实现了符号A的显示或者打印。如图1-4所示。

图1- 4英文字母A的点阵结构及其各点对应的二进制值

综上所述,微机存储器中存储256个英文字母、符号以及它们的ASCII码总计需要2304个字节:其中存储256个字符点阵需要8×256=2048个字节,存储256个字符的编码(ASCII码及扩展ASCII码)需要1×256=256个字节。这对于一般的微机系统来讲都是微不足道的。在实际上,人们是将它们固化到主机显示卡上的ROM中。表1-2 列出了英文字符的ASCII值。(水平方向的数码为编码的高3位)。

0

从上表可以看出,十进制码值0~32和127共34个字符称非图形字符(又称为控制字符),其余94个字符又称为图形字符,或者可打印字符。在这些字符中,我们应该记忆下列几个关键字符的ASCII码值。

空格符:字符的二进制编码为0100000B,对应的十进制数为32,十六进制值为20H。

字符0:字符的二进制编码为0110000B,对应的十进制数为48,十六进制值为30H。

字符1:字符的二进制编码为0110001B,对应的十进制数为49,十六进制值为31H。

字母A:字符的二进制编码为1000001B,对应的十进制数为65,十六进制值为41H。

字母B:字符的二进制编码为1000010B,对应的十进制数为66,十六进制值为42H。

字母a:字符的二进制编码为1100001B,对应的十进制数为97,十六进制值为61H。

字母b:字符的二进制编码为1100010B,对应的十进制数为98,十六进制值为62H。

2. 汉字符号的显示和存储特点

和英文符号相同,汉字字符的存储和显示也有两种不同的形式:组成每个字符的点阵和每个字符的编码。

同英文字符点阵一样,尽管汉字的字形有多种变化,但由于汉字都是方块字。而且汉字的大小相同,无论汉字的笔划多少,都能够写在大小相同的方块中,因此我们可以把这个方块分成X行Y列的X×Y个小方格,这就是点阵。每个块可以看作是有墨点或者无墨点,一个由点阵中的墨点组成汉字的笔划,描绘出汉字的字型,就是点阵型汉字。如果我们对这些小方块进行数字化处理,用二进制数1表示点阵中的墨点,用二进制数0表示该点无墨,我们就能得到一个数字串,这个数字串就是该汉字的图形信息,即汉字的字模信息。把我们经常使用的所有汉字符号的字模都存放在一个文件中,这个文件就是我们通常使用的汉字库。

根据精密度和字体大小的要求,我们可以做出点阵大小不同的字库。16×16点阵是我们通常使用的显示字库,每个汉字块被分为16行16列共256个小块,然后用16×16=256位的二进制数来表示,也就是说,16×16点阵的汉字的每个汉字字模要占用32个字节的存储空间。

下面是“大”字的16×16点阵结构及其对应的二进制值(见图1-5)。

和处理英文字符一样,在计算机内存的处理中,我们不是直接传递和处理汉字的字模,而是使用汉字的编码,因为字模的信息量太大。和英文符号不同的是汉字本身是一种图形文字,其图形符号比较多,不象作为拼音文字的英语只有26个不同字母,即使区分大小写,也只有52种状态,对西文字符的编码只需用8位二进制数,能够表示256个符号就足够了。因此对汉字符号的编码应该能够表示比较多的状态。目前在微机内部汉字一般使用16位二进制数编码,也就是两字节编码,这个编码就是汉字的内码,也称为机内码。

图1- 5英文字母A的点阵结构及其各点对应的二进制值

综上所述,在微机存储器中存储8000个16×16点阵汉字字模及其内码总计需要约272KB存储空间:因为对16×16点阵字库来讲,每个汉字或符号占用的存储空间是(16×16)bit,即(16×16)÷8=32B,存储8000个汉字和符号的点阵需要32×8000B,大约为256KB,又因为中文符号的内码是双字节的,因此存储8000个中文符号的内码应该用2×8000B,大约为16KB。总共272KB的空间对于常规内存只有640KB的微机系统来讲是一个非常可观的数字。为了节省微机的内存空间,现在的大部分汉字系统尽量把汉字库放置在扩展内存,或者放置在专用汉卡的只读存储器中。

16×16点阵的字库一般只用于显示,如果用于打印,其效果非常差。打印一般使用高点阵的打印字库,考虑到打印机自身工作比较慢和节省内存等因素,在大多数汉字系统中高点阵打印字库并不装入微机内存,而是由汉字系统直接在硬盘上的汉字库中查找并输出。

当前国家标准(GB2312-80)共收集7475个图形字符,其中一般符号202个(包括间隔符号、标点符号、运算符号、单位符号、列表符号)、序号60个、数字22个、拉丁字母52个(26个拉丁字母区分大小写),日文平假名83个,片假名86个,希拉字母48个,俄文字母66个,汉语拼音26个,汉语注音符号37个,汉字6763个。按照国家标准,我们将这7475个汉字与其他符号分为两级存放:首先我们规定放置中文符号的空间共有94个区,每个区中又有94个位,分别按其排列的顺序编码为01-94,我们将区号和位号合称为区位码。区位码和区位码表中的位置唯一对应。区位码的大小范围是0101-9494,可以表示94×94=8836个符号。一般的汉字系统中,除去常用符号,共有6763个汉字的字模被分为两级存放在不同的区中,其中一级汉字共3755个,置于16-55区,按照他们的拼音字母顺序排放,二级汉字共3008个,置于56-87区,按它们的偏旁部首顺序排放。这样汉字系统中使用的每一个符号,对应唯一的号码,这个号码就是区位码,它直接反应了该符号的字模在汉字库中的存储位置。例如“大”字的区号是20,位号是83,那么“大”字的区位码就是2083。能否在微机系统内部直接使用中文符号的区位码呢?答案是否定的。事实上汉字的区位码和英文符号的ASCII编码是有重叠的。如果在微机系统内部直接使用汉字的区位码,显示和打印系统对编码的解释将会无所适从。例如“忖”字的区位码是6666,即16进制数4242(对区号和位号分别化为16进制),系统将不知道是要调用“忖”字的字模呢,还是在屏幕上显示出两个英文字母“B”。为了避免与ASCII的冲突,系统对每个中文符号的区码和位码分别加上16进制数A0,得到一个二字节的数值,这个数值被称为微机系统中汉字的内码,也叫机内码,表示的只是汉字在汉字库中的物理位置,或者说该汉字在计算机内的序号。同时由于它和区位码之间有直接的换算关系,显示打印系统通过内码可以很快地找到内码对应的字模。

国家标准规定了信息交换用的标准汉字交换码(GB2312-80),也就是国标码,从根本上讲,区位码只是在国标码的基础上针对于中文符号存放的区位号提出来的。国标码的高字节减去20H得到区位码的区号,低字节减区20H后就是区位码的位号。国标码的两个字节的最高位都是0,只要分别把它们的最高位变为1,这个编码就是该汉字的内码。国标码的编码考虑到了尽量避开ASCII码表中的控制符号,由于ASCII符号表中只有94个可打印的符号,所以国家标准把汉字符号分放在94个区,每个区又安排了94个位。

下面我们仍以“大”字为例说明这个问题。

“大”字的区位码是:2083,将其区号和位号分别化为16进制就是:1453H 那么机内码是:1453H+A0A0H=B4F3H

中文电脑主要处理对象是汉字,国家标准对汉字的编码具有唯一性,也就是说每个编码对应唯一的一个汉字,一个汉字也只能有唯一的一个码。这样避免了编码的二义性,但同时我们也发现,直接利用国标码,或者说以内码和区位码向微机系统中输入汉字几乎是不可能的。因为人们不可能记下每个汉字的区位码。为了输入的方便,汉字系统对每个汉字规定了输入计算机的代码──外部码。人们通过键盘输入汉字都是使用汉字的外部码。同时为了让计算机能识别用户输入的汉字,计算机的汉字系统必须把汉字的外部码转化为汉字的内部码,以便于处理和存储。为了将汉字以点阵的形式输出,还要将汉字的内部码转化为汉字的字形码,也就是通过内码找到汉字的区位码然后确定汉字的数字化点阵结构(字模)。

汉字主要从键盘输入,外部码是汉字从键盘输入时的代码,也叫汉字输入编码。根据汉字的属性(汉字字形,字音,使用频率),现在已经提出了数百种的编码方案,供我们在工作中选用。双拼双音、智能拼音、五笔字型是目前比较受欢迎的编码方案。

外部码在输入过程中,由汉字操作系统负责转化为内码(也叫机内码)进行存储和处理。

又称内部码或者机内码。在计算机内存中是汉字的代表,计算机内部使用和处理汉字实际上就是在处理汉字的内码,从键盘上输入的外码也要通过查表的方式转化为内码后才能存储和处理。我们把使用文字处理软件写的一些文章存储在磁盘上,也是存储的汉字内码。

目前除二字节内码外,还有三字节、四字节内码,但使用的较少。

又称字形码,是根据汉字的字形或者说字模进行的编码。上面我们曾经讲过的点阵就是一种汉字输出码。汉字输出码只是在显示汉字或者打印汉字的时候使用。这个编码信息量大,对于同一个汉字可能对应多个大小不同,字体相异的编码。

4. 其他汉字编码方案

除了中华人民共和国大陆地区制定的GB-2312标准编码外,香港和台湾地区也制定了自己的汉字编码方案。因为香港和台湾地区的汉字编码是以繁体字为标准的,称为BIG5码。在我们以后使用Windows系统过程中,如果接收香港和台湾地区的信件和资料,一般需要按照BIG5码的方式解析

为了统一地表示世界各国、各地区的文字,便利全球范围内的信息交换,1993年,国际标准化组织公布了“通用多八位编码”字符集的国际标准,即UCS编码方案。

为了表示汉语言文字中众多的异体字和生僻字,与国际的UCS接轨,我国发布了新一代的中文编码方案——扩充汉字内码方案(GBK)。

最近发布并成为新标准的GB是对GB2312编码方案的扩展,共收录了2.7万多个汉字,总码位超过150万个。其第1个和第2个字节的A1H-FEH与GB2312内码完全一致,使得新编码方案能完全兼容旧的GB2312内码,过去制作的以GB2312为标准的文本不加任何转化就能够使用在新的GBK方案下。

GBK编码方案采用单/双/四字节混合编码,该标准与现有的绝大多数操作系统、中文操作平台在计算机内码一级兼容,较好地解决了汉语言文字的大字符集问题,并为中文信息在国际互联网上的传输与交换提供了保障。

我要回帖

更多关于 计算机字符编码通常用 的文章

 

随机推荐