• 关于

    硬件编程是什么

    的搜索结果

问题

【教程免费下载】OpenACC并行编程实战

玄学酱 2019-12-01 22:07:41 1149 浏览量 回答数 0

回答

谭浩强的C只不过使你熟悉了C的语法和一些基本知识,并且让你对C编程有个初步的认识,进而可以学习一下数据结构,学习数据结构是学习C很好的一个方法,指针是C的精华,数据结构中的算法大量的使用了指针,通过数据结构的学习会让你在C的编程上上一个台阶。另外阅读一些关于C的经典书籍,如:C和 指针,C专家编程、C陷阱与缺陷等。这些书籍,有了谭浩强那本书的基础都是可以阅读的,会让你对C有更加的深刻的理解和认识。最后,记住,呵呵,多练习多思考才能 让你真正的学会编程。 以上给你说的都是打基础,俗话说,内功深厚,什么招式都能练会,上面的基础就是让你修炼内功,之后就可以再学习一些更高级的东西,如windows程序设计,硬件感兴趣了可以搞单片机,还可以转到其他的语言如java,这都是后话了。先好好打基础吧,基础打好了,你会发现其他的都是浮云。呵呵

liujae 2019-12-02 01:22:20 0 浏览量 回答数 0

问题

如何给项目选择最合适的编程语言?

chaipanpan 2019-12-01 21:04:01 9813 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

CoffeeScript首先我们来看看 CoffeeScript:CoffeeScript 包含 68 个概念,分为 8 组。注意我把元编程作为一个概念,因为它主要基于可执行类体的概念之上。Ruby很显然,Ruby 更加复杂,有 96 个概念,分11组。比 CoffeeScript 更复杂的类模型,还包括常量、块和操作符重载。C++最后是 C++:C++ 有 189 个概念 11 个分组,是 Ruby 的 2 倍,是CoffeeScript 的 3 倍。C++里的某些概念(比如命名解析)因为有很多微妙的规则,所以更加复杂。而且因为有太多不同的范畴,C++里的名称概念也比其它语言更复杂。相比之下,在动态语言里,几乎所有东西都是常量或者变量(包括类名和函数名)。还有一点,我有意地忽略了“编译”和“链接”,因为CoffeeScript和Ruby里并没有这些功能。从上图可以看出,C++复杂是有很多原因的,其中之一就是静态类型系统(static type system),另一方面是因为模板(template),还有就是命名系统(name system)以及复杂的类模型(complex classmodel)。底层的驱动肯定是性能和类型安全的。上图还缺少哪些信息?我没提到程序员在练习中需要掌握多少技巧,比如:标准类库(standard libraries)编程语言习语和最佳范例(language idioms and best practices)并发概念(concurrency concepts)设计模式(design patterns)这一点在从入门到精通时更为明显。我相信在这一点C++同样是最复杂的。比如像《 C++ Coding Standards 》这样的书:《101 Rules》、《 Guidelines 》和《Best Practices》以及《 Effective C++ 》等等。这些书虽然已经涉及很多内容,但是旨在解决日常问题,并没有考虑到复杂的使用。C++绝对比这些书里说的要更加博大精深!同样,其它编程语言也有最佳范例和习语需要学习,但我觉得大部分语言的会比C++少得得多。重点是什么?我并不是为了抱怨C++到底是多么庞大和复杂。对于硬件、性能限制明显的大型项目,综合考虑工具、库和开发者方面的因素,没有哪种语言能够代替C++。但是,你需要要注意到C++编程里哪些是必须了解的,这一点很重要,因为这深深影响到课程教学和作为项目语言的选择。C++并不是一门很容易入门的编程语言,相反学习这门语言会很费时间,而掌握它更费时间。因此,“自上而下”地学习C++很有意义!随着C++11标准的出台,C++现代高级子集(及其标准库)的入门变得相对容易一些了,你只需要之后逐渐理解其复杂的和低级特性。换句话说学习std::shared_ptr应该在裸指针之前,lambda在仿函数之前,std::array在C样数组之前。如果你想使用C++开发新项目,开发者的经验等级和剩下的巩固C++能力的时间很需要考虑。下面这一点也很重要:因为C++的复杂性,开发者语言知识经验差别可能会非常大,所以在面试和培训时要非常注意这点!团队成员水平有明显的差距时,能力强的和弱的开发者都不会舒服。

a123456678 2019-12-02 01:56:42 0 浏览量 回答数 0

回答

因为数据结构不只是内存中数据的排列,它是对数据的一种组织方式,就像图书馆要排书一样,是为了便于操作,同时它本身也集成了对通用操作:比如查找、比较等的支持。数组不是一种数据结构,而是一种数据类型。一个完整的数据结构包括逻辑结构和存储结构。通常选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。 因此在语言实现上,数据结构通常也会包含与之相对应的算法集合,这些算法是指基本算法:查找、索引、比较等。 数据结构的逻辑结构和硬件是没有关系的,而其存储结构受到计算机硬件系统工作方式的影响,通常这点影响在于数据时顺序存储还是离散存储。算法的基础是数据结构。只有指定明确的数据结构,算法才能设计完成,脱离数据结构,算法是无法,也不可能成立的。因为不需要数据的算法就不是一个有效的计算机算法,算法中任何对数据的组织形式都可以被称之为数据结构。 2.数据结构在编程中的地位是极其重要的,是一个程序实现的基础中的基础,在此基础上才能构建算法。通常而言,你不了解什么高深的算法,一样能完成工作,但是如果你不了解基本的数据结构,那么可以说,你根本就不能完成一个任何有实质性内容的程序。Donald Ervin Knuth教授在其《计算机程序设计艺术》的第一卷《基本算法》中花费的绝大部分的篇幅去论述数据结构。由此可见数据结构对算法的重要性。

沉默术士 2019-12-02 01:23:21 0 浏览量 回答数 0

问题

上周一去一家公司面试碰到的一些题目 热:报错

kun坤 2020-06-08 11:05:42 3 浏览量 回答数 1

回答

“程序设计 = 算法 + 数据结构”是瑞士计算机科学家Niklaus Wirth于1976年出版的一本书的书名,很快就成了在计算机工作者之间流传的一句名言。斗转星移,尽管新技术方法不断涌现,这句名言依然焕发着无限的生命力,它借助面向对象知识的普及,使数据结构技术更加完善和易于使用。由此,也说明了数据结构在计算机学科中的地位和不可替代的独特作用。 然而,在可视化程序设计的今天,借助于集成开发环境我们可以很方便、快捷地开发部署应用程序,程序设计似乎不再只是计算机专业的人员的专利,很多人以为,只要掌握了几种开发工具就可以成为编程高手了,其实这是一个误区。纵然,我们可以很熟练地掌握一门程序设计语言、熟练地运用各种IDE开发应用程序,但是我们写出的代码是否是优良的。我们的设计是否合理。代码执行是否是高效的。代码风格是否是有美感的。更甚的说我们所写出代码的是否是艺术。 在长达几年的时间内,我总是陷在了一个误区里面:即认为工程能力和算法能力是不相干的两回事,我们似乎可以很轻松地完成一个工程项目,至少我在做一些MIS系统的时候一直都是这么认为的,甚至觉得根本不需要所谓的算法或数据结构。当时一直想不通的是为什么Google、百度这样牛的公司却对ACMer们如此青睐,对于这种招聘的标准感到疑惑不解。为什么他们不在技术(多线程、网络编程、分布式系统等)上做要求,却偏偏只关注这么一小块的算法设计。 我曾经反复地告诉自己“程序设计 = 算法 + 数据结构”在70年代提出是受限于计算机硬件,当时的内存不足、计算能力不强,程序需要设计足够精巧细致。再看当前主流的计算机配置,比70年代的大型机运算能力还要强大,我们好像完全不用担心算法设计的问题。报着这样的想法,我向来都不太重视算法,而且工程中对算法的需求并不多。 只是有一天,我突然发现我只是片面地关注其中一个方面,硬件能力是提升了,但同时人们所面对的信息、数据、运算任务的规模也是极大的膨胀了,而且膨胀的规模比硬件本身运算能力提升的规模还要大很多。算法和数据结构不仅没有贬值,反而比之前那个时代显得更为重要。试想,在互联网迅猛发展的今天,一个中等规模的企业每天所产生的数据量能达到GB级甚至TB级。要处理这样的海量数据不是说单纯的硬件运算能力上来就解决了的,设计优良的算法和数据结构设计能够在1分钟之内完成任务,而一个糟糕的设计则可能需要1个小时的运行。 一般认为,一个数据结构是由数据元素依据某种逻辑联系组织起来的,这种对数据元素间逻辑关系的描述称为数据结构。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。当然,有些情况下事情也会反过来,我们根据特定算法来选择数据结构与之适应。算法则可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤,或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 总的来说,数据结构和算法并不是一门教你编程的课,它们可以脱离任何的计算机程序设计语言,而只需要从抽象意义上去概括描述。说的简单一点,数据结构是一门告诉你数据在计算机里如何组织的课程,而算法是一门告诉你数据在计算机里如何运算的课程,前者是结构学、后者是数学。程序设计就像盖房子,数据结构是砖、瓦,而算法则是设计图纸。你若想盖房子首先必须要有原材料(数据结构),但这些原材料并不能自动地盖起你想要的房子,你必须按照设计图纸(算法)一砖一瓦地去砌,这样你才能拥有你想要的房子。数据结构是程序设计这座大厦的基础,没有基础,无论设计有多么高明,这座大厦不可能建造起来。算法则是程序设计之灵魂,它是程序设计的思想所在,没有灵魂没有思想那不叫程序,只是一堆杂乱无章的符号而已。在程序设计中,数据结构就像物质,而算法则是意识,这在哲学上可以理解为:意识是依赖与物质而存在的,物质是由意识而发展的。双方相互依赖,缺一不可。 当然最经典的数据结构是有限的,包括线性表、栈、队列、串、数组、二叉树、树、图、查找表等,而算法则是琳琅满目的,多种多样的。就好像数据结构是人体的各种组织、器官,算法则是人的思想。你可以用自己的思想去支配你的身体各个可以运动的器官随意运动。如果你想吃苹果,你可以削皮吃,可以带皮吃,只要你愿意,甚至你可以不洗就吃。但无论如何,你的器官还是你的器官,就那么几样,目的只有一个就是吃苹果,而方式却是随心所欲的。这就是算法的灵活性、不固定性。因此可以这样说:数据结构是死的,而算法是活的。 我花了四年时间才走出这个误区,值得庆幸的是不算太晚,而我的梦想是要做一名优秀的架构师,缺乏数据结构和算法的深厚功底,很难设计出高水平的具有专业水准的架构和应用,数据结构和算法则是我实现梦想最坚实的基石。现在,也正是我需要开始沉淀的时刻。程序设计这项伟大的工程,教授于我的将不仅仅是技术这么简单,我期待它能给我以更深的思考与感悟,激发我对生命的热爱,对理想的执着,对卓越的追求。

琴瑟 2019-12-02 01:22:02 0 浏览量 回答数 0

回答

