Fork me on GitHub

索引优化三大原则

原作者: 南寒之星

原文地址: 索引优化三大原则

建索引的几大原则

对于索引我总结三大原则:

  • 1、最左前缀原则;
  • 2、不冗余原则;
  • 3、最大选择性原则。

基本掌握这三条,对于索引的优化理论上是没有问题了。

最左前缀原则

一般在 where 条件中两个及以上字段时,我们会建联合索引。 高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和 B+Tree 中的“最左前缀原理”有关,下面通过例子说明最左前缀原理。 MySQL 中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组<a1,a2,a3…an>,其中各个元素均为数据表的一列,实际上要严格定义索引需要用到关系代数。另外,单列索引可以看成联合索引元素数为 1 的特例 最左前缀是一个很重要的原则。 mysql 会从左至右匹配,直到遇到范围查找(> < like between)就停止。 如: select * from table1 where a=1 and b=2 and c<3 and d=9 ; 建立的联合索引为:(a,b,c,d) 实际使用的索引为(a,b,c)。因为遇到了 c<3 就停止了,d 列就没有用上。 前面讲过联合索引是有序元组, 则 mysql 实际建的索引为:(a) (a,b) (a,b,c) (a,b,c,d)。 举个例子:where b=2 and c=3 and d=9 ;按照最左匹配原则,这个条件就没法走索引了,首先必须有 a。 =,in 可以乱序,查询优化器会帮你优化成索引可以识别的形式。也就是说,where b=2 and a=1 and c<3 使用的索引任然为(a,b,c)组合。 回到线上案例: 索引:idx_whid_distributionorderid(wh_id,distribution_order_id) 索引组合 (wh_id) ,(wh_id,distribution_order_id) 相当于建了一个 wh_id 的单列索引,也就是说当你要根据 wh_id 查询时,是不需要再新建索引了。

不冗余原则

尽量扩展索引、不要新建索引 mysql 目前主要索引有:FULLTEXT,HASH,BTREE 好的索引可以提高我们的查询效率,不好的索引不但不会起作用,反而给 DB 带来负担,基于 BTREE 结构,插入、修改都会重新调整索引结构,存储成本增加,写效率降低,同时 DB 系统也要消耗资源去维护。 基于刚才的最左匹配原则,尽量在原有基础上扩展索引,不要新增索引。 能用单索引,不用联合索引;能用窄索引,不用宽索引;能复用索引,不新建索引。 回到线上案例: nc_tms_order、ct_order 看看分别有哪些索引

看到这里我开始凌乱,好像什么字段都可以加索引。 为此专门针对 ct_order 表两个具有比较性的索引做了性能测试,ct_order_code,lc_order_code 区分度都是非常高的字段,前者是好于后者(联合 station_id 并没有起到太多优化作用)。 idx_ct_order_code(ct_order_code), idx_ct_order_lc_order_code(station_id,lc_order_code) 那么接下来我们说说那些字段适合建索引。

阅读更多...

spring data jpa @query和pageabel

原文地址 https://stackoverflow.com/questions/22345081/spring-data-jpa-query-and-pageable

您可以对native query 使用分页。它在此处记录:https//docs.spring.io/spring-data/jpa/docs/current/reference/html/#_native_queries

“ 您可以通过自己指定 count query 来使用本机查询进行分页:示例59.使用@Query在查询方法中声明分页的本机count query

1
2
3
4
5
6
7
public interface UserRepository extends JpaRepository<User, Long> {

@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
}

数据库设计规范之命名规范

原作者: guoyJoe

原文地址: 数据库设计规范之命名规范

命名规范

说明:指数据库对象如表(TABLE)、序列(SEQUENCE)、过程(PROCEDURE)、触发器(TRIGGER)等的命名约定。

1. 基本命名原则

(1) 规则1:1st_place_medal: : 命名使用具有意义的英文词汇,词汇中间以下划线分隔。

(2) 规则2​ :m: : 命名只能使用英文字母,数字,下划线,并以英文字母开头。

(3) 规则3: 避免用ORACLE、MySQL的保留字如desc,关键字如index。

2. 表命名

(1) 规则1: 同一个模块的表尽可能使用相同的前缀,表名称尽可能表达含义。

(2) 规则2:长度不超过25个字符。

3. 字段命名

(1) 规则1: 表达其实际含义的英文单词或简写。

MySQL:布尔意义的字段以“is_”作为前缀,后接动词过去分词。

(2) 规则2:各表之间相同意义的字段应同名。

MySQL:各表之间相同意义的字段,以去掉模块前缀的表名_字段名命名。

(3) 规则3:外键字段用表名_字段名表示其关联关系。

MySQL:禁止使用外键。

示例:log_prepay.id=log_account.prepay_id

示例(MySQL):字段prepay_group.id被prepay_contact引用;prepay_contact表中与之对应的字段命名为:group_id

4. 索引命名

(1) 规则1: 表名称_字段名_IND

MySQL:idx_表名称_字段名

示例:employee表first_name上的index:employee_fid_ind

示例(MySQL):prepay表agtphone_id和stream_id上的index:idx_prepay_aid_sid

5. 约束命名

(1) 规则1: 主键约束:表名称_PK。

(2) 规则2: 唯一约束:表名称_字段名_UK。

