Java 垃圾回收机制详解

最近主要时间都放在知识图谱构建中,但是还是需要给自己充电。想在近段时间好好把 JVM 的垃圾回收好好看一下,学习然后输出,是我新找到的有效学习方法,希望你看了之后能有收获。 什么是垃圾 垃圾回收(常称做GC——Garbage Collection)诞生于1960年 MIT 的 Lisp 语言,垃圾回收机制也已经用在了很多编程语言中,比如 Java、Python、C# 等。我们这里主要说 Java 中的垃圾回收。 在JVM中,程序计数器、虚拟机栈、本地方法栈都是随线程生而生,随线程灭而灭;栈帧随着方法的进入和退出做入栈和出栈操作,实现了自动的内存清理;常说的垃圾回收主要集中在堆和方法区,这部分内存是随着程序运行动态分配的。 既然要回收垃圾,那么我们首先需要知道的就是,什么样的对象是垃圾。一般有两种方式: 引用计数 每个对象有一个引用计数属性,新增一个引用时计数加 1,引用释放时计数减 1,当引用计数变为 0 的时候,这个对象就可以回收了。但是这个方法无法解决对象循环引用的问题。 // 对象循环引用示例 Object objectA = new Object(); Object objectB = new Object(); objectA.instance = objectB; objectB.instance = objectA; objectA = null; objectB = null; 假设我们有上面的代码。程序启动后,objectA和objectB两个对象被创建并在堆中分配内存,它们都相互持有对方的引用,但是除了它们相互持有的引用之外,再无别的引用。而实际上,引用已经被置空,这两个对象不可能再被访问了,但是因为它们相互引用着对方,导致它们的引用计数都不为 0,因此引用计数算法无法通知GC回收它们,造成了内存的浪费。如下图:对象之间的引用形成一个有环图。 可达性分析 或者叫根搜索算法,在主流的JVM中,都是使用的这种方法来判断对象是否存活的。这个算法的思路很简单,它把内存中的每一个对象都看作一个结点,然后定义了一些可以作为根结点的对象,我们称之为「GC Roots」。果一个对象中有另一个对象的引用,那么就认这个对象有一条指向另一个对象的边。 像上面这张图,JVM会起一个线程从所有的GC Roots开始往下遍历,当遍历完之后如果发现有一些对象不可到达,那么就认为这些对象已经没有用了,需要被回收。(这里多说一句,我们的JVM一起动,就至少有两个线程启动,一个是垃圾回收线程,一个是我们自己的主线程。) 那么现在问题就变成了——什么样的对象可以当作 GC Roots?共有四种对象可以作为 GC Roots。 虚拟机栈中的引用的对象 们在程序中正常创建一个对象,对象会在堆上开辟一块空间,同时会将这块空间的地址作为引用保存到虚拟机栈中,如果对象生命周期结束了,那么引用就会从虚拟机栈中出栈,因此如果在虚拟机栈中有引用,就说明这个对象还是有用的,这种对象可以作为 GC Roots。 全局的静态的对象 也就是使用了static关键字定义了的对象,这种对象的引用保存在共有的方法区中,因为虚拟机栈是线程私有的,如果保存在栈里,就不叫全局了,很显然,这种对象是要作为 GC Roots 的。 常量引用 就是使用了static final关键字,由于这种引用初始化之后不会修改,所以方法区常量池里的引用的对象也作为GC Roots。 本地方法栈中JNI引用的对象 有时候单纯的java代码不能满足我们的需求,就可能需要调用 C 或 C++ 代码(Java 本身就是用 C 和 C++ 写的嘛),因此会使用native方法,JVM 内存中专门有一块本地方法栈,用来保存这些对象的引用,所以本地方法栈中引用的对象也会被作为 GC Roots。 垃圾回收算法 有意思的是在 JVM 规范中,并没有明确指明 GC 的运作方式,各个厂商可以采用不同的方式去实现垃圾收集器。这篇文章简单介绍常见的垃圾回收算法。 标记-清除算法 标记-清除算法分两个步骤,分别为「标记」和「清除」,字如其人。它是一个最基础的垃圾回收算法,更高级的垃圾回收算法都是基于它改进的。 它的运行过程是这样的:首先标记出所有需要回收的对象,标记完成后,再统一回收掉所有被标记的对象。 标记-清除算法的缺点有两个,一个是空间问题,标记清除之后会产生大量的不连续内存碎片。内存碎片太多,程序在之后的运行过程中就有可能找不到足够的连续内存来分配较大的对象,进而不得不提前触发另一次垃圾回收,导致程序效率降低。标记-清除算法的另一个缺点是效率问题,标记和清除的效率都不高,两次扫描耗时严重。 复制算法 复制算法把内存按容量划分为大小相等的两块,每次只使用其中的一块。如果正在用的这块没有足够的可使用空间了,那么就将还活着的对象复制到另一块去,再把使用过的内存一次性清掉。 这样就实现了简单高效的做法,每一次进行内存回收时,就不用再去考虑内存碎片这些复杂的情况,只需要移动堆顶指针就可以。但是缺点也很明显,可使用内存只有原来的一半了,而且持续复制生命力很旺盛的对象也会让效率降低哇。复制算法适用于存活对象少、垃圾对象多的情况,这种情况在新生代比较常见。 标记-压缩算法 在老年代,大部分对象都是存活的对象,复制算法在这里就不靠谱了,所以有人提出了标记压缩算法,标记过程和标记清除算法一样,但是清理时不是简单的清理,而是让所有存活的对象都向一端移动,然后直接清理掉边界以外的内存,需要移动对象的成本。 分代算法 前面的几种垃圾回收算法中,没有一种可以完全替代其他算法,他们具备各自的特点与优势,因此更好的方法是根据垃圾对象的特性来选择合适的回收算法。 分代算法的思想就是将内存空间根据对象的特点不同进行划分,选择合适的垃圾回收算法来提高回收效率。分代的思想已经被现有的虚拟机广泛采用。 分区算法 分区算法就是将整个堆空间再划分为连续的不同小区间,每一个小区间独立使用,也独立回收。 一般在相同条件下,堆空间越大,那么一次GC的时间就越长,因此而产生的停顿时间也就越长。为了控制GC的停顿时间,根据目标停顿时间,每次合理回收若干个小区间,而不是整个堆空间,进而减少一个GC的停顿时间。 垃圾收集器 上面讲的是垃圾收集算法,讲的是理论,垃圾收集器就是这些理论的具体实现。下面介绍一些垃圾收集器 Serial收集器 串行收集器是高效率的、古老的收集器,它只用了一个线程去回收垃圾。新生代、老年代使用串行回收;新生代复制算法、老年代标记-压缩算法。串行是指 GC 过程和用户过程是串行的,在垃圾收集过程中会 stop the world,JVM在后台自动发起垃圾回收,会在用户不可见的情况下,把用户的线程全部停掉,就是 GC 停顿,给用户带来不良体验。 红色代表 GC 线程,灰色代表用户线程,下同。 ParNew收集器 ParNew 收集器就是 Serial 收集器的多线程版本,除了多线程以外,其余行为都和 Serial 收集器一样。新生代并行收集,老年代串行收集;新生代使用复制算法、老年代使用标记-压缩算法。 Parallel Scavenge收集器 Parallel Scavenge 收集器类似于 ParNew 收集器,因为与吞吐量密切,也称为吞吐量收集器。可以通过参数来打开自适应调节策略,虚拟机会根据当前系统的运行情况收集性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量;也可以通过参数控制 GC 的时间不大于多少毫秒或者比例。Parallel Scavenge 收集器以高吞吐量为目标,减少垃圾收集时间,让用户代码获得更长的运行时间;GC 停顿时间的缩短,是用牺牲吞吐量和新生代空间来换取的。 Parallel Old收集器 Parallel Old 收集器是 Parallel Scavenge 收集器的老年代版本,使用多线程和「标记-压缩」算法,在 JDK1.6 版本才开始提供。 CMS收集器 CMS(Concorrect mask sweep)收集器是一种以获取最短停顿时间为目标的收集器;也称为并发低停顿收集器。常用在 WEB、B/S 架构的服务系统中,因为这类应用很注重响应速度,尽可能减少系统停顿时间,给用户带来较好的体验。从名字上就可以看出来,它是基于「标记-清除」算法实现的,整个过程分为 4 步: 初始标记 初始标记仅仅标记 GC Roots 能直接关联到的对象,所以速度很快,需要停止服务(Stop The World)。 并发标记 并发标记是进行 GC Roots Tracing 的过程,为了标记上一步集合中的存活对象,因为用户程序这段时间也在运行,所以并不能保证可以标记出所有的存活对象。 重新标记 重新标记阶段是为了修正并发标记阶段因用户程序继续运作而导致标记变动的那一部分对象,采用多线程并行来提升效率,会停止服务,时间上远比并发标记短,较初始标记稍长。 并发清除 这个阶段即并发收集垃圾对象,可以与用户线程一起工作。 虽然 CMS 收集器线程可以和用户线程一起进行,但是它肯定会占用 CPU 资源,拖慢应用程序是肯定的,总的吞吐量会降低。 G1收集器 (看下垃圾回收算法中的分区算法)这是目前最新的前沿成果,它基于“标记-压缩”算法,可以进行空间整理,不会产生碎片。前面的垃圾收集器,收集范围都是整个新生代或老年代,但是 G1 收集器不是这样,使用 G1 收集器时,java堆的内存模型不同,它还保留有新生代和老年代的概念,它们都是一部分区域(可以不连续)的集合。除此之外,G1 收集器还能建立可预测的停顿时间模型,可以明确指定M毫秒时间片内,垃圾收集消耗的时间不超过N毫秒。G1 跟踪各个区域(Region)获得其收集价值大小,在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的 Region。G1 垃圾回收也分4步: 初始标记 仅标记 GC Roots 能直接关联到的对象。 并发标记 进行 GC Roots Tracing 的过程,并不能保证可以标记出所有的存活对象。这个阶段若发现区域对象中的所有对象都是垃圾,那个这个区域会被立即回收。 最终标记 为了修正并发标记期间因用户程序继续运作而导致标记变动的那一部分对象的标记记录,G1 中采用了比 CMS 更快的初始快照算法: snapshot-at-the-beginning (SATB)。 筛选回收 首先排序各个 Region 的回收价值和成本,然后根据用户期望的 GC 停顿时间来制定回收计划,最后按计划回收一些价值高的 Region 中垃圾对象,回收时采用"复制"算法,从一个或多个 Region 复制存活对象到堆上的另一个空的 Region,并且在此过程中压缩和释放内存。
Read More ~