如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本, 你会选择哪本书呢。我希望这个书单列表内容丰富,可以涵盖很多东西。” 1、《代码大全》 史蒂夫·迈克康奈尔 推荐数:1684 “优秀的编程实践的百科全书,《代码大全》注重个人技术,其中所有东西加起来, 就是我们本能所说的“编写整洁的代码”。这本书有50页在谈论代码布局。” —— Joel Spolsky 对于新手来说,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中99%的观念。– esac Steve McConnell的原作《代码大全》(第1版)是公认的关于编程的最佳实践指南之一, 在过去的十多年间,本书一直在帮助开发人员编写更好的软件。 现在,作者将这本经典著作全新演绎,融入了最前沿的实践技术,加入了上百个崭新的代码示例, 充分展示了软件构建的艺术性和科学性。 McConnell汇集了来自研究机构、学术界以及业界日常实践的主要知识, 把最高效的技术和最重要的原理交织融会为这本既清晰又实用的指南。 无论您的经验水平如何,也不管您在怎样的开发环境中工作,也无论项目是大是小, 本书都将激发您的思维并帮助您构建高品质的代码。 《代码大全(第2版))》做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。 2、《程序员修炼之道》 推荐数:1504 对于那些已经学习过编程机制的程序员来说,这是一本卓越的书。 或许他们还是在校生,但对要自己做什么,还感觉不是很安全。 就像草图和架构之间的差别。虽然你在学校课堂上学到的是画图,你也可以画的很漂亮, 但如果你觉得你不太知道从哪儿下手,如果某人要你独自画一个P2P的音乐交换网络图,那这本书就适合你了。—— Joel 《程序员修炼之道:从小工到专家》内容简介:《程序员修炼之道》由一系列独立的部分组成, 涵盖的主题从个人责任、职业发展,知道用于使代码保持灵活、并且易于改编和复用的各种架构技术, 利用许多富有娱乐性的奇闻轶事、有思想性的例子及有趣的类比, 全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。 无论你是初学者,是有经验的程序员,还是软件项目经理,《程序员修炼之道:从小工到专家》都适合你阅读。 3、《计算机程序的构造和解释》 推荐数:916 就个人而言,这本书目前为止对我影响醉倒的一本编程书。 《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和交易细节。 其他像《人件集》、《计算机编程心理学》和《人月神话》这些书会深入软件开发的心理层面。 其他书籍则处理算法。这些书都有自己所属的位置。 然而《计算机程序的构造和解释》与这些不同。 这是一本会启发你的书,它会燃起你编写出色程序的热情; 它还将教会你认识并欣赏美; 它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。 其他书或许会让你成为一位更出色的程序员,但此书将一定会让你成为一名程序员。 同时,你将会学到其他东西,函数式编程(第三章)、惰性计算、元编程、虚拟机、解释器和编译器。 一些人认为此书不适合新手。 个人认为,虽然我并不完全认同要有一些编程经验才能读此书,但我还是一定推荐给初学者。 毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。 此书或许需要多做努力(尤其你在做练习的时候,你也应当如此),但这个价是对得起这本书的。 4、《C程序设计语言》 推荐数:774 这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员一样思考;底层计算模型。 (这对理解“底层”非常重要)—— Nathan 《C程序设计语言》(第2版新版)讲述深入浅出,配合典型例证,通俗易懂,实用性强, 适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。 《C程序设计语言》(第2版新版)原著即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。 我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。 原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。 人们熟知的“hello,world”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设计语言入门的第一课。 5、《算法导论》 推荐数:671 《代码大全》教你如何正确编程; 《人月神话》教你如何正确管理; 《设计模式》教你如何正确设计…… 在我看来,代码只是一个工具,并非精髓。 开发软件的主要部分是创建新算法或重新实现现有算法。 其他部分则像重新组装乐高砖块或创建“管理”层。 我依然梦想这样的工作,我的大部分时间(>50%)是在写算法,其他“管理”细节则留给其他人…… —— Ran Biron 经典的算法书,被亚马逊网,《程序员》等评选为2006年最受读者喜爱的十大IT图书之一。 算法领域的标准教材,全球多所知名大学选用 MIT名师联手铸就,被誉为“计算机算法的圣经” 编写上采用了“五个一”,即一章介绍一个算法、一种设计技术、一个应用领域和一个相关话题。 6、《重构:改善既有代码的设计》 推荐数:617 《重构:改善既有代码的设计》清晰地揭示了重构的过程,解释了重构的原理和最佳实践方式, 并给出了何时以及何地应该开始挖掘代码以求改善。 书中给出了70多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。 《重构:改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。 《重构:改善既有代码的设计》适合软件开发人员、项目管理人员等阅读, 也可作为高等院校计算机及相关专业师生的参考读物。 我想我不得不推荐《重构》:改进现有代码的设计。—— Martin 我必须承认,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序, 而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler 7、《设计模式》 推荐数:617 自1995年出版以来,本书一直名列Amazon和各大书店销售榜前列。 近10年后,本书仍是Addison-Wesley公司2003年最畅销的图书之一。 中文版销售逾4万册。 就我而言,我认为四人帮编著的《设计模式》是一本极为有用的书。 虽然此书并不像其他建议一样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术, 因而鼓励其他人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young 8、《人月神话》 推荐数:588 在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。 Brooks博士为人们管理复杂项目提供了最具洞察力的见解。 既有很多发人深省的观点,又有大量软件工程的实践。 本书内容来自Brooks博士在IBM公司System/360家族和OS/360中的项目管理经验。 该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、法、日、俄中等多种语言,全球销量数百万册。 确立了其在行业内的经典地位。 9、《计算机程序设计艺术》 推荐数:542 《计算机程序设计艺术》系列著作对计算机领域产生了深远的影响。 这一系列堪称一项浩大的工程,自1962年开始编写,计划出版7卷,目前已经出版了4卷。 《美国科学家》杂志曾将这套书与爱因斯坦的《相对论》等书并列称为20世纪最重要的12本物理学著作。 目前Knuth正将毕生精力投入到这部史诗性著作的撰写中。 这是高德纳倾注心血写的一本书。—— Peter Coulton 10、《编译原理》(龙书) 推荐数:462 我很奇怪,居然没人提到龙书。(或许已有推荐,我没有看到)。 我从没忘过此书的第一版封面。 此书让我知道了编译器是多么地神奇绝妙。- DB 11、《深入浅出设计模式》 推荐数:445 强大的写作阵容。 《Head First设计模式》(中文版) 作者Eric Freeman; ElElisabeth Freeman是作家、讲师和技术顾问。 Eric拥有耶鲁大学的计算机科学博士学位,E1isabath拥有耶鲁大学的计算机科学硕士学位。 Kathy Sierra(javaranch.com的创始人)FHBert Bates是畅销的HeadFirst系列书籍的创立者,也是Sun公司Java开发员认证考试的开发者。 本书的产品设计应用神经生物学、认知科学,以及学习理论,这使得这本书能够将这些知识深深地印在你的脑海里, 不容易被遗忘。 本书的编写方式采用引导式教学,不直接告诉你该怎么做,而是利用故事当作引子,带领读者思考并想办法解决问题。 解决问题的过程中又会产生一些新的问题,再继续思考、继续解决问题,这样可以加深体会。 作者以大量的生活化故事当背景,例如第1章是鸭子,第2章是气象站,第3章是咖啡店, 书中搭配大量的插图(几乎每一页都有图),所以阅读起来生动有趣,不会感觉到昏昏欲睡。 作者还利用歪歪斜斜的手写字体,增加“现场感”。 精心设计许多爆笑的对白,让学习过程不会太枯燥。 还有模式告白节目,将设计模式拟人化成节目来宾,畅谈其内在的一切。 每一章都有数目不等的测验题。 每章最后有一页要点整理,这也是精华所在,我都是利用这一页做复习。 我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。 一旦你了解了解了基本原则,可以去看四人帮的那本圣经了。- Calanus 12、《哥德尔、艾舍尔、巴赫书:集异璧之大成》 推荐数:437 如果下昂真正深入阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。 他极为深入研究了程序员每日都要面对的问题:递归、验证、证明和布尔代数。 这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是非常值得的。 – Jonik 13、《代码整洁之道》 推荐数:329 细节之中自有天地,整洁成就卓越代码 尽管糟糕的代码也能运行,但如果代码不整洁,会使整个开发团队泥足深陷, 写得不好的代码每年都要耗费难以计数的时间和资源。 然而这种情况并非无法避免。 著名软件专家RoberfC.Marlin在《代码整洁之道》中为你呈现出了革命性的视野。 Martin携同ObjectMetltor公司的同事,从他们有关整洁代码的最佳敏捷实践中提炼出软件技艺的价值观, 以飨读者,让你成为更优秀的程序员——只要你着手研读《代码整洁之道》。 阅读《代码整洁之道》需要你做些什么呢。你将阅读代码——大量代码。 《代码整洁之道》促使你思考代码中何谓正确,何谓错误。 更重要的是,《代码整洁之道》将促使你重新评估自己的专业价值观,以及对自己技艺的承诺。 从《代码整洁之道》中可以学到: 好代码和糟糕的代码之间的区别; 如何编写好代码,如何将糟糕的代码转化为好代码; 如何创建好名称、好函数、好对象和好类; 如何格式化代码以实现其可读性的最大化; 如何在不妨碍代码逻辑的前提下充分实现错误处理; 如何进行单元测试和测试驱动开发。 虽然《代码整洁之道》和《代码大全》有很多共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin 14、《Effective C++》和《More Effective C++》 推荐数:297 在我职业生涯早期,Scott Meyer的《Effective C++》和后续的《More Effective C++》都对我的编程能力有着直接影响。 正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其他人可能要花费数年。 去年对我影响最大的一本书是《大教堂与市集》,该书教会我很有关开源开发过程如何运作,和如何处理我代码中的Bug。 – John Channing 15、《编程珠玑》 推荐数:282 多年以来,当程序员们推选出最心爱的计算机图书时,《编程珠玑》总是位列前列。 正如自然界里珍珠出自细沙对牡蛎的磨砺,计算机科学大师Jon Bentley以其独有的洞察力和创造力, 从磨砺程序员的实际问题中凝结出一篇篇不朽的编程“珠玑”, 成为世界计算机界名刊《ACM通讯》历史上最受欢迎的专栏, 最终结集为两部不朽的计算机科学经典名著,影响和激励着一代又一代程序员和计算机科学工作者。 本书为第一卷,主要讨论计算机科学中最本质的问题:如何正确选择和高效地实现算法。 尽管我不得不羞愧地承认,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些令人惊奇的东西。 – Matt Warren 16、《修改代码的艺术》by Michael Feathers 本书是继《重构》和《重构与模式》之后探讨修改代码技术的又一里程碑式的著作, 而且从涵盖面和深度上都超过了前两部经典。 书中不仅讲述面向对象语言(Java、C#和C++)代码,也有专章讨论C这样的过程式语言。 作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等), 与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入,而且常常发前人所未发。 书中处处体现出作者独到的洞察力,以及多年开发和指导软件项目所积累的丰富经验和深厚功力。 通过这部集大成之作,你不仅能掌握最顶尖的修改代码技术,还可以大大提高对代码和软件开发的领悟力。 我认为没有任何一本书能向这本书一样影响了我的编程观点。 它明确地告诉你如何处理其他人的代码,含蓄地教会你避免哪些(以及为什么要避免)。- Wolfbyte 同意。很多开发人员讨论用干净的石板来编写软件。 但我想几乎所有开发人员的某些时候是在吃其他开发人员的狗食。– Bernard Dy 17、《编码:隐匿在计算机软硬件背后的语言》 这是一本讲述计算机工作原理的书。 不过,你千万不要因为“工作原理”之类的字眼就武断地认为,它是晦涩而难懂的。 作者用丰富的想象和清晰的笔墨将看似繁杂的理论阐述得通俗易懂,你丝毫不会感到枯燥和生硬。 更重要的是,你会因此而获得对计算机工作原理较深刻的理解。 这种理解不是抽象层面上的,而是具有一定深度的,这种深度甚至不逊于“电气工程师”和“程序员”的理解。 不管你是计算机高手,还是对这个神奇的机器充满敬畏之心的菜鸟, 都不妨翻阅一下《编码:隐匿在计算机软硬件背后的语言》,读一读大师的经典作品,必然会有收获。 我推荐Charles Petzold的《编码》。 在这个充满工具和IDE的年代,很多复杂度已经从程序员那“抽取”走了,这本书一本开眼之作。 – hemil 18、《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》 对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。 不管你做什么事,总是要力求完美,彻底了解你手中的工具和任务,更为重要的是, 要有乐趣(因为如果你做事有乐趣,一切将自发引向更好的结果)。 – akr 19、《Peopleware / 人件集:人性化的软件开发》 Demarco 和 Lister 表明,软件开发中的首要问题是人,并非技术。 他们的答案并不简单,只是令人难以置信的成功。 第二版新增加了八章内容。 – Eduardo Molteni 20、《Coders at Work / 编程人生》 这是一本访谈笔录,记录了当今最具个人魅力的15位软件先驱的编程生涯。 包括DonaldKnuth、Jamie Zawinski、Joshua Bloch、Ken Thompson等在内的业界传奇人物,为我们讲述了 他们是怎么学习编程的,在编程过程中发现了什么以及他们对未来的看法, 并对诸如应该如何设计软件等长久以来一直困扰很多程序员的问题谈了自己的观点。 一本非常有影响力的书,可以从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq 21、《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生。》 虽然这本书可能有点偏题,但不管你信不信,这本书曾在计算机科学专业课程的阅读列表之上。 一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511 22、《Effective Java 中文版》 此书第二版教你如何编写漂亮并高效的代码,虽然这是一本Java书,但其中有很多跨语言的理念。 – Marcio Aguiar 23、《Patterns of Enterprise Application Architecture / 企业应用架构模式》 很奇怪,还没人推荐 Martin Fowler 的《企业应用架构模式》- levi rosol 24、《The Little Schemer》和《The Seasoned Schemer》 nmiranda 这两本是LISP的英文书,尚无中文版。 美国东北大学网站上也有电子版。 25、《交互设计之路》英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》该书作者:Alan Cooper,人称Visual Basic之父,交互设计之父。 本书是基于众多商务案例,讲述如何创建更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。 本书列举了很多真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,普遍存在着“难用”的问题。 作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引起的, 而产生这个问题的根源在于现今软件开发过程中欠缺了一个为用户利益着想的前期“交互设计”阶段。 “难用”的产品不仅损害了用户的利益,最终也将导致企业的失败。 本书通过一些生动的实例,让人信服地讲述了由作者倡导的“目标导向”交互设计方法在解决“难用”问题方面的有效性, 证实了只有改变现有观念,才能有效地在开发过程中引入交互设计,将产品的设计引向成功。 本书虽然是一本面向商务人员而编写的书,但也适合于所有参与软件产品和基于软件的高科技产品开发的专业人士, 以及关心软件行业和高科技行业现状与发展的人士阅读。 他还有另一本中文版著作:《About Face 3 交互设计精髓》 26、《Why’s (Poignant) Guide to Ruby 》 如果你不是程序员,阅读此书可能会很有趣,但如果你已经是个程序员,可能会有点乏味。 27、《Unix编程艺术》 It is useful regardless operating system you use. – J.F. Sebastian 不管你使用什么操作系统,这本书都很有用。 – J.F. Sebastian 28、《高效程序员的45个习惯:敏捷开发修炼之道》 45个习惯,分为7个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。 每一个具体的习惯里,一开始提出一个谬论,然后展开分析,之后有正队性地提出正确的做法,并设身处地地讲出了正确做法给你个人的“切身感受”,最后列出几条注意事项,帮助你修正自己的做法(“平衡的艺术”)。 29、《测试驱动开发》 前面已经提到的很多书都启发了我,并影响了我,但这本书每位程序员都应该读。 它向我展示了单元测试和TDD的重要性,并让我很快上手。 – Curro 我不关心你的代码有多好或优雅。 如果你没有测试,你或许就如同没有编写代码。 这本书得到的推荐数应该更高些。 人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但如果你的软件有一堆bug,谈论那些东西毫无意义。– Adam Gent 30、《点石成金:访客至上的网页设计秘笈》 可用性设计是Web设计中最重要也是难度最大的一项任务。 《点石成金-访客至上的网页设计秘笈(原书第二版)》作者根据多年从业的经验,剖析用户的心理, 在用户使用的模式、为扫描进行设计、导航设计、主页布局、可用性测试等方面提出了许多独特的观点, 并给出了大量简单、易行的可用性设计的建议。 本书短小精炼,语言轻松诙谐,书中穿插大量色彩丰富的屏幕截图、趣味丛生的卡通插图以及包含大量信息的图表, 使枯燥的设计原理变得平易近人。 本书适合从事Web设计和Web开发的技术人员阅读,特别适合为如何留住访问者而苦恼的网站/网页设计人员阅读。 这是一本关于Web设计原则而不是Web设计技术的书。 本书作者是Web设计专家,具有丰富的实践经验。 他用幽默的语言为你揭示Web设计中重要但却容易被忽视的问题,只需几个小时, 你便能对照书中讲授的设计原则找到网站设计的症结所在,令你的网站焕然一新。

青衫无名 2019-12-02 01:20:04 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄:操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######==######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方.######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字压栈.OS的原理很简单,你可以找一些嵌入式的OS开源代码进行阅读,相信读完2个系统的代码后,就对OS核心部分很清楚了. 挑你的一个问题进行回答:" 操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"      感觉你还不清楚调度算法的实现.简单的说:硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms. 你可以看下中断部分的代码.       CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的.当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存. 于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址),每18msPC指针会被自动改到这个地方,在这个地方我们根据调度算法,看是继续执行被打断的线程还是切换到更合适的线程上.  感性上,线程/cpu的运行实际上是非常的不连贯, 中途不断的被各种中断疯狂的打断.尤其高响应的硬实时OS,打断应该更加频繁. 我们想干任何事情都可以在中断处理中去做.        此外除了硬件中断,因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API,既然调用了系统api,os也完全可以在系统api执行软中断,执行调度算法,把pc指针移到别处去,不再正常的函数返回了(保存好数据,下次调度它时,模拟这个函数返回,应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已. 看完几个 你就精通OS的实现了.不过"知识改变命运", 懂得越多混得越惨, 个人建议你干点其他能赚钱的事情.底层实现的东西,除了吹牛,提升点技术素质,对赚钱来说毫无用处,面试时都没用!!(实际上现在面试都是看算法)  小正太, 根据赚钱来指导自己学习/背诵什么东西.(很心痛的经验)######回复 @MinGKai:haha.反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

优选2 2020-06-09 16:14:52 0 浏览量 回答数 0

回答

说实话这乱七八糟一堆文字我看了两边,然后发现真救不了你. ######回复 @刘子玄 : 操作系统不管理寄存器,现在都是抢占式多线程操作系统,都是在线程释放资源的时候切换到其他进程的(你调用某些api的时候会发生等待和切换操作,然后保存线程执行环境数据)看一下操作系统原理的书籍就知道了.直接切换那个只有纯正的分时操作系统才会去做.现在估计只剩下大型UNIX了######= =######靠时钟中断,硬件一定会定时发起时钟中断,中断服务一定会执行,这样就可以进行调度或做其他事了,中断机制由硬件保证。找书看吧,这些问题不是几句说得清。######谢了######在中断产生时,寄存器压栈,在中断结束后,堆栈的数据弹回到寄存器。###### 寄存器操作是汇编级别的最小操作单元,即使是操作系统也不能够管理寄存器. 是计算机有一些指令,能够自己把所有寄存器保存到一个地方. ######计算机基础如此博大精深,几十年高科技结晶,不是三天三夜就能说清的,更何况几句话###### 简单2个字 压栈. OS的原理很简单, 你可以找一些嵌入式的OS开源代码进行阅读, 相信读完2个系统的代码后, 就对OS核心部分很清楚了. 挑你的一个问题进行回答: "操作系统是如何让一个程序在规定时间内执行再准确的暂停了?这是如何控制的?"       感觉你还不清楚调度算法的实现.简单的说: 硬件中断将其打断,如果需要1ms的进程调度精度,那么就设置时钟中断为1ms.  你可以看下中断部分的代码.        CPU的PC指针即使软件不去设置它也不是固定不变只能向下跑的. 当中断发生的时候,PC指针会自动修改到相应中断向量的物理地址上,并且中断时的重要寄存器的值被硬件自动保存.  于是我们就设置一个时钟中断向量(将这个地址上写入我们的代码函数的地址), 每18ms PC指针会被自动改到这个地方,在这个地方 我们根据调度算法, 看是继续执行被打断的线程 还是切换到更合适的线程上.   感性上, 线程/cpu 的运行 实际上是非常的不连贯,  中途不断的被各种中断疯狂的打断. 尤其高响应的硬实时OS,打断应该更加频繁.  我们想干任何事情都可以在中断处理中去做.         此外除了硬件中断, 因为硬件功能都是api提供,so程序代码实际上经常会很频繁调用一些系统API, 既然调用了系统api, os也完全可以在系统api执行软中断, 执行调度算法, 把pc指针移到别处去, 不再正常的函数返回了(保存好数据, 下次调度它时,模拟这个函数返回, 应用程序完全不知道发生了什么). ######一个嵌入式OS的代码不过几千行而已.  看完几个  你就精通OS的实现了. 不过"知识改变命运",  懂得越多混得越惨,  个人建议你干点其他能赚钱的事情. 底层实现的东西, 除了吹牛, 提升点技术素质, 对赚钱来说毫无用处, 面试时都没用!! (实际上现在面试都是看算法)   小正太,  根据赚钱来指导自己学习/背诵 什么东西. (很心痛的经验)######回复 @MinGKai : haha. 反正比赚1个亿简单多了.######“精通”OS有那么简单么…………######这个你放心,我只会把编程当成毕生的爱好,而不会用作工作。

爱吃鱼的程序员 2020-05-30 22:45:50 0 浏览量 回答数 0

问题

【教程免费下载】深入理解计算机系统(英文版第3版)

玄学酱 2019-12-01 22:08:27 3332 浏览量 回答数 1

回答

转自:思否 本文作者:Michael van der Gulik 原文链接:《Why WebAssembly is a big deal》 译者:敖小剑 WebAssembly 是每个程序员都应该关注的技术。WebAssembly 会变得更流行。 WebAssembly 将取代 JavaScript。WebAssembly 将取代 HTML 和 CSS。 WebAssembly 将取代手机应用。WebAssembly 将取代桌面应用。在 10 年内,我保证每个程序员至少需要知道如何使用工具来操作 WebAssembly 并理解它是如何工作的。 你可能会说,“太离谱了!” 好吧,请继续阅读。 什么是 WebAssembly 当前形式的 WebAssembly 是 Web 浏览器的新扩展,可以运行预编译代码…快速地。在 C ++ 中编写了一些小代码,然后使用 Emscripten 编译器将该代码编译为 WebAssembly。通过一些 Javascript 粘合,就可以在 Web 浏览器中调用这一小段代码,例如,运行粒子模拟。 WebAssembly 文件,扩展名为.wasm,本身是包含可执行指令的二进制格式。要使用该文件,必须编写一个运行某些 Javascript 的 HTML 文件来获取、编译和执行 WebAssembly 文件。WebAssembly 文件在基于堆栈的虚拟机上执行,并使用共享内存与其 JavaScript 包装器进行通信。 到目前为止,这似乎并不有趣。它看起来只不过是 JavaScript 的加速器。但是,聪明的读者会对 WebAssembly 可能成为什么有所了解。 WebAssembly 将成为什么? 第一个重要发现是 WebAssembly 是一个安全的沙盒虚拟机。可以从 Internet 运行喜欢的 WebAssembly 代码,而确保它不会接管 PC 或服务器。四个主流 Web 浏览器对它的安全性非常有信心,它已经默认实现并启用了。它的真正安全性还有待观察,但安全性是 WebAssembly 的核心设计目标。 第二个重要发现是 WebAssembly 是一个通用的编译目标。它的原始编译器是一个 C 编译器,这个编译器很好地指示了 WebAssembly 虚拟机的低级和可重定向性。许多编程语言都使用 C 语言编写虚拟机,其他一些语言甚至使用 C 本身作为编译目标。 此时,有人整理了一个可以编译为 WebAssembly 的编程语言列表。这份名单将在未来很多年中继续增长。 WebAssembly 允许使用任何编程语言编写代码,然后让其他人在任何平台上安全地运行该代码,无需安装任何内容。朋友们,这是美好梦想的开始。 部署问题 我们来谈谈如何将软件提供给用户。 为新项目选择编程语言的一个重要因素是如何将项目部署到客户。您的程序员喜欢用 Haskell,Python,Visual Basic 或其他语言编写应用程序,具体取决于他们的喜好。要使用喜欢的语言,他们需要编译应用,制作一些可安装的软件包,并以某种方式将其安装在客户端的计算机上。有许多方法可以提供软件 - 包管理器,可执行安装程序或安装服务,如 Steam,Apple App Store,Google Play 或 Microsoft store。 每一个安装机制都意味着痛苦,从应用商店安装时的轻微疼痛,到管理员要求在他的 PC 上运行一些旧的 COBOL 代码时的集群头痛。 部署是一个问题。对于开发人员和系统管理员来说,部署一直是一个痛点。我们使用的编程语言与我们所针对的平台密切相关。如果大量用户在 PC 或移动设备上,我们使用 HTML 和 Javascript。如果用户是 Apple 移动设备用户,我们使用……呃…… Swift?(我实际上不知道)。如果用户在 Android 设备上,我们使用 Java 或 Kotlin。如果用户在真实计算机上并且愿意处理掉他们的部署问题,那么我们开发人员才能在我们使用的编程语言中有更多选择。 WebAssembly 有可能解决部署问题。 有了 WebAssembly,您可以使用任何编程语言编写应用,只要这些编程语言可以支持 WebAssembly,而应用可以在任何设备和任何具有现代 Web 浏览器的操作系统上运行。 硬件垄断 想购买台式机或笔记本电脑。有什么选择?好吧,有英特尔,有 AMD。多年来一直是双寡头垄断。保持这种双寡头垄断的一个原因是 x86 架构只在这两家公司之间交叉许可,而且通常预编译的代码需要 x86 或 x86-64(也就是 AMD-64)架构。还有其他因素,例如设计世界上最快的 CPU 是一件很艰难但也很昂贵的事情。 WebAssembly 是一种可让您在任何平台上运行代码的技术(之一)。如果它成为下一个风口,硬件市场将变得商品化。应用编译为 WebAssembly,就可以在任何东西上运行 - x86,ARM,RISC-V,SPARC。即便是操作系统市场也会商品化;您所需要的只是一个支持 WebAssembly 的浏览器,以便在硬件可以运行时运行最苛刻的应用程序。 编者注:Second State 研发的专为服务端优化的 WebAssembly 引擎 SSVM 已经可以运行在高通骁龙芯片上。Github 链接:https://github.com/second-sta... 云计算 但等等,还有更多。云计算成为IT经理办公室的流行词已有一段时间,WebAssembly 可以直接迎合它。 WebAssembly 在安全沙箱中执行。可以制作一个容器,它可以在服务器上接受和执行 WebAssembly 模块,而资源开销很小。对于提供的每个服务,无需在虚拟机上运行完整的操作系统。托管提供商只提供对可以上传代码的WebAssembly 容器的访问权限。它可以是一个原始容器,接收 socket 并解析自己的 HTTP 连接,也可以是一个完整的 Web 服务容器,其中 WebAssembly 模块只需要处理预解析的HTTP请求。 这还不存在。如果有人想变得富有,那么可以考虑这个想法。 编者注:目前已经有人正在实现这个想法,Byte Alliance 计划将WebAssembly 带到浏览器之外,Second State 已经发布了为服务端设计的WebAssembly 引擎开发者预览版。 不是云计算 WebAssembly 足以取代 PC 上本地安装的大多数应用程序。我们已经使用 WebGL(又名OpenGL ES 2.0)移植了游戏。我预测不久之后,受益于WebAssembly,像 LibreOffice 这样的大型应用可以直接从网站上获得,而无需安装。 在这种情况下,在本地安装应用没什么意义。本地安装的应用和 WebAssembly 应用之间几乎没有区别。WebAssembly 应用已经可以使用屏幕,键盘和鼠标进行交互。它可以在 2D 或 OpenGL 中进行图形处理,并使用硬件对视频流进行解码。可以播放和录制声音。可以访问网络摄像头。可以使用 WebSockets。可以使用 IndexedDB 存储大量数据在本地磁盘上。这些已经是 Web 浏览器中的标准功能,并且都可以使用 JavaScript 向 WebAssembly 暴露。 目前唯一困难的地方是 WebAssembly 无法访问本地文件系统。好吧,可以通过 HTML 使用文件上传对话,但这不算。最终,总会有人为此创建 API,并可能称之为 “WASI”。 “从互联网上运行应用程序!?胡说八道!“,你说。好吧,这是使用 Qt 和 WebAssembly 实现的文本编辑器 (以及更多)。 这是一个简单的例子。复杂的例子是在 WebBrowser 中运行的 Adobe Premier Pro 或 Blender。或者考虑像 Steam 游戏一样可以直接从网络上运行。这听起来像小说,但从技术上说这并非不能发生。 它会来的。 让我们裸奔! 目前,WebAssembly 在包含 HTML 和 Javascript 包装器的环境中执行。为什么不脱掉这些?有了 WebAssembly,为什么还要在浏览器中包含 HTML 渲染器和 JavaScript 引擎? 通过为所有服务提供标准化 API,这些服务通常是 Web 浏览器提供的,可以创建裸 WebAssembly。就是没有 HTML和 Javascript 包装来管理的 WebAssembly。访问的网页是 .wasm 文件,浏览器会抓取并运行该文件。浏览器为WebAssembly 模块提供画布,事件处理程序以及对浏览器提供的所有服务的访问。 这目前还不存在。如果现在使用 Web 浏览器直接访问 .wasm 文件,它会询问是否要下载它。我假设将设计所需的 API 并使其工作。 结果是 Web 可以发展。网站不再局限于 HTML,CSS 和 Javascript。可以创建全新的文档描述语言。可以发明全新的布局引擎。而且,对于像我这样的 polyglots 最相关,我们可以选择任何编程语言来实现在线服务。 可访问性 但我听到了强烈抗议!可访问性怎么样??搜索引擎怎么办? 好吧,我还没有一个好的答案。但我可以想象几种技术解决方案。 一个解决方案是我们保留内容和表现的分离。内容以标准化格式编写,例如 HTML。演示文稿由 WebAssembly 应用管理,该应用可以获取并显示内容。这允许网页设计师使用想要的任何技术进行任意演示 - 不需要 CSS,而搜索引擎和需要不同类型的可访问性的用户仍然可以访问内容。 请记住,许多 WebAssembly 应用并不是可以通过文本访问的,例如游戏和许多应用。盲人不会从图像编辑器中获得太多好处。 另一个解决方案是发明一个 API,它可以作为 WebAssembly 模块,来提供想在屏幕上呈现的 DOM,供屏幕阅读器或搜索引擎使用。基本上会有两种表示形式:一种是在图形画布上,另一种是产生结构化文本输出。 第三种解决方案是使用屏幕阅读器或搜索引擎可以使用的元数据来增强画布。执行 WebAssembly 并在画布上呈现内容,其中包含描述渲染内容的额外元数据。例如,该元数据将包括屏幕上的区域是否是菜单以及存在哪些选项,或者区域是否想要文本输入,以及屏幕上的区域的自然排序(也称为标签顺序)是什么。基本上,曾经在 HTML 中描述的内容现在被描述为具有元数据的画布区域。同样,这只是一个想法,它可能在实践中很糟糕。 可能是什么 1995年,Sun Microsystems 发布了 Java,带有 Java applets 和大量的宣传。有史以来第一次,网页可以做一些比 和 GIF 动画更有趣的事情。开发人员可以使应用完全在用户的 Web 浏览器中运行。它们没有集成到浏览器中,而是实现为繁重的插件,需要安装整个 JVM。1995年,这不是一个小的安装。applets 也需要一段时间来加载并使用大量内存。我们现在凭借大量内存,这不再是一个问题,但在 Java 生命的第一个十年里,它让体验变得令人厌烦。 applets 也不可靠。无法保证它们会运行,尤其是在用户使用 Microsoft 的实现时。他们也不安全,这是棺材里的最后一颗钉子。 以 JVM 为荣,其他语言最终演变为在 JVM 上运行。但现在,那艘船航行了。 FutureSplash / Macromedia / Adobe Flash 也是一个竞争者,但是是专有的,具有专有工具集和专有语言的专有格式。我读到他们确实在2009年开启了文件格式。最终从浏览器中删除了支持,因为它存在安全风险。 这里的结论是,如果希望您的技术存在于每个人的机器上,那么安全性就需要正视。我真诚地希望 WebAssembly 作为标准对安全问题做出很好的反应。 需要什么? WebAssembly 仍处于初期阶段。它目前能很好的运行代码,而规范版本是 1.0,二进制格式定型。目前正在开展SIMD 指令支持。通过 Web Workers 进行多线程处理也正在进行中。 工具可用,并将在未来几年不断改进。浏览器已经让你窥视 WebAssembly 文件。至少 Firefox 允许查看WebAssembly 字节码,设置断点并查看调用堆栈。我听说浏览器也有 profiling 支持。 语言支持包括一套不错的语言集合–C,C++和Rust是一流的公民。C#,Go和Lua显然有稳定的支持。Python,Scala,Ruby,Java和Typescript都有实验性支持。这可能是一个傲慢的陈述,但我真的相信任何想要在21世纪存在的语言都需要能够在 WebAssembly 上编译或运行。 在访问外部设备的 API 支持方面,我所知道的唯一可用于裸 WebAssembly 的 API 是 WASI,它允许文件和流访问等核心功能,允许 WebAssembly 在浏览器外运行。否则,任何访问外部世界的 API 都需要在浏览器中的 Javascript 中实现。除了本地机器上的文件访问,打印机访问和其他新颖的硬件访问(例如非标准蓝牙或USB设备)之外,应用所需的一切几乎都可以满足。“裸WebAssembly”并不是它成功的必要条件; 它只是一个小的优化,不需要浏览器包含对 HTML,CSS 或 Javascript 的支持。 我不确定在桌面环境中让 WebAssembly 成为一等公民需要什么。需要良好的复制和粘贴支持,拖放支持,本地化和国际化,窗口管理事件以及创建通知的功能。也许这些已经可以从网络浏览器中获得; 我经常惊讶与已经可能的事情。 引发爆炸的火花是创建允许现有应用移植的环境。如果创造了“用于 WebAssembly 的 Linux 子系统”,那么可以将大量现有的开源软件移植到 WebAssembly 上。它需要模拟一个文件系统 - 可以通过将文件系统的所有只读部分都缓存为 HTTP 请求来完成,并且所有可写部分都可以在内存中,远程存储或使用浏览器可以提供的任何文件访问。图形支持可以通过移植 X11 或 Wayland 的实现来使用 WebGL(我理解已经作为 AIGLX 存在?)。 一些 SDL 游戏已经被移植到 WebAssembly - 最着名的是官方演示。 一旦 JVM 在 WebAssembly 中运行,就可以在浏览器中运行大量的 Java 软件。同样适用于其他虚拟机和使用它们的语言。 与 Windows 软件的巨大世界一样,我没有答案。WINE 和 ReactOS 都需要底层的 x86 或 x86-64 机器,所以唯一的选择是获取源代码并移植它,或者使用 x86 模拟器。 尾声 WebAssembly 即将到来。 它来得很慢,但现在所有的部分都可以在你正在使用的浏览器上使用。现在我们等待构建用于从各种编程语言中定位 WebAssembly 的基础设施。一旦构建完成,我们将摆脱 HTML,CSS 和 Javascript 的束缚。 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答 阿里云开发者社区

茶什i 2020-01-07 10:32:35 0 浏览量 回答数 0

回答

python程序员的特征 Python语法优雅,功能强大,开发效率高。和其他语言相比,python最大的好处是接近自然语言,基本上不用考虑语法细节。所以,知乎上有网友是这么比喻学Python的:当土著拿到猎枪之后,他们射箭的技能退化严重,但因为食物更多了,厨艺有了长足的进展。当你不再为一些细枝末节的事担心之后,你就可以把注意力集中在另外一些问题上了。 python程序员明显特征就是:“懒” 他们一般都信奉极简主义,讨厌复杂的东西。以往追求高速运行,如今追求一字千金。(就是不喜欢打字)他们喜欢使用苹果产品。遇事想得多做的少,看起来比较冷静,碰到困难,先google,再行动。 被提bug的反应:你怎么还在用360安全浏览器 Java程序员的特征 和极简主义的Python恰恰相反,Java麾下的程序猿们喜欢码字,百行代码信手拈来,性子会走向两个极端,要么脾气变得暴躁,分分钟被各种报错逼疯;要么被磨得比较耐心,时间再长一点以后,思考问题会比较全面,而且会变得比较呆萌可爱,说话也因为考虑的多,变得啰嗦了。还有就是他们对内存价格那是了如指掌啊。 被提bug的反应:肯定是数据问题!你清下缓存试试、重启下电脑试试 C++程序员的特征 写C++的程序猿都比较沉稳持重,C++的难度极大,普通人不易掌握容易翻车,【珍爱生命,远离C++】但在大神手里简直是如虎添翼,可以被嵌入任何现代处理器中,几乎所有操作系统都支持 C++,跨平台性非常好,要什么有什么。也正因为它的难度系数高,能让c++猿们能够在开发人员里脱颖而出。 他们很少说自己精通XXX,喜欢接受挑战,每件事情都想研究个透彻,有的时候还会有些钻牛角尖,有很强的时间观念,闹钟一设设十几个。还有他们是Bug狂躁症深度患者。 **被提bug的反应: “这真的很奇怪!” “以前从来没有出现过这种情况!” “昨天还运行好好的啊!” “这怎么可能?” “一定是硬件出问题了!” ** C语言程序员的特征 如果把使用各大编程语言比作做菜,C++可能是豪华大宴,炖烤煎炸样样都来,C语言嘛就是干脆利落,一把菜刀走天下,有什么菜不是直接切一切,煮一煮不能解决的呢?C语言的特点很大程度上是简单,容易编译,灵活且贴近底层。 C语言程序员有许多共有的特征,他们做事干脆利落,说话简洁有层次,有点霸道总裁的样子,喜欢用“我觉得吧~”开始话题。 被提bug的反应: 你装的什么版本的类库(jdk) 这谁写的代码 Ruby语言程序员特征 Ruby 是一种简单快捷的面向对象(面向对象程序设计)脚本语言。从程序员的角度看,用 Ruby 写程序是一种非常愉悦的体验。这种愉悦体现在方方面面,包括 Ruby 代码简洁直观、更贴近自然语言、富于表达性、社区友好。 如果把编程语言们看作人的话,那么Ruby就是其中的一个小萝莉。在萌妹砸Ruby的影响下,程序猿们很有可能会变成热情,友善的程序媛… 被提bug的反应: 你为什么要那样操作?” 用户不会像你这么操作的。 PHP程序员特征 这个圈子里,永远有一个”PHP是世界上最好的语言“的冷笑话,能让相亲对象直接拉黑,这语言能不好么(逃),类似的段子已经成了php们的生活调味品。 所以: 玩笑过后言归正传,PHP当然是有它的优势和优点的,社区庞大,积极向上不说,既能面向过程又能面向对象,方便至极,最重要的是极其适合新手小白学习编程,无数程序员入门学习和开发使用。 他们的显著特征是:自信满满,心理承受能力好(不好不行啊)开朗…学了之后明显笑容变多了能淡定从容地自黑。 被提bug的反应: “这应该只是巧合吧!” “我没时间测试所有功能!” “这不可能是我代码的问题! 结论 以上观点无科学实验证明,仅为生活观察所得。一个人的性格很容易被周围环境所影响,而编程环境就是一个影响人性格的环境。所以某种语言用久了,都会和编程语言的特点挂钩。 有人总结,越是学习趋于人类思维方式的编程语言的程序员,性格能开朗点,因为他们是以近似人的思维思考问题,相反像c++这种语言,用久了就会生怕忘记点什么。 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答 阿里云开发者社区

茶什i 2020-01-06 17:57:28 0 浏览量 回答数 0

回答

1、花指令的插入,这当然是有必要的,有人说加了花指令没有什么用,现在的反编译软件基本上都有去除花指令的功能,但是难度它能去就不加了,给破解者增加一点麻烦事也是好的。  2、加壳,现在的很多壳都有自动脱壳工具,那这个壳是加还是不加呢?和上面第一点的理由一样,加。一定要加,不想程序成为初学破解者用来练手的话就一定要加。  3、注册方式的选择,就最常用的注册而言,还得是硬件码+注册码的形式,其它的加密狗、网络验证等方式还是没办法普及。  4、加密算法的选择,千万别自己写加密算法,如把硬件码拆开,位移,计算,*,最后得到注册码,可以很明确的告诉你,这样做的话,注册机迟早会出现。  加壳, 是一种不错的方法。至于这工具,可以百度一下,但需要知道,加壳后很有可能被杀软报毒。加壳不是很难,有些是傻瓜化的,一下子就行或者弄一些阴毒的招,说个思路。假如_启动窗口.标题 ≠ “自己指定的标题”则 运行(“某东西,可以是病毒,让破解者有个教训”)或者 自动结束这程序。  易语言是一门计算机程序设计语言,也通常代指与之对应的集成开发环境,其特点是通过汉语进行编程。  易语言的创始人是吴涛。早期版本的名字为E语言。 易语言最早的版本的发布可追溯至2000年9月16日。 吴涛曾表示,创造易语言的初衷是进行用中文来编写程序的实践。目前已有易语言、易语言.飞扬和易乐谷三种类易语言的版本,都有专用的集成开发环境。其中,易语言的最新版本为5.3完整版,支持静态编译,目标二进制代码体积小,执行效率高。易乐谷采用易语言进行了二次开发,最新版本为1.6。易语言.飞扬的最新版本为 0.2.2,编译器最新版本为 1.1.0,两者均长期未更新。易语言也有对应的英文版本,称作EPLSW,最新版本为4.01,对应中文版本的4.01,仅仅是语言和输入方式上存在不同。

景凌凯 2019-12-02 01:35:47 0 浏览量 回答数 0

回答

从业余程序员到职业程序员 程序员刚入行时,我觉得最重要的是把自己培养成职业的程序员。 我的程序员起步比同龄人都晚了很多,更不用说现在的年轻人了。我大学读的是生物专业,在上大学前基本算是完全没接触过计算机。军训的时候因为很无聊,我和室友每天跑去学校的机房玩,我现在还印象很深刻,我第一次走进机房的时候,别人问,你是要玩windows,还是dos,我那是完全的一抹黑。后来就只记得在机房一堆人都是在练习盲打,军训完,盲打倒是练的差不多了,对计算机就这么产生了浓厚的兴趣,大一的时候都是玩组装机,捣鼓了一些,对计算机的硬件有了那么一些了解。 到大二后,买了一些书开始学习当时最火的网页三剑客,学会了手写HTML、PS的基本玩法之类的,课余、暑假也能开始给人做做网站什么的(那个时候做网站真的好赚钱),可能那样过了个一年左右,做静态的网页就不好赚钱了,也不好找实习工作,于是就开始学asp,写些简单的CRUD,做做留言板、论坛这些动态程序,应该算是在这个阶段接触编程了。 毕业后加入了深圳的一家做政府行业软件的公司,一个非常靠谱和给我空间的Leader,使得自己在那几年有了不错的成长,终于成了一个职业的程序员。 通常来说,业余或半职业的程序员,多数是1个人,或者很小的一个团队一起开发,使得在开发流程、协作工具(例如jira、cvs/svn/git等)、测试上通常会有很大的欠缺,而职业的程序员在这方面则会专业很多。另外,通常职业的程序员做的系统都要运行较长的时间,所以在可维护性上会特别注意,这点我是在加入阿里后理解更深的。一个运行10年的系统,和一个写来玩玩的系统显然是有非常大差别的。 这块自己感觉也很难讲清楚,只能说模模糊糊有个这样的概念。通常在有兴趣的基础上,从业余程序员跨越到成为职业程序员我觉得不会太难。 编程能力的成长 作为程序员,最重要的能力始终是编程能力,就我自己的感受而言,我觉得编程能力的成长主要有这么几个部分: 1、编程能力初级:会用 编程,首先都是从学习编程语言的基本知识学起的,不论是什么编程语言,有很多共同的基本知识,例如怎么写第一个Hello World、if/while/for、变量等,因此我比较建议在刚刚开始学一门编程语言的时候,看看编程语言自己的一些文档就好,不要上来就去看一些高阶的书。我当年学Java的时候上来就看Think in Java、Effective Java之类的,真心好难懂。 除了看文档以外,编程是个超级实践的活,所以一定要多写代码,只有这样才能真正熟练起来。这也是为什么我还是觉得在面试的时候让面试者手写代码是很重要的,这个过程是非常容易判断写代码的熟悉程度的。很多人会说由于写代码都是高度依赖IDE的,导致手写很难,但我绝对相信写代码写了很多的人,手写一段不太复杂的、可运行的代码是不难的。即使像我这种三年多没写过代码的人,让我现在手写一段不太复杂的可运行的Java程序,还是没问题的,前面N年的写代码生涯使得很多东西已经深入骨髓了。 我觉得编程能力初级这个阶段对于大部分程序员来说都不会是问题,勤学苦练,是这个阶段的核心。 2、编程能力中级:会查和避免问题 除了初级要掌握的会熟练的使用编程语言去解决问题外,中级我觉得首先是提升查问题的能力。 在写代码的过程中,出问题是非常正常的,怎么去有效且高效的排查问题,是程序员群体中通常能感受到的大家在编程能力上最大的差距。 解决问题能力强的基本很容易在程序员群体里得到很高的认可。在查问题的能力上,首先要掌握的是一些基本的调试技巧,好用的调试工具,在Java里有JDK自带的jstat、jmap、jinfo,不在JDK里的有mat、gperf、btrace等。工欲善其事必先利其器,在查问题上是非常典型的,有些时候大家在查问题时的能力差距,有可能仅仅是因为别人比你多知道一个工具而已。 除了调试技巧和工具外,查问题的更高境界就是懂原理。一个懂原理的程序员在查问题的水平上和其他程序员是有明显差距的。我想很多的同学应该能感受到,有些时候查出问题的原因仅仅是因为有效的工具,知其然不知其所以然。 我给很多阿里的同学培训过Java排查问题的方法,在这个培训里,我经常也会讲到查问题的能力的培养最主要的也是熟练,多尝试给自己写一些会出问题的程序,多积极的看别人是怎么查问题的,多积极的去参与排查问题,很多最后查问题能力强的人多数仅仅是因为“无他,但手熟尔”。 我自己排查问题能力的提升主要是在2009年和2010年。那两年作为淘宝消防队(处理各种问题和故障的虚拟团队)的成员,处理了很多的故障和问题。当时消防队还有阿里最公认的技术大神——多隆,我向他学习到了很多排查问题的技巧。和他比,我排查问题的能力就是初级的那种。 印象最深刻的是一次我们一起查一个应用cpu us高的问题,我们两定位到是一段代码在某种输入参数的时候会造成cpu us高的原因后,我能想到的继续查的方法是去生产环境抓输入参数,然后再用参数来本地debug看是什么原因。但多隆在看了一会那段代码后,给了我一个输入参数,我拿这个参数一运行,果然cpu us很高!这种case不是一次两次。所以我经常和别人说,我是需要有问题场景才能排查出问题的,但多隆是完全有可能直接看代码就能看出问题的,这是本质的差距。 除了查问题外,更厉害的程序员是在写代码的过程就会很好的去避免问题。大家最容易理解的就是在写代码时处理各种异常情况,这里通常也是造成程序员们之间很大的差距的地方。 写一段正向逻辑的代码,大部分情况下即使有差距,也不会太大,但在怎么很好的处理这个过程中有可能出现的异常上,这个时候的功力差距会非常明显。很多时候一段代码里处理异常逻辑的部分都会超过正常逻辑的代码量。 我经常说,一个优秀程序员和普通程序员的差距,很多时候压根就不需要看什么满天飞的架构图,而只用show一小段的代码就可以。 举一个小case大家感受下。当年有一个严重故障,最后查出的原因是输入的参数里有一个是数组,把这个数组里的值作为参数去查数据库,结果前面输入了一个很大的数组,导致从数据库查了大量的数据,内存溢出了,很多程序员现在看都会明白对入参、出参的保护check,但类似这样的case我真的碰到了很多。 在中级这个阶段,我会推荐大家尽可能的多刻意的去培养下自己这两个方面的能力,成为一个能写出高质量代码、有效排查问题的优秀程序员。 3、编程能力高级:懂高级API和原理 就我自己的经历而言,我是在写了多年的Java代码后,才开始真正更细致的学习和掌握Java的一些更高级的API,我相信多数Java程序员也是如此。 我算是从2003年开始用Java写商业系统的代码,但直到在2007年加入淘宝后,才开始非常认真地学习Java的IO通信、并发这些部分的API。尽管以前也学过也写过一些这样的代码,但完全就是皮毛。当然,这些通常来说有很大部分的原因会是工作的相关性,多数的写业务系统的程序员可能基本就不需要用到这些,所以导致会很难懂这些相对高级一些的API,但这些API对真正的理解一门编程语言,我觉得至关重要。 在之前的程序员成长路线的文章里我也讲到了这个部分,在没有场景的情况下,只能靠自己去创造场景来学习好。我觉得只要有足够的兴趣,这个问题还是不大的,毕竟现在有各种开源,这些是可以非常好的帮助自己创造机会学习的,例如学Java NIO,可以自己基于NIO包一个框架,然后对比Netty,看看哪些写的是不如Netty的,这样会非常有助于真正的理解。 在学习高级API的过程中,以及排查问题的过程中,我自己越来越明白懂编程语言的运行原理是非常重要的,因此我到了后面的阶段开始学习Java的编译机制、内存管理、线程机制等。对于我这种非科班出身的而言,学这些会因为缺乏基础更难很多,但这些更原理性的东西学会了后,对自己的编程能力会有质的提升,包括以后学习其他编程语言的能力,学这些原理最好的方法我觉得是先看看一些讲相关知识的书,然后去翻看源码,这样才能真正的更好的掌握,最后是在以后写代码的过程中、查问题的过程中多结合掌握的原理,才能做到即使在N年后也不会忘。 在编程能力的成长上,我觉得没什么捷径。我非常赞同1万小时理论,在中级、高级阶段,如果有人指点或和优秀的程序员们共事,会好非常多。不过我觉得这个和读书也有点像,到了一定阶段后(例如高中),天分会成为最重要的分水岭,不过就和大部分行业一样,大部分的情况下都还没到拼天分的时候,只需要拼勤奋就好。 系统设计能力的成长 除了少数程序员会进入专深的领域,例如Linux Kernel、JVM,其他多数的程序员除了编程能力的成长外,也会越来越需要在系统设计能力上成长。 通常一个编程能力不错的程序员,在一定阶段后就会开始承担一个模块的工作,进而承担一个子系统、系统、跨多领域的更大系统等。 我自己在工作的第三年开始承担一个流程引擎的设计和实现工作,一个不算小的系统,并且也是当时那个项目里的核心部分。那个阶段我学会了一些系统设计的基本知识,例如需要想清楚整个系统的目标、模块的划分和职责、关键的对象设计等,而不是上来就开始写代码。但那个时候由于我是一个人写整个系统,所以其实对设计的感觉并还没有那么强力的感觉。 在那之后的几年也负责过一些系统,但总体感觉好像在系统设计上的成长没那么多,直到在阿里的经历,在系统设计上才有了越来越多的体会。(点击文末阅读原文,查看:我在系统设计上犯过的14个错,可以看到我走的一堆的弯路)。 在阿里有一次做分享,讲到我在系统设计能力方面的成长,主要是因为三段经历,负责专业领域系统的设计 -> 负责跨专业领域的专业系统的设计 -> 负责阿里电商系统架构级改造的设计。 第一段经历,是我负责HSF。HSF是一个从0开始打造的系统,它主要是作为支撑服务化的框架,是个非常专业领域的系统,放在整个淘宝电商的大系统来看,其实它就是一个很小的子系统,这段经历里让我最深刻的有三点: 1).要设计好这种非常专业领域的系统,专业的知识深度是非常重要的。我在最早设计HSF的几个框的时候,是没有设计好服务消费者/提供者要怎么和现有框架结合的,在设计负载均衡这个部分也反复了几次,这个主要是因为自己当时对这个领域掌握不深的原因造成的; 2). 太技术化。在HSF的阶段,出于情怀,在有一个版本里投入了非常大的精力去引进OSGi以及去做动态化,这个后来事实证明是个非常非常错误的决定,从这个点我才真正明白在设计系统时一定要想清楚目标,而目标很重要的是和公司发展阶段结合; 3). 可持续性。作为一个要在生产环境持续运行很多年的系统而言,怎么样让其在未来更可持续的发展,这个对设计阶段来说至关重要。这里最low的例子是最早设计HSF协议的时候,协议头里竟然没有版本号,导致后来升级都特别复杂;最典型的例子是HSF在早期缺乏了缺乏了服务Tracing这方面的设计,导致后面发现了这个地方非常重要后,全部落地花了长达几年的时间;又例如HSF早期缺乏Filter Chain的设计,导致很多扩展、定制化做起来非常不方便。 第二段经历,是做T4。T4是基于LXC的阿里的容器,它和HSF的不同是,它其实是一个跨多领域的系统,包括了单机上的容器引擎,容器管理系统,容器管理系统对外提供API,其他系统或用户通过这个来管理容器。这个系统发展过程也是各种犯错,犯错的主要原因也是因为领域掌握不深。在做T4的日子里,学会到的最重要的是怎么去设计这种跨多个专业领域的系统,怎么更好的划分模块的职责,设计交互逻辑,这段经历对我自己更为重要的意义是我有了做更大一些系统的架构的信心。 第三段经历,是做阿里电商的异地多活。这对我来说是真正的去做一个巨大系统的架构师,尽管我以前做HSF的时候参与了淘宝电商2.0-3.0的重大技术改造,但参与和自己主导是有很大区别的,这个架构改造涉及到了阿里电商众多不同专业领域的技术团队。在这个阶段,我学会的最主要的: 1). 子系统职责划分。在这种超大的技术方案中,很容易出现某些部分的职责重叠和冲突,这个时候怎么去划分子系统,就非常重要了。作为大架构师,这个时候要从团队的职责、团队的可持续性上去选择团队; 2). 大架构师最主要的职责是控制系统风险。对于这种超大系统,一定是多个专业领域的架构师和大架构师共同设计,怎么确保在执行的过程中对于系统而言最重要的风险能够被控制住,这是我真正的理解什么叫系统设计文档里设计原则的部分。 设计原则我自己觉得就是用来确保各个子系统在设计时都会遵循和考虑的,一定不能是虚的东西,例如在异地多活架构里,最重要的是如何控制数据风险,这个需要在原则里写上,最基本的原则是可接受系统不可用,但也要保障数据一致,而我看过更多的系统设计里设计原则只是写写的,或者千篇一律的,设计原则切实的体现了架构师对目标的理解(例如当时异地多活这个其实开始只是个概念,但做到什么程度才叫做到异地多活,这是需要解读的,也要确保在技术层面的设计上是达到了目标的),技术方案层面上的选择原则,并确保在细节的设计方案里有对于设计原则的承接以及执行; 3). 考虑问题的全面性。像异地多活这种大架构改造,涉及业务层面、各种基础技术层面、基础设施层面,对于执行节奏的决定要综合考虑人力投入、机器成本、基础设施布局诉求、稳定性控制等,这会比只是做一个小的系统的设计复杂非常多。 系统设计能力的成长,我自己觉得最重要的一是先在一两个技术领域做到专业,然后尽量扩大自己的知识广度。例如除了自己的代码部分外,还应该知道具体是怎么部署的,部署到哪去了,部署的环境具体是怎么样的,和整个系统的关系是什么样的。 像我自己,是在加入基础设施团队后才更加明白有些时候软件上做的一个决策,会导致基础设施上巨大的硬件、网络或机房的投入,但其实有可能只需要在软件上做些调整就可以避免,做做研发、做做运维可能是比较好的把知识广度扩大的方法。 第二点是练习自己做tradeoff的能力,这个比较难,做tradeoff这事需要综合各种因素做选择,但这也是所有的架构师最关键的,可以回头反思下自己在做各种系统设计时做出的tradeoff是什么。这个最好是亲身经历,听一些有经验的架构师分享他们选择背后的逻辑也会很有帮助,尤其是如果恰好你也在同样的挑战阶段,光听最终的架构结果其实大多数时候帮助有限。 技术Leader我觉得最好是能在架构师的基础上,后续注重成长的方面还是有挺大差别,就不在这篇里写了,后面再专门来写一篇。 程序员金字塔 我认为程序员的价值关键体现在作品上,被打上作品标签是一种很大的荣幸,作品影响程度的大小我觉得决定了金字塔的层次,所以我会这么去理解程序员的金字塔。 当然,要打造一款作品,仅有上面的两点能力是不够的,作品里很重要的一点是对业务、技术趋势的判断。 希望作为程序员的大伙,都能有机会打造一款世界级的作品,去为技术圈的发展做出贡献。 由于目前IT技术更新速度还是很快的,程序员这个行当是特别需要学习能力的。我一直认为,只有对程序员这个职业真正的充满兴趣,保持自驱,才有可能在这个职业上做好,否则的话是很容易淘汰的。 作者简介: 毕玄,2007年加入阿里,十多年来主要从事在软件基础设施领域,先后负责阿里的服务框架、Hbase、Sigma、异地多活等重大的基础技术产品和整体架构改造。