MySQL:除主键外,需存在唯一性约束的,可通过创建以“uk_”为前缀的唯一索引实现,但应用中需要同时有唯一性检查逻辑。

6. 触发器命名

(1) 规则1: TRG_表名_操作。

7. 函数过程命名

(1) 规则1: 采用动词+名词的形式表达其含义。

8. 序列命名

(1) 规则1: SEQ_表名

线上环境部署概览

作者:等你归去来

cnblogs.com/yougewe/p/10327217.html

谈到线上环境,一般开发同学,不太容易接触到。即使接触到,也只是其中的冰山一角!

所以,其实说起线上环境的部署,咱们好像都有点懂,但是又都不一定完全懂!网上的知识无穷无尽,但往往都是各司一职,对于普通同学,很难窥其全貌!

所以,我今天就来说说,一些普通的线上环境的部署步骤,和一些脚本小技巧吧。只希望通过这篇文章,能够让大家有一个运维的全局观!

我将会分几条线来整理咱们的运维思路!

一、从理论上讲,我们应该怎么做?

1.针对的是什么样的用户群体,体量大概会有多少?

这是一个部署规划的前题。为啥呢?

一、如果你针对的是后台管理员,人数也不多,那么你可能只需要一个服务器就可以了,前后端也都可以部署在同一台服务器上;如果稍微考虑下单点故障问题,则顶多两台服务器搞定!

二、如果针对的是前端普通用户,那么,往往就会考虑多机部署,前后端分离,单点问题,负载均衡了;至于具体要部署多少台,则要根据你的用户情况来定了,当然,前期一般没必要部署很多台服务器!更多的考虑是横向扩展的能力。只要能支持横向扩展,则短期内,往往不用担心性能和架构问题!

2.为支持预估的用户量,大概需要多少的带宽?
  
有访问就会有流量产生,而预估的用户量,则是一个带宽资源需求的一个决断依据!

一般针对前期用户不太确定的场景,可以先买个 10M 左右的共享带宽,基本能够应付;经过一段时间的观察后,再进行带宽的变更也可以;

当然,考虑带宽,自然也会存在一个公网IP的问题,因为流量是从IP进来的。而在IP之前,则是域名的访问。域名问题则又涉及到DNS,不必细说!

公网IP可以是直接指向机器的,也可以是指向负载均衡器的。如果想要支持横向扩展,则IP的指向一定是一个负载均衡器。因为只有这样,当遇到流量突增,或者做活动的时候,才能更快速的进行扩容!

3.数据库规划如何?

数据在当下时代,算是重中之重了。机器没了可以再买,代码没了可以再写,但是数据没了就完蛋了!

数据库一般要遵从几个基本原则: 一、带宽要大;二、运算速度要快;三、要能承受足够大的运算空间;(即:带宽足够大/cpu核数够多/内存容量够大/最大并发连接数/…)

所以,一般不要在数据库上省钱,能多点就多点!

另外,也不要什么样的数据都往数据库(关系型数据库)存,搞清楚各类型数据库的强项与弱项,做出明智的选择。否则会带来很多不必要的麻烦!

4.应用要基于操作系统来部署还是基于容器来部署?

这是个决策性的问题!基于操作系统的部署,是一种比较传统和常见的部署方式。优点是,很多系统工具都是完善的,只要你大概知道要部署什么,部署下来一般不会有太多问题,因为这是个完整的系统。

但是,由于系统与系统之间可能不能完全一致,有各种各样的差异,所以,你在这个机器上运行成功的东西,在另外的机器上则不一定能成功。因此,基于系统的部署将会使我们的问题排查难度大大增加,而且移值性会很差。比如你在机器A上安装了10个软件,你可能配置了n个选项,但是,当你在安装B机器的时候,你并不能很好的利用原有的配置,你还得从头一个个地来!

因此,有另一个部署方案,基于容器的部署(我这里是基于docker容器的部署)。docker就类似于一个个的虚拟机,但是它更加轻量级,当一个docker部署好后,你可以任意复制到其他机器上运行,看起来很诱人吧。

不过,docker只是入门级容器,对于大量集群容器的管理,还是显得力不从心,当然你很容易找到另一个方案: Kubernetes (K8s); 你只要花上少许的时间了解下,你就可以应用了!

当然了,使用容器的方案,有没有什么缺点呢?应该是有的,比如本来可以基于系统的监控方案,因为接入容器后,监控指标则不一定适用了,当然现成的方案还是有的,不过得另外再花点时间研究了。再比如:如果容器出了问题,是否能排查出来,这也是另一个问题!

5.都有些什么样的基础设施或者中间件?

想要运行应用程序,自然是先考虑运行环境的。比如:应用需要 nginx 来做http服务器,用 tomcat 来做java web应用服务器,用redis来做缓存中间件,用zk来做应用协调中间件,用rabbitmq来做消息中间件,等等!

因此,要在代码跑起来之前,先要把这些环境给准备好咯。

准备这些中间件或基础设施之前,也要问下当下的形势,是否有高性能高可用应用需求?比如:是否需要集群部署,或者单机部署?往往集群部署又会依赖其他的中间件!也更复杂!

当然,这些都不是事。事儿是在出问题之后,能够有意识,能够猜测到问题发生的点!

