Ⅰ 请问达到怎样的水平才能进微软这类公司从事搞编译器这类工作
我读研究生的时候才对编译开始有兴趣,当我毕业时我不知道我对什么感兴趣。结果,当时的成绩很好,他们也跟上了形势,然后给了我一些时间思考。
后来我也在想,我其实更大的兴趣是什么呢?其实是C++和挑战,做编译器也许是方便我更好的研究它,也有很大的挑战性,也许有一天我会因为发现更大的挑战而不做编译器了。
有什么书和方法,有很好的答案,我不会说。写下这些内容有点荒唐。
Ⅱ IQ,IP是什么意思
俺解释下
首先: BUG
所谓“(Bug)”,是指电脑系统的硬件、系统软件(如操作系统)或应用软件(如文字处理软件)出错。硬件的出错有两个原因,一是设计错误,一是硬件部件老化失效等。软件的错误全是厂家设计错误。那种说用户执行了非法操作的提示,是软件厂商不负责的胡说八道。用户可能会执行不正确的操作,比如本来是做加法但按了减法键。这样用户会得到一个不正确的结果,但不会引起bug发作。软件厂商在设计产品时的一个基本要求,就是不允许用户做非法的操作。只要允许用户做的,都是合法的。用户根本就没有办法知道厂家心里是怎么想的,哪些操作序列是非法的。
从电脑诞生之日起,就有了电脑BUG。第一个有记载的bug是美国海军的编程员,编译器的发明者格蕾斯·哈珀(Grace Hopper)发现的。哈珀后来成了美国海军的一个将军,领导了着名计算机语言Cobol的开发。
1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。
突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”[1]
从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)
第二:OEM
而OEM与现代工业社会有着密切的关系。一些着名的品牌商品制造商,常常因为自己的厂房不能达到大批量生产的要求,又或者需要某些特定的零件,因此向其他厂商求助。
这些伸出援手的厂商就被称为OEM(Original Equipment Manufacturer,原始设备生产商)。如将之引申到IT领域的话,则表示那些进行代工的生产商。例如CPU风扇,Intel或AMD公司本身并不生产,它们通常会找像日本三洋公司这样的专业电机制造企业作风扇OEM生产。
ODM又是怎么一回事呢?原来,某制造商设计出一种产品后,在某些情况下可能会被另外一些品牌的制造商看中,要求配上后者的品牌名称来进行生产,又或者稍微修改一些设计(如按键位置)来生产。这样做的最大好处是其他厂商减少了自己研制的时间。有些人也习惯性称这些产品是OEM.
Ⅲ 没考上高中该怎么办
一、优先初三复读。
首先,学生可以了解当地的中考复读政策,如果当地允许初三学生复读的话,学生可以再复读一年,然后争取考进高中,以后参加高考,实现大学梦。
当然,如果当地政策不允许初三复读,那么,学生可以考虑自学复读(可请家教)。根据当前各省市的相关中考复读政策来看,有些省市不允许公办初中、私立初中以及民办初中,甚至是培训班招收初三复读生,不过这些省市都没有禁止考生通过自学报名复读。
因此,学生如果有强烈上大学梦想,那优先考虑到学校复读,实在不行就自学复读。自学复读要成功的前提是足够自律,有自学能力。
五、学技能,然后自考提升学历。
出于各种各样原因,比如家庭实在贫寒,需要学生先谋生的话,那么学生可以考虑去技校学一项技能。一般来说,技校学习技能通常1年-2年就可以毕业获得相关证书。学生可以一边工作改善家庭经济情况,一边继续报名参加高校的继续教育学院进行学习,提升学历至专科或本科。
这样一来,学生在获得自考专科或者自考本科学历后,就业选择范围就会更大,甚至可以报名参加公务员考试或事业单位考试。
Ⅳ 我买了本c语言的书想自学计算机语言,翻了翻书觉得还是算了,因为智商不在服务区。
学习任何一门语言都是不容易的,但是只要坚持有恒心,最后一定会有所成功。 设计语言中也是有[1]“单词”,“语法”,“语义”三部分组成,其中跟人类语言一样,“单词”“语法”是基础,而为达到交流的目的“语义”是整个程序设计语言的重点。当然相对人类语言(以英语为例)而言程序设计语言(以C语言为例)显然要有简单得多的组成,所以这里我们要首先确立自己对学好程序设计语言的信心。1、基础, C语言的单词是由26个英文字母、数字(0,1,2……9)、运算符以及其他特殊符号组成,所以相比而言学习C语言是多么的幸福。“语法”,在英语中是如常见构词法、时态、常用句型、特殊用法、固定用法等等(呵呵,不是语言专家如有兴趣可以参考英语语法书籍),仅拿构词法来说动词后面加er就变成名词(work-worker),名词后面加y就变成形容词(wind-windy)等十多种变换还要记忆些特殊变换,复杂且繁琐,假如算上时态、句型等那就更复杂了。在C语言中也同样也存在有语法,比如标识符、常量、表达式、数据定义、函数定义、变量初始化、语句构成、预处理命令等大致8种语法,如标识符[2]可由字母、数字以及下划线组成,且必须以字母或下划线开头,区分大小写,另外在不同的编译器中字符数目有不同的规定,一般为7个字符。不过这里有些可能会被忽略的就是书写格式,在C语言中书写格式也是需要被注意的,因为格式也可以当作C语言的语法项目,如语句是以分号‘;’作为结束的标志的而不是以换行作为结束标志.综上所述要学好一门程序设计语言首先就要象学习英语一样先熟记至少要熟悉这门语言的“单词”和“语法”然后才能谈得上使用,俗话说“万丈高楼平地起”,学好C语言的必要前提就是先打下坚实的C语言基础.2、重点“语义”即语句的意思、含义。同人类语言一样,程序设计语言最重要的目的还是“交流”,所以写一段没有任何作用的代码就如同说一句没有任何意思的话是没有意义的,在这一点上两者是共同的,至于在其他某些方面两者也有惊人的相似之处,不过与人类语言相比,程序设计语言毕竟是与计算机交流,交流对象计算机与人类的不同也决定了程序设计语言与人类语言还是有所区别,甚至可以说是存在巨大的“鸿沟”,这也就是学习程序设计语言的重点。首先明确,即要在与计算机交流时“语义”必须明确,否则计算机将无所适从,因此作为交流工具的程序设计语言的“语义”也必须是能够明确无二义的。其次正确,包括正确的输入以及正确的逻辑。由于计算机输入测试用例也能够完全正确,看看源程序,其中增加了一个标志位便把所有的情况给考虑进去了,相比前一个程序,程序2就是直白的描述了解题的思路,而程序3看起来好象不好理解但似乎更能满足“天才程序员”的欲望,这也就是编程时使用的一些小技巧。总体比较三个程序,可以说类似程序1的错误——逻辑错误是我们程序员比较容易犯的,也是在编程调试过程中最费时间的,至于语法错误编译器可以很快的给我们找出错误的地方程序2逻辑正确但相比程序1思路要更难想到,程序3思路不但正确而且还在编程的过程中使用了一些编程技巧,所有这些开阔的逻辑思路(解决问题),快速的调试方法及过程(发现错误).3、两者之间的关系综合上面的叙述,我们把编程看成程序设计语言的“单词”“语法”“明确的语义”“正确的语义”四个部分,可以看出前面三个部分是几乎所有的程序设计语言自身所具有的,“单词”“语法”不同的程序设计语言有所不同,但如果你仔细观察所有的程序设计语言,可以分成几类,而且有很多地方也有相通的地方,有点象一通百通的味道,这也就是为什么很多有经验的程序员可以在很短的时间就能熟悉其他语言的原因。最后“正确的语义”包括开阔的,正确的逻辑思路以及发现并纠正错误的能力则是属于我们自己的,这也是我们区别于其他人的地方,这些都需要在经常性的编程实践中去积累去开阔,所以是所应该关注的重中之重。书本是纲领,我们首先要熟悉一门语言的粗枝大叶,在编程的过程中不至于老是去翻书查找一门语言的基本语法,比如说函数的传递方式,函数调用的一些特点,这样不仅非常浪费时间而且一直困扰于语法中使得自己有种身缘“庐山”中的那种非常迷茫的感觉。因此编程实践同样不可少,编程实践不仅可以“让语义正确”即开阔编程思路,发现错误(调试),累计编程技巧,而且可以在编程过程中熟悉这门语言,熟悉这门语言的细节部分,但也请记住这些细节虽然重要,但也仅仅是细节。当然光看书,光有理论那也是不行的,有“纲领”而没有“章程”,有“纲领”而没有实施那同样也是没用的,毕竟实践是检验真理的唯一标准,实践过程中给理论修枝剪叶。总得来说熟悉一门程序设计语言的语法是编程实践的先行,而编程实践是可以更好促进对程序设计语言基本语法知识的理解和熟悉。
Ⅳ 我智商一般,学习C++需要多久
一个月的时间啊……估计很难……
我也是学计算机的~~当初有学C语言~~其实它并不难啊,关键要看你的自学能力如何?
我当时学C++时,在老师上课前自己提前自学几个章节,这样上课的时候一遇到不懂的地方就能即使发现,趁下课的机会赶紧问老师~~而且因为有提前自学,听讲的时候也能很容易听懂。
如果你的自学能力和理科的理解能力比较强的话,学C++没问题的~~~至于时间~~~个人觉得至少还是学2个月以上吧,知识才可能真正被掌握。
一个月的时间还是很仓促~~~不过要是你肯玩命地学,说不定也能成功~~
总之我的建议是自学+认真听讲+多做练习题!(C++编程的题目变化多样~~必须把最常见的各类体型多做几遍)
Ⅵ 同样需要编译器为什么汇编语言比较快
绝大多数情况下,并不是。
事实上除了对CPU工作模式极端熟悉的人,一般人是很难用汇编写出更高效的代码的。
编译器虽然智商比不了人,但是它更精通优化。生成高效的代码需要透彻地掌握硬件的工作模式,每个细节都要考虑清楚。而且这很大程度上是软件更擅长但人并不擅长的繁重无脑又要求极高精确性的机械化工作。
当然专业搞优化的人还是能打败编译器的,因为编译器能做到的人终究还是可以做到。而人要比编译器聪明得多。编译器只能遵循一些规定好的模式进行优化,人可以创造编译器根本不知道的优化方法。某些逻辑靠编译器是没办法生成出来的,只能由人直接用汇编写。汇编语言虽然也要编译,但是一般会和机器指令直接对应,相当于要求CPU在细节上严格按人的思路工作,而高级语言并不能控制太多细节。
Ⅶ IQvivi,手机怎么样,已经对小米九彻底的失望。
现在国内知名的手机还是有挺多的,比如华为,OPPO,vivo就挺不错的记得内存买大一点的,这样用起来舒服,和电量大一点,这样使用时间长,免得老充电也麻烦!
Ⅷ C语言是用哪个语言开发出来的
参考 Dennis M. Ritchie 写的 The Development of the C Language:Chistory,C 语言诞生的基本过程就是 Ken Thomson 不满意 BCPL,于是设计了 B 语言,并且用 BCPL 为 B 语言写了一个编译器,然后从这个编译器开始自举写新的 B 语言编译器。贝尔实验室的众人在 PDP-7 上用 B 语言写了各种各样的东西后又不满意 B 语言了,于是 1971 年 DMR 开始在新买的 PDP-11 上用 B 给 B 写扩展,称之为 NB (new B,此处省略吐槽若干),扩展着扩展着离 B 的画风越来越远了,就取了一个新名字变成了一门新语言—— C 语言。 1973 年夏天他们用手头的编译器和语言给 PDP-11 重写了一个 Unix Kernel。C 语言大约就是这个时期成型的。
所以,可以说第一个 C 语言的编译器是用 B 语言,或者说是扩展过的 B 语言(NB)写的。因为是一边改进语言一边用改进了的编译器这样滚雪球写出来的,也可以看成是 C 语言写的?毕竟 DMR 也说了,很难确定什么时候 C 自己变成了一门新语言……
Ⅸ 开发一个 C++ 编译器的难度有多大,难点又在哪里
C++的前端是出了名的复杂度和可靠性要求并驾齐驱的软件。
(这两点都比它高一个数量级的大概就只有OS了)
对于这种系统,唯一的办法就是烧钱。
烧钱的作用主要包括:
1.留人;
2.填坑;
3.买买买。
先说留人:复杂度一般是“细节”的代名词。现实中的编译器大多数以递归下降为主,自底向上的归纳推导为辅。这两样在教科书上也就是几页纸的事情。但是现实总是很残酷的,人们总想让语言更加“易用”,这就意味着各种上下文相关的情况都会出现。
对于C++来说,你要判断一个符号是类型或者变量(比如这个符号被用在模板参数中),要看前面的声明/定义。这就是一个上下文相关的推导。然后你就会写大量的if else switch case之类的代码来解决各种各样的可能分支。写它的人当然知道它是做什么的,但是如果这个人离职了,新来一个人,就呆掉了,这写的都是什么煞笔玩意儿。因为它不知道现实中怎样的需求会导致奇形怪状的逻辑。所以人员的稳定,对于这种长周期迭代、逻辑复杂的项目是很重要的。但是人的水平要求高吗?不算高也不算低。总结来说就是:有逻辑,知好歹。技术什么都可以培养,但是态度和基本智商是比较难培养起来的。
至于怎么保证人员稳定?很简单:加薪。
再说填坑:编译器是对正确性要求很高的基础软件。这里的正确性既包括产生的代码的正确性,也包括编译器自身对于各种问题的容忍度和足够丰富的错误提示。容错和错误提示本身也是代码,也有很大的出错几率。所以这些软件,bug少不了。但是作为基础软件,你又不能随便就2+3搞成了2*3,这样还怎么让别人相信爱情。所以要烧很多钱来养一帮debugger。
再说买买买:古人日:我们不用很麻烦很辛苦也可以成佛。既然这么费神我们自己做干什么,不如买别人的吧。于是MS就干脆不自己做了,直接去EDG整了个前端,这样就可以少了不少人年。这就是传统土豪和水果这种新暴发户想的不一样的地方。
传统土豪想的是:我们有这么多钱为什么还要自己解决问题呢?买买买!
水果新贵则是:啊呀,不小心有了这么多钱,我们要不要给自己制造点问题好把这些钱花出去?
Ⅹ Intellij IDEA编译器,怎么自动提示强转类型和自动实现监听
Intellij IDEA本身就支持此功能。把鼠标放到红色代码上,按下alt+enter
会给出智能修正提示,一般第一项就是case to 强制转换。直接回车就可以了。
可以参考此回答http://..com/question/1239187330921318619.html