1
1
import Image from 'next/image'
2
2
import { useRouter } from 'next/router'
3
3
import { NextSeo } from 'next-seo'
4
+ import { useMemo } from 'react'
4
5
import { ReactColorIcon } from 'ui'
5
6
6
7
import Benefits from '~/components/careers/Benefits'
7
8
import { EngineerHiringProcess } from '~/components/careers/HiringProcess'
8
9
import { useCareersLayoutConfig } from '~/components/layouts/CareersLayout'
9
10
10
- import SlackCloneImage from '~/assets/Slack Clone 1 .png'
11
+ import ExampleImage from '~/assets/react-interview-example .png'
11
12
12
13
export default function ReactInterviewPageInChina ( ) {
13
14
const { query } = useRouter ( )
@@ -19,6 +20,14 @@ export default function ReactInterviewPageInChina() {
19
20
title,
20
21
} )
21
22
23
+ const branchName = useMemo (
24
+ ( ) =>
25
+ `interview/${ new Date ( ) . getMonth ( ) + 1 } -${ new Date ( ) . getDate ( ) } ${
26
+ candidate ? '_' + candidate : ''
27
+ } `,
28
+ [ candidate ]
29
+ )
30
+
22
31
return (
23
32
< >
24
33
< NextSeo title = { title } />
@@ -31,74 +40,99 @@ export default function ReactInterviewPageInChina() {
31
40
{ isRemote ? (
32
41
< >
33
42
< h2 > 准备事项</ h2 >
34
- < p > 首先你可以从以下两种方案中选择一条:</ p >
35
43
< ol >
36
44
< li >
37
- 使用我们提供的在线IDE环境,在线编辑代码,并< b > 在线</ b > 提交代码;
45
+ 在本地克隆我们的{ ' ' }
46
+ < a href = "https://github.com/zolplay-cn/react-interview" >
47
+ GitHub仓库
48
+ </ a >
38
49
< blockquote >
39
- 在线Replit IDE:
40
- < a
41
- href = "https://replit.com/join/rkfkrflilu-zolplay"
42
- target = "_blank"
43
- rel = "noreferrer"
44
- >
45
- 加入链接
46
- </ a >
50
+ < code >
51
+ git clone https://github.com/zolplay-cn/react-interview.git
52
+ </ code >
47
53
</ blockquote >
54
+ ;
48
55
</ li >
49
56
< li >
50
- 使用自己的电脑环境与代码编辑器,分享屏幕,并在< b > 本地</ b >
51
- 提交代码;
52
- < blockquote >
53
- 在本地建立一个Git仓库,并新建一个React项目(脚手架自选)
54
- </ blockquote >
57
+ 基于 < code > main</ code > 分支,创建一个新的分支名叫{ ' ' }
58
+ < code > { branchName } </ code > ,并切换到该分支;
59
+ </ li >
60
+ < li > 使用你喜爱的代码编辑器/IDE打开文件夹项目;</ li >
61
+ < li > 在文件夹项目根目录下,使用pnpm安装依赖(或npm/yarn);</ li >
62
+ < li >
63
+ 运行 < code > pnpm/npm/yarn run dev</ code > 命令,启动项目
55
64
</ li >
56
65
</ ol >
57
66
</ >
58
67
) : (
59
68
< >
60
69
< h2 > 准备事项</ h2 >
61
- < p >
62
- 首先你需要在项目文件目录中开启一个新的Git分支,起名叫做 { ' ' }
63
- < code >
64
- interview/
65
- { ` ${ new Date ( ) . getMonth ( ) + 1 } - ${ new Date ( ) . getDate ( ) } ${
66
- candidate ? '_' + candidate : ''
67
- } ` }
68
- </ code >
69
- </ p >
70
+ < ol >
71
+ < li >
72
+ 在项目目录中开启一个新的Git分支名为 < code > { branchName } </ code >
73
+ ,并切换到该分支;
74
+ </ li >
75
+ < li >
76
+ 运行 < code > pnpm dev </ code > 命令,启动项目;
77
+ </ li >
78
+ </ ol >
70
79
</ >
71
80
) }
72
81
73
- < h2 > 面试测试题流程 </ h2 >
82
+ < h2 > 面试测试题要求 </ h2 >
74
83
75
- < p > 现在有一个设计稿UI图如下:</ p >
84
+ < p >
85
+ 我们为你准备了一个类似Spotlight的搜索器界面,可以先查阅现有的项目代码并熟悉一下项目的结构。
86
+ </ p >
76
87
77
88
< section className = "-mx-[10vw] rounded-2xl border-2 border-sky-300/20 shadow-2xl shadow-indigo-500/20" >
78
89
< Image
79
- src = { SlackCloneImage }
90
+ src = { ExampleImage }
80
91
placeholder = "blur"
81
- alt = "Slack Clone "
92
+ alt = "Example "
82
93
className = "rounded-2xl"
83
94
layout = "responsive"
84
95
/>
85
96
</ section >
86
97
87
- < p > 请使用React Hooks形式的函数组件来实现界面布局,并最大程度上地还原UI</ p >
88
- < p > (不限制任何框架、第三方库的使用)</ p >
98
+ < p > 熟悉完之后我们就可以投入到测试题开发当中,你需要完成以下几个要求:</ p >
99
+
100
+ < ul >
101
+ < li >
102
+ 当搜索输入框的值发生改变的时候,应该触发一个搜索请求,请求的URL为
103
+ < code > /api/search?q=QUERY</ code > ;
104
+ </ li >
105
+ < li >
106
+ 将返回的搜索结果替换在列表中显示,并传真实数据到{ ' ' }
107
+ < code > <RepositoryOption /></ code >
108
+ 组件中,并对该组件进行封装能够动态渲染仓库信息;
109
+ </ li >
110
+ < li >
111
+ 当搜索结果为空时,应该显示一个提示信息,提示信息的内容为:
112
+ < code > 暂无 QUERY 的相关仓库信息</ code > ;
113
+ </ li >
114
+ < li >
115
+ 确保每次发出的搜索请求间隔 < b > 大于等于500ms</ b > ;
116
+ </ li >
117
+ </ ul >
89
118
90
119
< h2 > 加分项</ h2 >
91
- < p > 下列加分项并非必须,但是可以为你的题目完成增加一些额外的分数 :</ p >
120
+ < p > 在时间允许的前提下,可以选择性完成任意一个/多个加分任务 :</ p >
92
121
< ul >
122
+ < li > 优化搜索结果的渲染,使其可以更加高效的渲染,提高用户体验;</ li >
123
+ < li > 给UI添加动画效果,增加用户体验;</ li >
93
124
< li >
94
- Semantic 语义化的 HTML5 标签使用,而不是滥用{ ' ' }
95
- < code > <div /></ code >
125
+ 当选中仓库信息的时候,应该在浏览器中打开仓库的链接,并且查看仓库的详细信息。
126
+ </ li >
127
+ < li >
128
+ 增加一个搜索历史记录,用户可以在搜索框中输入关键字,并且可以查看历史记录。
96
129
</ li >
97
- < li > 添加合理的交互动画,让UI更加生动;</ li >
98
- < li > 组件化代码,让代码更加简洁;</ li >
99
- < li > 使用TypeScript完成代码;</ li >
100
130
</ ul >
101
131
132
+ < br />
133
+ < p > ======= 分割线 =======</ p >
134
+ < br />
135
+
102
136
< h2 > 福利待遇</ h2 >
103
137
< Benefits />
104
138
0 commit comments