编程基础

作者: 黄同学2019 | 来源:发表于2017-09-26 11:38 被阅读40次

    1.为什么要学习编程基础

    因为你首先是一个合格的程序员,然后才是一个合格的前端工程师

    前提:一个程序员必须知道

    1. 硬件和软件:计算机运行原理,参考书籍《编码》(理解难度面向0基础同学更友好),以及大学计算机相关课程,例如《计算机组成原理》,《计算机网络》等(最好有老师带,自学有一定难度!)。
    2. 最大的软件:操作系统
    3. 自己写软甲:数据结构和算法
    4. 多人写软件:软件工程

    2. 前端工程师必知(自上而下)

    • 服务器 :不论HTML/CSS,还是JS,数据来源都在服务器中。
    • 浏览器 :HTML/CSS/JS 这三种前端主要语言都是运行在浏览器之上。
    • 操作系统:浏览器,不仅仅是浏览器,所有的软件都是运行在操作系统之上。
    • 硬件:操作系统作为最大的软件,运行在硬件之上。

    3.常识:计算机如何存储0和1?

    3.1 为什么计算机只能存储0和1?

    这其中涉及到很多硬件知识,简单的来说,因为电脑是集成电路,内存微观上是无数小开关,或者是小电池,而“0”和“1”正好分别代表“开”和“关”(或者是“通电”和“不通电”),就好像家里的电灯开关只有开和关一样。所以,电脑的本质决定了它必须是二进制,只能存储0和1.

    3.2 计算机是如何存储0和1?

    计算机存储过程,其实就是给小电池不断充电的过程,因为小电池自身存在耗电(好比家里的南孚电池放久了不用自己会消耗电量一样)。

    那么,既然小电池自己会耗电,又要不断充电,如何判断它是的状态是0和1呢?

    规则是:当小电池电量大于50%,为1;电量小于50%,则为0。因为计算机的充电速率是纳秒级(10^-9), 即一次充电过程为:刷新 1次/10^-9s。

    4.内存如何存储数字?

    上面我们说,计算机已经解决了如何存储0和1的问题,那么,我们如何存储其他数字呢?

    方法是将所有数字转化为0和1的组合去进行存储,这就是需要探究十进制如何转化为二进制的问题。

    • 举个例子:
    图片

    4.1 存储整数

    如上:37 在十进制上以10为底的方式得到结果过程:

    37(10)
    =3\*10^1+7\*10^0
    =30+7
    

    同理,37(10)也可写作以2为底的方式得到:

    37(10)
    =1\*2^5   +  0\*2^4   +   0\*2^3  +   1\*2^2   +   0\*2^1   +   1\*2^0
    =1   0  0  1  0  1
    

    4.2 存储小数

    同理,对于小数也是一样的道理,以1/10为底,过程为:

    0.75(10)
    =7\*1/10   +   5\*1/10^2
    =0.7+0.05
    

    那么,以1/2为底,过程为:

    0.75(10)
    =1\*1/2   +   1\*1/2^2
    =0.5+0.25
    

    问题:如何存储负数和小数点呢?

    参考资料如下:

    5.如何存储字符?

    方法:对所有字符进行编号,首先以十进制的方式表示每个字符,最后都转化为二进制的方式进行存储。参考:ASCII美国信息交换标准代码

    如图:

    图片

    如图:如果你想存储字母a,那么就存储97(10),对应进制转换为: a -> 97(10) -> 0110 0001(2) -> 61(16)

    如果你想存储数字1,对应进制转换为:1-> 49(10) -> 0011 0001 -> 31(16)

    以上就是存储键盘上简单字母的方法。

    6.如何存储中文?

    参考资料:GB 2312

    部分图片
    • 在国内使用字符为汉字,我们便在ASCII码的基础上进行扩充。GB 2312收录了6163个汉字,同时收录了包括拉丁字母,希腊字母,日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

    • 缺点:因为GB2312主要为常用字,不能满足人们的需求。后来,为了存储生僻字、繁体字、日语、朝鲜语等,微软推出了GBK字符集

    7.如何存储所有字符?

    • 为了将所有字符都能够在电脑上显示,然而不同的字符集考虑到兼容性问题,Unicode联盟做了这样一件事,他们将全世界的文字都编在一张表中。截止到2016年6月,累计128231个字符。(参考资料:Unicode

    • 缺点:因为 128231>216,所以Unicode必须用232来存储。但是,也带来一些问题:

    原来使用ASCII字符编码进行存储时,只需要1个字节即8位存储就足够,但是使用Unicode却需要4个字节即32位来存储;

    原来存储一个中文字符需要2个字节即16位,使用Unicode后需要4个字节32位存储。这样大大的浪费了存储空间。


    图片

    7.2 UTF-8的出现(UTF-8

    因为采用Unicode存储字符的方式大大的浪费了存储空间,为了节省字符存储消耗,使用UTF-8的方式进行优化,注意,这里是对Unicode存储方式进行优化,而没有改变原有的字符编码。

    规定:对于字母例如字母 “a”,依然采用原来的一个字节存储,而不是4个字节进行存储,这样就节省了3个字节的空间;

    而对于汉字,例如汉字 “你” ,依然使用原来的2个字节进行存储,但是,在上面的一大堆 0 和 1 中,计算机是无法识别哪一段表示字母,哪一段表示汉字,所以,又拿出一个字节进行区分;

    例如 图中汉字 “你”:原本2个字节存储为:01001111 01100000 ,而转换为3个字符存储,表示为:11100100 10111101 10100000,第一个字节的前缀 1110表示这个字符长度为3,后面第2和第3个字符的前缀都为10 是为了和前面所标志的一致,而实际上这个字符的组成,是从第一个字节的后4位、第二个字节的后6位,第三个字节的后6位所组成。

    所以,计算机在读取的过程中,当它读到 0110 0001 时,它发现开头没有1,那么就知道这是一个单字节;当它读到 11100100 10111101 10100000,发现前面有3个1,那么它就知道这是由3个字节组成,然后它就自动去读取第一个字节的后4位、第二个字节的后6位,第三个字节的后6位,拼凑成2个完整的字节,表示汉字“你”

    • 切记: UTF-8 只是一种编码方式,而不是字符集!

    8.为什么很多中文软件喜欢使用GBK而不是UTF-8?

    Unicode和GBk发展史

    之前我们说,Unicode字符集使用UTF-8的编码方式更节省空间,而大家却为什么不用呢?考虑到两方面因素:

    1.发展史:当时在国内发明GB 2312的早几年,微软的GBK还没有出现,大家习惯了使用 GB 2312 和 GB13000 ,而新出来的Unicode虽然全球统一,但是还不完善,没有采用UTF-8的编码方式。

    之后GBK的出现,对原来的GB 2312更加优化,深受大家的喜爱。而到后来2000年出现的 GB 18030-2000 ,它统一和兼容了GBK,但是90年到2000年初,代大家还是习惯性的使用GBK字符集。

    2.国情:在当时的背景下,信息相对比较闭塞,并不是什么东西像如今Google一下就可找到,所以在国内90年代大部分软件使用的字符集依然是GBK。

    9.对前端的影响

    相关文章

      网友评论

        本文标题:编程基础

        本文链接:https://www.haomeiwen.com/subject/oxlsextx.html