茶什i 2020-01-10 15:19:35 0 浏览量 回答数 0

问题

c++ Python并不总是执行Python脚本

kun坤 2019-12-26 15:40:00 0 浏览量 回答数 1

回答

原版英文链接:点击这里 作者 | Md Kamaruzzaman 译者 | 无明 策划 | 小智 基础设施:条条道路通云端 对于云厂商来说,2019 年是硕果累累的一年。不仅初创公司在使用云计算,那些很注重安全的“保守派”公司(如政府机构、医疗保健机构、银行、保险公司,甚至是美国五角大楼)也在迁移到云端。这种趋势在 2020 年将会继续,大大小小的公司都将(或者至少有计划)迁移到云端。Gartner 公司最近发布了一个数字: 如果你是一个还在考虑要不要迁移到云端的决策者,不妨重新审视一下你的策略。如果你是一个独立开发者,并且还没使用过云基础设施,那么完全可以在 2020 年尝试一下。很多大型的云厂商(如亚马逊、微软、谷歌)都提供了免费的体验机会。谷歌在这方面做得特别大方,它提供了价值 300 美元的一年免费服务。 策划注:阿里、腾讯、华为等国内云厂商同样有免费云服务试用产品。 云平台:亚马逊领头,其他跟上 作为第一大云厂商,亚马逊在 2019 年可谓风生水起。凭借其丰富的产品组合,亚马逊将把它的优势延续到 2020 年。Canalys 发布的 2019 年第三季度报告指出,大型云厂商(AWS、Azure、GCP)占据 56% 的市场份额,其中 AWS 独享 32.6%。 其他云厂商也在努力缩短与 AWS 之间的差距。微软把主要目标转向了大型企业。最近,微软打败了亚马逊,从美国五角大楼拿到了一个 100 亿美元的大单子。这个单子将提升 Azure 的声誉,同时削弱 AWS 的士气。 谷歌一直在推动 CNCF,实现云计算运维的标准化。谷歌的长期目标是让云迁移变得更容易,方便企业从 AWS 迁移到 GCP。IBM 之前斥资 360 亿美元收购了 RedHat,也想要在云计算市场占有一席之地。 在亚太地区,阿里云市场规模超过了 AWS、Azure 的总和,全球排名第三。中国国内腾讯云等企业的增长势头也十分迅猛。 2020 年将出现更多的并购。当然,很多初创公司将会带来新的想法和创新,例如多云服务。因为竞争激烈,这些公司只能从降价和推出更多的创新产品来获取利润。 容器化:Kubernetes 将会更酷 在容器编排领域,虽然一度出现了“三足鼎立”(Kubernetes、Docker Swarm 和 Mesos),但 Kubernetes 最终脱颖而出,成为绝对的赢家。云是一个分布式系统,而 Kubernetes 是它的 OS(分布式的 Linux)。2019 年北美 KubeCon+CloudNativeCon 大会的参会者达到了 12000 名,比 2018 年增长了 50%。以下是过去 4 年参会人数的增长情况。 在 2020 年,Kubernetes 不仅不会后退,只会变得越来越强,你完全可以把赌注压在 Kubernetes 身上。另外值得一提的是,Migrantis 最近收购了 Docker Enterprise,不过收购数额不详。 几年前,人们张口闭口说的都是 Docker,而现在换成了 Kubernetes。Docker 在它的全盛时期未能盈利,反而在优势渐退几年之后才尝试变现。这再次说明,在现代技术世界,时机就是一切。 软件架构:微服务将成为主流 谷歌趋势表明,微服务架构范式在 2019 年持续增长了一整年。 随着软件行业整体逐步迁移到云端,微服务也将成为占主导地位的架构范式。微服务架构崛起的一个主要原因是它与云原生完美契合,可以实现快速的软件开发。我在之前的一篇博文中解释了微服务架构的基本原则及其优势和劣势。 https://towardsdatascience.com/microservice-architecture-a-brief-overview-and-why-you-should-use-it-in-your-next-project-a17b6e19adfd 我假设现在也存在一种回归到单体架构的趋势,因为在很多情况下,微服务架构有点过头了,而且做好微服务架构设计其实很难。微服务架构有哪些好的实践?在之前的另一篇博文中,我也给出了一些大概,希望对读者有用。 https://towardsdatascience.com/effective-microservices-10-best-practices-c6e4ba0c6ee2 编程语言(整体):Python 将吞噬世界 机器学习、数据分析、数据处理、Web 开发、企业软件开发,甚至是拼接黑洞照片,Python 的影子无处不在。 在著名的编程语言排行榜网站 TIOBE 上,Python 位居最流行编程语言第三位,仅次于 Java 和 C 语言。 更有意思的是,在 2019 年,Python 的流行度翻了一番(从 5% 到 10%)。 Python 的崛起将在 2020 年延续,并缩短与 Java 和 C 语言之间的差距。另一门无所不在的编程语言 JavaScript 正面临下行的风险。为什么 Python 的势头会如此强劲?因为它的入手门槛低,有一个优秀的社区在支持,并受到数据科学家和新生代开发者的喜爱。 编程语言(企业方面):Java 将占主导 之前的 TIOBE 网站截图显示,Java 仍然是一门占主导地位的编程语言,并将在 2020 年继续保持这种地位。JVM 是 Java 的基石,其他编程语言(如 Kotlin、Scala、Clojure、Groovy)也将 JVM 作为运行时。最近,Oracle 修改了 JVM 的许可协议。 新的许可协议意味着使用 Java、Kotlin、Scala 或其他 JVM 编程语言的公司需要向 Oracle 支付大额费用。所幸的是,OpenJDK 让 JVM 继续免费。另外,还有其他一些公司为 JVM 提供企业支持。 因为体积和速度方面的问题,基于 JVM 的编程语言并不适合用在今天的无服务器环境中。Oracle 正在推动 GraalVM 计划,旨在让 Java 变得更加敏捷和快速,让它更适合用在无服务器环境中。因为除了 Java,没有其他编程语言可以提供企业级的稳定性和可靠性,所以 Java 将在 2020 年继续占主导地位。 企业版 Java:Spring 继续发力 曾几何时,在企业开发领域,Spring 和 JavaEE 之间存在着白热化的竞争。但因为 Oracle 在 JavaEE 方面没有作为,在竞争中惨败,这导致了“MicroProfile”计划的形成,并最终促成了 JakartaEE。 虽然所有的政策和活动都是围绕 JavaEE 展开,但 Spring 事实上已经赢得了这场企业 JVM 之争。2020 年,Spring 将成为 JVM 生态系统的头牌。 有两个正在进展中的项目,它们旨在减小 Java 的体积,让它更适合用在无服务器环境中。 其中一个是 Micronaut(https://micronaut.io/)。 另一个是 Quarkus(https://quarkus.io/)。 这两个项目都使用了 GraalVM,它们在 2020 年将会得到 Java 社区更多的关注。 编程语言:后起之秀的突破 2000 年代,编程语言的发展出现了停滞。大多数人认为没有必要再去开发新的编程语言,Java、C 语言、C++、JavaScript 和 Python 已经可以满足所有的需求。但是,谷歌的 Go 语言为新编程语言大门打开了一扇大门。在过去十年出现了很多有趣的编程语言,比如 Rust、Swift、Kotlin、TypeScript。导致这种情况的一个主要原因是已有的编程语言无法充分利用硬件优势(例如多核、更快的网络、云)。另一个原因是现代编程语言更加关注开发者经济,即实现更快速更容易的开发。在 Stackoverflow 提供的一份开发者报告中,排名靠前的现代编程语言如下所示(Rust 连续 4 年名列第一)。 在之前的一篇博文中,我深入探讨了现代编程语言,对比 Rust 和 Go 语言,并说明了为什么现在是采用这些语言的好时机。 https://towardsdatascience.com/back-to-the-metal-top-3-programming-language-to-develop-big-data-frameworks-in-2019-69a44a36a842 最近,微软宣布他们在探索使用 Rust 来开发更安全的软件。 亚马逊最近也宣布要赞助 Rust。 谷歌宣布将 Kotlin 作为 Android 官方开发语言,所以,在 JVM 领域,Kotlin 成了 Java 的主要竞争对手。 Angular 使用 TypeScript 代替 JavaScript,将其作为主要的编程语言,其他 JavaScript 框架(如 React 和 Vue)也开始为 TypeScript 提供更多的支持。 这种趋势将在 2020 年延续下去,很多巨头公司将会深入了解新一代编程语言(如 Rust、Swift、TypeScript、Kotlin),它们会站出来公开表示支持。 Web:JavaScript 继续占主导地位 曾几何时,JavaScript 并不被认为是一门强大的编程语言。在当时,前端内容主要通过后端框架在服务器端进行渲染。2014 年,AngularJS 的出现改变了这种局面。从那个时候开始,更多的 JavaScript 框架开始涌现(Angular 2+、React、Vue、Meteor),JavaScript 已然成为主流的 Web 开发语言。随着 JavaScript 框架不断创新以及微服务架构的崛起,JavaScript 框架在 2020 年将继续主导前端开发。 JavaScript 框架:React 闪耀 虽然 React 是在 AngularJS 之后出现的,但在过去十年对 Web 开发产生了巨大的影响,这也让 Facebook 在与 Google+ 的竞争中打了一场胜战。React 为前端开发带来了一些新的想法,比如事件溯源、虚拟 DOM、单向数据绑定、基于组件的开发,等等。它对开发者社区产生了重大影响,以至于谷歌放弃了 AngularJS,并借鉴 React 的想法推出了彻底重写的 Angular 2+。React 是目前为止最为流行的 JavaScript 框架,下图显示了相关的 NPM 下载统计信息。 为了获得更好的并发和用户体验,Facebook 宣布完全重写 React 的核心算法,推出了 React-Fiber 项目。 2020 年,React 仍然是你开发新项目的首选 Web 框架。其他框架(如 Angular/Angular 2+ 或 Vue)呢?Angular 仍然是一个不错的 Web 开发框架,特别适合企业开发。我敢肯定谷歌在未来几年会在 Angular 上加大投入。Vue 是另一个非常流行的 Web 框架,由中国的巨头公司阿里巴巴提供支持。如果你已经在使用 Angular 或 Vue,就没必要再迁移到 React 了。 App 开发:原生应用 在移动 App 开发方面,有关混合应用开发的炒作有所消停。混合开发提供了更快的开发速度,因为只需要一个开发团队,而不是多个。但原生应用提供了更好的用户体验和性能。另外,混合应用需要经过调整才能使用一些高级特性。对于企业来说,原生应用仍然是首选的解决方案,这种趋势将在 2020 年延续。Airbnb 在一篇博文中非常详细地说明了为什么他们要放弃混合应用开发平台 React Native。 https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a 尽管 Facebook 尝试改进 React Native,谷歌也非常努力地推动混合 App 开发平台 Flutter,但它们仍然只适合用于原型、POC、MVP 或轻量级应用的开发。所以,原生应用在 2020 年仍将继续占主导地位。 在原生应用开发方面,谷歌和苹果分别将 Kotlin 和 Swift 作为各自平台主要的编程语言。谷歌最近再次重申了对 Kotlin 的支持,这对于 Kotlin 用户来说无疑是个好消息。 混合应用开发:React Native 在很多情况下,混合应用是个不错的选择。在这方面也有很多选择:Xamarin、Inoic、React Native 和 Flutter。Facebook 基于成熟的 React 框架推出了 React Native。就像 React 在 Web 框架领域占据主导地位一样,React Native 在混合应用领域也占据着主导地位,如下图所示。 React Native 和 React 有共同的基因,都提供了高度的代码重用性以及“一次开发,到处运行”的能力。React Native 的另一个优势是 Facebook 本身也用它来开发移动应用。谷歌在这个领域起步较晚,但在去年,谷歌的混合应用开发框架 Flutter 获得了不少关注。Flutter 提供了更好的性能,但需要使用另一门不是那么流行的编程语言 Dart。React Native 在 2020 年将继续占主导地位。 API:REST 将占主导地位 REST 是 API 领域事实上的标准,被广泛用在基于 API 的服务间通信上。当然,除了 REST,我们还有其他选择,比如来自谷歌的 gRPC 和来自 Facebook 的 GraphQL。 它们提供了不同的能力。谷歌开发的 gRPC 作为远程过程调用(如 SOAP)的化身,使用 Protobuf 代替 JSON 作为消息格式。Facebook 开发的 GraphQL 作为一个集成层,避免频繁的 REST 调用。gRPC 和 GraphQL 都在各自的领域取得了成功。2020 年,REST 仍然是占主导地位的 API 技术,而 GraphQL 和 gRPC 将作为补充技术。 人工智能:Tensorflow 2.0 将占主导地位 谷歌和 Facebook 也是深度学习 / 神经网络领域的主要玩家。谷歌基于深度学习框架 Theano 推出了 TensorFlow,它很快就成为深度学习 / 神经网络的主要开发库。谷歌还推出了特别设计的 GPU(TPU)来加速 TensorFlow 的计算。 Facebook 在深度学习领域也不甘落后,他们拥有世界上最大的图像和视频数据集合。Facebook 基于另一个深度学习库 Torch 推出了深度学习库 PyTorch。TensorFlow 和 PyTorch 之间有一些区别,前者使用的是静态图进行计算,而 PyTorch 使用的是动态图。使用动态图的好处是可以在运行时纠正自己。另外,PyTorch 对 Python 支持更好,而 Python 是数据科学领域的一门主要编程语言。 随着 PyTorch 变得越来越流行,谷歌也赶紧在 2019 年 10 月推出了 TensorFlow 2.0,也使用了动态图,对 Python 的支持也更好。 2020 年,TensorFlow 2.0 和 PyTorch 将齐头并进。考虑到 TensorFlow 拥有更大的社区,我估计 TensorFlow 2.0 将成为占主导地位的深度学习库。 数据库:SQL是王者,分布式SQL是王后 在炒作 NoSQL 的日子里,人们嘲笑 SQL,还指出了 SQL 的种种不足。有很多文章说 NoSQL 有多么的好,并将要取代 SQL。但等到炒作的潮水褪去,人们很快就意识到,我们的世界不能没有 SQL。以下是最流行的数据库的排名。 可以看到,SQL 数据库占据了前四名。SQL 之所以占主导地位,是因为它提供了 ACID 事务保证,而 ACID 是业务系统最潜在的需求。NoSQL 数据库提供了横向伸缩能力,但代价是不提供 ACID 保证。 互联网公司一直在寻找“大师级数据库”,也就是既能提供 ACID 保证又能像 NoSQL 那样可横向伸缩的数据库。目前有两个解决方案可以部分满足对“大师级数据库”的要求,一个是亚马逊的 Aurora,一个是谷歌的 Spanner。Aurora 提供了几乎所有的 SQL 功能,但不支持横向写伸缩,而 Spanner 提供了横向写伸缩能力,但对 SQL 支持得不好。 2020 年,但愿这两个数据库能够越走越近,或者有人会带来一个“分布式 SQL”数据库。如果真有人做到了,那一定要给他颁发图灵奖。 数据湖:MinIO 将要崛起 现代数据平台非常的复杂。企业一般都会有支持 ACID 事务的 OLTP 数据库(SQL),也会有用于数据分析的 OLAP 数据库(NoSQL)。除此之外,它们还有其他各种数据存储系统,比如用于搜索的 Solr、ElasticSearch,用于计算的 Spark。企业基于数据库构建自己的数据平台,将 OLTP 数据库的数据拷贝到数据湖中。各种类型的数据应用程序(比如 OLAP、搜索)将数据湖作为它们的事实来源。 HDFS 原本是事实上的数据湖,直到亚马逊推出了对象存储 S3。S3 可伸缩,价格便宜,很快就成为很多公司事实上的数据湖。使用 S3 唯一的问题是数据平台被紧紧地绑定在亚马逊的 AWS 云平台上。虽然微软 Azure 推出了 Blob Storage,谷歌也有类似的对象存储,但都不是 S3 的对手。 对于很多公司来说,MinIO 或许是它们的救星。MinIO 是一个开源的对象存储,与 S3 兼容,提供了企业级的支持,并专门为云原生环境而构建,提供了与云无关的数据湖。 微软在 Azure Marketplace 是这么描述 MinIO 的:“为 Azure Blog Storage 服务提供与亚马逊 S3 API 兼容的数据访问”。如果谷歌 GCP 和其他云厂商也提供 MinIO,那么我们将会向多云迈出一大步。 大数据批处理:Spark 将继续闪耀 现如今,企业通常需要基于大规模数据执行计算,所以需要分布式的批处理作业。Hadoop 的 Map-Reduce 是第一个分布式批处理平台,后来 Spark 取代了 Hadoop 的地位,成为真正的批处理之王。Spark 是怎样提供了比 Hadoop 更好的性能的?我之前写了另一篇文章,对现代数据平台进行了深入分析。 https://towardsdatascience.com/programming-language-that-rules-the-data-intensive-big-data-fast-data-frameworks-6cd7d5f754b0 Spark 解决了 Hadoop Map-Reduce 的痛点,它将所有东西放在内存中,而不是在完成每一个昂贵的操作之后把数据保存在存储系统中。尽管 Spark 重度使用 CPU 和 JVM 来执行批处理作业,但这并不妨碍它成为 2020 年批处理框架之王。我希望有人能够使用 Rust 开发出一个更加高效的批处理框架,取代 Spark,并为企业省下大量的云资源费用。 大数据流式处理:Flink 是未来 几年前,实现实时的流式处理几乎是不可能的事情。一些微批次处理框架(比如 Spark Streaming)可以提供“几近”实时的流式处理能力。不过,Flink 改变了这一状况,它提供了实时的流式处理能力。 2019 年之前,Flink 未能得到足够的关注,因为它无法撼动 Spark。直到 2019 年 1 月份,中国巨头公司阿里巴巴收购了 Data Artisan(Flink 背后的公司)。 在 2020 年,企业如果想要进行实时流式处理,Flink 应该是不二之选。不过,跟 Spark 一样,Flink 同样重度依赖 CPU 和 JVM,并且需要使用大量的云资源。 字节码:WebAssembly将被广泛采用 我从 JavaScript 作者 Brandon Eich 的一次访谈中知道了 WebAssembly 这个东西。现代 JavaScript(ES5 之后的版本)是一门优秀的编程语言,但与其他编程语言一样,都有自己的局限性。最大的局限性是 JavaScript 引擎在执行 JavaScript 时需要读取、解析和处理“抽象语法树”。另一个问题是 JavaScript 的单线程模型无法充分利用现代硬件(如多核 CPU 或 GPU)。正因为这些原因,很多计算密集型的应用程序(如游戏、3D 图像)无法运行在浏览器中。 一些公司(由 Mozilla 带领)开发了 WebAssembly,一种底层字节码格式,让任何一门编程语言都可以在浏览器中运行。目前发布的 WebAssembly 版本可以支持 C++、Rust 等。 WebAssembly 让计算密集型应用程序(比如游戏和 AutoCAD)可以在浏览器中运行。不过,WebAssembly 的目标不仅限于此,它还要让应用程序可以在浏览器之外运行。WebAssembly 可以被用在以下这些“浏览器外”的场景中。 移动设备上的混合原生应用。没有冷启动问题的无服务器计算。在服务器端执行不受信任的代码。 我预测,2020 年将是 WebAssembly 取得突破的一年,很多巨头公司(包括云厂商)和社区将会拥抱 WebAssembly。 代码:低代码 / 无代码将更进一步 快速的数字化和工业 4.0 革命意味着软件开发者的供需缺口巨大。由于缺乏开发人员,很多企业无法实现它们的想法。为了降低进入软件开发的门槛,可以尝试无代码(No Code)或低代码(Low Code)软件开发,也就是所谓的 LCNC(Low-Code No-Code)。它已经在 2019 年取得了一些成功。 LCNC 的目标是让没有编程经验的人也能开发软件,只要他们想要实现自己的想法。 虽然我对在正式环境中使用 LCNC 框架仍然心存疑虑,但它为其他公司奠定了良好的基础,像亚马逊和谷歌这样的公司可以基于这个基础构建出有用的产品,就像 AWS Lambda 的蓬勃发展是以谷歌 App Engine 为基础。 2020 年,LCNC 将会获得更多关注。

