wwc
简单点就好

单播ARP

嗯,今天挺高产

为了准备网络考试,研究了一些协议,这里说一下ARP

单播ARP

我们说认识的ARP都是广播

也即
Ethernet 的 dst 地址 为 ff:ff:ff:ff:ff:ff
而ARP中的 target MAC 置为 00:00:00:00:00:00

就像这样


tracert和DNSlookup初探

Dig

这是一个Linux自带的DNS查询命令,我将尝试解读它 :)

先糊上我自己Github Page原始域名的解析结果


js中for...in与for...of区别

首先,我们可以将 Array看作以下标作为key,值作为value的js对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;(function(){
let arr = [1,2,3]

for(a in arr){
console.log(a)
}

console.log(`---------------------------------`)

for(a of arr){
console.log(a)
}
console.log(`下一个代码块`)
let obj = {
name:'wwc',
age:21
}

for(o in obj){
console.log(o)
}

console.log(`---------------------------------`)

for(o of obj){
console.log(o)
}
})();

TypeScript中import=require 和es6 module import区别

这个是在Github 看到的评论,感觉写的不错,就直接搬过来了

比较

export defaultimport x = require('')区别

export default … (Default Export)

1
2
3
4
5
6
7
8
9
10
// calculator.ts                                // compiled.js
// ============= // ===========
export default class Calculator { // var Calculator = /** @class */ (function () {'
' public add(num1, num2) { // function Calculator() {}
return num1 + num2; // Calculator.prototype.add = function (num1, num2) {
} // return num1 + num2;
} // };
// return Calculator;
// }());
// exports["default"] = Calculator;

关于CJS和ESM互相引入的问题探究

ESM支持命名导入和默认导入

1
2
3
4
5
//命名导入
import { namedExport } from 'myModule'

// 默认导入
import defaultExport from 'myModule'

这两种方式可以共存


JavaScript:立即执行函数表达式(IIFE)

转自 https://segmentfault.com/a/1190000003985390

可能你并没有注意到,我是一个对于专业术语有一点坚持细节人。所有,当我听到流行的但是还存在误解的术语“自执行匿名函数”多次时,我最终决定将我的想法写进这篇文章里。

除了提供关于这种模式事实上是如何工作的一些全面的信息,更进一步的,实际上我建议我们应该知道我们应该叫它什么。而且,如果你想跳过这里,你可以直接跳到立即调用函数表达式进行阅读,但是我建议你读完整篇文章。

它是什么
在 JavaScript 里,每个函数,当被调用时,都会创建一个新的执行上下文。因为在函数里定义的变量和函数是唯一在内部被访问的变量,而不是在外部被访问的变量,当调用函数时,函数提供的上下文提供了一个非常简单的方法创建私有变量。

1
2
3
4
5
6
function makeCounter() {
var i = 0;
return function(){
console.log(++i);
};
}

JavaScript-call-apply-bind区别

call, apply bind 都绑定this

1. call

call绑定之后立即调用函数

1
2
3
4
5
6
7
8
9
var person = {  
name: "James Smith",
hello: function(thing) {
console.log(this.name + " says hello " + thing);
}
}

person.hello("world"); // output: "James Smith says hello world"
person.hello.call({ name: "Jim Smith" }, "world"); // output: "Jim Smith says hello world"

Golang-HTTP包下面的Handle和HandleFunc区别

Handle是一个接口

1
2
3
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}

也就是如果想要响应HTTP请求就必须实现这个接口

但对于一些HTTP请求我们只需要简单的处理,不需要保持状态
所以出现了HandleFunc


Golang使用ProtoBuf

两个例子都使用了Golang最新的module feature
第一个例子还是放到了$GOPATH

go.mod >> module chaochaogege.com/filecatcher

如果我的域名chaochaogege.com

路径 $GOPATH/src/chaochaogege.com/

chaochaogege.com里面有个projectfilecatcher

我现在有两个proto文件都处于 chaochaogege.com/filecatcher/common/

  • TaskInfo.proto
  • ChunkInfo.proto

Web编辑器-AceEditor使用过程踩坑记录

我想使用者可以打开多个不同的文件,所以使用一个Editor,就需要给每一个文件绑定一个Document,

从官网上写的

Contains the text of the document. Document can be attached to several EditSessions.

At its core, Documents are just an array of strings, with each row in the document matching up to the array index.

看起来很美好,对每一个文件绑定一个Document对象,当进行文件切换的时候直接使用APIsetDocument(doc)就行了