6.应用代码应该怎样部署?

当基础环境就绪后,就应该让主角上场了。应用代码怎么部署?

最简单的: 通过ftp上传代码到服务器上后,一个个部署!这种方案是最原始的,也是在没有办法搞更好的方案的时候使用的,不应长期使用;

稍微好点的: 使用集成工具(如jenkins)进行打包,然后上传一个私有yum镜像服务器(yum 源)。然后在线进行yum 安装;这种方式,借助了集成工具,几个好处:

  • 可以检测代码合法性如:单元测试、代码规范(可能需要插件);
  • 对任何的改动有简单留档,可以备查的同时,也为代码的回滚提供了可能;
  • 减少了手动上传导致的包破坏的可能性;
  • 适合大规模应用;

再成熟点的: 再往后面,手动 yum 安装也已经太累了,所以急需一个部署平台,实现自动化部署;(这里的自动化部署可能就是基于CI集成部署的一种升级版)。总之,大大减小了人工参与程序,提升了效率,同时也保证了质量!当然,这种部署平台已经经过了严格的测试,出错的可能性也比较小了!

7.服务器的安全性?

不考虑服务器的安全性的应用,无异于自暴自弃。黑客无处不在,不过幸好现在系统也是越来越完善,只要稍加控制,即不那么容易被攻破了。但是如果放弃安全防护,则随便来一个菜鸟程序员就把你搞死了,那时的损失就大了。

网络安全是个很专业的领域,我不敢造次去谈它。不过我们可以简单的做下防护: 如防火墙、授权操作、病毒库等等。当然,如果使用xx云服务,则轻松方便多了,在后台点点设置几下搞定!

8.服务的可监控性?

无监控,不上线!

这是一个警示,如果线上服务没有监控,则所有线上的东西,都成了盲区,这对程序员GG们来说,简直太糟糕了,虽然他们很自信!

监控分两个方面:一是系统级别的监控;二是应用级别的监控;(一般忽略其他监控: 如网络)

系统级别的监控一般可以安装第三方的软件来解决: 如 zabbix, grafana …

而应用级别的监控,则需要自己拥有一套监控代码了,而这对初期项目,则往往比较吃力。当然,如果引入一些开源的解决方案也是可以的,比如 ELK, 做到分布式日志中心的作用的同时,也可以根据日志做相应的应用报错监控!然而这又涉及另外的机器费用和人力成本问题,也显得不那么简单了。

而如果使用xx云服务,则往往都会自带服务器监控的,可以很方便地查看到服务器情况,站在高层次预估应用是否存在潜藏的问题!

如上,就是一些个人觉得的在部署一整套线上环境的时候,需要考虑的事项!从理论上讲解了下个人见解,不对之处,请赐教!

阅读更多...

变成一个厉害的人,最核心的一点:相信复利效应

原文地址 https://mp.weixin.qq.com/s/IHruEr-aBKHBeDbfVzjdIA

我觉得这是一个人能变厉害,最核心的一点就是相信复利效应,希望对你有启发。

01 什么是复利?

爱因斯坦说过:

“Compound interest is the eighth wonder of the world. He who understands it, earns it … he who doesn’t … pays it.”
复利是世界第八大奇迹。知之者赚、不知之者被赚。

复利效应在很多领域都能看到,比如:

  • 银行存款的复利增长曲线

  • 道琼斯指数过去两百年的增长曲线

  • 世界人口增长曲线

  • 明白的爬虫课增长曲线

??????

别急,后面会讲。

下面这个公式,你肯定见过 ——

放到我们身上,还有一句鸡汤:

如果一个人每天都能进步 1%,一年之后他的能力会提升 38 倍。

这就是复利的概念,看到这里,你是不是没啥感觉,别急。

02相信复利效应,对我们什么好处?

1 相信复利能让你不焦虑

我经常焦虑。

前几天我看到粥左罗老师的一篇文章,感觉写的太好了,我也想写出这样的文章,但是想到自己的能力,我就不由自主开始焦虑。

你仔细想一下,你上次焦虑的情形,是不是和我很像?

看到身边优秀的人,他们轻轻松松写出好文章、做出好课程、赚到钱,自己也想和他一样,但发现自己能力不够,好像有种不管怎么努力,都无法做到的感觉。

于是,强烈的焦虑感产生了。

但是,如果你相信复利效应,就不会焦虑。

为什么?

你看到别人的成绩,觉得自己不可能达到他的高度,因为他「轻轻松松」做到事情,你现在拼尽全力也不到 10 分之 1。

但你一开始就错了,他看起来现在轻轻松松,是因为他已经到达了「复利拐点」。

啥是复利拐点?

再来看一个图:

我之前有一篇文章,里面写过一句话 ——

如果一个人到达复利拐点(图中小人站的地方),那他的收益,会急剧增长,可能比之前所有时间的收益总和还要多。

这里的收益,是钱,是能力,是认知。

还说粥左罗老师 —— 他为什么能每篇文章都阅读量很高?

2015 年 8 月,他进入了新媒体行业,开始写文章,一直到 2018 年 3 月,开始出来创业,一直到现在,他每天都在写新媒体文章,没有一天中断过。

他经过很时间的积累,到达了复利拐点,所以他写文章的能力变得非常高