SEO 入门——你必须了解站长平台知识

我自己也刚接触建站不久,10 月 1 日开始购买服务器和域名学习建站,10 月 11 日一查已经被 Google 收录了 20 多个链接了,下面是我个人就我自己的实践总结的一点关于站长平台的知识。 基本上只要做的大的搜索引擎都会有站长平台的,站长平台是搜索引擎官方提供的辅助网站优化管理的工具,它可以针对我们的网站提供一定的优化方向,而且新站一开始搜索引擎的爬虫可能来都不会来,我们一开始也需要通过站长平台主动给搜索引擎提交我们的站点地图。 盘点业界主流站长平台 既然我们讲的是站长平台知识,肯定是得先要去了解一些主流的站长平台,那业内知名的站长平台有哪些呢?下面是 Guanngxu 为大家盘点的主流站长平台。 谷歌站长平台 入口:https://search.google.com/search-console 谷歌在搜索引擎领域的地位不言而喻,稍微遗憾的是它已经退出中国市场了,它的技术、算法等在业界都是一流,即使它已经退出中国市场了,但也绝对是一个不可忽略的存在 百度站长平台 入口:https://ziyuan.baidu.com/ 目前国内使用最多的站长平台就是百度了,谷歌退出中国之后就百度一家独大,也是目前国内功能最完善的站长平台,对于网站管理、数据检测等都有一定的参考意义。 搜狗站长平台 入口:http://zhanzhang.sogou.com/index.php/site/index 搜狗的功能相对来说简单一些,只提供了一些基础的网站优化功能,虽然目前看搜狗搜索的流量也跟不上,搜狗现在已经被腾讯收购,不知道后续是否会有更大的发展,在国内搜狗的流量也还是不小的。 必应站长平台 入口:https://www.bing.com/toolbox/webmaster/ 必应是微软旗下的搜索引擎,必应在国内的市场占有率不太高,使用必应的大部分是讨厌百度的广告,又暂时不知道如何科学上网的人群,不过它的站长平台做的相对来说还是可以。 头条站长平台 入口:https://zhanzhang.toutiao.com/ 大家都知道字节跳动是互联网界的一匹黑马,字节跳动最近正在抖音等旗下的应用开始测试搜索广告业务,虽然头条站长平台很多功能处于不完善的状态,但是它之前的成绩也是大家有目共睹的,值得期待。 神马站长平台 入口:https://zhanzhang.sm.cn/ 神马站长平台是依托于 UC 浏览器和神马搜索衍生出来的一个平台,它大部分的流量都来自于移动端,所以它平台的功能比较偏向于移动端,功能比较基础,几乎没有什么算法和优化的通知。 利用站长平台我们可以做些什么? 新站一般都不会有搜索引擎的爬虫程序主动来爬取的,人家甚至都不知道你这个小网站的存在,那么我们就需要主动的去告诉各个搜索引擎,让他们知道我们这个小网站的存在。比如百度站长平台,我们可以先到「站点管理」添加一个自己的站点。 说一下每个站长平台都具备的一个功能,那就是提交自己网站地图的接口。新站一开始都可以通过这些接口去提交我们网站的链接,将站点提交到各个搜索引擎以后,可以加快蜘蛛抓取我们网站的速度,增加网站被收录的速度。当然也有人说用老的域名比较好,这一点我自己并没有亲身尝试过,不敢妄下断论。 像必应站长后台还有个网站扫描功能,谷歌也有类似的网址检查功能,我们可以借用这些工具看看如何优化自己的网站,让自己网站的内容对搜索引擎爬虫程序更加友好。
Read More ~

买课程囤在那里不看,你怎么可能进步

文章于 2018-04-15 在微信公众号「刘小绪同学」发布,原文链接:你如果只是一直囤干货,那永远不可能进步,今日重读做了部分改动 这两天,没事整理了自己的微信收藏和 QQ 收藏文件夹下面的文章。发现了一个在大多数人身上都存在的问题,那就是囤干货。 我使用微信的时间比较晚,从14年才开始,但是仅仅不到4年的时间,在微信收藏里面就有几百篇文章,有一些传授技能的文章,比如 word、ps 等简单教程;其他一些属于心灵鸡汤类文章(现在反倒不觉得这类文章值得看),还有一些搞笑的文章,当然里面也夹杂着些许的优秀视频。文章数量数 14 年和 15 年最多。 现在回头看,我当时就陷入了囤文章的陷阱了,或者说自己是在“假装阅读”。仔细一想,其实生活中大多数人都有类似的举动。早成起床、饭后的一段时间、晚上睡觉前,这些时间大多数人都习惯性的去翻翻公众号、朋友圈,这里面不乏有好文章、干货文章。然而没多少人会静下心来把文章读完,而是在大概读到一半的时候,选择收藏这篇文章,然后在心里告诉自己,明天要好好读一下这篇文章。到了明天,其实又是重复了今天的这样一个过程。 记得大概一年前也无意中看到大学认识的一位师弟发的说说,内容如下: 上面的图是我特地翻出来的,一年后这个师弟又发了一条说说,存满了两个云盘,应该是有 5000 G 左右的资源。 我认为这都是在假装学习,而且假装学习的人不计其数。为什么上学的时候,那些每天都静静的待在教室学习的同学,成绩反倒不是很好呢?而且大多数这样的学生在班级都是排在中等,而成绩好的学生却不是学习投入最多的人。背后的原因显而易见。 我囤课最严重的时间段是也是 14 年和 15 年,网上有不少干货资源,什么 Linux、各种项目实战、计算机网络等等培训视频不计其数。那时候干的第一件事就是,上百度云把这些资源下下来,而且一个资源往往要下一周甚至更久;然后告诉自己,下周开始每天看一段视频,但是最终的结果是过去了 N 个下周,依然没有去处理这些资源。 现在博客、公众号也有一些不知道是为了获取更多人的关注,还是仅仅是做公益,文章末尾会标注:关注公众号,回复“XXXXX”,即可获得多少多少G的资源,这个「多少」一般是在 500 以上。我个人现在是对这类文章没有什么兴趣的,因为几百 G 甚至上千 G 的东西,我是不可能看完的,我清楚自己的能力,我也不否认可能有人有毅力能看完,那肯定是凤毛菱角了,我一个普通人不与凤毛菱角对比。 我于 19 年开始使用豆瓣,用上豆瓣之后就冒出来另外一个毛病,总想快速的把一本书看完而不去管有没有真正理解书里面的知识,总花很多时间看更多的电影,仅仅是为了在豆瓣上标记「看过」、「读过」那一刻的快感。 走出象牙塔之后事情变得繁杂琐碎,什么事都想做到最好还什么事都想去做,问题是那些边边角角的事情还经常扰乱自己的视线,结果没有一件做的像样的事情。 当然,我现在的认识相比几年前,得到了一些提升,至少我现在不糊干囤课之类的事了,仅仅是把干货囤在那里,其时你还是昨天的自己,并没有进步,重要的不是自己买了多少优质的课程,而是去动手动脑学习,最好的学习就是实践。现在我都会把自己收藏的好文章在一周之内处理掉。 所以要想真正取得进步,首先就需要告别囤课的习惯,不能假装学习,如果学习是为了给比别人看,那还不如不学。文章仅是我个人的一点感悟,没有文采逻辑和言,希望与你共勉。
Read More ~

