目标
理解n阶行列式的概念,正确的计算三阶、四阶行列式,还有简单的n阶行列式的值
基本方法
按行(列)展开公式,通过降阶来实现。但是在展开之前往往先通过对行列式的恒等变形,以在新的行列式中能构造出叫多的0或有公因式,从而简化计算。
常用技巧有:三角化法、递推法、数学归纳法、公式法等
常用属性
- 把某行的k倍加到另一行,行列式的值不变
1 | const perf = inBrowser && window.performance; |
遍历数组:
1 | let i = props.length |
js 中一个值与自身都不相等: NaN 。通过下面的方式判断
1 | if (newVal === value || (newVal !== newVal && value !== value)) { |
IE11 才开始支持 __proto__
, 之前的不支持
如何拦截 读取和写入 纯对象/数组
缓存一个纯函数: cached 实现?
前段时间公司要求写个游戏嵌入到 App 中,我们通过
webview
链接到 App 中,中间遇到了很多坑,在此记录一下。
1 | const sourceAndroid = { uri: 'file:///android_asset/trivia-game/index.html' }; |
官方介绍: webview,其中像 javaScriptEnabled
这些属性是我们常用的,还有一些不常用但很能填坑的属性下面介绍下
目前只能传递字符串
webview
给 react-native
发消息:1 | window.postMessage('str') |
react-native
通过 onMessage
接受消息:
1 | _onMessage = (e) => { |
react-native
给 webview
发消息:1 | this.webView.postMessage('str'); |
webview
接受消息:
1 | document.addEventListener( 'message', event => { |
时间复杂度: $O(N^2)$
时间复杂度: $O(N log_2 N)$
最普通的 Dijkstra 算法: O(N^2)
优化后: O(N * logN)
数组,在内存上顺序存储。字符串是一种在内存上尾部指针指向 “null” 的数组(即在内存上最后一位是二进制0)。因为是顺序存储,所以很难插入修改。数组中的节点可以一个结构体,这样便可以方便修改。下面是几种常见的结构体数组:
每个元素叫做 Node, 存储了一个变量和一个指针(在内存上占用了两个位置),这个指针指向了下一个节点。通过新增一个节点,修改指针的指向可以方便的插入。
链表有两个比较出名的个例:队列、栈。他们的区别是先进先出与后进先出,专有名词有:出队、进队、出栈、进栈
它的节点存储了一个变量和两个指针(在内存上占用了三个位置),分别是左指针和右指针。
专有名词有: 根节点、母节点、子节点、叶节点(没有子节点的节点)
它的节点存储了一个变量和多个指针
参考链接: Web3与智能合约交互实战
DApp 是 Decentralized Application 的简称,及去中心化应用。DAPP 由客户端和合约端配合实现。
我们使用 Solidity 语言编写完合约后,之前我们使用了 geth
与之交互, 而这种命令行的方式太过繁琐,所以我们这儿用到了 Web3.js
。
Web3.js 是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库:
这儿我们主要用到了 web3-eth
。下面开始
ganache 是一个可以一键搭建以太坊区块链测试环境的工具。 启动之后默认会生成 10 个账号, 我们的私有链默认运行在 http://127.0.0.1:7545上。
Truffle: 以太坊Solidity编程语言开发框架。安装:
1 | $ npm install -g truffle |
Ganache: 前身testRPC,可以启动一个个人的以太坊私有链用作测试、执行命令、检测区块执行状态。点击前面的连接下载客户端即可。
建立项目目录
1 | mkdir pet-shop && cd pet-shop |
使用 truffle unbox
创建项目
1 | truffle unbox pet-shop |
注: 我们可以使用 truffle unbox <box-name>
下载任意的 Truffle Boxes。 在 truffle box 仓库 可以看到很多 Box , 上面我们下载的是 pet-shop box
下载完成后,可以看到下面这些重要的目录和文件:
先接触了
vue
,感觉vue
特别方便,优雅的想让你上瘾。后面接触了react native
开发 App, 过来过去都感觉不适应,再慢慢用过一段日子之后,感觉react
也有自己鲜明的特点,在使用react
的时候,总想着和vue
对比一下。由于自己使用react
主要是在用react native
, 所以有些东西可能了解不深,望海涵。通过对比借此加深下理解的。
Vue | React | 补充说明 |
---|---|---|
Computed、watch | React 不监听数据变化 | React可以使用 mobx 库来实现这些功能,在 vue 官方描述的 对比其他框架 里面有这样一句话: 在有限程度上,React + Mobx 也可以被认为是更繁琐的 Vue |
v-model, 这只是通过语法糖定义了一个自定义指令,本质跟 React 一样. 修饰符.async 也是一样 | React是单向数据流,只能通过事件触发,然后再setState,React没有自定义指令 | / |
传统 HTML标签渲染 / jsx render渲染 | jsx | / |
Vuex | Redux | react 有一个中间件react-redux 可以让我们方便的使用 Redux |
EventBus 非父子组件通信 | PubSubJS 或 js-signals | react-native 中还没用过,没遇到需要的场景 |
混入:mixins | class组件不可用,在使用 createReactClass 创建 React 组件的时候可用 mixins | 我们可以要把 mixin 的东西写到单独的 js 文件里,通过 import 实现 mixin,这个本来就是锦上添花,不甚重要 |
slot | props.chldren | 自定义组件获取使用时传入的子元素 |
自定义指令 | 自己通过事件触发实现类似效果 | 自定义指令可以实现类似于 限制 input 输入格式 等效果 |
还有一些是两者非常类似的,只要会了一个,另一个也就会了:
欢迎查看 跟着大佬一起动手系列,点击这儿查看大佬的博文
以太坊上的程序称之为智能合约,它是代码和数据(状态)的集合。
如果做比喻的话智能合约更像是JAVA程序,JAVA程序通过JAVA虚拟机(JVM)将代码解释字节进行执行,以太坊的智能合约通过以太坊虚拟机(EVM)解释成字节码进行执行。
智能合约可以理解为在区块链上可以自动执行的(由消息驱动的)、以代码形式编写的合同(特殊的交易)。
比特币的交易是可以编程的,但是比特币脚本有很多的限制,能够编写的程序也有限,而以太坊具有 图灵完备,通俗来说可以完全模拟一台计算机所能做的所有事情。比特币可以执行一些简单脚本,但是他就不是图灵完备,比如循环指令比特币就无法执行。
用户不可能直接编写以太坊虚拟机(EVM)字节码,所以以太坊提供了几种编写智能合约的高级语言。
Solidity:类似JavaScript,这是以太坊推荐的旗舰语言,也是最流行的智能合约语言。具体用法参加Solidity文档,地址:https://solidity.readthedocs.io/en/latest/
还有Viper,Serpent,LLL及Bamboo,建议大家还是使用Solidity。Serpent官方已经不再推荐,建议Serpent的用户转换到Viper,他们都是类Python语言。
可以根据不同的习惯选择不同的高级语言,目前最流行的是Solidity。
我们下面使用 Browser-Solidity IDE (也就是 Remix )进行合约的编写和编译