我在一家公司做电子攻城狮,和公司有矛盾想要走,如果我变成回忆不把源代码提交,只留下hex文件,有没什么问题?

来自子话题:
&b&只给预算不给其他要求一律推荐上船...&/b&&br&&br&&br&&b&PS 小白去电脑城千万别带钱&br&&/b&&img src=&/a8ebf2dfdb4096ae65abcc_b.jpg& data-rawwidth=&540& data-rawheight=&687& class=&origin_image zh-lightbox-thumb& width=&540& data-original=&/a8ebf2dfdb4096ae65abcc_r.jpg&&
只给预算不给其他要求一律推荐上船...PS 小白去电脑城千万别带钱
来自子话题:
&blockquote&fis最核心的目标是解决静态资源管理的工程问题。&br&&/blockquote&这里面涉及到两个非常经典的前端开发问题:&br&&ol&&li&工程中应该怎么引用一个静态资源&/li&&li&工程中怎么进行模块化的开发&/li&&/ol&有人可能会认为第一个问题很简单,比如我要在css中使用背景图片:&br&&div class=&highlight&&&pre&&code class=&language-css&&&span class=&nc&&.foo&/span& &span class=&p&&{&/span&
&span class=&k&&background&/span&&span class=&o&&:&/span& &span class=&sx&&url(a.png)&/span&&span class=&p&&;&/span&
&span class=&p&&}&/span&
&/code&&/pre&&/div&这么写就ok了么?在对前端性能要求越来越高的今天,这样做是有问题的:&br&&ul&&li&这个css不能和其他css做任意打包。或者说&b&打包的话必须保持相对路径不变&/b&,否则合并后的文件将找不到这个a.png,比如使用combo服务,就不能这样写资源引用了。&/li&&li&很多公司的前端项目部署后会引入CDN做静态资源缓存,这时候就涉及到静态资源更新问题,相应的url需要做替换&/li&&/ul&事实上,只有前端工程才有这种特性,就是程序资源的部署和运行环境是分离的,不在一个物理设备上。&br&&blockquote&基于这样的工程特性,fis的第一个核心工作就是——修改所有的资源定位。&/blockquote&注意,是“所有的”资源定位标记,包括html中的script、img、link、style、video、audio、embed等标签的src或href属性;css中的url(xxx),filter的src=xxx;js中的__uri(xxx)标记。把所有可能的资源定位标记都替换成部署后的绝对路径。当然,这个部署路径是可以配置的:&br&&img src=&/213b01a1187e3faa3f0e4ec0741efe1b_b.jpg& data-rawwidth=&909& data-rawheight=&486& class=&origin_image zh-lightbox-thumb& width=&909& data-original=&/213b01a1187e3faa3f0e4ec0741efe1b_r.jpg&&&br&不要以为这个功能是无谓的,从上图可以看出,fis修改开发中的路径为部署后的绝对路径,这样做的理由是:&br&&ul&&li&修改 js/css/html/模板 中引用的资源为绝对路径,使得 js/css/html/模板 可以被任意合并、嵌入、部署而不用担心资源定位问题,为js/css请求合并、模板拼装打下基础。&/li&&li&开发中使用相对路径,部署策略通过工具来配置,实现开发和部署解耦。&/li&&li&在替换的过程中,给静态资源加基于内容的md5戳,从而解决CDN缓存问题,颗粒度精确到文件级别。&/li&&/ul&第一个好处不言而喻。css尤其需要将相对路径转换为绝对路径,从而保证打包的安全性。第二个理由,我在UC实践前端工程改进的时候就应用上了。比如每次构建,需要在url中加入一个版本号,这个版本号,可是要给所有的url都加上的,我使用fis的配置如下:&br&&img src=&/bc4f326b1cc01f95422be7_b.jpg& data-rawwidth=&602& data-rawheight=&253& class=&origin_image zh-lightbox-thumb& width=&602& data-original=&/bc4f326b1cc01f95422be7_r.jpg&&只要配置一个匹配规则(reg),然后定义一个发布规则(release),fis会根据配置把所有的资源定位标记都处理为这个指定的结果。这个过程用grunt等工具实现的成本比较高。&br&&br&&blockquote&fis的第二个核心功能就是——生成资源依赖表&/blockquote&要解决前端工程的模块化拆分,其本质是解决资源之间的依赖关系管理和资源加载问题。涉及到资源加载,又会涉及到性能优化,包括请求合并、并行加载等。这些都不是随便处理的。比如requirejs,它的官方工具工具就是那个r.js了,其构建方式就是把所有文件按照依赖树合并成一个文件,但这在实际项目中远远不够,模块化框架需要更“智能”一些。相关思路我也写过文章解释过,具体的可以看这里:&a href=&/fouber/blog/issues/4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&前端工程与模块化框架 · Issue #4 · fouber/blog · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&fis的第二项专长就是扫描所有文件,生成一张全局的依赖关系表,然后由fis使用者写一个配置通过适当的调整,把依赖树插入到前端代码中,并调用模块化框架相关API进行依赖关系声明,从而同时解决 依赖管理、按需加载和请求合并三项需求。&br&====================================&br&可能有些同学会质疑前端要不要搞得这么复杂,这里也总结一下&b&一般前端项目的发展历程:&/b&&br&&ol&&li&很小,只有1-2个人开发,js放在js目录、css放在css目录、,js、css压缩一下就好了,合并的话直接all-in-one的合成一个文件。这个阶段不需要什么工程手段。&/li&&li&规模略大一些,要考虑静态资源的部署,包括CDN、缓存控制、静态资源合并。这个时候最需要的就是url替换了,需要把工程路径全部转换为部署路径。&/li&&li&规模再大一些,就要引入模块化框架,解决按需加载、请求合并、依赖个管理。这个时候就需要资源依赖表了,配合模块化框架,做进一步的工程管理和性能优化。&/li&&/ol&第一阶段不能称之为工程,只有一些基本工具的需求,主要是压缩和简单的all-in-one的合并,fis最多给你带来的是比较爽的工具使用体验。&br&第二阶段要解决源码和部署的解耦,主要是资源定位问题,fis的文件分类及属性分配就是要解决这个问题的。&br&第三阶段要解决模块化开发及静态资源加载问题,依靠前后端的模块化框架配合fis扫描文件目录生成的依赖树来实现。&br&=====================================&br&估计目前还有很大一部分前端工程师没有接触到后面两个阶段,还处于第一阶段的时候对于前端工程的认识应该还停留在基础的工具需求阶段,但越到后面越能体会到前端工程中解决资源定位和依赖管理的重要意义,这个时候或许可以参考一下fis的设计思路,来设计自己的开发体系。
fis最核心的目标是解决静态资源管理的工程问题。这里面涉及到两个非常经典的前端开发问题:工程中应该怎么引用一个静态资源工程中怎么进行模块化的开发有人可能会认为第一个问题很简单,比如我要在css中使用背景图片:.foo {
background: url(a.png);
来自子话题:
你以为Python是&br&&br&&div class=&highlight&&&pre&&code class=&language-ocaml&&&span class=&k&&let&/span& &span class=&n&&foo&/span& &span class=&bp&&()&/span& &span class=&o&&=&/span&
&span class=&k&&let&/span& &span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&1&/span& &span class=&k&&in&/span&
&span class=&k&&let&/span& &span class=&n&&inner&/span& &span class=&bp&&()&/span& &span class=&o&&=&/span& &span class=&n&&x&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&k&&in&/span&
&span class=&k&&let&/span& &span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&mi&&3&/span& &span class=&k&&in&/span&
&span class=&n&&print&/span& &span class=&o&&(&/span&&span class=&n&&inner&/span& &span class=&bp&&()&/span&&span class=&o&&)&/span&
&/code&&/pre&&/div&&br&实际上Python是&br&&br&&div class=&highlight&&&pre&&code class=&language-ocaml&&&span class=&k&&let&/span& &span class=&n&&foo&/span& &span class=&bp&&()&/span& &span class=&o&&=&/span&
&span class=&k&&let&/span& &span class=&n&&x&/span& &span class=&o&&=&/span& &span class=&n&&ref&/span& &span class=&mi&&1&/span& &span class=&k&&in&/span&
&span class=&k&&let&/span& &span class=&n&&inner&/span& &span class=&bp&&()&/span& &span class=&o&&=&/span& &span class=&o&&!&/span&&span class=&n&&x&/span& &span class=&o&&+&/span& &span class=&mi&&1&/span& &span class=&k&&in&/span&
&span class=&n&&x&/span& &span class=&o&&:=&/span& &span class=&mi&&3&/span&&span class=&o&&;&/span&
&span class=&n&&print&/span& &span class=&o&&(&/span&&span class=&n&&inner&/span& &span class=&bp&&()&/span&&span class=&o&&)&/span&
&/code&&/pre&&/div&&br&这和lexical scoping一点关系都没有啊&br&&br&这是个mutable vs immutable的问题&br&&br&python的scope是这样的&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&+--------------------------+
+---------------+ |
| def foo|():
+-------+ | |
| def inner|():
| return x + 1 | | |
+--------------+ | |
| print inner()
+--------------------+ |
+--------------------------+
&/code&&/pre&&/div&&br&你认为的scope是这样的&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&let foo () =
+-------------------------------+
| let x = 1 in
+--------------------------+ |
| let inner () = x + 1 in
+---------------------+ | |
| let x = 3 in
print (inner ())
+---------------------+ | |
+--------------------------+ |
+-------------------------------+
&/code&&/pre&&/div&&br&因为Python的scope是mutable的,所以x = 3只是把x的binding修改成指向3&br&&br&&br&就是这样
你以为Python是let foo () =
let x = 1 in
let inner () = x + 1 in
let x = 3 in
print (inner ())实际上Python是let foo () =
let x = ref 1 in
let inner () = !x + 1 in
print (inner ())
这和lexical scoping一点关系都没有啊这是个m…
来自子话题:
不少人推荐《&i&Learn Python The Hard Way(笨办法学 Python)&/i&》,但也有很多人吐槽过此书只讲其然,不讲其所以然。感觉有点类似学古诗,先背上个几百首,完了之后自然就会了。但我自己没看过,也不好多评价。&br&&br&我推荐完全没有编程基础的新手先看《&i&head first python&/i&》或者《&i&与孩子一起学编程&/i&》,这类书其实是借 python 来讲编程入门。&br&&br&如果有一点点编程基础,而想学 python,建议《简明Python教程》或《Dive into Python》,这两个都有在线中文版本:&br&&a href=&/abyteofpython_cn/chinese/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&简明 Python 教程&i class=&icon-external&&&/i&&/a&&br&&a href=&/diveintopython/toc/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dive Into Python&i class=&icon-external&&&/i&&/a&&br&&br&最后是私货:推荐我自己写的专门面向零基础新手的 python 教程:&a href=&/s/1qWuGvF2#dir/path=%2Fpython%E7%94%B5%E5%AD%90%E4%B9%A6%2FCrossin%E7%9A%84%E7%BC%96%E7%A8%8B%E6%95%99%E5%AE%A4& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Crossin的编程教室&i class=&icon-external&&&/i&&/a&&br&或者加微信公众号:crossincode (Crossin的编程教室)
不少人推荐《Learn Python The Hard Way(笨办法学 Python)》,但也有很多人吐槽过此书只讲其然,不讲其所以然。感觉有点类似学古诗,先背上个几百首,完了之后自然就会了。但我自己没看过,也不好多评价。我推荐完全没有编程基础的新手先看《head first p…
来自子话题:
做法无可厚非,说法可能不妥。&br&&br&允许使用C、C++和Java应该涵盖了至少一门一个正常的计算机专业学生所应该掌握的语言了,对于正在上算法课的CS学生来说,使用这三门中的一门不应该有任何问题。既然是作业,肯定也需要有一定的标准性和规范,对于评价标准来说是如此,对于老师来说也是如此——不能指望老师能看懂学生们会的所有语言,而且这绝对不是老师偷懒的问题,相反,一个负责的老师更应该这么做——如果想要仔细阅读(甚至不编译运行)学生的代码找到细节错误,就必须是自己相当熟悉的语言。&br&&br&我们学校的数据结构课只接受C代码,不少助教能够做到单纯只是阅读作业本上的手写代码就能找到极其细节的指针错误、逻辑遗漏。这和他们对于C的熟练以及历来都是用C写这个作业肯定是有关系的。如果接受各种语言实现,那么必然需要完备的测试数据集来进行机器评判了(孰优孰劣另说,但至少是个大工程,不是一两个老师能够推动的)。&br&&br&最后,实现个大学课程里的算法而已,为何要纠结于语言是什么呢?
做法无可厚非,说法可能不妥。允许使用C、C++和Java应该涵盖了至少一门一个正常的计算机专业学生所应该掌握的语言了,对于正在上算法课的CS学生来说,使用这三门中的一门不应该有任何问题。既然是作业,肯定也需要有一定的标准性和规范,对于评价标准来说是…
就不会自己每个语言都去试试么?
&br& 老是看到这种没有事先加诸实践的问题。
&br& “哪个编辑器好?”然后一群人说Vim好,速度快,简单....
一群人说Emacs好,神用的编辑器...
然后提问者看着就YY,神的编辑器和编辑器的神任我挑选。但是,然后呢?
&blockquote&&a href=&/question/& class=&internal&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/question/1967&/span&&span class=&invisible&&7085&/span&&span class=&ellipsis&&&/span&&/a&&br&比如这个,你觉得看这个帖子可以学习到什么?一干人等说vi,然后呢?我们姑且揣度一下提问者的心态:挑起Vi和Emacs的战争?如果是Vi党,看到这队形帖,肯定晚上笑得合不拢嘴,多巴胺分泌爆棚了。如果是Emacs党,喝口茶继续敲代码了,世界改变了么?得到什么知识了么?懂得什么道理了么?
&/blockquote&“哪种脚本语言好?”一群人说Ruby好,随性,有Rails...
一群人喷:Ruby是SB,写出来代码不整齐,别人看不懂,Python才适合工业用...
黑暗中Perl拥簇冷笑一声继续写代码。 然后提问者仿佛就看透了整个脚本语言领域,以后出门就可以和别人侃了:你用Ruby呀?这种语言写出来代码很不整齐的,试试Python吧……
都在说浮躁,什么叫浮躁,这个就叫浮躁。
&br&&br& 其实真没啥区别。具体到你这个问题,可以看看 &a href=&/languages& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/languages&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a& 上的排名,这个排名倒没有说神马语言好,什么语言不好,只是什么语言在github上的开源项目里边用得多,活跃。
&br& 可以你自己想一个小功能(比如去爬你暗恋的人的微薄,然后分析出她喜欢什么),然后用不同的语言来实现一下,哪种写得爽就深入学呗。
就不会自己每个语言都去试试么? 老是看到这种没有事先加诸实践的问题。 “哪个编辑器好?”然后一群人说Vim好,速度快,简单.... 一群人说Emacs好,神用的编辑器... 然后提问者看着就YY,神的编辑器和编辑器的神任我挑选。但是,然后呢? …
来自子话题:
&ol&&li&&strong&轮询&/strong&:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。&br&优点:后端程序编写比较容易。&br&缺点:请求中有大半是无用,浪费带宽和服务器资源。&br&实例:适于小型应用。&br&&/li&&li&&strong&长轮询&/strong&:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。&br&优点:在无消息的情况下不会频繁的请求。&br&缺点:服务器hold连接会消耗资源。&br&实例:WebQQ、Hi网页版、Facebook IM。&br&&/li&&/ol&另外,对于长连接和socket连接也有区分:&br&&ol&&li&&strong&长连接&/strong&:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。&br&优点:消息即时到达,不发无用请求。&br&缺点:服务器维护一个长连接会增加开销。&br&实例:Gmail聊天&br&&/li&&li&&strong&Flash Socket&/strong&:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。&br&优点:实现真正的即时通信,而不是伪即时。&br&缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。&br&实例:网络互动游戏。&/li&&/ol&
轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。优点:后端程序编写比较容易。缺点:请求中有大半是无用,浪费带宽和服务器资源。实例:适于小型应用。长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连…
来自子话题:
先打好py基础!!!然后边啃边理解更深入且优秀的编程思想!只要哪天你感觉看代码就跟看小说似的无压力,那一切就容易啦。&br&&br&我读过py好多优秀开源,如sqlmap,wapti,一些优秀库的实现。&br&&br&然后,得有安全基本功,要不然也没法理解安全类的源码是什么个思想。&br&&br&最后,得有架构基本功,否则根本不知道这些API为什么存在,框架与插件之间为何这样通信,为什么要这样分模块,有什么地方可以优化的等等。&br&&br&万事开头难,啃吧,调试吧!越到后面会越轻松,然后来给我点个赞。
先打好py基础!!!然后边啃边理解更深入且优秀的编程思想!只要哪天你感觉看代码就跟看小说似的无压力,那一切就容易啦。我读过py好多优秀开源,如sqlmap,wapti,一些优秀库的实现。然后,得有安全基本功,要不然也没法理解安全类的源码是什么个思想。最…
来自子话题:
一个现代的网页通常是html+javascript+css。&br&&br&学习html是最简单的,我身边的很多非cs朋友多多少少会一些html。从头学html也很简单,只要记住各种尖括号里面的tag的含义和用法就好,主要是记忆性的工作。&br&&br&学习css是次简单的。css就像一个简简单单的列表,在css文件你可以规定html的某一部分的样式。例如在css里面你可以规定光标悬停在一个超链接之后,这个链接是否需要变成红色。&br&&br&如果你没有任何编程经验但是想上手网页制作,恭喜你,你是Code Academy和&a href=&http://Code.org& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&Code.org&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&的目标用户。这两个网站有不少很好的教程,手把手教初学者从零开始学一门技术。&br&&br&文本编辑器:sublime text是一个神器,作为一个编辑器来讲,用它写什么语言都很爽(不算eclispe和xcode)。但是若想做网页,可以试一试brackets (&a href=&http://brackets.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Brackets - The Free, Open Source Code Editor for the Web&i class=&icon-external&&&/i&&/a&),可以让开发者一边写网页一边在浏览器中预览。&br&&br&w3school其实并不是一个很适合新手初学的地方,因为他们不经常更新教程,不少东西已经过时了。w3c更适合作为一个参考书。有人专门建了个网站黑w3school:&a href=&/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
一个现代的网页通常是html+javascript+css。学习html是最简单的,我身边的很多非cs朋友多多少少会一些html。从头学html也很简单,只要记住各种尖括号里面的tag的含义和用法就好,主要是记忆性的工作。学习css是次简单的。css就像一个简简单单的列表,在css…
来自子话题:
宇宙射线导致的位反转&br&别笑,真事。
宇宙射线导致的位反转别笑,真事。
来自子话题:
&ul&&li&自带的版本控制,这功能挽救了我好多次了。&br&&/li&&li&优秀的代码定位能力,能轻松将光标定位到变量/属性/方法的定义处,对阅读代码非常有用。&/li&&li&聪明的代码联想、格式化功能。&/li&&li&可定制的code template, 加强版的zen coding,而且不仅限于html和css。&br&&/li&&li&svn、git 等版本工具的支持,内置的 gist 非常方便。&/li&&li&nodejs 最好的开发工具,没有之一。只要你会用 chrome 调试浏览器器端的 js,那么你就会用 webstorm 调试 nodejs。&/li&&li&预处理语言的支持,使less、sass、cofeescript 等等语言的自动编译变得很简单。&/li&&li&最爽的一点,remote host和live edit的组合使用,让你直接编辑远程文件并实时刷新,一下省去了你这么多步骤:保存本地文件, 上传本地文件到远程服务器, 刷新浏览器。&br&&/li&&/ul&&br&功能太多了,只要慢慢调教,webstorm真的爽,我还写了几篇blog:巧:&br&&a href=&http://annn.me/webstorm/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm:令人眼前一亮的一款前端开发IDE&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm-function-operating-guide/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm功能特点以及使用指南&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm8/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebStorm 8 新功能一览&i class=&icon-external&&&/i&&/a&&br&&a href=&http://annn.me/webstorm-phpstorm-remote-host/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用WebStorm/Phpstorm实现remote host远程开发&i class=&icon-external&&&/i&&/a&&br&&br&ps,blog 迁移到 github 以后,我现在已经直接用 webstorm 写 blog 了,写完md一个快捷键 push 到 github,好愉快……
自带的版本控制,这功能挽救了我好多次了。优秀的代码定位能力,能轻松将光标定位到变量/属性/方法的定义处,对阅读代码非常有用。聪明的代码联想、格式化功能。可定制的code template, 加强版的zen coding,而且不仅限于html和css。svn、git 等版本工具的…
来自子话题:
我来回答这个问题吧:&br&
本人自学java+android,现在在公司实习三个月。基本独立完成了两个项目。和老板一起合写一个项目。其中不断改版。基本有android程序员的能力。&br&
我的学习之路是这样的:&br&
1、先自学java,找了本书,随便一本书都会说java的基本语法。题主学过c语言。语法看个一两天,基本也够了。&br&
2、 现在大学教育偏科学,所有有些东西你得自己学。比如在java里面的容器类,线程操作,网络Socket,还有IO流,基本数据类型等。这些都是基本功,好好掌握。基本每一个章节有一到两天看。个人觉得书比较好。但是如果你比较懒,推荐你看看 马士兵的java教程,能有收获。&br&
3、用差不多15-20天好好学java了。记得学习的过程中,好好体会一下面向对象的思想。接下来就是android了。&br&
4、如果英语可以,建议直接上google看,毕竟是自己家的东西,他讲的比较清楚。不过大段英语容易让人产生疲劳。本人是极其推荐通常阅读学习的。买本书,我觉得《第一行代码》这本书不错,适合不适合题主得自己评定。&br&
5、学习逻辑可以这样:搭建自己的android开发环境,网上一找一大堆。新建一个工程,看看文件夹的结构。知道每个文件夹有什么用。一天差不多了把,&br&
6、学习写android的 xml布局文件。这个是你最快能看到你的软件成果的。用3-4天练习各个控件属性。&br&
7、接下来学习四大组件,用一个星期到两个星期学习。因为这个比较重要。&br&
8、学习数据库和首选项的使用,一个星期就能搞定了吧。&br&
9.到这里,你已经能完成大部分的软件了,你自己个自己提需求,作个能拿的出手的项目。比如花2-5天写个播放器、写个天气查询什么的。不到两个月,你具有一定开发能力。&br&
10、剩下的我也教不了你了。毕竟我也是小白。记得google和stackoverflow是最好的老师(什么!!!!你学习android居然不知道怎么上google,各种vpn等着你,花点成本吧)&br&&br&
多coding!!!&br&
多coding!!!!&br&
多coding!!!!!
我来回答这个问题吧: 本人自学java+android,现在在公司实习三个月。基本独立完成了两个项目。和老板一起合写一个项目。其中不断改版。基本有android程序员的能力。 我的学习之路是这样的: 1、先自学java,找了本书,随便一本书都会说java的基本语法。题…
来自子话题:
本来写在 &a data-hash=&dcddeadcb515f393fe29575& href=&///people/dcddeadcb515f393fe29575& class=&member_mention& data-editable=&true& data-title=&@bhuztez& data-tip=&p$b$dcddeadcb515f393fe29575&&@bhuztez&/a& 大大的回答的评论里的。算了还是发到顶层好了。&br&&br&诶这里 &a data-hash=&745f68a74a02e455b1e1& href=&///people/745f68a74a02e455b1e1& class=&member_mention& data-editable=&true& data-title=&@蓝色& data-tip=&p$b$745f68a74a02e455b1e1&&@蓝色&/a& 大大的回答真的误解一些了, &a data-hash=&dcddeadcb515f393fe29575& href=&///people/dcddeadcb515f393fe29575& class=&member_mention& data-editable=&true& data-title=&@bhuztez& data-tip=&p$b$dcddeadcb515f393fe29575&&@bhuztez&/a& 大大的回答才是完全正解。&br&&br&这个问题,要看最精辟的答案的请看 &a data-hash=&6a029ac739882fcb2512a& href=&///people/6a029ac739882fcb2512a& class=&member_mention& data-tip=&p$b$6a029ac739882fcb2512a&&@flow memory&/a& 大大的,要深入到Python的内部机制的请看
&a data-hash=&dcddeadcb515f393fe29575& href=&///people/dcddeadcb515f393fe29575& class=&member_mention& data-tip=&p$b$dcddeadcb515f393fe29575&&@bhuztez&/a& 大大的,要看点具体代码的请看
&a data-hash=&745f68a74a02e455b1e1& href=&///people/745f68a74a02e455b1e1& class=&member_mention& data-tip=&p$b$745f68a74a02e455b1e1&&@蓝色&/a& 大大修正过的答案。&br&&br&Python的__builtin___模块完全是个运行时的东西, &a data-hash=&745f68a74a02e455b1e1& href=&///people/745f68a74a02e455b1e1& class=&member_mention& data-editable=&true& data-title=&@蓝色& data-tip=&p$b$745f68a74a02e455b1e1&&@蓝色&/a& 大大引用的代码其实是在VM初始化的时候把初始的__builtin___模块中的名字与函数指针的对应关系注册好;然而Python的(源码到字节码)编译器是不关心这个的。&br&Python的pow()跟像GCC的__builtin_powi()不可以相提并论;前者的行为可以在运行时改变,而编译器完全不把它当作特殊的东西看待;后者则是编译器直接支持的intrinsic function。&br&&br&刚初始化好的时候,__builtin__模块里的&pow&映射到的是builtin_pow()函数,后者进一步调用PyNumber_Power()函数来实现功能;&a href=&/python/cpython/blob/2.7/Python/bltinmodule.c#L1551& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cpython/bltinmodule.c at 2.7 · python/cpython · GitHub&i class=&icon-external&&&/i&&/a&&br&Python的源码编译器会把 ** 运算符编译为BINARY_POWER字节码指令,而Python的字节码解释器为BINARY_POWER的实现则是直接调用PyNumber_Power()函数(不通过符号解析__builtin__模块里的&pow&的当前绑定)。&a href=&/python/cpython/blob/2.7/Python/ceval.c#L1383& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cpython/ceval.c at 2.7 · python/cpython · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&由于在Python代码里调用pow()实际上要先经过一次符号解析(LOAD_NAME)找到目标然后再调用过去,而模块的绑定又是可变的,所以可以做到下面这种事情:&br&&div class=&highlight&&&pre&&code class=&language-python&&&span class=&err&&$&/span& &span class=&n&&python&/span&
&span class=&n&&Python&/span& &span class=&mf&&2.7&/span&&span class=&o&&.&/span&&span class=&mi&&5&/span& &span class=&p&&(&/span&&span class=&n&&default&/span&&span class=&p&&,&/span& &span class=&n&&Mar&/span&
&span class=&mi&&9&/span& &span class=&mi&&2014&/span&&span class=&p&&,&/span& &span class=&mi&&22&/span&&span class=&p&&:&/span&&span class=&mi&&15&/span&&span class=&p&&:&/span&&span class=&mo&&05&/span&&span class=&p&&)&/span&
&span class=&p&&[&/span&&span class=&n&&GCC&/span& &span class=&mf&&4.2&/span&&span class=&o&&.&/span&&span class=&mi&&1&/span& &span class=&n&&Compatible&/span& &span class=&n&&Apple&/span& &span class=&n&&LLVM&/span& &span class=&mf&&5.0&/span& &span class=&p&&(&/span&&span class=&n&&clang&/span&&span class=&o&&-&/span&&span class=&mf&&500.0&/span&&span class=&o&&.&/span&&span class=&mi&&68&/span&&span class=&p&&)]&/span& &span class=&n&&on&/span& &span class=&n&&darwin&/span&
&span class=&n&&Type&/span& &span class=&s&&&help&&/span&&span class=&p&&,&/span& &span class=&s&&&copyright&&/span&&span class=&p&&,&/span& &span class=&s&&&credits&&/span& &span class=&ow&&or&/span& &span class=&s&&&license&&/span& &span class=&k&&for&/span& &span class=&n&&more&/span& &span class=&n&&information&/span&&span class=&o&&.&/span&
&span class=&o&&&&&&/span& &span class=&mi&&2&/span& &span class=&o&&**&/span& &span class=&mi&&5&/span&
&span class=&mi&&32&/span&
&span class=&o&&&&&&/span& &span class=&nb&&pow&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&)&/span&
&span class=&mi&&32&/span&
&span class=&o&&&&&&/span& &span class=&n&&__builtins__&/span&
&span class=&o&&&&/span&&span class=&n&&module&/span& &span class=&s&&'__builtin__'&/span& &span class=&p&&(&/span&&span class=&n&&built&/span&&span class=&o&&-&/span&&span class=&ow&&in&/span&&span class=&p&&)&/span&&span class=&o&&&&/span&
&span class=&o&&&&&&/span& &span class=&nb&&dir&/span&&span class=&p&&(&/span&&span class=&n&&__builtins__&/span&&span class=&p&&)&/span&
&span class=&p&&[&/span&&span class=&s&&'ArithmeticError'&/span&&span class=&p&&,&/span& &span class=&s&&'AssertionError'&/span&&span class=&p&&,&/span& &span class=&s&&'AttributeError'&/span&&span class=&p&&,&/span& &span class=&s&&'BaseException'&/span&&span class=&p&&,&/span& &span class=&s&&'BufferError'&/span&&span class=&p&&,&/span& &span class=&s&&'BytesWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'DeprecationWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'EOFError'&/span&&span class=&p&&,&/span& &span class=&s&&'Ellipsis'&/span&&span class=&p&&,&/span& &span class=&s&&'EnvironmentError'&/span&&span class=&p&&,&/span& &span class=&s&&'Exception'&/span&&span class=&p&&,&/span& &span class=&s&&'False'&/span&&span class=&p&&,&/span& &span class=&s&&'FloatingPointError'&/span&&span class=&p&&,&/span& &span class=&s&&'FutureWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'GeneratorExit'&/span&&span class=&p&&,&/span& &span class=&s&&'IOError'&/span&&span class=&p&&,&/span& &span class=&s&&'ImportError'&/span&&span class=&p&&,&/span& &span class=&s&&'ImportWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'IndentationError'&/span&&span class=&p&&,&/span& &span class=&s&&'IndexError'&/span&&span class=&p&&,&/span& &span class=&s&&'KeyError'&/span&&span class=&p&&,&/span& &span class=&s&&'KeyboardInterrupt'&/span&&span class=&p&&,&/span& &span class=&s&&'LookupError'&/span&&span class=&p&&,&/span& &span class=&s&&'MemoryError'&/span&&span class=&p&&,&/span& &span class=&s&&'NameError'&/span&&span class=&p&&,&/span& &span class=&s&&'None'&/span&&span class=&p&&,&/span& &span class=&s&&'NotImplemented'&/span&&span class=&p&&,&/span& &span class=&s&&'NotImplementedError'&/span&&span class=&p&&,&/span& &span class=&s&&'OSError'&/span&&span class=&p&&,&/span& &span class=&s&&'OverflowError'&/span&&span class=&p&&,&/span& &span class=&s&&'PendingDeprecationWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'ReferenceError'&/span&&span class=&p&&,&/span& &span class=&s&&'RuntimeError'&/span&&span class=&p&&,&/span& &span class=&s&&'RuntimeWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'StandardError'&/span&&span class=&p&&,&/span& &span class=&s&&'StopIteration'&/span&&span class=&p&&,&/span& &span class=&s&&'SyntaxError'&/span&&span class=&p&&,&/span& &span class=&s&&'SyntaxWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'SystemError'&/span&&span class=&p&&,&/span& &span class=&s&&'SystemExit'&/span&&span class=&p&&,&/span& &span class=&s&&'TabError'&/span&&span class=&p&&,&/span& &span class=&s&&'True'&/span&&span class=&p&&,&/span& &span class=&s&&'TypeError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnboundLocalError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnicodeDecodeError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnicodeEncodeError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnicodeError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnicodeTranslateError'&/span&&span class=&p&&,&/span& &span class=&s&&'UnicodeWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'UserWarning'&/span&&span class=&p&&,&/span& &span class=&s&&'ValueError'&/span&&span class=&p&&,&/span& &span class=&s&&'Warning'&/span&&span class=&p&&,&/span& &span class=&s&&'ZeroDivisionError'&/span&&span class=&p&&,&/span& &span class=&s&&'_'&/span&&span class=&p&&,&/span& &span class=&s&&'__debug__'&/span&&span class=&p&&,&/span& &span class=&s&&'__doc__'&/span&&span class=&p&&,&/span& &span class=&s&&'__import__'&/span&&span class=&p&&,&/span& &span class=&s&&'__name__'&/span&&span class=&p&&,&/span& &span class=&s&&'__package__'&/span&&span class=&p&&,&/span& &span class=&s&&'abs'&/span&&span class=&p&&,&/span& &span class=&s&&'all'&/span&&span class=&p&&,&/span& &span class=&s&&'any'&/span&&span class=&p&&,&/span& &span class=&s&&'apply'&/span&&span class=&p&&,&/span& &span class=&s&&'basestring'&/span&&span class=&p&&,&/span& &span class=&s&&'bin'&/span&&span class=&p&&,&/span& &span class=&s&&'bool'&/span&&span class=&p&&,&/span& &span class=&s&&'buffer'&/span&&span class=&p&&,&/span& &span class=&s&&'bytearray'&/span&&span class=&p&&,&/span& &span class=&s&&'bytes'&/span&&span class=&p&&,&/span& &span class=&s&&'callable'&/span&&span class=&p&&,&/span& &span class=&s&&'chr'&/span&&span class=&p&&,&/span& &span class=&s&&'classmethod'&/span&&span class=&p&&,&/span& &span class=&s&&'cmp'&/span&&span class=&p&&,&/span& &span class=&s&&'coerce'&/span&&span class=&p&&,&/span& &span class=&s&&'compile'&/span&&span class=&p&&,&/span& &span class=&s&&'complex'&/span&&span class=&p&&,&/span& &span class=&s&&'copyright'&/span&&span class=&p&&,&/span& &span class=&s&&'credits'&/span&&span class=&p&&,&/span& &span class=&s&&'delattr'&/span&&span class=&p&&,&/span& &span class=&s&&'dict'&/span&&span class=&p&&,&/span& &span class=&s&&'dir'&/span&&span class=&p&&,&/span& &span class=&s&&'divmod'&/span&&span class=&p&&,&/span& &span class=&s&&'enumerate'&/span&&span class=&p&&,&/span& &span class=&s&&'eval'&/span&&span class=&p&&,&/span& &span class=&s&&'execfile'&/span&&span class=&p&&,&/span& &span class=&s&&'exit'&/span&&span class=&p&&,&/span& &span class=&s&&'file'&/span&&span class=&p&&,&/span& &span class=&s&&'filter'&/span&&span class=&p&&,&/span& &span class=&s&&'float'&/span&&span class=&p&&,&/span& &span class=&s&&'format'&/span&&span class=&p&&,&/span& &span class=&s&&'frozenset'&/span&&span class=&p&&,&/span& &span class=&s&&'getattr'&/span&&span class=&p&&,&/span& &span class=&s&&'globals'&/span&&span class=&p&&,&/span& &span class=&s&&'hasattr'&/span&&span class=&p&&,&/span& &span class=&s&&'hash'&/span&&span class=&p&&,&/span& &span class=&s&&'help'&/span&&span class=&p&&,&/span& &span class=&s&&'hex'&/span&&span class=&p&&,&/span& &span class=&s&&'id'&/span&&span class=&p&&,&/span& &span class=&s&&'input'&/span&&span class=&p&&,&/span& &span class=&s&&'int'&/span&&span class=&p&&,&/span& &span class=&s&&'intern'&/span&&span class=&p&&,&/span& &span class=&s&&'isinstance'&/span&&span class=&p&&,&/span& &span class=&s&&'issubclass'&/span&&span class=&p&&,&/span& &span class=&s&&'iter'&/span&&span class=&p&&,&/span& &span class=&s&&'len'&/span&&span class=&p&&,&/span& &span class=&s&&'license'&/span&&span class=&p&&,&/span& &span class=&s&&'list'&/span&&span class=&p&&,&/span& &span class=&s&&'locals'&/span&&span class=&p&&,&/span& &span class=&s&&'long'&/span&&span class=&p&&,&/span& &span class=&s&&'map'&/span&&span class=&p&&,&/span& &span class=&s&&'max'&/span&&span class=&p&&,&/span& &span class=&s&&'memoryview'&/span&&span class=&p&&,&/span& &span class=&s&&'min'&/span&&span class=&p&&,&/span& &span class=&s&&'next'&/span&&span class=&p&&,&/span& &span class=&s&&'object'&/span&&span class=&p&&,&/span& &span class=&s&&'oct'&/span&&span class=&p&&,&/span& &span class=&s&&'open'&/span&&span class=&p&&,&/span& &span class=&s&&'ord'&/span&&span class=&p&&,&/span& &span class=&s&&'pow'&/span&&span class=&p&&,&/span& &span class=&s&&'print'&/span&&span class=&p&&,&/span& &span class=&s&&'property'&/span&&span class=&p&&,&/span& &span class=&s&&'quit'&/span&&span class=&p&&,&/span& &span class=&s&&'range'&/span&&span class=&p&&,&/span& &span class=&s&&'raw_input'&/span&&span class=&p&&,&/span& &span class=&s&&'reduce'&/span&&span class=&p&&,&/span& &span class=&s&&'reload'&/span&&span class=&p&&,&/span& &span class=&s&&'repr'&/span&&span class=&p&&,&/span& &span class=&s&&'reversed'&/span&&span class=&p&&,&/span& &span class=&s&&'round'&/span&&span class=&p&&,&/span& &span class=&s&&'set'&/span&&span class=&p&&,&/span& &span class=&s&&'setattr'&/span&&span class=&p&&,&/span& &span class=&s&&'slice'&/span&&span class=&p&&,&/span& &span class=&s&&'sorted'&/span&&span class=&p&&,&/span& &span class=&s&&'staticmethod'&/span&&span class=&p&&,&/span& &span class=&s&&'str'&/span&&span class=&p&&,&/span& &span class=&s&&'sum'&/span&&span class=&p&&,&/span& &span class=&s&&'super'&/span&&span class=&p&&,&/span& &span class=&s&&'tuple'&/span&&span class=&p&&,&/span& &span class=&s&&'type'&/span&&span class=&p&&,&/span& &span class=&s&&'unichr'&/span&&span class=&p&&,&/span& &span class=&s&&'unicode'&/span&&span class=&p&&,&/span& &span class=&s&&'vars'&/span&&span class=&p&&,&/span& &span class=&s&&'xrange'&/span&&span class=&p&&,&/span& &span class=&s&&'zip'&/span&&span class=&p&&]&/span&
&span class=&o&&&&&&/span& &span class=&nb&&pow&/span&
&span class=&o&&&&/span&&span class=&n&&built&/span&&span class=&o&&-&/span&&span class=&ow&&in&/span& &span class=&n&&function&/span& &span class=&nb&&pow&/span&&span class=&o&&&&/span&
&span class=&o&&&&&&/span& &span class=&n&&mypow&/span& &span class=&o&&=&/span& &span class=&nb&&pow&/span&
&span class=&o&&&&&&/span& &span class=&n&&mypow&/span&
&span class=&o&&&&/span&&span class=&n&&built&/span&&span class=&o&&-&/span&&span class=&ow&&in&/span& &span class=&n&&function&/span& &span class=&nb&&pow&/span&&span class=&o&&&&/span&
&span class=&o&&&&&&/span& &span class=&n&&__builtins__&/span&&span class=&o&&.&/span&&span class=&n&&pow&/span& &span class=&o&&=&/span& &span class=&k&&lambda&/span& &span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&:&/span& &span class=&n&&mypow&/span&&span class=&p&&(&/span&&span class=&n&&x&/span&&span class=&p&&,&/span& &span class=&n&&y&/span&&span class=&p&&)&/span& &span class=&o&&-&/span& &span class=&mi&&1&/span&
&span class=&o&&&&&&/span& &span class=&nb&&pow&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&,&/span& &span class=&mi&&5&/span&&span class=&p&&)&/span&
&span class=&mi&&31&/span&
&span class=&o&&&&&&/span& &span class=&mi&&2&/span& &span class=&o&&**&/span& &span class=&mi&&5&/span&
&span class=&mi&&32&/span&
&/code&&/pre&&/div&可见通过运行时修改__builtin__模块里的绑定,pow()的行为就在运行时发生了变化;而 ** 运算符的行为是写死的改不了。
大大的回答的评论里的。算了还是发到顶层好了。诶这里
大大的回答真的误解一些了,
大大的回答才是完全正解。这个问题,要看最精辟的答案的请看
大大的,要深入到Python的内部机制的请看
大大的,…
来自子话题:
因为 PHP开发快速,部署更方便,前后又有很多使用 PHP成功的互联网企业,Java/Python/Ruby 开发网站成功的例子也很多。但是对于快速部署,特别是初期变动很大的项目,用 PHP是有优势的,当然还要根据团队的技术情况和特色来决定,比如知乎用 Python,也没什么问题。&br&&br&网上黑php的人很多,这里想说两句,一堆人黑 PHP说的好像用了 PHP就是见不得人似得。&br&&br&按他们的意思不用php做网站难道该用C++来写网站么?只会用点cpp没真正做过web的人才会喷php,真正写 web的人,不论你用 java ruby, python, 异或 nodejs,你都不会否认 php的优势和作用。&br&&br&当然,对于喷php的人来讲,不喷下php,怎么能显示自己的优越感呢?不吹捧下自己用的宇宙级别编程语言C++的话,如何才能输出自己的价值观呢?靠吹捧自己使用的工具来获得优越感不如实实在在的写两行代码去。
因为 PHP开发快速,部署更方便,前后又有很多使用 PHP成功的互联网企业,Java/Python/Ruby 开发网站成功的例子也很多。但是对于快速部署,特别是初期变动很大的项目,用 PHP是有优势的,当然还要根据团队的技术情况和特色来决定,比如知乎用 Python,也没什…
来自子话题:
我写过一个rss个小工具,&a href=&https://diy-/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&diy-/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&爬取搜狗微信公众号搜索的非公开接口,没做宣传的时候,流量不大,用的比较好,宣传后,用的人多了,就发现被反爬虫了,一直500&br&&br&通过chrome的开发者工具分析搜狗页面的请求,发现不是通过ip反爬,而是cookie里的几个关键字段,应对方法就是写个定时任务,维护一个cookie池,定时更新cookie,爬的时候随机取cookie,现在基本不会出现500&br&&br&所以应对反爬虫,先分析服务器是通过什么来反爬,通过ip就用代理,通过cookie就换cookie,针对性的构建request。
我写过一个rss个小工具,爬取搜狗微信公众号搜索的非公开接口,没做宣传的时候,流量不大,用的比较好,宣传后,用的人多了,就发现被反爬虫了,一直500通过chrome的开发者工具分析搜狗页面的请求,发现不是通过ip反爬,而是cookie里的…
来自子话题:
&a href=&/Yixiaohan/show-me-the-code& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/Yixiaohan/sh&/span&&span class=&invisible&&ow-me-the-code&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&/best-python-resources.html& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/bes&/span&&span class=&invisible&&t-python-resources.html&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&http://pbe.lightbird.net/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&pbe.lightbird.net/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&http://www.lightbird.net/dbe/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&lightbird.net/dbe/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&/karan/Projects& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/karan/Projec&/span&&span class=&invisible&&ts&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&/r/Python/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/r/Python/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&a href=&/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&根本停不下来。
根本停不下来。
来自子话题:
半年前学业水平考试发布成绩的时候,班里一个妹子忘了自己的学籍号后面几位,聊天的时候向我抱怨。&br&&br&现在回想起来,她应该也不是向我求助,但是说者无意,听者有心。于是我立马就用 Node.js 写了个脚本,用她的名字挨个穷举,分分钟就帮她查到成绩了。&br&&br&现在想起来着实有些奇怪,因为我只用了十五分钟,十五分钟内我分析了网页结构和请求格式,本来不太熟的 async 和 request 也用的驾轻就熟,那天 npm 也快的出奇,并且查询成绩的网站也没有因为访问量多而为难我。一切就那么顺理成章地完成了。&br&&br&最重要的是,我以后再也没有那么高效地写过代码,也许,那可能就是我写过的最好的 Node.js 脚本了。
半年前学业水平考试发布成绩的时候,班里一个妹子忘了自己的学籍号后面几位,聊天的时候向我抱怨。现在回想起来,她应该也不是向我求助,但是说者无意,听者有心。于是我立马就用 Node.js 写了个脚本,用她的名字挨个穷举,分分钟就帮她查到成绩了。现在想…
来自子话题:
我觉得一行行的读挺好的。。。
我觉得一行行的读挺好的。。。
来自子话题:
说两个和知乎相关的。&br&&br&因为我本人并不认可“&b&问题是大家的&/b&”的观点,对每个人都可以编辑问题这个设定表示接受但不认同。所以每次看到有好事者把问题原题改得面目全非的时候,感觉就像吃了死苍蝇一样恶心。(虽然有问题日志,但是大多数群众不会去看。)&br&&br&终于有一天,我被某人恶心得受不了了,就用python写了一个脚本:对于某个问题,每10秒刷新一次,当发现有人把问题改动得和设想的不一样,那就再自动改回来——这不是什么过激手段,也只不过利用规则而已。这个脚本至今用过两次,看日志,着实恶心到了几个所谓“公共编辑计划”的同学——想象下,偷偷摸摸凌晨两三点修改问题,不到10秒就被改回原样,那种抓狂的表情。&br&&br&另一个例子,我本人喜欢关注妹子,所以关注的人很多,这样带来几个问题:一个是tl太杂,一个是逼格不够高。所以需要定时清理一下。于是写脚本抓取了所以关注人的性别、问题数、赞同数、近期活跃时间等等特征,然后提取一百个作为训练数据,人工标注是否需要取关,再使用线性模型训练,判断哪些关注的价值比较低,好定期清理。(目前还没有清理过,因为还在对关注者价值机器学习的结果进行评估。)&br&&br&作为程序员,自娱自乐还是有些意思的,python干这些很顺手。
说两个和知乎相关的。因为我本人并不认可“问题是大家的”的观点,对每个人都可以编辑问题这个设定表示接受但不认同。所以每次看到有好事者把问题原题改得面目全非的时候,感觉就像吃了死苍蝇一样恶心。(虽然有问题日志,但是大多数群众不会去看。)终于有…
来自子话题:
这个问题用今天的视角来回答或许可以有不同的答案。&br&&br&Mozilla Rhino是一个纯JavaScript语言的实现;而Node.js是一套JavaScript程序的运行时环境,不但包括由V8提供的JavaScript核心语言的实现,还包括丰富的库,最有特点的就是其基于事件的I/O库。用一句话描述Node.js就是其广告词之一:“Evented I/O for V8 JavaScript”。&br&&br&那么为什么Rhino会被跟Node.js放在一起讨论?很明显这是来自在服务器端使用JavaScript编程的需求。&br&基于JVM的语言实现是服务器端程序的流行选择之一,而Rhino正是用Java实现、运行在JVM上的JavaScript引擎,可以无缝使用Java丰富的核心库和第三方库,所以有不少基于Rhino的服务器端JavaScript解决方案。&br&而Node.js则是基于Google V8 JavaScript引擎,自己实现I/O等核心库,后来开始流行基于NPM来管理各种第三方库,成为当下流行的新兴服务器端JavaScript解决方案。&br&&br&可以参考这个Wiki页面来看服务器端JavaScript都有哪些选择:&a href=&http://en.wikipedia.org/wiki/Comparison_of_server-side_JavaScript_solutions& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Comparison of server-side JavaScript solutions&i class=&icon-external&&&/i&&/a&&br&&br&回到楼主的直接问题:Rhino是否兼容Node.js。答案是:不兼容。兼容Node.js意味着要提供与其相同的基于事件的核心库封装,而Rhino只是个纯JavaScript引擎,并不提供Node.js的核心库API。&br&有个比较出名的基于Rhino的服务器端JavaScript框架,由Hannes Wallnofer编写的&a href=&http://ringojs.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RingoJS&i class=&icon-external&&&/i&&/a&,既提供了异步I/O的API,也可以使用传统Java的同步I/O,这个与Node.js可以说得上是竞争关系的。可参考Hannes自己发表的对比介绍:&a href=&http://hns.github.io//benchmark.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RingoJS vs. Node.js: Runtime Values&i class=&icon-external&&&/i&&/a&&br&&br&但现在在JVM上有了新的选择:Oracle新研发了&a href=&http://openjdk.java.net/projects/nashorn/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Nashorn&i class=&icon-external&&&/i&&/a&,一个新的、替代Rhino的、基于JVM的JavaScript引擎。在此基础上Oracle还研发了Node.jar,一个基于Nashorn的Node.js兼容实现。这与原生Node.js构成直接竞争的关系,恐怕是楼主最有可能感兴趣的东西。
这个问题用今天的视角来回答或许可以有不同的答案。Mozilla Rhino是一个纯JavaScript语言的实现;而Node.js是一套JavaScript程序的运行时环境,不但包括由V8提供的JavaScript核心语言的实现,还包括丰富的库,最有特点的就是其基于事件的I/O库。用一句话描…

我要回帖

更多关于 如果我爱你 的文章

 

随机推荐