如何搭建一个属于自己的博客/企业网站

参考内容: 如何做博客/企业站以及注意事项 Typecho支持Emoji表情方法 说明:此篇文章得益于王红星的指导,喜欢直接粗暴一点的朋友可以跳过前面,直接从程序的选择开始阅读。 我的博客搭建之路 说起来有点惭愧,我自己是计算机科学与技术专业出身,虽然博客系统在我眼里是很简单的系统,但是我却一直畏惧从零开始搭建一个系统的麻烦性,因为但是安装程序的运行环境就会耗掉我大量的时间,再加上我写代码、测试、上线等工作少说也得要四五天!所以我一直都在 CSDN 一类的平台写作,然而这些平台为了利益把体验做的越来越差! 还在大学时听说过 WordPress 可以搭建博客,不过总是迈不出行动的步伐,认为一旦涉及到服务器的工作就不会简单。直到我在 Twitter 发现有人推荐 Gridea,才发现搭建博客系统原来可以这么简单,主要还是免费的。 于是我借用 Gridea 和 Github Pages 搭建了一个博客系统,EryouHao 开发的这个写作软件用起来相当便捷。但是 Github Pages 在国内总是速度很慢,而且图片资源经常加载不出来,而且 Gridea 是用 Vue 技术开发的,打包成桌面软件后总会出现卡顿情况,自己写作的那个劲又逐渐褪去了。在2020 年国庆观《我和我的家乡》有感所写中也提到在知乎一不小心就违反了社区规范,索性花功夫研究如何搭建自己的博客系统,也才有了这篇简单的教程。 一个博客/企业站需要什么 可以在网络上访问的东西背后都有一套程序支撑,博客系统(企业站点)就是运行在某处的一套程序。要把一套程序运行起来,肯定需要运行程序的空间和驱动程序运行的系统,比如我们的手里的电脑就是一种运行程序的空间,你使用的系统(Windows、macOS、Linux)就是驱动程序运行的系统,下面推荐的服务器都已经把把空间和驱动给你安装好了,所以完全不用担心自己不懂如何安装。 程序运行起来了还得让外面的人看到才行,所以我们还需要一个域名(类似于www.baidu.com一样的东西),我们把这个域名绑定到服务器上,别人在浏览器输入这个域名就能看到我们的博客(程序)了。 如果希望自己的博客打开速度很快,除了选择比较好的空间外,还可以购买 CDN 服务;希望自己的文章能更好的被百度之类搜索引擎收录的话,可以购买独立 IP 主机。 程序的选择 WordPress 应该是目前全球使用的最广泛的开源程序,结构良好,功能强大,社区内容丰富。但是对于博客(企业站点)来说,WordPress 就显得比较臃肿。Typecho 是一个轻量、简洁、快速的程序,除了官方论坛,在https://typecho.me/也有很多主题和插件。虽然 Typecho 各种主题、插件没有 WordPress 丰富,但是对于搭建博客系统已经足够了。 网上也有文章对两个系统做了对比,比如这篇:个人博客平台选择 Typecho 还是 WordPress ?Typecho 是原生支持 Markdown 语法的,可能是喜欢 Markdown 写作同学的福音,具体选 Typecho 还是 WordPress 可以凭自己的感觉,两个程序之间也是可以互相迁移的。 WordPress 安装包下载:https://wordpress.org/download/(12.4M) Typecho 安装包下载:http://typecho.org/(400K) 空间的选择 空间类型包括服务器、VPS和虚拟主机,它们的价格是逐渐减少的。对大部分人来说并不是越贵越好,比如服务器和 VPS 还需要自己懂一些运维知识才行。仅仅只是搭建博客(企业站点)的话,一个虚拟机就足够使用了,又便宜又不费心。 空间地理位置是需要重点考虑的一个因素,如果你做的是英文站点、都是国外用户,那可能一个美国主机更适合你;如果你的用户是国内的话,那大陆主机和香港主机可能更适合你。 王红星在他的文章中推荐了两个主机商,分别是衡天主机和戈戈主机。我自己选的是衡天主机,有问题可以随时通过他们的客服询问或是提工单,体验很不错!偷偷告诉你,在购买前可以搜搜优惠码!阿里云也很不错,只是稍微有点贵! 域名注册 国内有腾讯云、阿里云、爱名网等域名注册商,国外有 Name、Namecheap、Godaddy、Dynadot 等域名注册商。有些域名商默认会提供域名保护功能,有的则需要购买该功能。各个域名注册商的价格也都差不多,根据自己的实际需求选一个就可以了。 我自己选的是腾讯云,它第一年域名的优惠力度比较大,比如我要注册guanngxu.com这个域名,可以看到都是有优惠的。 腾讯云:https://dnspod.cloud.tencent.com/ 阿里云:https://wanwang.aliyun.com/ 爱名网:https://www.22.cn/ 域名解析 我们所有的准备工作都做好了,下一步就是安装程序搭建博客系统了,下面我以衡天主机安装 Typecho 为例进行一个简略的讲解,结合我下面的内容和网上的资料,应该很快就能搭建自己的博客系统了。 主机购买后就知道它的 IP 地址了,首先我们去域名注册商处选择把域名解析到我们买的服务器上面。以腾讯云为例,在「我的域名」页面点击「解析」-->「快速添加网站/邮件解析」后会弹出如下页面。 选择「网站解析」的「立即设置」后会弹出另一个页面,你只需要在这个页面把你购买的主机 IP 地址填进去就可以了。稍等几分钟直接在浏览器输入域名访问,如果浏览器出现了页面而不是报找不到服务器 IP 地址,那么域名解析就完成了。 安装 Typecho 进入到云主机管理面板后,点击「文件管理器」可以看到如下图的目录,其中public_html目录就是咱们博客程序的目录,我们把下载好的 Typecho 包上传到这个目录并解压。 需要注意的是解压后的目录是build目录,我们需要将解压后的目录移动到上一级,,保证public_html目录看到的是下图这个样子的,然后再输入域名去访问自己的博客。 如果不出意外,输入域名后出现的应该是下面的页面,点击「我准备好了,开始下一步」发现了什么?需要填写数据库信息。我们再回到衡天云主机管理面板,滑到「数据库管理」选择「新建数据库」,设置数据库名、数据库用户名、密码等,点击「创建」即可,这些信息就是安装 Typecho 需要的信息,再回到之前的页面把这些信息填进去,自己的博客系统就搭建完成了。 那么现在你就拥有了一个自己的博客系统,如果样子不太好看你可以去官方论坛或https://typecho.me/里面找自己喜欢的主题,如果有能力甚至可以自己修改或原创主题,一些插件在上面也都是可以找到的。 Typecho 官方也提供了相应的安装文档,如何使用插件、如何调整网站外观等常见问题在官方链接http://docs.typecho.org/doku.php也都已经有说明了,此处便不再作赘述! 让 Typecho 支持 Emoji 表情 21 世纪的互联网时代怎么能少了 Emoji 表情呢?由于编码问题,Typecho 默认是不支持 Emoji 表情的,所以我们只需要将编码改成支持 Emoji 表情的编码就可以了,具体一点就是把原来的utf8编码修改为utf8mb4,修改编码的方式如下: 修改数据库编码 在衡天云主机管理面板选择「phpMyAdmin」,然后选择你刚才建立的数据库,选择「操作」-->「排序规则」-->「utf8mb4_unicode_ci」-->「执行」 修改表编码 在 phpMyAdmin 面板点击「SQL」,直接运行下面的语句就可以了。要注意你所建表的前缀,我建表所填写的前缀是gx,所以我都是gx_xxxxxxxxx,默认前缀是typecho。 alter table gx_comments convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_contents convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_fields convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_metas convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_options convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_relationships convert to character set utf8mb4 collate utf8mb4_unicode_ci; alter table gx_users convert to character set utf8mb4 collate utf8mb4_unicode_ci; 修改数据库配置文件 数据库配置文件在public_html文件夹下,文件名为config.inc.php,其中有一行的内容是charset => utf8,将它修改为charset => utf8mb4就可以了。 看看有了小表情是不是很可爱?
Read More ~

如何空手利用拼多多(淘宝)赚钱套利?