所以,他现在写文章阅读量很高,而且他出来创业的收入,比之前上班的总和还要多很多。

你可能要问,这和我有什么关系?

记住一句话:复利效应是客观事实,它对每个人都是绝对公平。

只要你相信这个理论,并且按照正确的方法,不打折扣的执行,未来的某一天,你也会到达复利拐点,这时候,你的能力和收入都会急剧增长。

既然你知道,你按照正确的方法,一定能达到你想要的高度。

你的未来完全掌握在你手里,这时候,你还会焦虑吗?

2 相信复利能让你更自信

一个人之所以自信,是因为知道自己知道:

  • 知道哪些事情自己能做到,哪些做不到
  • 知道哪些事情现在做不到,未来也做不到
  • 知道哪些事情现在做不到,未来一定能做到

如果你相信复利,就应该明白,那些很厉害的人,都是经过时间的积累,然后达到复利拐点,取得很好的成绩。

而复利对每个人都绝对公平。

也就是说,你如果现在开始积累,你所期望达到的高度,虽然此刻看似遥不可及,但在复利的作用下,在可见的日子里,它一定会实现,毫无疑问

再看下这张图片,看看那个小人站的地方。

虽然你现在看起来进步缓慢,但这是正常现象。在拐点之前,你需要一段积累期,当你积累足够时,拐点就会自动降临。

当你清楚这点后,再开始学习、积累时,你就会很有底气。当你遇到一些困境,你会更坦然的面对,

因为你知道,这些都是暂时的。因为你知道,现在付出的努力,都是值得的。因为你知道,你的未来完全由自己掌控,时间会给你答案。

3 相信复利,能让你进步更快

前面讲了:如果一个人到达复利拐点,那他的收益,会急剧增长,可能比之前所有时间的收益总和还要多。

这里的收益也包括财富,说直白点,如果达到拐点,你赚的钱,会比之前所有时间的总和还要多。

如果你相信复利,你现在所做的事情,就是为了早日达到复利拐点,早点赚到更多钱。

而你,为了早日能赚到更多钱,肯定会花更多时间去积累、去学习,这样你的知识,你的能力也会飞速提升。

相信复利的话,你对于看抖音,刷朋友圈这类事情,会毫无兴趣,因为这些事情对你达到拐点,没有任何帮助。

做这些事情花 1 天时间,那你就晚 1 天达到复利拐点,也就晚 1 天达到高收入的状态。

如果你把时间拉长,你现在的每一天,都能赚很多钱,你还会花时间去刷抖音吗?

如果你相信复利,你会知道,未来的每一秒,如果不去积累,都是浪费。

4 相信复利能让你有更多好运

  • 如果一个人学 10 个知识,能碰到一个赚钱的思路;
  • 如果一个人做 10 件事,能找到一个适合他的机会;
  • 如果一个人见 10 个人,能遇到一个愿意帮他的人;

假如把上面的结果称为好运,那如果你相信复利,你的好运会更多

因为你如果相信复利,你就知道,未来你一定会有所成就,这样你才会在还没有成绩的时候,安心做一些积累 ——

  • 你才会更努力学习,
  • 你才会做更多尝试,
  • 你就会接触到更多人。

和身边不相信复利的人相比 ——

  • 你会学习更多知识,也就会有更多赚钱思路;
  • 你会做更多事情,也就会有更多选择的机会;
  • 你会接触更多的人,也就会碰到更多贵人。

而这更多的赚钱思路,更多的机会,更多的贵人,会让你更早取得成功。

我有个朋友,就叫他小明吧。

他不甘于上班拿死工资,所以在业余时间,也开始学习一些其他东西。

小明为了学习,买了一些知识星球,在里面他看到很多以前不懂的信息。

最开始,小明特别焦虑,因为看案例,感觉别人轻轻松松就能赚到钱,而他对于那些信息,几乎一个都看不懂。

他也很努力的学习,可要学的东西太多,几个月过去了,依然没有啥收获。

小明无数次在内心挣扎:「要不就这样吧,反正也学不会」。

偶然一次,他接触到李笑来在得到的专栏:《财富自由之路》,看到了复利的概念,看到了下面这个图片里的小人,小明好像看到了希望。

因为按照专栏里复利的说法,他只要认真努力学习,肯定会变的很厉害,现在之所以还没有成绩,是积累不够。

小明什么也没多想,死死拽住了这根救命稻草。

从那开始,小明每天都花更多时间学习,虽然基础差,但好在够勤奋,而且以前焦虑的感觉变少了。

他练习写作、学运营、营销、增长黑客,慢慢的,之前不懂的信息,他开始熟悉了。

小明也开始有点自信了,他尝试着在知识星球分享一些心得,偶尔还会得到大佬的赞赏,这让他更坚信复利的作用了。

学了一年,虽然能力还是不够好,但小明慢慢有点感觉了,于是他模仿其他案例,做了一个课程,但是做完后,傻眼了。

他光想着做课程,但如何把课程卖出去,小明完全不懂。他又想到之前一个案例,有人把课程免费送了一些给朋友。

于是他又模仿别人,打算也送一些给朋友。他到常去的知识星球里发帖,本来送个课程,2 句话能完成的事,他当时头脑一热,不知不觉写了 1000 多字,他把在星球的学习过程,课程的研发思路等都写了出来。

