Skip to main content

· 6 min read
kart jim

5种交换变量的方法

前提:

let a = 12, b =34;

最基础 - 临时变量法

let t = a;
a = b;
b = t;

优点:简单好用、有普适性 缺点:会增加内存消耗

ES6 - 解构赋值法

[a, b] = [b, a];

优点:只需一行 缺点:需要浏览器支持ES6

算术运算法

a = a + b;
b = a - b;
a = a - b;

优点:巧妙,只利用简单的加法运算 缺点:可能会导致数据溢出

· 9 min read
kart jim

历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的require、Python 的import,甚至就连 CSS 都有@import,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS(CJS) 和 AMD 两种。前者用于服务器,后者用于浏览器。
ES6 在语言标准的层面上,实现了模块功能,成为浏览器和服务器通用的模块解决方案。(ESMES6模块)

· 4 min read
kart jim

这里一共总结了 方法:

  1. 利用Set
  2. 双层循环判断是否相等,splice()去掉重复值
  3. 利用indexOf去重
  4. 利用includes()
  5. 利用循环加 hasOwnProperty()
  6. 利用filter
  7. 使用 Map 对象
  8. 使用第三方库 LodashRamda

测试用数组:

var arr = [
1, 1, 21, 21,0,
'true', 'false',true, false, 'false', true,
undefined, null, null, NaN, 'NaN', NaN, 'NaN', false, undefined,
0, 'a', 'a', 'true',
{'name': 'jim', 'age': 20},
{'age': 20, 'name': 'jim'},
{'name': 'kart', 'age': 21},
{'name': 'kart', 'age': 21},
{}, {}
];

· 10 min read
kart jim
Promises/A+

以下翻译自官网:promisesaplus.com/

Promise 代表异步操作的最终结果。与 Promise 交互的主要方式是通过其 then 方法,该方法注册回调以接收 Promise 的最终值或 Promise 失败的原因。

该规范详细说明了 then 方法的行为,提供了一个可互操作的基础,所有符合 Promises/A+Promise 实现都可以依赖该基础来提供。因此,规范应该被认为是非常稳定的。尽管 Promises/A+ 组织可能偶尔会通过微小的向后兼容更改来修改此规范以解决新发现的极端情况,但只有在仔细考虑、讨论和测试后,我们才会集成大的或向后不兼容的更改。

最后,核心 Promises/A+ 规范不涉及如何创建、履行或拒绝 Promise,而是选择专注于提供可互操作的 then 方法。

1、术语

  • promise 是具有 then 方法的对象或函数,其行为符合本规范。
  • thenable是定义 then 方法的对象或函数。
  • value是任何合法的 JavaScript 值(包括 undefinedthenablepromise)。
  • exception是使用 throw 语句抛出的值。
  • reason 是一个值,表示一个 promise 被拒绝的原因。

· 33 min read
kart jim

HTTP 基本概念

HTTP 是什么?描述一下

HTTP 是超文本传输协议,也就是HyperText Transfer Protocol

能否详细解释「超文本传输协议」?

HTTP的名字「超文本协议传输」,它可以拆成三个部分:

  • 超文本
  • 传输
  • 协议

HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。

那「HTTP 是用于从互联网服务器传输超文本到本地浏览器的协议HTTP」 ,这种说法正确吗?

这种说法是不正确的。因为也可以是「服务器< -- >服务器」,所以采用两点之间的描述会更准确。

HTTP 常见的状态码,有哪些?

  1. 1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。
  2. 2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
  • 200 OK」是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据
  • 204 No Content」也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据
  • 206 Partial Content」是应用于 HTTP 分块下载或断电续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
  1. 3xx 类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向
  • 301 Moved Permanently」表示永久重定向,说明 请求的资源已经不存在了,需改用新的 URL 再次访问
  • 302 Found」表示临时重定向,说明 请求的资源还在,但暂时需要用另一个 URL 来访问 。 301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL
  • 304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。
  1. 4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
  • 400 Bad Request」表示客户端请求的报文有错误,但只是个笼统的错误
  • 403 Forbidden」表示服务器禁止访问资源,并不是客户端的请求出错
  • 404 Not Found」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。
  1. 5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码
  • 500 Internal Server Error」与 400 类型,是个笼统通用的错误码,服务器发生了什么错误,我们并不知道。 「501 Not Implemented」表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思。 「502 Bad Gateway」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。 「503 Service Unavailable」表示服务器当前很忙,暂时无法响应服务器,类似“网络服务正忙,请稍后重试”的意思。

· 30 min read
kart jim

© 2002 Rus Shuler @ Pomeroy IT Solutions, all rights reserved

介绍

互联网是如何工作的?这是个好问题!互联网已经开始爆炸性的增长,我们每个人似乎都不可能逃脱www.com的轰炸,你会经常在电视上、收音机里和杂志上看到。由于互联网已经成为我们生活中很大的一部分,要最有效地使用这一新工具,需要对其有很好的理解。