在开头先说明一下,我自己不懂免费流量的玩法,以下我介绍的内容是我为了帮助公司一些想拿销冠的小伙伴而探索的方法,自己去实践了是有效果的,而且就个体来讲的话是可复制的套路,但我基本没放什么精力在上面,分享出来主要是希望朋友一起交流免费流量的玩法,毕竟对个人来讲付费流量还是太贵了! 估计大部分小伙伴都还不太能接受拼多多吧!拼多多上面的假产品确实不少,但是在「百亿补贴」专场里面有官方的监管,品质上都是可以做到保证的,比如 Airpods Pro 官方价格是 1999 元,而在拼多多的「百亿补贴」里面买下来 1500 都不到,那么这中间就具备了套利空间,转手在闲鱼、转转上面卖 1600 是不是很香? 我自己没有玩过转转,这里简单说一下闲鱼吧!一定要用信用很好的账号,因为这会直接体现到你的商品中。为了让客户相信我们首先要打造好人设,头像、昵称、生日、常住等等信息都填上,注意这些信息也不是瞎填,你的这些信息要给客户体现一种什么性格?什么职业?什么年龄?下面是我自己的一个闲鱼号。 年龄 25 岁,喜欢数码、宅男、喜欢听歌,在互联网行业,是不是给别人的亲切感也比较强?更容易让人信服?而且这样的基础资料也比较符合我上面提到的转卖 Airpods Pro 的形象,总的来说就是信息越完善越容易让人信服。 当然这属于比较简单的套利方式,一个人最多能注册 3 个账号,如果不是工作室的话维护起更多的账号也会费时费力,我在公司客户里面看到了一个比较 NB 的操作,去淘宝联盟去采集那些有优惠券的商品,就是做淘宝客店铺,去找那些有淘宝返利的商品,然后批量上架到自己的淘宝店铺,淘宝对那些下架前的商品会提高权重,有机会显示到前面,相对来说引流成本就能降低一些!听说还有些工作室直接利用软件批量采集淘宝联盟的商品,然后批量上架到京东商铺去赚返利。 此处多说一句,我现在所在公司的客户里面有很多是同时开了淘宝和拼多多店铺的,他们在拼多多上卖的要比淘宝便宜,因为开拼多多店铺的成本要比淘宝低,所以拼多多上面也不都是假产品,像我下面截图中的前面有个「品牌」标志的就是真品,我们接到的很多客户是上不去这个的,不过我目前除了拼多多「百亿补贴」里面的东西会买外,其他的商品我还是不会买。 上面提了一下开个淘宝店,估计很多人也都只是在淘宝上买过东西,却从来没有在淘宝上卖过东西吧。但是会读到这篇文章的你至少知道先去搜索引擎查看,而大部分人连主动搜索的意识都没有,只知道瞎刷抖音。10 亿网民里面什么素质的人都有,梦想嫁个有钱人的、想快速赚钱一夜暴富的,去支付宝搜一搜「一夜暴富」就知道该怎么做了。 今年很多人也都因为疫情原因赋闲,查来查去好像就是开网店靠谱直接一点,因为这比较符合传统的一件产品卖给一个人的思维模式,只是把商铺搬到线上了而已。我自己没有货源怎么办?淘宝看起来好复杂啊,我不会开店怎么办?听说网店也需要做图装修?其实这些知识只需要使用百度搜索一下就能找到,连一点点高级的搜索技巧都不需要,但是就是有太多想挣钱却又懒得去主动学习的人,不然就不会出现那么多割韭菜的项目了,而且韭菜还越割越多! 应该有部分伙伴听说过以前有工作室通过代开通微信公众号赚钱吧?这个「淘宝开店」和「代开通公众号」类似,比公众号要稍复杂一些,有很多公司(包括我现在的公司)都是跑抖音广告去挖掘有开店意向的销售线索,只是帮人家开一个淘宝店就收 1000 以上的佣金。 我这里还是拿闲鱼举例,下面图片是我截的我闲鱼的图片,随便做了个海报上去,海报内容突出「代开网店」、「淘宝教学」之类的词,一天会进来几十个咨询如何开网店的,基本上每天都能成交 2-3 个,好的时候能成交 5 个以上。这里要说明的是海报是为了规避闲鱼的检测,我试过用一个 Word 表格列出来我能做的内容,但是商品立马就被强制下架了,估计是平台也喜欢漂亮清晰的图片吧! 为了增加曝光量(毕竟展现和转化是直接相关的),闲鱼上架的商品记得每天都去擦亮一下,如果可以的话邀请朋友帮助自己刷刷单,再用微信把钱转给朋友!因为闲鱼上面的曝光引流时间权重是15日,如果你的商品 15 天都没有卖出去的话,那么系统就会认为这个商品不是优质商品,这一点可以拿我这几天玩闲鱼的一个案例证实。可以看到截图中我上架了 3 个同样的商品,其中第二个是被人买过后我又重新上架了,其他几个商品的曝光量直接比第二个差了一个数量级不止,这还是我已经没有管闲鱼状态下的结果。 当然这里面需要用到一些话术,新手基本都不知道有一件代发的产品,他们都会问没有货源怎么办。我就以「没有货源」为例来回答,您没有货源没有关系的,我这边可以帮您对接一件代发的货源,基本上的货源都能涵盖到。如果说的再没有良心一点您没有货源没有关系,我这边毕竟在做这个,所以认识了很多的厂家老板,我可以免费为您对接厂家的货源,这个您放心就好了。 从上面图中还能看到我除了海报还放了一些关于淘宝运营的书籍上去,想想什么样的人会去搜索这样的书籍?要么就是想学习淘宝运营的,要么就是想要自己开网店。淘宝运营有淘宝大学里面的课程内容,市面上关于淘宝运营的书籍、课程的基本都能从淘宝大学里面找到。所以如果进来的客户想开网店,那么你直接给他引导开网店;而如果对方是想学运营知识,你可以直接把淘宝大学的内容换成从你嘴里出来的内容;如果对方是因为想开网店而学习的话,那么学习这件事是反人性的,这种流量放一段时间也有部分是能成交的。这个「淘宝教学」的项目据我所知有公司已经做了 10 年了,而且公司越做越大。 这里顺便说一个投放广告(引流)的思路:广告展示的产品是 A 罩杯内衣,但实际要推广的是丰胸产品。给买 A 罩杯的女人推丰胸产品,这个思路适合任何行业的投放!广告投放做人群探索的时候,优化师也常常会用这样的思路去做人群计算,从而让进入 CRM 的销售线索更加精准。 再分享一个拼多多空手套利的案例,我现在所在的这家公司的第一桶金就是这样来的,当然他们那时候市场也比现在好做多了!想一下我们自己在淘宝、京东上面买东西的时候会关注哪些东西?买家秀、销量、差评率等,拼多多自己留了一个后门可以直接修改销量,这个操作尤其对那些新店铺有用。这个数据除了可以直接吸引买家眼球外,还可以增加店铺权重,另外还可以上报一些活动,比如什么双十一、618 这一类的活动平台都是会设置门槛的,有些店铺就是因为销量不够而达不到上报活动的条件。 下面粗略介绍一下这个改销量的方法,比如我截图的这个商品(我随便截的,不代表任何观点)销量已经有 2207 件了,商品卖的价格是 58.9 元,假设我们现在要修改这个商品的销量。首先我们去后台把这个商品的价格提高,为了避免平台检测到我们违规操作,每次在原来价格基础上乘以 2,直到我们把价格修改到了 2000 元,然后进入「多多进宝」平台推广该商品,优惠券就可以设置为 1000 元,注意这里优惠券千万别设置多了,不然被别人领取了可就真麻烦了。然后自己去把这个优惠券领了,再回去修改商品价格到 1.01 元,为了能成功的修改商品价格需要更换改商品的类目,因为不同商品的 SKU 允许的最低单价不同,价格修改好了之后就去买购买该商品,下单数量直接设置为 1000。那么咱们可以算一下实际的成本了,1.01 * 1000 = 1010 元,而我们有一个 1000 元的优惠券可以抵消,实际成本就只有 10 块钱,有没有惊讶到? 接下来再慢慢的把商品价格改回去就可以了,而且这个过程基本不用担心会有别的顾客进来恶意购买,因为新店铺都没有权重,别的顾客是看不到的,而且如果新店铺都给权重的话,那拼多多多的直通车还怎么赚钱啊?需要注意的是每天修改销量的上限别超过 3000,不然店铺很容易被封! 具体的技术大致介绍完了,那么这样的客户从哪里去找?以前你在拼多多上面购买了商品就可以直接看到商家的电话,而且拼多多那时候支持秒退款,可以没有成本的获取销售线索,不过后面拼多多把这个通道给堵上了。那么拼多多里面有一个商家社区,商家社区又细分出来一个新手社区,这里面是可以看到商家店铺的名字的。所以你懂了吧?不要害怕,直接进入店铺进入客服,和商家聊天! 类似的空手套利的后门在淘宝也有,比如很多店铺因为一些原因被官方封禁了,但是淘宝留了一个后门可以解封店铺,这里我就不做详细的技术描述了,抛一个解封店铺方法线索:强制开通第二个淘宝店铺教程(可解封),随随便便收个一两千块钱不是问题! 最后说一下自己的感受吧,以上介绍几个案例其实都利用的是信息差,介绍的两个电商平台的后门是平台自己没有测试出来吗?这是平台故意留给外面的网店代运营公司的,因为平台需要这样的公司给他拉新。公司盈利模式无非就是两种模式,第一种不断的洗小白客户,第二种提升服务质量推出新产品服务好老客户。淘宝开始也是假货横行,但是现在一说到假货都不会想到淘宝了,拼多多走的一些路是淘宝走过的路,在每个阶段都多少会有它的套利机会。 我接触的这几个案例都是针对的低端流量,统计局都说了 6 亿人月收入不超过 1000 元,超过一半网民的月收入低于 3000,大部分人那种成天无所事事,却天天梦想发大财掉馅饼的心理正是很多公司利用的心理。自己少说漂亮话多做事!
Read More ~