后来,这个帖子被知识星球的作者看到,作者觉得小明很努力,于是就联合知识星球的朋友,帮他宣传了一下,小明的课程因此完成了冷启动。

为什么大佬愿意帮助小明?

前几天,一个财务自由的投资人李晨,他在生财有术做了一个分享,里面讲到 ——

人们更愿意帮助努力的人,这是线性成长转变成跳跃性成长的门槛。你的努力对你的能力成长是线性的,但是你的努力被别人欣赏,有人愿意拉你一把,那就是跳跃性成长。

我想,可能大佬是欣赏小明的努力,因此愿意拉他一把。

后来,小明在这个课程的运营过程中,能力得到飞速提升。

试想一下,如果小明不够努力,没有做这个课程,没有模仿别人送课程的思维,没有练好写作能力写出那个帖子,那他还会有这个好运吗?

而他之所以能做出上面的行为,就是因为他相信复利,相信自己现在的积累,未来会有很大回报。

前几天,那个知识星球第 3 期开放,小明帮星球带了 250+ 新用户。按现在的星球价格算,小明带货 40w+。

大佬当时的欣赏,是对的。

小明因为相信复利,所以变的不焦虑,开始学习,能力得到提升,最后碰到好运,得到大佬帮助。

你可能已经猜到了,我就是小明。

记住一句话:复利效应是客观事实,它对每个人都是绝对公平。

03 我们该如何做,才能收获复利成果?

要收获复利成果,我们首先要了解一下,哪些东西具有复利效应。

1 知识

判断一个信息是否有用,要看这个信息是否能和你已有的知识产生联系。

我身边有一种人,无论谈到什么话题,他们都能接上,而且可以分析的头头是道,让人很敬佩。

我观察了一下,这些人都有一个共同点,就是知识面很广,各个学科几乎都有涉猎,所以他们面对一个问题,可以用不同的理论,从不同的视角分析问题,这样得出的更好解决方案。

为什么他们这么厉害?

看一张图片:

当你只有少量知识,他们之间没有发生联系,这时候知识的作用就很小,比如蓝点。

当你的知识增多,他们之间有的会发生联系,这时候就能产生一些效果,比如绿点。

当你的知识继续增多,到达知识的复利拐点(红色),大量知识之间发生联系,就会产生巨大的效果。

有个客观事实,不是每个知识,都一定会和其他知识产生联系——

  • 如果你有 5 个知识,可能有 2 个之间会产生联系。
  • 如果你有 10 个知识,可能有 4 个之间会产生联系。
  • ……
  • 如果你有 100 个知识,可能有 40 个之间会产生联系。

发现什么了吗?

你拥有的知识越多,他们之间发生联系的可能性就越大,发挥的作用就越大。

如果你只有 1 个知识,即使它们想产生联系,也不可能。

所以,不要因为暂时看不到效果,而停止学习。

只要你一直学,总有一天,积累到一定程度,知识之间大量产生联系,它们会自动融会贯通。这时,你会发现,以前想不明白的问题,突然都能想明白了。

这就是知识的复利效应。

所以,如果一件事不能让你学到新知识,那说明它没有复利效应,就不值得做。

2 能力

我的爬虫课,迭代了 3 版,目前正在升级第 4 版。

升级爬虫课的过程,我的能力也在不断提升。

做课程之前,我对产品、运营、营销都毫无概念。

  • 第 1 版课程时,我从 0 学习这些技能。
  • 第 2 版课程时,我能把这些技能硬套到课程上了。
  • 第 3 版课程时,我能熟练运用这些技能。

现在开始做第 4 版,我有信心,新版的课程质量,能做到比第 3 版好不止一个等级,而且用户量也能比前 3 版总和还多很多。

因为经过前 3 期课程的积累,经过在微信群里无数次的答疑,经过一次次课程文案的改进,我对用户、对产品、对营销,都有了不一样认知。

就像下面这个图片:

因为练习的足够久,所以这些技能到了复利拐点,也因此,它们能发挥出更大的效果。

如果我以后做其他产品,那新产品的质量,就会从第 4 版课程的位置开始,而不是从 0 开始。

这就是能力的复利效果。

所以,如果一件事不能让你的能力得到提升,那说明它没有复利效应,就不值得做。

知识有复利效应,
能力有复利效应,
这两个东西,都是对成长有帮助的事情。

所以,如果一件事不能让你得到成长,那说明它没有复利效应,就不值得做。

重温一下这句话:如果一个人到达复利拐点(图中小人站的地方),那他的收益,会急剧增长,可能比之前所有时间的收益总和还要多。

再来看看这个图片:

当你面临一件事情,要选择做或者不做时,看看这个图片,问一下自己,做这个事情,对自己成长有帮助吗?能让自己早点到达图片里小人的位置吗?

如果能,那就做。如果不能,那就不做。

最后总结一下:

01 复利效应是客观事实,它对每个人都是绝对公平。

02 如果你相信复利,未来你一定能变成一个很厉害的人。

03 只有持续做对成长有帮助的事情,才能收获复利成果。

最最后,如果你身边有朋友,觉得未来没有希望,努力没有用,可以把这篇文章转发给他。

< END >

