diff --git a/.scripts/overview.ts b/.scripts/overview.ts
index a1980c09..9a520e1a 100644
--- a/.scripts/overview.ts
+++ b/.scripts/overview.ts
@@ -40,7 +40,9 @@ const root = path.resolve(__dirname, `..`);
for (const item of value) {
const name = item.split("/").pop();
if (!name) continue;
- content.push(`* [${name}](${item.replace(/ /g, "%20")}.md)`);
+ const zh = `* [${name}](${item.replace(/ /g, "%20")}.md)`;
+ const en = ` [(*en-us*)](I18N/${item.replace(/ /g, "%20")}.md)`;
+ content.push(zh + en);
}
content.push("");
}
diff --git "a/Backup/\344\273\216\351\233\266\350\256\276\350\256\241\345\256\236\347\216\260\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md" "b/Backup/\344\273\216\351\233\266\350\256\276\350\256\241\345\256\236\347\216\260\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md"
index fcdee07a..8a3275cb 100644
--- "a/Backup/\344\273\216\351\233\266\350\256\276\350\256\241\345\256\236\347\216\260\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md"
+++ "b/Backup/\344\273\216\351\233\266\350\256\276\350\256\241\345\256\236\347\216\260\345\257\214\346\226\207\346\234\254\347\274\226\350\276\221\345\231\250.md"
@@ -1,7 +1,13 @@
# 从零设计实现富文本编辑器
+富文本编辑器是允许用户在输入和编辑文本内容时,可以应用不同的格式、样式等功能,例如图文混排等,具有所见即所得的能力。与简单的纯文本编辑组件``等不同,富文本编辑器提供了更多的功能和灵活性,让用户可以创建更丰富和结构化的内容。现代的富文本编辑器也已经不仅限于文字和图片,还包括视频、表格、代码块、思维导图、附件、公式、格式刷等等比较复杂的功能。
+
+- 开源地址:
+- 项目笔记:
## Why?
+那么为什么要从零设计实现新的富文本编辑器,因为当前已经有很多优秀的编辑器实现。例如极具表现力的数据结构设计`Quill`、结合`React`视图层的`Draft`、纯粹的编辑器引擎`Slate`、高度模块化的`PromiseMirror`、开箱即用的`TinyMCE/TipTap`、集成协同解决方案的`EtherPad`等等。
+而我前段时间都在专注于编辑器的应用层实现,在具体实现的过程中也遇到了很多问题,并且记录了相关文章。然而在应用层实现的过程中,遇到了很多我个人觉得可以优化的地方,特别是在数据结构层面上,希望能够将我的一些想法应用出来。举例来说,主要有下面的几个原因:
## 编辑器专栏
@@ -14,7 +20,7 @@
此外,这段时间还研究了`slate`富文本编辑器相关的实现,并且也给`slate`的仓库提过一些`PR`。还写了一些`slate`相关的文章,同样也是比较关注于应用层的实现,例如:
- [WrapNode数据结构与操作变换](https://github.com/WindRunnerMax/EveryDay/blob/master/RichText/WrapNode数据结构与操作变换.md)
-- [Node节点与Path路径映射]()
+- [Node节点与Path路径映射](https://github.com/WindRunnerMax/EveryDay/blob/master/RichText/Node节点与Path路径映射.md)
- ...
@@ -28,20 +34,25 @@
块级结构选择效果
### 数据结构设计
-数据结构设计
+数据结构设计
slate数据设计尽可能倾向于`HTML`的设计,
+Piece Table
此外在`0.50`之前的版本`API`设计非常复杂,需要比较大的理解成本,虽然
normalize 很复杂,特别是脏路径标记
视图相关
+协同相关
## 方案选型
实现`ContentEditable`的编辑器
### execCommand
-data: text/html;base64,PGRpdiBjb250ZW50ZWRpdGFibGU+PC9kaXY+
+
+```plain
+data:text/html,
+```
https://github.com/jaredreich/pell
### ContentEditable
@@ -55,6 +66,13 @@ https://github.com/jaredreich/pell
## 参考
+-
-
+-
+-
+-
+-
+-
-
-
+-
diff --git "a/Environment/Ubuntu20.04\351\205\215\347\275\256CuckooSandbox\347\216\257\345\242\203.md" "b/Environment/Ubuntu20.04\351\205\215\347\275\256CuckooSandbox\347\216\257\345\242\203.md"
index 9024c3e2..1f668799 100644
--- "a/Environment/Ubuntu20.04\351\205\215\347\275\256CuckooSandbox\347\216\257\345\242\203.md"
+++ "b/Environment/Ubuntu20.04\351\205\215\347\275\256CuckooSandbox\347\216\257\345\242\203.md"
@@ -53,7 +53,7 @@ source ./python2-conda.sh
## 安装Cuckoo
### 安装python库
-我是直接执行了`sudo pip install -U cuckoo`,然后执行过程中告诉我缺啥我都再装,虽然这样不太好但是也不是不行哈哈,文档对于这块说的还是比较清楚的,这里借鉴一下其他博客说明的安装环境,如果安装失败,搜索一下错误,我就遇到过一个编译`image`什么的错误,是在`github issue`中找到一个用`apt`安装的依赖才解决的,但是具体记不清了。
+我是直接执行了`sudo pip install -U cuckoo`,然后执行过程中告诉我缺啥我都再装,虽然这样不太好但是也不是不行哈。文档对于这块说的还是比较清楚的,这里借鉴一下其他博客说明的安装环境,如果安装失败,搜索一下错误,我就遇到过一个编译`image`什么的错误,是在`github issue`中找到一个用`apt`安装的依赖才解决的,但是具体记不清了。
```bash
sudo apt-get install python python-pip python-dev libffi-dev libssl-dev
diff --git "a/I18N/RichText/Node\350\212\202\347\202\271\344\270\216Path\350\267\257\345\276\204\346\230\240\345\260\204.md" "b/I18N/RichText/Node\350\212\202\347\202\271\344\270\216Path\350\267\257\345\276\204\346\230\240\345\260\204.md"
new file mode 100644
index 00000000..86010cf1
--- /dev/null
+++ "b/I18N/RichText/Node\350\212\202\347\202\271\344\270\216Path\350\267\257\345\276\204\346\230\240\345\260\204.md"
@@ -0,0 +1,219 @@
+# Mapping between Node and Path
+Previously, we discussed the implementation of the `Decorator` decorator in `slate`. Decorators make it convenient for us to handle the rendering of `range` while editing, which is very useful for scenarios like search and replace, and code highlighting. In this article, let's talk about mapping between `Node` and `Path`. Here, `Node` refers to the rendered node object, and `Path` is the path of the node object in the current `JSON`, so the focus of this article is how to determine the position of rendered nodes in the document data definition.
+
+* Online Editing: [Link](https://windrunnermax.github.io/DocEditor)
+* Open Source: [GitHub](https://github.com/WindRunnerMax/DocEditor)
+
+Related articles about the `slate` document editor project:
+
+* [Building a Document Editor with Slate](https://juejin.cn/post/7265516410490830883)
+* [Slate Document Editor - WrapNode Data Structure and Operations Transformation](https://juejin.cn/spost/7385752495535603727)
+* [Slate Document Editor - TypeScript Type Extension and Node Type Checking](https://juejin.cn/spost/7399453742346551332)
+* [Slate Document Editor - Decorator Rendering Dispatch](https://juejin.cn/post/7433069014978592819)
+* [Slate Document Editor - Node and Path Mapping]()
+
+
+## Rendering and Commands
+In the `03-defining-custom-elements` section of the `slate` documentation, we can see that `Element` nodes in `slate` can be custom rendered. The rendering logic requires us to determine the type based on the `element` object in `props`. If the type is `code`, then we render the pre-defined `CodeElement` component, otherwise, we render the `DefaultElement` component. Here, the `type` is a pre-set value in the `init` data structure, which is a form of data structure convention.
+
+```js
+// https://docs.slatejs.org/walkthroughs/03-defining-custom-elements
+const App = () => {
+ const [editor] = useState(() => withReact(createEditor()))
+
+ // Define a rendering function based on the element passed to `props`.
+ const renderElement = useCallback(props => {
+ switch (props.element.type) {
+ case 'code':
+ return
+ default:
+ return
+ }
+ }, [])
+
+ return (
+
+
+
+ )
+}
+```
+
+When it comes to rendering, everything goes smoothly. Our editor is not just about rendering content; executing commands to change the document structure/content is also crucial. In the `05-executing-commands` section, we can see that toggling between bold text and code block is achieved through the functions `addMark/removeMark` and `Transforms.setNodes`.
+
+```js
+// https://docs.slatejs.org/walkthroughs/05-executing-commands
+toggleBoldMark(editor) {
+ const isActive = CustomEditor.isBoldMarkActive(editor)
+ if (isActive) {
+ Editor.removeMark(editor, 'bold')
+ } else {
+ Editor.addMark(editor, 'bold', true)
+ }
+}
+
+toggleCodeBlock(editor) {
+ const isActive = CustomEditor.isCodeBlockActive(editor)
+ Transforms.setNodes(
+ editor,
+ { type: isActive ? null : 'code' },
+ { match: n => Editor.isBlock(editor, n) }
+ )
+}
+```
+
+## Path Mapping
+
+Looking at the example above, everything seems fine. It appears that we have covered the basics of rendering and executing changes to editor nodes. However, there is a possibility that we might have overlooked a crucial issue: how does `slate` know which node we are operating on when we execute a command? This raises an interesting question. When running the example mentioned above, one can observe that our operations heavily rely on the cursor's position. This is because by default, when parameters are omitted, the operations are performed based on the selection's position. While this is not a problem for ordinary node rendering, it might not be sufficient for implementing more complex modules or interactions, such as asynchronous uploading of tables and images.
+
+Our document editor is certainly not a simple scenario. Therefore, when we need to implement complex operations in the editor, solely relying on the selection to execute operations is evidently not practical. For instance, if we want to insert a blank line under a code block element, since the selection must be on a `Text` node, we cannot directly operate the selection on a `Node` node. This type of implementation cannot solely rely on the selection to achieve the desired result. Additionally, it is not straightforward to determine the current position within a table cell, as the rendering schedule is managed by the framework at that moment, making it impossible to directly access the parent's data object. As many `slate` users are aware, neither `RenderElementProps` nor `RenderLeafProps` pass the `Path` data during rendering, instead only providing attributes and children data.
+
+```js
+export interface RenderElementProps {
+ children: any;
+ element: Element;
+ attributes: {
+ // ...
+ };
+}
+export interface RenderLeafProps {
+ children: any;
+ leaf: Text;
+ text: Text;
+ attributes: {
+ // ...
+ };
+}
+```
+
+This issue is not unique to rich text editors and can arise in various front-end editing scenarios, such as low-code editors. Commonly, in such scenarios, we utilize a modular approach to implement editors. Consequently, the nodes being rendered are not components that we directly write, but instead, the content is scheduled for rendering by the core layer and plugins. If a single defined component is rendered `N` times, understanding which position of data object to update becomes crucial. While adding an `id` to each rendered object is a possible solution, this approach would require iterating through the entire object to locate the position. In this context, our implementation is more efficient.
+
+Therefore, the `Path` data is essential for data operations. In usual interaction handling, `editor.selection` suffices for most functionalities. However, in many cases, relying solely on `selection` to determine the target `Path` for operations can be limiting. In such situations, one can notice that the most relevant data to `Path` in the data structure being passed are the `element/text` values. Consequently, one can easily recall the existence of a `findPath` method in `ReactEditor`, helping us locate the corresponding `Path` through a `Node`.
+
+```js
+// https://github.com/ianstormtaylor/slate/blob/25be3b/packages/slate-react/src/plugin/react-editor.ts#L90
+findPath(editor: ReactEditor, node: Node): Path {
+ const path: Path = []
+ let child = node
+ while (true) {
+ const parent = NODE_TO_PARENT.get(child)
+ if (parent == null) {
+ if (Editor.isEditor(child)) return path
+ else break
+ }
+ const i = NODE_TO_INDEX.get(child)
+ if (i == null) break
+ path.unshift(i)
+ child = parent
+ }
+}
+```
+
+This code snippet succinctly demonstrates a clever use of two `WeakMap` instances to retrieve a node's `Path`. It prompts us to ponder why the `Path` is not directly passed to the rendering method within `RenderProps` and instead necessitates a repetitive search, resulting in a performance cost. In reality, rendering document data alone poses no issues. However, as we typically need to edit documents, problems arise at this juncture. For instance, consider a scenario wherein at position `[10]`, there is a table, and then at position `[6]`, a blank line is added. The `Path` of our table should logically be `[11]`, yet as we did not actually edit any content related to the table, we should not refresh the table's content. Consequently, its `Props` remain unchanged. If we were to directly fetch a value at this point, we would retrieve `[10]` instead of `[11]`.
+
+So, similarly, even if we use `WeakMap` to record the correspondence between `Node` and `Path`, and even if the `Node` of the table hasn't actually changed, we can't easily iterate through all the nodes to update their `Path`. Therefore, we can just look up when needed based on this method. Now, a new issue arises. Since we mentioned earlier that we won't update the table-related content, how should we update its `index` value? Here comes another clever method: every time a rendering is triggered due to data changes, we will also update all its parent nodes. This is consistent with the `immutable` model, so we can update all the affected index values at this point.
+
+How can we avoid updating other nodes? It's quite clear that we can control this behavior based on the `key`. Simply assign a unique `id` to identical nodes. Additionally, here we can see that `useChildren` is defined as a `Hooks`, so it will definitely be called multiple times. Since `findPath` is called every time a component renders, we don't need to worry too much about the performance of this method. The iteration count here is determined by our hierarchy – typically we won't have too many levels of nesting, so the performance aspect is manageable.
+
+```js
+// https://github.com/ianstormtaylor/slate/blob/25be3b/packages/slate-react/src/hooks/use-children.tsx#L90
+const path = ReactEditor.findPath(editor, node)
+const children = []
+for (let i = 0; i < node.children.length; i++) {
+ const p = path.concat(i)
+ const n = node.children[i] as Descendant
+ const key = ReactEditor.findKey(editor, n)
+ // ...
+ if (Element.isElement(n)) {
+ children.push(
+
+
+
+ )
+ } else {
+ children.push()
+ }
+ NODE_TO_INDEX.set(n, i)
+ NODE_TO_PARENT.set(n, node)
+}
+```
+
+We can also utilize this concept to handle tables. When we need to implement complex interactions for table nodes, it's challenging to determine the `[RowIndex, ColIndex]` of the rendering nodes – the current cell's position within the table. We require this information for functionalities like cell selection and resizing. Using `ReactEditor.findPath` can retrieve the latest `Path` based on the `Node`, but with nested data levels, such as nested tables within tables, there are many unnecessary iterations. In reality, just two layers are enough, but using `ReactEditor.findPath` will iterate all the way to the `Editor Node`, which may cause performance issues during frequent actions like resizing.
+
+By leveraging this concept, we can implement two `WeakMaps` as well. When rendering at the top-level node, such as the `Table` node, we establish mapping relationships. Then, we can iterate through `Tr + Cell` elements completely. With the support of `immutable`, we can obtain the current cell's index value. In later versions of `slate`, these two `WeakMaps` have been exported, eliminating the need for us to manually establish mapping relationships. Just retrieve them when necessary.
+
+```js
+// https://github.com/ianstormtaylor/slate/pull/5657
+export const Table: FC = () => {
+ useMemo(() => {
+ const table = context.element;
+ table.children.forEach((tr, index) => {
+ NODE_TO_PARENT.set(tr, table);
+ NODE_TO_INDEX.set(tr, index);
+ tr.children &&
+ tr.children.forEach((cell, index) => {
+ NODE_TO_PARENT.set(cell, tr);
+ NODE_TO_INDEX.set(cell, index);
+ });
+ });
+ }, [context.element]);
+}
+
+export const Cell: FC = () => {
+ const parent = NODE_TO_PARENT.get(context.element);
+ console.log(
+ "RowIndex - CellIndex",
+ NODE_TO_INDEX.get(parent!),
+ NODE_TO_INDEX.get(context.element)
+ );
+}
+```
+
+However, there's no issue with obtaining the mapping between `Node` and `Path` nodes to determine their positions in this manner, efficient lookup solutions make it necessary for us to rely on rendering to know the latest position of nodes. This means that when we update a node object, calling the `findPath` method immediately will not give us the latest `Path`, as rendering behavior at that moment is asynchronous. Therefore, if needed, we must iterate through the entire data object to obtain the `Path`. However, I don't think iterating through the entire object is necessary here. After making changes using `Transforms`, we should not immediately retrieve the path value, but rather wait until `React` has finished rendering before proceeding. This allows us to execute related operations in sequence. Since there are no additional asynchronous operations in `slate`, we can easily determine when the current rendering is completed in the `useEffect` of ``.
+
+```js
+export const WithContext: FC<{ editor: EditorKit }> = props => {
+ const { editor, children } = props;
+ const isNeedPaint = useRef(true);
+ // Ensures that re-render occurs every time Apply is triggered
+ // https://github.com/ianstormtaylor/slate/blob/25be3b/packages/slate-react/src/components/slate.tsx#L29
+ useSlate();
+
+ useEffect(() => {
+ const onContentChange = () => {
+ isNeedPaint.current = true;
+ };
+ editor.event.on(EDITOR_EVENT.CONTENT_CHANGE, onContentChange, 1);
+ return () => {
+ editor.event.off(EDITOR_EVENT.CONTENT_CHANGE, onContentChange);
+ };
+ }, [editor]);
+
+ useEffect(() => {
+ if (isNeedPaint.current) {
+ Promise.resolve().then(() => {
+ // https://github.com/ianstormtaylor/slate/issues/5697
+ editor.event.trigger(EDITOR_EVENT.PAINT, {});
+ });
+ }
+ isNeedPaint.current = false;
+ });
+
+ return children as JSX.Element;
+};
+```
+
+## Conclusion
+In this discussion, we mainly focused on mapping between `Node` nodes and `Path` paths, determining where rendered nodes are located in the document data definition, which is crucial for implementing data changes in `slate`, especially for complex operations that cannot be achieved using only selections. We also analyzed the `slate` source code to explore the implementation of related issues. In the upcoming articles, we will continue discussing the lookup of table cell positions, delving into the design and interaction of the table module.
+
+## Daily Quiz
+
+-
+
+## References
+
+-
+-
+-
\ No newline at end of file
diff --git "a/I18N/RichText/WrapNode\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\346\223\215\344\275\234\345\217\230\346\215\242 copy.md" "b/I18N/RichText/WrapNode\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\346\223\215\344\275\234\345\217\230\346\215\242 copy.md"
deleted file mode 100644
index d03963df..00000000
--- "a/I18N/RichText/WrapNode\346\225\260\346\215\256\347\273\223\346\236\204\344\270\216\346\223\215\344\275\234\345\217\230\346\215\242 copy.md"
+++ /dev/null
@@ -1,167 +0,0 @@
-# WrapNode Data Structure and Transformation Operations
-
-Previously, we discussed some basic concepts of the `slate` rich text engine and explored the plugin capabilities design, type extensions, specific solutions, etc., for building a document editor based on `slate`. Now, let's focus more on the details of the document editor and delve deeper into the design of its capabilities.
-
-- Online Editing: [DocEditor](https://windrunnermax.github.io/DocEditor)
-- Open Source Repository: [GitHub - WindrunnerMax/DocEditor](https://github.com/WindrunnerMax/DocEditor)
-
-Related articles on the `slate` document editor project:
-
-- [Building a Document Editor Using Slate](https://juejin.cn/post/7265516410490830883)
-- [Slate Document Editor-WrapNode Data Structure and Transformation Operations](https://juejin.cn/spost/7385752495535603727)
-- [Slate Document Editor-TS Type Extension and Node Type Checking](https://juejin.cn/spost/7399453742346551332)
-
-## Normalize
-
-Normalizing data structures in `slate` can be quite challenging, especially when dealing with nested structures, such as the `Quote` and `List` in this project. When normalizing data structures, there are multiple approaches, as illustrated by these two sets of data structures. Dealing with nested structures poses efficiency challenges in terms of operations like addition, deletion, and modification. In the absence of best practice guidelines, it requires continuous trial and error.
-
-The initial approach involves reusing the current block structures, where the `Quote Key` and `List Key` are at the same level. This simplifies content searching and handling due to fewer levels of nesting relationships. However, mismatched `Pair` and `Wrap` relationships can arise when `Quote` and `List` do not align completely, making normalization unpredictable.
-
-```js
-{
- "quote-wrap": true,
- "list-wrap": true,
- children: [
- { "quote-pair": true, "list-pair": 1, children: [/* ... */] },
- { "quote-pair": true, "list-pair": 2, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, "list-pair": 1, children: [/* ... */] },
- { "quote-pair": true, "list-pair": 2, children: [/* ... */] },
- ]
-}
-```
-
-Alternatively, by not overly controlling the content and relying on default behaviors in `slate`, the data structure representation becomes more predictable. With this approach, normalization becomes less problematic, and since it aligns with default behavior, there's less need to focus on data handling operations. However, handling such structured data can be cumbersome, especially when maintaining corresponding relationships, requiring recursive processing of all child nodes. This becomes complex with multiple levels of nesting, and further complicates when supporting structures like tables.
-
-```js
-{
- "quote-wrap": true,
- children: [
- {
- "list-wrap": true,
- children: [
- { "quote-pair": true, "list-pair": 1, children: [/* ... */] },
- { "quote-pair": true, "list-pair": 2, children: [/* ... */] },
- ]
- },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- ]
-}
-```
-
-However, this data structure is not without flaws. The major issue is the significant gap between `wrap` and `pair`, leading to numerous boundary issues. For instance, in a scenario with outermost quote block nesting a table within, and the table containing a highlighted block, which further nests a quote block, the depth required for `wrap` to match `pair` becomes extensive. This significantly impacts normalization, necessitating deep DFS processing, consuming performance for traversal and risking potential issues if not handled properly.
-
-So, in this situation, we can simplify nested levels as much as possible, meaning we need to avoid spacing issues with '`wrap - pair`'. It's quite clear that we strictly require all `children` of 'wrap' to be 'pair'. In this scenario, normalizing becomes much simpler; we just need to iterate through the child nodes of 'wrap' and check the parent node in the 'pair' case. Of course, this solution isn't flawless. It demands a higher level of precision in our data operations because here, we don't follow default behaviors. Everything needs to be controlled manually, especially defining all nesting relationships and boundaries strictly. This places a greater demand on the design of the editor behavior.
-
-```js
-{
- "quote-wrap": true,
- children: [
- {
- "list-wrap": true,
- "quote-pair": true,
- children: [
- { "list-pair": 1, children: [/* ... */] },
- { "list-pair": 2, children: [/* ... */] },
- { "list-pair": 3, children: [/* ... */] },
- ]
- },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- ]
-}
-```
-
-So, why does the data structure become more complex? Using the above structure as an example, if we remove the nesting structure of the 'list-pair: 2' node from the 'list-wrap', we need to transform the node like the following type. The structural difference here is quite significant. Apart from splitting the 'list-wrap' into two parts, we also need to update the ordered list index values of other 'list-pair', which involves multiple operations. Therefore, aiming for a more generic 'Schema' requires more design and standardization.
-
-One easily overlooked point here is that we need to add `"quote-pair": true` to the original 'list-pair: 2' node because at this point, the line becomes a child element of 'quote-wrap'. In summary, we need to replicate the properties originally in 'list-wrap' to 'list-pair: 2' to maintain the correct nesting structure. Why proactive duplication rather than passive addition via `normalize`? The reason is simple; if it were 'quote-pair', it could be done easily by setting it to `true` directly. However, if it's 'list-pair', we wouldn't know what the data structure of this value should be like, thus leaving this implementation to be handled by the plugin's `normalize`.
-
-```js
-{
- "quote-wrap": true,
- children: [
- {
- "list-wrap": true,
- "quote-pair": true,
- children: [
- { "list-pair": 1, children: [/* ... */] },
- ]
- },
- { "quote-pair": true, children: [/* ... */] },
- {
- "list-wrap": true,
- "quote-pair": true,
- children: [
- { "list-pair": 1, children: [/* ... */] },
- ]
- },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- { "quote-pair": true, children: [/* ... */] },
- ]
-}
-```
-
-## Transformers
-As mentioned earlier, there are default behaviors in nested data structures. Previously, as I consistently followed default behaviors, I didn't encounter many data processing issues. However, upon altering the data structure, it became apparent that controlling data structures isn't always straightforward. When handling `SetBlock` previously, I typically matched node types with the `match` parameter since, under default behaviors, this handling usually proceeded without issues.
-
-However, during the process of changing the data structure, issues arose when handling `Normalize`. The behavior of matching block elements did not align with expectations, causing the data processing to malfunction persistently, resulting in the inability to complete `Normalize` until an exception was thrown. The main problem here was the inconsistency between the iteration order and what I expected. For example, when executing `[...Editor.nodes(editor, {at: [9, 1, 0] })]` on the `DEMO` page, the returned result starts from the top `Editor` down to the bottom `Node`, including all `Leaf` nodes within the range, which is equivalent to a `Range`.
-
-```
-[] Editor
-[9] Wrap
-[9, 1] List
-[9, 1, 9] Line
-[9, 1, 0] Text
-```
-
-In reality, under these circumstances, there would have been no issue if I had stuck to the original `Path.equals(path, at)`. I had relied too much on its default behavior, resulting in poor control over the accuracy of the data. Our data processing should be predictable, not reliant on default behaviors. Moreover, the documentation for `slate` is too concise, lacking many details. In such cases, one must resort to reading the source code to gain a better understanding of data processing. For example, by delving into the source code, I learned that every operation retrieves all elements that meet the conditions in the `Range` for matching, possibly triggering multiple `Op` dispatches within a single call.
-
-Additionally, since this handling mainly focused on supporting nested elements, I discovered features related to `unwrapNodes` or similar data processing. When calling `unwrapNodes`, with only different values passed into `at`, namely `A-[3, 1, 0]` and `B-[3, 1, 0, 0]`, a key point is that although we strictly match `[3, 1, 0]`, the results of the calls differ. In `A`, all elements of `[3, 1, 0]` are unwrapped, while in `B`, only `[3, 1, 0, 0]` is unwrapped. We can ensure that the `match` results are completely consistent, so the issue lies in the `at` values. If one does not understand the data operation model of `slate`, a dive into the source code is unavoidable. While examining the source code, one can discover that `Range.intersection` helps narrow down the scope, hence the value of `at` impacts the final result.
-
-```js
-unwrapNodes(editor, { match: (_, p) => Path.equals(p, [3, 1, 0]), at: [3, 1, 0] }); // A
-unwrapNodes(editor, { match: (_, p) => Path.equals(p, [3, 1, 0]), at: [3, 1, 0, 0] }); // B
-```
-
-This issue signifies that all our data should not be handled casually. We must be very clear about the data and its structure we intend to operate on. Another issue mentioned earlier is the complexity in dealing with situations involving deep nesting, which ultimately involves an editing boundary scenario, complicating data maintenance. For example, if we have a table nested with many `Cell`s, handling multiple instances of the `Cell` structure separately ensures that any data processed after filtering out the `Editor` instances will not affect the other `Editor` instances. However, if the structure is represented in JSON nested form, there is a risk of crossing operation boundaries and affecting other data, especially the parent data structures. Therefore, we must pay attention to handling boundary conditions, precisely defining the data structures to be operated on and delineating the operational nodes and ranges.
-
-```js
-{
- children: [
- {
- BLOCK_EDGE: true, // Block structure edges
- children: [
- { children: [/* ... */] },
- { children: [/* ... */] },
- ]
- },
- { children: [/* ... */] },
- { children: [/* ... */] },
- ]
-}
-```
-
-Furthermore, debugging code in an existing online page can be a challenge, especially when the `editor` is not exposed to the `window`. Obtaining the editor instance directly would require replicating the online environment locally. In such cases, one can capitalize on `React` writing the `Fiber` directly to the DOM nodes, allowing access to the `Editor` instance through the DOM node. However, the native `slate` employs numerous `WeakMap`s to store data, posing a challenge without direct references to such objects or instances in the `editor`. Unless the `editor` actually references such objects or has its instance, one may have to set breakpoints for debugging and temporarily store objects as global variables during the debugging process.
-
-```js
-const el = document.querySelector(`[data-slate-editor="true"]`);
-const key = Object.keys(el).find(it => it.startsWith("__react"));
-const editor = el[key].child.memoizedProps.node;
-```
-
-
-## Final Notes
-Here we discussed the `WrapNode` data structure and transformation operations, focusing mainly on the content relevant to nested data structures. In reality, node types can be further classified into various categories. In a broader sense, we have `BlockNode`, `TextBlockNode`, `TextNode`. Within `BlockNode`, we can distinguish `BaseNode`, `WrapNode`, `PairNode`, `InlineBlockNode`, `VoidNode`, `InstanceNode`, and so on. Therefore, the content described in this document remains quite basic. In addition to that, in `slate`, there are numerous additional concepts and operations to pay attention to, such as `Range`, `Operation`, `Editor`, `Element`, `Path`, among others. In the upcoming articles, our focus will mainly be on the representation of `Path` in `slate` and how one can control and maintain the expression of its content in `React`, along with ensuring the correct rendering of `Path` paths and `Element` content.
-
-## Daily Question
-
--
-
-## References
-
--
--
--
\ No newline at end of file
diff --git "a/Interview/360\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/360\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 9f4433e4..13cf1883 100644
--- "a/Interview/360\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/360\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -17,7 +17,7 @@
* 实习期间遇到的最大的困难是什么,如何解决的。
* 在工作中遇到问题是怎么处理的。
-实际上面试期间主要是聊天聊的比较多,所以看起来问题并不是很多。反问阶段的话同样也是问了相关的业务,这边的业务也是在做内部的基础设施建设,是一整套研发流程方面的工作,从开发到上线的一整套工作流程,所以这边工作我觉得跟我也是比较契合的哈哈哈。两位面试官也都是挺不错的,面试体验还是很好的。
+实际上面试期间主要是聊天聊的比较多,所以看起来问题并不是很多。反问阶段的话同样也是问了相关的业务,这边的业务也是在做内部的基础设施建设,是一整套研发流程方面的工作,从开发到上线的一整套工作流程,所以这边工作我觉得跟我也是比较契合的。两位面试官也都是挺不错的,面试体验还是很好的。
## 二面
@@ -37,7 +37,7 @@
* 处理`session`同步的方案。
* 如何快速学习一个新的东西。
-这姐姐一看就是大佬风范,直接给我问傻了,问的我发懵,我这小玩具项目确实是有点不能入法眼哈哈哈,虽然看起来问题不多,但是因为聊的太过于深入,所以每个问题的时间都是挺长的。反问环节是问了问具体的业务,主要是对于基础研发流程的建设工作,也有富文本的相关工作,所以问了很多富文本相关的问题,此外还有了一点简单的探讨,面试体验还是很好的,就是有点难哈哈哈。
+这姐姐一看就是大佬风范,直接给我问傻了,问的我发懵,我这小玩具项目确实是有点不能入法眼。虽然看起来问题不多,但是因为聊的太过于深入,所以每个问题的时间都是挺长的。反问环节是问了问具体的业务,主要是对于基础研发流程的建设工作,也有富文本的相关工作,所以问了很多富文本相关的问题。此外还有了一点简单的探讨,面试体验还是很好的,就是有点难。
## HR面
`HR`面是在`2022.10.13 17:38`左右约的面试,直接是发的邮件固定的时间,然后约的面试时间是`2022.10.14 16:20`。这是时隔一个月的`HR`面,是我秋招的第二个`HR`面,非常感谢`360`给的机会,面试时间大概有`21min`。
@@ -51,7 +51,7 @@
* 意向城市的选择。
* 秋招的情况,是否顺利。
-这老哥是真的和蔼,这轮面试也是真的纯聊天,也没有什么非常刺激的问题,还夸我比较成熟,夸的我都不好意思了哈哈哈。最后大概是得等到十月校招流程全部走完才能出结果,估计得十一月初,这也是我秋招的第二个`HR`面,真的是非常非常感谢`360`哈哈哈。
+这老哥是真的和蔼,这轮面试也是真的纯聊天,也没有什么非常刺激的问题,还夸我比较成熟,夸的我都不好意思了。最后大概是得等到十月校招流程全部走完才能出结果,估计得十一月初,这也是我秋招的第二个`HR`面,真的是非常非常感谢`360`。
## 后续
`360`是我今年秋招的第五个意向,在`2022.12.07 10:26`的时候`OC`了要发`offer`,但是这个时间确实是有点晚,这个时候我的三方已经签完了,就没继续往下推进流程了,`360`听说也是很`WLB`的,感觉还是很值得去的。
diff --git "a/Interview/\344\272\254\344\270\234\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\344\272\254\344\270\234\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 7e3b7d32..b42fe120 100644
--- "a/Interview/\344\272\254\344\270\234\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\344\272\254\344\270\234\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -19,7 +19,7 @@
* 对于`Vue`与`React`最大的区别在哪。
* 那么对于`Svelte`而言又有什么区别。
-大哥一看就贼牛逼,好家伙问的问题给我问傻了,我反问阶段是问了问部门的业务,这次面的是京东云,好家伙完全切合我现在的字节云实习啊哈哈哈,此外业务方面还有一些虚拟化建设、公有云、混合云相关的工作,整体来说还是很不错的。
+大哥一看就贼牛逼,好家伙问的问题给我问傻了,我反问阶段是问了问部门的业务,这次面的是京东云,好家伙完全切合我现在的字节云实习。此外业务方面还有一些虚拟化建设、公有云、混合云相关的工作,整体来说还是很不错的。
## 二面
二面是在`2022.09.09 10:24`左右约的面试,然后约的面试时间是`2022.09.13 14:00`。这次面试是电话面试,我也是很久没经历过电话面试这种形式了,只有三月的蚂蚁一面是电话面试来着,不过这样也挺好,不用怕网突然不好了,这次面试大概是`35min`。
@@ -44,7 +44,7 @@
* 在字节的整个研发流程。
* 为什么选择投递京东,对京东的看法。
-这位老哥一听就是很牛逼的,如果能够说到点子上的话,老哥还是很愿意去讲解一下他的一些理解,比如这个`taro`的一些架构方面的静态编译和动态`runtime`的`proxy`等等去实现的跨端,再比如老哥对于业务作为一个共同的语言去进行各方面负责同学的沟通,老哥这一听就还是很厉害的。反问阶段我也是依旧问了云方面的业务,这块我们也是交谈了一下,在字节实习的组虽然是前端,但是包括前端、后端、产品、业务、测试等等都是我们自己来做的,所以在软实力方面还是有所锻炼的。整体来说很是不错的,尤其是说到点子上的时候,老哥还是非常健谈的哈哈哈。
+这位老哥一听就是很牛逼的,如果能够说到点子上的话,老哥还是很愿意去讲解一下他的一些理解,比如这个`taro`的一些架构方面的静态编译和动态`runtime`的`proxy`等等去实现的跨端,再比如老哥对于业务作为一个共同的语言去进行各方面负责同学的沟通,老哥这一听就还是很厉害的。反问阶段我也是依旧问了云方面的业务,这块我们也是交谈了一下,在字节实习的组虽然是前端,但是包括前端、后端、产品、业务、测试等等都是我们自己来做的,所以在软实力方面还是有所锻炼的。整体来说很是不错的,尤其是说到点子上的时候,老哥还是非常健谈的。
## 后续
在`2022-09-27`下午看了看官网流程已经转推荐了,就是挂了的意思,本来我还自我感觉良好来着,而且二面完之后没一段时间就发测评了,本来说的好好的是发测评的就是过了,然后还是挂了,挂了就挂了吧,也挂习惯了。
diff --git "a/Interview/\345\244\247\347\226\206\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\345\244\247\347\226\206\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 7574c756..cf275750 100644
--- "a/Interview/\345\244\247\347\226\206\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\345\244\247\347\226\206\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -40,10 +40,10 @@
* 在`Js`中如何完成函数重载。
* `Js`的私有变量,`TS`的`private`能够在运行时生效吗。
-反问环节问了问两位老哥这边做的业务以及我个人需要提高的地方,属实是老两样了,业务方面是商城、官网、低代码平台等等,大疆这边业务确实还是不少的,我个人需要提升的是对在以业务为基础上技术的拓展,就类似于技术选型这一些方面的工作,还是挺重要的。这次这两位老哥都开摄像头了,也都挺搞的,而且也是以交流的这种形式来面的,面试体验非常好哈哈哈。
+反问环节问了问两位老哥这边做的业务以及我个人需要提高的地方,属实是老两样了,业务方面是商城、官网、低代码平台等等,大疆这边业务确实还是不少的,我个人需要提升的是对在以业务为基础上技术的拓展,就类似于技术选型这一些方面的工作,还是挺重要的。这次这两位老哥都开摄像头了,也都挺搞的,而且也是以交流的这种形式来面的,面试体验非常好。
## 二面
-二面是在`2022.08.29 15:40`左右约的面试,然后约的面试时间是`2022.09.01 17:45`。好家伙这个面试时间是真的离谱,这次面试依然有四个大佬在,但是只有一个大佬在跟我聊,这次面试只面了`28min`,应该是凉了,毕竟第二个大哥都不想跟我聊了哈哈哈。
+二面是在`2022.08.29 15:40`左右约的面试,然后约的面试时间是`2022.09.01 17:45`。好家伙这个面试时间是真的离谱,这次面试依然有四个大佬在,但是只有一个大佬在跟我聊,这次面试只面了`28min`,应该是凉了,毕竟第二个大哥都不想跟我聊了。
* `Github`哪些项目目前还在维护。
* 做这些项目时遇到了哪些问题。
@@ -73,4 +73,4 @@
因为前边的面试都是有`HR`参与的,所以实际上大疆是没有独立的`HR`面的,准确来说这次电话是一个保温电话,是在`2022.10.09 16:00`左右打过来的,主要内容是`HR`想了解一下目前的`offer`情况,并且加了个微信,然后就是继续跑池子了。
## 后续
-之前在`2022.09.28 12:00`左右发了邮件,告知已经进入了综合评估阶段,也就是说面试是全通过了,已经进入到究极大池子里泡着了。之后就有了上边提到的`HR`面试与加微信,可惜的是在`2022.10.11 15:30`左右通知我: 如前沟通,您在该岗位的所有面试流程都已结束且面试确认通过,因岗位招聘人数有限,你目前未排在`offer`名单中。然后询问我是否有去客户端的意愿,做跨端的话我觉得其实也还好吧,然后就同意了这次调剂,但是可惜在`2022.11.01 19:30`左右我收到了大疆的感谢信,这次是彻底寄了哈哈哈,希望后边有机会能去大疆吧。
+之前在`2022.09.28 12:00`左右发了邮件,告知已经进入了综合评估阶段,也就是说面试是全通过了,已经进入到究极大池子里泡着了。之后就有了上边提到的`HR`面试与加微信,可惜的是在`2022.10.11 15:30`左右通知我: 如前沟通,您在该岗位的所有面试流程都已结束且面试确认通过,因岗位招聘人数有限,你目前未排在`offer`名单中。然后询问我是否有去客户端的意愿,做跨端的话我觉得其实也还好吧,然后就同意了这次调剂,但是可惜在`2022.11.01 19:30`左右我收到了大疆的感谢信,这次是彻底寄了,希望后边有机会能去大疆吧。
diff --git "a/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 5c0be3f2..6ba7d86d 100644
--- "a/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,8 +1,8 @@
# 字节跳动暑期实习前端面试
-现在轮到我这个`23`届开始真正地找实习了,但是今年的校招情况非常非常差,这个在今年的实习总结再详细说吧。这次投递字节也是非常的有意思,本来我是投递的字节抖音互动部门,然后刚投了互动晚上`AI`算法部门说我的简历在他们那,然后考虑一下,但是我确实不是很了解这块,所以我还是想去互动来着然后老哥给我释放了简历。第二天,`HR`加我微信,我以为是互动那边的,然后她说我的简历昨天被她捞了,在基础架构那边,好家伙梅开二度,这算是截胡吗,`HR`也是`23`届实习生,本着实习生不为难实习生的原则,我就参加了基础架构的部门面试哈哈哈,还给我免了个笔试,所以相当于我在`2022.03.01`投递了字节跳动基础架构部门。
+现在轮到我这个`23`届开始真正地找实习了,但是今年的校招情况非常非常差,这个在今年的实习总结再详细说吧。这次投递字节也是非常的有意思,本来我是投递的字节抖音互动部门,然后刚投了互动晚上`AI`算法部门说我的简历在他们那,然后考虑一下,但是我确实不是很了解这块,所以我还是想去互动来着然后老哥给我释放了简历。第二天,`HR`加我微信,我以为是互动那边的,然后她说我的简历昨天被她捞了,在基础架构那边,好家伙梅开二度,这算是截胡吗,`HR`也是`23`届实习生,本着实习生不为难实习生的原则,我就参加了基础架构的部门面试,还给我免了个笔试,所以相当于我在`2022.03.01`投递了字节跳动基础架构部门。
## 一面
-今年的第一场面试,还是有点紧张的,有点不会说话了都,思路有些不清晰,另外我这工地英语的口语单词都不会读,多谢面试官包容哈哈哈,一面的时间约在了`2022.03.07 15:00`时长大概是`57min`。
+今年的第一场面试,还是有点紧张的,有点不会说话了都,思路有些不清晰,另外我这工地英语的口语单词都不会读,多谢面试官包容,一面的时间约在了`2022.03.07 15:00`时长大概是`57min`。
* `position`的属性以及各个功能还有应用场景。
* 隐藏元素有哪几种方案,各自特点。
* `flex`布局的配置属性,`flex`主要用在哪里。
@@ -49,10 +49,10 @@
* 手写`promisify`的实现。
* 在原型链上编写数组扁平化函数,递归与`reduce`方案。
-反问阶段具体问了问业务是`ToB`和`ToD`,面试官老哥人很好,还给我解释了上边很多内容,但是耐不住人菜啊,和我说他就准备了这些面试题,本来想着能面试`50min`没问题,但是没想到`30min`分钟就结束了,那可不是吗,问一个我不知道,问一个我不了解,那能不结束的快吗,快拉倒了。最后问了一嘴实习时间,就在这我跟老哥扯了扯,然后就没了。老哥总结是你都了解过,但是可能是因为没有实际工作的问题都不深入,说起来还是得非常感谢在腾讯的实习经历,否则我根本接不上话来,现在起码还能稍微接一接。最后面试官老哥还安慰了一下我,觉得我还行,我差点就信了,安慰我是吧哈哈哈。
+反问阶段具体问了问业务是`ToB`和`ToD`,面试官老哥人很好,还给我解释了上边很多内容,但是耐不住人菜啊,和我说他就准备了这些面试题,本来想着能面试`50min`没问题,但是没想到`30min`分钟就结束了,那可不是吗,问一个我不知道,问一个我不了解,那能不结束的快吗,快拉倒了。最后问了一嘴实习时间,就在这我跟老哥扯了扯,然后就没了。老哥总结是你都了解过,但是可能是因为没有实际工作的问题都不深入,说起来还是得非常感谢在腾讯的实习经历,否则我根本接不上话来,现在起码还能稍微接一接。最后面试官老哥还安慰了一下我,觉得我还行,我差点就信了,安慰我是吧。
## 三面
-二面完成的当天就约三面了,好家伙效率真高,不过没想到在我答的那么烂的情况下二面的面试官都给我过了哈哈哈。这轮应该是部门主管面,老哥又跟我开始聊天了,光聊东聊西的哈哈哈没问啥东西。三面的时间约在了`2022.03.14 15:00`时长大概是`50min`。
+二面完成的当天就约三面了,好家伙效率真高,不过没想到在我答的那么烂的情况下二面的面试官都给我过了。这轮应该是部门主管面,老哥又跟我开始聊天了,光聊东聊西的没问啥东西。三面的时间约在了`2022.03.14 15:00`时长大概是`50min`。
* 有什么`Highlight`的东西。
* 小程序运营,脚本插件的运营方面。
@@ -66,7 +66,7 @@
* 平时炒股吗,了解现在互联网情况吗。
* 爬楼梯的递归写法和迭代写法。
-反问阶段问了问会分到哪个组,具体做什么业务,以及对我的建议。我觉得我也是个挺能扯的人,好家伙就这么点东西竟然扯了`50min`上去,老哥也是个能扯哈哈哈,好家伙一扯就没完没了了哈哈哈。
+反问阶段问了问会分到哪个组,具体做什么业务,以及对我的建议。我觉得我也是个挺能扯的人,好家伙就这么点东西竟然扯了`50min`上去,老哥也是个能扯,好家伙一扯就没完没了了。
### HR面
本来想着是约到周三的`15:00`面的,没想到晚上就给我打电话过来了问我能不能现在就面试,也就是说`HR`面是在`2022.03.14 18:41`时长大概是`15min`。
@@ -82,7 +82,7 @@
* 还在面别的部门吗,倾向如何。
* 反问上班时间,啥时候发`offer`。
-好家伙突击检查,属实是吓一跳,这个效率吧属实是有点太高了,给我整不会了,这就离谱哦,另外说是`offer`最近就能够下发了哈哈哈。
+好家伙突击检查,属实是吓一跳,这个效率吧属实是有点太高了,给我整不会了,这就离谱哦,另外说是`offer`最近就能够下发了。
## 后续
-这个效率属实是有点高,在`2022.03.14`面完之后,`2022.03.16`就直接`OC`了,其实是微信直接聊天通知的哈哈哈,然后过了几分钟直接发`Offer`了,好家伙从来没见过这么快的速度,半个月`Offer`到手了,要不是最近光做核酸耽误时间,可能进度还快。
+这个效率属实是有点高,在`2022.03.14`面完之后,`2022.03.16`就直接`OC`了,其实是微信直接聊天通知的,然后过了几分钟直接发`Offer`了,好家伙从来没见过这么快的速度,半个月`Offer`到手了,要不是最近光做核酸耽误时间,可能进度还快。
diff --git "a/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 7269f89a..36ec375b 100644
--- "a/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\345\255\227\350\212\202\350\267\263\345\212\250\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,8 +1,8 @@
# 字节跳动暑期日常实习前端面试
-这次面试的字节跳动的幸福里部门,本来我是不想面字节跳动的,毕竟字节的算法难度是公认的高,而这又是我的薄弱环节哈哈,不过群里加了个老哥非得让我试试,那我就试试吧哈哈哈,不过听说电商和教育部门更简单一些,有点上了贼船的感觉。
+这次面试的字节跳动的幸福里部门,本来我是不想面字节跳动的,毕竟字节的算法难度是公认的高,而这又是我的薄弱环节。不过群里加了个老哥非得让我试试,那我就试试吧,不过听说电商和教育部门更简单一些,有点上了贼船的感觉。
## 一面
-一面约的时间是在`2021-03-31 18:00`,面试面了`43 min`,这个时间点就很尴尬,我面完肯定就差不多七点了,食堂就没饭了,身为山科干饭王不能被这种事情打倒,我甚至还想一边吃着饭一边面试,想了想还是算了,把面试老哥馋着咋整,所以我五点就下去把饭买了吃饱了,挺撑的慌。面试的老哥挺有意思,一直在那晃哈哈哈,要不是我忍住了,我也要晃,之不顾我喜欢前后晃,老哥喜欢左右晃哈哈哈,老哥整挺好,不会的都会跟我解释一下哈哈。
+一面约的时间是在`2021-03-31 18:00`,面试面了`43 min`,这个时间点就很尴尬,我面完肯定就差不多七点了,食堂就没饭了,身为山科干饭王不能被这种事情打倒,我甚至还想一边吃着饭一边面试,想了想还是算了,把面试老哥馋着咋整,所以我五点就下去把饭买了吃饱了,挺撑的慌。面试的老哥挺有意思,一直在那晃,要不是我忍住了,我也要晃,之不顾我喜欢前后晃,老哥喜欢左右晃,老哥整挺好,不会的都会跟我解释一下。
* 域名到`IP`的过程,就是`DNS`解析过程。
* 第二次访问比第一次快,缓存机制。
@@ -55,7 +55,7 @@ new Promise(function(resolve) {
console.log('script end');
```
-这次面试挺好玩,头一次遇到还给我解释一下的老哥,真好,而且每道题老哥都会写一个大概,最后我整理都非常轻松哈哈哈,整挺好,半小时就跟我约二面了,这方面效率是真的可以。
+这次面试挺好玩,头一次遇到还给我解释一下的老哥,真好,而且每道题老哥都会写一个大概,最后我整理都非常轻松,整挺好,半小时就跟我约二面了,这方面效率是真的可以。
## 后续
-本来是约的周五面试,然后因为打疫苗加上课调课又又耽误了,然后再约的`2021-04-06 11:00`二面,然后面试的时候`leader`老哥跟我说我是`23`的需要实习连续的六个月,`22`的可以不连续地实习三个月来着,当时内推的老哥是跟我说可以不连续的三个月来着,哈哈可能他也不清楚,不能去找老哥玩了,老哥说本来一面面评还挺不错的,这到这拉跨了感觉,这又是玩了一出当时面百度然后说时间不合适的感觉,哈哈哈。
+本来是约的周五面试,然后因为打疫苗加上课调课又又耽误了,然后再约的`2021-04-06 11:00`二面,然后面试的时候`leader`老哥跟我说我是`23`的需要实习连续的六个月,`22`的可以不连续地实习三个月来着,当时内推的老哥是跟我说可以不连续的三个月来着,可能他也不清楚,不能去找老哥玩了,老哥说本来一面面评还挺不错的,这到这拉跨了感觉,这又是玩了一出当时面百度然后说时间不合适的感觉。
diff --git "a/Interview/\346\213\274\345\244\232\345\244\232\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\346\213\274\345\244\232\345\244\232\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 49f967d2..2713fb1a 100644
--- "a/Interview/\346\213\274\345\244\232\345\244\232\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\346\213\274\345\244\232\345\244\232\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -22,7 +22,7 @@
* 手动实现`TS`的`Pick`,`Partial`是做什么的。
* 看代码示例写输出,是数据引用方面的问题。
-这姐姐跟我聊的还是挺多的,而且一看就是大佬级别的哈哈哈,而且感谢姐姐在这忍受我老掉线的这个网络,可能是今晚台风影响吧,不过就算不是台风我这晚上的网络也很差,前半阶段网络还挺好,从`19:50`开始这个网就简直没法用了,断断续续的,真尴尬啊。反问环节是问了问具体的业务,以及后边会不会被二次分配到别的部门,此外还问了问姐姐对我的建议,面试体验还是很好的哈哈哈。
+这姐姐跟我聊的还是挺多的,而且一看就是大佬级别的,而且感谢姐姐在这忍受我老掉线的这个网络,可能是今晚台风影响吧,不过就算不是台风我这晚上的网络也很差,前半阶段网络还挺好,从`19:50`开始这个网就简直没法用了,断断续续的,真尴尬啊。反问环节是问了问具体的业务,以及后边会不会被二次分配到别的部门,此外还问了问姐姐对我的建议,面试体验还是很好的。
## 二面
@@ -59,10 +59,10 @@
* 做题`dp hard`,最小编辑距离。
* 对于团队比较看重的点。
-做题没做出来,这个题我是真的一点思路都没有哈哈,面试应该是凉了。最后反问阶段就简单问了下后边的流程,整体来说就是这个题太难了,真做不出来哈哈哈。
+做题没做出来,这个题我是真的一点思路都没有,面试应该是凉了。最后反问阶段就简单问了下后边的流程,整体来说就是这个题太难了,真做不出来。
## HR面
-没想到三面这个题没做出来,最后也还给机会`HR`面了,在`2022.10.27 10:32`左右收到了`HR`面的面试邮件,本来约好的是视频面试,后边成了电话面试了哈哈,这次面试大概是`21min`。
+没想到三面这个题没做出来,最后也还给机会`HR`面了,在`2022.10.27 10:32`左右收到了`HR`面的面试邮件,本来约好的是视频面试,后边成了电话面试了,这次面试大概是`21min`。
* 对于拼多多部门的了解。
* 对于`base`地的倾向。
@@ -73,7 +73,7 @@
* 个人对于拼多多工作时长的看法。
* 简单了解了下家庭情况。
-听声音就知道是个漂亮小姐姐哈哈哈,面试的时候主要是她在给我介绍相关的信息,我答的反而不是太多。反问阶段问的是大概多久能出结果,说是大概等两到三周会出结果,现在秋招也接近尾声了,应该不会太慢了。
+听声音就知道是个漂亮小姐姐,面试的时候主要是她在给我介绍相关的信息,我答的反而不是太多。反问阶段问的是大概多久能出结果,说是大概等两到三周会出结果,现在秋招也接近尾声了,应该不会太慢了。
## 后续
diff --git "a/Interview/\346\220\272\347\250\213\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\346\220\272\347\250\213\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index a6b78ae4..a4ea8423 100644
--- "a/Interview/\346\220\272\347\250\213\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\346\220\272\347\250\213\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,5 +1,5 @@
# 携程秋招正式批前端面试
-简历是在`2022.09.11 20:00`左右投递的,笔试时间是`2022.09.13.14:00`,早就听说了在携程工作比较舒服哈哈哈,早就想面携程了,感谢携程给的面试机会。
+简历是在`2022.09.11 20:00`左右投递的,笔试时间是`2022.09.13.14:00`,早就听说了在携程工作比较舒服,早就想面携程了,感谢携程给的面试机会。
## 一面
国庆后的状态确实差了很多,摆烂心理严重,面试就面的有点懵逼。在`2022.10.10 18:35`左右发了面试邀约邮件,可以选时间,然后选的面试时间是`2022.10.12 15:20`,面试时间大概有`25min`。
@@ -13,7 +13,7 @@
* 对于代码质量的提示以及规范有什么实践吗。
* 如何对页面进行性能优化,主要是首屏优化方面。
-这是我秋招面的最快的一场面试了,一共面了`25min`,然后还做了七八分钟的题哈哈哈。反问阶段问了问具体的部门还有对我的建议,部门是主要负责机票方面的,对我的建议还是让我多深入了解一些性能优化方面的内容,面试体验还是不错的。
+这是我秋招面的最快的一场面试了,一共面了`25min`,然后还做了七八分钟的题。反问阶段问了问具体的部门还有对我的建议,部门是主要负责机票方面的,对我的建议还是让我多深入了解一些性能优化方面的内容,面试体验还是不错的。
## 二面
二面是在`2022.10.18 18:50`左右发了面试邀约邮件,可以选时间,然后选的面试时间是`2022.10.21 15:20`,面试的大佬非常非常的随和,全程笑着跟我谈论技术与想法,面试体验极好,面试时间大概有`35min`。
@@ -28,7 +28,7 @@
* 小程序跨端需求的选型上如何选择。
* 对于`Node`做服务端的了解,`Node`的优势。
-这次面试虽然时间是挺长的,但问题还是比较少的,因为我们聊了很多乱七八糟的,我觉得这次面试是我这次秋招感受最好的一次面试了,面试官是真的随和,一点架子都没有。在反问阶段询问了部门的相关业务,以及对于未来发展方向的一个建议,老哥的建议非常到位,就是要遵从内心,想做什么就去做就完了,太对了哥哈哈哈,非常好的一次面试体验,非常感谢。
+这次面试虽然时间是挺长的,但问题还是比较少的,因为我们聊了很多乱七八糟的,我觉得这次面试是我这次秋招感受最好的一次面试了,面试官是真的随和,一点架子都没有。在反问阶段询问了部门的相关业务,以及对于未来发展方向的一个建议,老哥的建议非常到位,就是要遵从内心,想做什么就去做就完了,太对了哥,非常好的一次面试体验,非常感谢。
## HR面
@@ -42,7 +42,7 @@
* 对于携程公司的了解。
* 三方的一些问题。
-这次面试时间还是挺短的哈哈哈,反问阶段主要是问了问会不会被再次分配,以及啥时候能出结果,携程这边应该是不会被再次分配部门的了,然后结果似乎要等做一次英文测试之后才能出,基本在两个周左右,等着就完事了哈哈哈。
+这次面试时间还是挺短的,反问阶段主要是问了问会不会被再次分配,以及啥时候能出结果,携程这边应该是不会被再次分配部门的了,然后结果似乎要等做一次英文测试之后才能出,基本在两个周左右,等着就完事了。
## 后续
携程是我今年秋招的第三个意向,在`2022.11.04 19:00`直接`OC`要发`offer`,然后在`2022.11.07 20:35`发了正式的`offer`,橙子让我很是心动啊,听说不卷没有那么累,每周还有两天的`WFH`,想想就很爽。
diff --git "a/Interview/\347\231\276\345\272\246\345\256\236\344\271\240\347\224\237\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\347\231\276\345\272\246\345\256\236\344\271\240\347\224\237\345\211\215\347\253\257\351\235\242\350\257\225.md"
index bfca5b2b..5b60be28 100644
--- "a/Interview/\347\231\276\345\272\246\345\256\236\344\271\240\347\224\237\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\347\231\276\345\272\246\345\256\236\344\271\240\347\224\237\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -2,7 +2,9 @@
这次面试的是`ACG`百度智能云事业群产业创新业务部的前端实习岗位,当时主要是浩泽老哥在群里招呼人了,我就投了个简历,看看寒假可以去实习。
## 一面
-一面是在`2020.11.10 15:00`,面试小姐姐很漂亮哈哈,不过还是很紧张,毕竟这么久没有和面试官对线了。面试大概是`50`多分钟,面试小姐姐的电脑没电了,最后一个柯里化的编程题我写了之后发给小姐姐的,好家伙老紧张了,按键盘都按不明白了。不过我觉得我答的还行,除了有些紧张导致吞吞吐吐大部分都算是答出来了,一面完成了浩泽老哥就跟我说过一段时间就要二面了。这些面试题是回忆的,可能还有一些面试题我记不住了,这些问题基本上在我的博客都有,只不过都是以分析的形式给出的,所以篇幅比较长,可以试着看看,另外一定要常看博客,我就是之前写的东西还都给忘了。
+一面是在`2020.11.10 15:00`,面试小姐姐很漂亮,不过还是很紧张,毕竟这么久没有和面试官对线了。面试大概是`50`多分钟,面试小姐姐的电脑没电了,最后一个柯里化的编程题我写了之后发给小姐姐的,好家伙老紧张了,按键盘都按不明白了。
+
+不过我觉得我答的还行,除了有些紧张导致吞吞吐吐大部分都算是答出来了,一面完成了浩泽老哥就跟我说过一段时间就要二面了。这些面试题是回忆的,可能还有一些面试题我记不住了,这些问题基本上在我的博客都有,只不过都是以分析的形式给出的,所以篇幅比较长,可以试着看看,另外一定要常看博客,我就是之前写的东西还都给忘了。
* 实现一个三列布局,使用`flex`、`position`、`float`实现,屏幕共享手写代码。
* `position`中`fixed`和`absolute`的区别。
@@ -66,7 +68,10 @@ console.log(plus(1)(2)(3)(4));
## 挂面
`2020-11-16`是挂面,说是挂面,实际上是根本没有二面,还是称其为挂面`vermicelli`吧。
-本来是要二面的,谁知道他们变卦了,然后浩泽老哥跟我说他们想招一个能发`offer`的,准确来说是准确说是明年毕业能发正式`offer`的,我这研一的直接就不符合要求啊。看起来准确来说是要秋招的,我这是去当实习他们不要,白瞎了我这自我感觉良好哈哈。
+本来是要二面的,谁知道他们变卦了,然后浩泽老哥跟我说他们想招一个能发`offer`的,准确来说是准确说是明年毕业能发正式`offer`的,我这研一的直接就不符合要求啊。看起来准确来说是要秋招的,我这是去当实习他们不要,白瞎了我这自我感觉良好。
+
一面结束的时候就跟我说等着二面,这直接就变卦了,好家伙我`TM`直接好家伙。
+
再有我闲的没事询问了一下那边收到的前端简历比后端的多,并且浩泽老哥也说其实前端在之后的晋升方面可能不太有优势,不过我这学了这么长时间的前端也不合适去转后端,说不定最后我还就搞`C++`了呢。
+
想进大厂着实太难了,当年我投阿里实习简历都没给我过,现在百度实习又给我挂了,我太难了。
diff --git "a/Interview/\347\231\276\345\272\246\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\347\231\276\345\272\246\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 1209f539..6d6c7871 100644
--- "a/Interview/\347\231\276\345\272\246\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\347\231\276\345\272\246\347\247\213\346\213\233\346\217\220\345\211\215\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -37,7 +37,7 @@
* `Vue`的`diff`算法。
* `Vue`为什么要有虚拟`DOM`。
-反问环节问了问老哥这边做的业务以及我个人需要提高的地方,业务方面是依托于百度网盘而做的业务,包括很多衍生产品例如小程序等等,我个人需要提升的是对技术的深度,大面上都了解但是细节不深入。这老哥人还是挺好的,就是不开摄像头感觉我自己在那聊就很尬哈哈哈。
+反问环节问了问老哥这边做的业务以及我个人需要提高的地方,业务方面是依托于百度网盘而做的业务,包括很多衍生产品例如小程序等等,我个人需要提升的是对技术的深度,大面上都了解但是细节不深入。这老哥人还是挺好的,就是不开摄像头感觉我自己在那聊就很尬。
## 二面
@@ -57,7 +57,7 @@
* 对`NodeJS`了解的如何,了解什么后端语言。
* 二叉树前序遍历。
-反问环节问了问老哥我个人需要提高的地方,给了我几点建议,让我把基础搞扎实(毕竟这个`easy`还做的稀里糊涂的),另外还要提升对于技术的深度。老哥说的确实还是很有道理的,而且我这`easy`没整明白也确实挺丢人的,只不过呢,二面面试官也不开摄像头,直接像是组内传统了哈哈哈。
+反问环节问了问老哥我个人需要提高的地方,给了我几点建议,让我把基础搞扎实(毕竟这个`easy`还做的稀里糊涂的),另外还要提升对于技术的深度。老哥说的确实还是很有道理的,而且我这`easy`没整明白也确实挺丢人的,只不过呢,二面面试官也不开摄像头,直接像是组内传统了。
## 后续
diff --git "a/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 3b905135..49899ec9 100644
--- "a/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,5 +1,5 @@
# 美团暑期实习前端面试
-这次面试的是美团的到店事业群-平台技术部,在`2022.03.01`投递之后,直接参加实习招聘的第一次美团统一笔试,因为美团必须是首先笔试了才可以进入下边的流程的,笔试的时间是`2022.03.05 10:00`,这次比去年找实习的时候做的好,起码我是`A`了一道题,去年的这个时候是`0AC`哈哈哈。
+这次面试的是美团的到店事业群-平台技术部,在`2022.03.01`投递之后,直接参加实习招聘的第一次美团统一笔试,因为美团必须是首先笔试了才可以进入下边的流程的,笔试的时间是`2022.03.05 10:00`,这次比去年找实习的时候做的好,起码我是`A`了一道题,去年的这个时候是`0AC`。
## 一面
笔试完过了两天也就是周一下午就有老哥给我打电话约面试了,当时约的是`2022.03.09 19:00`,但是当天晚上上海那边是因为疫情组织做核酸检测,面试延迟了一个小时,也就是`2022.03.09 20:00`时长大概是`62min`。这老哥太客气了,这一面全程跟我聊,东扯西聊,我俩这就像哥们似的搁这扯,这笑就没停过,最后这面经也不知道写点啥了。
@@ -22,7 +22,7 @@
* 找数组中重复数字的索引。
* 氛围、城市、环境、发展、薪资排个序。
-老哥的面试其实很有意思,可以说问的问题都要从基础出发,然后落到实践上,就是说最后都是要问在你的项目上你是如何做的,没有具体的八股之类的,其实老哥问了很多东西,但是我实在是记不住了,最终整理成八股就上边这点了。最后还整了个活,老哥让我写`Promise/A+`规范,我就说这玩意写不了,要不换个题,老哥说那我给你换个吧,就换了上边那个简单的题目,哈哈哈哈哈哈哈。整体来说老哥还是很有意思的,还好说话,真的是不一样的面试,整挺好。具体部门问了问内推的老哥,是被分到了到店综合业务部。
+老哥的面试其实很有意思,可以说问的问题都要从基础出发,然后落到实践上,就是说最后都是要问在你的项目上你是如何做的,没有具体的八股之类的,其实老哥问了很多东西,但是我实在是记不住了,最终整理成八股就上边这点了。最后还整了个活,老哥让我写`Promise/A+`规范,我就说这玩意写不了,要不换个题,老哥说那我给你换个吧,就换了上边那个简单的题目。整体来说老哥还是很有意思的,还好说话,真的是不一样的面试,整挺好。具体部门问了问内推的老哥,是被分到了到店综合业务部。
## 二面
`2022.03.11`约了面试,这二面就有点让我猝不及防,然后我回答的也是越来越乱,不出意外的话应该是挂了,寄了。二面的时间约在了`2022.03.15 15:00`时长大概是`37min`。
@@ -48,4 +48,4 @@
这次面试是目前为止面的最不好的一次了,越说越乱,最后有点语无伦次了,这些问题属实是难到我了。最后反问老哥是对我的建议,同样老哥也是建议我说虽然知识面还是比较广的,但是还是希望对于知识多深入了解一下,跟字节二面老哥的建议一样,我确实需要反思一下我的这个问题。
## 后续
-挂了哈哈哈,`2022.03.18 15:16`收到了感谢信,是我这辈子收到的第一个感谢信,其他的都是挂了就挂了,没有消息,这点美团还是做的不错的,然后今天我们一块面试的很多很多同学都收到了感谢信,合着这是统一发的呗,原来他们都收到了感谢信,绷不住了哈哈哈哈。
+最终还是挂了,`2022.03.18 15:16`收到了感谢信,是我这辈子收到的第一个感谢信,其他的都是挂了就挂了,没有消息,这点美团还是做的不错的,然后今天我们一块面试的很多很多同学都收到了感谢信,合着这是统一发的呗,原来他们都收到了感谢信,绷不住了。
diff --git "a/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index cc2f056d..8b38e292 100644
--- "a/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\347\276\216\345\233\242\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,8 +1,8 @@
# 美团暑期日常实习前端面试
-这次面的是美团基础研发平台的大数据分析部门,好家伙这个名字一听就很牛逼,其实我早就投递简历了,但是一直没做笔试,所以这个流程就走不下去,上个周六做了做笔试,在此点名表扬美团,`0 AC`都给面试机会了哈哈。
+这次面的是美团基础研发平台的大数据分析部门,好家伙这个名字一听就很牛逼,其实我早就投递简历了,但是一直没做笔试,所以这个流程就走不下去,上个周六做了做笔试,在此点名表扬美团,`0 AC`都给面试机会了。
## 一面
-一面约的时间是在`2021-03-29 17:00`,面试面了`40 min`,没想到我笔试`0 AC`都有面试机会,并且约面试约得这么快,大中午的一个电话就打来了约面试,一面老哥一看就是非常强,老您您的我都不好意思了,太难为情了,老哥还是挺有意思的哈哈。
+一面约的时间是在`2021-03-29 17:00`,面试面了`40 min`,没想到我笔试`0 AC`都有面试机会,并且约面试约得这么快,大中午的一个电话就打来了约面试,一面老哥一看就是非常强,老您您的我都不好意思了,太难为情了,老哥还是挺有意思的。
* 标准环节自我介绍。
* 怎么学习的前端,学习的方向。
* 问了问啥时候能够实习,能实习多长时间。
@@ -15,7 +15,7 @@
* 怎么进行`CSS`的组件穿透。
* `ES6`用的多吗,都用了啥。
* 介绍一下`Promise`的异步流程,如何解决的异步问题。
-* 实现`Promise.allSetted`,面试官说我实现的比较夸张,没见过这么实现的哈哈。
+* 实现`Promise.allSetted`,面试官说我实现的比较夸张,没见过这么实现的。
* 写算法,长字串中的最大回文长度,没做出来。
* `Vue`生命周期。
* `Vue`的`keep-alive`组件的生命周期。
@@ -27,7 +27,7 @@
* 又问了下实习时间。
* 反问,介绍一下部门。
-一面还是比较基础的,面试官老哥挺有意思的,就是这个算法题做不出来,好尴尬啊哈哈。
+一面还是比较基础的,面试官老哥挺有意思的,就是这个算法题做不出来,好尴尬啊。
## 后续
-准确来说是没有后续了,很长时间都没有再联系我,我觉得是因为我是`23`届不是很喜欢招,毕竟面试官问了好几次我是`23`届的,不管了就当我过了一面哈哈。
+准确来说是没有后续了,很长时间都没有再联系我,我觉得是因为我是`23`届不是很喜欢招,毕竟面试官问了好几次我是`23`届的,不管了就当我过了一面。
diff --git "a/Interview/\350\201\224\346\203\263\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\350\201\224\346\203\263\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index be4e7af7..074b2b1c 100644
--- "a/Interview/\350\201\224\346\203\263\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\350\201\224\346\203\263\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -21,10 +21,10 @@
* `Vue`和`React`通过数据刷新视图的流程。
* 未来的发展方向与规划。
-这次面试体验是真的好,面试的老哥也不迟到甚至还提前到,而且上来就是自我介绍和业务介绍,这是我之前面了这么多场面试从来没体验到的待遇,此外在最后结束的时候,老哥还给我讲了最起码五分钟的联想内部的业务,我反问阶段也是问了老哥之前提到的业务方面的一些问题。这次面试体验是真的不错,最近几次面试体验都挺好,总体来说是各有各的特点哈哈哈。
+这次面试体验是真的好,面试的老哥也不迟到甚至还提前到,而且上来就是自我介绍和业务介绍,这是我之前面了这么多场面试从来没体验到的待遇,此外在最后结束的时候,老哥还给我讲了最起码五分钟的联想内部的业务,我反问阶段也是问了老哥之前提到的业务方面的一些问题。这次面试体验是真的不错,最近几次面试体验都挺好,总体来说是各有各的特点。
## 二面
-二面是在`2022.09.15 17:12`左右约的面试,直接是发的邮件固定的时间,然后约的面试时间是`2022.09.20 16:00`,又是位小姐姐面试,这次面试大概是`28min`。感叹下,联想的面试体验是真的好,但是有一点尴尬的是,发的邮件是约的`14:00`然后那个邮件的`Teams`会议约的是`16:00`,我还发邮件问了一下哈哈哈。此外我的网络也老是掉线,在掉了三次线之后,我换了流量才完成的这场面试。
+二面是在`2022.09.15 17:12`左右约的面试,直接是发的邮件固定的时间,然后约的面试时间是`2022.09.20 16:00`,又是位小姐姐面试,这次面试大概是`28min`。感叹下,联想的面试体验是真的好,但是有一点尴尬的是,发的邮件是约的`14:00`然后那个邮件的`Teams`会议约的是`16:00`,我还发邮件问了一下。此外我的网络也老是掉线,在掉了三次线之后,我换了流量才完成的这场面试。
* 对于三到五年未来的规划。
* 最近做过的一些项目。
@@ -43,4 +43,4 @@
联想的面试体验是真的不错,全程都是跟我笑着在聊天,反问阶段就是先问了问是不是后边会被`HR`再统一分配部门,然后又问了问业务相关的问题,然后我们就开始扯了,扯了很久的联想平台业务方面的信息,也交流了我比较感兴趣的一些方面的业务,整体来说面试体验是真的好。
## 后续
-挂了哈哈哈,`2022.09.21 14:42`收到了感谢信,虽然联想的面试体验很好,但是还是挂了,倒是也很正常,毕竟今年这个情况,我已经被挂习惯了,还是很感谢联想给了面试机会,并且面试体验也是真的不错。
+最终还是挂了,`2022.09.21 14:42`收到了感谢信,虽然联想的面试体验很好,但是还是挂了,倒是也很正常,毕竟今年这个情况,我已经被挂习惯了,还是很感谢联想给了面试机会,并且面试体验也是真的不错。
diff --git "a/Interview/\350\205\276\350\256\257\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\350\205\276\350\256\257\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 73c8332b..a4f75543 100644
--- "a/Interview/\350\205\276\350\256\257\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\350\205\276\350\256\257\346\232\221\346\234\237\346\227\245\345\270\270\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -59,7 +59,7 @@
* 平时遇到非常难以解决的问题你都是怎么处理的,有什么请教的地方吗。
* 反问阶段。
-这次面试真的是如沐春风,而且一看那位就是个大佬,还我最后反问的时候说有什么提高的地方,大佬说都挺好的,项目不错,尤其是你能自己去利用前端知识做一些工具出来,而且还能坚持学习,很多人学了只是为了开发,你可以再做做项目提升提升经验,我这也不好说,我大学时候没你这么厉害,我当时就脸红了,顶不住了,我都不知道说啥了,只能说一句您说笑了,之后我再问了一下部门,然后结束的时候大佬太客气了,我都手足无措,极其慌张,太客气了,我都快顶不住了,非常感谢这次面试经历吧,哈哈。
+这次面试真的是如沐春风,而且一看那位就是个大佬,还我最后反问的时候说有什么提高的地方,大佬说都挺好的,项目不错,尤其是你能自己去利用前端知识做一些工具出来,而且还能坚持学习,很多人学了只是为了开发,你可以再做做项目提升提升经验,我这也不好说,我大学时候没你这么厉害,我当时就脸红了,顶不住了,我都不知道说啥了,只能说一句您说笑了,之后我再问了一下部门,然后结束的时候大佬太客气了,我都手足无措,极其慌张,太客气了,我都快顶不住了,非常感谢这次面试经历吧。
## 三面
三面是在`2021-03-17 15:00`,三面面了个寂寞,一共`15min`,面试官还不开摄像头可能不太方便,另外中午下通知下午`3`点就面,整的跟突击检查似的,一共就才面了`15min`就拉胯了,好了等捞吧,腾讯捞人还是有一手的。
@@ -81,7 +81,7 @@
这一面太短了,很慌,而且我总感觉我这是在面产品经理而不是前端,而且问题都很开放,一脸懵逼地结束了面试,更新一下,半个小时后更新状态`HR`面了,感谢老哥不杀之恩,真是惊险刺激啊。
## HR面
-`HR`面是在`2021-03-19 16:30`,大概面了`25min`,实际上是约的`15:00`的但是因为有课调整了下时间,发的邀请函里写明白理由啥的就好,当然我也一度以为不会有下次面试机会,小姐姐也很爱笑也很能聊哈哈,`HR`面纯聊天,就是聊的我有点懵了,毕竟第一次`HR`面,不聊技术反而不会回答了。
+`HR`面是在`2021-03-19 16:30`,大概面了`25min`,实际上是约的`15:00`的但是因为有课调整了下时间,发的邀请函里写明白理由啥的就好,当然我也一度以为不会有下次面试机会,小姐姐也很爱笑也很能聊,`HR`面纯聊天,就是聊的我有点懵了,毕竟第一次`HR`面,不聊技术反而不会回答了。
* 为什么来腾讯。
* 看你有内推,是认识在腾讯这边的人吗。
* 面试过哪几家公司,都是什么进展。
@@ -103,7 +103,7 @@
说实话不问技术反而是不会回答了,就挺紧张的,看来我吹牛逼的功夫差了很多啊,需要不断练习一下啊,不过这四面算是结束了,接下来就是等结果了。
## 后续
-* 我杵在`HR`面状态上杵了`8`天,直到`2021-3-27 17:29`才给我发云证,等的我非常急躁,甚至还给校招组发了个邮件催了催哈哈。
+* 我杵在`HR`面状态上杵了`8`天,直到`2021-3-27 17:29`才给我发云证,等的我非常急躁,甚至还给校招组发了个邮件催了催。
* 在`2021-03-31 20:28`接了`HR`姐姐的电话,由于我挂着周老板公司的监事的名,所以还得等我解除了监事才能继续走下边的流程,然后才能发`offer`,加了下`HR`的微信,先慢慢走流程吧。
-* 在`2021-04-09 11:26`终于`OC`了,流程走的是真的是长啊哈哈。
-* 在`2021-04-12 10:14`正式下发了`offer`,接下来就是走入职流程了,哈哈今年的春招结束咯。
+* 在`2021-04-09 11:26`终于`OC`了,流程走的是真的是长啊。
+* 在`2021-04-12 10:14`正式下发了`offer`,接下来就是走入职流程了,今年的春招结束咯。
diff --git "a/Interview/\350\205\276\350\256\257\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\350\205\276\350\256\257\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index fc13a43a..01e0d735 100644
--- "a/Interview/\350\205\276\350\256\257\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\350\205\276\350\256\257\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -1,8 +1,8 @@
# 腾讯秋招正式批前端面试
-简历是在`2022.09.15 20:00`左右投递的,这次腾讯应该没有多少`HC`,前端的笔试机会也只有一次,应该是还没到时间就先约面了。好久没有面试过腾讯了,刺激哈哈哈,感谢腾讯给的面试机会。
+简历是在`2022.09.15 20:00`左右投递的,这次腾讯应该没有多少`HC`,前端的笔试机会也只有一次,应该是还没到时间就先约面了。好久没有面试过腾讯了,有点刺激,感谢腾讯给的面试机会。
## 一面
-自从十月一假期之后,就开始摆烂了,心态都有点不太一样了,然后突然腾讯打电话来邀请我面试,好家伙这就太刺激了,好久没面试了,这次面试基本上都是场景题,给我面的有点懵哈哈哈。在`2022.10.11 02:40`左右打电话约了面试时间,在`2022.09.12 11:15`进行面试,面试时间大概有`35min`。
+自从十月一假期之后,就开始摆烂了,心态都有点不太一样了,然后突然腾讯打电话来邀请我面试,好家伙这就太刺激了,好久没面试了,这次面试基本上都是场景题,给我面的有点懵了。在`2022.10.11 02:40`左右打电话约了面试时间,在`2022.09.12 11:15`进行面试,面试时间大概有`35min`。
* 常用的跨域方式与原理。
* 写一个`withJSONP`请求的包装方法。
@@ -21,8 +21,8 @@
* 一个输入框,做搜索结果,传过来一个字符串作为条件然后做条件过滤。
* `CDN`是如何知道哪个资源服务器是他的最近的节点的。
-这次面试的场景题是真的多,得疯狂地动脑子,迅速地编出来可行方案,问的我也有点懵,不过我也还是挺喜欢这种面试方式的,毕竟我也很久很久没看过八股了,问一些场景题反而回答的能更好一些。反问阶段问了问部门,哈哈哈原来是`WeTest`部门,我之前在腾讯实习的时候还用过呢,整体来说面试还是不错的。
+这次面试的场景题是真的多,得疯狂地动脑子,迅速地编出来可行方案,问的我也有点懵,不过我也还是挺喜欢这种面试方式的,毕竟我也很久很久没看过八股了,问一些场景题反而回答的能更好一些。反问阶段问了问部门,原来是`WeTest`部门,我之前在腾讯实习的时候还用过呢,整体来说面试还是不错的。
## 后续
-今天去看了一眼,流程已经结束了,倒是在意料之中,今年`TX`所有岗位加起来三位数的`HC`也不是闹着玩的哈哈哈。
+今天去看了一眼,流程已经结束了,倒是在意料之中,今年`TX`所有岗位加起来三位数的`HC`也不是闹着玩的。
diff --git "a/Interview/\350\232\202\350\232\201\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\350\232\202\350\232\201\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
index bb933b82..5231ae44 100644
--- "a/Interview/\350\232\202\350\232\201\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\350\232\202\350\232\201\346\232\221\346\234\237\345\256\236\344\271\240\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -35,7 +35,7 @@
* 前端如何进行性能的指标排查与相关工具,如何定位问题。
* 如何优化页面的性能。
-反问阶段是问了一下语雀相关的业务组,好家伙我以为是前端,原来是全栈,包括前端后端数据库运维,当然具体是分组安排的。说实话本来我以为一面应该是一个比较轻松的面试,没想到给我问懵了,全都是场景题,人都问傻了,不过面试体验还是很不错的,面试的老哥都还是会给予一些提示的,老哥就是有点不苟言笑哈哈哈。对了老哥还是今年面试过程中目前我知道的唯一一个在面试前就去翻我`Github`的,老哥真不错哈哈哈。附一下当时写的笔试题第一题的代码。
+反问阶段是问了一下语雀相关的业务组,好家伙我以为是前端,原来是全栈,包括前端后端数据库运维,当然具体是分组安排的。说实话本来我以为一面应该是一个比较轻松的面试,没想到给我问懵了,全都是场景题,人都问傻了,不过面试体验还是很不错的,面试的老哥都还是会给予一些提示的,老哥就是有点不苟言笑。对了老哥还是今年面试过程中目前我知道的唯一一个在面试前就去翻我`GitHub`的,老哥真不错。附一下当时写的笔试题第一题的代码。
```javascript
class Node {
@@ -113,7 +113,7 @@ result.forEach(item => output(item));
```
## 二面
-好家伙,周三晚上刚面完,周四中午就给我打电话约面试。这次面试的是阿里的不四大佬,这可是需要膜拜的巨佬,然后面试也就是跟我聊起天来了,不是我想象中的那么严肃哈哈哈。二面约的时间是在`2021-03-18 15:00`,面试时间有`35min`。
+好家伙,周三晚上刚面完,周四中午就给我打电话约面试。这次面试的是阿里的不四大佬,这可是需要膜拜的巨佬,然后面试也就是跟我聊起天来了,不是我想象中的那么严肃。二面约的时间是在`2021-03-18 15:00`,面试时间有`35min`。
* 介绍一下你觉得比较有意思的项目。
* 小程序前端的技术方案。
@@ -132,10 +132,10 @@ result.forEach(item => output(item));
* `http`协议的优点和缺点。
* 对实习上的期待。
-反问阶段问了一下想要巨佬给我一点建议,巨佬评价了我在学校做的小程序与一些脚本插件,然后对我说我对于实习期待的技术上的提升,依赖公司很可能是不够的,因为无论是因为时间或者是技术债方面的问题,很可能没有办法去接入或者跟随新的技术,而你现在有一些自己的纯粹的项目,可以尽量将学习的东西融入进去,无论是对你自己技术的提升,亦或者是将来留给后边的人继续做,都是非常重要的事情,自己的东西你可以想怎么做就怎么做,想怎么改就怎么改,但是公司的东西可容易处处掣肘。巨佬说的真的是非常有道理,我也要尽量去做到这点吧,毕竟现在时间还算是有的,当我工作了之后,真的很可能没有很多时间想做什么就做什么了,非常感谢不四巨佬哈哈哈。后期复盘的时候感觉我这场面试发挥的不好,感觉很多东西并没有展现出来,我反思了一下我觉得我也应该提及一下我相关的优势,不能只在面试官问的问题上回答。
+反问阶段问了一下想要巨佬给我一点建议,巨佬评价了我在学校做的小程序与一些脚本插件,然后对我说我对于实习期待的技术上的提升,依赖公司很可能是不够的,因为无论是因为时间或者是技术债方面的问题,很可能没有办法去接入或者跟随新的技术,而你现在有一些自己的纯粹的项目,可以尽量将学习的东西融入进去,无论是对你自己技术的提升,亦或者是将来留给后边的人继续做,都是非常重要的事情,自己的东西你可以想怎么做就怎么做,想怎么改就怎么改,但是公司的东西可容易处处掣肘。巨佬说的真的是非常有道理,我也要尽量去做到这点吧,毕竟现在时间还算是有的,当我工作了之后,真的很可能没有很多时间想做什么就做什么了,非常感谢不四巨佬。后期复盘的时候感觉我这场面试发挥的不好,感觉很多东西并没有展现出来,我反思了一下我觉得我也应该提及一下我相关的优势,不能只在面试官问的问题上回答。
## HR面
-好家伙周五面完了,周一就给我打电话约面试了,`HR`姐姐也是挺爱笑的,说起来挺尴尬的,我是提前约的时间五分钟进去的,正在哼着歌打开了会议,然后就尬住了,最怕空气突然安静哈哈哈。`HR`面约的时间是在`2021-03-24 09:50`,面试时间有`25min`。
+好家伙周五面完了,周一就给我打电话约面试了,`HR`姐姐也是挺爱笑的,说起来挺尴尬的,我是提前约的时间五分钟进去的,正在哼着歌打开了会议,然后就尬住了,最怕空气突然安静。`HR`面约的时间是在`2021-03-24 09:50`,面试时间有`25min`。
* 对于实习选择的城市有什么想法。
* 在腾讯实习是实地实习还是远程的。
@@ -151,7 +151,7 @@ result.forEach(item => output(item));
* 平时与同学都交流些什么。
* 会把语雀推荐给同学吗,为什么。
-反问阶段我问了胜任这个职务最重要的东西是什么,`HR`姐姐给了我两点比较重要的内容,`1`是学会沟通,在工作的过程中沟通时很重要的,需要能够听明白别人说什么,还有能够说明白自己要做什么,`2`是不懂就问,每个项目都是伴随着公司的成本的,所以出现了问题要及时询问与沟通。感谢`HR`姐姐的建议,我觉得说的真的很有道理哈哈哈。最后姐姐说要等`1`到`2`周的时间评估一下才会有结果,那只能慢慢的等了哈哈哈。
+反问阶段我问了胜任这个职务最重要的东西是什么,`HR`姐姐给了我两点比较重要的内容,`1`是学会沟通,在工作的过程中沟通时很重要的,需要能够听明白别人说什么,还有能够说明白自己要做什么,`2`是不懂就问,每个项目都是伴随着公司的成本的,所以出现了问题要及时询问与沟通。感谢`HR`姐姐的建议,我觉得说的真的很有道理。最后姐姐说要等`1`到`2`周的时间评估一下才会有结果,那只能慢慢的等了。
## 后续
-不用等`1`到`2`周了,在`2022.02.25`我闲的没事去招聘官网看了看,给我挂了,排序没排过那也没办法了哈哈哈。
+不用等`1`到`2`周了,在`2022.02.25`我闲的没事去招聘官网看了看,给我挂了,排序没排过那也没办法了。
diff --git "a/Interview/\351\241\272\344\270\260\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md" "b/Interview/\351\241\272\344\270\260\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
index 0d9ca561..e56e5f04 100644
--- "a/Interview/\351\241\272\344\270\260\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
+++ "b/Interview/\351\241\272\344\270\260\347\247\213\346\213\233\346\255\243\345\274\217\346\211\271\345\211\215\347\253\257\351\235\242\350\257\225.md"
@@ -21,7 +21,7 @@
* 对数据做过什么处理。
* 对于工作地有什么意向吗。
-这次面试感觉有点匆匆,而且是纯八股文,反问阶段问了下老哥相关的业务,然后介绍完成后跟我说最后会校招统一安排,不会是面试的时候是哪个部门校招后就是在哪个部门了哈哈,整体来说还不错。
+这次面试感觉有点匆匆,而且是纯八股文,反问阶段问了下老哥相关的业务,然后介绍完成后跟我说最后会校招统一安排,不会是面试的时候是哪个部门校招后就是在哪个部门了,整体来说还不错。
## 二面
@@ -43,7 +43,7 @@
* 如何实现二维码登录。
* 对于前端安全有什么了解。
-这是我第一个连自我介绍都不需要的面试,老哥也是很猛,上来直接问我要最近做的项目的一些`DEMO`,那我就直接把我的`Github`给老哥看了,主要是介绍下了我的文档编辑器和简历编辑器两方面,感觉老哥也是把我的`Github`翻了一下,看了不少提交记录哈哈。老哥还是很有意思的反问阶段问了下,是不是校招后边会被再次分配,然后还问了问对我个人的建议,老哥建议我多学习一下这个设计模式,对于前端还是很重要的,此外在一些项目工作中要多积极地主动沟通,最后老哥还说了说他对算法方面的看法,可以没必要那么关注于算法,但是设计模式是一定要关注的,对我其他方面评价都还可以。整体来说面试体验很是不错的,老哥还是非常能跟我扯的哈哈哈。
+这是我第一个连自我介绍都不需要的面试,老哥也是很猛,上来直接问我要最近做的项目的一些`DEMO`,那我就直接把我的`Github`给老哥看了,主要是介绍下了我的文档编辑器和简历编辑器两方面,感觉老哥也是把我的`GitHub`翻了一下,看了不少提交记录。老哥还是很有意思的反问阶段问了下,是不是校招后边会被再次分配,然后还问了问对我个人的建议,老哥建议我多学习一下这个设计模式,对于前端还是很重要的,此外在一些项目工作中要多积极地主动沟通,最后老哥还说了说他对算法方面的看法,可以没必要那么关注于算法,但是设计模式是一定要关注的,对我其他方面评价都还可以。整体来说面试体验很是不错的,老哥还是非常能跟我扯的。
## HR面
`HR`面是在`2022.09.22 18:38`左右约的面试,直接是发的邮件固定的时间,然后约的面试时间是`2022.09.25 11:30`。面试官是个漂亮的小姐姐,这是我秋招第一个`HR`面,非常感谢顺丰给的机会,面试时间大概有`17min`。
@@ -59,7 +59,7 @@
* 作为好的领导应该有什么表现。
* 对内部平台比较重业务理解的想法。
-面试官小姐姐好漂亮啊,反问阶段问的是大概多久能出结果,以及最后是统一再分配的两个问题,大概是得等到十月校招全部面完才能出结果。这也是我秋招的第一个`HR`面,真的是非常非常感谢顺丰哈哈哈,太给面子了,双非今年属实是太不容易了。
+面试官小姐姐好漂亮啊,反问阶段问的是大概多久能出结果,以及最后是统一再分配的两个问题,大概是得等到十月校招全部面完才能出结果。这也是我秋招的第一个`HR`面,真的是非常非常感谢顺丰,太给面子了,双非今年属实是太不容易了。
## 后续
顺丰是我今年秋招的第二个意向,在`2022.10.09 11:09`发了意向书,然后在`2022.10.25 16:00`发了正式的`offer`,今年的秋招实在是太艰难了,能有个`offer`实属不易,非常感谢顺丰。
diff --git "a/MiniProgram/uniapp\345\260\217\347\250\213\345\272\217\350\277\201\347\247\273\345\210\260TS.md" "b/MiniProgram/uniapp\345\260\217\347\250\213\345\272\217\350\277\201\347\247\273\345\210\260TS.md"
index b39a704f..e3ca8755 100644
--- "a/MiniProgram/uniapp\345\260\217\347\250\213\345\272\217\350\277\201\347\247\273\345\210\260TS.md"
+++ "b/MiniProgram/uniapp\345\260\217\347\250\213\345\272\217\350\277\201\347\247\273\345\210\260TS.md"
@@ -1,5 +1,9 @@
# uniapp小程序迁移到TS
-我一直在做的小程序就是 [山科小站](https://github.com/WindrunnerMax/SHST) 也已经做了两年了,目前是用`uniapp`构建的,在这期间也重构好几次了,这次在鹅厂实习感觉受益良多,这又得来一次很大的重构,虽然小程序功能都是比较简单的功能,但是这好不容易实习学到的东西得学以致用,那就继续在小程序上动手吧哈哈。这次实习收获最大倒不是怎么迁移到`TS`,而是一些组件设计的概念以及目录结构设计上的东西,不过这都是在之后重写组件的时候要做的东西了。回到正题,小程序是用`uniapp`写的,毕竟还是比较熟悉`Vue`语法的,这次迁移首先是要将小程序从`HBuilderX`迁移到`cli`版本,虽然用`HBuilderX`确实是有一定的优点,但是拓展性比较差,这些东西还是得自己折腾折腾,迁移到`cli`版本完成后,接下来就是要慢慢从`js`过渡到`ts`了,虽然是`Vue2`对`ts`支持相对比较差,但是至少对于抽离出来的逻辑是可以写成`ts`的,可以在编译期就避免很多错误,另外自己使用`cli`创建可以搞一些其他功能,毕竟只要不操作`DOM`的话一般还是在用常用的`js`方法,例如可以尝试接入`Jest`单元测试等。
+我一直在做的小程序就是 [山科小站](https://github.com/WindrunnerMax/SHST) 也已经做了两年了,目前是用`uniapp`构建的,在这期间也重构好几次了,这次在鹅厂实习感觉受益良多,这又得来一次很大的重构,虽然小程序功能都是比较简单的功能,但是这好不容易实习学到的东西得学以致用,那就继续在小程序上动手吧。
+
+这次实习收获最大倒不是怎么迁移到`TS`,而是一些组件设计的概念以及目录结构设计上的东西,不过这都是在之后重写组件的时候要做的东西了。回到正题,小程序是用`uniapp`写的,毕竟还是比较熟悉`Vue`语法的,这次迁移首先是要将小程序从`HBuilderX`迁移到`cli`版本,虽然用`HBuilderX`确实是有一定的优点,但是拓展性比较差,这些东西还是得自己折腾折腾。
+
+迁移到`cli`版本完成后,接下来就是要慢慢从`js`过渡到`ts`了,虽然是`Vue2`对`ts`支持相对比较差,但是至少对于抽离出来的逻辑是可以写成`ts`的,可以在编译期就避免很多错误,另外自己使用`cli`创建可以搞一些其他功能,毕竟只要不操作`DOM`的话一般还是在用常用的`js`方法,例如可以尝试接入`Jest`单元测试等。
## 迁移到cli版本
首先要迁移到`cli`版本,虽然 [官网](https://uniapp.dcloud.net.cn/quickstart-hx) 上说明了如何新建一个`cli`版本的`uniapp`,但是其中还是有很多坑的。
diff --git "a/MyLife/2022\345\255\227\350\212\202\345\256\236\344\271\240\345\256\236\345\275\225.md" "b/MyLife/2022\345\255\227\350\212\202\345\256\236\344\271\240\345\256\236\345\275\225.md"
index fdfbd628..e109e627 100644
--- "a/MyLife/2022\345\255\227\350\212\202\345\256\236\344\271\240\345\256\236\345\275\225.md"
+++ "b/MyLife/2022\345\255\227\350\212\202\345\256\236\344\271\240\345\256\236\345\275\225.md"
@@ -18,7 +18,7 @@
今天早上我是09:40出发,然后本着得疯狂挤地铁的预期过去,发现站内并没有多少人,虽然地铁上人不少,但是也不算挤,比我上次挤深圳八点的1号线好的不知道到哪里去了,反正就一下子就上去了,然后在西二旗站也就是龙泽的下一站,下了相当一大部分人,我都看傻了,地铁瞬间宽敞了,然后就是平平无奇地坐到了知春路站下了车,然后开始了长达两公里的路程,实际上走起来还好,今天不算很热,并且路上都是有树荫的,我已经探索出一条基本都有树荫的路线,明天再探索一下看看有没有其他的路线能近一点,两公里确实也是需要走一阵子的,最终我在10:28到达了公司一楼大堂。
-来了之后不认路,还是天瑞老哥带我过来的,中午吃饭是直接吃的盒饭哈哈,说是盒饭更好吃一些,然后带着我去IT那边去领了鼠标键盘和支架,我还给我自己的电脑多领了一个支架,这三件套还是不错的,工卡也因为我提前申领了,就直接拿到了,比较遗憾的是没有申请4K屏幕,这申请到要好久,指不定我都走了也没申请到位,这波只能说是血亏。
+来了之后不认路,还是天瑞老哥带我过来的,中午吃饭是直接吃的盒饭,说是盒饭更好吃一些,然后带着我去IT那边去领了鼠标键盘和支架,我还给我自己的电脑多领了一个支架,这三件套还是不错的,工卡也因为我提前申领了,就直接拿到了,比较遗憾的是没有申请4K屏幕,这申请到要好久,指不定我都走了也没申请到位,这波只能说是血亏。
整体来说体验还是不错的,最想让我吐槽的是那个椅子,只适合葛优躺,没办法调整位置,这就让我觉得很不舒服,尤其是脖子基本没地方靠,会觉得脖子很累的,这个椅子就是让我躺着玩手机比较合适,一躺着就想玩手机,啥事不想干,但是没办法还是得搬砖,继续搬砖吧,感觉效率应该不如远程办公哈哈。
diff --git "a/MyLife/\350\207\264\346\210\221\345\233\233\345\271\264\347\232\204\345\244\247\345\255\246\347\224\237\346\264\273.md" "b/MyLife/\350\207\264\346\210\221\345\233\233\345\271\264\347\232\204\345\244\247\345\255\246\347\224\237\346\264\273.md"
index 20848197..8d4a3cd7 100644
--- "a/MyLife/\350\207\264\346\210\221\345\233\233\345\271\264\347\232\204\345\244\247\345\255\246\347\224\237\346\264\273.md"
+++ "b/MyLife/\350\207\264\346\210\221\345\233\233\345\271\264\347\232\204\345\244\247\345\255\246\347\224\237\346\264\273.md"
@@ -42,7 +42,7 @@
接下来是寒假,寒假在老师的带领下做了一个项目,这也是我做的第一个项目,虽然我是负责前端方面的,但是也接触到了一些后端以及前后端交互方面的知识。假期宿舍楼是不开门的,一直住在研究生师兄的宿舍,一直到小年才跟着研究生一起放假,在这一段时间里,我才真的开始入门软件开发。
-大二下学期基本上也就是补课的状态,就是整天上课然后做作业,真的是刺激,下学期参加了中国软件杯,比赛的题目是Activiti国产化迁移与应用实践,就是将开源项目Activiti迁移到国产龙芯CPU环境并且拓展功能,我和zzc以及wfb三个人组队参加了这次比赛。由于我和wfb俩人都需要补课,所以前期工作基本上都是zzc完成的,太强了一神带二坑带我们打进了复赛,复赛结果出来了基本上就快放假了,暑假就得留校做比赛,接下来才是我们三个人的比赛哈哈,就不能光被带了,还是得干点活的,这次比赛学习了不少东西,SSM框架、数据库、Linux基本命令、小程序的开发、Git多人协作开发等等,还使用到了国产的龙芯CPU服务器以及操作系统。如果说做第一个项目是入门的话,那么这次比赛带给我的就是真正的进行软件开发了,当然由于本身技术水平并不高,开发出来的软件可能只能达到能用的程度,可维护性与性能方面可能都比较差。还记得光录视频就录了好十几次,半夜起来改代码,然后经历了几次作品的提交,终于来到了决赛,去南京住酒店,住酒店真的是爽,早餐是自助餐,然后去比赛的时候也是二十块钱一顿饭的标准,点的不够还给补饮料喝,真爽,然后在完成了最后一次答辩之后,我们成功地拿到了国家一等奖,我觉得这可能是我能拿到的最高的一个奖了。
+大二下学期基本上也就是补课的状态,就是整天上课然后做作业,真的是刺激。下学期参加了中国软件杯,比赛的题目是Activiti国产化迁移与应用实践,就是将开源项目Activiti迁移到国产龙芯CPU环境并且拓展功能,我和zzc以及wfb三个人组队参加了这次比赛。由于我和wfb俩人都需要补课,所以前期工作基本上都是zzc完成的,太强了一神带二坑带我们打进了复赛,复赛结果出来了基本上就快放假了,暑假就得留校做比赛,接下来才是我们三个人的比赛。就不能光被带了,还是得干点活的,这次比赛学习了不少东西,SSM框架、数据库、Linux基本命令、小程序的开发、Git多人协作开发等等,还使用到了国产的龙芯CPU服务器以及操作系统。如果说做第一个项目是入门的话,那么这次比赛带给我的就是真正的进行软件开发了,当然由于本身技术水平并不高,开发出来的软件可能只能达到能用的程度,可维护性与性能方面可能都比较差。还记得光录视频就录了好十几次,半夜起来改代码,然后经历了几次作品的提交,终于来到了决赛,去南京住酒店,住酒店真的是爽,早餐是自助餐,然后去比赛的时候也是二十块钱一顿饭的标准,点的不够还给补饮料喝,真爽,然后在完成了最后一次答辩之后,我们成功地拿到了国家一等奖,我觉得这可能是我能拿到的最高的一个奖了。

diff --git "a/MyLife/\350\256\2602022\345\271\264\345\256\236\344\271\240\346\230\245\346\213\233\345\216\206\347\250\213.md" "b/MyLife/\350\256\2602022\345\271\264\345\256\236\344\271\240\346\230\245\346\213\233\345\216\206\347\250\213.md"
index a747a3f6..823e66cd 100644
--- "a/MyLife/\350\256\2602022\345\271\264\345\256\236\344\271\240\346\230\245\346\213\233\345\216\206\347\250\213.md"
+++ "b/MyLife/\350\256\2602022\345\271\264\345\256\236\344\271\240\346\230\245\346\213\233\345\216\206\347\250\213.md"
@@ -1,5 +1,5 @@
# 记2022年实习春招历程
-先说说今年的实习春招结果吧,我是`23`届的毕业生,需要在这个时间找实习,然后为今年的秋招做准备。今年的实习我一共投了三家公司,分别是字节跳动、美团、蚂蚁,最终只拿到了字节跳动的暑期实习`offer`,美团二面之后挂了,蚂蚁`HR`面之后挂了。去年我也是投递了腾讯、美团、字节跳动三家公司,最终也只是拿到了腾讯的`offer`,这么一比较的话,一年了水平好像没有啥增长啊哈哈哈。
+先说说今年的实习春招结果吧,我是`23`届的毕业生,需要在这个时间找实习,然后为今年的秋招做准备。今年的实习我一共投了三家公司,分别是字节跳动、美团、蚂蚁,最终只拿到了字节跳动的暑期实习`offer`,美团二面之后挂了,蚂蚁`HR`面之后挂了。去年我也是投递了腾讯、美团、字节跳动三家公司,最终也只是拿到了腾讯的`offer`,这么一比较的话,一年了水平好像没有啥增长啊。
作为参加过`21`年实习与`22`年实习的,我觉得我还是有点资格对比一下今年和去年的情况的。先说结论,今年`HC`也就是萝卜坑大幅度缩水,在数量上相比于去年直接出现了断层,找工作的难度远高于去年,简直没法比。在今年寒假的时候,说实话我还是踌躇满志的,因为我觉得当前的形势还是不差的,造成我这个错误的判断主要有两点,一是在`21`年底的时候有相当多的大厂开辟了日常实习的通道,这个计划那个计划的,就是招聘日常实习,而且招聘力度还不小。二当时虽然有很多厂传出裁员消息,但是招聘的力度并没有下降,而且当时疫情控制的还可以,感觉经济有一点恢复的势头,虽然有一些利空,但是总归还算是在预期之内吧。所以我一开始并没有着急找实习,虽然`21`年也有过不少面试经验,但是还是准备一下的好。直到开学的前夕,也就是二月底,我正式开始准备找实习了。其实从我研究生开始的时候,我就已经打听好了哪些公司招收日常实习可以研一去,哪些公司转正率高可以研二去,所以我一开始就去找了研一就找好的阿里的内推,然后得到了一个坏消息,他们那里只招收`985211`,不招收双非。然后又去问了问我的学长,还有一些朋友,得到的消息是,某宝、某里云、某钉都不要双非。这对我无异于当头一棒,我立即意识到了今年的形势将会异常艰难,今年恐怕工作是很难找了,我开始慌了,但是事情还是得按部就班地来,总是得一步步地解决。接下来一段时间,某些公司甚至还有极限操作,某些部门劝退了当时已经实习入职的双非实习生,有些核心部门卡第一学历的`23`所。截止到我写下这篇文章的时候也就是`2022.03.25`,腾讯的`22`年实习招聘依旧没有开放,这几天某公司裁员的事也闹的沸沸扬扬,甚至毁掉了一些已经签了三方的`22`届毕业生的`offer`,可能对于公司来说,毁三方只是那`5000`块钱的合同,但是对于`22`届的同学,那是要面对`22`年春招的地狱级别难度。这里就有一位`22`届同学现身说法了,他说秋招的时候随便投了简历都有十多家公司给他面试,今年投了很多家只有一家给面试机会了。
@@ -12,7 +12,7 @@

-第一个打算投的公司是字节,然后因为内推的老哥忙的没理我,最后到了下午才投的,当然最终我是被`AI`部门截胡一次,又被基础架构截胡一次,基础架构这边是个`HR`实习生小姐姐捞的我,实习生不为难实习生哈哈哈,所以我的简历在基础架构停下了,说到这,我都`offer`了,在字节校招的官网我的个人中心的状态依然是投递简历,我主动投递的部门那边的流程就卡在那里了。不得不说字节的效率是真的高,要是`All in`的话我觉得一个半周走完所有流程不是问题。面试的层次也挺清晰,一面基础、二面工程化、三面生活、`HR`面瞎聊哈哈哈,不过每一面至少都有一个算法题确实是挺顶的。从`2022.03.01`投递开始,`2022.03.16`拿到`offer`,既然也只有这一个`offer`,那就准备去上海了吧。
+第一个打算投的公司是字节,然后因为内推的老哥忙的没理我,最后到了下午才投的,当然最终我是被`AI`部门截胡一次,又被基础架构截胡一次,基础架构这边是个`HR`实习生小姐姐捞的我,实习生不为难实习生,所以我的简历在基础架构停下了,说到这,我都`offer`了,在字节校招的官网我的个人中心的状态依然是投递简历,我主动投递的部门那边的流程就卡在那里了。不得不说字节的效率是真的高,要是`All in`的话我觉得一个半周走完所有流程不是问题。面试的层次也挺清晰,一面基础、二面工程化、三面生活、`HR`面瞎聊,不过每一面至少都有一个算法题确实是挺顶的。从`2022.03.01`投递开始,`2022.03.16`拿到`offer`,既然也只有这一个`offer`,那就准备去上海了吧。

@@ -20,7 +20,7 @@

-蚂蚁是`okbug`非得让我投,然后正好当时差不多字节也快面完了,就可以继续我的双线程面试流程,然后我就投递了,蚂蚁的流程也是真的快,投递的当晚就给我打电话约面试然后给我发笔试题了,当然他给我挂的也快哈哈哈。关于面试的话,我的体验都是挺好的,一面面试官问的问题很广,无论是前端后端还是数据库运维方面都有涉及,但是我也只是略有涉猎而已,在面上的回答还行,再往下深入就不太会了,二面面试官是大佬,面试也是聊天,而且挺爱笑的哈哈哈,但是我后期复盘的时候感觉我这场面试发挥的不好,感觉很多东西并没有展现出来,我反思了一下我觉得我也应该提及一下我相关的优势,不能只在面试官问的问题上回答,`HR`面的时候我觉得`HR`姐姐给我的建议也是非常中肯的,并且也跟我稍微分析了一下当前的校招和社招的形势,其实整体下来感觉都挺好的。我是在`HR`面后的第二天被挂了的,哈哈哈流程快不需要耽误时间等待了,不过我算是在`HR`面之后挂的,可能鱼池前边排序有很多`985211`而且`HC`很少吧,那也没办法了,蚂蚁这边没有感谢信,只有一个比较干巴巴的流程结束。
+蚂蚁是`okbug`非得让我投,然后正好当时差不多字节也快面完了,就可以继续我的双线程面试流程,然后我就投递了,蚂蚁的流程也是真的快,投递的当晚就给我打电话约面试然后给我发笔试题了,当然他给我挂的也快哈哈哈。关于面试的话,我的体验都是挺好的,一面面试官问的问题很广,无论是前端后端还是数据库运维方面都有涉及,但是我也只是略有涉猎而已,在面上的回答还行,再往下深入就不太会了,二面面试官是大佬,面试也是聊天,而且挺爱笑的哈哈哈,但是我后期复盘的时候感觉我这场面试发挥的不好,感觉很多东西并没有展现出来,我反思了一下我觉得我也应该提及一下我相关的优势,不能只在面试官问的问题上回答,`HR`面的时候我觉得`HR`姐姐给我的建议也是非常中肯的,并且也跟我稍微分析了一下当前的校招和社招的形势,其实整体下来感觉都挺好的。我是在`HR`面后的第二天被挂了的,流程快不需要耽误时间等待了,不过我算是在`HR`面之后挂的,可能鱼池前边排序有很多`985211`而且`HC`很少吧,那也没办法了,蚂蚁这边没有感谢信,只有一个比较干巴巴的流程结束。

diff --git "a/MyLife/\350\256\2602022\345\271\264\347\247\213\346\213\233\345\216\206\347\250\213.md" "b/MyLife/\350\256\2602022\345\271\264\347\247\213\346\213\233\345\216\206\347\250\213.md"
index a8f99ada..9594101e 100644
--- "a/MyLife/\350\256\2602022\345\271\264\347\247\213\346\213\233\345\216\206\347\250\213.md"
+++ "b/MyLife/\350\256\2602022\345\271\264\347\247\213\346\213\233\345\216\206\347\250\213.md"
@@ -9,7 +9,7 @@
图里可以看到,盲盒岗位共收到`10811`份简历,有`68`位同学进入到了最终的面试环节,有`3`位同学最终拿到了`offer`。虽然并不是所有的岗位都是这个样子的,但是也可见一斑了,再比如网传网易的后端校招开了之后,一天时间收到了两万份简历,然后网易下架了这个岗位。可能大家并不是特别在意这些比较大的厂,认为这些厂就是有激烈的竞争,但是现在的情况就是一层一层的卷,大厂卷不过去中厂卷,中厂卷不过去小厂卷,一层一层的卷,绝大部分普通人都会受到影响。当然今年也有比较给力的厂,比如比亚迪,为这惨淡的秋招点缀了一抹光彩。
-春招实习的总结我说过:“如果形势继续这么差的话,今年是过去十年最差的一年,又是未来最好的一年这句话可能将不会成为一句茶语笑谈了。今年我看到了一句非常让我触动的话,考研唯一的技巧:无他,唯早考耳。现在看来这句话可以用来形容的可多了,找工作是,考研也是,考公也是,等等等等。如果大家想考研的话,我觉得还是找好退路,居安思危,否则的话,怕是只能往死里卷了。”,这次秋招又听到了一句话,这就是非常具体了哈哈哈哈:磨刀不误砍柴工,读完硕士找不到工。
+春招实习的总结我说过:“如果形势继续这么差的话,今年是过去十年最差的一年,又是未来最好的一年这句话可能将不会成为一句茶语笑谈了。今年我看到了一句非常让我触动的话,考研唯一的技巧:无他,唯早考耳。现在看来这句话可以用来形容的可多了,找工作是,考研也是,考公也是,等等等等。如果大家想考研的话,我觉得还是找好退路,居安思危,否则的话,怕是只能往死里卷了。”,这次秋招又听到了一句话,这就是非常具体了:磨刀不误砍柴工,读完硕士找不到工。
再说回我自己吧,对于我自己来说,秋招也是极其的惨烈,我秋招投了`32`家,再加字节的转正就算`33`家,一共`10`家公司给了面试机会,其他的公司不是简历挂就是笔试挂,流程走到终面的一共`6`家,最终拿到了`5`个`offer`。今年情况确实是太差了,跟找实习完全不是一个难度了,去年找实习投了三家拿了一个腾讯的`offer`,今年找实习投了三家拿了一个字节的`offer`,秋招投了`33`家,拿了字节、顺丰、携程、拼多多、`360`的`offer`。
@@ -23,7 +23,7 @@