2020 年国庆观《我和我的家乡》有感所写

上一次在我的微信公众号发文是 5 月 17 日,差不多近 5 个月没有在上面发一篇文章,看了下后台的关注人数居然没有多大的变化,安慰自己是我的读者大人都喜欢我,所以对我不离不弃没有取关,所以写了这篇文章给公众号的读者大人赔礼道歉露个面,表示我还在,想起啥就说点啥,毕竟下次这种双节重逢的日子得等到 2031 年了,过节就放空脑袋不去思考那些复杂的事情 转眼自己已经毕业两年了,同级读研的同学也都陆陆续续毕业了,一直想着等冬天时候借着旅游的名义回哈尔滨看看老师。让人意外的是老师居然自己飞成都来了,陪着老师在电子科大校园外面散了两个多小时步,仿佛一下子回到了大学时代。 老师是个极为幽默风趣的人,到电子科大是参加一个什么区块链会议,我询问他这个会议具体的内容是啥。老师有一点不耐烦的说:“就是一个卖铁锹的会议,挖币挖不动了开始教人挖币了”。老师问我现在在干嘛,我思考了几秒说了句:“我现在在卖铁锹”。哈哈哈哈哈哈 ...................... 老师常说的一个小故事,一个地方金子多,大家都去挖金子,挖金子的人没有赚钱,结果卖铁锹的人赚翻了 10 月 1 日去电影院看了《我和我的家乡》,电影里面提到贵州山区因为道路不通畅,直线距离一公里的恋爱居然因为异地恋分手了,这样的地理环境我倒是没见过,不过让我想起了经典电视剧《血色浪漫》里面的片段,我把这段给拿过来了方便读者大人观看。 《血色浪漫》是一代人的记忆,主角钟跃民在当知青的时候迷上了「信天游」,陕北一些地区也是隔一条沟可以聊天,但是要见个面得好几十里,剧中这一段对歌真的太经典了,我禁不住又翻看了好几遍,又回想起了大学上《民族音乐》课程的时光了 .................. 随时保持一颗学习的心,脑子里多装一点知识总没坏处的,钟跃民学信天游的时候也没想到可以用来撩妹啊​!说不定你从这篇文章里面看到的几个小故事也可以撩妹呐,要是撩到妹了记得回来感谢我啊​ 电影里面还有两个小细节让我印象深刻,还是讲述贵州山区的那个小节,里面阿花出场时穿的裙子让我想起了花儿。花儿是我 6 年前在宽窄巷子的一家青旅认识的,那时她还是那家青旅的老板,我正在读大冰的《乖,摸摸头》和《阿弥陀佛么么哒》,花老板的生活让我找到了大冰的文字在现实中的影射,可以翻翻她公众号「微笑而确实的日常」里面的历史文章,都挺有意思的。 花儿的手很巧,什么垃圾到她手里都会活起来,常常做一些小手工卖给旅客,也时常邀请旅客免费与他们一起共进晚餐,餐后背着吉他外面唱自己写的歌,有时候路人会给几十块钱。后面通过朋友圈了解到花老板去西藏生活了一段时间,而后又回到了大理。花老板回到大理后我又去过一次那间青旅,但是已经完全变了样子,旅客之间没了谈天说地,屋子也变得像酒店一样冰冷,和花老板联系确认她不会再回来,就再没联系过了。 没有找到花老板比较好的照片,这张背影照可以勉强看到裙子的布料,听说云南很多人穿这样布料的裙子。 在这个快节奏人人都算计的社会,太多人少了像花老板一样的洒脱,太多人都忘记了这个世界上还有爱,也太多人连为爱放弃的勇气都没有。4 月离开 IT 行业之后我才真正感受到程序员群体的单纯,几个月的经历也更让我明白了家人与朋友的重要,翻一翻你的通讯录去联系一下那些许久没有联系的朋友吧。 《我和我的家乡》还有一段教室漏雨的剧情,想起来自己读四五年级的时候不也是这样子嘛!学校拿几个木桩和几块木板子用钉子钉住,再加上石棉瓦和塑料薄膜就搭建了一间简易教室。四川的夜晚总是爱悄悄下大雨,我们早上到教室的第一件事不是早读,而是把教室的水先舀出去,这可是同学们比较喜欢的环节啊,不用被老师监督着早读可太轻松了。 到夏天时候屋顶上爬满了飞蛾,全教室都是飞蛾身上掉下的粉末,这个场景对同学们来说也是不可多得的福利,不用上晚自习可以直接回宿舍睡觉。第二天早晨去教室把那两垃圾桶的飞蛾扫一扫就好了,不过比较难搞的是晚上满屋顶飞蛾遇到半夜暴雨,第二天可就真不好清理教室了! 本来想把自己以前写的文章都搬到知乎去,结果一不小心就触犯了知乎的社区规范了,不仅把我的几篇文章都给删掉了,还把我给禁言了一天。一气之下自己买了个服务器搭建了个博客,不管在什么平台写东西都得遵守别人的规矩,现在我的地盘我做主我自己定规矩! 最后还是分享最近的一点点思考,执行力和坚持这两样东西很重要,我自己身上严重缺乏这两样东西,说起来很容易做起来却不是一般的难,不知道有多少人是真正明白了它们的重要性。 任何人的批评都不会让自己开心,但如果一个人还愿意骂你还在鞭策你,那你真的得感谢人家,当对方什么都不愿意给你说的时候就是已经放弃你了,你就又失去了一个帮助自己成长的人!
Read More ~

大学生书单推荐