自己的总结

1、知道哪些事情自己能做到,哪些做不到

2、知道哪些事情现在做不到,未来也做不到

3、知道哪些事情现在做不到,未来一定能做到

厚积薄发

量变引起质变

每天进步一点点

我的十年程序生涯:建模启航

原文地址 我的十年程序生涯:建模启航

我是一个有魄力的人!

我是一个有魄力的人!

请大家记住这句话,只有记住这句话,你才能明白我这十年间的选择。

十年前我还是象牙塔中数学系的一名普通的大三学生。

六年前我包里揣着3000块钱来北漂。

三年前我在一家互联网金融公司做到了技术负责人。

两年前我辞职了,在一家公司做架构师,入职半年后连跳三级,被领导提拔到研发副总,最多管理超过100人。

现在我是一名自由工作者。

以上其实只是我的职场生涯,业余时间我还做了一些其它的事情。

2016年6月,开始在博客园写技术文章,当年即被推荐成为推荐博客,陆续成为其它技术社区博客专家,16年年底文章阅读累计超百万。

2017年,在公众号红利期早过的情况下,开通“纯洁的微笑”公众号,2 年后读者关注量超 12 万,综合指数排在原创个人技术号中前十。

2018年,尝试在网上写教程,年底成为 Gitchat 专栏销量前三,后面陆续尝试线上演讲、知乎Live、免费视频课程、线下演讲等等,在每个领域去拔草,不为挣钱只为尝试,寻找自己最想做的事情。

你想听听我的故事吗?

题外话

我的个人公众号介绍只有一句:一个有故事的程序员。说这句话不是吹牛逼,是我非常非常喜欢有故事的人,有故事的事,同时发生在我和我身边朋友身上的事情,足足够我写一辈子了。

生活不是电影,但远比电影更具有戏剧性,更精彩,更荒诞,更不真实,我想用文字记录下这些故事,这些故事就是我的世界。

一件事情

回顾我们的历史长河会发现,往往在人生的道路上,突然会有一件事影响到我们,从而改变了我们的一生。

我就有这么一件事情影响到了我,让我找到了自己最喜欢做的事情,就是做一名程序员去 Coding 这个世界。

我的这件事情发生在大学时期,参加了全国大学生《数学建模竞赛》。那年,我们小组还得了一个小奖,我把它保留至今。

我给大家从头讲起。。。

一个机会

09年那会是我读大三的最后一个学期,和许许多多考研的大军不同,我从来都没有想过我还要继续在学业上有所发展。

因为我大学上学家里欠了一屁股的债,所以我对钱极度的渴望,恨不得立刻马上工作,让我的家庭我可怜的母亲可以喘上一口气。

我大学学的专业是信息与科学,大家不要被这个高大上的名字所迷惑了,基本上和应用数学没有太多的区别,整天就是学各种数列、极限、微积分、空间解析几何等等,还有一本书就是专门证明一毫米之内的世界。一想到学这么多东西和我的就业扯不上半毛钱关系,我就提不起一丝丝的兴趣。

大学三年通宵网吧、旷课篮球、挂科重考、探索男女之情,慌慌而过,唯一让我感谢自己的就是,喜欢看书的毛病没有变,泡在图书馆看了许许多多的书,中文系的现代文学、经济系的人物传记、艺术系的人体艺术都是我常常涉猎的内容,极大的扩充了我的世界观和人生观。

大学的碌碌无为加剧了我内心的不甘,耗费了四年火辣辣的青春、还有不知道父母从哪个亲戚借来的学费,我总该学点啥吧!

就是那种你感觉浑身哪哪都是劲儿,就是不知道往哪儿使的感觉,我以为我的大学就这样碌碌无为的过去了,终于等到了一个机会。

干票大的

那年我们学校是抱着干一票大的来准备这件事的,我就喜欢干大的。

虽然我不怎么喜欢数学,但数学系当时是我们学校的名牌专业,但却被兄弟院校虐了好几年,《数学建模竞赛》从来都没有拿到过国家一等奖。

于是09年的时候,学校的重视程度也上来了,在系里抽调了几位有能力的年轻老师组建了一个团队,并且承诺竞赛结束后根据成绩重奖。

老师的积极性被调动了起来(这个世界看来还是钱顶用),学校开始从数学系、物理系、化学系、计算机系招募学生,那年夏天一共招募了七八十号人。

招募过来的人,大家都没有什么建模经验,学校统一安排高强度培训,并且两周做一次模拟竞赛,根据竞赛结果不断进行淘汰,最后真正参赛的人员只有十几个人。

那时候年轻感觉不到累,整个暑假大家都是泡在实验楼。这也成了我大学生涯中最充实的一段经历,老师从建模算法、编程语言、论文书写、历届考题分析等几个维度不断培训,每培训一段时间就来一次模拟竞赛,然后宣布淘汰名额。这个过程很爽、很累、也很残酷。

建模竞赛是模拟现实生活中的真实问题,通过一套理论、算法、建立数学模型来解决问题,涉猎的内容非常多。

因此需要团队配合来解决,每个建模小组由三个人组成,每个人的分工都不同,有的擅长算法,有的擅长论文书写,有的强在编程实现,相互配合完成整个竞赛。

找到自己喜欢做的事情