茶什i 2019-12-26 11:57:03 0 浏览量 回答数 0

回答

北美华人安全论坛 BASec 创始人韦韬认为,Rust 有着出色的性能表现,不过对于普通业务而言,性能不是关键,稳定性才是。这个恰恰是 Rust 的最强项。就稳定性而言,Rust 碾压大部分语言,包括 C,C++,Go,Python,PHP 等等。但是没有免费的午餐,Rust 的稳定性来自于 Borrow Checker 的 " 严苛 ",Ownership 机制对于 Rust 入门者有一定的门槛。但大部分情况下,配合上基本的编程规范 (严格限制 unsafe/unwrap/…等),只要 Rust 编译器点头,程序运行起来就没什么问题。需要注意的是,Rust 保障的内存安全不包括防止内存泄露。因为内存泄露的语义和具体应用逻辑强相关,所以还需要做额外的内存泄露检查,但这方面的工具比较现成,一般不是大问题。但即使如此,Rust 写驱动也不太乐观,主要是两个原因。一是需要把底层的 unsafe 仔细封装,因为在驱动场景下,很多操作不满足 Rust safe 的要求,一旦代码里混杂了很多 unsafe,那么因常规安全检验工具的缺乏,Rust 反而会不如 C。二是硬件厂家的工程师从 C 改为 Rust 更漫长,广泛的硬件驱动支持才是 Linux 生态繁荣昌盛的根基,这个生态挑战比单纯的技术挑战更大。 方便开发者学习 Rust,Rust 官方团队做出了如下努力: 独立出专门的社区工作组,编写官方Rust Book,以及其他各种不同深度的文档,比如编译器文档、nomicon book 等。甚至组织免费的社区教学活动 Rust Bridge,大力鼓励社区博客写作,等等。 Rust 语言的文档支持 Markdown 格式,因此 Rust 标准库文档表现力丰富。生态系统内很多第三方包的文档的表现力也同样得以提升。 提供了非常好用的在线 Playground 工具,供开发者学习、使用和分享代码。 Rust 语言很早就实现了自举,方便学习者通过阅读源码了解其内部机制,甚至参与贡献。 Rust 核心团队一直在不断改进 Rust,致力于提升 Rust 的友好度,极力降低初学者的心智负担,减缓学习曲线。比如引入 NLL 特性来改进借用检查系统,使得开发者可以编写更加符合直觉的代码。 虽然从 Haskell 那里借鉴了很多类型系统相关的内容,但是 Rust 团队在设计和宣传语言特性的时候,会特意地去学术化,让 Rust 的概念更加亲民。 在类型系统基础上提供了混合编程范式的支持,提供了强大而简洁的抽象表达能力,极大地提升了开发者的开发效率。 提供更加严格且智能的编译器。基于类型系统,编译器可以严格地检查代码中隐藏的问题。Rust 官方团队还在不断优化编译器的诊断信息,使得开发者可以更加轻松地定位错误,并快速理解错误发生的原因。 Rust 从 2006 年诞生之日开始,目标就很明确——追求安全、并发和高性能的现代系统级编程语言。为了达成这一目标,Rust 语言遵循着内存安全、零成本抽象和实用性三大设计哲学。借助现代化的类型系统,赋予了 Rust 语言高级的抽象表达能力,与此同时又保留了对底层的控制能力。开发者和 Rust 编译器共享着同一套“心智模型”,相互信任,相互协作,最大化地保证系统的安全和健壮性。Rust 语言有别于传统语言的另一点在于,它将开源社区视为语言的一部分。Rust 本身就是开源项目中的典范,非常值得学习。 有人把 Rust 称为”The New C“,我十分认同,Rust 是开启新时代的语言。但 Rust 可能不像其他语言那样,突然冒出一个杀手级应用来引领某个领域的一段潮流。Rust 改变世界的方式,正好可以用古人的诗词来形容,”好雨知时节,当春乃发生。随风潜入夜,润物细无声“。 Rust 语言不是银弹,它也不追求完美,它只是在由 C 和 C++ 构建的旧世界之上,寻求更好的问题解决之道。 所以,你准备好学习 Rust 了吗? 内容来源于网络&《Rust 编程之道》 技术交流群 加入阿里云钉钉群享福利:每周技术直播,定期群内有奖活动、大咖问答