经常阅读的人和不常读书的人是不一样的,都说「书中自有黄金屋,书中自有颜如玉」,但是多数人都跑到抖音、快手、微博这些平台上面如饥似渴的找黄金,在这个嘈杂的社会中能静心读书变成了一件幸福的事情,也尝试了一下牛客网的「书单」功能,但是有的书我在里面搜索不到,所以直接在这里发了。 在开头先说一下,有的书籍其实没必要去买实体书,尤其在一二线城市打拼的青年,如果在搬家时有太多的书籍简直就是一场噩梦。但是实体书也有另外一个好处,纸张的触感、可以拿笔在上面书写是电子书无法代替的,而且大部分人喜欢用手机去看电子书,很容易就被微信弹出来的消息给打扰了,在全民浮躁的年代能够聚精会神专注的做一件事简直是奢侈。 书也不是你读的越多越好,而是要看你把什么读进去了,内化成为自己的知识才算读进去了;也不是每一本书都要读完,如果发现一本书不适合自己那么撇到一边完全没有问题,何必浪费时间去做那些形式上的表演呢?我个人比较喜欢实体书的原因是,我看实体书的时候能够连续不间断读两个小时,只有专注去读一本书的时候才能让自己有所收获。 我推荐的书籍不一定适合你,但是你也要有意识的去读书,从自己喜欢的内容开始去阅读,什么言情啊、武侠啊、文学啊都可以,重要的是去阅读,逐渐的你就会爱上阅读,自己喜欢的内容会带领你逐步的去探索领域的边界,进而拓展到其它领域,靠自己的探索去获得新知识能够让你记忆更深刻,希望你也能变成一个读书人。 首先推荐李笑来的《把时间当作朋友》和《财富自由之路》,这两本书写的真不错,我身边有好多人都是因为这两本书而改变了人生轨迹,虽然李笑来的人设倒下了,但是不影响这两本书的质量,也不要因为一次人设倒下就全盘否定一个人,其实李笑来那一波操作之后人们反倒更加崇拜他了。 ​ 季羡林先生的书值得一读,大概读几本季老先生的文集就可以了,从文字里面去感受季老求真务实的态度,什么才是做学术的态度,可能读几本季老的书会抑制不住多读几本,大师之所以为大师大师,不仅仅是因为天资聪慧,还有他的为人处世、求真务实。 朱光潜先生《给青年的十二封信》一类的小册子非常值得读一读。比如我在读《谈美》的时候,本以为会是一次艰涩深奥的学习过程,但是没想到老先生用朴实的笔触,深入浅出地把我带进了一个栩栩如生的抽象世界,从青年人所熟知的文艺作品和生活事例出发,将美学的诸多原理娓娓道来。而且书虽取名为《谈美》,但又不仅是讲美学的书,入世出世的态度、青年人培养生活情趣和人生趣味的指南等等都有涉及。 ​ 《小狗钱钱》、《24 堂财富课——与女儿谈创业》、《穷爸爸富爸爸》、《好好赚钱》中可以选一两本阅读,大学只教了我们生存的技能,并没有教我们如何理财,而这又是每个人不得不面对的问题,这几本入门书籍,可以帮助您建立财富理念。再读一本《指数基金投资》,定投指数基金是最较适合小白的投资方式,尤其对于没有时间研究股票和基金的上班族来说,定投指数基金是一个很不错的方式。如果在学生时代有一点闲钱去尝试的话,就是一件更好的事情,因为学生时代几百几千看起来很多,但是当你参加工作了之后这点钱根本就不会放在眼里,试错成本低的阶段尽量多去尝试。 ​ 《浪潮之巅》、《数学之美》、《大学之路》等等,吴军博士的书籍都值得一看,《数学之美》是比较好的人工智能入门书籍,晦涩难懂的道理在吴军博士的文字中变的简单了,感受一下心态、格局等的提升会给人生带来多么重要的改变,我个人目前还没有读完。吴军老师还出了《见识》、《态度》、《格局》几本书,同时他在「得到」平台上的课程也是很值得学习的,不过建议得到和书籍选一个就行了,他新出的书籍很大一部分就是在得到上面稿子整理的。 ​ 像《长乐路》、《明朝那些事儿》、《以纸为桥》、《显微镜下的成都》、《邓小平时代》一类的书籍是可以读读的,应该去了解一下历史的细节,你所看到的不一定是真实的,光芒的背后是另一片黑暗,历史是有规律的,我们的生活可以在历史中找到影子。其中《邓小平时代》我有完整的版本,如果有需要可以微信联系我发你。 ​ 《人类简史》、《人性的弱点》、《心灵七游戏》等心理、哲学类书籍选几本读读,哲学是所有学科的抽象,到一个新的高度看看世界,提高自己的情商,让整个世界都为您张开拥抱的双臂。别好不容易谈个女朋友,因为情商不够又分了。 ​ 读不动名著小说,可以读《偷影子的人》,每个人都有相似的童年,只是大部分人都很羞涩,不好意思说出来而已,主人公就好像在经历自己曾经经历过的生活一样,从没有想过普普通通的童年居然能被描写的如此动情。《月亮与六便士》也是不错的选择。 ​ 都知道莫言先生获得了诺贝尔文学奖,我以前是很害怕读这种大家的书的,巧合看了电影《红高粱》产生了对原著的好奇,于是就去看了《红高粱家族》,结果一看就停不下来了。莫言把人性描述的淋漓尽致,每个人的性格、特点都异常鲜明,电影只是书籍的一部分,书籍比电影更精彩。高密东北乡在莫言的笔下算是绝了,莫言的语言驾驭能力,让各色人物活灵活现,就连那纯种的高粱也时刻在你的脑海里摇曳一番,姿态万千。 ​ 大部分学生都出生于农村家庭,农村的局限性不仅限制了我们的父辈,也限制了我们自己的,好不容易打破限制走到了大城市,一定不能被父母的传统思维影响到了,对父母不是要言听计从,能自己独立思考是成年人的标志,我们要学会对父母灌输给我们的思想取舍。《你当像鸟飞往你的山》英文名为《Educated》,是美国一位 30 多岁名叫塔拉的回忆录,一个从大山、摩门教家庭走出的女孩完成了最终的蜕变。每个人都有自己爹山,你当像鸟一样飞往你的山,过程中经历的转变、蜕变、虚伪、背叛,就是教育。这本书也是比尔盖茨年度荐书第一名、亚马逊年度编辑选书第一名...... ​ 大家应该都看过《美丽心灵》这部电影,电影中的主角纳什是博弈论的发明者,也是普林斯顿大学的教授,普林斯顿除了纳什外,还有很多我们所熟知的科学大牛。比如同为计算机科学之父和人工智能之父的艾伦·图灵,现代计算机之父冯·诺伊曼,出版了《了不起的盖茨比》的著名作家菲茨杰拉德......《自由的老虎》是一个进入普林斯顿的中国女孩用详实的档案与第一手采访资料,谱写的这些大牛挣脱束缚、追寻内心自由与价值的故事。 ​ 如果有可能的话,在大学最好认认真真谈一场恋爱,学习如何去爱一个人,在人生最好的年纪多一点洒脱,离开高中后大家就逐渐变得会算计了,心中有爱生活才会幸福。《霍乱时期的爱情》可以读一读,刚好和今年的新冠疫情有些契合。对了,像《非洲小扎》这样饶有趣味的异国生活小故事集读起来也很不错。 ​ 《荒诞医学史》和读库出版的《医学大神》全套十四册,非常值得一读,有的人大学白读了,这十四本小册子有助于培养自己的科学思维,多点医学知识总不是坏事,江湖骗子骗你的难度也会增加。科学的每一次进步都来之不易,现在人人都知道的勤洗手、用酒精消毒等常识,在前几个世纪居然是被科学界极力反对的做法,如果让我在本文里面只选择一套书籍,那么我会毫不犹豫的选择《医学大神》。在这里我建议你直接订阅读库的全年内容,这里有一篇为啥人人都爱《读库》的老六?的文章,你读完之后就会产生对读库的购买欲望了。 ​ 张立宪的真诚平实少有人及,《闪开,让我歌唱八十年代》中那些呈现细节的文字细腻的像个女子!可以读出来均是老六脑子里的一些记忆,记忆这东西多少都会出现点偏差,不必拿着学术精神去考究,那样就会失去读此书的欢乐了,对那个不属于我的时代是挺好奇的,里面还提到了很多不为人知的经典。 前一段已经提到读库了,如果你不太喜欢自己去挑选书籍的话,那么我强烈推荐你订阅「读库2021」,因为读库没有电子版所以你只能买纸质版,很多有深度的内容你在别的地方是看不到的。而且有意思的是每次打开读库就像打开盲盒一样开心。 比如东东枪采访郭德纲,梅兰芳先生特辑,生物基因究竟是怎么回事儿,这些东西,专门用几万字老老实实的笔锋讲清楚,完全没有那些华丽的东西,也没有那些拼流量的技巧,就是老老实实的文章说老老实实的事儿,在这个人人都抢流量的时代是难能可贵的。 《The Almanack of Naval Ravikant:A Guide to Wealth and Happiness》、《原则》、《奈飞文化手册》几本书介绍了很多人生应该践行的准则。前面两本算是创始人的人生原则清单, 指出不少我们应该避免的事情,也列出来了很多我们应该坚持的东西,比如写作、用计算机节省人力等等。《奈飞文化手册》我觉得算是集体智慧,虽然内容是站在企业角度写的,但对个人也有很大的人生指导意义。 ​ 最后再推荐一本《你是你吃出来的》吧,我们中国人的饮食基本是不健康的。身体所必须的营养一定要注意均衡摄入,不能因为不想吃饭或是学校的饭难吃就不吃,吃东西不仅要关注能量,更要注重七大营养素(碳水化合物、脂类、蛋白质、维生素、矿物质、水、膳食纤维)。鸡蛋、牛奶、蔬菜、水果、坚果、肉类、(深海)鱼、动物肝脏、米饭/面食等,都需要均衡摄入。《你是你吃出来的》里面做了大量苦口婆心的讲解,也纠正了大家平时的一些错误观点,比如很多人生病了不舒服就喝喝粥打发,觉得粥里面很有营养,实际上粥是没有什么营养的;粉条、土豆、红薯这些都是算作主食这一类的,尤其很多人把粉条当做菜来吃是绝对错误的,某一餐有粉条话就应该主动减少米饭的摄入量;很多地方晚上都习惯吃面食,觉得面食容易消化,但面食里面的主要要成分是碳水化合物,碳水化合物摄入过多的结果只会让你越来越胖。 ​ 「一席」上的大部分演讲是值得听的,让您对中国社会有一个更好的了解;「TED」、「网易公开课」上国外高校的视频可以多看看,讲的真心不错;国内出观众、大部分二流学校的演讲能不去就不去,还不如把这种时间拿去睡睡觉,补充补充精力。 多阅读高于自己的作品,远离精神毒品,互联网时代的阅读不再限于书籍了,良心大佬的博客也是一个不错的选择,只有阅读高于自己的作品才能获得成长,少刷抖音、微博、知乎一类的产品,里面是有一些有趣的人生,但是一刷就是几个小时,太浪费时间。
Read More ~

