React系统学习6(dom的diffing算法)

之前一直说React效率高的原因是因为在把虚拟DOM渲染为真实DOM的时候并不是每一次都渲染所有的,而是会进行一定的算法处理,只重新渲染新的DOM。

这里说到的算法,其实就是diffing算法,或者说diff算法,diff算法有一个重要的特点就是会一层层的判断每一层标签的属性和内容是否一致,如果一致就会复用,不一致才会重新生成。

继续阅读全文 »

React系统学习5(组件生命周期)

在之前的React类式组件定义的时候,有说到有一个必不可少的内容,即render函数,这个函数是React自带的,每当组件的状态变化的时候,就会触发一次render。

render函数就是React生命周期中的一个,与之类似的这些函数通常被称作React生命周期函数、React生命周期钩子函数、React生命周期钩子、React生命周期回调函数。

这些函数包括constructor、componentWillMount、render、componentDidMount、componentWillUnmount、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate等。

继续阅读全文 »

React系统学习4(組件三大核心属性之refs)

React三大核心属性state、props、refs,前边已经学过了state和props,现在开始最后一个refs的学习。

再从小需求说起

建立在业务基础上的技术才是最有价值的,假设有这样一个组件,一个输入框和一个按钮,需要在输入框中输入内容后,点击按钮则弹窗展示输入的内容。

需求比较简单,根据以往的经验,可能会写出这样的一段代码:

继续阅读全文 »

java程序6H到14min及80G内存到28G的优化过程(补充记录)

前言

前边有发过一篇代码优化的文章:记一次java程序从6H到30min的优化过程

大概描述的是一个java程序从最大内存至少80G运行6H30min,到最大内存降到75G并且运行30min的优化过程。

但是实际上这个结果并不达标,基于现有的环境,期望的最大内存不能超过64G,并且在可以接收的处理时间内这个内存应该越小越好。

终于又经过了几天的奋战后,这个结果变成了28G和14min。(这里的时间,并非指单纯读文件的时间,而是整个程序所有业务的完整时间)

继续阅读全文 »

银行业务知识学习1(银行的简介)

银行的传统角色

银行的传统角色是充当贷款人和借款人的中介,这种中间渠道可以促进经济的发展。

银行的基本商业模式在于以定期存款或储蓄形式向私人用户借款,然后再以个人贷款或者抵押贷款的方式把借到的款项贷款给私人用户。

贷款和抵押就是银行的资产,储蓄和存款则是银行的债务。

上边说贷款和抵押就是银行的资产,但是实际上资产却并不只是这两个,还有像贸易资产和有价证券。(何谓贸易资产,后续再进一步理解)

众所周知,往银行存钱是有利息的,向银行借钱也是有利息的,而且利率还不一样。

那么在这个过程中,银行资产赚到的利息减去银行债务支付的利息,就是所谓的净利息收入。

继续阅读全文 »

记一次java程序从6H到30min的优化过程

背景

我们有一个java系统,需要从固定的文件目录中读取csv格式的文件,然后将文件内容读取后在进行一系列的转换以及数据库操作,包含文件内容转换为java对象、内容去重、查询oracle、生成目标数据集合、数据存入oracle和mongodb。

起初,文件目录中有四个文件,一个4.3G,另外三个都是几百兆,四个文件一起有5.3G,大约1200万条初始数据。

程序之前使用的文件都比较少,因此之前设置的主要jvm参数是-Xms64m -Xmx64G -XX:NewRatio=1 -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/,之前运行时也都很正常,但是这一次却几个小时都不结束。

继续阅读全文 »