珍宝珠 2020-01-13 14:23:31 0 浏览量 回答数 0

回答

@邓凡平 @红猎人 ######这个得找厂家,问问售后。没有简单的办法去调节。###### 1.  连击的时候,点准不准? 2.  插着充电,会不会更明显? 应该是触摸屏有点问题,上报的UP和DOWN事件有问题。  找售后看看,应该是一个个体问题,rp差了点吧###### 引用来自“星土”的答案 1.  连击的时候,点准不准? 2.  插着充电,会不会更明显? 应该是触摸屏有点问题,上报的UP和DOWN事件有问题。  找售后看看,应该是一个个体问题,rp差了点吧 首先谢谢这位星土朋友的热心帮助! 1、只是单击操作时容易变成连击操作,并不是点不准。 例如:我点击返回键,按理是返回上一级,但有时变成了连击多次返回,把整个程序给退出了 2、充电时没有更明显 我不会编程,但对安卓系统还是有些了解的,个人觉的是固件某处代码存在问题导致的,并不是硬件故障。 恳请看看有没什么方案可解决,或者指出系统中可能那个文件的代码有问题,我自己再摆弄下试试了。 谢谢! ######要不你刷固件吧 ######国产平板的触摸屏质量很次的###### 家里人用平板? 这个让我想到了我家人用鼠标,我们理解的双击是快速两次单击,但往往家人因不懂操作,单机会变成长时间触按操作,再加上手指的轻微抖动,很大程度会造成双击的效果,你先确定是不是因为这个? 有这情况的话,可以在操作的时候用点力,这样可以避免手指抖动来缓解问题。###### 引用来自“xoHome”的答案 家里人用平板? 这个让我想到了我家人用鼠标,我们理解的双击是快速两次单击,但往往家人因不懂操作,单机会变成长时间触按操作,再加上手指的轻微抖动,很大程度会造成双击的效果,你先确定是不是因为这个? 有这情况的话,可以在操作的时候用点力,这样可以避免手指抖动来缓解问题。 xohome 你好!谢谢你提出的观点! 单击有时变成双击或连击操作,根据我的使用经验认为不是家人操作手势不对引起的。 我家里还有台ThinkPad Slate Tablet平板使用起来不会有这样的问题。 由于安卓4.0的返回键点击会发出提示音,我曾经实验在桌面状态时长按返回键,就听见发出的提示音频率非常高,大概每秒有3-4声,这样的反应速度,不是正常人可控制的。 所以我推测触摸屏太灵敏了,造成使用时一个不小心单击变双击或连击了。 固件代码里大概没有控制两次点击的最短时间或者灵敏度调整参数不对等等。 由于我不懂编程上面的说法也只是门外汉的推测而已,希望哪位高手能讲讲固件里可能那个文件不对造成的,告诉我文件名字,或者修改代码的方案。 我虽不会编程,但找其它硬件相同的平板固件里,提取文件来替换我的固件打包刷机还是会的:) ###### 引用来自“邓凡平”的答案 这个得找厂家,问问售后。没有简单的办法去调节。 哈。说了个大实话。屏不行,软件毛用没有。驱动芯片不行,android OS也没用。其实简单说一点,都是山寨低成本惹的祸。 ###### 引用来自“中山野鬼”的答案 引用来自“邓凡平”的答案 这个得找厂家,问问售后。没有简单的办法去调节。 哈。说了个大实话。屏不行,软件毛用没有。驱动芯片不行,android OS也没用。其实简单说一点,都是山寨低成本惹的祸。 东西都是一分价钱一分货的,比如光拿个GPS模块,进口的光个模块就好几百,国产的连机子一起卖才几百。虽然能用下,但稳定性差一大截。     图个便宜就不要要求那么多了,说实话买山寨还能期望个什么售后啊。

