2024年最新了不起的 Deno 入门教程,哔哩哔哩技术类面试

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

install        Install script as an executable

repl           Read Eval Print Loop

run            Run a program given a filename or url to the module

test           Run tests

types          Print runtime TypeScript declarations

upgrade        Upgrade deno executable to given version

2.2 REPL

在命令中输入 deno 命令,你就会启动一个 REPL(Read-Execute-Print-Loop):

$ deno

Deno 1.0.0

exit using ctrl+d or close()

1 + 2

3

const name = “semlinker”;

undefined

console.log(name);

semlinker

undefined

三、Deno 初体验

3.1 welcome demo

相信一些读者安装完 Deno 已经迫不及待了,现在我们立马来体验一下 Deno 应用程序。首先打开你熟悉的命令行,然后在命令行输入以下命令:

$ deno run https://deno.land/std/examples/welcome.ts

Download https://deno.land/std/examples/welcome.ts

Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts

Compile https://deno.land/std/examples/welcome.ts

Welcome to Deno ???

通过观察以上输出,我们可以知道当运行 deno run https://deno.land/std/examples/welcome.ts 命令之后,Deno 会先从 https://deno.land/std/examples/welcome.ts URL 地址下载 welcome.ts 文件,该文件的内容是:

console.log(“Welcome to Deno ???”);

当文件下载成功后,Deno 会对  welcome.ts 文件进行编译,即编译成 welcome.ts.js 文件,然后再通过 V8 引擎来执行编译生成的 JavaScript 文件。需要注意的是,如果你在命令行重新运行上述命令,则会执行缓存中已生成的文件,并不会再次从网上下载 welcome.ts 文件。

$ deno run https://deno.land/std/examples/welcome.ts

Welcome to Deno ???

那如何证明再次执行上述命令时, Deno 会优先执行缓存中编译生成的 JavaScript 文件呢?这里我们要先介绍一下 deno info 命令,该命令用于显示有关缓存或源文件相关的信息:

$ deno info

DENO_DIR location: “/Users/fer/Library/Caches/deno”

Remote modules cache: “/Users/fer/Library/Caches/deno/deps”

TypeScript compiler cache: “/Users/fer/Library/Caches/deno/gen”

在上述的输出信息中,我们看到了 TypeScript compiler cache 这行记录,很明显这是 TypeScript 编译器缓存的目录,进入该目录后,通过一层层的查找,我们最终在 examples 目录下找到了 welcome.ts.js 文件:

➜  examples ls

welcome.ts.js     welcome.ts.js.map welcome.ts.meta

打开目录中 welcome.ts.js 文件,我们可以看到以下内容:

“use strict”;

console.log(“Welcome to Deno ???”);

//# sourceMappingURL=file:///Users/fer/Library/Caches/deno/gen/https/deno.land/std/examples/welcome.ts.js.map

下面我们来修改该文件,在文件中添加一行输出信息 console.log("Hello Semlinker, from Cache");,具体如下:

“use strict”;

console.log(“Hello Semlinker, from Cache”);

console.log(“Welcome to Deno ???”);

//# sourceMappingURL=file:///Users/fer/Library/Caches/deno/gen/https/deno.land/std/examples/welcome.ts.js.map

接着我们在命令行中重新执行以下命令:

$ deno run https://deno.land/std/examples/welcome.ts

Hello Semlinker, from Cache

Welcome to Deno ???

那么现在问题又来了,如何强制刷新缓存,即重新编译 TypeScript 代码呢?针对这个问题,在运行 deno run 命令时,我们需要添加 --reload 标志,来告诉 Deno 需要重新刷新指定文件:

$ deno run --reload https://deno.land/std/examples/welcome.ts

Download https://deno.land/std/examples/welcome.ts

Warning Implicitly using master branch https://deno.land/std/examples/welcome.ts

Compile https://deno.land/std/examples/welcome.ts

Welcome to Deno ???

除了 --reload 标志之外,Deno run 命令还支持很多其他的标志,感兴趣的读者可以运行 deno run --help 命令来查看更多的信息。

3.2 TCP echo server

前面我们已经介绍了如何运行官方的 welcome 示例,下面我们来介绍如何使用 Deno 创建一个简单的 TCP echo 服务器。首先我们创建一个 learn-deno 项目,然后在该项目下新建一个 quickstart 目录,接着新建一个 echo_server.ts 文件并输入以下代码:

const listener = Deno.listen({ port: 8080 });

console.log(“listening on 0.0.0.0:8080”);

for await (const conn of listener) {

Deno.copy(conn, conn);

}

for await…of 语句会在异步或者同步可迭代对象上创建一个迭代循环,包括 String,Array,Array-like 对象(比如 arguments 或者 NodeList),TypedArray,Map, Set 和自定义的异步或者同步可迭代对象。

for await…of 的语法如下:

for await (variable of iterable) {

statement

}

