计算机
基础
操作系统 | 计算机组成原理 | 计算机网路 | 编译原理 | 计算机体系结构
官方源镜像源
学习资源
开源平台
知名博主
技术博客
SegmentFault 思否 | 极术社区 | 简书 | 掘金 | CSDN | 博客园 | 知乎
互联网资讯
36kr | 虎嗅 | 创业邦 | 雷锋网 | 钛媒体 | 猎云往 | InfoQ
行业标准
ICP备案
IETF
IETF (The Internet Engineering Task Force互联网工程任务组)它是一个由为互联网技术工程及发展做出贡献的专家自发参与和管理的国际民间机构。成立于1985年底, 其主要任务是负责互联网相关技术规范的研发和制定。目前,IETF已成为全球互联网界最具权威的大型技术研究组织。
IETF共包括八个研究领域,132个处于活动状态的工作组
- 应用研究领域(app— Applications Area),含20个工作组(Work Group)
- 通用研究领域(gen—General Area),含5个工作组
- 网际互联研究领域(int—Internet Area),含21个工作组
- 操作与管理研究领域(ops—Operations and Management Area),含24个工作组
- 路由研究领域(rtg—Routing Area),含14个工作组
- 安全研究领域(sec—Security Area),含21个工作组
- 传输研究领域(tsv—Transport Area),含1个工作组
- 临时研究领域(sub—Sub-IP Area),含27个工作组
IEEE
IEEE (Institute of Electrical and Electronics Engineers)电气电子工程师学会,建会于1963年1月1日。总部在美国纽约市。在150多个国家中它拥有300多个地方分会。它既是一个国际性非营利组织(ORG),也是一个专业组织professional organization,致力于电气、电子、计算机工程和与科学有关的领域的开发和研究。IEEE被国际标准化组织授权为可以制定标准的组织,设有专门的标准工作委员会,有30000义务工作者参与标准的研究和制定工作,每年制定和修订800多个技术标准。IEEE的标准制定内容有:电气与电子设备、试验方法、原器件、符号、定义以及测试方法等。
ISO
ISO (International Organization for Standardization国际标准化组织) 是世界上最大的国际化标准的制定和发布组织。它由世界上157个国家和地区的标准化团体组成,总部设在瑞士日内瓦。它是一个非政府组织。
IEC
IEC (International Electrotechnical Commission国际电工委员会),是非政府性国际组织,是联合国社会经济理事会的甲级咨询机构,正式成立于1906年成月,是世界上成立最早的专门国际标准化机构。负责有关电气工程和电子工程领域中的国际标准化工作。
IEC非常重视与ISO的技术合作。尽管二者在工作范围上有明确的界定,但随着高新技术的迅速发展和渗透,二者之间相互交叉的国际标准化领域和项目越来越多。为了减少工作重叠,保证国际标准体系的协调和一致,ISO/IEC不仅在技术层次上加强合作,而且在机构和管理方面采取了一系列协调措施,其中包括成立了ISO/IEC联合计划委员会,负责对有交叉或有争议领域的事务进行协调和规划;共同制定了ISO/IEC导则,使两个组织在标准制定和标准格式上保持一致;在信息技术领域,成立了ISO/IEC第一联合技术委员会,共同制定信息技术领域里的国际标准。
ITU-T
ITU-T(ITU Telecommunication Standardization Sector国际电信联盟远程通信标准化组), 它是国际电信联盟管理下的专门制定远程通信相关国际标准的组织。该机构创建于1993年,前身是国际电报电话咨询委员会(CCITT 是法语Comité Consultatif International Téléphonique et Télégraphique的缩写, 英文是International Telegraph and Telephone Consultative Committee)。由ITU-T指定的国际标准通常被称为建议(Recommendations)。由于ITU-T是ITU的一部分,而ITU是联合国下属的组织,主管信息通信技术事务。总部设在瑞士日内瓦,191个成员国。ITU-T的各种建议的分类由一个首字母来代表,称为系列(见下文),每个系列的建议除了分类字母以外还有一个编号,比如说"V.90"。
W3C
W3C 万维网(World Wide Web)万维网联盟创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。到目前为止,W3C已发布了200多项影响深远的Web技术标准及实施指南,如广为业界采用的超文本标记语言HTML(标准通用标记语言下的一个应用)、可扩展标记语言XML(标准通用标记语言下的一个子集)以及帮助残障人士有效获得Web信息的无障碍指南(WCAG)等,有效促进了Web技术的互相兼容,对互联网技术的发展和应用起到了基础性和根本性的支撑作用。
HTML5规范、WWW 标准
ACM
ACM (Association for Computing Machinery)美国计算机协会,创立于1947年,是全球历史最悠久和最大的计算机教育和科研机构。目前ACM提供的服务遍及100余国家,会员人数达80,000多位专业人士,涵盖工商业,学术界及政府单位,并有近1000个机构会员. ACM致力于发展信息技术教育、科研和应用。全球计算机领域的专业人士将ACM 的出版物和会议记录视做最具权威和前瞻的领导者。
3GPP
3GPP 的目标是实现由2G网络到3G网络的平滑过渡,保证未来技术的后向兼容性,支持轻松建网及系统间的漫游和兼容性。 其职能: 3GPP主要是制订以GSM核心网为基础,UTRA(FDD为W-CDMA技术,TDD为TD-SCDMA技术)为无线接口的第三代技术的规范。
ETSI
ETSI 欧洲电信标准化协会(European Telecommunications Standards Institute)是由欧共体委员会1988年批准建立的一个非营利性的电信标准化组织,总部设在法国南部的尼斯。ETSI的标准化领域主要是电信业,并涉及与其他组织合作的信息及广播技术领域。ETSI作为一个被CEN(欧洲标准化协会)和CEPT(欧洲邮电主管部门会议)认可的电信标准协会,其制定的推荐性标准常被欧共体作为欧洲法规的技术基础而采用并被要求执行。
ANSI
ANSI (American National Standards Institute)美国国家标准协会,是非赢利性质的民间标准化组织,是美国国家标准化活动的中心,许多美国标准化学协会的标准制修订都同它进行联合,ANSI批准标准成为美国国家标准,但它本身不制定标准,标准是由相应的标准化团体和技术团体及行业协会和自愿将标准送交给ANSI批准的组织来制定,同时ANSI起到了联邦政府和民间的标准系统之间的协调作用,指导全国标准化活动,ANSI 遵循自愿公、公开性、透明性、协商一致性的原则.ANSI是国际标准化委员会(ISO)和国际电工委员会(IEC)5个常任理事成员之一,4个理事局成员之一,参加79%的ISO/TC的活动,参加89%的IEC/TC活动。ANSI 是泛美技术标准委员会(COPANT)和太平洋地区标准会议(PASC)的成员。
类型系统
类型系统TypeSystem 的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。1. 先定义一些基础概念Program Errorstrapped errors。导致程序终止执行,如除0,Java中数组越界访问untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址Forbidden Behaviours 语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.Well behaved、ill behavedwell behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。ill behaved: 否则为ill behaved...2. 有了上面的概念,再讨论强、弱类型,静态、动态类型
划分
- 强类型语言和弱类型语言(类型安全和类型不安全)
- 动态语言和静态语言
类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。
1. 先定义一些基础概念
Program Errors
- trapped errors。导致程序终止执行,如除0,Java中数组越界访问
- untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址
Forbidden Behaviours
语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.
Well behaved、ill behaved
- well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。
- ill behaved: 否则为ill behaved...
2. 有了上面的概念,再讨论强、弱类型,静态、动态类型
强、弱类型
- 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。
- 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型
前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的
动态、静态类型
- 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed;
- 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。
3. 误区
大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。 Ocaml是静态隐式类型
静态类型可以分为两种:
- 如果类型是语言语法的一部分,在是explicitly typed显式类型;
- 如果类型通过编译时推导,是implicity typed****隐式类型, 比如ML和Haskell
4.下面是些例子 无类型: 汇编 弱类型、静态类型 : C/C++ 弱类型、动态类型检查: Perl/PHP 强类型、静态类型检查 :Java/C# 强类型、动态类型检查 :Python, Scheme 静态显式类型 :Java/C 静态隐式类型 :Ocaml, Haskell


