leetcode-add-two-numbers

leetcode 两数相加问题描述

原问题链接 https://leetcode.com/problems/add-two-numbers

问题描述: 输入两个非空链表l1,l2, 链表节点为{val:'', next: node}, 链表每个节点的val都在0~9之间. l1,l2代表两个数, 链表的第一个节点存储对应数的个位数,第二个节点存储对应数的十位数依次类推.

任务: 计算l1, l2代表的两个数之和,然后将和转换成链表表示, 并输出链表.

链表格式

1
2
3
4
function ListNode(val, next) {
this.val = (val===undefined ? 0 : val)
this.next = (next===undefined ? null : next)
}

example:

1
2
3
输入: l1 (2 -> 4 -> 3), l2 (5 -> 6 -> 4)
输出: 7 -> 0 -> 8
解释: 342 + 465 = 807

Read More

webassembly向导--译

webAssembly 开发者指导

本页面提供一步一步的操作将一个简单的程序编译成webassembly

前提要求

为了编译成webAssembly,需要提前安装一些工具:

  • Git。在Linux和OSX下已自带了Git,在Windows下需要安装 Git for Windows
  • CMake。在Linux和OSX下可以使用像apt-get 或 brew 这样的包管理工具来安装,在Windows下下载CMake installer;
  • 编译工具。 在linux下安装GCC,在OSX下安装Xcode。在Windows下安装 Visual Studio 2015 Community with Update 3 或更新的版本;
  • Python2.7.x。在Linux和OSX下大部分都内置了Python2.7版本,没有的需要安装,Windows下需要自动下载安装;

    Read More

ssh别名登陆服务器

介绍

做开发时常常需要登陆远程服务器执行一些操作,以前每次都是使用 ssh userName@ip 来登陆,然而ip地址很难记,每次都需要查找下,导致效率太低下,使用ssh别名登陆后可以简化为 ssh userName@aliasName 登陆,方便记忆,操作也简化了,而且aliasName 还可以用于scp之类的操作中

操作步骤

  1. 在本地生成ssh key, ssh-keygen ,一路回车后的到 ~/.ssh目录下的密钥和公钥
  2. 拷贝公钥到远程主机 ssh-copy-id user@ip, 其中user是登陆用户名, ip是远程主机的ip地址; 此步的目的是将公钥拷贝到服务器的authorized_keys文件中, 也可以用 cat ~/.ssh/id_rsa.pub | ssh user@123.45.67.89 "cat >> ~/.ssh/authorized_keys"命令代替。
  3. 设置别名登陆, 在 ~/.ssh/ 目录下新建 config 文件, 文件内容如下
    1
    2
    3
    4
    5
    6
    7
    HOST host2
    HostName 127.0.0.1 # 远程主机的IP地址
    User root # 登陆名

    HOST host1
    HostName 123.123.123
    User root

    说明

    配置完成后 就可以使用 ssh host1 命令登陆host1服务器

特别注意
在linux中有文件权限问题, 需要设置 ~/.ssh/config~/.ssh/id_rsa.pub 两个文件的权限 为 600

更改命令chmod 600 config

github ssh访问失败

最近总遇到clone时提示访问22端口超时,可以通过https端口实现ssh访问,配置上文提到的config文件,添加如下内容

1
2
3
Host github.com
HostName ssh.github.co
Port 443

fetch

fetch 概览

本文翻译自 devdocs 文档中的 Fetch API: Using Fetch 一节

Fetch API 提供了访问和操作部分 HTTP 管道的 js 接口, 比如 request(请求)和response(响应). 同时也提供了一个使用异步方法简便获取网络资源的全局函数 fetch().

之前实现的 XMLHttpRequest (Ajax) 具有相同的功能. fetch 更容易用在类似Service Workers 的其它技术里面.

简单的列子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
fetch('url')
.then(res => {
// http 状态码错误, 比如是 404, 500 等时 res.ok 为 false
if (res.ok) {
return res.json(); // 返回的是一个 promise
}
})
.then(json => {
// 从后台获取到的json数据
console.log(json);
})
.catch(err => {
// http 状态码错误并不会触发, 触发 catch 的条件是网络请求失败或者有阻止请求完成的事件发生.
console.log('发生了一些错误', err);
})

python.1基础

python代码转换成二进制

python代码的执行过程是:源代码-》解析器-》字节码-》解析器-》机器码,pyc和pyo文件是以字节码的形式存在,可以加速代码加载速度,两者不一样的地方在于pyo文件是经过优化的字节码

1
2
3
# 生成pyc和pyo文件的方式
python -m py_compile file.py #将file.py转化成pyc 文件
python -O -m py_compile file.py #将file.py转化成pyo文件

numpy

从文件加载:np.loadtxt(filepath, dtype, comments,delimiter, converters, skiprows,usercols,ndmin, unpack)
存储到文件: np.savetxt(filepath, X, fmt, delimiter, newline, header, footer, comments)

patplotlib

绘制散点图: plt.scatter(X, Y, c, marker, label)

nodejs事件模块

nodejs里所有事件类型基本都是由events模块开提供, js是异步执行的,在很多情况下需要同步执行, 这时可以使用events模块来实现同步

event模块主要是EventEmitter类, 使用event.EventEmitter类来实例化一个事件对象

‘’’
let event = require(‘events’); // 引入events模块
let emit = new event.EventEmitter(); // 实例化一个events对象

‘’’

Read More

js对象之实例工厂

new相关

1
2
3
4
let Person = function (name) {
this.name = name;
};
let lihua = new Person('lihua'); // lihua是Person对象的一个实例

new操作符有执行过程:

  • 设置行为: 创建一个新对象,其原型为 Person.prototype
  • 设置数据: Person接受刚上一步创建的对象作为隐式参数 this,设置新创对象的属性值this.name

Read More

js对象之对象间的原型

原型

原型用来描述对象之间的继承关系。每个对象都有原型,通过[[prototype]]这个内部属性描述。对象会继承其原型的所有属性和方法。

1
2
3
4
5
6
7
8
9
10
let obj1 = {
name: 'obj1',
desc: function() {
console.log("obj name is:", this.name)
}
}

let obj2 = Object.create(obj1); //通过obj1创建对象obj2, obj2的原型是obj1
obj2.name = 'obj2';
obj2.desc(); // obj2 继承了obj2的原型 obj1中的方法

Read More

js对象之单一对象

js所有对象都是从字符串到值得映射,对象的属性分为三种:数据属性(最常见)、访问器(设置属性的的获取和设置)、内置属性(在语言规范中定义的js无法直接访问)。

访问属性

访问属性有两种方法,点操作符和中括号操作符。

1
2
3
4
let obj = {test: 'hello'};
obj.test;
let keyName = 'test';
obj['test'] =+ obj.test == obj[keyName]

使用点操作符比较方便顺手,使用中括号可以通过计算变量后再得到属性;

Read More