刚开始培训的时候大家啥都不懂,也不知道自己擅长做什么,模拟竞赛的过程中遇到很多问题,大家都不会,但其实这个并不重要,重要的是你可以学呀。

99% 的问题在搜索引擎的加持下都可以解决,所以竞赛对自我学习能力要求极高。另外竞赛是开卷的,你可以利用任何你可以搜索到的资料包括书籍。

有的杠精可能要说,既然是开卷的是不是就可以抄了,so yong so simple。《数学建模竞赛》强调的是模拟现实解决实际问题,那在现实生活中解决问题当然可以查阅任何资料。

但是并不意味着可以抄,第一,你可以想到的,考题老师也可以想到;第二, 建模都是解决现实中的具体问题,这些具体问题当然是搜索不到的。

阅读更多...

给初入职场朋友的8条走心建议

原文地址 https://mp.weixin.qq.com/s/yefz3mLIrmzCfWcVBhmtsA

1. 做好本职工作

刚进入职场,这个时候,学习自己本职工作内容是关键。一般进入技术岗位,技术上面是有很大的差距的。此时,你的重心就是适应公司的环境,适应工作的强度。需要保持学习的心态,融入大的团队之中。注意的是,新人有时会被冷落,很多时候都是新人的玻璃心引起的。

所以说,新人进入职场,需要一定的受挫力。大学时期,压力相对很小,可以一个月时间,研究技术。但工作中,很大程度有时间限制,很多时候没有太多时间,让你去慢慢成长。所以,要学会咨询前辈,找到一个领路人,职场则走的就很快。

有一个需要注意的是,我们很容易在进入职场,和跟自己一起入职的新人建立抱团,这个有好处也有缺点。好处是大家都在一个阶段,坏处也一样。只有多跟前辈交流,才能够更快的知道领导的秉性,公司的一些规则,可以有效的避免口不择言,说错了话。

关键是,先做好本职工作,给公司提供你的价值。

2. 学习知识体系

在适应了工作节奏后,开始学习工作相关知识。公司一般会提供一些内部培训,帮你快速提升技能。但是这个培训,一般只是入门的层次,要进阶,还需要自己课后下苦功夫。学习知识,一般就是书籍和视频学习。视频学习,优势是讲的详细,缺点是耗费时间。

我们在学生时代,看视频的频次很高,喜欢手把手的去学习。但是在工作之后,下班后你的时间没有多少,这时候不能用视频的方式学习。需要多看书,多学习。用学习加总结,实践的方式,来快速形成自己的阅读习惯,以及有自己的学习模式,这个很关键。在刚开始的时候,可以慢慢阅读,到后面就是需要哪个内容,就去具体章节,直接以用为主。

学习体系很重要,要用搭积木的方法,去扩充自己的知识。不能只是自己当前方向的技术书籍,还要增加其他方面的知识,像管理,产品,运营,写作技巧之类的。这个就是在深度技术耕耘之后,开始扩展自己的认知。形成一个知识体系,能够有思考能力,总结能力。

3. 多思考,多输出

好记性不如烂笔头,这话一点不假。在职场前期,我们很容易产生一个错觉,觉得自己能够记下很多事情。觉得自己不需要用笔记录,便能很好的完成工作。这个刚入职的朋友确实可以做到,但是培养习惯很重要。多用归纳总结,将每日计划,任务,做一个任务清单,防止自己遗漏掉一些事情。同时,任务是分轻重缓急,要有自己的节奏,不能一路瞎忙,最后不知该如何总结。

所以说,多记录会帮你更好的把精力花费在任务上,而不用担心以往。完成一件事情,把它放到已完成的任务里面。在完成了自己的工作后,要多思考,是否有更好的方法,思路,来提升自己的工作效率,多跟前辈请教,看看他们的常用软件,学习一下。

在学到知识后,可以尝试多输出。在网上找一个平台,比如csdn,博客园,掘金,或者自己适合的平台,开通账号,进行内容输出,将自己的工作思考,疑惑,成长记录下来。在网络里面,多写写内容,给别人提供价值,那么会打开自己的交往圈子,认识更多,更有趣的朋友。
在交流过程,会收获更多的知识。同时,还能增长见识,增加自己的沟通能力。输出的过程,就是整理复盘知识的时候,这时候才能防止眼高手低,检测出自己的知识盲点,加固自己的知识体系。

长期坚持技术写作,价值输出。在慢慢积累之后,能够形成自己的影响力,为自己赋能,创造更大的价值做准备。

阅读更多...

一条简单的 SQL 执行超过1000ms,纳尼?

作者:VipAugus

https://juejin.im/post/5ce906a3e51d455a2f2201dc

总结就是锁表了

MySQL对我说“Too young, too naive!”

大概过程


在测试环境Docker容器中,在跨进程调用服务的时候,A应用通过Dubbo调用B应用的RPC接口,发现B应用接口超时错误,接着通过debug和日志,发现具体耗时的地方在于一句简单SQL执行,但是耗时超过1000ms。

通过查看数据库的进程列表,发现是有死锁锁表了,很多进程状态status处于’sending data‘,最后为锁住的表添加索引,并且kill掉阻塞的请求,解除死锁,服务速度恢复正常。

下面记录的是大致排查过程:

通过观察业务代码,确认没有内存溢出或者其它事务问题,于是只能考虑Docker环境的数据库和jvm底层详情了。

使用Druid监控SQL执行状态


通过日志,发现有一句SQL严重超时,一句简单SQL,原本是批量插入多条记录,为了定位问题,测试时Mybatis只插入一条记录,但即便如此,还是耗时10秒

于是打算使用阿里巴巴的数据库连接池Druid进行监控,这篇文章有教如何使用Druid监控SQL执行状态,监控SQL效果如下:

在SQL监控Tab中,可以看到执行SQL的具体情况,包括某条SQL语句执行的时间(平均、最慢)、SQL执行次数、SQL执行出错的次数等

上面显示的是正常情况下,时间单位是ms,正常的SQL一般在10ms之内,数据量大的控制在30ms之内,这样用户的使用体验感才会良好。所以说之前的1000ms,是不可接受的结果。

通过JMC远程监控Tomcat

JMC(java mission control)是jdk自带的一个监控工具,在jdk的bin目录下(java大法好,该目录下有很多实用的工具)。

具体要怎么配置和加的参数请参考此文

为了简单,我加了一个tomcat无验证模式:

1
2
3
4
5
6
#在tomcat的conf目录下的catalina.sh增加如下java启动参数: 
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
阅读更多...

《极简思维》读书笔记

极简思维》丨手把手教你摆脱迷茫和不开心

作者:寒夏(来自豆瓣)
来源:https://book.douban.com/review/10016750/

你是否经常感到迷茫,不知道自己到底应该过什么样的生活?

你是否经常感到不开心,生活的许多方面都如乱麻一般不尽如人意?

你是否经常觉得自己很忙,整天琐事缠身,没有时间过自己的生活?

如果你的回答是“YES”,那么,《极简思维》这本书也许能帮到你。

(01)整理你的思维

生活中,我们经常会产生一些消极思想,那么,是什么导致了我们不能积极乐观地面对生活呢?作者给出了四个方面的原因:

1、生活压力。压力过大是很多人感到生活不堪重负的首要原因。

2、选择悖论。选择悖论是由心理学家巴里•施瓦茨提出的一个概念,它是指选择越多就越容易焦虑、犹豫、无力、不4、消极偏见。里克•汉森指出:为了让我们的祖先能够得以存活,大自然母亲在大脑进化的过程中设置了三种经常能够欺骗我们的错误:过高地估计恐惧的威力;过低地估计机会的成功率;以及过低地估计自己在面对恐惧与机遇时的才能。这就是消极偏见。

面对经常产生的消极思想,我们应该做些什么来排除杂念呢?作者为我们提供了四个方法。

1、专注的腹式呼吸。腹式呼吸,也就是深呼吸,它能够刺激我们的副交感神经系统,从而降低心率、放松肌肉、镇定精神并使大脑功能正常化

进行深呼吸的练习时,你可以选择一个固定的时间,选一个安静的空间,然后设置10分钟的计时器,在垫子上莲花坐或在椅子上坐直,伸直脊椎,把手轻轻放在大腿上,慢慢吸气,直到你的肺被充满,让你的肚子在吸气时向外推,吸气结束时,停下来倒数2秒,然后慢慢地、平稳的、完全地把气呼出去,让你的肚子回到它的自然位置,呼气结束时也要暂停倒数两秒,然后重复吸气动作。

2、冥想。现在有很多书,也有很多课程专门讲冥想,冥想已经成为了很多人减轻压力,提高注意力的有效方式。

冥想有十几种方式,但一般都是以同样的步骤开始的:静静地坐下,把注意力集中在你的呼吸上,无视任何干扰你的事物。

你可以在深呼吸练习后接着进行冥想,也可以另选时间。

冥想的前几步跟深呼吸练习类似,只不过做完3-4次深呼吸后,你就要恢复正常呼吸,同时把注意力集中在呼吸上。一开始你的思维很容易不受控制,但是没关系,意识到自己想到了其它内容后,慢慢地让这些杂乱的想法离开你的大脑,重新把注意力集中的呼吸的感觉上。

3、驯服消极思想。当一个消极思想出现时,做一个旁观者,给这个消极思想命名,然后学会对消极思想说不。你还可以找到消极思想的触发器,以此来控制你的思想。当然,分散注意力也是一种驯服消极思想的有效方法。

4、新思想替换旧思想。当出现某些消极想法时,比如“我什么也干不好”,找一个例子反驳它。如果某个消极思想有着合理的理由存在时,学会接受,然后进行有效的思考,找到解决给你带来消极思想的事情的方法。亲手写下你的想法能帮助你整理你当下的思想,并且常常能引导你找到那些解决问题的方法。

(02)整理你的生活

有时候,我们容易陷入琐事中无法自拔,是因为没有确立自己核心价值观。

你的核心价值观可以作为衡量你生活中所有选择和决定的标尺,让你能够将精力有针对性地花在成为想成为的人和过希望过的生活上。行为与价值观一致,你将收获快乐、干净、镇定,这种生活环境对你来说是最棒的。

我们该如何确立自己的核心价值观呢?作者给我们提供了四个方法。

方法一、确定你的个人价值观

阅读更多...
  • Copyrights © 2015-2023 高行行
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信