堂的博客

给岁月以学习,而不是给学习以岁月


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 搜索

线性代数学习

发表于 2019-03-19 | 更新于: 2019-07-10 | 分类于 机器学习 | 评论: | 阅读次数:

目标

理解n阶行列式的概念,正确的计算三阶、四阶行列式,还有简单的n阶行列式的值

基本方法

按行(列)展开公式,通过降阶来实现。但是在展开之前往往先通过对行列式的恒等变形,以在新的行列式中能构造出叫多的0或有公因式,从而简化计算。

常用技巧有:三角化法、递推法、数学归纳法、公式法等

常用属性

  1. 把某行的k倍加到另一行,行列式的值不变

js发布订阅者模式简单实现

发表于 2019-02-11 | 更新于: 2019-07-10 | 分类于 前端 | 评论: | 阅读次数:

之前在对比 react 和 vue 的时候,发现 vue 有 EventBus 处理非父子组件通信, 而 react 推荐使用 PubSub.js 实现。这种发布订阅者模式应用广泛,vue 根据 Object.defineProperty 实现双向绑定也是一种发布订阅者模式。下面是根据 PubSub.js 简化后的版本。

简化PubSub

测试demo, 查看 log 即可看到效果

学习vue源码得到的知识

发表于 2018-12-10 | 更新于: 2019-07-10 | 分类于 前端 | 评论: | 阅读次数:

Vue.extend(): 创建 “Vue” 的 子类

window.performance: 监控代码性能

1
2
3
4
const perf = inBrowser && window.performance;
mark('start')
// do something
mark('end')

小技巧

  1. 遍历数组:

    1
    2
    3
    4
    let i = props.length
    while (i--) { 、
    // ...
    }
  2. js 中一个值与自身都不相等: NaN 。通过下面的方式判断

    1
    2
    3
    if (newVal === value || (newVal !== newVal && value !== value)) {
    // newVal 是 NaN
    }
  3. IE11 才开始支持 __proto__ , 之前的不支持
    如何拦截 读取和写入 纯对象/数组

  4. 缓存一个纯函数: cached 实现?

react-native 之 webview

发表于 2018-12-04 | 更新于: 2019-07-10 | 分类于 前端 | 评论: | 阅读次数:

前段时间公司要求写个游戏嵌入到 App 中,我们通过 webview 链接到 App 中,中间遇到了很多坑,在此记录一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const sourceAndroid = { uri: 'file:///android_asset/trivia-game/index.html' };
const sourceIOS = { uri: './trivia-game/index.html' };
source = Platform.OS === 'ios' ? sourceIOS : sourceAndroid;
<WebView
ref={( webView ) => this.webView = webView}
source={ source }
originWhitelist={["file://", '*']}
style={{height: this.state.webViewHeight}}
javaScriptEnabled = { true }
scrollEnabled = { false }
domStorageEnabled = { true }
scalesPageToFit = { true }
startInLoadingState = { true }
renderLoading = { () => <ActivityIndicator />}
onLoadEnd={ this._onLoadEnd }
onMessage={ this._onMessage }
onNavigationStateChange={ this._onNavigationStateChange }
allowUniversalAccessFromFileURLs={ true }
mediaPlaybackRequiresUserAction={ false }
/>

官方介绍: webview,其中像 javaScriptEnabled 这些属性是我们常用的,还有一些不常用但很能填坑的属性下面介绍下

webview 与 react-native 通信

目前只能传递字符串

webview 给 react-native 发消息:

1
window.postMessage('str')

react-native 通过 onMessage 接受消息:

1
2
3
_onMessage = (e) => {
console.log( "On Message", e.nativeEvent.data );
};

react-native 给 webview 发消息:

1
this.webView.postMessage('str');

webview 接受消息:

1
2
3
document.addEventListener( 'message', event => {
console.log(event.data)
}, false)

阅读全文 »

算法与数据结构

