中国IT实验室的网站为啥打不开 知乎

9.3K203 条评论分享收藏感谢收起赞同 1.5K54 条评论分享收藏感谢收起&但是由于运行selective—search实在是太慢啦,希望用更快的方法。&&br&直接上YOLO呗,可以参考&a href=&//link.zhihu.com/?target=http%3A//www.cosmosshadow.com/ml/%25E5%25BA%%//%25E7%%25E4%25BD%%25A3%%25B5%258B.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&物体检测&/a&中的 YOLO。
"但是由于运行selective—search实在是太慢啦,希望用更快的方法。" 直接上YOLO呗,可以参考中的 YOLO。
&ol&&li&问问题之前搜索一下,事半功倍。&/li&&li&没钱就买便宜的,钱不多就按预算买最贵的,钱多就买性价比最低的且最贵的。&/li&&li&学生党也分贫困生和普通学生还有富二代学生,所以,你看你自己口袋里的钱买吧。&/li&&li&想要手感好就去把所有键盘摸一把,哪个爽买哪个&/li&&li&我目前的键盘是 ZOWIE GEAR 的 CELERITAS II&/li&&/ol&&figure&&img src=&https://pic3.zhimg.com/50/v2-bb7a7e0ccd231d52a7d981_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&4032& data-rawheight=&3024& class=&origin_image zh-lightbox-thumb& width=&4032& data-original=&https://pic3.zhimg.com/50/v2-bb7a7e0ccd231d52a7d981_r.jpg&&&/figure&&p&键盘拆给你看看,光轴。段落感跟红轴差不多,直上直下。&/p&&p&外观简洁,摸起来有质感。打起来没有青轴和茶轴声音大,但是依然带感。&/p&&a class=&video-box& href=&//link.zhihu.com/?target=https%3A//www.zhihu.com/video/572928& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic3.zhimg.com/80/v2-7bd0e63a88a973c6b4764d30efe52e1e_b.jpg& data-lens-id=&572928&&
&img class=&thumbnail& src=&https://pic3.zhimg.com/80/v2-7bd0e63a88a973c6b4764d30efe52e1e_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/572928&/span&
&/a&&p&键帽上有内敛的红光,打起游戏中二感爆棚,&/p&&p&用来写代码也不错,再配上腥风血雨的音效:&a href=&//link.zhihu.com/?target=http%3A//www.yingdev.com/projects/tickeys& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Tickeys | 找对打字的感觉 | YingDev&/a&&/p&&p&简直就是文思如泉涌!&/p&
问问题之前搜索一下,事半功倍。没钱就买便宜的,钱不多就按预算买最贵的,钱多就买性价比最低的且最贵的。学生党也分贫困生和普通学生还有富二代学生,所以,你看你自己口袋里的钱买吧。想要手感好就去把所有键盘摸一把,哪个爽买哪个我目前的键盘是 ZOWIE…
&figure&&img src=&https://pic4.zhimg.com/v2-b4dc3fc47aa92ee9f3bd0571db9cffc9_b.jpg& data-rawwidth=&712& data-rawheight=&344& class=&origin_image zh-lightbox-thumb& width=&712& data-original=&https://pic4.zhimg.com/v2-b4dc3fc47aa92ee9f3bd0571db9cffc9_r.jpg&&&/figure&&p&很多粉丝都在询问如何学习Python以及学到什么程度就可以就业了。&/p&&p&&br&&/p&&p&Python学习实际上并没有那么困难,难就难在一个对电脑都不怎么熟悉的人,会被各种教材中略过的「&b&常识性&/b&」所搞得迷迷糊糊。举个例子,如果书中提到「....将这个东西推到队列中,等待后面的调度....」我估计这句话就能把初学者搞得够呛,什么是队列,什么又叫调度?&/p&&p&&br&&/p&&p&那么今天,我就将之前看的一些文章,排版从简单到难,一步一步的梳理下来,希望对粉丝有帮助。&/p&&p&&br&&/p&&h2&&b&Python基础&/b&&/h2&&p&&br&&/p&&p&&b&开发、调试、准备工具&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//www.python.org/downloads/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&开发环境下载&/a&:请直接下载python最新版本,无需纠结3.0+还是,2.7。&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//notepad-plus-plus.org/news/notepad-7.5.1-released.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编辑器1:notepad++&/a&:简单易用,有中文版,写好的代码在py环境中运行&/li&&li&&a href=&https://link.zhihu.com/?target=https%3A//code.visualstudio.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&编辑器2:vscode&/a&:实际上任何东西都可以在vscode上写,不过写python的话需要下载一些插件和配置&/li&&/ul&&p&&br&&/p&&p&&b&初级教程&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//www.liaoxuefeng.com/wiki/958fa6d3a2e542c000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&廖雪峰的python教程&/a&&/li&&/ul&&p&实际上,廖雪峰老大已经把python的全部知识都已经囊括在内了,作为&b&基础到中级&/b&部分,都可以看廖雪峰老大的教程&/p&&p&&br&&/p&&p&诚然,我并不打算推荐别的教程了,因为,廖大的教程已经做到:小白化,傻瓜化,稍微有点脑子的,都能学会。&/p&&p&&br&&/p&&p&&b&&i&操作系统基础(非紧急)&/i&&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.runoob.com/linux/linux-tutorial.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux基础教程&/a&&/li&&/ul&&p&说真的,如果你去找工作,不会linux,那么真的是很难,学习linux的唯一方法就是多用,因此我推荐大家可以安装:&a href=&https://link.zhihu.com/?target=https%3A//www.virtualbox.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Vbox&/a&虚拟机,安装一个Ubuntu,然后开始在上面打一下Linux命令。&/p&&p&&br&&/p&&p&&b&&i&数据结构与算法基础(非紧急)&/i&&/b&&/p&&p&在此,我只列出数据结构与算法的一些目录,自行百度&/p&&ul&&li&数组&/li&&li&链表(延伸:数组和链表的差别)&/li&&li&栈,队列,哈希表&/li&&li&树&/li&&li&几大常见排序算法&/li&&li&树的遍历算法&/li&&li&广度优先算法和深度优先算法&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&h2&&b&Python进阶路线&/b&&/h2&&p&在python进阶路线中,我将python分为「&b&爬虫开发&/b&」以及「&b&web开发&/b&」,这两个属于不同的大方向,在实际工作内容中,则是完全不同的编码。&/p&&p&&br&&/p&&p&但是,并不是说你学习了「&b&爬虫开发」&/b&就不用学习「&b&web开发&/b&」,实际上,他们两个路线会有很多很多的交集,应用场景,甚至是你做web开发的会经常被抓去写个爬虫抓数据,你做爬虫开发的也会被抓去做一下web开发,最重要的原因就是:&b&这两个方向都是关于网络的&/b&&/p&&p&&br&&/p&&p&&b&两个路线共同要学习的知识&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.ruanyifeng.com/blog/2016/08/http.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTTP 协议入门 - 阮一峰的网络日志&/a&:必须学习&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.nowamagic.net/academy/detail/1330310& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WSGI协议&/a&:python与服务器通讯的协议&/li&&/ul&&p&&br&&/p&&p&以下三个跟python完全没什么关系,但是实际上,这就是作python开发必备的知识,无论是爬虫还是web开发&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/html/index.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&HTML 教程&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/css/index.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CSS 教程&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.w3school.com.cn/js/index.asp& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JavaScript 教程&/a&&/li&&/ul&&p&&/p&&p&&b&Web开发(基础)&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//www.liaoxuefeng.com/wiki/958fa6d3a2e542c000/5877e93ecea4e6449acb157e9efae8b40b6000& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&廖雪峰web开发&/a&&/li&&/ul&&p&廖大的一套web开发教程,从最简单的到最后的建站部署,一套俱全。&/p&&p&&br&&/p&&p&&b&爬虫开发&/b&&/p&&ul&&li&&a href=&https://www.zhihu.com/question/& class=&internal&&如何入门 Python 爬虫?&/a&&/li&&/ul&&p&这个帖子,已经完全说明了如何去开发一个爬虫,我也就不多说了,当初我也是看这里学习的。&/p&&p&&br&&/p&&h2&&b&Python高级实践&/b&&/h2&&p&从初级到中级,最大的区别就是,你「懂」怎么使用python这个工具了,但是你没有开始造轮子。造轮子这个事情,在编程行业中最最常见,能否造轮子很大程度上「&b&直接决定了你这个人是否有可塑性&/b&」&/p&&p&&br&&/p&&p&&b&我敢把话放在这里,如果一个程序员一辈子只用过工具,而没有造过轮子,那么你这辈子都只是平庸之辈!&/b&&/p&&p&&br&&/p&&blockquote&世界上的东西早就被别人造完了,如果你想造一个别人没有的东西,那不如不做。---- &a class=&member_mention& href=&https://www.zhihu.com/people/ecc0ec035f& data-hash=&ecc0ec035f& data-hovercard=&p$b$ecc0ec035f&&@vczh&/a& &/blockquote&&p&&br&&/p&&p&字面意思,我们通过造轮子,来学习,并且实践我们所学,并且在造轮子的过程中,获得编程中最牛逼的一种能力:&b&解决问题的能力&/b&&/p&&p&&br&&/p&&p&&b&一些有实战意义的轮子&/b&&/p&&ul&&li&&a href=&https://link.zhihu.com/?target=https%3A//github.com/Andrew-liu/my_blog_tutorial& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Django搭建博客&/a&&/li&&li&&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/qiyeboy/p/7016540.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分布式爬虫&/a&&/li&&li&一起写一个web服务器系列:「&a href=&https://link.zhihu.com/?target=http%3A//python.jobbole.com/81524/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一起写一个 Web 服务器(1) - Python - 伯乐在线&/a&」「&a href=&https://link.zhihu.com/?target=http%3A//python.jobbole.com/81523/%3Futm_source%3Dblog.jobbole.com%26utm_medium%3DrelatedPosts& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一起写一个 Web 服务器(2) - Python - 伯乐在线&/a&」「&a href=&https://link.zhihu.com/?target=http%3A//python.jobbole.com/81820/%3Futm_source%3Dblog.jobbole.com%26utm_medium%3DrelatedPosts& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一起写一个Web服务器(3) - Python - 伯乐在线&/a&」&/li&&/ul&&p&&br&&/p&&h2&&b&学到什么程度可以用Python找工作&/b&&/h2&&p&&br&&/p&&p&实际上,这个因人而异,有些人学2-3个月就可以找到工作了,有些人学习python一年半载也找不到。&/p&&p&&br&&/p&&p&其中的重点,当然就是「&b&你学得怎样&/b&」,检验你学得怎样的标准并没有,我只能说一说我个人的一些检验标准,仅供参考&/p&&p&&br&&/p&&ul&&li&&b&读懂Flask源码,并且自己开发出一个简易的web框架&/b&&/li&&/ul&&p&不要觉得读懂Flask源码是一件多么可怕的事情,实际上读源码有很多的方法,这就考验了你如何解决问题的能力。&/p&&p&&br&&/p&&p&读源码,可以直接跑去读别人写的代码,&b&聪明一点的做法就是先去搜索有没有人对源码进行解读过,然后读别人解读过的源码,知道其思想以后,再去看Flask的代码&/b&。&/p&&p&&br&&/p&&p&当我们读懂Flask源码的时候,我们怎么证明自己能读懂了呢?答案就是:自己造一个简易的Web框架&/p&&p&&br&&/p&&p&&b&干货地址:&a href=&https://link.zhihu.com/?target=http%3A//python.jobbole.com/87323/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&flask 源码解析:简介 - Python - 伯乐在线&/a&&/b&&/p&&ul&&li&&b&仿站&/b&&/li&&/ul&&p&使用python模仿2,3个现有的站点,你基本上对于数据库,部署,服务器,python编程都有了非常全面的了解。那么你就可以开始去找工作了。&/p&&p&&br&&/p&&p&比如,知乎,电商平台,豆瓣。网上有很多教程,在这里就不一一介绍。&/p&&p&&br&&/p&&ul&&li&&b&造一个分布式爬虫框架&/b&&/li&&/ul&&p&干货地址:&a href=&https://link.zhihu.com/?target=http%3A//www.cnblogs.com/qiyeboy/p/7016540.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&分布式爬虫&/a&&/p&&p&&br&&/p&&h2&&b&Python学习时间&/b&&/h2&&p&第一个月:完成本文Python基础部分的学习&/p&&p&第二个月:完成Python进阶路线&/p&&p&第三个月:开始造轮子&/p&&p&第四个月:造轮子&/p&&p&第五个月:造轮子&/p&&p&第六个月:造轮子&/p&&p&第七个月:尝试找工作&/p&&p&&br&&/p&&h2&&b&关于写简历&/b&&/h2&&p&&a href=&https://www.zhihu.com/question//answer/& class=&internal&&方正:如果在简历上这样写,能找到工作吗?&/a&,我在这篇文章里有比较详细的解答&/p&&p&&br&&/p&&p&(完)&/p&&p&&br&&/p&&p&&br&&/p&&p&更多编程知识,请关注 &a class=&member_mention& href=&https://www.zhihu.com/people/8c969ff6289eaef711557e& data-hash=&8c969ff6289eaef711557e& data-hovercard=&p$b$8c969ff6289eaef711557e&&@方正&/a& &/p&&p&&/p&&p&&/p&
很多粉丝都在询问如何学习Python以及学到什么程度就可以就业了。 Python学习实际上并没有那么困难,难就难在一个对电脑都不怎么熟悉的人,会被各种教材中略过的「常识性」所搞得迷迷糊糊。举个例子,如果书中提到「....将这个东西推到队列中,等待后面的调…
&p&实现一个自用的博客系统技术上讲的确不难,因为有大量的开源组件可以使用,比如各种开发框架、编辑器、数据库等,实际上最困难的是实现一个也可以给其他人用的博客系统,并且需要认真谨慎地处理版本升级,这需要付出大量时间、精力和情感。&/p&&p&PS 已经维护了 7 年+的、Java 实现的博客系统仅供参考:&a href=&//link.zhihu.com/?target=https%3A//github.com/b3log/solo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&b3log/solo&/a&&/p&
实现一个自用的博客系统技术上讲的确不难,因为有大量的开源组件可以使用,比如各种开发框架、编辑器、数据库等,实际上最困难的是实现一个也可以给其他人用的博客系统,并且需要认真谨慎地处理版本升级,这需要付出大量时间、精力和情感。PS 已经维护了 7 …
&p&作者:我是旺财的爹&/p&&p&原文链接:&a href=&http://link.zhihu.com/?target=https%3A//www.nowcoder.com/discuss/38555%3Ftype%3D2%26order%3D3%26pos%3D76%26page%3D2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&nowcoder.com/discuss/38&/span&&span class=&invisible&&555?type=2&order=3&pos=76&page=2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金服的实习。八月,又经历了两轮面试,总算拿到转正offer。到此为止,我总算可以尽情地享受最后的校园时光了。&br&&/p&&p&希望我的经历与感悟能帮助到大家。 &/p&&h2&&b&我的读研经历 &/b&&/h2&&p&阿里是我读研阶段的一个重要目标,刚上研一的时候我便立下Flag,计划了读研三年要做的事情、要学的东西。翻翻我的博客,居然还能找到当时写的读研计划(想想时间过的真的好快呀)。阿里在我心中一直是技术者的朝圣地,聚集了一群技术狂热分子,为了提升一点点的性能可以废寝忘食。在立下这个flag后,我便把我要去阿里的想法告诉了身边的所有人。我不想给自己留有后路,既然牛逼吹出去了,那就得落实到行动上。 &/p&&p&&br&&/p&&p&我当时的计划是这样的,研一玩命做项目,毕竟写代码是一项孰能生巧的技术,多写代码自然能加深对技术的理解。事实也确实证明了这一点。我大四毕业的那个暑假,第一次接触《深入理解JVM虚拟机》,当时看完之后是一脸懵逼的,所有的汉字都认识,但连成一条句子后咋就不明白呢?然后怀着这种一脸懵逼的状态,强行把这本书看完了,但由于理解的不够深刻,很快就忘记了。然后经过一年疯狂做项目,当我再抱起这本书时,我对这本书的感觉有了180度的转变,通俗易懂啊。我怀疑自己当时为什么这么傻。而在这一年之内,我一共做了四个项目。所以说,写代码能潜移默化地提升你对技术的理解程度。 &/p&&p&记得我们学校考研结果公布是在三月底,得知我录取了,短暂的高兴了一下,第二天便去了导师实验室,参与到项目中去。因为我心理很清楚,我的目标是阿里。&br&&/p&&p&刚去实验室的时候感觉自己完全是一只小白,师兄们开会讨论的东西我竟然一个字都听不懂,刚开始分到的工作也很难顺利的完成。但我是一个天生不服的人,我越是不懂,我越是要征服。(PS:追女生也一样,当时看上了一个高冷型女神。越是高冷,我越要拿下……省略一万字……最后成功了)。我渐渐跟上了师兄们的步伐,从第二个项目开始,我一直是项目负责人了。&br&&/p&&p&我给自己定的方向是Java,而实验室的项目五花八门,Qt、C++、图像图形……,但我心里清楚,这些项目可以拓宽我的视野,可以锻炼我的学习能力、思维方式,但要深入理解的技术还是Java。所以我利用项目空窗期,看了很多Java方面的书籍,文末我列了一份清单供大家参考。
&/p&&p&研一做了一年项目之后,感觉自己解决问题的能力、快速上手新技术的能力有所提升,但做项目一味求快、一味赶时间,我对很多技术的理解仅停留表面。所以更多时候我感觉自己是在搬砖,很难写出高质量的代码。当时我决定,研二的上半学期一定要好好稳固基础,深入理解技术背后的原理,放慢做项目的节奏,不一味地盲目求快。 &/p&&p&然而研二因为种种原因,我去了一家创业公司实习。既然我无法选择,那我就拥抱变化。既来之则安之,我希望自己所花的时间都有所收获。所以我全身心投入到工作中去。公司安排我做前端,虽然这并不是我想干的事情,但当前别无选择,既然做那就得做好。我花了一个月的时间怒刷前端知识,学习Angular、React,了解它们的设计思想,学习JS背后的原理,也看到了前端目前的发展状况。前端的技术迭代速度很快,但技术背后的原理都是类似的,所以抓住技术背后的本质才是最重要的。&br&&/p&&p&这段实习一直持续到了今年一月,我心理清楚,二月底三月初阿里的实习招聘就要开始,所以我挤出中午休息时间、晚上下班后的时间、周末的时间,复习我之前积累的东西。
&/p&&p& 三月三号,人生的第一次面试,在看到杭州的电话时,那一刻的心情既忐忑又兴奋。在此之前,我并不清楚自己的水平在所有应届生中处于一个怎样的层次,在电话接通之前我已经做好了充分的心理准备,想象了各种被面试官吊打的画面。第一次面试持续了54分钟,面试官似乎破有耐心,整个面试过程相谈甚欢。那一次的面试给了我巨大的信心,因为我清楚,我离我的目标更近了一步。
&/p&&p&在接下来的一个月中,我陆陆续续接到了五次面试电话,每一次面试都是一次学习的机会,能发现自己的不足,在与面试官交流的过程中也能了解到最新的技术、最佳的实现方法。
&/p&&p&四月十四,记得那天刚替导师给本科生上完算法课,晚饭过后便收到的阿里的offer。当时的喜悦之情溢于言表,这么久的努力没有白费。但我心里也清楚,阿里的实习转正率向来很低,要想通过实习留下来也不是一件容易的事。所以在收到阿里offer之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成:拿下阿里转正offer。 &/p&&p&&br&&/p&&p&5.20,一个美好的日子,我怀着憧憬、忐忑、兴奋的心情走进了支付宝大楼,开始了我三个月的实习生涯。这三个月的实习让我学到了很多,我看到了每天的进步,也看到了自己的不足。这100天经历了太多的事情,有太多的体会,有空我再单独写一篇实习期间的感悟与大家分享。 &/p&&p&9.1晚上11点,我的状态从『面试中』变成了『待跟进offer』,我会心一笑,我达成了人生第一阶段的目标。那一刻我没有太多的激动,在经过了2017年8个月的持久作战之后,这个offer早已在我的意料之中。 &/p&&p&第二天是周六,这个周末我给自己放了两天的假。虽然在杭州已经呆了102天,虽然支付宝大楼就在西湖边,但每天两点一线的工作,我并没有去过西湖。那一晚我的基友(帅气的天哥,文末附有征婚启示)得知我收到offer后便立即买票,坐了一夜的火车来杭州为我庆祝。也托他的福,在这个周末我第一次游览了这座美丽的城市。 &/p&&p&&br&&/p&&p&最后的校园时光,我给自己定了一个新的目标,这个目标也许充满了挑战、充满了艰辛与困难,但我想如果能达成,我的人生将会有很大的改变。在人生的路上,我还在奋斗。希望与各位共勉。 &/p&&hr&&h2&&b& 一些建议&/b& &/h2&&p&&b& 建议1:养成写博客的习惯 &/b&&/p&&p&在面试阿里的过程中,博客帮了我很大的忙。并不是说有博客在面试中会加分,而是写博客的过程能加深你对知识的理解,而且回顾起来也特别高效(毕竟是自己写的东西)。 &/p&&p&我从研一开始便养成了写博客的习惯,现在先过头来,这两年我一共写了185篇文章,有22W的访问量,也很荣幸称为专家博主。我的博客现在已经成为我一笔最宝贵的财富,记录了我技术的整个体系结构,也记录了学习技术的心路历程。 &/p&&p&可能很多同学都有写博客的经历,但能长期坚持的少之又少。我想告诉大家,任何事情都贵在坚持。只要坚持21天就能养成习惯。有的时候对这件事缺乏兴趣了很难再持续下去,但想想自己的目标,咬咬牙坚持下去,养成习惯你就赢了。 &/p&&p&我的博客一般都是看完一本书后的总结,我会把一本书中最核心的东西,按照我的理解把它们记录下来。每一本书我都会看三遍,第一遍是快速浏览,了解整本书的体系结构、作者的行文思路,知道书中重要的、不重要的内容,也就是要建立起全局观。第二遍我会精读,把那些我认为重要的内容挑选出来着重阅读、反复理解、吃透。第三遍阅读,往往会冒出新的理解,我时常有这种『书读百遍,其义自见』的感觉。三遍读完后,我便按照自己的理解,把核心内容写成博客。由于是自己的写的东西,所以在复习的时候只要花上三五分钟通读一遍,所有的知识点又被唤醒。 &/p&&h2&建议2:未完待续…… &/h2&&hr&&h2& Java体系结构整理 &/h2&&ul&&li&
&/li&&ul&&li&
Java集合框架
Java并发编程&br&&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(一)——并发编程需要注意的问题&/a&&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(二)——重排序&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(三)——volatile&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(四)——线程的状态&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(五)——中断&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(六)——线程间的通信&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(七)——Executors&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(九)——批量获取多条线程的执行结果&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十)——线程池(1)&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十一)——线程池(2)&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十二)——线程安全&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发编程的艺术(十三)——锁优化&/a& &/li&&/ul&&/ul&&p&&br&&/p&&ul&&ul&&li&
Java并发容器&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java并发容器大合集&/a& &/li&&li&
Java虚拟机&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(一)——JVM内存模型&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(二)——揭开HotSpot对象创建的奥秘&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(三)——垃圾收集策略详解&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(四)——对象内存的分配策略&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(五)——HotSpot垃圾收集器详解&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(六)——JVM性能调优实战&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(七)——Class文件结构&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(八)——类加载的时机&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入理解JVM(九)——类加载的过程&/a& &/li&&li&
设计模式&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/5767333& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&23种设计模式-大闲人柴毛毛的博客&/a& &/li&&li&
Spring核心思想&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(一)——IoC的基本概念(从面向对象角度介绍)&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(二)——IoC容器的实现&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(三)——Bean的生命周期&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&深入剖析Spring(四)——AOP&/a& &/li&&li&
面向对象的思想
Java8新特性&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——Lambda表达式(一)&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——StreamAPI(一)&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java8新特性——StreamAPI(二)&/a& &/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&
计算机基础
&/li&&ul&&li&
算法&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/6840444& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据结构与算法-大闲人柴毛毛的博客&/a& &/li&&li&
数据结构&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&彻底搞懂红黑树&/a& &/li&&li&
计算机网络&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&计算机网络传输层知识点全覆盖&/a& &/li&&li&
数据库&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库索引全面解析&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库事务详解&/a& &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据库三大范式&/a& &/li&&/ul&&/ul&&p&&br&&/p&&ul&&li&
Linux&br&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/category/3112597& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Linux常用指令-大闲人柴毛毛的博客&/a& &/li&&/ul&&p&&br&&/p&&ul&&li&
架构高性能网站&br&&/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(一)——了解衡量网站性能的指标&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(二)——动态内容缓存&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(三)——浏览器缓存&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(四)——反向代理缓存&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(五)——Web组件分离&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(六)——构建数据缓冲区&/a& &/li&&li&&a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/u/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&架构高性能网站秘笈(七)——负载均衡&/a& &/li&&/ul&&hr&&p& 各位同学加油,祝秋招顺利!&/p&
作者:我是旺财的爹原文链接: 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金服的实习。八月,又经历了两轮面试,总算拿…
&figure&&img src=&https://pic2.zhimg.com/v2-59b7417aaba40d4b6bf9680_b.jpg& data-rawwidth=&750& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic2.zhimg.com/v2-59b7417aaba40d4b6bf9680_r.jpg&&&/figure&&blockquote&&p&原文链接:&a href=&https://link.zhihu.com/?target=http%3A//www.jianshu.com/p/5e& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&一遍记住Java常用的八种排序算法与代码实现&/a&&/p&&p&作者:breakingsword&/p&&/blockquote&&h1&1.直接插入排序&/h1&&blockquote&&p&经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。&/p&&/blockquote&&ol&&li&将第一个数和第二个数排序,然后构成一个有序序列&/li&&li&将第三个数插入进去,构成一个新的有序序列。&/li&&li&对第四个数、第五个数……直到最后一个数,重复第二步。&/li&&/ol&&br&&p&如何写写成代码:&/p&&ol&&li&首先设定插入次数,即循环次数,for(int i=1;i&i++),1个数的那次不用插入。&/li&&li&设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。&/li&&li&从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。&/li&&li&将当前数放置到空着的位置,即j+1。&/li&&/ol&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public void insertSort(int[] a){
int length=a.//数组长度,将这个提取出来是为了提高速度。
int insertN//要插入的数
for(int i=1;i&i++){//插入的次数
insertNum=a[i];//要插入的数
int j=i-1;//已经排序好的序列元素个数
while(j&=0&&a[j]&insertNum){//序列从后到前循环,将大于insertNum的数向后移动一格
a[j+1]=a[j];//元素移动一格
a[j+1]=insertN//将需要插入的数放在要插入的位置。
&/code&&/pre&&/div&&h1&2.希尔排序&/h1&&blockquote&&p&对于直接插入排序问题,数据量巨大时。&/p&&/blockquote&&ol&&li&将数的个数设为n,取奇数k=n/2,将下标差值为k的书分为一组,构成有序序列。&/li&&li&再取k=k/2 ,将下标差值为k的书分为一组,构成有序序列。&/li&&li&重复第二步,直到k=1执行简单插入排序。&/li&&/ol&&br&&p&如何写成代码:&/p&&ol&&li&首先确定分的组数。&/li&&li&然后对组中元素进行插入排序。&/li&&li&然后将length/2,重复1,2步,直到length=0为止。&/li&&/ol&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public
void sheelSort(int[] a){
while (d!=0) {
for (int x = 0; x & x++) {//分的组数
for (int i = x + i & a. i += d) {//组中的元素,从第二个数开始
int j = i -//j为有序序列最后一位的位数
int temp = a[i];//要插入的元素
for (; j &= 0 && temp & a[j]; j -= d) {//从后往前遍历。
a[j + d] = a[j];//向后移动d位
a[j + d] =
&/code&&/pre&&/div&&h1&3.简单选择排序&/h1&&blockquote&&p&常用于取序列中最大最小的几个数时。&/p&&/blockquote&&p&(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)&/p&&ol&&li&遍历整个序列,将最小的数放在最前面。&/li&&li&遍历剩下的序列,将最小的数放在最前面。&/li&&li&重复第二步,直到只剩下一个数。&/li&&/ol&&br&&p&如何写成代码:&/p&&ol&&li&首先确定循环次数,并且记住当前数字和当前位置。&/li&&li&将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。&/li&&li&比对完成后,将最小的值与第一个数的值交换。&/li&&li&重复2、3步。&/li&&/ol&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&
public void selectSort(int[] a) {
int length = a.
for (int i = 0; i & i++) {//循环次数
int key = a[i];
int position=i;
for (int j = i + 1; j & j++) {//选出最小的值和位置
if (a[j] & key) {
key = a[j];
position =
a[position]=a[i];//交换位置
&/code&&/pre&&/div&&h1&4.堆排序&/h1&&blockquote&&p&对简单选择排序的优化。&/p&&/blockquote&&ol&&li&将序列构建成大顶堆。&/li&&li&将根节点与最后一个节点交换,然后断开最后一个节点。&/li&&li&重复第一、二步,直到所有节点断开。&/li&&/ol&&br&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public
void heapSort(int[] a){
System.out.println(&开始排序&);
int arrayLength=a.
//循环建堆
for(int i=0;i&arrayLength-1;i++){
buildMaxHeap(a,arrayLength-1-i);
//交换堆顶和最后一个元素
swap(a,0,arrayLength-1-i);
System.out.println(Arrays.toString(a));
void swap(int[] data, int i, int j) {
// TODO Auto-generated method stub
int tmp=data[i];
data[i]=data[j];
//对data数组从0到lastIndex建大顶堆
private void buildMaxHeap(int[] data, int lastIndex) {
// TODO Auto-generated method stub
//从lastIndex处节点(最后一个节点)的父节点开始
for(int i=(lastIndex-1)/2;i&=0;i--){
//k保存正在判断的节点
//如果当前k节点的子节点存在
while(k*2+1&=lastIndex){
//k节点的左子节点的索引
int biggerIndex=2*k+1;
//如果biggerIndex小于lastIndex,即biggerIndex+1代表的k节点的右子节点存在
if(biggerIndex&lastIndex){
//若果右子节点的值较大
if(data[biggerIndex]&data[biggerIndex+1]){
//biggerIndex总是记录较大子节点的索引
biggerIndex++;
//如果k节点的值小于其较大的子节点的值
if(data[k]&data[biggerIndex]){
//交换他们
swap(data,k,biggerIndex);
//将biggerIndex赋予k,开始while循环的下一次循环,重新保证k节点的值大于其左右子节点的值
&/code&&/pre&&/div&&h1&5.冒泡排序&/h1&&blockquote&&p&一般不用。&/p&&/blockquote&&ol&&li&将序列中所有元素两两比较,将最大的放在最后面。&/li&&li&将剩余序列中所有元素两两比较,将最大的放在最后面。&/li&&li&重复第二步,直到只剩下一个数。&/li&&/ol&&br&&p&如何写成代码:&/p&&ol&&li&设置循环次数。&/li&&li&设置开始比较的位数,和结束的位数。&/li&&li&两两比较,将最小的放到前面去。&/li&&li&重复2、3步,直到循环次数完毕。&/li&&/ol&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public void bubbleSort(int[] a){
int length=a.
for(int i=0;i&a.i++){
for(int j=0;j&a.length-i-1;j++){
if(a[j]&a[j+1]){
temp=a[j];
a[j]=a[j+1];
&/code&&/pre&&/div&&h1&6.快速排序&/h1&&blockquote&&p&要求时间最快时。&/p&&/blockquote&&ol&&li&选择第一个数为p,小于p的数放在左边,大于p的数放在右边。&/li&&li&递归的将p左边和右边的数都按照第一步进行,直到不能递归。&/li&&/ol&&br&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public static void quickSort(int[] numbers, int start, int end) {
if (start & end) {
int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)
// 记录临时中间值
int i = start, j =
while ((numbers[i] & base) && (i & end))
while ((numbers[j] & base) && (j & start))
if (i &= j) {
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] =
} while (i &= j);
if (start & j)
quickSort(numbers, start, j);
if (end & i)
quickSort(numbers, i, end);
&/code&&/pre&&/div&&h1&7.归并排序&/h1&&blockquote&&p&速度仅次于快排,内存少的时候使用,可以进行并行计算的时候使用。&/p&&/blockquote&&ol&&li&选择相邻两个数组成一个有序序列。&/li&&li&选择相邻的两个有序序列组成一个有序序列。&/li&&li&重复第二步,直到全部组成一个有序序列。&/li&&/ol&&br&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public static void mergeSort(int[] numbers, int left, int right) {
int t = 1;// 每组元素个数
int size = right - left + 1;
while (t & size) {
int s =// 本次循环每组元素个数
while (i + (t - 1) & size) {
merge(numbers, i, i + (s - 1), i + (t - 1));
if (i + (s - 1) & right)
merge(numbers, i, i + (s - 1), right);
private static void merge(int[] data, int p, int q, int r) {
int[] B = new int[data.length];
int t = q + 1;
while (s &= q && t &= r) {
if (data[s] &= data[t]) {
B[k] = data[s];
B[k] = data[t];
if (s == q + 1)
B[k++] = data[t++];
B[k++] = data[s++];
for (int i = i &= i++)
data[i] = B[i];
&/code&&/pre&&/div&&h1&8.基数排序&/h1&&blockquote&&p&用于大量数,很长的数进行排序时。&/p&&/blockquote&&ol&&li&将所有的数的个位数取出,按照个位数进行排序,构成一个序列。&/li&&li&将新构成的所有的数的十位数取出,按照十位数进行排序,构成一个序列。&/li&&/ol&&br&&p&代码实现如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&public void sort(int[] array) {
//首先确定排序的趟数;
int max = array[0];
for (int i = 1; i & array. i++) {
if (array[i] & max) {
max = array[i];
int time = 0;
//判断位数;
while (max & 0) {
max /= 10;
//建立10个队列;
List&ArrayList& queue = new ArrayList&ArrayList&();
for (int i = 0; i & 10; i++) {
ArrayList&Integer& queue1 = new ArrayList&Integer&();
queue.add(queue1);
//进行time次分配和收集;
for (int i = 0; i & i++) {
//分配数组元素;
for (int j = 0; j & array. j++) {
//得到数字的第time+1位数;
int x = array[j] % (int) Math.pow(10, i + 1) / (int) Math.pow(10, i);
ArrayList&Integer& queue2 = queue.get(x);
queue2.add(array[j]);
queue.set(x, queue2);
int count = 0;//元素计数器;
//收集队列元素;
for (int k = 0; k & 10; k++) {
while (queue.get(k).size() & 0) {
ArrayList&Integer& queue3 = queue.get(k);
array[count] = queue3.get(0);
queue3.remove(0);
&/code&&/pre&&/div&&br&&a href=&https://link.zhihu.com/?target=http%3A//www.jianshu.com/p/5e& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&阅读原文&/a&&figure&&img src=&https://pic4.zhimg.com/v2-9d70dd9d3a01aeb00034_b.jpg& data-rawwidth=&900& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic4.zhimg.com/v2-9d70dd9d3a01aeb00034_r.jpg&&&/figure&
原文链接:作者:breakingsword1.直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四…
&figure&&img src=&https://pic3.zhimg.com/v2-72d0bfc3ae865c71ff7a59ba742af115_b.jpg& data-rawwidth=&500& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-72d0bfc3ae865c71ff7a59ba742af115_r.jpg&&&/figure&&p&代码放在这里:&a href=&https://link.zhihu.com/?target=https%3A//github.com/wzyonggege/python-wechat-itchat& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&wzyonggege/python-wechat-itchat&/a&&/p&&p&词云那里可以换成小黄人图片&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e12fc06b8b79dbc7d03a6fc79fc38ea9_b.jpg& data-rawwidth=&900& data-rawheight=&901& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic4.zhimg.com/v2-e12fc06b8b79dbc7d03a6fc79fc38ea9_r.jpg&&&/figure&&br&&p&---------------------------------------------------------------------------------------------------&/p&&h2&0. itchat&/h2&&p&最近研究了一些微信的玩法,我们可以通过网页版的微信&a href=&https://link.zhihu.com/?target=https%3A//wx.qq.com/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&微信网页版&/a&,扫码登录后去抓包爬取信息,还可以post去发送信息。&/p&&p&然后发现了&a href=&https://link.zhihu.com/?target=https%3A//github.com/littlecodersh/ItChat/tree/robot& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&itchat&/a&这个开源项目,&strong&作者是&a href=&https://www.zhihu.com/people/littlecoder-3/answers& class=&internal&&@LittleCoder&/a&&/strong&,已经把微信的接口完成了,大大的方便了我们对微信的挖掘,以下的功能也通过itchat来实现。&/p&&p&安装itchat这个库&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&pip install itchat
&/code&&/pre&&/div&&p&先来段简单的试用,实现微信的登录,运行下面代码会生成一个二维码,扫码之后手机端确认登录,就会发送一条信息给‘filehelper’,这个&strong&filehelper&/strong&就是微信上的文件传输助手。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&itchat&/span&
&span class=&c1&&# 登录&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&login&/span&&span class=&p&&()&/span&
&span class=&c1&&# 发送消息&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&send&/span&&span class=&p&&(&/span&&span class=&s1&&u'你好'&/span&&span class=&p&&,&/span& &span class=&s1&&'filehelper'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&除了登录和发送消息我们还可以这么来玩,往下走~&/p&&br&&h2&1. 微信好友男女比例&/h2&&p&想统计下自己微信里好友的性别比例,当然也是很简单,先获取好友列表,统计列表里性别计数&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&kn&&import&/span& &span class=&nn&&itchat&/span&
&span class=&c1&&# 先登录&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&login&/span&&span class=&p&&()&/span&
&span class=&c1&&# 获取好友列表&/span&
&span class=&n&&friends&/span& &span class=&o&&=&/span& &span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&get_friends&/span&&span class=&p&&(&/span&&span class=&n&&update&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&:]&/span&
&span class=&c1&&# 初始化计数器,有男有女,当然,有些人是不填的&/span&
&span class=&n&&male&/span& &span class=&o&&=&/span& &span class=&n&&female&/span& &span class=&o&&=&/span& &span class=&n&&other&/span& &span class=&o&&=&/span& &span class=&mi&&0&/span&
&span class=&c1&&# 遍历这个列表,列表里第一位是自己,所以从&自己&之后开始计算&/span&
&span class=&c1&&# 1表示男性,2女性&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&friends&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:]:&/span&
&span class=&n&&sex&/span& &span class=&o&&=&/span& &span class=&n&&i&/span&&span class=&p&&[&/span&&span class=&s2&&&Sex&&/span&&span class=&p&&]&/span&
&span class=&k&&if&/span& &span class=&n&&sex&/span& &span class=&o&&==&/span& &span class=&mi&&1&/span&&span class=&p&&:&/span&
&span class=&n&&male&/span& &span class=&o&&+=&/span& &span class=&mi&&1&/span&
&span class=&k&&elif&/span& &span class=&n&&sex&/span& &span class=&o&&==&/span& &span class=&mi&&2&/span&&span class=&p&&:&/span&
&span class=&n&&female&/span& &span class=&o&&+=&/span& &span class=&mi&&1&/span&
&span class=&k&&else&/span&&span class=&p&&:&/span&
&span class=&n&&other&/span& &span class=&o&&+=&/span& &span class=&mi&&1&/span&
&span class=&c1&&# 总数算上,好计算比例啊~&/span&
&span class=&n&&total&/span& &span class=&o&&=&/span& &span class=&nb&&len&/span&&span class=&p&&(&/span&&span class=&n&&friends&/span&&span class=&p&&[&/span&&span class=&mi&&1&/span&&span class=&p&&:])&/span&
&span class=&c1&&# 好了,打印结果&/span&
&span class=&k&&print&/span& &span class=&s2&&u&男性好友:&/span&&span class=&si&&%.2f%%&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&male&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&u&女性好友:&/span&&span class=&si&&%.2f%%&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&female&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&s2&&u&其他:&/span&&span class=&si&&%.2f%%&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&other&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&好看看结果:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c2f4b338_b.jpg& data-rawwidth=&158& data-rawheight=&73& class=&content_image& width=&158&&&/figure&&br&&p&(好吧,暴露了我男性友人较多的真相~~)&/p&&p&好像不够直观,有兴趣的朋友可以加上可视化的展示,我这里用基于python的&a href=&https://link.zhihu.com/?target=https%3A//github.com/yufeiminds/echarts-python& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Echarts&/a&(有机会再细讲) &br&先安装了&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&pip install echarts-python
&/code&&/pre&&/div&&p&展示比例一般使用百分比圆饼表吧&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# 使用echarts,加上这段&/span&
&span class=&kn&&from&/span& &span class=&nn&&echarts&/span& &span class=&kn&&import&/span& &span class=&n&&Echart&/span&&span class=&p&&,&/span& &span class=&n&&Legend&/span&&span class=&p&&,&/span& &span class=&n&&Pie&/span&
&span class=&n&&chart&/span& &span class=&o&&=&/span& &span class=&n&&Echart&/span&&span class=&p&&(&/span&&span class=&s1&&u'&/span&&span class=&si&&%s&/span&&span class=&s1&&的微信好友性别比例'&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&n&&friends&/span&&span class=&p&&[&/span&&span class=&mi&&0&/span&&span class=&p&&][&/span&&span class=&s1&&'NickName'&/span&&span class=&p&&]),&/span& &span class=&s1&&'from WeChat'&/span&&span class=&p&&)&/span&
&span class=&n&&chart&/span&&span class=&o&&.&/span&&span class=&n&&use&/span&&span class=&p&&(&/span&&span class=&n&&Pie&/span&&span class=&p&&(&/span&&span class=&s1&&'WeChat'&/span&&span class=&p&&,&/span&
&span class=&p&&[{&/span&&span class=&s1&&'value'&/span&&span class=&p&&:&/span& &span class=&n&&male&/span&&span class=&p&&,&/span& &span class=&s1&&'name'&/span&&span class=&p&&:&/span& &span class=&s1&&u'男性 &/span&&span class=&si&&%.2f%%&/span&&span class=&s1&&'&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&male&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)},&/span&
&span class=&p&&{&/span&&span class=&s1&&'value'&/span&&span class=&p&&:&/span& &span class=&n&&female&/span&&span class=&p&&,&/span& &span class=&s1&&'name'&/span&&span class=&p&&:&/span& &span class=&s1&&u'女性 &/span&&span class=&si&&%.2f%%&/span&&span class=&s1&&'&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&female&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)},&/span&
&span class=&p&&{&/span&&span class=&s1&&'value'&/span&&span class=&p&&:&/span& &span class=&n&&other&/span&&span class=&p&&,&/span& &span class=&s1&&'name'&/span&&span class=&p&&:&/span& &span class=&s1&&u'其他 &/span&&span class=&si&&%.2f%%&/span&&span class=&s1&&'&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&nb&&float&/span&&span class=&p&&(&/span&&span class=&n&&other&/span&&span class=&p&&)&/span& &span class=&o&&/&/span& &span class=&n&&total&/span& &span class=&o&&*&/span& &span class=&mi&&100&/span&&span class=&p&&)}],&/span&
&span class=&n&&radius&/span&&span class=&o&&=&/span&&span class=&p&&[&/span&&span class=&s2&&&50%&&/span&&span class=&p&&,&/span& &span class=&s2&&&70%&&/span&&span class=&p&&]))&/span&
&span class=&n&&chart&/span&&span class=&o&&.&/span&&span class=&n&&use&/span&&span class=&p&&(&/span&&span class=&n&&Legend&/span&&span class=&p&&([&/span&&span class=&s2&&&male&&/span&&span class=&p&&,&/span& &span class=&s2&&&female&&/span&&span class=&p&&,&/span& &span class=&s2&&&other&&/span&&span class=&p&&]))&/span&
&span class=&k&&del&/span& &span class=&n&&chart&/span&&span class=&o&&.&/span&&span class=&n&&json&/span&&span class=&p&&[&/span&&span class=&s2&&&xAxis&&/span&&span class=&p&&]&/span&
&span class=&k&&del&/span& &span class=&n&&chart&/span&&span class=&o&&.&/span&&span class=&n&&json&/span&&span class=&p&&[&/span&&span class=&s2&&&yAxis&&/span&&span class=&p&&]&/span&
&span class=&n&&chart&/span&&span class=&o&&.&/span&&span class=&n&&plot&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&登登登登~&/p&&br&&figure&&img src=&https://pic1.zhimg.com/v2-ea5efb4c750c44f867f56d6_b.jpg& data-rawwidth=&902& data-rawheight=&736& class=&origin_image zh-lightbox-thumb& width=&902& data-original=&https://pic1.zhimg.com/v2-ea5efb4c750c44f867f56d6_r.jpg&&&/figure&&h2&2. 好友个性签名词云&/h2&&p&获取好友列表的时候,返回的json信息中还看到了有个性签名的信息,脑洞一开,把大家的个性签名都抓下来,看看高频词语,还做了个词云。&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# coding:utf-8&/span&
&span class=&kn&&import&/span& &span class=&nn&&itchat&/span&
&span class=&c1&&# 先登录&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&login&/span&&span class=&p&&()&/span&
&span class=&c1&&# 获取好友列表&/span&
&span class=&n&&friends&/span& &span class=&o&&=&/span& &span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&get_friends&/span&&span class=&p&&(&/span&&span class=&n&&update&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&:]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&friends&/span&&span class=&p&&:&/span&
&span class=&c1&&# 获取个性签名&/span&
&span class=&n&&signature&/span& &span class=&o&&=&/span& &span class=&n&&i&/span&&span class=&p&&[&/span&&span class=&s2&&&Signature&&/span&&span class=&p&&]&/span&
&span class=&k&&print&/span& &span class=&n&&signature&/span&
&/code&&/pre&&/div&&p&先全部抓取下来 &br&打印之后你会发现,有大量的span,class,emoji,emoji1f3c3等的字段,因为个性签名中使用了表情符号,这些字段都是要过滤掉的,写个正则和replace方法过滤掉&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&friends&/span&&span class=&p&&:&/span&
&span class=&c1&&# 获取个性签名&/span&
&span class=&n&&signature&/span& &span class=&o&&=&/span& &span class=&n&&i&/span&&span class=&p&&[&/span&&span class=&s2&&&Signature&&/span&&span class=&p&&]&/span&&span class=&o&&.&/span&&span class=&n&&strip&/span&&span class=&p&&()&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&span&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&class&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&emoji&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&
&span class=&c1&&# 正则匹配过滤掉emoji表情,例如emoji1f3c3等&/span&
&span class=&n&&rep&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&s2&&&1f\d.+&&/span&&span class=&p&&)&/span&
&span class=&n&&signature&/span& &span class=&o&&=&/span& &span class=&n&&rep&/span&&span class=&o&&.&/span&&span class=&n&&sub&/span&&span class=&p&&(&/span&&span class=&s2&&&&&/span&&span class=&p&&,&/span& &span class=&n&&signature&/span&&span class=&p&&)&/span&
&span class=&k&&print&/span& &span class=&n&&signature&/span&
&/code&&/pre&&/div&&p&接来下用jieba分词,然后制作成词云,首先要安装jieba和wordcloud库&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&pip install jieba
pip install wordcloud
&/code&&/pre&&/div&&p&代码&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# coding:utf-8&/span&
&span class=&kn&&import&/span& &span class=&nn&&itchat&/span&
&span class=&kn&&import&/span& &span class=&nn&&re&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&login&/span&&span class=&p&&()&/span&
&span class=&n&&friends&/span& &span class=&o&&=&/span& &span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&get_friends&/span&&span class=&p&&(&/span&&span class=&n&&update&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&:]&/span&
&span class=&n&&tList&/span& &span class=&o&&=&/span& &span class=&p&&[]&/span&
&span class=&k&&for&/span& &span class=&n&&i&/span& &span class=&ow&&in&/span& &span class=&n&&friends&/span&&span class=&p&&:&/span&
&span class=&n&&signature&/span& &span class=&o&&=&/span& &span class=&n&&i&/span&&span class=&p&&[&/span&&span class=&s2&&&Signature&&/span&&span class=&p&&]&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&& &&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&span&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&class&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&replace&/span&&span class=&p&&(&/span&&span class=&s2&&&emoji&&/span&&span class=&p&&,&/span& &span class=&s2&&&&&/span&&span class=&p&&)&/span&
&span class=&n&&rep&/span& &span class=&o&&=&/span& &span class=&n&&re&/span&&span class=&o&&.&/span&&span class=&n&&compile&/span&&span class=&p&&(&/span&&span class=&s2&&&1f\d.+&&/span&&span class=&p&&)&/span&
&span class=&n&&signature&/span& &span class=&o&&=&/span& &span class=&n&&rep&/span&&span class=&o&&.&/span&&span class=&n&&sub&/span&&span class=&p&&(&/span&&span class=&s2&&&&&/span&&span class=&p&&,&/span& &span class=&n&&signature&/span&&span class=&p&&)&/span&
&span class=&n&&tList&/span&&span class=&o&&.&/span&&span class=&n&&append&/span&&span class=&p&&(&/span&&span class=&n&&signature&/span&&span class=&p&&)&/span&
&span class=&c1&&# 拼接字符串&/span&
&span class=&n&&text&/span& &span class=&o&&=&/span& &span class=&s2&&&&&/span&&span class=&o&&.&/span&&span class=&n&&join&/span&&span class=&p&&(&/span&&span class=&n&&tList&/span&&span class=&p&&)&/span&
&span class=&c1&&# jieba分词&/span&
&span class=&kn&&import&/span& &span class=&nn&&jieba&/span&
&span class=&n&&wordlist_jieba&/span& &span class=&o&&=&/span& &span class=&n&&jieba&/span&&span class=&o&&.&/span&&span class=&n&&cut&/span&&span class=&p&&(&/span&&span class=&n&&text&/span&&span class=&p&&,&/span& &span class=&n&&cut_all&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)&/span&
&span class=&n&&wl_space_split&/span& &span class=&o&&=&/span& &span class=&s2&&& &&/span&&span class=&o&&.&/span&&span class=&n&&join&/span&&span class=&p&&(&/span&&span class=&n&&wordlist_jieba&/span&&span class=&p&&)&/span&
&span class=&c1&&# wordcloud词云&/span&
&span class=&kn&&import&/span& &span class=&nn&&matplotlib.pyplot&/span& &span class=&kn&&as&/span& &span class=&nn&&plt&/span&
&span class=&kn&&from&/span& &span class=&nn&&wordcloud&/span& &span class=&kn&&import&/span& &span class=&n&&WordCloud&/span&
&span class=&kn&&import&/span& &span class=&nn&&PIL.Image&/span& &span class=&kn&&as&/span& &span class=&nn&&Image&/span&
&span class=&c1&&# 这里要选择字体存放路径,这里是Mac的,win的字体在windows/Fonts中&/span&
&span class=&n&&my_wordcloud&/span& &span class=&o&&=&/span& &span class=&n&&WordCloud&/span&&span class=&p&&(&/span&&span class=&n&&background_color&/span&&span class=&o&&=&/span&&span class=&s2&&&white&&/span&&span class=&p&&,&/span& &span class=&n&&max_words&/span&&span class=&o&&=&/span&&span class=&mi&&2000&/span&&span class=&p&&,&/span&
&span class=&n&&max_font_size&/span&&span class=&o&&=&/span&&span class=&mi&&40&/span&&span class=&p&&,&/span& &span class=&n&&random_state&/span&&span class=&o&&=&/span&&span class=&mi&&42&/span&&span class=&p&&,&/span&
&span class=&n&&font_path&/span&&span class=&o&&=&/span&&span class=&s1&&'/Users/sebastian/Library/Fonts/Arial Unicode.ttf'&/span&&span class=&p&&)&/span&&span class=&o&&.&/span&&span class=&n&&generate&/span&&span class=&p&&(&/span&&span class=&n&&wl_space_split&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&my_wordcloud&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&axis&/span&&span class=&p&&(&/span&&span class=&s2&&&off&&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&运行代码&/p&&br&&p&&figure&&img src=&https://pic4.zhimg.com/v2-e2dd0db4a5b7e0363990c_b.jpg& data-rawwidth=&639& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&639& data-original=&https://pic4.zhimg.com/v2-e2dd0db4a5b7e0363990c_r.jpg&&&/figure&这。。好像有点丑,根据wordcloud用法,我可以找一张图来生成配色方案,我这里找了一张微信的logo&/p&&figure&&img src=&https://pic4.zhimg.com/v2-ff5ad705cad995d6ebe376_b.jpg& data-rawwidth=&500& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-ff5ad705cad995d6ebe376_r.jpg&&&/figure&&br&&p&修改一下代码&/p&&br&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&# wordcloud词云&/span&
&span class=&kn&&import&/span& &span class=&nn&&matplotlib.pyplot&/span& &span class=&kn&&as&/span& &span class=&nn&&plt&/span&
&span class=&kn&&from&/span& &span class=&nn&&wordcloud&/span& &span class=&kn&&import&/span& &span class=&n&&WordCloud&/span&&span class=&p&&,&/span& &span class=&n&&ImageColorGenerator&/span&
&span class=&kn&&import&/span& &span class=&nn&&os&/span&
&span class=&kn&&import&/span& &span class=&nn&&numpy&/span& &span class=&kn&&as&/span& &span class=&nn&&np&/span&
&span class=&kn&&import&/span& &span class=&nn&&PIL.Image&/span& &span class=&kn&&as&/span& &span class=&nn&&Image&/span&
&span class=&n&&d&/span& &span class=&o&&=&/span& &span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&n&&dirname&/span&&span class=&p&&(&/span&&span class=&n&&__file__&/span&&span class=&p&&)&/span&
&span class=&n&&alice_coloring&/span& &span class=&o&&=&/span& &span class=&n&&np&/span&&span class=&o&&.&/span&&span class=&n&&array&/span&&span class=&p&&(&/span&&span class=&n&&Image&/span&&span class=&o&&.&/span&&span class=&n&&open&/span&&span class=&p&&(&/span&&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&n&&join&/span&&span class=&p&&(&/span&&span class=&n&&d&/span&&span class=&p&&,&/span& &span class=&s2&&&wechat.jpg&&/span&&span class=&p&&)))&/span&
&span class=&n&&my_wordcloud&/span& &span class=&o&&=&/span& &span class=&n&&WordCloud&/span&&span class=&p&&(&/span&&span class=&n&&background_color&/span&&span class=&o&&=&/span&&span class=&s2&&&white&&/span&&span class=&p&&,&/span& &span class=&n&&max_words&/span&&span class=&o&&=&/span&&span class=&mi&&2000&/span&&span class=&p&&,&/span& &span class=&n&&mask&/span&&span class=&o&&=&/span&&span class=&n&&alice_coloring&/span&&span class=&p&&,&/span&
&span class=&n&&max_font_size&/span&&span class=&o&&=&/span&&span class=&mi&&40&/span&&span class=&p&&,&/span& &span class=&n&&random_state&/span&&span class=&o&&=&/span&&span class=&mi&&42&/span&&span class=&p&&,&/span&
&span class=&n&&font_path&/span&&span class=&o&&=&/span&&span class=&s1&&'/Users/sebastian/Library/Fonts/Arial Unicode.ttf'&/span&&span class=&p&&)&/span&\
&span class=&o&&.&/span&&span class=&n&&generate&/span&&span class=&p&&(&/span&&span class=&n&&wl_space_split&/span&&span class=&p&&)&/span&
&span class=&n&&image_colors&/span& &span class=&o&&=&/span& &span class=&n&&ImageColorGenerator&/span&&span class=&p&&(&/span&&span class=&n&&alice_coloring&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&my_wordcloud&/span&&span class=&o&&.&/span&&span class=&n&&recolor&/span&&span class=&p&&(&/span&&span class=&n&&color_func&/span&&span class=&o&&=&/span&&span class=&n&&image_colors&/span&&span class=&p&&))&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&imshow&/span&&span class=&p&&(&/span&&span class=&n&&my_wordcloud&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&axis&/span&&span class=&p&&(&/span&&span class=&s2&&&off&&/span&&span class=&p&&)&/span&
&span class=&n&&plt&/span&&span class=&o&&.&/span&&span class=&n&&show&/span&&span class=&p&&()&/span&
&span class=&c1&&# 保存图片 并发送到手机&/span&
&span class=&n&&my_wordcloud&/span&&span class=&o&&.&/span&&span class=&n&&to_file&/span&&span class=&p&&(&/span&&span class=&n&&os&/span&&span class=&o&&.&/span&&span class=&n&&path&/span&&span class=&o&&.&/span&&span class=&n&&join&/span&&span class=&p&&(&/span&&span class=&n&&d&/span&&span class=&p&&,&/span& &span class=&s2&&&wechat_cloud.png&&/span&&span class=&p&&))&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&send_image&/span&&span class=&p&&(&/span&&span class=&s2&&&wechat_cloud.png&&/span&&span class=&p&&,&/span& &span class=&s1&&'filehelper'&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&&p&&figure&&img src=&https://pic3.zhimg.com/v2-72d0bfc3ae865c71ff7a59ba742af115_b.jpg& data-rawwidth=&500& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-72d0bfc3ae865c71ff7a59ba742af115_r.jpg&&&/figure&嗯~好像还可以,这是Mac下生成的,附一个win10下生成的&/p&&figure&&img src=&https://pic3.zhimg.com/v2-400fb983961feb4ae908f0aad5cf8887_b.jpg& data-rawwidth=&500& data-rawheight=&442& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic3.zhimg.com/v2-400fb983961feb4ae908f0aad5cf8887_r.jpg&&&/figure&&br&&h2&3. 微信自动回复&/h2&&p&接着来实现一个类似qq上的自动回复,原理就是接收到消息,就发消息回去,同时发一条给文件助手,就可以在文件助手中统一查看消息。&/p&&p&代码很简单,来看看&/p&&div class=&highlight&&&pre&&code class=&language-python&&&span&&/span&&span class=&c1&&#coding=utf8&/span&
&span class=&kn&&import&/span& &span class=&nn&&itchat&/span&
&span class=&c1&&# 自动回复&/span&
&span class=&c1&&# 封装好的装饰器,当接收到的消息是Text,即文字消息&/span&
&span class=&nd&&@itchat.msg_register&/span&&span class=&p&&(&/span&&span class=&s1&&'Text'&/span&&span class=&p&&)&/span&
&span class=&k&&def&/span& &span class=&nf&&text_reply&/span&&span class=&p&&(&/span&&span class=&n&&msg&/span&&span class=&p&&):&/span&
&span class=&c1&&# 当消息不是由自己发出的时候&/span&
&span class=&k&&if&/span& &span class=&ow&&not&/span& &span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s1&&'FromUserName'&/span&&span class=&p&&]&/span& &span class=&o&&==&/span& &span class=&n&&myUserName&/span&&span class=&p&&:&/span&
&span class=&c1&&# 发送一条提示给文件助手&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&send_msg&/span&&span class=&p&&(&/span&&span class=&s2&&u&[&/span&&span class=&si&&%s&/span&&span class=&s2&&]收到好友@&/span&&span class=&si&&%s&/span&&span class=&s2&& 的信息:&/span&&span class=&si&&%s&/span&&span class=&se&&\n&/span&&span class=&s2&&&&/span& &span class=&o&&%&/span&
&span class=&p&&(&/span&&span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&strftime&/span&&span class=&p&&(&/span&&span class=&s2&&&%Y-%m-&/span&&span class=&si&&%d&/span&&span class=&s2&& %H:%M:%S&&/span&&span class=&p&&,&/span& &span class=&n&&time&/span&&span class=&o&&.&/span&&span class=&n&&localtime&/span&&span class=&p&&(&/span&&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s1&&'CreateTime'&/span&&span class=&p&&])),&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s1&&'User'&/span&&span class=&p&&][&/span&&span class=&s1&&'NickName'&/span&&span class=&p&&],&/span&
&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s1&&'Text'&/span&&span class=&p&&]),&/span& &span class=&s1&&'filehelper'&/span&&span class=&p&&)&/span&
&span class=&c1&&# 回复给好友&/span&
&span class=&k&&return&/span& &span class=&s1&&u'[自动回复]您好,我现在有事不在,一会再和您联系。&/span&&span class=&se&&\n&/span&&span class=&s1&&已经收到您的的信息:&/span&&span class=&si&&%s&/span&&span class=&se&&\n&/span&&span class=&s1&&'&/span& &span class=&o&&%&/span& &span class=&p&&(&/span&&span class=&n&&msg&/span&&span class=&p&&[&/span&&span class=&s1&&'Text'&/span&&span class=&p&&])&/span&
&span class=&k&&if&/span& &span class=&n&&__name__&/span& &span class=&o&&==&/span& &span class=&s1&&'__main__'&/span&&span class=&p&&:&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&auto_login&/span&&span class=&p&&()&/span&
&span class=&c1&&# 获取自己的UserName&/span&
&span class=&n&&myUserName&/span& &span class=&o&&=&/span& &span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&get_friends&/span&&span class=&p&&(&/span&&span class=&n&&update&/span&&span class=&o&&=&/span&&span class=&bp&&True&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&][&/span&&span class=&s2&&&UserName&&/span&&span class=&p&&]&/span&
&span class=&n&&itchat&/span&&span class=&o&&.&/span&&span class=&n&&run&/span&&span class=&p&&()&/span&
&/code&&/pre&&/div&&p&运行后会保持登录状态,开启自动回复模式,手机上查看:&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-ebafffbd76_b.jpg& data-rawwidth=&750& data-rawheight=&1334& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic3.zhimg.com/v2-ebafffbd76_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-956ce4fee4caa_b.jpg& data-rawwidth=&750& data-rawheight=&1334& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic4.zhimg.com/v2-956ce4fee4caa_r.jpg&&&/figure&当然,除了文字Text信息,还可以接收图片(表情包算图片),语音,

我要回帖

更多关于 为啥很多网站打不开 的文章

 

随机推荐