那些鲜为人知的微信使用技巧,让微信更便捷高效

本文整理的技巧基于两种目的,一种是实用方便用来解决生活中的小问题的,另外一种是用来装逼去撩小妹妹的,可能大多数人都更喜欢装逼撩妹的技巧吧。 被人@时掉表情包 在微信群内聊天时如果发送的消息触发了某个关键词就会掉下来表情包,为聊天增添了一些乐趣。我们可以通过人为的方式让别人一@你,就自动掉表情包。操作起来很简单,就是在群聊昵称末尾添加一些不同的字符,比如我在群聊昵称末尾加了「คิดถึง」顶部就掉下来了满屏的星星✨。 其实把这个泰文翻译一下就知道没有那么神秘了,微信内置的翻译功能将「คิดถึง」解释为「想念」,这下就明白为什么会掉星星✨了吧。「สุขสันต์วันเกิด」解释为「生日快乐」就会掉蛋糕,其它还有很多可以自己翻译一下就可以了。 同一条朋友圈别人评论/点赞不再提示 如果某个朋友发了一条朋友圈,你在下面评论或是点赞了,那么当你们的共同好友也对同一条朋友圈点赞或评论时,就会在「发现」有消息提示,但很多时候我们并不想要这样的提示,那怎么办呢?点到朋友圈的消息页中,iOS 向左滑动(安卓长按)就可以看到有个「不再通知」按钮,点击之后共同好友再点赞或评论就不会收到提示啦! 用好微信内置的代办事项 微信内置的代办事项功能估计没多少人知道,微信无疑是我们打开频率最高的 APP,把代办事项放在微信就更不容易忘事了。 可以看到它被置顶在微信的首页界面,每次启动微信都能看到,非常的方便,那么如何把代办事项置顶呢? 第一步:打开微信 > 我 > 收藏 > 右上角➕号 > 右下角图标 > 代办 第二步:右上角三个点 > 左下角在聊天中置顶 重要事件提醒 我们经常会在微信上答应别人一些事情,为此可能去找一些清单软件来提醒自己,问题是清单软件又不常打开,常常会导致事情的忘记,给别人留下一个言而无信的形象。其实微信自身就已经带了提醒功能,长按任何一条消息,上面有一个提醒按钮,点击设置提醒时间,到了提醒时间后,会在「服务通知」中有推送的提醒。 改善公众号阅读体验 微信公众号阅读文章的体验不佳,不支持分组,也不支持进行上一次阅读,这时可以选择公众号任意一篇文章,点击右上角之后找到「在微信读书中打开」,如果没有这个功能,可能需要升级微信或者下载微信读书 App。 建立一个人的微信群 怎么建立只有一个人的微信群呢?选择 -> 添加朋友 -> 面对面建群 -> 输入数字 -> 建群完成。这个只有自己的群就相当于一个信息分组,可以把自己平时的想法、待阅读的文章、写作灵感等发到里面,就自己一个人看,而且还可以对微信群进行置顶操作,不会受到其他微信群信息的影响,处理完的信息也可以像删聊天记录一样删掉,当然也可以选择发给文件助手或者自己。 使用微信编辑图片 我们有时候为了别人能更方便的理解自己想表达的意思,或者图片上的某些位置不想被别人看到,可以在添加图片的时候选择「预览」,就可以对图片进行编辑了。最实用的就是斗图的时候,对方一张图过来,如果手里没有合适的图片,可以直接基于对方的图片进行编辑,怼回去。 利用微信收藏快速拼图 选择「收藏」,在里面添加图片,然后选择右上角三个...的按钮,之后选择保存为图片,这样你添加的图片就拼接为了一张长图了,非常方便的操作,有的朋友喜欢分享聊天记录,就可以这么拼接。 善用「搜一搜」 微信的「搜一搜功能很强大,比如有一天你无意在朋友圈看到一条信息,当时没有发现它的价值,过了一段时间因为其他事,突然恍惚记起了以前某条朋友圈提到过相关的情况,想查一查。这时就可以通过「搜一搜」来快速查找了。除此之外,「搜一搜」还能搜索文章,方便你快速查看与某个主题相关的文章;以及表情包搜索等功能,在斗图的时候不会再为没有表情包而烦恼。 僵尸粉检测 相信很多人都遇到过别人给你发一条消息,上面注明是为了清僵尸粉的,但是这样会打扰到绝大部分微信好友,也给别人留下很不好的印象,我很反感收到别人的清粉消息。如果你怀疑某个人删除了你,你试着转账测试一下就可以了。 推荐几个小程序 微信发票助手,经常出差的朋友或者行政小姐姐,常遇到的问题是在开公司发票的时候,需要填写一些信息,一般有记不住的,可以使用这个小程序填写好,之后每次需要的时候打开就好了,或者别人需要的时候,你分享二维码给他就可以了。发票信息填完后,会在「个人信息」底部多一个「我的发票抬头」,很方便的哦。 微信指数,有时候可能会做一些调查,比如写文章的朋友,文章标题到底是用“旅游”还是“旅行”好呢?这个时候就可以用微信指数来做调查,可以查看不同词汇之间的热度。 文章截图,IOS 用户比较苦恼的应该就是截长图了吧,有人就专门做了一个小程序,只需要把文章的链接复制过去,就可以自动生成截图,还可以生成 PDF 文件哦。 蚂蚁清单,很多人都有使用待办事项管理软件,但是有时候又忘记打开,这时不妨把它放到日常打开频率最高的微信里面去,而且还能为手机节省一点空间,蚂蚁清单的体验很好,可以自己去尝试。 一条人生经验 最后说一条人生经验吧,敏感和违法不和谐的话题不要聊。
Read More ~

互相看不起|断舍离|《良医》

以前在朋友圈提到过这样一个现象,重庆人和四川人说的都是四川话,但是大部分重庆人会说他们说的是重庆话,说「川渝是一家」的通常也都是四川人。 在深圳也有一个很怪的现象,两个客家人谈话会用客家话,两个潮汕人谈话会用潮汕话,两个广东人谈话会用粤语,反正就是尽可能用更小众的语言。 想了一下,故意用第三方听不懂的语言,实际上是很欠考虑的,如果是刚见面用方言寒暄几句我觉得还行,但是后面谈话就应该使用大家都能听懂的语言了。 疫情期间大家都没法出去玩,我和老叔倒是出去爬了爬山,村里的荔枝山别人进不去,整座山就我和叔两个人,单从疫情这个角度讲,荔枝山是比大部分地方都要安全的。 我自己可以在疫情期间爬爬山,结合我自己的感受,加上前段时间的「大奔进故宫」事件。我发现人们并不是痛恨特权,而是痛恨自己没有特权。大部人痛恨的不是腐败,痛恨的是自己没有腐败的机会。 上面四川和深圳两个例子也差不多是出于这样的优越感,鉴于四川除了成都外,其它地方投资的回报率太低,穷地方的人总会羡慕富有的地方,说川渝一家的人大概率不是成都人。 春节期间看了一本《断舍离》,它讲究的是内部的自觉自省,虽然整本书挺啰嗦的,完完全全可以用一篇几千字的文章代替,但是它传达的人生整理理念很值得参考,感兴趣的读者大人可以在微信读书中阅读此书。下面是一段摘自书中的内容。 我们习惯于思考「有效性」,却往往忽略了作为「有效性」前提的「必要性」,对物品也常常陷入这样的定式思维,导致家里各种杂物堆积,这些杂物给人的压迫感,以及狭窄空间给人的阻塞感,会让人的思维变得迟钝、行动变得迟缓! 借助「断舍离」的理念,我删了 400 多个微信好友,处理了一些不会再使用的家具和书籍,才发现之前一直舍不得扔的那些东西扔了对我的积极作用更大,以前写过的一篇你如果只是一直囤干货,那永远也不可能进步,核心思想和断舍离基本一致,遗憾的是自己当时写下这篇文章后,竟然不懂得延伸到其它领域。 可能一部分人有读书摘抄语录的习惯,我个人在阅读技术书籍或是扫除我知识盲点的时候,我也会通过记笔记来加深自己的理解。想想自己强迫症式的记笔记面面俱到其实也是在浪费时间,大部分笔记自己都不会再去看第二遍的,舍弃一些不必要的形式会让自己的阅读更有收获。 还发现自己另外一个错误观点,我不管是写字还是看书都比大部分人慢,一直都认为是自己看书的方法不对,现在才发现问题的根本原因。是因为我对具体的领域不熟悉,所以看这个领域的书籍才会速度很慢,如果对这个领域熟悉了,那一目十行甚至几十行的速度应该都可以达到。结论就是书读的少了导致读书的速度慢。 推荐一部美剧——《良医》,全剧的场景基本是在医院,但有深度的内容基本都和医院无关,除了最基本的医疗科普外,更多的是对家庭、爱、职场、心理等的探讨,下面是我摘的两句台词。 Whenever people want you to do someting they think is wrong, they say it’s “reality”. 当人们想让你做他们认为错误的事时,他们总会说这就是现实。 Very few things that are worthwhile in life come without a cost. 人生中那些有意义的事大多是有代价的。
Read More ~