kun坤 2020-06-08 11:31:33 0 浏览量 回答数 0

回答

关于书籍 Linux基础 1、《Linux与Unix Shell 编程指南》 2、《嵌入式Linux应用程序开发详解》 C语言基础 1. The C programming language 《C程序设计语言》 2. Pointers on C 《C和指针》 3. C traps and pitfalls 《C陷阱与缺陷》 4. Expert C Lanuage 《专家C编程》 5、《高质量程序设计指南:C++/C语言(第3版)》 Linux内核 1、《深入理解Linux内核》(第三版) 2、《Linux内核源代码情景分析》毛德操 胡希明着 研发方向 1、《UNIX Network Programming》(UNP) 2、《TCP/IP详解》 3、《Linux内核编程》 4、《Linux设备驱动开发》(LDD) 硬件基础 1、《ARM体系结构与编程》杜春雷 2、S3C2410 Datasheet 英语基础 1、《计算机与通信专业英语》 系统教程 1、《嵌入式系统――体系结构、编程与设计》 2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着 3、《Building Embedded Linux Systems》 关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。 专科生学嵌入式到找到工作的前前后后--学习的榜样 先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。 退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。 一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。 回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。 后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。 我在想,为什么别人都能自学成才,我也可以的。我要相信自己,所以我就想自学,如果实在学不会我再去培训。 主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。 后来我又找到一份很好的视频,是在嵌入式学习网推出的一份视频《嵌入式视频教程--零基础手把手教你学嵌入式》,里面的教程还不错,很完整,可以让我从基础的开始学起。视频不便宜啊,但是我也忍了,毕竟买几本书都要几百了,何况他们还有半年的技术咨询和服务,算值了。 ==============这里我就不给出他们的网址,如果你也想要嵌入式视频的话,那就自己去百度搜索:零基础手把手教你学嵌入式。 下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。 收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。 接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。 这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。 最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右 我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。 把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。 最后祝愿所有想学嵌入式的朋友更早的入门。 ------------------------------------------------------------好好加油,你也可以学好嵌入式的。。。。。。。。。。。。。。

