j-link连电脑红灯,大约3s一次,哪位大神告知一下是broadlink什么意思问题?

&p&下一代编辑器的方向就是进程分离:使用 C/Cpp/Rust 开发的核心 + Electron / Qt 开发界面 &/p&&p&这就是 NeoVim 这几年走出来的路,界面这种东西更新迭代快,需要跨平台,需要好看,紧跟当下流行风格。用 Cpp 显然是一件很劳累的事情,所以 NeoVim 做的最主要的事情就是把界面给 externalize 化,C 只实现文本编辑和脚本系统这些非界面的事情,界面部分让另外一个进程来做,界面进程通过管道+msgpack 来和内核进程通信,界面进程会把用户的操作指令发送给编辑器内核进程,编辑器内核进程又会将需要显示些什么发送给外部进程,由外部进程显示出来。&/p&&p&由此,编辑器内核只关注性能和功能,而外部界面进程就着重跨平台和用户体验。&/p&&p&Atom 真的是成也 Electron ,败也 Electron。用 Electron 开发内核,开发是容易了,但是结果大家都看到了。事实证明 Electron 并不擅长做编辑器内核这种一定复杂度又要求性能的东西,即便多次的把各种东西由 electron 挪到 Cpp 中,也是徒劳的。&/p&&p&所以 NeoVim 的实践结果告诉大家,编辑器内核和界面,两种完全不同的开发模式,不能混为一谈。所以自 NeoVim 发布后,已经有 &a href=&//link.zhihu.com/?target=https%3A//github.com/neovim/neovim/wiki/Related-projects%23gui& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&22 种&/a& 运行再不同操作系统下的 GUI 前端了,我自己用的就是一款用 Electron 开发的 GUI 前端:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-605d2e71fe_b.jpg& data-size=&normal& data-rawwidth=&984& data-rawheight=&742& class=&origin_image zh-lightbox-thumb& width=&984& data-original=&https://pic3.zhimg.com/50/v2-605d2e71fe_r.jpg&&&figcaption&NeoVim(核心) + Oni(GUI 前端)&/figcaption&&/figure&&p&无独有偶,google 也开发了一个 rust 做核心,使用json进行进程间通信的编辑器:&/p&&a href=&//link.zhihu.com/?target=https%3A//github.com/google/xi-editor& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-70d441e50f122d616c91e_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&google/xi-editor&/a&&p&xi-editor 使用 python 作为脚本系统,目前已经开发近两年,完善程度比 github 的 xray 高不少,而且目前有 9种 不同的 GUI 前端,包括文本终端模式和桌面 GUI 模式。&/p&&p&Github 对文本编辑器的“不妥协”的探索精神是令人敬佩的,瞅了一眼它的开发者都是以前 Atom 的核心团队,希望他们能充分吸取 Atom 的经验给大家好好打造一款趁手的编辑器吧。&/p&
下一代编辑器的方向就是进程分离:使用 C/Cpp/Rust 开发的核心 + Electron / Qt 开发界面 这就是 NeoVim 这几年走出来的路,界面这种东西更新迭代快,需要跨平台,需要好看,紧跟当下流行风格。用 Cpp 显然是一件很劳累的事情,所以 NeoVim 做的最主要的事…
&p&程序员必备的书籍,第一本难道不是《把妹秘籍》吗&/p&&p&言归正传,编程语言专业的书籍我就不具体推荐了,详细的名单可以看我另外一个回答&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-f91f0a0d4af60db6fa65dcb92182ae1e_ipico.jpg& data-image-width=&735& data-image-height=&727& class=&internal&&计算机专业必读哪些经典书籍?&/a&&p&&br&&/p&&p&&b&程序员不仅需要提升编程能力、更需要具备足够的知识体系来规划基础、掌握技巧、精通底层、还可修炼成仙。&/b&&/p&&p&&br&&/p&&h2&&b&编程与实践&/b&&/h2&&ul&&li&&b&基础&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%2599%25BD%25E5%25B8%25BD%25E5%25AD%%25AE%25B2web%25E5%25AE%%%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&白帽子讲Web安全 &/a&
813人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25A8%258B%25E5%25BA%258F%25E5%E7%259A%%E4%25B8%259A%25E7%25B4%25A0%25E5%2585%25BB%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员的职业素养 &/a&
512人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E6%E6%258D%25B7%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25BC%%258F%2591%25EF%25BC%259A%25E5%258E%259F%25E5%E3%E5%25AE%259E%25E8%25B7%25B5%25E5%E6%25A8%25A1%25E5%25BC%258F%26cat_id%3D1001%26type%3Dsearch%26pos%3D1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&敏捷软件开发&/a&
1266人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25BC%%E5%258F%25AF%25E8%25AF%25BB%25E4%25BB%25A3%25E7%25A0%%259A%%2589%25BA%25E6%259C%25AF%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编写可读代码的艺术&/a&
741人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25BC%%258F%%25B7%25B5%25E8%25A1%258C%25E5%25BD%2595%26cat_id%3D1001%26type%3Dsearch%26pos%3D1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&软件开发践行录 &/a&
&/p&&ul&&li&&b&进阶&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%25AE%259E%25E7%258E%25B0%25E6%25A8%25A1%25E5%25BC%258F%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实现模式&/a&
231人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%25A2%%259F%259F%25E7%%25E5%25AE%259A%25E8%25AF%25AD%25E8%25A8%2580%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&领域特定语言 &/a&
72人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%E6%259E%2584%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&重构&/a&
9.0分 1985人评价&/p&&ul&&li&&b&高级&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E4%25BF%25AE%25E6%%25E4%25BB%25A3%25E7%25A0%%259A%%2589%25BA%25E6%259C%25AF%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&修改代码的艺术&/a&
8.2分 260人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E8%25AE%25A1%25E7%25AE%%259C%25BA%25E7%25A8%258B%25E5%25BA%258F%25E7%259A%%259E%%%25E4%25B8%258E%25E8%25A7%25A3%25E9%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机程序的构造和解释&/a&
1912人评价&/p&&h2&&b&流程与交付&/b&&/h2&&ul&&li&&b&基础&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%%25E6%%25E6%E4%25BA%258B%25E4%25B8%258E%25E6%E6%258D%25B7%25E6%%25E6%25B3%2595%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&用户故事与敏捷方法&/a&
8.0分 351人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25A1%259D%25E7%E4%25B8%25AD%25E7%259A%2584Scrum%25E5%CXP%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&硝烟中的Scrum和XP&/a&
8.7分 465人评价&/p&&ul&&li&&b&进阶&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3DGoogle%25E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%%25B9%258B%25E9%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Google软件测试之道&/a&
8.2分 279人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25B2%25BE%25E7%259B%258A%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25BA%25A6%25E9%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&精益软件度量&/a&
40人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E6%E6%258D%25B7%25E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%2595%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&敏捷软件测试&/a&
7.6分 53人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E6%258C%%25BB%25AD%25E4%25BA%25A4%25E4%25BB%2598%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&持续交付&/a&
8.5分 281人评价&/p&&ul&&li&&b&高级&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%259C%258B%25E6%259D%25BF%25E6%%25E6%25B3%2595%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&看板方法&/a&
7.9分 106人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%258F%%25B8%2583%25EF%25BC%E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%%25B8%258E%25E9%%25E7%25BD%25B2%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&发布!软件的设计与部署 &/a&
40人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25B2%25BE%25E7%259B%258A%25E5%E6%E6%258D%25B7%25E5%25BC%%258F%%25A4%25A7%25E5%259E%258B%25E5%25BA%%%25E6%258C%%258D%2597%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&精益和敏捷开发大型应用指南&/a&
7.9分 45人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%25AE%259E%25E4%25BE%258B%25E5%258C%%259C%%25B1%2582%25EF%25BC%259A%25E5%259B%25A2%25E9%E5%25A6%%25BD%%25BA%25A4%25E4%25BB%2598%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实例化需求 &/a&
87人评价&/p&&p&&br&&/p&&h2&提升与修炼&/h2&&ul&&li&&b&基础&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E6%259A%%%25E9%%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&暗时间 &/a& 8.4分
11825人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%E5%25AD%%25A1%%258E%259F%25E7%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&金字塔原理&/a&
8.1分 4240人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25A8%258B%25E5%25BA%258F%25E5%E6%E7%25BB%25B4%25E4%25BF%25AE%25E7%2582%25BC%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员思维修炼 &/a&
8.1分 143人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%25BB%%25AE%25A2%2B%25E8%25AE%25A1%25E7%25AE%%259C%25BA%25E9%259D%25A9%25E5%2591%25BD%25E8%258B%25B1%25E9%259B%2584%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&黑客 &/a&
839人评价&/p&&ul&&li&&b&进阶&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3Dunix%25E7%25BC%%25A8%258B%25E8%2589%25BA%25E6%259C%25AF%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UNIX编程艺术&/a&
2019人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%%25E8%25AF%25A2%25E7%259A%%25A5%25A5%25E7%25A7%2598%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&咨询的奥秘&/a&
465人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25B3%25BB%25E7%25BB%259F%25E6%E8%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&系统思考&/a&
438人评价&/p&&ul&&li&&b&高级&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%E6%259E%%25A8%25A1%25E5%25BC%258F%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分析模式&/a&
54人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%25AE%259E%25E7%258E%25B0%25E9%25A2%%259F%259F%25E9%25A9%25B1%25E5%258A%25A8%25E8%25AE%25BE%25E8%25AE%25A1%25E2%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&实现领域驱动设计 &/a&
132人评价&/p&&p&&br&&/p&&h2&思想与领导力&/h2&&ul&&li&&b&基础&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%%25E8%2590%25BD%25E7%259A%%258A%259B%25E9%cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&部落的力量 &/a&
86人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E9%%25E5%E7%259A%%25A7%%25AF%2586%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&门后的秘密 &/a&
8.3分 288人评价&/p&&ul&&li&&b&进阶&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E5%25BD%25B1%25E5%E5%258A%259B%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&影响力&/a&
8.6分 25861人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25AC%25AC%25E4%25BA%%25A1%25B9%25E4%25BF%25AE%25E7%2582%25BC%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&第五项修炼 &/a&
2973人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25B2%25BE%25E7%259B%258A%25E6%E6%%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&精益思想&/a&
8.2分 112人评价&/p&&ul&&li&&b&高级&/b&&/li&&/ul&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25B2%25BE%25E7%259B%258A%25E4%25BC%%25B8%259A%25EF%25BC%259A%25E9%25AB%%E8%2583%25BD%25E5%E5%E6%%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&精益企业 &/a&
8.4分 80人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3D%25E7%25AE%25A1%25E7%.0%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&管理3.0&/a&
40人评价&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.douban.com/link2/%3Furl%3Dhttps%253A%252F%252Fbook.douban.com%252Fsubject%252FF%26query%3DAgile%2BIT%26cat_id%3D1001%26type%3Dsearch%26pos%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Agile IT Organization Design&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-14d28f1485aca22d24175bacccb04ba9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&720& data-rawheight=&712& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic1.zhimg.com/50/v2-14d28f1485aca22d24175bacccb04ba9_r.jpg&&&/figure&&p&&b&小福利:想要获取此图片高清版可以去听这位老师的课程哦——&a href=&//link.zhihu.com/?target=https%3A//ke.qq.com/course/291097& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&程序员之路&/a&&/b&&/p&&p&&b&编程学习并非一日之寒,除却学习的资料之外,也要掌握合适的学习方法,选择感兴趣的编程语言&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-b83e973a6556bf2deb9bb76d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1125& data-rawheight=&632& class=&origin_image zh-lightbox-thumb& width=&1125& data-original=&https://pic1.zhimg.com/50/v2-b83e973a6556bf2deb9bb76d_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/50/v2-a18d741b8bb14bb572bcad92_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1124& data-rawheight=&637& class=&origin_image zh-lightbox-thumb& width=&1124& data-original=&https://pic4.zhimg.com/50/v2-a18d741b8bb14bb572bcad92_r.jpg&&&/figure&&p&在学习过程中,欢迎大家有问题随时跟我沟通哦,期待为你解决。&/p&&p&vNext零基础入门到全栈工程师免费提供哦,感兴趣可以来戳&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//ke.qq.com/course/FflowToken%3D1002908& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java零基础入门到全栈工程师【vNext学院】_腾讯课堂&/a&&/p&&hr&&p&&b&我是小v&/b&&/p&&p&&b&vNext学院最爱写文章的大妹子&/b&&/p&&p&&b&微公号:vNext编程 有很多针对于Java系统学习的福利资料,有需要的关注哦&/b&&/p&
程序员必备的书籍,第一本难道不是《把妹秘籍》吗言归正传,编程语言专业的书籍我就不具体推荐了,详细的名单可以看我另外一个回答 程序员不仅需要提升编程能力、更需要具备足够的知识体系来规划基础、掌握技巧、精通底层、还…
&figure&&img src=&https://pic4.zhimg.com/v2-396fdcc7bf63f26f39b66d6f_b.jpg& data-rawwidth=&1600& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1600& data-original=&https://pic4.zhimg.com/v2-396fdcc7bf63f26f39b66d6f_r.jpg&&&/figure&&h2&前言&/h2&&p&最近在我的 timline 上面出现了很多类似《前端为什么要学编译原理》这类文章以及《前端怎么学AST》这类的问题,但是却发现并没有人给大家介绍前端要如何以系统并且正确地学习编译原理,所以我就结合自己的经验以及走过的弯路来给大家分享点心得和经验,希望能让大家少走点弯路。&/p&&p&最后我并不是前端,只是恰好会写点 JavaScript 而已。&/p&&p&&br&&/p&&hr&&p&&br&&/p&&h2&目录&/h2&&p&上篇:&/p&&ul&&li&编译原理为什么难&/li&&li&怎么学好编程语言&/li&&li&代码到底是什么&/li&&li&正则与上下文无关文法&/li&&li&编程语言从 AST 才正式开始&/li&&/ul&&p&下篇:&/p&&ul&&li&静态分析&/li&&li&类型推导&/li&&li&AST 的转换&/li&&li&Conitnuation&/li&&li&字节码虚拟机&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&编译原理为什么难&/h2&&p&大家提起编译原理第一反应都是很难,难到无从下手,但是为什么难呢?说白了,编译原理不就是研究把一门语言解析并且转换成另一门语言的技术吗?这项技术到底有哪些地方成为了阻碍呢?我认为这个最大的阻碍其实就是“编程语言”本身。&/p&&p&我相信在看这篇文章的朋友至少已经学会了 JavaScript 了吧,但是我想多嘴问一句,大家真的懂 JavaScript 吗?能描述出 JavaScript 的语法规则吗?能理解语法所代指的逻辑结构吗?知道 JavaScript 是如何在被解释和执行的吗?所以,大家真的懂 JavaScript 吗?反正我是至今没有底气说自己”精通“ JavaScript ,原因是我还不懂如何实现一个 JIT。&/p&&p&我们多数时候称自己“精通”某编程语言的时候,仅仅指会熟练使用某编程语言,但是编译原理这门学科折腾的核心恰恰是编程语言,它要求我们对编程语言有深入的了解,了解它是如何构造和解释的。我们如果没有这项基础其实是很难学好这门学科的。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&《七周七语言》——看看不同的编程语言都长什么样子&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E7%25BC%%25A8%258B%25E8%25AF%25AD%25E8%25A8%2580& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程语言 —— 维基百科&/a& &/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E7%25BC%%25A8%258B%25E8%258C%%259E%258B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编程范式 —— 维基百科&/a& &/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&怎么学好编程语言&/h2&&p&部分国外高校的计算机专业喜欢用 Lisp 系的 Scheme 入门,一开始我并不明白其中缘由,直到我发现他们的课程作业中最后总会要求实现一个简易的 Lisp 解释器时我才恍然大悟。外国学校安排课程的水平真是高明,学校教 Scheme 可不是为了让学生拿来写工程代码,而是让学生学习编程以及编程语言本身到底是一个什么东西。&/p&&p&Lisp 是一门具备现代编程语言特性的几乎最简的实现,所有编程语言都是 Lisp 方言真的不仅仅是一句玩笑话。简易的 Lisp 的解释难度很低,Lisp 语法的解析只有解析 JSON 同等的难度,我们会经常看到很多新手用百来行代码就能实现一个 Lisp 解释器。虽然实现一个 Lisp 解释器不难,但是他对学生来说的意义非常重大,它能让学生们对编程语言和程序的构造和执行有一个非常非常基础但又非常全面的认识。而这种对编程语言全面的认识,也正是我们这些拿着 C/C艹 亦或者 JavaScript 入门的大家所缺失的。&/p&&p&所以如何学好编程语言?正途当然是啃我们的经典神书 《SICP》了,不过考虑到 《SICP》严重的教科书属性,讲地并不生动有趣,所以还是给大家推荐一个科普性质更强的书,叫做《计算的本质》大家可以用这本书先入门,如果学有余力或者非常有兴趣再去啃《SICP》。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&《计算的本质:深入剖析程序和计算机》—— 科普版 SICP&/li&&li&《计算机程序的构造和解释》—— 经典神书,学有余力或者感兴趣再啃&/li&&li&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《微信小程序也要强行热更代码,鹅厂不服你来肛我呀》&/a& —— 我自己写的文章,用 JavaScript 实现一个 JavaScript 解释器&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&代码到底是什么&/h2&&p&上一节我们提过,Lisp 的解析难度和 JSON 是一样的,那我们能不能干脆用 JSON 代替代码呢?当然可以,JavaScript 的解析后的语法树就是用 JSON 表示的。所以就表达能力来说,JavaScript 的代码和 JSON 是没有差别的。那么问题来了,代码到底是什么?&/p&&p&其实代码跟 JSON 一样,是一种结构化的文本数据格式。在这里我们要仅仅抓着两个特点——“文本”和“结构化”。&/p&&p&代码的第一个特点是文本,那意味着我们所有对字符串的拼接、截取或者替换等所有操作,都可以应用在代码上面。很多程序员虽然都能对各类文本的读写了如指掌,但大家好像都没有意识到代码文件,也可以是那个可以读写、修改的文件之一。&/p&&p&对代码文件的读写和操作是进入编译世界的第一个重要门槛,有的时候并不需要太复杂的算法就能够对代码做一些有意义的转换,比如我们可以直接通过正则分析 import / export / require 来实现一个简易的 webpack,比如在我之前一篇文章也是通过简单的正则优化尾递归代码。真正有意识地把代码文件当成文本文件以后,我们就能把代码从此拉下“神坛”,可以让大家能够像思考文本一样思考代码。&/p&&p&代码的第二个特点则是结构化。不知道大家能不能理解,代码里面除了字面量意外,其他部分都只是标识结构而并不具有实际意义,赋予这些结构意义是解释器如何和执行这段代码。这个特点就是要求我们在看待代码的时候,要在脑中形成一种结构,而不再是一行一行的字符串。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&var a = 123 // 除了字面量 123 外其他所有字符都是标识结构
&/code&&/pre&&/div&&p&比如上面这串简单的 JavaScript 代码,var 这是一个抽象符号,他是 var 也好是 val 也好,就算是 #%$ 都没有任何问题,唯一的目的就是标识了这个结构(语句)是一个声明赋值。变量名 a 标识的是一种联系,这个 a 具体是什么也是无关紧要的,只要它所标识的联系不变,a 也是可以替换成任何字符。这里面唯一有实际意义的就是那个 123,我不能把它换成 456。&/p&&p&知乎之前有一个问题问为什么一些大佬能够在两个星期内学会一门编程语言,我的回答是两个星期都够我们造一门编程语言了,就像 JavaScript 也就是 &a href=&https://link.zhihu.com/?target=https%3A//zh.wikipedia.org/wiki/%25E5%25B8%%2598%25AD%25E7%2599%25BB%25C2%25B7%25E8%2589%25BE%25E5%B& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&布兰登·艾克&/a& 大佬花了一个星期设计的。我虽然肯定不及这些大佬们,但是让我两个星期内拿 C艹 造一个 JavaScript 1.0 还是没什么太大问题的。所以只要把文章到这里之前推荐的书好好看了,基础补上了,那么其实大家每个人都能轻松在两个星期内学好一门编程语言。&/p&&p&最后还是要提一下,能够用两个星期学好一门编程语言并不代表能用两个星期学好一个领域。就像你不能说你学会了 JavaScript 就等于学会了前端,也不能说学会了 Python 就等于学会了人工智能(虽然现在很多坑爹培训班打着人工智能旗号教 Python 基础),编程语言仅仅是编程语言,仅仅是一个工具。&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&《尾递归为啥能优化?》&/a& —— 我写的文章,使用简单的字符处理来优化尾递归函数成循环&/li&&/ul&&p&推荐工具:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//astexplorer.net/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AST Explorer&/a& —— 看看自己常写的 JavaScript 长什么样子&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&正则与上下文无关文法&/h2&&p& 这篇文章到这里已经是第四个小节了,但直到这里才算能够正式抱起我们的经典教材——龙书、虎书或者鲸鱼书进行学习了。这一节简单介绍一下编译器前端技术 —— Parser。&/p&&p&编译器前段就在干一件事,把代码这个结构化的文本文件解析成我们计算机可以理解的数据结构 —— 抽象语法树(AST)。解析代码是一个比较无聊、复杂而又繁琐的过程。这种复杂和繁琐是来由于编程语言本身语法设计的繁琐和复杂导致的。比如我们前文讨论过的 Lisp 由于语法设计的非常简单、一致而又无歧义,所以解析起来非常轻松,但是作为代价的就是 Lisp 那个被吐槽很多的括号括号括号。&/p&&p&解析代码一般分成两个步骤,第一个步骤是词法分析,将文本的代码转化成一个个 Token。看到这里的大家应该都有一些正则表达式的基础吧,在解析代码的过程中,我们需要用正则来分词做词法分析。在编译原理面我们学习正则的时候就不仅仅是学习正则表达式了,也会学习正则的内核 DFA,不过这部分难度不大就是了。&/p&&p&解析代码的第二个步骤是语法分析,语法分析是将我们上面词法分析出的 Token 转化成 AST。语法分析我们要学习上下文无关文法(CFG),并且可以用 BNF 这个表示。CFG 比正则表达能力更强,强在 CFG 能表达递归结构,常见的递归结构有表达式和代码块。在语法分析这个部分,会基本的 LL(1) 算法,能够对自顶向下的分析有足够的了解,就已经足够了。&/p&&p&无论是正则还是 CFG,他们都是在用一种形式语言(我们的编程语言也是一种形式语言),来描述一种抽象结构,所以在学习的过程中,脑子里面一定要这种从抽象结构的概念,能够事半功倍。&/p&&p&Parser 在编译原理里面是难点但却不是重点,所以在这一部分大家觉得复杂的算法完全可以跳过,不建议浪费太多时间。Parser 都是可以根据正则和 CFG 自动生成的,并不需要自己手写。所以这部分主要目的是学好的是正则和 CFG,那些复杂的算法学起来意义很小。&/p&&p&最后还有一个非常有趣的现象,正则表达式是上下文无关文法,而 BNF 却又是正则文法,大家可以想想为什么?&/p&&p&&br&&/p&&p&推荐阅读:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.yinwang.org/blog-cn//parser& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&对 Parser 的误解&/a& —— 我自己的真正入门的文章&/li&&li&龙书、虎书或者鲸鱼书任选 —— 经典编译原理经典教材&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.yinwang.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&当然我在扯淡&/a& —— 垠神的博客,看的时候请自动屏蔽垠神的主观自嗨&/li&&/ul&&p&推荐工具:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/acornjs/acorn& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Acorn&/a& —— JavaScript Parser&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//regexper.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&REGEXPER&/a& —— 将正则表达式以图形的形式展示&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//ohmlang.github.io/editor/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Ohm&/a& —— 可以可视化的 BNF 编辑器&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/zaach/jison& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jison&/a& —— 用正则和 BNF 构建通用的 Parser&/li&&/ul&&p&&br&&/p&&hr&&p&&br&&/p&&h2&编程语言从 AST 才正式开始&/h2&&p&其实在大多数眼里的编译原理,都停留在 Parser 这个阶段,因为大部分人都在学习的时候卡在了个这个阶段。但是事实上 Parser 不过是这个领域最表面的一层技术而已。编程语言从 AST 才算正是开始,只有到了 AST 的阶段,我们的计算机才可以对我们的编程语言进行包括分析、解释或者翻译,而我们前面我们所辛辛苦苦写的代码只不过是给我们这些愚蠢的人类看的罢了。&/p&&p&对编程语言 AST 的分析、转换、解释以及翻译理应是编译原理中最重要的一个部分,但由于我们经典编译原理书出版时间都比较早(1985年),并且也只着眼于当时流行的以 C 为主的编译型语言,所以它的重点都放在了解析代码和生成汇编两个部分。但是以现在的编程语言角度来看的话,前端有 Parser Generator,后端有 LLVM 那么我们更多的重点其实应该跟多地放在中端上来。&/p&&p&不过到这里为止,我们介绍的内容其实已经足够大部分小伙伴给自己写个 DSL,给自己写一个编译到 JavaScript 的小语言玩了。 但是这足够了吗?我们到底可以对 AST 做些什么呢?让我们下篇再见吧。&/p&&p&&br&&/p&&p&参考项目:&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/bramblex/blx-fsm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&bramblex/blx-fsm&/a& —— 自己造的用于描述 FSM 的玩具 DSL&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/bramblex/Smooth& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&bramblex/Smooth&/a& —— 自己造的玩具小语言&/li&&/ul&&h2&Hello World!&/h2&
前言最近在我的 timline 上面出现了很多类似《前端为什么要学编译原理》这类文章以及《前端怎么学AST》这类的问题,但是却发现并没有人给大家介绍前端要如何以系统并且正确地学习编译原理,所以我就结合自己的经验以及走过的弯路来给大家分享点心得和经验,…
&p&但是确实是使用angular的架构更合理啊。&/p&&p&&br&&/p&&p&我要选框架,必然选一个架构合理的,降低对工程师的架构要求,提升代码质量,而不是选一个好上手的。&/p&&p&&br&&/p&&p&angular的层次清楚结构合理,本身就是一个好的设计教程。&/p&&p&&br&&/p&&p&&br&&/p&&p&实在没兴趣用vue或者react。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&vue和react等同于php,angular等同于JAVA。&/p&&p&&br&&/p&&p&架构的合理性和扩展性一定是编程的趋势,你要问为什么大多数公司不用angular,大多数就是很简单的水准问题。&/p&&p&&br&&/p&&p&会angular,去做点vue不成问题。&/p&&p&会vue,能不能理解angular还是个未知数。&/p&&p&&br&&/p&&p&&br&&/p&&p&并不是所有的前端都能理解分层,抽象,扩展性。&/p&&p&&br&&/p&&p&&br&&/p&&p&很多人还停留在我做出来了,开心的状态,哪种设计更合理?抱歉,没想过。&/p&&p&&br&&/p&&p&&br&&/p&&p&再反过来说, react和vue,都是很多光环加成,光环加成本身就容易给人错觉。&/p&&p&&br&&/p&&p&angular背景很强,更重要的是他是完全的一种编程理念都颠覆,前端代码可不可以用结构更清楚的工程化思想来写?&/p&&p&&br&&/p&&p&答案是可以的,很多人都说1和2差别很大,可是在我看来这些差别根本不重要。&/p&&p&&br&&/p&&p&1是创造性的改变,是小试牛刀,但取得了划时代的进步,验证了前端的代码可以更规范,结构合理,职责更明确。&/p&&p&&br&&/p&&p&2是更彻底的改造,在1的基础上,干脆抛开jquery年代的束缚,重新打造新的纪元。&/p&&p&换API了,换语法了 ,学语言了,这都不是事儿,还做不到3天上手一个新框架或者新语言么,唯一不爽的就是遗留系统太尴尬了。&/p&&p&&br&&/p&&p&angular代表的更是一种编程思想,spring之所以一统江湖,根本不在于他的内部实现,而是他代表的设计理念。&/p&&p&&br&&/p&&p&&br&&/p&&p&JAVA花了十年时间才算是确定了什么是正确的结构,之前还是有一堆又一堆的人说不需要接口,不需要依赖注入,sql语句可以直接写代码里。&/p&&p&&br&&/p&&p&你说底层实现,性能快一些,是不是优势?坦白说多大多数系统而言都不是事儿,还没到拼几个字节或几ms的时候。&/p&&p&&br&&/p&&p&更何况spa本来就是特别适合后端管理系统。&/p&&p&&br&&/p&&p&该有的性能提升,肯定会有。&/p&&p&但编程思想的改变,可真不见得就会懂。&/p&&p&&br&&/p&&p&写PHP的人很多,真正有能力到架构师层面的人多吗?太难产生架构师了。&/p&&p&&br&&/p&&p&很多人说架构和语言无关,那是指你先成为了架构师,再和语言无关。&/p&&p&&br&&/p&&p&像c这种原古语言,出了几个架构师,都没有足够多的场景演化,更没有足够多的人群孵化。&/p&&p&&br&&/p&&p&你用vb训练出来1万个架构师看看?&/p&&p&&br&&/p&&p&vue和react整体上还是延续jquery的插件思想,并不像angular当成一个系统去设计。&/p&&p&&br&&/p&&p&可以看成是jquery的spa版,就是太随意,jquery就是把ajax请求,view,model全混在一起,从来没有单独的controller的概念。&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&怎么样都喜欢不起来。&/p&
但是确实是使用angular的架构更合理啊。 我要选框架,必然选一个架构合理的,降低对工程师的架构要求,提升代码质量,而不是选一个好上手的。 angular的层次清楚结构合理,本身就是一个好的设计教程。 实在没兴趣用vue或者react。 vue和react等同于php,ang…
我又要来吹了...... &br&&br&当然是2018 acm world final中吉如一老师的live
coding啦!力挽狂澜rank1最后夺金什么的帅爆了好吗……&br&&br&不过吉老师应该不能算是 程序员 了吧(?????????)&br&&br&&figure&&img data-rawheight=&306& src=&https://pic4.zhimg.com/50/v2-c0ddbb0d2b348f786cfb_b.jpg& data-rawwidth=&596& class=&origin_image zh-lightbox-thumb& width=&596& data-original=&https://pic4.zhimg.com/50/v2-c0ddbb0d2b348f786cfb_r.jpg&&&/figure&&br&&br&&br&&br&我这一张图都回答两次了哈哈不过还是真的觉得帅啊……百看不厌
我又要来吹了...... 当然是2018 acm world final中吉如一老师的live coding啦!力挽狂澜rank1最后夺金什么的帅爆了好吗…… 不过吉老师应该不能算是 程序员 了吧(?????????) 我这一张图都回答两次了哈哈不过还是真的觉得帅啊……
&figure&&img src=&https://pic4.zhimg.com/v2-b21dbb76a27cfe2ae39c652bb1a10143_b.jpg& data-rawwidth=&1078& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&1078& data-original=&https://pic4.zhimg.com/v2-b21dbb76a27cfe2ae39c652bb1a10143_r.jpg&&&/figure&&p&&/p&&p&
软件工程对于20世纪科技的进步起到巨大的推动作用,相信Al和数据科学也将成为20世纪科技的发展的重要助力。本文收集和整理Facebook、Google、Microsoft、Apple、Amazon等七家世界著名互联网公司AI相关的面试题,分享给有需要的朋友(英文版)。(内容整理自网络,&b&文末附所有面试题汇总下载地址&/b&)&/p&&p&&b&Facebook&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ead48b9bafbca44375ab0f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&277& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic3.zhimg.com/v2-ead48b9bafbca44375ab0f_r.jpg&&&/figure&&p&
Facebook成立于2004年,至2013年近十年的时间内,积累了海量的数据,之后,Facebook的工程师们开始尝试CNNs。就在那之后,Facebook逐步认识到人工智能和深度学习的重要性,并聘请了工程师了Marc’ Aurelio Ranzato 和CNNs的发明者Yann LeCun。&/p&&p&&br&&/p&&p&&b&Uber&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-b7411db10fbfedbd19cc37_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&406& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-b7411db10fbfedbd19cc37_r.jpg&&&/figure&&p&
人工智能的目标是从不同的角度了解人工智能。Uber是这样一家公司:依靠人工智能开发技术,并依靠人工智能作为技术驱动的主流,帮助理解人工智能技术机及其本质;帮助技术和非技术爱好者了解人工智能,并帮助他们进入AI研究的主流。&/p&&p&&br&&/p&&p&&b&Apple&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-a129bc74af6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&279& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic1.zhimg.com/v2-a129bc74af6_r.jpg&&&/figure&&p&
苹果雇佣了谷歌搜索和人工智能主管约翰·吉安南德雷( John Giannandrea ),这是苹果在人工智能技术领域,追赶竞争对手的一次重大政变。&/p&&p&&br&&/p&&p&&b&SaleForce&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-84ddb2cb1d225e989a832_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&276& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-84ddb2cb1d225e989a832_r.jpg&&&/figure&&p&
Salesforce Einstein—Salesforce的人工智能平台每天提供超过10亿次人工智能预测。Salestforce将公司的 AI平台定义为从开始到最后,提供人工智能、Lightning、物联网、Heroku、分析和AppExchange的一系列全套服务。这是一套适用于包括人工智能在内的,整个企业级全套产品。为了改善data cow和增长,Salesforce以近21倍的价值收购了Mulesoft。&/p&&p&&br&&/p&&p&&b&Microsoft&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-fc4bfcea9e6cc53e6083f0d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&300& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-fc4bfcea9e6cc53e6083f0d_r.jpg&&&/figure&&p&
微软试图将其人工智能和核心Windows操作系统组件整合到一个team中。微软在企业中的主导地位是众所周知的。微软已经渡过了云计算浪潮。在bscal brst的季度中,其Azure服务和Ojce 365在线生产力业务的收入分别飙升了90 %和42 %。&/p&&p&&b&Amazon&/b&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4e724dcc67dbd0c420616_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic4.zhimg.com/v2-4e724dcc67dbd0c420616_r.jpg&&&/figure&&p&
亚马逊已经从“地球上最大的书店”变成“地球上最以客户为中心的公司”。CEO Jei Bezos在他的股东信中一再提到公司的发展道路。Amazon使用Alexa部署深度语言学习功能(Deep language learning capabilities),并通过AWS为人工智能提供云基础架构,还在亚马逊网站上大规模构建和部署了世界级的推荐系统。亚马逊还为研究提供云信用(cloud credits)。&/p&&p&&br&&/p&&p&&b&Google&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-60abbe56a7b559e9fc734ef1f777f889_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1080& data-rawheight=&363& class=&origin_image zh-lightbox-thumb& width=&1080& data-original=&https://pic2.zhimg.com/v2-60abbe56a7b559e9fc734ef1f777f889_r.jpg&&&/figure&&p&
谷歌拥有世界上最有才华的人工智能科学家、数据工程师和数据科学家。谷歌首席执行官 Sundar Pichai 一直致力于将谷歌打造成一家AI - brst 的公司。谷歌已经将人工智能技术融入到其所有或大部分产品中,从Gmail到拥有大量数据的自主驾驶。&/p&&p&面试题汇总下载地址&/p&&p&
&a href=&https://link.zhihu.com/?target=https%3A//pan.baidu.com/s/1sazrdsdfq139ZlNewRoSbw& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&pan.baidu.com/s/1sazrds&/span&&span class=&invisible&&dfq139ZlNewRoSbw&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&
公众号回复“it2018”&/p&&p&&/p&&p&&/p&
软件工程对于20世纪科技的进步起到巨大的推动作用,相信Al和数据科学也将成为20世纪科技的发展的重要助力。本文收集和整理Facebook、Google、Microsoft、Apple、Amazon等七家世界著名互联网公司AI相关的面试题,分享给有需要的朋友(英文版)。(内容整理自…
&blockquote&&b&龙芯,在中国人心中是一个巨大的IP。&/b& &b&我们这一代人对于龙芯的期待,不亚于我们的父辈期待第一颗原子弹的爆炸。作为国产芯片的“代言人”,龙芯身上承担了太多的期待。只不过国产芯片的路,显然比想象中更为艰险和漫长。&/b&&/blockquote&&p&&br&&/p&&p&&b&之前写的一篇旧文,详细介绍了龙芯及发展,应该可以解答你对龙芯所提出的问题。&/b&&/p&&p&&br&&/p&&p&&b&&i&本文作者史中,希望用简单的语言解释科技的一切。&/i&&/b&&/p&&p&2017年4月,龙芯带来了一个好消息:推出新一代代表着国产最高水平的芯片。&/p&&p&其中,最为亮眼的莫过于龙芯 3A3000 和 3B3000。从实测数据来看,这款芯片的综合性能已经超越了 Intel Atom 系列和 ARM 系列 CPU。这个性能,用中国工程院院士倪光南的话来说,已经达到了可用的水平。日常的使用、办公、出差都没有任何问题。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-cbcb8d2f9fc824cded0f4c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&443& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic1.zhimg.com/50/v2-cbcb8d2f9fc824cded0f4c_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【史上最强的龙芯 3A3000 处理器】&/b&&/p&&p&很多童鞋都好奇,龙芯的芯片究竟有多大能力呢?龙芯总设计师胡伟武对这些芯片做了详细的介绍。&/p&&h2&&b&龙芯在做哪些芯片&/b&&/h2&&h2&&a href=&https://www.zhihu.com/people/546e66ccb35b7de900a58b& class=&internal&&@史中&/a& 告诉你,识别龙芯的芯片,有一个窍门:&/h2&&ul&&li&&b&“1”开头的芯片,是“小 CPU”。是根据需求定制的专用或嵌入式芯片。&/b&&/li&&li&&b&“2”开头的芯片,是“中 CPU”。对标的是 Intel 的 Atom(阿童木)系列。适合平板电脑、办公电脑等低功耗的通用便携计算。&/b&&/li&&li&&b&“3”开头的芯片,是“大 CPU”。对标的是 Intel 的酷睿/至强系列。用途是桌面计算机或高性能计算。&/b&&/li&&/ul&&p&&br&&/p&&p&可以看出,龙芯的目标只有一个,那就是全球第一的芯片帝国 Intel。那么,龙芯的芯片水平离 Intel 还有多远呢?别急,先来看看龙芯追赶 Intel 的计划。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-a9e09092adcfebd539c51b1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic4.zhimg.com/50/v2-a9e09092adcfebd539c51b1_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【“龙芯之父” 龙芯中科总裁 胡伟武】&/b&&/p&&p&“龙芯之父”胡伟武说,龙芯目前的芯片计划分为三代:&/p&&h2&&b&第一代:“地板上”的 CPU&/b&&/h2&&p&实现时间:&/p&&p&介绍:简单来说,这一阶段就是努力鼓捣出一款 CPU。不过,对于龙芯团队来说,这并不是从零开始。之前计算所有一些很厉害的研究成果,可以制造出满足特定需求的 CPU。但是通用处理能力低。这些芯片大多是满足国家特定需求,市场并不是很认可。&/p&&p&这个阶段已经完成。&/p&&p&代表的芯片是:3A0、2F、2H。&/p&&h2&&b&第二代:“空中”的 CPU&/b&&/h2&&p&实现时间:&/p&&p&介绍:这个阶段,主要任务是“认真”做一款能卖出去的 CPU。其实对一个 CPU 的最高认可就是有人买单。这批龙芯 CPU (单核)性能上是第一代产品的3-5倍,超过凌动(Atom)、VIA和 ARM。这些芯片的性能算不上顶尖,但是可以在很广泛的领域使用。客观上来说,一个桌面芯片达到了 ARM 和凌动的水平,是可以卖得很好的。&/p&&p&这个阶段在今天也已经实现。&/p&&p&代表芯片:3A0、2K1000、7A&/p&&h2&&b&第三代:“天花板上”的 CPU&/b&&/h2&&p&实现时间:年&/p&&p&介绍:这一阶段的 CPU 要追上 AMD 全系列的水平。如果能实现,距离英特尔顶尖的至强(Xeon)芯片差距就不是很大了。这个时候,单核芯片的性能就会遇到物理天花板,就像现在的 Intel 一样。这时,需要用增加核心数量来提高整体的计算性能。(Intel 在年就已经触及了天花板)&/p&&p&到这个时候,龙芯就可以在市场上试着和 Intel 和 AMD 比划一下了。&/p&&p&代表芯片:3A、3C0、7B&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-4db4eb73246c0acaaa41a3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic2.zhimg.com/50/v2-4db4eb73246c0acaaa41a3_r.jpg&&&/figure&&p&&br&&/p&&p&从过去的发展路径来看,虽然磕磕绊绊,但胡伟武吹出去的牛总算都实现了。未来龙芯要做的,就是把“天花板上”的 CPU 造出来。&/p&&p&仰望星空之前,先来脚踏实地,看看这最新出世的龙芯 3A3000 究竟怎么样。&/p&&h2&&b&龙芯芯片究竟怎么样&/b&&/h2&&h2&&b&顶级芯片:3A3000&/b&&/h2&&p&3A3000,就是胡伟武口中的“在半空中的 CPU”。说他在半空中,主要是指技术水平——没有达到顶尖,却已经很强。&/p&&p&对于这款芯片,我认为有几个关键词:&/p&&h2&&b&1、目前国产最强&/b&&/h2&&p&由于目前 CPU 都是多核心的结构。所以比较芯片的绝对性能,有一个简单粗略的办法,那就是单独核心拉出来“单挑”。胡伟武介绍,3A3000 这款芯片,在国产所有芯片里面单核性能最高。&/p&&h2&&b&2、超过 Atom 和 ARM&/b&&/h2&&p&具体性能方面,3A3000 是龙芯上一代芯片性能的 3-5 倍。从下图来看,与 VIA 和 AMD 的主流中端芯片比较,数据几乎相当,有些指标优势很大,有些指标不相上下。&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-942ac614e62_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic2.zhimg.com/50/v2-942ac614e62_r.jpg&&&/figure&&p&&br&&/p&&p&普通人也许不太理解这样专业的指标,你只要知道,这个性能超于 Intel Atom 或者顶级手机当中的 ARM 处理器,相当于 Intel 和 AMD 高端处理器的性能。&/p&&h2&&b&3、距离 Intel 最强技术仍有 30% 的差距&/b&&/h2&&p&虽然性能相当于 Intel 的高端处理器,但未到这些处理器大厂的顶尖水准。实际上作为一个成立不到十年的企业,从一穷二白的出发点,难以追平国际顶尖企业也情有可原。目测这款 CPU 和顶尖的 CPU 还有30%左右的性能差距,这个大概是一代技术的差距。要追赶上这一代的差距,目测还需要3年左右的时间。&/p&&h2&&b&4、纯自主研发&/b&&/h2&&p&倪光南院士曾经说:核心技术不可能买来,买来的一定不是核心技术。自主研发一直是龙芯的标签。胡伟武介绍,龙芯3A3000 除了厂家提供的基本单元外,其中包括 CPU 和内存控制器在内的所有的模块都是自主设计的,没有引入第三方IP。&/p&&p&这种自主研发的好处,简单来说就是:一旦发生中美严重对抗,美国很容易攻击 Intel inside 的设备,却很难攻击“龙芯 inside”的设备和系统。&/p&&h2&&b&大众芯片:2K1000&/b&&/h2&&p&除了最强的“3”系列,龙芯在“2”和“1”系列也推出了新品。&/p&&p&“2”系列本来是对标 Atom 系列的芯片,从2017年的 2K1000 来看,性能比上一代 2H 提高了3-5倍,但距离2014年的 Atom J1900 芯片处理能力还有20% 左右的差距。&/p&&p&不过,这样的处理器性能已经可以使用在终端机和工控机之上。实际上,这款芯片虽然不是龙芯最强的芯片,确是最能让客户买单的一款通用 CPU。&/p&&h2&&b&特种芯片:1H&/b&&/h2&&p&“1”系列不拼运算能力,拼的是极端条件下的稳定工作能力。例如“1”系列的前辈“1E”和“1F”现在就转载在北斗卫星之上。“龙芯在北斗卫星上稳定运行了两年,没有一次反转锁定的错误。”胡伟武骄傲地说。&/p&&p&至于“1H”,则是一款神器。它将会用在地下数千米的石油钻探探头上,工作温度在200度左右。对于这种超高温条件下的稳定工作,一直是芯片界的核心技术。中国一直想掌握高温芯片技术,但是美国对我们实行了严格的技术封锁。&/p&&p&胡伟武还记得,在搭载这款芯片的钻头下井试验的时候,一个石油行业的老专家倒满一杯酒,对他说:&/p&&p&我十几年没喝酒了,今天我要敬你一杯。这么多年没有人能做出这种芯片,你是我们石油行业的功臣!&/p&&p&国产芯片从一无所有,到如今可以上天入地,中国科学家所付出的艰巨努力让人动容。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-3f7ad3c593fe1899932bcae8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/50/v2-3f7ad3c593fe1899932bcae8_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【搭载龙芯 1H 的石油钻头】&/b&&/p&&p&&br&&/p&&h2&&b&比起性能,龙芯更要在生态上追赶 Intel&/b&&/h2&&p&但是技术上追上 Intel,和让每个人都用上龙芯,是两个完全不同的事情。&/p&&blockquote&在技术和市场之间,认为技术更难的往往活不久,认为市场更难的才能活得很好。&/blockquote&&p&胡伟武异常清醒。&/p&&p&在我们的认识中,国产科技经常“有意”忽略市场,偏安“党政军”一隅。龙芯在开始阶段,也同样紧抱“党政军”大腿。不过,发展到今天,龙芯已经意识到“党政军”的市场过小,要想成为对标 Intel 的伟大企业,必须进攻企业终端市场,进而开发个人市场。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-e8e367ef998ea0ed8efb1b7b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic1.zhimg.com/50/v2-e8e367ef998ea0ed8efb1b7b_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【龙芯一体机和《人民的名义》】&/b&&/p&&p&&br&&/p&&p&生态的价值人人都知道。&/p&&blockquote&你为什么不买龙芯电脑?&br&因为安装不了 Windows&br&为什么要安装 Windows?&br&因为我习惯的软件和游戏都在Windows上啊!&/blockquote&&p&Intel+Windows 的生态,庞大得让人生畏。但是龙芯必须在巨头眼皮底下奋力“折腾”出自己的生态。&/p&&p&胡伟武觉得,这个事情虽然难,但没有想象中那么不可能。当然,在个人电脑方面,Intel 制霸天下,但是这个世界并不仅仅有个人电脑这一个大市场。&/p&&p&龙芯的打法是:主攻 Wintel 生态的薄弱环节——终端和工控领域。&/p&&h2&&b&终端和工控是龙芯的领地&/b&&/h2&&blockquote&终端是指党政、能源、金融、电信等等行业使用的终端机,偏专用性质;&br&工控是指在工业领域对生产设备进行控制的智能设备。&/blockquote&&p&基于这个方向,胡伟武的秘诀是:抓住 API。&/p&&blockquote&全中国会用 Java 的工程师有600万,而却找不到10名懂得 Java 引擎或者 JavaScript 虚拟机的人。&/blockquote&&p&胡伟武感叹。&/p&&p&换句话说,中国的现状是绝大部分工程师都只会在上层做开发,而把开发者和CPU连接起来的中间接口就叫:API,API 很少有人会做。&/p&&p&龙芯要做的是,为市面上所有龙芯的潜在用户开发好用的 API,让开发者可以舒服地开发出应用程序。简单来说就是,龙芯制造出各种形式的“乐高模块”,程序开发者只需要按照自己的需要,拼插乐高积木就可以了。这样的话,基于龙芯开发就变得像游戏一样容易,而且让人更加享受。&/p&&p&根据官方数据,下游客户中,基于龙芯的软硬件开发人员已经有一万人了。&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-60be4a4fcdd2ce08825cb3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic3.zhimg.com/50/v2-60be4a4fcdd2ce08825cb3_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【华三研发的基于龙芯 3A3000 的交换机】&/b&&/p&&h2&&b&开源社区也是龙芯的领地&/b&&/h2&&p&这个事情,同样反映在龙芯的社区和开发者队伍上。&/p&&p&如果你在龙芯开发者论坛注册,可以用极低的价格购买到龙芯的板片或电脑。基于这些硬件和 Linux 内核系统,你可以开发一切你喜欢的东西。对于龙芯生态有持续贡献的人,还可以得到“工分”,这些工分将来是可以换取龙芯公司分红和股权激励的。&/p&&p&实际上,在各个高校中,基于龙芯芯片的爱好者社团已经有很多。龙芯也决定把一些低端的处理器核源代码开放给高校,让学生可以完整了解 CPU 内部代码结构,成为中国芯片的后备力量。&/p&&blockquote&开发者是很挑剔的,但是在他们面前,我们的 3A2000 和 3A3000 已经不丢人了,真的。&/blockquote&&p&胡伟武感慨。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-8a6dbbf435ad_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic4.zhimg.com/50/v2-8a6dbbf435ad_r.jpg&&&/figure&&p&&br&&/p&&p&&b&【基于龙芯和开源系统制作的“坦克车”】&/b&&/p&&p&虽然说龙芯已经建立了强大的生态还为时过早,但不妨来看看 Intel。中国工程院倪光南院士说:&/p&&blockquote&1995年 Windows 3.2 退出市场,至今 Wintel 的生态建设已经经过了30年。而相比 Intel 早年的发展,龙芯的脚步已经很快了。&/blockquote&&p&仰视 Intel,龙芯道阻且长。但是,如今下游基于龙芯 CPU 的软硬件研发人员已经达到上万人。几年间龙芯有了如今的生态,并不容易。&/p&&p&需要说明的是,从三年前开始,政府已经放弃了对龙芯的支持,龙芯的最新芯片,都是龙芯中科公司靠卖一片片芯片赚来的钱研发的。从这个角度看,相比动辄拿国家几十亿研究经费的芯片团队而言,龙芯可以拍着胸脯问心无愧。&/p&&p&就像胡伟武所说:有一种胜利来自煎熬。&/p&&p&龙芯用自己的故事,证明了世界还算公平。&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-959ca5e622bc613a3efbd28c40335c6b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&740& data-rawheight=&555& class=&origin_image zh-lightbox-thumb& width=&740& data-original=&https://pic1.zhimg.com/50/v2-959ca5e622bc613a3efbd28c40335c6b_r.jpg&&&/figure&&p&&br&&/p&&p&附加上之前写的关于麒麟操作系统的采访。&/p&&a href=&https://zhuanlan.zhihu.com/p/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-d05d51bb5fcbed_180x120.jpg& data-image-width=&497& data-image-height=&341& class=&internal&&史中:银河麒麟系统的前世今生&/a&&p&&br&&/p&&p&&i&自我介绍一下吧。我叫&b&史中&/b&,是一个倾心故事的科技记者。&b&我的日常是和各路大神聊天。&/b&如果想和我做朋友,可以关注&b&微博:@史中方枪枪&/b&,或者搜索&b&微信:shizhongst&/b&。&/i&&/p&&p&&i&不想走丢的话,你也可以关注我的自媒体公众号“&b&浅黑科技”&/b&。&/i&&/p&
龙芯,在中国人心中是一个巨大的IP。 我们这一代人对于龙芯的期待,不亚于我们的父辈期待第一颗原子弹的爆炸。作为国产芯片的“代言人”,龙芯身上承担了太多的期待。只不过国产芯片的路,显然比想象中更为艰险和漫长。 之前写的一篇旧文,详细介绍了龙芯及…
&h2&&b&这是一个事实&/b&&/h2&&p&算法和数据结构在实际工作中的确很少会用到,这是一个事实。例如在网站开发中,在大多数的项目中,多数是在处理业务逻辑,用到算法和数据结构的地方少之又少。虽然不得不承认懂算法和数据结构是很牛逼的一件事,但是即使不懂,也可以解决80%的问题。&/p&&h2&&b&不利于求职&/b&&/h2&&p&面试中70%的题目与算法和数据结构有关,这也是一个事实。&/p&&p&为什么算法和数据结构在工作中明明用不到却在面试中被频频提到呢?首先算法和数据结构在面试中比较好考查,相对来说也比较公平,还可以看出这个人码代码的功力。其次对算法和数据结构问题的解题能力同时可以反映出一个人的思维能力,也能间接看出这个人在日后工作中解决问题的能力、学习能力和成长潜力。&/p&&p&因此如果是准备求职、面试的话,一定要着重掌握以下算法知识点包括:&/p&&p&二分搜索 Binary Search &br&分治 Divide Conquer &br&宽度优先搜索 Breadth First Search &br&深度优先搜索 Depth First Search&br&回溯法 Backtracking &br&双指针 Two Pointers &br&动态规划 Dynamic Programming &br&扫描线 Scan-line algorithm&br&快排 Quick Sort&/p&&h2&&b&职业高度受限&/b&&/h2&&p&在软件开发行业,从来都是算法先行,次基础,技术为末。这也是程序员从业者金字塔的层级关系分布。在算法知识匮乏的情况下,工作三五年之后,大约可以达到中级水平,但是基本很难达到高级程序员的水平,导致你的事业发展遇到瓶颈,升不上去,这也是一个事实。&/p&&p&毋须讳言的是,35岁以后你的一线coding能力一定是下降的,你写代码绝对不如25岁的程序员快,效率高。这时候如果你对于各种算法和数据结构的认知还处于入门级或中级阶段的话,最终结果就是随着年龄的变大而不得不面对所谓的程序员中年危机。&/p&&p&&br&&/p&&blockquote&&b&推荐阅读:&/b&&/blockquote&&h2&&b&&u&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&互联网公司最常见的面试算法题有哪些?&/a&&/u&&/b&&/h2&&h2&&b&&u&&a href=&https://zhuanlan.zhihu.com/p/& class=&internal&&程序员35岁后都干什么去了?&/a&&/u&&/b&&/h2&&p&&br&&/p&&p&&b&欢迎关注我的微信公众号:九章算法(ninechapter)。精英程序员交流社区,定期发布面试题、面试技巧、求职信息等。&/b&&/p&
这是一个事实算法和数据结构在实际工作中的确很少会用到,这是一个事实。例如在网站开发中,在大多数的项目中,多数是在处理业务逻辑,用到算法和数据结构的地方少之又少。虽然不得不承认懂算法和数据结构是很牛逼的一件事,但是即使不懂,也可以解决80%的…
&p&前几天国外的一个开发人员写的一篇文章, 在众多只关注特性而很少关注编译器质量的文章中 实属一股清流 特意把它转过来 可以看得出来BuckleScript不只领先 而且领先的不是一个身位&br&&br&原链接:&/p&&a href=&http://link.zhihu.com/?target=https%3A//blog.jez.io/union-types-flow-reason/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Union Types in Flow & Reason&/a&&p&凑一个热点,最近沸沸扬扬的中兴事件引起了人们对高科技人才培养的重视。BuckleScript这个项目能够存活至今 其实很能说明 美国科技行业为什么可以遥遥领先。&br&&br&这个项目最早是在Bloomberg 诞生的 当时只是我的一个个人爱好,因为老板觉得很有意思,就一直让我凭兴趣做了两年多,公司的业务一概不用过问。当时我拿的薪水是普通的员工的两到三倍,却一直没有给公司带来任何的实际价值,一直觉得很惭愧,相反公司反倒是不断帮我推广,赞助我去欧洲开会宣传,感觉纯粹是做公益了。后来我打算回国定居了,Facebook 希望我能继续完善这个项目,在没有内地engineering office 的情况下 特地破例让我可以远程工作,给予了我极大的自由度。&/p&&p&国内的互联网公司在体量上已经可以美国比肩了,可是真心这种有情怀的公司有多少呢&/p&&p&&br&Union types are powerful yet often overlooked. At work, I’ve been using Flow which &a href=&http://link.zhihu.com/?target=https%3A//flow.org/en/docs/types/unions/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&thankfully supports union types&/a&. But as I’ve refactored more of our code to use union types, I’ve noticed that our bundle size has been steadily increasing!&/p&&p&In this post, we’re going to explore why that’s the case. We’ll start with a problem which union types can solve, flesh out the problem to motivate why union types are definitely the solution, then examine the resulting cost of introducing them. In the end, we’ll compare Flow to other compile-to-JS languages on the basis of how they represent union types in the compiled output. I’m especially excited about &a href=&http://link.zhihu.com/?target=https%3A//reasonml.github.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reason&/a&, so we’ll talk about it the most.&/p&&h2&Setup: Union Types in a React Component&/h2&&p&Let’s consider we’re writing a simple React 2FA&a href=&http://link.zhihu.com/?target=https%3A//blog.jez.io/union-types-flow-reason/%23fn%3A1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&1&/a& modal. We’ll be using Flow, but you can pretend it’s TypeScript if you want. The mockup we were given looks like this:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-67f485a42becf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1550& data-rawheight=&730& class=&origin_image zh-lightbox-thumb& width=&1550& data-original=&https://pic4.zhimg.com/v2-67f485a42becf_r.jpg&&&/figure&&p&&br&&/p&&p&In this mockup:&/p&&ul&&li&There’s a loading state while we send the text message.&/li&&li&We’ll show an input for the code after the message is sent.&/li&&li&There’s no failure screen (it hasn’t been drawn up yet).&/li&&/ul&&p&We’ll need some way for our component to know which of the three screens is visible. Let’s use a &a href=&http://link.zhihu.com/?target=https%3A//flow.org/en/docs/types/unions/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&union type&/a& in Flow:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&type&/span& &span class=&nx&&Screen&/span& &span class=&o&&=&/span&
&span class=&o&&|&/span& &span class=&s1&&'LoadingScreen'&/span&
&span class=&o&&|&/span& &span class=&s1&&'CodeEntryScreen'&/span&
&span class=&o&&|&/span& &span class=&s1&&'SuccessScreen'&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&Union types are a perfect fit!
Union types document intent and can help guard against mistakes. Fellow developers and our compiler can know “these are all the cases.” In particular, Flow can warn us when we’ve&a href=&http://link.zhihu.com/?target=https%3A//blog.jez.io/flow-exhaustiveness/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& forotten a cas&/a&e.&/p&&p&Our initial implementation is working great. After sharing it with the team, someone suggests adding a “cancel” button in the top corner. It doesn’t make sense to cancel when the flow has already succeeded, so we’ll exclude it from the last screen:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e5bc04cbbfbf62a7b17773_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1574& data-rawheight=&329& class=&origin_image zh-lightbox-thumb& width=&1574& data-original=&https://pic4.zhimg.com/v2-e5bc04cbbfbf62a7b17773_r.jpg&&&/figure&&p&&br&&/p&&p&No problem: let’s write a function called &code&needsCancelButton&/code& to determine if we need to put a cancel button in the header of a particular screen:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&needsCancelButton&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&nx&&screen&/span&&span class=&o&&:&/span& &span class=&nx&&Screen&/span&&span class=&p&&)&/span&&span class=&o&&:&/span& &span class=&kr&&boolean&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&c1&&// Recall: 'SuccessScreen' is the last screen,&/span&
&span class=&c1&&// so it shouldn't have a cancel button.&/span&
&span class=&k&&return&/span& &span class=&nx&&screen&/span& &span class=&o&&!==&/span& &span class=&s1&&'SuccessScreen'&/span&&span class=&p&&;&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&Short and sweet.
Everything seems to be working great, until…&/p&&h2&&code&switch&/code&: Optimizing for Exhaustiveness&/h2&&p&The next day, we get some updated mocks from the design team. This time, they’ve also drawn up a “failure” screen for when the customer has entered the wrong code too many times:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-4fd985cda5d1e52e933f1dad190a1905_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1551& data-rawheight=&729& class=&origin_image zh-lightbox-thumb& width=&1551& data-original=&https://pic2.zhimg.com/v2-4fd985cda5d1e52e933f1dad190a1905_r.jpg&&&/figure&&p&&br&&/p&&p&We can handle this—we’ll just add a case to our &code&Screen&/code& type:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&nx&&type&/span& &span class=&nx&&Screen&/span& &span class=&o&&=&/span&
&span class=&o&&|&/span& &span class=&s1&&'LoadingScreen'&/span&
&span class=&o&&|&/span& &span class=&s1&&'CodeEntryScreen'&/span&
&span class=&o&&|&/span& &span class=&s1&&'SuccessScreen'&/span&
&span class=&c1&&// New case to handle too many wrong attempts:&/span&
&span class=&o&&|&/span& &span class=&s1&&'FailureScreen'&/span&&span class=&p&&;&/span&
&/code&&/pre&&/div&&p&But now &b&there’s a bug&/b& in our &code&needsCancelButton&/code& function.
We should only show a close button on screens where it makes sense, an&code&d'FailureScreen&/code&' is not one of those screens. Our first reaction after discovering the bug would be to just blacklist&code& 'FailureScreen&/code&' too:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&needsCancelButton&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&nx&&screen&/span&&span class=&o&&:&/span& &span class=&nx&&Screen&/span&&span class=&p&&)&/span&&span class=&o&&:&/span& &span class=&kr&&boolean&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&k&&return&/span& &span class=&p&&(&/span&
&span class=&nx&&screen&/span& &span class=&o&&!==&/span& &span class=&s1&&'SuccessScreen'&/span& &span class=&o&&||&/span&
&span class=&nx&&screen&/span& &span class=&o&&!==&/span& &span class=&s1&&'FailureScreen'&/span&
&span class=&p&&);&/span&
&span class=&p&&};&/span&
&/code&&/pre&&/div&&p&But we can do better than just fixing the &b&current&/b& bug. We should write code so that when we add a new case to a union type, our type checker alerts us before a &b&future&/b& bug even happens. What if instead of a silent bug, we got this cheery message from our type checker?&/p&&blockquote&&i&Hey, you forgot to add a case to&/i& &i&&code&needsCancelButton&/code&&/i& &i&for the new screen you added.&/i& &i&?&/i&?&br&&i&— your friendly, neighborhood type checker&/i&&/blockquote&&p&Let’s go back and rewrite &code&needsCancelButton&/code& so that it &b&will&/b& tell us this when adding new cases. We’ll use a &code&switch&/code& statement with&a href=&http://link.zhihu.com/?target=https%3A//blog.jez%3Ccode%3E.io/flo%3C/code%3Ew-exhaustiveness/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&something special in the default case&/a&:&/p&&div class=&highlight&&&pre&&code class=&language-js&&&span&&/span&&span class=&kr&&const&/span& &span class=&nx&&impossible&/span& &span class=&o&&=&/span& &span class=&o&&&&/span&&span class=&nx&&T&/span&&span class=&o&&&&/span&&span class=&p&&(&/span&&span class=&nx&&x&/span&&span class=&o&&:&/span& &span class=&nx&&empty&/span&&span class=&p&&)&/span&&span class=&o&&:&/span& &span class=&nx&&T&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&k&&throw&/span& &span class=&k&&new&/span& &span class=&nb&&Error&/span&&span class=&p&&(&/span&&span class=&s1&&'This case is impossible.'&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&kr&&const&/span& &span class=&nx&&needsCancelButton&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&nx&&screen&/span&&span class=&o&&:&/span& &span class=&nx&&Screen&/span&&span class=&p&&)&/span&&span class=&o&&:&/span& &span class=&kr&&boolean&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span&
&span class=&k&&switch&/span& &span class=&p&&(&/span&&span class=&nx&&screen&/span&&span class=&p&&)&/span& &span class=&p&&{&/span&
&span class=&k&&case&/span& &span class=&s1&&'LoadingScreen'&/span&&span class=&o&&:&/span&
&span class=&k&&return&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&s1&&'CodeEntryScreen'&/span&&span class=&o&&:&/span&
&span class=&k&&return&/span& &span class=&kc&&true&/span&&span class=&p&&;&/span&
&span class=&k&&case&/span& &span class=&s1&&'SuccessScreen'&/span&&span class=&o&&:&/span&
&span class=&k&&return&/span& &span class=&kc&&false&/span&&span class=&p&&;&/span&
&span class=&k&&default&/span&&span class=&o&&:&/span&
&span class=&c1&&// (I named this function 'absurd' in my earlier post:&/span&
&span class=&c1&&// https://blog.jez.io/flow-exhaustiveness/)&/span&
&span class=&c1&&// This function asks Flow to check for exhaustiveness.&/span&
&span class=&c1&&//&/span&
&span class=&c1&&// [flow]: Error: Cannot call `impossible` with `screen` bound to `x` because string literal `FailureScreen` [1] is incompatible with empty [2].&/span&
&span class=&k&&return&/span& &span class=&nx&&impossible&/span&&span class=&p&&(&/span&&span class=&nx&&screen&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&&p&&b&&a href=&http://link.zhihu.com/?target=https%3A//flow.org/try/%230PTAEAEDMBsHsHcBQiAuBPADgU1AZQMYBOWWAdqALyKigA%2BoA5ADKwCGAJgJakDmBxZBtTqMAwrHZYAoqRSE0-EqSE16DXAFd8%2BLAGddiwcLUAxVp2gbih5QG5k%2BWKV0pQnALYZY%2BzgCNoOBSgADwAKgB8ABQAHgBcoFie6ACU8aGU4aAA3sIoABaECKCkWPCgUoSFhJEMoXmcuqD4rLo4DW6e3rp%2BAQB0DMn2AL4OTi7FJOy6oqykOtAAQhooKE6UoJG6RErxNqmgvrCwAbMZ2cK68Jwo%2BHkbWwKkyec0NM2tjCwc3HzbgrHCV6gYgoKzkOQaLD2IHvHAMcSSGRyBR-ZQAoE0EFg0AQqGApotOGabR6AyohjojFYwjkSCsaCtaGvECgACqc1g7ncZFcq1AkE40RxeRwJjgZSwlVghHxLNhjDMFisWBsFNlYGBWFBNP59MZ%2BMkdI00BQlKB1PIHi8Pn8WE2qMGwhGQyAA& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&(Play with it on Try Flow →)&/a&&/b&&/p&&p&Now Flow is smart enough to give us an error! Making our code safer, one &code&switch&/code& statement at a time.
Union types in Flow are a powerful way to use types to guarantee correctness. But to get the most out of union types,&b& alway&a href=&http://link.zhihu.com/?target=https%3A//blog.jez.io/union-types-flow-reason/%23fn%3A2& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&s&/a&&/b&2&b& access the&/b&m through a&code& switc&/code&hstatement. Every time we use a union type without an exhaustive switch statement, we make it harder for Flow to tell us where we’ve missed something.&/p&&h2&Correctness, but at what cost?&/h2&&p&You might not have noticed, but we paid a subtle cost in rewriting our &code&needsCancelButton&/code

我要回帖

更多关于 绿灯结束后有个3s红灯 的文章

 

随机推荐