Vue 入门避坑——Vue + TypeScript 项目起手式

在此前我使用的前端框架是 Angular,使用过 TypeScript 后你就会讨厌 JS 了,我学习 Vue 时的最新版本是 2.5,相信大部分同学都不会认为 Vue 那样又细又长的代码很美观吧,简单看了一些网络博客后,我毅然决然引入了 TypeScript 进行开发,本文仅整理记录我自己遇到的一些坑。 使用 Cli 脚手架是一个比较方便的工具,这里需要注意的是@vue/cli和vue-cli是不一样的,推荐使用npm i -g @vue/cli安装。 安装完成后,可以直接使用vue create your-app创建项目,你可以选择使用默认配置亦或是自己手动选择配置,按提示一步一步向下走即可,它会根据你的选择自己创建比如tsconfig.json等等配置文件。这里推荐使用less开发样式,sass老是在安装的过程中出问题。 当然你也可以使vue ui命令启动一个本地服务,它是一个 Vue 项目管理器,提供了一个可视化的页面供你管理自己的项目,它的样子如下图所示,还是比较清新的。 使用 vue-property-decorator Vue 官方维护了 vue-class-component 装饰器,vue-property-decorator 则是在vue-class-component基础上增强了更多结合Vue特性的装饰器,它可以让 Vue 组件语法在结合了 TypeScript 语法后变得更加扁平化。 截止本文时间,vue-property-decorator共提供了 11 个装饰器和 1 个Mixins方法,下面用@Prop举个例子,是不是看起来引起极度舒适。 import { Vue, Component, Prop } from 'vue-property-decorator' @Component export default class YourComponent extends Vue { @Prop(Number) readonly propA: number | undefined @Prop({ default: 'default value' }) readonly propB!: string @Prop([String, Boolean]) readonly propC: string | boolean | undefined } // 上面的内容将会被解析成如下格式 export default { props: { propA: { type: Number }, propB: { default: 'default value' }, propC: { type: [String, Boolean] } } } 使用 Vuex 关于怎么使用Vuex此处就不再做过多说明了,需要注意的一点是,如果你需要访问$store属性的话,那么你必须得继承Vue类,坑的地方是在某些情况下即使你没有继承Vue,它也能通过编译,只有在程序运行起来的时候才报错。 class ExampleApi extends Vue { public async getExampleData() { if (!this.$store.state.exampleData) { const res = await http.get('url/exampleData'); if (res.result) { this.$store.commit('setExampleData', res.data); return res.data; } else { promptUtil.showMessage('get exampleData failed', 'warning'); } } else { return this.$store.state.exampleData; } } } 使用自己的配置(含代理) vue.config.js是一个可选的配置文件,如果项目的根目录中存在这个文件,那么它会被@vue/cli-service自动加载,它的配置项说明可以查看配置参考。 我们再开发过程中都会使用代理来转发请求,代理的配置也是在这个文件中,它的官方说明在devserver-proxy中,下面是一个简单的vue.config.js文件例子。 module.exports = { filenameHashing: true, outputDir: 'dist', assetsDir: 'asserts', indexPath: 'index.html', productionSourceMap: false, transpileDependencies: [ 'vue-echarts', 'resize-detector' ], devServer: { hotOnly: true, https: false, proxy: { "/statistics": { target: "http://10.7.213.186:3889", secure: false, pathRewrite: { "^/statistics": "", }, changeOrigin: true }, "/mail": { target: "http://10.7.213.186:8888", secure: false, changeOrigin: true } } } } 让 Vue 识别全局方法和变量 我们在项目中都会使用一些第三方 UI 组件,比如我自己就使用了 Element,但是在使用它的$message、$notify等方法时就直接报错了,究其原因就是$message等属性并没有在 Vue 实例中声明。 官方对此给出了很明确的解决方案,使用的是 TypeScript 的 模块补充特性,可以查看增强类型以配合插件使用。既然知道是因为没有声明导致的错误,那我们就给它声明一下好了,在src/shims-vue.d.ts文件中添加如下代码即可,如果没有该文件请自行创建。 看到网上也有一部分人说的是src/vue-shim.d.ts,反正不管是怎么命名这个文件的,它们的作用是一样的。 declare module 'vue/types/vue' { interface Vue { $message: any, $confirm: any, $prompt: any, $notify: any } } 这里顺道提一下,src/shims-vue.d.ts文件中的如下代码是为了让你的 IDE 明白以.vue结尾的文件是什么玩意儿。 declare module '*.vue' { import Vue from 'vue'; export default Vue; } 路由懒加载 Vue Router 官方有关于路由懒加载的说明,但不知道为什么官方给的这个说明在我的项目里面都没有生效,但使用require.ensure()按需加载组件可以生效。 // base-view 是模块名,写了相同的模块名则代码会被组织到同一个文件中 const Home = (r: any) => require.ensure([], () => r(require('@/views/home.vue')), layzImportError, 'base-view'); // 路由加载错误时的提示函数 function layzImportError() { alert('路由懒加载错误'); } 上面的方式会在编译的时候把文件自动分成多个小文件,编译后的文件会以你自己命名的模块名来命名,如果代码之间有相互依赖,依赖部分代码编译后的文件会以两个模块名相连后进行命名。 但是需要注意的是,这样拆分小文件之后引入了另外一个新的问题,因为客户端会缓存这些编译后的 js 文件,如果功能 A 同时依赖了a.js和b.js两个文件,但用户在使用其它功能时已经把a.js缓存到本地了,使用功能 A 时需要请求b.js文件,这时程序就很容易报错,因为此时在客户端这两个文件不是同一个版本,所以可能导致a.js调用b.js中的方法已经被删了,进而导致客户端页面异常。 关于引入第三方包 项目在引入第三方包的时候经常会报出各种奇奇怪怪的错误,这里仅提供我目前找到的一些解决办法。 /* 引入 jquery 等库可以尝试下面这种方式 只需要把相应的 js 文件放到指定文件夹即可 **/ const $ = require('@/common/js/jquery.min.js'); const md5 = require('@/common/js/md5.js'); 引入一些第三方样式文件、UI 组件等,如果引入不成功可以尝试建一个 js 文件,将导入语句都写在 js 文件中,然后再在main.ts文件中导入这个 js 文件,这个方法能解决大部分的问题。例如我先建了一个lib.js,然后在main.ts中引入lib.js就没有报错。 // src/plugins/lib.js import Vue from 'vue'; // 树形组件 import 'vue-tree-halower/dist/halower-tree.min.css'; import {VTree} from 'vue-tree-halower'; // 饿了么组件 import Element from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; // font-awesome 图标 import '../../node_modules/font-awesome/css/font-awesome.css'; import VueCookies from 'vue-cookies'; import VueJWT from 'vuejs-jwt'; Vue.use(VueJWT); Vue.use(VueCookies); Vue.use(VTree); Vue.use(Element); // src/main.ts import App from '@/app.vue'; import Vue from 'vue'; import router from './router'; import store from './store'; import './registerServiceWorker'; import './plugins/lib'; Vue.config.productionTip = false; new Vue({ router, store, render: (h) => h(App), }).$mount('#app'); 因为第三方包写的各有特点,在引入不成功的时候基本也只能是见招拆招,当然如果你的功底比较深厚,你也可以自己写一个index.d.ts文件,实在不行的话,那个特殊的组件不使用 TypeScript 来写也能解决,我目前还没有找一个可以完全解决第三方包引入错误的方法,如果您已经有相关的方法了,希望能与你一起探讨交流。
Read More ~