精华内容
下载资源
问答
  • 本篇博客接着【linux】(线程1)进行更多以简单文字的方式向大家简单又详细说明进程和线程之间关系,如果你已经很清楚线程和进程之间关系及其理解,那么本篇博客可以选择跳过,当然复习以下也许会有新...

    本篇博客是接着【linux】(线程1)进行更多的以简单文字的方式向大家简单又详细的说明进程和线程之间的关系,如果你已经很清楚线程和进程之间的关系及其理解,那么本篇博客可以选择跳过,当然复习以下也许会有新的收获。

    进程的缺点

    我们上篇博客说过;
    因为进程的缺点,使得早期只有进程的OS存在着非常大的问题,在早期,当OS只有进程时,应用程序通过创建子进程来得到多进程的目的大致有两个:
    (1)目的1:创建子进程,执行新程序
    (2)目的2:创建子进程得到多进程,通过多进程并发实现多线任务

    例如:
    ①同时阻塞的读鼠标和键盘时,如果单线的话会想互影响,需要两线任务来实现。
    ②读写管道时,读操作是阻塞的,为了避免读操作影响写操作,也需要两线任务同时进行。多线任务的例子很多。

    对于第一种目的,执行新程序时必须创建子进程,这个无法逃避的。

    但是对于第二种目的来说,如果使用多进程来实现就存在巨大的问题,因为几乎所有的程序都涉及多线任务的操作,而且好些程序往往都是十几个任务以上,如果此时使用多进程来实现多线任务的,这就大致大量进程的产生。

    比如计算机运行了100个程序,假设每个程序平均10多个任务,如果全部采用多进程来实现,计算机最终要运行的进程就多达上100个。
    所以在早期使用多进程来实现程序的多线任务时,往往导致计算机进程数量暴增,而进程切换和进程间通信的计算机资源开销又很大,因此往往导致计算机非常卡顿,程序的运行效率非常低。

    当人们认识到进程缺点所带来的巨大问题后,大家就开始思考,能不能使用另一种方式来实现程序的“多线任务”,而不是使用多进程来实现,到了上世纪80年代人们就发明了线程,以弥补多进程实现多线任务的缺点。

    线程为什么能弥补进程的缺点

    首先我们需要明白,线程与进程一样,线程和进程会被OS统一调度,所以所有的线程和进程都是一起并发运行的,如果线程不是并发的,是不可能实现程序的多线任务的。有了线程以后,凡是程序涉及到多线任务时,都使用多线程来实现,使用多线程来实现时,线程间的切换和数据通信的开销非常低,正因为开销非常低,因此线程还有另一个名称,叫轻量级的进程。线程就是为了多线任务而生的,多线程的多线二字,就是多线任务的多线二字。

    使用线程来实现时,线程也需要切换和通信,为什么线程的切换和通信开销就很低呢?

    使用多进程来实现程序的多线任务,多线并发运行时,涉及到的是进程间的切换,我们前面就说过,进程间切换时开销非常大。但是使用多线程来实现多线任务时,由于线程本质上它只是程序(进程)的一个函数,只不过线程函数与普通函数的区别是,普通函数时单线的运行关系,而线程函数被注册为线程后,是多线并发运行。
    在这里插入图片描述

    上面的普通函数和并发执行的线程函数在同一个进程里面。

    对于普通函数来说,只有当相互调动时才会涉及函数间的切换,但是对于线程函数来说,只要运行的时间片到了就会切换,但是不管是那种函数间的切换,程序自己函数的切换只是进程内部的事情,不涉及进程间切换,就省去了进程间切换的巨大开销。并且线程函数可以调用普通函数。
    如果是不同进程的线程之间需要切换的话,还是会涉及到进程间的切换了,但是不管怎们说,线程的出现,至少为程序内部多线任务之间的切换,省去了大量的进程切换所导致“资源开销”。线程的切换其实就是函数间的切换,函数切换当然也需要开销,但是这些开销相比进程间切换的开销来说,已经非常小了。

    为什么线程间数据通信的开销很低?

    线程的本质就是函数
    函数间通信有两种方式:
    (1)具有相互调用关系函数来说
    使用函数传参来通信。
    (2)对于没有调用关系的函数来说
    使用全局变量来通信。

    A函数 ————> 全局变量 ————> B函数

    所以说全局变量的作用是什么?
    就是用来实现无调用关系的函数间通信的。

    进程中所有的线程函数除了相互并发运行外,没有调用关系,所以线程函数间想要数据共享的话,就使用全局变量来通信。

    从这里可以看出,进程内部的线程间进行数据共享非常容易,使用全局变量即可,根本不需要调用什么OS提供的通信机制,所以线程间通信的开销自然就非常的低。

    线程是不可能完全替代掉进程的,只有在多线任务时会替代进程,但是运行新程序的时,我们还是必须创建子进程。

    线程的本质是函数,函数运行需要内存空间,这个内存空间怎么来,事实上线程运行的内存空间就是进程的内存空间,因此线程运行时必须依赖于进程的存在,如果没有进程所提供的内存空间这个资源,线程根本无法运行。进程是分配资源的最小单位,线程必须依赖于进程的资源才能够运行。换句话说,线程作为函数,只是进程的一个部分而已,线程是不可能脱离进程而独立存在。所以同一个进程中的所有线程,都是运行在相同的进程空间中的,换句话说同一个进程中所有线程共用相同的进程空间。

    程序(进程)的函数能够通过全局变量来通信,就是因为全局变量、函数等全部都在同一个进程空间中,既然进程空间是大家共享的,那么所有的函数,自然就能共享访问在共享空间中所开辟出来的全局变量。

    对于进程中的所有函数来说(包括线程函数),进程中几乎所有的资源都是共享的,比如打开的文件描述,所有可以被调用的子函数,进程的当前工作目录,进程uid、gid,进程PID等等。

    线程自己独立的属性

    进程中的所有线程会共享进程提供资源(全局变量、工作目录、打开的文件描述符、子函数等等),但是每个线程作为一个单独的执行体,也有属于自己的独立的属性。

    (1)每个线程拥有自己独立的线程ID(TID)
    (2)每个线程有独立的切换状态

    ①在切换时,当前线程被中断的那条指令的地址
    ②线程切换时相关的运行状

    当线程切换时,必须保存以上信息,以便切换回来后还原现场,从中断处继续运行。
    这就好比我正在工作,突然有人来找我,此时我么就被中断了,我就需要保存好我的工作现场,等我回来时再还原工作现场,以便接着做。
    3)有自己独立的函数栈其实每一个函数都有自己的函数栈,所有的函数栈都开辟于进程空间的进程栈。函数栈的作用就是用来保存函数局部变量的,既然所有的线程函数都有自己的独立的函数栈,自然就有自己独立的局部变量。线程函数的函数栈,我们往往也称为线程栈。
    4)自己独立的错误号线程函数的错误号是独立的,所以线程函数出错时,错误号并不是通过设置errno实现的,而是直接将错误号返回。

    (5)每一个线程有自己独立的信号屏蔽字和未决信号集
    后面还会在介绍。

    (6)每个线程有自己独立的tack_struct结构体我们说进程在运行的过程中,OS会为每个进程开辟一个task_struct结构体变量用于存放进程所涉及到的各种管理信息,同样的为了管理线程,也会为线程开辟一个task_struct变量,只不过适用于存放线程的管理信息的。

    我们自己写的程序,什么时候使用多线程和多进程

    程序涉及多线任务时,使用线程。
    程序涉及到运行新程序时,必须使用多进程,不过一般来说,如果不是大型软件和框架的话,我们的程序并不需要执行新程序。
    创建子进程执行新程序,大多都是OS操心的事,比如通过命令行或者图形界面启动程序,此时就涉及到要运行一个新的程序,根据我们进程控制章节的学习,父进程(命令行、图形界面)就会创建子进程并加载执行新程序。

    线程控制相关的函数

    实现多进程的时候有进程控制,进程控制涉及到的函数有fork、exec、wait、exit等函数,实现多线程的时候,同样有线程控制函数,这些线程控制函数有:
    pthread_create、pthread_join、 pthread_detach、pthread_cancel、pthread_exit等。
    进程控制的fork、exec等函数都是由os系统提供的,原本线程函数也可以完全由OS来实现,但是后来为了不给OS增加负担,同时也为了提高线程的灵活性,后来的线程就不在由OS提供,而是由单独的线程库来提供,不过线程库在实现时,也是调用了相应的系统API,也就是说线程的核心实现也是离不开OS支持的。

    线程库

    (1)c线程函数
    由c线程库提供,注意这个c线程库并不是C标准库,而是POSIX C库的一部分。
    我们通过man手册就可以查看这个函数是属于什么库的,前提是函数是库函数。否则就是系统的API。
    本博客所说明的c线程库,其实windows也是支持的,在windows下的c程序中同样可以调用这些函数来实现c线程。
    我们所说明到的posix的c线程库,是由美国一些标准组织制定,并有相应c语言和unix、Linux维护团队开发的。

    (2)java、c++、c#的线程函数由他们自己的线程库来实现的。
    这些语言的线程库,是由这些语言的维护团队来开发的。

    线程库和OS系统API的关系

    线程库函数实际上也是封住OS的相应API来实现的,如果线程库运行在Linux这边的话,线程库其实就是通过调用Linux的clone()等系统函数实现的。将线程函数注册为线程时,其实就是通过调用这类系统API,然后去模拟我们的进程来实现的,正是因为是模拟进程来实现的,所以线程函数才能进程一样,一起被并发运行。

    所有的线程函数,都可以通过man手册查到的,比如man pthread_create。
    如果说你不能查到的话,说明的你的ubuntu没有安装线程库和对应的线程库函数手册,我们需要自己在线安装:

    		sudo apt-get install glibc-doc :安装线程库
    		sudo apt-get install manpages-posix-dev:安装线程库的函数手册
    

    所有的线程库的原理和使用方式都是类似,看完本博客有助于学习其它语言的线程库.不管是c的线程函数,还是c++、java、c#的线程函数,它们的实现原理都是类似的,最多就是所用语言和具体的细节不太一样,大体上都是一样的,你理解了C线程函数,在学习其它语言的线程库函数就会容易很多。当然java、c++的线程函数会比c的线程复杂一些。

    展开全文
  • 今天J.Keisler教授82岁诞辰。 对于J.Keisler而言,在这一天听见的最好消息,在伟大的中国...建议大家浏览、阅读以下附件中的“知识共享”全文,至少前几段的文字(CC协议赋予被许可者的权力)。 袁萌 ...

    今天是J.Keisler教授是82岁诞辰。

    对于J.Keisler而言,在这一天听见的最好消息是,在伟大的中国境内,人们在学习、研究“知识共享”许可协议的早期版本(CC 2.0)。

    这个许可协议(CC 2.0)正好是今年大学新生手中的电子版微积分教科书所遵循的知识产权保护的许可协议。

    建议大家浏览、阅读以下附件中的“知识共享”全文,至少是前几段的文字(CC协议赋予被许可者的权力)。

    袁萌  陈启清  12月3日

    附件:CC 2.0全文

    Attribution-NonCommercial-ShareAlike 2.0 Generic (CC BY-NC-SA 2.0)

    This is a human-readable summary of (and not a substitute for) the license. Disclaimer.

    You are free to:

    Share — copy and redistribute the material in any medium or format

    Adapt — remix, transform, and build upon the material

    The licensor cannot revoke these freedoms as long as you follow the license terms.

    Under the following terms:

    Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.

    NonCommercial — You may not use the material for commercial purposes.

    ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.

    No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.

    Notices:

    You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.

    No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.

    A new version of this license is available. You should use it for new works, and you may want to relicense existing works under it. No works are automatically put under the new license, however.

    展开全文
  • 最早的设计理念通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80最早按照这种思想设计出的处理器,从此以后,单片机和专用处理器的...
  • 公元前3000年左右,美索不达米亚平原南部的苏美尔人用削成三角尖头的芦苇杆将文字刻写在泥板上,然后将泥板烘干以便于保存,最早的文字,锲形文字。板上记载的内容不是诗歌也不是哲学,而是生意。 美索不达米亚文明...

    每一项技术的产生都是伟大的创造,常常惊叹于它的美丽,奇思妙想,独辟蹊径,精彩绝伦。每一项技术的设计者都是历史学家,经济学家,哲学家,思想家,生活中的观察者,发现家、领导者,制度的建设者,king,他可能不是技术人,但是他一定是前几项。

    一、历史
    公元前3000年左右,美索不达米亚平原南部的苏美尔人用削成三角尖头的芦苇杆将文字刻写在泥板上,然后将泥板烘干以便于保存,最早的文字,锲形文字。板上记载的内容不是诗歌也不是哲学,而是生意。

    美索不达米亚文明属于城邦文明,发展出了丰富的商业行为。他们记录在泥板上的,就是经营相关的事项和账本。文字不是一种深思熟虑后的发明物,而是伴随对私有财产的强烈意识而产生的一种副产品。(人类的本性里都是现实,利己的)

    二、文字和货币,信息与价值,信用
    文字是人际交流的手段,承载的是信息;而货币作为一种价值传输的载体,承载的是信用。这就是信息和价值,文字来源于传播信息的需要,价值来源于信用,货币是信用的载体。本质上就是信息和信用。

    信用是什么?信用意味着一些群体将自身置于因其他群体的不确定行为所造成的风险之下

    最早发明钱的时候,还没有信用,货币本身要有实际价值,黄金,白银,也就是金本位制。随着信任的建立,货币逐渐基于纯粹的信用,而并不需要货币本身具有多少的价值,也就是现在的信用货币,¥,$。

    三、定义信用,信用的可计算性

    定义信用,不是计算人或参与主体的信用,而是计算信用行为(比如交易)的可信程度。或者说计算一个信用行为在未来发生违约(欺诈)的可能性。违约的可能性越低,该行为的可信程度就越高;反之,违约的可能性越高,该行为的可信程度就越低。

    利用违约成本和违约收益可以得到一个信用行为可信度的公式:信用行为可信度=违约成本/违约收益。
    当欺诈行为所要付出的成本远大于其所能带来的收益,并且成本和收益都可以事先被精确计算时,任何一个理性的参与者都不会有欺诈的动力。

    需要突破的问题:违约的成本与收益很难在违约行为发生之前被精确地计算出来。

    解决:违约成本和收益可以在违约行为之前被精确地计算出来。

    信用的本质就是遵守和违约,不能采用制止某一方的发生,其实遵守和违约是平等了,不要用道德的眼光来看冷冰冰的物体,可以在遵守和违约的行为过程之后采取奖惩措施,同时在遵守和和违约的后果提前告知双方,不让任何一方陷入到对方的危险之下

    四、无法点对点地传递带有所有权的信息(信用缺失,价值贬低)

    互联网的核心精神是开放、共享、去中心化、自下而上、多元价值等,这些说法没错,但绝不是由于互联网的出现才产生的,而是因为市场这只看不见的手导致人类社会本身就有这种天然倾向。技术的进步导致交流更为高效,这样的倾向也就被进一步放大。所谓互联网精神,只是由于拥有了新的信息传递工具,是人类行为的自然投射。

    互联网促使信息的高效传输而被发明的,网络中,信息在全球范围内的点对点传输变得异常高效与廉价。然而,这种信息传输网络并没有对有价值的信息进行保护的内在机制,在网上复制、传播乃至篡改一条信息的成本几乎为零,无法点对点地传递带有所有权的信息。一些传统行业(比如唱片业、出版业)在互联网诞生后受到了很大冲击,就是这个特征带来的必然结果。

    五、伟大创举—记账货币

    雅浦岛位于太平洋西部的加罗林群岛中的一个小岛,雅浦岛上的居民进行的交易很多,但交易过程一般只是债务互相抵消的过程。当地人只是在上面做标记,以显示所有权的易手,其所有者无须持有它。
    这种奇特的货币制度背后是:一套由信用记录以及信用记录的清算构成的体系。
    信用货币发展到目前使用的电子货币,如信用卡、网上银行、手机银行等,进一步体现了记账货币的特点——当你通过网银给其他人转账的时候,没有发生任何物理货币的转移,只是银行里记账系统的账务发生了变化而已。不过现在的信用货币还没有去中心化,两个个体交易,需要有个可信的中间人来进行各自的扣款和增额,也就是所谓的记账,但是中心化的记账方式有明显的弱点:一旦这个中心出现问题,如被篡改、被损坏,整个系统就会面临危机乃至崩溃。

    6、伟大的创举

    区块链的本质是一种去中心化的记账系统,而比特币正是这个系统上承载的“以数字形式存在”的货币。
    从设计记账系统的角度,要达成去中心化的目标,显然需要具备以下两个条件:1、账本数据的存储必须是去中心化的,不能指定任何参与方拥有特殊的保存账本的权力,或者说,我们需要让所有参与方都平等地拥有保存账本的权力。2、记账行为本身必须是去中心化的,不能指定任何参与方拥有特殊的记账权力,或者说,我们需要让所有参与方都平等地拥有记录账务数据的权力。

    区块链:如果区块链是一个实物账本,那么区块就相当于账本中的一页,区块中承载的信息就是这一页上记载的交易内容。

    区块链是靠怎样的架构设计最终解决了去中心化记账的难题:竞争记账机制成为了解决问题的关键,就是以每个参与者的计算能力(“算力”)来竞争记账权的一种机制。在比特币系统中,大约每十分钟进行一轮算力竞赛,竞赛的胜利者获得一次记账的权力,即向区块链这个总账本写入一个新区块的权力,在一定时间内,只有竞争的胜利者才能完成一轮记账并向其他节点同步新增账本信息。计算能力只能决定赢得竞争的概率。用彩票系统做一个类比,算力高的节点相当于可以一次买很多张彩票的人,算力低的节点相当于一次只能买一张或是几张彩票的人。在一轮开奖中,一次买很多张彩票的人只是中奖概率更大,却并不是一定会中奖。

    算力竞争是如何做到的:区块链系统是通过一个称为“工作量证明”的机制完成的。类比:比如要组装一批玩具,早上起来我给了你一些零件,晚上回来便看到玩具摆在桌上,虽然我没有从早到晚盯着你做玩具的过程,但我也能确定你确实做了这么多工作。

    在这里插入图片描述

    展开全文
  • 什么时间60进制啊? ? ?

    千次阅读 2018-10-19 10:50:00
    时间60进制在不少领域内都有应用。比如时间、角度,还有我国的天干、地支记年法等等。...观点二:巴比伦人的应用最早的文字记载^示巴比伦人使用的以60为基的六十进制数字体系。使用六十进制,巴比伦人把7...

    时间
    60进制在不少领域内都有应用。比如时间、角度,还有我国的天干、地支记年法等等。那么,为什么时间要用60进制呢?
    观点一:古罗马帝国的传统
    我国自古以来最吉利的数字是5和9,而古罗马帝国是6和0。所以在很久以前,古罗马帝国时间就是60进制,再由于帝国间商人的文化交流,闵而被采纳,沿用至今。
    观点二:巴比伦人的应用
    最早的文字记载^示巴比伦人使用的是以60为基的六十进制数字体系。使用六十进制,巴比伦人把75表示成"1, 15“这和我们把75分钟写成1小时15分钟是一样的。
    大约公元前2000年出现了一种仅使用两个楔形符号的以60为基的位一值体系。在该体系中,"T"形的楔形文字表示1, ”〈"形的楔形文字表示10。这一数字体系被进一步推广到六十进制分数的表示上,但是没有表示0的符号。尽管如此,它对计算是非常有效的。同时,它莫定了时间的计量标准。
    观点三:圆周规定为360度的结果
    来自尼西亚(在今天的土耳其)的数学家喜帕恰斯(公元前190年一前120年)被认为是当时最伟大的天文学家。他创立了基于希腊几何学原理的天文学。他把圆分成360度,每一度又细分成60分,以此作为三角学的基础。
    为了方便,就把时间也用60进制划分。
    观点四:按天干、地支60甲子划分的结果
    时间的60进制是按照天干、地支的60甲子的关系划分成的,古人很多东西都运用了这种运算关系,但最初还是易经之因。因为易经本身就是古代人们的一种运算方式。60进制是人类在生存中所摸索出来的一大发明。
    60进制得到应用的原因
    有推测认为:10和60相比融通性较差,10只有2和5两个约数,而60有1、 2、3、 4、 5、 6、 10、 12、 20、 30、 60等12个约数。
    在现实生活中经常会出现某一数被分成2、 3、 4、 5等分的情况,目前还在广泛使用的1/4单位(quarter)就是例子。4不能整除10,但能整除60,所以60进制比10进制更容易避开小数的复杂计算。
    使用60进制最大的理由是表示小数的分数数量要比10进制多得多。实际使用中,将某一区间10等分则会变成0.1、 0.2、 0.3、……、0.9、 1,再将它们10等分,就会变成0.01、 0.02、 0.03、……、0.09、 0.1,如此继续下去,可将分数变成小数。
    但不幸的是最简单的1/3却不能用小数表示,因为3不是10的约数。

    转载于:https://www.cnblogs.com/Chary/p/9815120.html

    展开全文
  • 单片机简介: ...最早的设计理念通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。INTEL的Z80最早按照这种思想设计出的处理器,从...
  • 长效固定pptp是什么

    2021-03-12 14:47:30
    商家提供网络加速器可能会显示PPTP、L2TP等文字,但不知道是什么意思。现在小编在此回答PPTP和L2TP是vpn两个不同协议。下面具体来描述介绍! 什么是PPTP? 点对点隧道协议(PPTP)是Microsoft早期协议之一。在...
  • 最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。  然后出现了一个新的网页浏览器,“Mozilla”,其实就是“Mosaic...
  • 最早制定汉字编码GB2312,包括6763个汉字和682个其它符号95年重新修订了编码,命名GBK1.0,共收录了21886个符号。之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要...
  • 最早制定汉字编码GB2312,包括6763个汉字和682个其它符号95年重新修订了编码,命名GBK1.0,共收录了21886个符号。之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要...
  • Unicode是什么 UTF-8是什么

    千次阅读 2007-03-19 10:02:00
    最早制定汉字编码GB2312,包括6763个汉字和682个其它符号95年重新修订了编码,命名GBK1.0,共收录了21886个符号。之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要...
  • 最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大...
  • 最早制定汉字编码GB2312,包括6763个汉字和682个其它符号95年重新修订了编码,命名GBK1.0,共收录了21886个符号。之后又推出了GBK18030编码,共收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要...
  • User-Agent是什么意思捏?

    千次阅读 2011-11-03 10:29:30
    最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。 然后出现了一个新的网页浏览器,“Mozilla”,其实就是“Mosaic终结...
  • 两者相比,李进久老师这本《MFC深入浅出》除了文字更加通俗易懂(没有台湾人那么多废话,真搞不懂台湾人总是无故自大什么!),所分析东西更多,而且价格也只要二十几元,真的是不知道哪里可以买到,否则...
  • 事出必有因,CSS文字描边属性text-stroke我最早在2010年“CSS3 text-fill-color简介及应用展示”一文中就有提及,如今差不多七年过去了,期间并没有专门文章介绍text-stroke文字描边属性,那本文到底是什么风吹...
  • User-Agent是什么意思?【摘】

    万次阅读 2012-04-18 15:36:24
    最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。 然后出现了一个新的网页浏览器,“Mozilla”,其实就是“Mosaic终结者
  • 上周一篇《字符串比较,居然暗藏玄机》,我最早是在唐磊《这10行比较字符串相等代码给我整懵了》里看到,我用通俗语言,展开了“密码破解”案例。文末却没有提引用出处,这里和唐磊道个歉。 看了唐磊...
  • 最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。  然后出现了一个新的网页浏览器,“Mozilla”,其实就是...
  • 以往的WPS 着重处理文字,而现在的WPS 2000 极大地丰富了文字处理软件的内涵,它不仅有极强的文字处理功能,更重要的它能将多种对象的处理有效地融为一体。譬如,现在数据库文件格式众多,如 dBase 文件、FoxPro ...
  •  最早的时候有一个浏览器叫NCSA Mosaic,把自己标称为NCSA_Mosaic/2.0 (Windows 3.1),它支持文字显示的同时还支持图片,于是Web开始好玩起来。  然后出现了一个新的网页浏览器,“Mozilla”,其实就是“Mosaic...
  • Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别?...ANSI:最早的时候计算机ASCII码只能表示256个符号(含控制符号),这个字符集表示英文字母足够,其中,我们键盘上可见的符号的编码范围
  • 其实这些字串,最早是吾发现,并提出必须修改。这事也得到了执行,之后吾亦没有关心。 今天一看还有,就想到之前犯错了。错在哪里?就是自己看了之后,没有使用工具进行全面搜索。正确做法是什么? 使用工具全部...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 314
精华内容 125
关键字:

最早的文字是什么