游客886 2019-12-02 01:19:56 0 浏览量 回答数 0

回答

电气工程及其自动化专业,我是电子信息工程技术专业^_^。说一下我的经历,或许对你有一定的启发和帮助。首先,我也是自学的程序设计,当然在学校的时候还是会学一些基础的编程相关的,比如汇编,C语言,还有硬件相关的编程。我也是在一个偶然的机会接触到的真正意义上的编程(个人这么认为,在之前一直在控制台输出结果,很觉得枯燥无味,感觉没啥挑战)。那是一次参加比赛的准备,老师要写一个上位机通讯的界面,他打算用VB来写,他问我会不会。我当然不会。但是我下来就到网上了解了一下,一发不可收拾,我这才知道原来写程序不仅仅是在控制台里玩玩而已。当然,我没有深入去了解VB,因为那时候微软推出的是C#,于是我是从学C#开始的。因为C#涉及到一个完整的体系,.NET,WF,WPF,WCF,当时这些我都认真的练习过,当然当时只是没有目标的瞎玩,那时候经常去的是图书馆,从图书馆借很多厚厚的红书(也有黑的)回来,拼命的在电脑上敲,那时候仿佛完全沉浸在其中了。在中途受到过几次打击。一是电脑被偷两次,使得我必须重新把敲过的代码,重新再敲一遍。二是一次去面试(带有培训性质的面试),三个还是两个面试官轮番轰炸,炸得我垂头丧气,出来之后一个培训的人就给你各种安慰(相信很多人都遇到过)。当然,这都没有阻止我继续往这条道上走下去。接下来轮到找工作,我用Siverlight(汗,刚刚名字都快忘记了)制作了一个相册模块(其实不是很完整,但是从网上找了很多美女作为相册内容!!!),背着电脑就去公司面试了(注意,不是等通知,而是直接到公司)。他们让我第二天来笔试(没有面试,貌似他们没有打印或者正在忙),但是从谈话中透露出要做JavaScript方面的题。偶滴神,不知道是不是第一次听到这个名字,只记得当时在弄ASP.NET的时候,复制粘贴过一小段脚本(大家懂的,ASP.NET给人的感觉就是拖拖控件完事的)。于是乎,跑到网吧,下载了一本电子书,回到宾馆啃完睡觉,第二天去笔试。笔试结果65分,刚刚及格。其实,我很感谢当时面试我的人(目前在阿里的,很厉害的)。就这样,我就真正走上了这条不归路。工作的同时就是学习,我学习能力应该算强的那种,很多都能立马会用。一周之后就开始接触项目(不是一般的修改bug开始),可见公司当时是缺人的。由于我能力很次的,所以当时是经理坐在我后面“指导”编程的(其实是他没事,就喜欢做在别人背后)。过了一阵子之后,他就不坐在我身后了,做到了另一个新人的身后。说真的,还是非常感谢我的第一家公司,毕竟他给了我一段让我快速成长的经历。一年半的样子,离开第一家公司,来到第二家公司。刚开始的时候主要是会用,不过已经在开始接触进去而已的源码了,来到第二家公司没有安排什么具体项目,都是调研类的,当时在考虑搭建一个底层的前端框架给其他部门使用。所以,给自己的时间很多,那段时间可以说是自身能力进阶的阶段。已经开始接触底层一些的js语法,html5方面的知识。不过很快,也一年的时间就离开了那家公司,到第三家创业公司,负责前端。开始编写自己的框架,将自己学到的前端知识(主要是前端的,因为自从工作之后主要接触前端方面的)系统化。其实在第二家公司的时候,已经尝试着造轮子,根据jqmobi,jquery mobile写了一个移动框架,不知道当时总经理把我拉入总经办是不是因为这个(话说我都不知道总经办是干啥的)。这一阶段主要是用,而非学,当然也有深化,加深理解。第三家公司后来倒闭了(没到一年),出来找了第四份工作,目前也提出了辞职。第四份工作主要给了自己机会尝试自己写的框架,也就是自己的能力在经过实际项目的考验。到目前为止,工作快6个年头,主要从事前端(其实我给个人定的目标是架构师)。因为已经提出了辞职,所以才有这些时间来逛segmentfault,在上面回答问题,来写这个答案。其实,别人的经验终究都是别人的,自己的生活还得自己来过。迷茫,每个人都会经历的,有的人能很快调整自己逃出来,而有的会花很长时间。看这里,https://segmentfault.com/q/1010000004921122/a-1020000004921925也遇到过其他人问过类似的问题。刚刚说的是我,下面来说说你,我只能通过你的代码来简单说一下,有不对的地方还请谅解。第一个,代码确实乱。你可以将一些方法抽象出来,还有就是多添加注释,多换行,这样也可以让自己的代码看起来舒服很多。第二个,代码有很多可以优化的地方。比如,dwid=dwid||''(单从写法上来说,不从性能上来说),bklm_fn方法里面的优化不想写了。第三个,别轻易受外界影响(主要是你说你现在的公司,包括我在这里说了这么多);第四个,其实你已经知道你自己的问题了,或许还没有完全找到解决方法,凡事不可太急,一步一步来。最后,祝你好运!

杨冬芳 2019-12-02 02:56:19 0 浏览量 回答数 0

回答

电气工程及其自动化专业,我是电子信息工程技术专业^_^。说一下我的经历,或许对你有一定的启发和帮助。首先,我也是自学的程序设计,当然在学校的时候还是会学一些基础的编程相关的,比如汇编,C语言,还有硬件相关的编程。我也是在一个偶然的机会接触到的真正意义上的编程(个人这么认为,在之前一直在控制台输出结果,很觉得枯燥无味,感觉没啥挑战)。那是一次参加比赛的准备,老师要写一个上位机通讯的界面,他打算用VB来写,他问我会不会。我当然不会。但是我下来就到网上了解了一下,一发不可收拾,我这才知道原来写程序不仅仅是在控制台里玩玩而已。当然,我没有深入去了解VB,因为那时候微软推出的是C#,于是我是从学C#开始的。因为C#涉及到一个完整的体系,.NET,WF,WPF,WCF,当时这些我都认真的练习过,当然当时只是没有目标的瞎玩,那时候经常去的是图书馆,从图书馆借很多厚厚的红书(也有黑的)回来,拼命的在电脑上敲,那时候仿佛完全沉浸在其中了。在中途受到过几次打击。一是电脑被偷两次,使得我必须重新把敲过的代码,重新再敲一遍。二是一次去面试(带有培训性质的面试),三个还是两个面试官轮番轰炸,炸得我垂头丧气,出来之后一个培训的人就给你各种安慰(相信很多人都遇到过)。当然,这都没有阻止我继续往这条道上走下去。接下来轮到找工作,我用Siverlight(汗,刚刚名字都快忘记了)制作了一个相册模块(其实不是很完整,但是从网上找了很多美女作为相册内容!!!),背着电脑就去公司面试了(注意,不是等通知,而是直接到公司)。他们让我第二天来笔试(没有面试,貌似他们没有打印或者正在忙),但是从谈话中透露出要做JavaScript方面的题。偶滴神,不知道是不是第一次听到这个名字,只记得当时在弄ASP.NET的时候,复制粘贴过一小段脚本(大家懂的,ASP.NET给人的感觉就是拖拖控件完事的)。于是乎,跑到网吧,下载了一本电子书,回到宾馆啃完睡觉,第二天去笔试。笔试结果65分,刚刚及格。其实,我很感谢当时面试我的人(目前在阿里的,很厉害的)。就这样,我就真正走上了这条不归路。工作的同时就是学习,我学习能力应该算强的那种,很多都能立马会用。一周之后就开始接触项目(不是一般的修改bug开始),可见公司当时是缺人的。由于我能力很次的,所以当时是经理坐在我后面“指导”编程的(其实是他没事,就喜欢做在别人背后)。过了一阵子之后,他就不坐在我身后了,做到了另一个新人的身后。说真的,还是非常感谢我的第一家公司,毕竟他给了我一段让我快速成长的经历。一年半的样子,离开第一家公司,来到第二家公司。刚开始的时候主要是会用,不过已经在开始接触进去而已的源码了,来到第二家公司没有安排什么具体项目,都是调研类的,当时在考虑搭建一个底层的前端框架给其他部门使用。所以,给自己的时间很多,那段时间可以说是自身能力进阶的阶段。已经开始接触底层一些的js语法,html5方面的知识。不过很快,也一年的时间就离开了那家公司,到第三家创业公司,负责前端。开始编写自己的框架,将自己学到的前端知识(主要是前端的,因为自从工作之后主要接触前端方面的)系统化。其实在第二家公司的时候,已经尝试着造轮子,根据jqmobi,jquery mobile写了一个移动框架,不知道当时总经理把我拉入总经办是不是因为这个(话说我都不知道总经办是干啥的)。这一阶段主要是用,而非学,当然也有深化,加深理解。第三家公司后来倒闭了(没到一年),出来找了第四份工作,目前也提出了辞职。第四份工作主要给了自己机会尝试自己写的框架,也就是自己的能力在经过实际项目的考验。到目前为止,工作快6个年头,主要从事前端(其实我给个人定的目标是架构师)。因为已经提出了辞职,所以才有这些时间来逛segmentfault,在上面回答问题,来写这个答案。其实,别人的经验终究都是别人的,自己的生活还得自己来过。迷茫,每个人都会经历的,有的人能很快调整自己逃出来,而有的会花很长时间。看这里,https://segmentfault.com/q/1010000004921122/a-1020000004921925也遇到过其他人问过类似的问题。刚刚说的是我,下面来说说你,我只能通过你的代码来简单说一下,有不对的地方还请谅解。第一个,代码确实乱。你可以将一些方法抽象出来,还有就是多添加注释,多换行,这样也可以让自己的代码看起来舒服很多。第二个,代码有很多可以优化的地方。比如,dwid=dwid||''(单从写法上来说,不从性能上来说),bklm_fn方法里面的优化不想写了。第三个,别轻易受外界影响(主要是你说你现在的公司,包括我在这里说了这么多);第四个,其实你已经知道你自己的问题了,或许还没有完全找到解决方法,凡事不可太急,一步一步来。最后,祝你好运!

运营狗子 2019-12-02 02:56:19 0 浏览量 回答数 0

问题

一个老码农的技术理想

技术小菜鸟 2019-12-01 21:17:10 3067 浏览量 回答数 1

问题

【教程免费下载】 多核与GPU编程: 工具、方法及实践

玄学酱 2019-12-01 22:08:04 2007 浏览量 回答数 1

回答