发表于 2018-11-11 | 更新于: 2019-07-10 | 分类于 算法 | 评论: | 阅读次数:

算法

排序算法

选择排序

  • 双层循环(i 从 0 到 length - 1, j 从 i + 1 到 length - 1)
  • 比较 list[i] 与 list[j] 大小,如果 list[j] < list[i] ,则交换位置

时间复杂度: $O(N^2)$

归并排序

  • 等分目标,直到等分的结果长度为1(时间复杂度 $O(log_2 N)$)
  • 开始循环,每次 + 2 ,单词循环中对比相邻的两项进行排列,合并之后得到长度为2的单元
  • 同上次循环,合并得到长度为4的单元
  • …
  • 直到最后,完成合并,得到正确排序数组

时间复杂度: $O(N log_2 N)$

图搜索算法:地图常用,比如获取从一个地方到另外一个地方最近的路线

最普通的 Dijkstra 算法: O(N^2)
优化后: O(N * logN)

数据结构

数组,在内存上顺序存储。字符串是一种在内存上尾部指针指向 “null” 的数组(即在内存上最后一位是二进制0)。因为是顺序存储,所以很难插入修改。数组中的节点可以一个结构体,这样便可以方便修改。下面是几种常见的结构体数组:

链表

每个元素叫做 Node, 存储了一个变量和一个指针(在内存上占用了两个位置),这个指针指向了下一个节点。通过新增一个节点,修改指针的指向可以方便的插入。

链表有两个比较出名的个例:队列、栈。他们的区别是先进先出与后进先出,专有名词有:出队、进队、出栈、进栈

树

它的节点存储了一个变量和两个指针(在内存上占用了三个位置),分别是左指针和右指针。

专有名词有: 根节点、母节点、子节点、叶节点(没有子节点的节点)

图

它的节点存储了一个变量和多个指针

开发部署以太坊DAPP

发表于 2018-10-26 | 更新于: 2018-11-08 | 分类于 区块链 | 评论: | 阅读次数:

参考链接: Web3与智能合约交互实战

DApp 是 Decentralized Application 的简称,及去中心化应用。DAPP 由客户端和合约端配合实现。
我们使用 Solidity 语言编写完合约后,之前我们使用了 geth 与之交互, 而这种命令行的方式太过繁琐,所以我们这儿用到了 Web3.js。

Web3.js 是以太坊官方的Javascript API,可以帮助智能合约开发者使用HTTP或者IPC与本地的或者远程的以太坊节点交互。实际上就是一个库的集合,主要包括下面几个库:

  • web3-eth 用来与以太坊区块链和智能合约交互
  • web3-shh 用来控制whisper协议与p2p通信以及广播
  • web3-bzz 用来与swarm协议交互
  • web3-utils 包含了一些Dapp开发有用的功能

这儿我们主要用到了 web3-eth。下面开始

使用 ganache 生成一条私有链

ganache 是一个可以一键搭建以太坊区块链测试环境的工具。 启动之后默认会生成 10 个账号, 我们的私有链默认运行在 http://127.0.0.1:7545上。

阅读全文 »

用truffle框架开发部署以太坊DAPP

发表于 2018-10-11 | 更新于: 2018-10-26 | 分类于 区块链 | 评论: | 阅读次数:

参考链接:ETHEREUM PET SHOP – YOUR FIRST DAPP

开发环境

  • Truffle: 以太坊Solidity编程语言开发框架。安装:

    1
    $ npm install -g truffle
  • Ganache: 前身testRPC,可以启动一个个人的以太坊私有链用作测试、执行命令、检测区块执行状态。点击前面的连接下载客户端即可。

初始化项目

  1. 建立项目目录

    1
    mkdir pet-shop && cd pet-shop
  2. 使用 truffle unbox 创建项目

    1
    2
    3
    4
    5
    truffle unbox pet-shop
    # Downloading...
    # Unpacking...
    # Setting up...
    # Unbox successful. Sweet!