输入完以上代码之后,相信很多读者会跟我一样,直接在命令行运行以下命令:

➜  quickstart deno run ./echo_server.ts

Compile file:///Users/fer/LearnProjects/learn-deno/quickstart/echo_server.ts

error: Uncaught PermissionDenied: network access to “0.0.0.0:8080”, run again with the --allow-net flag

at unwrapResponse ( d e n o deno deno/ops/dispatch_json.ts:43:11)

at Object.sendSync ( d e n o deno deno/ops/dispatch_json.ts:72:10)

at Object.listen ( d e n o deno deno/ops/net.ts:51:10)

at Object.listen ( d e n o deno deno/net.ts:152:22)

at file:///Users/fer/LearnProjects/learn-deno/quickstart/echo_server.ts:1:23

很明显是权限错误,从错误信息中,Deno 告诉我们需要设置 --allow-net 标志,以允许网络访问。为什么会这样呢?这是因为 Deno 是一个 JavaScript/TypeScript 的运行时,默认使用安全环境执行代码。下面我们添加 --allow-net 标志,然后再次运行 echo_server.ts 文件:

➜ quickstart deno run --allow-net ./echo_server.ts

listening on 0.0.0.0:8080

当服务器成功运行之后,我们使用 nc 命令来测试一下服务器的功能:

➜  ~ nc localhost 8080

hell semlinker

hell semlinker

介绍完如何使用 Deno 创建一个简单的 TCP echo 服务器,我们再来介绍一下如何使用 Deno 创建一个简单的 HTTP 服务器。

3.3 HTTP Server

与 TCP Server 一样,在 quickstart 目录下,我们新建一个 http_server.ts 文件并输入以下内容:

import { serve } from “https://deno.land/std@v0.50.0/http/server.ts”;

const PORT = 8080;

const s = serve({ port: PORT });

console.log( Listening on <http://localhost>:${PORT}/);

for await (const req of s) {

req.respond({ body: “Hello Semlinker\n” });

}

友情提示:在实际开发过程中,你可以从 https://deno.land/std 地址获取所需的标准库版本。示例中我们显式指定了版本,当然你也可以不指定版本,比如这样:https://deno.land/std/http/server.ts 。

在上述代码中,我们导入了 Deno 标准库 http 模块中 serve 函数,然后使用该函数快速创建 HTTP 服务器,该函数的定义如下:

// std/http/server.ts

export function serve(addr: string | HTTPOptions): Server {

if (typeof addr === “string”) {

const [hostname, port] = addr.split(“:”);

addr = { hostname, port: Number(port) };

}

const listener = listen(addr);

return new Server(listener);

}

serve 函数接收一个参数,其类型是 string | HTTPOptions,其中 HTTPOptions 接口的定义如下:

/** Options for creating an HTTP server. */

export type HTTPOptions = Omit<Deno.ListenOptions, “transport”>;

export interface ListenOptions {

/** The port to listen on. */

port: number;

/** A literal IP address or host name that can be resolved to an IP address.

* If not specified, defaults to 0.0.0.0. */

hostname?: string;

}

当输入的参数类型是字符串时,serve 函数会使用 : 冒号对字符串进行切割,获取 hostname 和 port,然后包装成对象赋值给 addr 参数,接着使用 addr 参数继续调用 listen 函数进一步创建 listener 对象,最终调用 new Server(listener) 创建 HTTP 服务器。

创建完 HTTP 服务器,我们来启动该服务器,打开命令行输入以下命令:

➜  quickstart deno run --allow-net ./http_server.ts

Compile file:///Users/fer/LearnProjects/learn-deno/quickstart/http_server.ts

Listening on http://localhost:8080/

接着打开浏览器,在地址栏上输入 http://localhost:8080/ 地址,之后在当前页面中会看到以下内容:

Hello World\n

四、调试 Deno

Deno 支持 V8 Inspector Protocol。使用 Chrome Devtools 或其他支持该协议的客户端(比如 VSCode)能够调试 Deno 程序。要启用调试功能,用 --inspect 或 --inspect-brk 选项运行 Deno,对应的选项描述如下:

–inspect=HOST:PORT

activate inspector on host:port (default: 127.0.0.1:9229)

–inspect-brk=HOST:PORT

activate inspector on host:port and break at start of user script

--inspect 选项允许在任何时间点连接调试器,而 --inspect-brk 选项会等待调试器连接,在第一行代码处暂停执行。

4.1 Chrome Devtools

让我们用 Chrome 开发者工具来调试一个简单的程序,我们将使用来自 std 的 file_server.ts,这是一个简单的静态文件服务。

使用 --inspect-brk 选项,在第一行代码处暂停执行。

总结
  • 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

  • 算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈…(最好多刷一刷,不然影响你的工资和成功率???)

  • 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。

  • 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!

第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说,人嘛都会有苦恼的~

祝大家都有美好的未来,拿下满意的 offer。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值