本文解释了使 Internet 工作的底层基础设施和技术。它并没有很深入,但涵盖了足够的每个领域,以便对所涉及的概念有一个基本的了解。

从哪里开始?互联网地址

因为 Internet 是一个全球计算机网络,连接到 Internet 的每台计算机都必须有一个唯一的地址。 Internet 地址的格式为 nnn.nnn.nnn.nnn,其中 nnn 必须是 0 到 255 之间的数字。此地址称为 IP 地址。 (IP 代表 Internet 协议)

下图说明了两台连接到 Internet 的计算机;您的 IP 地址为 1.2.3.4 的计算机和另一台 IP 地址为 5.6.7.8 的计算机。互联网被表示为介于两者之间的抽象对象。 network1.gif

如果您通过 Internet 服务提供商 (ISP) 连接到 Internet,通常会在拨入会话期间为您分配一个 临时 IP 地址 。如果您从局域网 (LAN) 连接到 Internet,您的计算机可能有一个永久 IP 地址,或者它可能从 DHCP(动态主机配置协议)服务器获得一个临时地址。在任何情况下,如果您连接到 Internet,您的计算机就有一个唯一的 IP 地址。

Ping 程序

如果您使用的是 Microsoft Windowslinux 并且连接到 Internet,那么有一个方便的程序可以查看 Internet 上的计算机是否 ”在线“ 。它被称为 ping,名字可能来自旧潜艇声纳系统发出的声音。启动命令提,键入 ping www.yahoo.comping 程序将向指定的计算机发送 “ping”(实际上是 ICMP(Internet 控制消息协议)回显请求消息)。被 ping 的计算机将回复。 ping 程序将计算过期时间,直到回复返回(如果确实如此)。此外,如果您输入域名(即 www.yahoo.com)而不是 IP 地址,ping 将解析域名并显示计算机的 IP 地址。稍后将详细介绍域名和地址解析。

协议栈和数据包

因此,您的计算机已连接到 Internet 并具有唯一的ip地址。它如何与连接到 Internet 的其他计算机“对话”?此处应提供一个示例: 假设您的 IP 地址是 1.2.3.4,并且您想向计算机 5.6.7.8 发送消息。您要发送的消息是“Hello computer 5.6.7.8!”。显然,必须通过将计算机连接到 Internet 的线路来传输消息。假设您已从家里拨入您的 ISP,消息必须通过电话线传输。因此,消息从字母文本翻译成电子信号,通过 Internet 传输,然后再翻译回字母文本。这是如何实现的?通过使用协议栈。每台计算机都需要一台在 Internet 上进行通信,并且它通常内置于计算机的操作系统(即 WindowsUnix 等)中。由于使用了两种主要的通信协议,因此 Internet 上使用的协议栈被称为 TCP/IP 协议栈。 TCP/IP 堆栈如下所示:

协议层解释
应用程序协议特定于应用程序(如 WWW、电子邮件、FTP 等)的协议层协议
传输控制协议层TCP 使用端口号将数据包定向到计算机上的特定应用程序。
互联网协议层IP 使用 IP 地址将数据包定向到特定计算机。
硬件层将二进制数据包数据转换为网络信号并返回。(例如以太网网卡、电话线调制解调器等)

· 19 min read
kart jim

设置windows子系统的语言

在windows安装linux子系统的时候,可以选择语言,如果选的不是中文或不是自己想要的,后期可以通过命令行的方式进行修改:

首先,安装对应语言包:

sudo apt-get install language-pack-zh-hans

然后设置语言;注意,这里一定要加上sudo,否则该文件是只读状态无法更改:

sudo vi /etc/default/locale 

保存退出便完成设置。

测试:

ncal -b
# 输出
七月 2022
一 二 三 四 五 六 日
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 29 30 31

· 6 min read
kart jim

函数式编程提倡使用递归,而不是循环。递归在某些场合下更优雅、更简洁。

但是使用递归有时候会遇到一些问题,比如说栈溢出。

这里总结了几种解决栈溢出问题的几种解决方案,比如最有效的尾递归(tail call),以及不使用尾递归的其它两种方式。

· 7 min read
kart jim

在所有的类linux操作系统中,cal或者ncal命令会在命令行打印出一个有格式的日历(阳历)。

默认情况下,即不给定任何参数的情况下,cal和ncal将会输入本月的日历,并突出显示当前的日期(在Ubuntu22.04LTS下,ncal突出显示当前的日期): > cal:

      六月 2022
日 一 二 三 四 五 六
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 29 30

> ncal:

    六月 2022
一 6 13 20 27
二 7 14 21 28
三 1 8 15 22 29
四 2 9 16 23 30
五 3 10 17 24
六 4 11 18 25
日 5 12 19 26
ncal和cal的区别

可以看到ncal命令和cal命令都会在控制台输出有格式的日历,但是ncal命令显示的日历是竖着的,有别于传统的日历格式。