注: 我们可以使用 truffle unbox <box-name> 下载任意的 Truffle Boxes。 在 truffle box 仓库 可以看到很多 Box , 上面我们下载的是 pet-shop box

下载完成后,可以看到下面这些重要的目录和文件:

  • contracts/ 智能合约的文件夹,所有的智能合约文件都放置在这里,里面包含一个重要的合约Migrations.sol
  • migrations/ 用来处理部署(迁移)智能合约 ,迁移是一个额外特别的合约用来保存合约的变化。
  • test/ 智能合约测试用例文件夹
  • truffle.js 配置文件
阅读全文 »

react vs vue

发表于 2018-09-05 | 更新于: 2019-07-10 | 分类于 前端 | 评论: | 阅读次数:

先接触了 vue ,感觉 vue 特别方便,优雅的想让你上瘾。后面接触了 react native 开发 App, 过来过去都感觉不适应,再慢慢用过一段日子之后,感觉 react 也有自己鲜明的特点,在使用 react 的时候,总想着和 vue 对比一下。由于自己使用 react 主要是在用 react native, 所以有些东西可能了解不深,望海涵。通过对比借此加深下理解的。

VueReact补充说明
Computed、watchReact 不监听数据变化React可以使用 mobx 库来实现这些功能,在 vue 官方描述的 对比其他框架 里面有这样一句话: 在有限程度上,React + Mobx 也可以被认为是更繁琐的 Vue
v-model, 这只是通过语法糖定义了一个自定义指令,本质跟 React 一样. 修饰符.async 也是一样React是单向数据流,只能通过事件触发,然后再setState,React没有自定义指令/
传统 HTML标签渲染 / jsx render渲染jsx/
VuexReduxreact 有一个中间件react-redux 可以让我们方便的使用 Redux
EventBus 非父子组件通信PubSubJS 或 js-signalsreact-native 中还没用过,没遇到需要的场景
混入:mixinsclass组件不可用,在使用 createReactClass 创建 React 组件的时候可用 mixins我们可以要把 mixin 的东西写到单独的 js 文件里,通过 import 实现 mixin,这个本来就是锦上添花,不甚重要
slotprops.chldren自定义组件获取使用时传入的子元素
自定义指令自己通过事件触发实现类似效果自定义指令可以实现类似于 限制 input 输入格式 等效果

还有一些是两者非常类似的,只要会了一个,另一个也就会了:

  • 生命周期方法: 虽然名称不同,但使用一样
  • ref : react 有多种使用 ref 的方法, 具体请看 另外一篇文章
阅读全文 »

区块链学习

发表于 2018-08-13 | 更新于: 2019-07-10 | 分类于 区块链 | 评论: | 阅读次数:

Hash 函数

区块链中区块相连是依靠:后一个区块持有前一个区块的 hash ,这个 hash 一般放在区块头中。 Hash 函数一般有两类:

  1. MD 系列: 如 MD5 ,已被证实不是特别安全
  2. SH 系列: 是美国国家安全局 (NSA) 设计。经历了SHA-0,SHA-1,SHA-2,SHA-3系列发展,比特币采用SHA256算法,该算法属于SHA-2系列,在中本聪发明比特币时(2008)被公认为最安全最先进的算法之一

hello 智能合约

发表于 2018-08-03 | 更新于: 2019-07-10 | 分类于 区块链 | 评论: | 阅读次数:

欢迎查看 跟着大佬一起动手系列,点击这儿查看大佬的博文

什么是智能合约

以太坊上的程序称之为智能合约,它是代码和数据(状态)的集合。

如果做比喻的话智能合约更像是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 )进行合约的编写和编译

阅读全文 »
123…8
堂

堂

道不同不相为谋,懒懒的继续编程......

74 日志
8 分类
49 标签
RSS
GitHub 知乎 QQ群
Creative Commons
友情链接
  • 飞哥的博客
  • 治元的博客
  • 长安曹公子
  • IT姑凉博客
0%
© 2020 堂
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0