总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
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。