强类型语言
使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如Java、C# 和 Python,比如Java中“int i = 0.0;”是无法通过编译的;
弱类型语言
数据类型可以被忽略的语言。与强类型语言相反, 一个变量可以赋不同数据类型的值,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加。C/C++、PHP都是弱类型语言,比如C++中“int i = 0.0;”是可以编译运行的;
动态类型语言
是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言;
静态类型语言
与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、Java都是静态类型语言的典型代表。
什么是类型安全?
类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的程序员可能使用类型相当安全的语言写出类型不太安全的程序。绝对类型安全的编程语言暂时还没有。
类型安全意味着编译器在编译的时候会验证类型,如果你尝试将一个错误的类型分配给一个变量时,会抛出一个错误。
现在一般的类型安全概念,指程序在经过编译之后,就不能够出现“类型匹配错误”。所谓“类型匹配错误”是指,一个引用(变量标识和指 针等)总是指向其希望的类型,一个引用进行某项操作必须是其确实拥有的能力。
对C的类型安全的讨论
不是类型安全的
- Union:如果一个Union本来存储的是float,但却在后来被当作int访问,不会在编译时检查出来,示例代码如下:
union CountType
{
int a;
float b;
}count;
count.b = 123;
printf("%d\n", count.a);
- 字符指针:字符指针能够进行下标操作,而下标操作难道不应该是数组这样的类型才能够做的操作么?
对C++类型安全的讨论
C++在某些方面比C的检查更严格,但是它除了有上面提到的C的问题外,甚至还有新的问题!
- 对象指针和定位new共同引发的问题:
A* pa = new A();
B* pb = new(pa) B();
pa->method();
- 指针和delete共同引发的问题:野指针问题
对Java类型安全的讨论
Java比C/C++前进了一大步,它取消了Union、指针,采用了自动垃圾回收而不是delete。但是仍然可能有问题:
早期版本的Java没有支持泛型,比如容器Vector不能够在创建的时候指定容纳的类型,这样填入容器的对象实际上被upcast成object,当取 出的时候还需要显式的downcast。这种downcast本身就是危险的。
如果不考虑显式的downcast,一些类似的情况也是不安全的:
String[] sa = new String[2];
sa[0] = "hello world";
object[] oa = sa;
oa[0] = new Integer(1);
System.out.println(sa[0]);
实际上upcast到object时,就应该保证oa只读
对C#类型安全的讨论
支持了泛型,显式downcast有所减少;但是上面说的Java的第二个问题依然没办法解决。
不管对哪个常见的语言,数组越界问题始终没有很要解决。
https://www.zhihu.com/question/19918532
https://blog.csdn.net/u014486460/article/details/83038398
https://www.jianshu.com/p/ab47a2fb090e?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
开发要搞清楚什么是并发,并行,串行,同步,异步?
实际开发中很多人会因为并发,并行,串行,同步,异步等名词搞混,搞不清楚这些名称的意思和之间对应的关系。其实这也是实际开发中必须掌握一些知识点。掌握和理解这些概念也有助于我们去更好去开好。
1.并发编程又叫多线程编程。
在程序中,往往有很多很耗时的工作,比如上传文件、下载文件、跟客户聊天需要长时间建立连接。这种时候,一个线程是服务不了多个用户的,会产生因为资源独占产生的等待问题。并发的实质是一个物理CPU(也可以多个物理CPU) 在若干道程序之间多路复用,并发性是对有限物理资源强制行使多用户共享以提高效率。(并发指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已))
并发当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。
2.“并行”指两个或两个以上事件或活动在同一时刻发生。在多道程序环境下,并行性使多个程序同一时刻可在不同CPU上同时执行。(hadoop集群就是并行计算的)
当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
并发和并行
并发和并行是即相似又有区别的两个概念,并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能有一道程序执行,故微观上这些程序只能是分时地交替执行。倘若在计算机系统中有多个处理机,则这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序,这样,多个程序便可以同时执行。
3.串行、并行:
并行和串行指的是任务的执行方式。串行是指多个任务时,各个任务按顺序执行,完成一个之后才能进行下一个。并行指的是多个任务可以同时执行,异步是多个任务并行的前提条件。
4.同步、异步:
指的是能否开启新的线程。同步不能开启新的线程,异步可以。
异步:异步和同步是相对的,同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。 异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。
5.多线程:多线程是程序设计的逻辑层概念,它是进程中并发运行的一段代码。多线程可以实现线程间的切换执行。
https://blog.csdn.net/qq_26442553/article/details/78729793
硬件
什么是路由器? 路由器,是连接因特网中各局域网、广域网的设备,它会根据信道的情况自动选择和设定路由,以最佳路径,按前后顺序发送信号。 路由器是互联网络的枢纽,也就是所谓的“交通警察”。
什么是交换机? 交换机意为“开关”,是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。从广义上来看,网络交换机分为两种:广域网交换机和局域网交换机。广域网交换机主要应用于电信领域,提供通信用的基础平台。而局域网交换机则应用于局域网络,用于连接终端设备,如PC机及网络打印机等。
什么是集线器? 集线器(Hub)是指将多条以太网双绞线或光纤集合连接在同一段物理介质下的设备。集线器是运作在OSI模型中的物理层。它可以视作多端口的中继器,若它侦测到碰撞,它会提交阻塞信号。