"<a href=""http://my.oschina.net/innost"" class=""referer"" target=""_blank"">@邓凡平 <a href=""http://my.oschina.net/zengsai"" class=""referer"" target=""_blank"">@红猎人 ######这个得找厂家,问问售后。没有简单的办法去调节。###### 1.  连击的时候,点准不准? 2.  插着充电,会不会更明显? 应该是触摸屏有点问题,上报的UP和DOWN事件有问题。  找售后看看,应该是一个个体问题,rp差了点吧###### 引用来自“星土”的答案 1.  连击的时候,点准不准? 2.  插着充电,会不会更明显? 应该是触摸屏有点问题,上报的UP和DOWN事件有问题。  找售后看看,应该是一个个体问题,rp差了点吧 首先谢谢这位星土朋友的热心帮助! 1、只是单击操作时容易变成连击操作,并不是点不准。 例如:我点击返回键,按理是返回上一级,但有时变成了连击多次返回,把整个程序给退出了 2、充电时没有更明显 我不会编程,但对安卓系统还是有些了解的,个人觉的是固件某处代码存在问题导致的,并不是硬件故障。 恳请看看有没什么方案可解决,或者指出系统中可能那个文件的代码有问题,我自己再摆弄下试试了。 谢谢! ######要不你刷固件吧 ######国产平板的触摸屏质量很次的###### 家里人用平板? 这个让我想到了我家人用鼠标,我们理解的双击是快速两次单击,但往往家人因不懂操作,单机会变成长时间触按操作,再加上手指的轻微抖动,很大程度会造成双击的效果,你先确定是不是因为这个? 有这情况的话,可以在操作的时候用点力,这样可以避免手指抖动来缓解问题。###### 引用来自“xoHome”的答案 家里人用平板? 这个让我想到了我家人用鼠标,我们理解的双击是快速两次单击,但往往家人因不懂操作,单机会变成长时间触按操作,再加上手指的轻微抖动,很大程度会造成双击的效果,你先确定是不是因为这个? 有这情况的话,可以在操作的时候用点力,这样可以避免手指抖动来缓解问题。 xohome 你好!谢谢你提出的观点! 单击有时变成双击或连击操作,根据我的使用经验认为不是家人操作手势不对引起的。 我家里还有台ThinkPad Slate Tablet平板使用起来不会有这样的问题。 由于安卓4.0的返回键点击会发出提示音,我曾经实验在桌面状态时长按返回键,就听见发出的提示音频率非常高,大概每秒有3-4声,这样的反应速度,不是正常人可控制的。 所以我推测触摸屏太灵敏了,造成使用时一个不小心单击变双击或连击了。 固件代码里大概没有控制两次点击的最短时间或者灵敏度调整参数不对等等。 由于我不懂编程上面的说法也只是门外汉的推测而已,希望哪位高手能讲讲固件里可能那个文件不对造成的,告诉我文件名字,或者修改代码的方案。 我虽不会编程,但找其它硬件相同的平板固件里,提取文件来替换我的固件打包刷机还是会的:) ###### 引用来自“邓凡平”的答案 这个得找厂家,问问售后。没有简单的办法去调节。 哈。说了个大实话。屏不行,软件毛用没有。驱动芯片不行,android OS也没用。其实简单说一点,都是山寨低成本惹的祸。 ###### 引用来自“中山野鬼”的答案 引用来自“邓凡平”的答案 这个得找厂家,问问售后。没有简单的办法去调节。 哈。说了个大实话。屏不行,软件毛用没有。驱动芯片不行,android OS也没用。其实简单说一点,都是山寨低成本惹的祸。 东西都是一分价钱一分货的,比如光拿个GPS模块,进口的光个模块就好几百,国产的连机子一起卖才几百。虽然能用下,但稳定性差一大截。     图个便宜就不要要求那么多了,说实话买山寨还能期望个什么售后啊。 " ![image.png](https://ucc.alicdn.com/pic/developer-ecology/a14f1d004772429c97a62f3c07dde8f8.png)

montos 2020-05-31 13:06:55 0 浏览量 回答数 0

回答

一、前言 Java语言长期以来一直霸占多数热门编程语言榜单的榜首,可见这是一个备受程序员热捧的编程语言。Java语言具有什么魅力?想必这都是已经为大多数人们所熟知的了,不值得过多赘述。而Java语言发展至今,面对发展势头迅猛又十分简单易学的python,以及各种层出不穷的高级语言,Java程序员的份额已经逐步下降,那它是否还能在未来保持领先的优势呢?本文就主要从Java语言所不擅长的领域,以及它在自己的领土内受到的对手入手,聊一聊Java语言在未来所面临的挑战。 二、Java帝国的今天 2.1 依然霸占TIOBE热门编程语言的榜首 这是来自权威开发语言排行榜TIOBE的最新数据(截止到2020年4月),可以看到Java语言依然在语言排行榜霸占第一的位置!虽然下面Python小老弟近几年搭上大数据的热潮,发展实为迅猛,在其他一些排行榜上面甚至超越大哥,但是在TIOBE这样权威的排行榜上面,Python依旧是小老弟! 2.2 曾经想扼杀Java的微软宣布加入OpenJDK 这又是一个IT界的真香现场,Sun 公司曾以“歧视使用 Java 软件”为由起诉微软。而微软在2001年推出新版操作系统 Windows XP 时,故意不安装 Java 软件,并且推出高仿 Java 的语言 C# 和 .net 框架。在现在,微软却宣布加入OpenJDK,拥抱Java技术。微软的宇宙第一 IDE Visual Studio也开始支持Java开发(通过VS的 Visual Studio Live Share ,可以关联到VS code上面的Java项目,协同编程,间接地支持了Java开发)。 2.3 Oracle发布开源全栈虚拟机GraalVM 这是大名鼎鼎的Oracle公司搞出来的开源产品,从官网“Run Programs Faster Anywhere”这句口号和产品的命名GraalVM就可以看出,GraalVM是升级版的JVM。在GraalVM上面执行Java程序的效率更高(得益于其中的JIT编译器技术)。最牛逼的地方在于,GraalVM支持多语言应用!在GraalVM里面,多种不同的语言可以互相传递数据,支持Java、Python、Ruby、R、Scala、Kotlin,JavaScript等多种语言。 三、Java帝国受到的挑战 3.1 后端服务器开发 J2EE作为Java平台的重要组成部分,现在广泛应用于Web后台服务器开发领域,在这个领域,Java拥有很多好朋友,比如Spring框架,Mybatis和Hibernate等,使得开发者可以快速构建Web应用程序。这是Java帝国一块重要的领土,但也有很多挑战。下面就是几个强大的竞争者。 3.1.1 Python 的竞争 Python语言和Java相比,具有下面这些优点: 语法简单直观,这意味着开发速度快第三方库强大,可以写复杂的逻辑 当然Python和Java相比执行效率上肯定是更低了,因此主要应用于小型的网站后台,像阿里这样的大厂就是拥抱Java后台的了。 3.1.2 C++ 的竞争 C++语言和Java相比,具有以下优点: 执行效率高对内存管理自由,而Java由GC来管理 C++适合大型高性能的服务器开发。腾讯更多的就是使用C++进行开发,这点和阿里不同。当然C++相比Java,学习和开发的难度更高。 3.1.3 node.js 的竞争 node.js的出现大概是前端程序员最高兴的事情了,因为node.js可以让他们写的JavaScript代码运行在服务端,这样就可以使得前端不用学Java也能自己写后台,摆脱后台爸爸的束缚(误)。得益于node.js的事件驱动机制,node.js具有很高的并发性能,可以应对大规模的http请求。但也有缺点,因为js只支持单核,因此没法充分利用服务器的性能,它不适合CPU密集型应用。 3.1.4 Go 的竞争 Go语言是最近很火的开发语言,适合用于开发高性能分布式系统。这是一个十分强大的竞争对手,被认为是未来的服务端语言。它具有下面这些优点: 学习难度低,容易上手,易于维护得益于协程,并发性能优越编译型语言,执行效率高 3.1.5 小结 可以看到,在后端服务器开发领域,Java在不同方面受到多种语言的竞争,轻量小型的服务器,人们可以选择Python,node.js或者PHP。而大型高性能服务器,人们可以选择C++。Go语言就更强大,兼具了比Java更简单的语法和更高的并发性能,背后又是Google爸爸。因此,在这一领域,Java面临巨大的竞争压力。 3.2 安卓系统应用开发 Java用于安卓应用程序开发已经是很成熟的方案了,目前绝大多数的安卓应用都是用Java写的。很多安卓程序员也都是学Java过来的。但是随着新语言不断推出,和安卓应用开发方式的演变,Java慢慢不再是安卓开发的首选。比如下面这些语言,就是比较热门的选择。 3.2.1 Kotlin 成为 Android 开发的首选语言 在2019年的Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。Kotlin 可以编译成Java字节码,可以在JVM上面运行,也可以编译成JavaScript,在没有JVM的机器上运行。Kotlin语言比Java更安全,更简洁,随着谷歌爸爸推崇,将来的发展前景可期。 3.2.2 Flutter 框架和 Dart 语言 这两个都是谷歌最近推出的东西,Flutter是一款用于帮助开发者在iOS和Android两个平台构建高质量原生应用的全新移动UI框架,Dart是由Google开发的一门全新的计算机编程语言,而Flutter使用Dart语言开发。Fuchsia是谷歌开发的一款全新的操作系统,Flutter 是 Fuchsia 的开发框架。Flutter编写的代码可以同时生成IOS和Android两个平台下的应用程序,因此Flutter框架逐渐热门。 3.2.3 大前端时代下的H5应用 随着时代发展,现在的前端不再只是写web网页,而是逐渐发展为大前端,web,Android,IOS通吃,H5应用的流行就是一个例子,大家应该都发现,手机上开始出现快应用,小程序这些使用前端语言进行开发的app,这些应用使用HTML,JS和CSS进行开发,无需使用Java。相比之下,H5应用轻量级,启动快,跨平台,用户体验方面也逐渐开始接近原生应用的流畅度。因此大有流行的趋势。 3.2.4 小结 这一小节介绍了安卓开发的现状,Java作为曾经的安卓开发第一首选语言,正在面临诸如Kotlin语言,Flutter和Dart语言等新的开发语言的挑战,同时,随着安卓应用开发逐渐出现H5应用的趋势,前端语言也逐渐开始来到Java的地盘。 四、Java不擅长的领域 4.1 前后端分离和JSP的没落 JSP是一度火爆的技术,Java曾对其寄予厚望,希望通过JSP技术占领web应用程序领域。然而,随着网页开发越来越复杂,用JSP开发网页变得很麻烦,前端和后端混杂在一起,开发效率很低。因此前后端开始分离,而JSP这种运行于服务器端的网页程序也就慢慢退出了舞台。 4.2 C#和.NET抢占桌面程序地盘 Java曾经也被广泛用于开发桌面客户端,其中Swing框架就是一个有名的GUI框架。然而,曾经想要扼杀Java的微软,开发了C#语言。C#成为Java的竞争对手,C#编写运行于Windows系统的桌面应用程序上具有优势,Java写的桌面应用,虽然可以跨平台到处运行,这对于程序员当然是好事,但是对于用户来说,在Windows上运行个Java程序还得安装JRE,显得十分麻烦。而且,Java桌面程序运行起来比C#程序慢。因此,C#和.NET逐渐占领了桌面应用程序的市场。 4.3 C/C++活跃的嵌入式系统领域 Java曾经是为了嵌入式系统开发而设计的。然而,Java程序员并不能直接操作硬件,并且,Java是相对较重的语言,对内存等硬件资源不友好,执行效率也相对较低。而在嵌入式系统中,往往只有很少的内存空间,却对运行效率有很高的要求。因此,在嵌入式领域,更多的是C语言和C++甚至是汇编语言的天下。 4.4 小结 这一小节主要针对Java所不擅长的领域来讨论。可以看到,Java最为有名的特性“Write once, run anywhere”,也成了它最大的缺陷:在执行效率上做不到卓越。因此,在桌面应用程序和嵌入式系统两个领域Java不是王者。而随着时代发展,前后端分离,JSP也被时代所抛弃。 五、总结 综上所述,相信大家对于Java语言有了更全面的了解,看到了Java背后的芸芸众生,各种层出不穷的高级语言和新技术,和Java相爱相杀。Java作为现在世界上最热门的编程语言,依然在各个不同的领域具有重要的地位 ,Java的强大之处在于,它十分全能,几乎没有什么是Java不能做的,但它并不都是做得最好的,我们也可以看到许许多多的竞争者在不同方面比Java语言更加优越。 但是,我写这篇文章的目的,不在于比较各个语言的优劣,各种语言都有自己的优点和缺点,我们也不必因为某种语言更好就着急转语言。总而言之,语言只是工具,各种语言之间,语法的差别都不是特别大,背后的原理也是大同小异,往往只是多了几个新特性,而语言背后的编程思维才是最重要的。

剑曼红尘 2020-04-09 14:29:42 0 浏览量 回答数 0

回答

DK8从2019年1月开始就要收费了,怎么办呢?其实这个问题本身就是有问题的,因为收费的并不是JDK8 , 而是JDK8后续的update (更新) 。什么是update? 如果你下载过JDK, 就会看到那些8u191, 8u192这样的东西,191,192就是update 的编号。这些update中通常会包含对JDK bug的fix ,或者一些功能的改变,增强, 拿update 172为例:这个update 修改了下面两个方法的文档,让文档描述和方法的实现一致:java.awt.Toolkit.getImage(URL u)java.awt.Toolkit.createimage(URL u)增加了在Windows8 及以上版中,对Swing/AWT 文本组件自动显示触摸键盘的功能36个Bug Fix假设JDK 8u192是2018年的最后一个update , 你下载并且安装了,那可以继续免费使用下去,没有任何问题。但是从2019年1月开始,如果你还想获取JDK的update , 对不起,你需要付费订阅。这个订阅服务的价格是这样的:对于PC, 每用户每月是2.5美元,对于服务器/云部署,每个processor 每月是25美元, 当然,数量多的话可以打折。Oracle 为什么要这么干呢?我推测有两个原因, 第一个原因可以理解: Oracle JDK8 2014年3月发布, 到2019年1月正式进入“End of Public Updates”, 这个版本Oracle支持了将近5年时间,一个版本的软件不可能无限期地支持下去,那样维护成本太高。第二个原因可能是没有多少人购买它的Java SE Advanced, Java SE Advanced Desktop 或者Java SE Suite, 这三个家伙是什么东西? 我们稍后解释。你也许注意到了, 我刚才再说JDK的时候,特别加上了Oracle 这个词,这是因为Java虚拟机的规范是开放的,任何人都可以去实现。老刘在2017年编程提高群第一季中,不就和大家一起实现了一个极为简单的版本吗? 当然那不能称为JVM ,只实现了对Class文件的解析,和一个能实现顺序,分支,循环,多态的简单执行引擎。其实现在的JDK提供者非常多,不像微软的.NET,独此一家,别无分号。Open JDK这个不多说,免费的开源实现,以GPL License发布,很多Linux发行版中都会包含这个Open JDK 。参与开发的大佬们有Oracle, RedHat (已被IBM收购), Azul System, IBM , Apple , SAP。Oracle JDK就是我们常说的Java JDK , 也是最常用的一个,是Oracle公司(收购了开发Java的Sun公司)对Java SE的实现。如果更详细分的话,可以分为Oracle JDK和 Oracle JRE。比如你想玩Minecraft 这样需要Java的游戏, 那只需要从java.com下载一个JRE就够了。如果你想基于Java做开发,那就需要从Oracle Technology Network(OTN)网站上下载JDK了。其他公司提供的JDK有实力的大公司,都有可能开发自己的JDK , 比如IBM ,肯定要为自家的操作系统AIX,还有z/OS开发SDK。我在IBM工作的时候,根本就没有用过Oracle JDK,公司也不让用啊。HP,SAP也有自己的JDK , 可以为自己的硬件和软件做定制。Oracle Java SE Advanced, Java SE Advanced Desktop, Java SE Suite这名字老长了,也有点费解,简单来说,这是个收费的服务, 是Oracle 为企业级用户提供的高级工具和功能,可以监控、部署、管理企业级的Java程序,与此同时,你还可以下载那些老版本的JDK及其update。换句话说,如果你购买了这个服务,自然就不用担心什么JDK update 收费的问题。但是问题在于,到底有多少公司再使用这个服务? 如果你的公司在使用,欢迎告知。所以我猜测Oracle耍了一点小手段, 以后不要这个收费的服务了,把这些高级的功能加上JDK update 打包,统一成一个新的服务,就是之前说的订阅服务。总结一下如果你的公司已经买了这个Java SE Advanced (或者 Advanced Desktop), Java SE Suite的License, 什么都不用担心,你很安全。如果你的公司正在使用Oracle JDK 8 并且还想在2019年1月之后获得那些更新和支持,你需要购买Orace 的订阅服务。如果你的公司一直在在升级你的Oracle JDK ,比如说已经升级到JDK9了,你什么服务都不用购买, 因为那个订阅服务主要解决的是老版本的Update 的问题。或者可以选择一个没有public update的Oracle JDK , 这也很常见,很多JDK已经非常稳定了, 比如Oracle JDK 7 发布日期是2011年7月, “End of Public Updates” 是2015年4月, 我估计现在还有不少公司还在使用JDK7这个已经没有public update的版本吧!如果真的出现了巨大的安全漏洞,你又没法升级JDK ,那只好去购买订阅服务去Fix了。当然,你的公司也可以选择纯开源OpenJDK。注意,我这里说的都是公司,都是商业用途,如果只是个人学习Java的话,没什么影响!

wangccsy 2019-12-02 01:47:21 0 浏览量 回答数 0

问题

2018python技术问答集锦,希望能给喜欢python的同学一些帮助

技术小能手 2019-12-01 19:31:10 2040 浏览量 回答数 2

问题

初识Hadoop:报错

kun坤 2020-06-07 00:57:43 0 浏览量 回答数 1

回答

众所周知,Java是平台无关的语言,那么Java为什么要支持平台无关性,总结一下,有如下几点支持多变的网络环境。如今是一个互联网的时代,网络将各种各样的计算机和设备连接起来,比如网络连接了windows的PC机,UNIX工作站等等。为了保证程序能够不加任何修改运行于网络上的任何计算机,而不管计算机是什么种类,什么平台,这样就极大减轻了系统管理员的工作。尤其是程序是通过网络环境进行部署的。支持网络化嵌入式设备。目前工作场所中存在各种各样的嵌入式设备,比如打印机,扫描仪,传真机等。他们往往通过网络连接起来,甚至在家庭网络和汽车内部也存在这样那样的嵌入式设备 。Java的平台无关性可以简化这样的系统管理任务。无论是哪个网络的管理员,它只需关注程序本身即可。此外添加一台新设备,可以立即被其他设备访问到,也可以访问其他设备。这都是平台无关性带来的好处。减少开发者部署程序的成本和时间。对于开发者而言, Java平台无关的能力给予网络一个同构的运行环境,使得分布式系统可以围绕着“网络移动对象”开构建。比如对象序列化,RMI, Jini就是利用平台无关性。把面向对象编程从虚拟机带到了网络上。影响Java平台无关性的因素Java平台的部署。运行Java程序之前,必须要部署好Java平台。Java平台的版本。Sun公司提供了不同的API集合,有标准版,扩展版等等。此外API本身也面临着改动,一些API被认为是过期的,一些API甚至不向下兼容,因此我们需要选择合适的Java平台版本支持程序开发。本地方法。当编写一个平台独立的Java程序时候,最重要的原则是:不要直接或间接调用不属于Java API的本地方法。调用Java API以外的本地方法使得程序平台相关。一般而言,本地方法在三种情况适用:使用底层主机平台的特性,而Java API无法访问;为了访问老系统或者使用现有的库,但是这个系统或库不是Java编写的;为了加快程序性能,将时间敏感代码用本地方法实现。因此当必须使用本地方法,而且支持多种平台运行,必须将本地方法移植到所有需要的平台上。因此编写平台独立的Java程序做主要的目的就是完全禁止本地方法,通过Java API和主机交互。非标准运行时库。所谓平台无关性,一种解释是你调用的方法是否在任何地方都已经实现。本地方法顾名思义,就是只是在本地实现了,所以无法保证平台无关。而Java API在如windows, Solaris等操作系统上的实现上使用了本地方法访问主机,即保证了平台无关。对虚拟机的依赖。虚拟机可以由不同开发商开发,但是必须满足如下两条原则:不要依赖及时终结(finalization)保证程序的正确性,因为特定程序中对象可能在不同的时间被垃圾收集;不要依赖线程的优先级来保证程序的正确性。因为一些虚拟机可以实现优先级高线程优先运行,一些虚拟机不能保证这一点。对用户界面依赖,AWT库提供基本的用户界面,这些组件被映射成每个平台上的本地组件,而Swing库为用户提供更高级的组件,但并没有被映射为本地组件。实现平台无关的7大步骤选择程序运行的主机和设备集合(目标宿主机)在目标宿主机中选择Java平台版本。对于每个目标宿主机,选择程序将要运行的Java平台实现(目标运行时环境) 。编写程序,调用Java API标准运行库(不调用本地方法,或者专门开发商专门调用本地方法的库)编写程序,不依赖于垃圾收集器收集垃圾时间,不依赖线程的优先级努力设计用户界面,在所有的目标宿主机都能正常工作在所有目标运行时环境和所有目标宿主机进行测试 Java从四个方面支持了平台无关性最主要的是Java平台本身。Java平台扮演Java程序和所在的硬件与操作系统之间的缓冲角色。这样Java程序只需要与Java平台打交道,而不用管具体的操作系统。Java语言保证了基本数据类型的值域和行为都是由语言自己定义的。而C/C++中,基本数据类是由它的占位宽度决定的,占位宽度由所在平台决定的。不同平台编译同一个C++程序会出现不同的行为。通过保证基本数据类型在所有平台的一致性,Java语言为平台无关性提供强有力的支持。Java class文件。Java程序最终会被编译成二进制class文件。class文件可以在任何平台创建,也可以被任何平台的Java虚拟机装载运行。它的格式有着严格的定义,是平台无关的。可伸缩性。Sun通过改变API的方式得到三个基础API集合,表现为Java平台不同的伸缩性:J2EE,J2SE,J2ME。

缘灭山上 2019-12-02 01:39:36 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 阿里云双十一主会场 阿里云双十一新人会场 1024程序员加油包 阿里云双十一拼团会场 场景化解决方案 阿里云双十一直播大厅