为什么说Java是世界上最美的语言好的语言

我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言 - 文章 - 伯乐在线
& 我用爬虫一天时间“偷了”知乎一百万用户,只为证明PHP是世界上最好的语言
【更新】:源码在这里:
看了不少朋友圈里,处理内容本来就是PHP的强项,Python唯一的好处估计也就天生的Linux自带,和Perl一样,这点觉得挺不够意思的Linux,还是Mac厚道,天生就自带了Python、Perl、PHP、Ruby,当然我也很讨厌讨论一门语言的好坏,每门语言存在就一定有它的道理,反正PHP是全世界最好用的语言,大家都懂的^_^
前几天比较火的是一个人,其中有300万用户是有QQ号、昵称、空间名称等信息的,也就是说,有详情也就300万,跑了两周,这没什么,为了证明PHP是全世界最好的语言,虽然大家都懂的^_^,我用PHP写了一个多进程爬虫程序,只用了一天时间,就抓了知乎100万用户,目前跑到第8圈(depth=8)互相有关联(关注了和关注者)的用户。
爬虫程序设计:
因为知乎需要登录才能获取到关注者页面,所以从chrome登录之后把cookie拷贝下来给curl程序模拟登录。
使用两大独立循环进程组(用户索引进程组、用户详情进程组),用的是php的pcntl扩展,封装了一个非常好用的类,使用起来和golang的携程也差不多了。
下面是用户详情的截图,用户索引代码类似
这里插个题外话,经过测试,我的8核的Macbook,跑16进程的速度最快,而16核的Linux服务器,居然是跑8进程最快,这点有点让我莫名其妙了,不过既然测试出最后进程数,就按照最后设置就好啦。
1、用户索引进程组先以一个用户为起点,抓取这个用户的关注了和关注者,然后合并入库,因为是多进程,所以当有两个进程在处理同一个用户入库的时候就会出现重复的用户,所以数据库用户名字段一定要建立唯一索引,当然也可以用redis这些第三方缓存来保证原子性,这个就见仁见智了。
通过步骤一之后,我们就得到下面的用户列表:
2、用户详情进程组按照时间正序,拿到最先入库的用户抓取详情,并且把更新时间更新为当前时间,这样就可以变成一个死循环,程序可以无休止的跑,不断的循环更新用户信息。
程序稳定运行到第二天,突然没有新数据了,检查了一下发现知乎改规则了,不知是为了防我,还是碰巧,反正给我返回的数据是这样的
第一感觉就是胡乱给我输出数据让我采集不到,换了IP、模拟伪装了些数据,都没用,突然感觉这个很熟悉,会不会是gzip?抱着怀疑的态度,试了试gzip,首先当然是告诉知乎不要给我gzip压缩过的数据
把 “Accept-Encoding: gzip,deflate\r\n”; 改成 “Accept-Encoding:deflate\r\n”; 去掉了 gzip,然并卵!
看来知乎是强制要给我gzip压缩数据了,既然如此,那我就解压呗,查了一下php解压gzip,发现就一个函数gzinflate,于是把获取到得内容加上:
$content = substr($content, 10);
$content = gzinflate($content));
这里我真想说,PHP真的是全世界最好的语言,就两个函数,就彻底解决了问题,程序又欢快的跑起来了。
在匹配内容的时候,知乎的细心也是给了我无数的帮助,例如我要分清用户性别:
哈哈开玩笑的拉,其实是样式里面有 icon-profile-female 和 icon-profile-male ^_^
我蛋疼的抓了它那么多用户,到底有什么用呢?
其实没什么用,我就是闲的蛋疼 ^_^
有了这些信息,其实就可以做一些别人开头闭口就乱吹一通的大数据分析拉
最常见的当然是:
1、性别分布
2、地域分布
3、职业分布
4、每个职业的男女比例
当然,按照关注人数、浏览人数、提问数、回答数等排序,看看人民都在关注什么,民生、社会、地理、政治,整个互联网都尽收眼底拉。。
也许,你还可以把头像拿来分析,用开源的验黄程序,把色情的筛选出来,然后去拯救东莞? ^_^
然后,你还可以看看那些大学出来的人,最后都干了什么。
有了这些数据,是不是可以打开脑洞 ^_^
下面是利用这些数据做出来的一些有趣的图表,实时图表数据可以去 http://www.epooll.com/zhihu/ 上看
关于作者:当前位置: |
2017年编程语言排行榜出炉,“世界上最好的语言”php仅第8名
时间: 23:34 来源:开源之家 作者:开源之家
2017年编程语言排行榜出炉了。该排行榜由EEE Spectrum杂志发布。
在榜单上,我们可以发现,排在前三名的分别为:Python、C、Java 和 C++。
被程序员称为&世界上最好的语言&的php,仅仅排名为第8位。
对于此次榜单,网友纷纷发表了各自的看法:
网友一:千年的编程万年的C!懂的自懂,不解释!
网友二:都别挣了,Python都进小学教材了,以后是Python的天下。
网友三:我不管,PHP是世界上最好的语言,没有之一。
网友四:大C#在此,尔等还不膜拜~
据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Google、Twitter、GitHub 等平台,选出了排名前10的编程语言:
从去年开始,Python就借着人工智能的东风,热度一路船高水涨。Python可以说是一门比较功利的语言,它不复杂,读和写都非常易于使用,所以才有了&人生苦短,我用Python&这样的调侃。
对比于C++ ,C语言是功能减少的简化版本,这使C能够在内存有限的大量硬件设备中运行,如嵌入式硬件设备,以及在性能关键型的场景中运行,如处理大量的数据或处理音频和视频流时。最受欢迎的操作系统Linux的内核就是用C编写的。
Java 是企业拥戴的头号编程语言,它有三大杀手锏:静态类型、更强大的工具,以及具备广度和深度的库的生态系统。任何语言想在这三个领域完全取代Java都不是短时间内能够完成的,而且Java的跨平台特性是它最大的优势。
C++是一种使用非常广泛的计算机编程语言。它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格,是很多常用的桌面应用程序编程时的主要选择。
C#是微软公司在2000年6月发布的面向对象的编程语言,它使得程序员可以快速地编写各种基于MICROSOFT .NET平台的应用程序。C#能够提高C/C++程序员的开发效率,与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
R语言是开源的,主要用于统计分析、绘图、数据挖掘,在数据科学中非常流行。大数据的爆红催生了物联网的发展,很多项目都依赖多个数据源,而R语言恰好支持多个数据源加载数据,所以它是一种很有潜力的语言,在编程语言中扮演的角色是&隐形富豪&。
7. JavaScript
JavaScript主要应用于前端开发当中,它是一种强大的动态脚本语言,尤其善于开发优秀的网页和网页游戏。JavaScript的许多语法都是从C语言而来。它与所有浏览器兼容,并被用于超过90%的网页中。
PHP是一种服务器端的语言。如今,它被用于超过80%的网站,包括Facebook,Wikipedia,和WordPress。PHP不仅因为易于上手,而受到新晋开发者们的欢迎,也为很多成熟的开发者提供了大量的优秀特性。
Go是2007年由谷歌开发的一种编程语言,设计初衷是为了构建简单、快速、可靠的应用程序。由于开放源码,所以Go语言开源社区已经聚集了大量的贡献者。有来自Google的支持、活跃的社区,这些因素使得Go语言的热度攀升,越来越受到开发者的欢迎。
Swift是由苹果公司在2014年发布的新开发语言,所以非常适合用于编写苹果的系统和设备。由于Swift是开源的,所以开发者也可以在Windows或者Linux上进行开发,设计自己的编译器,但需确保自己写的软件和Apple的设备兼容。
值得提醒的是,编程语言没有好坏之分,通过语言流行度来决定学习方向并不是好的做法,而是应该根据开发的平台、软件的功能等等,来选择适合自己的语言进行深入学习,&世上语言千千万,我却独爱这一种!&。
源码下载网站还能当微博热搜用?亲测之
黑客揭秘网络程序坑人套路
阿里京东的“猫狗大战”:数学真好
开源之家广告栏目A
开源之家广告栏目B
开源之家广告栏目C
Copyright &
ENBOO.CN 版权所有 | |
客服 Q Q:
站内所有资源,只为爱好代码者提供技术交流、二次开发所用,会员无限制下载全站所有资源。
资源全部测试通过,配有前台及后台演示图,修复部分BUG,去除后门漏洞,请放心使用。您的位置:
java是世界上最好的语言吗_Java相比其他语言优势一览
java是世界上最好的语言吗?估计很多网友再看BAT招聘的时候都只招java工程师,那为什么java工程师那么吃香呢?下面为大家带来了Java相比其他语言优势一览,看看现在java的优势在哪里吧!
&什么是世界上最好的语言&,几乎只要有这个问题出现的地方,就有程序员们脸红脖子粗的辩驳。
然而不知从什么时候开始,&PHP是世界上最好的语言&,成为了大家默认的答案。
每次说出这句话,都能换来程序员们意味深长的微笑。
女:你能让这个论坛的人都吵起来,我就跟你吃饭。
PHP程序员:PHP是世界上最好的语言!
某论坛炸锅了,各种吵架&&
女:服了你了,我们走吧!
PHP程序员:今天不行,我一定要说服他们,PHP必须是最好的语言。
被黑也好,真的优秀也好,都不妨碍我们一起来了解一下PHP这种语言。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
PHP是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。
数据库访问比较
Java通过JDBC来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强。
系统设计架构比较
采用Java的web开发技术,需要使用的是面向对象的系统设计方法。用Java进行开发前期需要做大量的系统分析和设计的工作。
PHP采用面向过程的开发方法。
跨平台性比较
PHP & Java
Java和PHP都有很好的跨平台的特性。几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上。
开发成本比较
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
PHP最经典的组合就是:PHP + MySQL + Apache。非常适合开发中小型的web应用,开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
源代码安全比较
Java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。
PHP开发的程序的源代码都是公开的,他人拿到php开发的程序后都可以进行修改。
使用场景比较
Java一般用做企业级的开发,这种开发的重点适应业务需求的变动性,而且业务的复杂度也比较高。
PHP一般用来做内容管理系统、论坛(以上两项代表是康盛的产品)、博客(facebook)、社交(微博)。
俗话说得好:
语言只是工具,语言不重要,重要的是思想,什么语言只要钻研的够深,都是最好的语言。
手机游戏排行
最新游戏专题
||||CopyRight2014年-2018年 497.Com 497电玩 All Rights Reserved
备案编号:湘ICP备号为什么选择 Java 8 ? - 编程语言 - ITeye资讯
【编者按】本文是 DZone 指南 的专题文章,作者Trisha Gee是Java资深工程师和布道者。在本文中,Trisha Gee阐述了Java 8的重要特性以及使用的原因,由翻译。
以下为译文
在很多情况下,Java8 都能提升应用性能,而无需任何改变或性能调优。
Lambda 表达式、 Streams API 以及现有类的新方法都是提高生产力的重要工具。
Java8 新推出的 Optional 类型在处理 null 值时,能减少 NullPointerExceptions 的可能性,给开发者极大的灵活度。
去年年初,Java8 粉墨登场,现在Java7便已。在明年底 Java9 推出之前,Java8 是 Oracle 唯一支持的版本。然而,许多公司都将稳定性放在第一位,所以都还在用 Java7,甚至 Java6。
让我们来了解一下 Java8 的一些特性,让你在说服团队升级 Java 版本时理由能更充分一些。
可以取悦老板、满足业务或运营人员的一大卖点是:Java8 运行应用时速度更快。通常,升级至 Java8 的应用都能得到速度上的提升,即便没有做任何改变或调优。对于为了迎合特定 JVM 而做出调整的应用,这或许并不适用。但 Java8 性能更优的理由还有很多:
常见数据结构的性能提升:对表明,它们在 Java8 中的性能更好。这种提升非常吸引人——你无需学习新的 Streams API 或 Lambda 语法,甚至不需要改变现有的代码,就能提升应用的性能。
垃圾回收器提升:通常,Java 应用性能取决于垃圾回收的效率。的确,糟糕的垃圾回收会很大程度上影响应用性能。Java8 对垃圾回收做了很多改变,能有效提升性能并简化调优。最为人熟知的改变是 的引入。
Fork/Join 速度提升: 框架是在 Java7 中首次引入的,目的是简化使用 JVM 的并发程序。Java8 中投入了很多努力进一步提升该框架。现在,fork/join 在 Streams API 中用于并发操作。
此外,Java8 中还包含以支持并发。Oracle 在 JDK 8 中总结了这些性能提升。
代码行更少
Java 经常被人们诟病其样本代码太多。为此,Java8 新的 API 采用了更具功能性的方式,专注于实现什么而不是如何实现。
Lambda 表达式
Java8 中的 Lambda 表达式不仅是 Java 已有的匿名内部类—— Java8 推出之前传递行为的方法之外的语法糖衣。Lambda 表达式采用了 Java 7 的内部改变,因此运用起来相当流畅。想了解如何使用 Lambda 表达式简化代码,请继续阅读。
集合新方法介绍
Lambda 表达式与 Streams 可能是 Java8 最大的两个卖点,较少为人知的是 Java 现在允许开发者给现有类添加新的方法,而无需为了向后兼容性折中。这样,新的方法,结合 Lambda 表达式,能在很大程序上简化代码。比如,我们常常需要判断 Map 中的某个成员是否已经存在,如果不存在则创建之。在 Java8 之前,你可能会这么做:
private final Map&CustomerId, Customer& customers = new HashMap&&();
public void incrementCustomerOrders(CustomerId customerId) {
Customer customer = customers.get(customerId);
if (customer == null) {
customer = new Customer(customerId);
customers.put(customerId, customer);
customer.incrementOrders();
操作“检查某个成员在 map 中是否存在,若不存在则添加之”是如此常用,Java 现在为 Map 添加了一个新方法 computeIfAbsent 来支持这个操作。该方法的第二个参数是一个 Lambda 表达式,该表达式定义了如何创建缺少的成员。
public void incrementCustomerOrders(CustomerId customerId) {
Customer customer = customers.computeIfAbsent(customerId,
id -& new Customer(id));
customer.incrementOrders();
其实,Java8 还有一个新的特性,称为,它能使我们用更简洁的代码实现该功能:
public void incrementCustomerOrders(CustomerId customerId) {
Customer customer = customers.computeIfAbsent(customerId, Customer::new);
customer.incrementOrders();
Java8 为 Map 与 List 都添加了新方法。你可以了解一下这些新方法,看它们能节省多少行代码。
Streams API
Streams API 为查询、操纵数据提供了更多灵活度。这是一个很强大的功能。阅读这些文章能对 Streams API 有更全面的了解。在大数据时代建立流畅的数据查询会非常有趣,而且也是常用的操作。比如,你有一列书,你希望按照字母表顺序排列这些书的作者名,且不含重复。
public List&Author& getAllAuthorsAlphabetically(List&Book& books) {
List&Author& authors = new ArrayList&&();
for (Book book : books) {
Author author = book.getAuthor();
if (!authors.contains(author)) {
authors.add(author);
Collections.sort(authors, new Comparator&Author&() {
public int compare(Author o1, Author o2) {
return o1.getSurname().compareTo(o2.getSurname());
在上面的代码中,我们首先遍历这列书,如果书的作者从未在作者列表出现,则添加之。之后,我们根据作者的姓氏按字母表顺序对这些作者排序。这种排序操作正是 Streams 擅长解决的领域:
public List&Author& getAllAuthorsAlphabetically(List&Book& books) {
return books.Streams()
.map(book -& book.getAuthor())
.distinct()
.sorted((o1, o2) -& o1.getSurname().compareTo(o2.getSurname()))
.collect(Collectors.toList());
上面的做法不仅代码行更少,而且描述性更强——后来的开发者读到这段代码能够轻易理解:1、代码从书中获取作者姓名。2、只在意从未出现过的作者。3、返回的列表按照作者姓氏排序。将 Streams API 与其他新特性——、的新方法结合使用,可以得到更加简洁的版本:
public List&Author& getAllAuthorsAlphabetically(List&Book& books) {
return books.Streams()
.map(Book::getAuthor)
.distinct()
.sorted(Comparator.comparing(Author::getSurname))
.collect(Collectors.toList());
这里,排序方法按照作者姓氏排序,更加显而易见了。
此前我们浅聊过更利于开箱即用的性能,除了前面提到过的特性,Java8 能更好地利用 CPU 内核。将前例中的 Streams 方法替换为 parallelStreams,为不同的任务,使用 fork/join 将这些任务运行在多个核上。然而,并行化并不是加速所有运算的魔法。并行化运算总是会带来更多工作——分解运算,整合结果,因此无法总是减少时间。但是,对适合并行化的例子,这么做还是颇有效率的。
最大化减少 Null 指针
Java8 的另一个新特性是全新的 Optional 类型。该类型的含义是“我可能有值,也可能是 null。“这样一来,API 就可以区分可能为 null 的返回值与绝对不会是 null 的返回值,从而最小化 NullPointerException 异常的发生几率。
Optional 最赞的用处是处理 null。例如,假设我们要从一个列表中找一本特定的书,新创建的 findFirst() 方法会返回 Optional 类型的值,表明它无法确保是否找到特定的值。有了这个可选择的值,我们接下来可以决定,如果是 null 值要如何处理。如果想要抛出一个自定义的异常,我们可以使用 orElseThrow:
public Book findBookByTitle(List&Book& books, String title) {
Optional&Book& foundBook = books.Streams()
.filter(book -& book.getTitle().equals(title))
.findFirst();
return foundBook.orElseThrow(() -& new BookNotFoundException("Did not find book with title " + title));
或者,你可以返回其他书:
return foundBook.orElseGet(() -& getRecommendedAlternativeBook(title));
或者,返回 Optional 类型,这样,该方法的调用者可以自己决定书没找到时要怎么做。
Java8 作为 Java 语言的一次重大发布,包含语法上的更改、新的方法与数据类型,以及一些能默默提升应用性能的隐性改善。,因此许多公司都被迫向 Java8 转移。好消息是,Java8 对业务、现有的应用以及期望提高生产力的开发者都好好多。
原文链接:
必须改过来啊,早就开始用8了
垃圾回收改变很大呀

我要回帖

更多关于 世界上有多少种语言 的文章

 

随机推荐