---
url: /blog/rnlsbf6v/index.md
---
> 线上面试，远程办公模式。应该是 kpi 面，临时通知业务调整，取消岗位招聘

## 一面-笔试

### 一、逻辑题：

1. 现在有 1011 种蘑菇，其中 1 种是毒蘑菇。人一旦吃了微量的毒蘑菇，就会在 72 小时后发作身亡。现在用松鼠做试验，从开始喂松鼠计时，要在 72 小时后马上找出毒蘑菇，问最少需要多少只松鼠？（需要给出解题过程)
   请在「答题卡」作答，并通过直播清晰表述你的思路和分析过程。另外，「答题卡」中也尽量留下答题过程，
   因为思路比结果重要。只有答案，不说思路或分析过程，不得分。

解题思路：

将 1011 种蘑菇编号为 0 到 1010。
每只松鼠代表一个二进制位，从右到左编号为 0 到 9。
每种蘑菇的编号转换为二进制表示，然后根据二进制的值来决定是否喂给对应的松鼠。
72 小时后，根据松鼠的生死情况，可以确定毒蘑菇的编号。
具体步骤：
将 1011 种蘑菇编号为 0 到 1010。
每只松鼠代表一个二进制位，从右到左编号为 0 到 9。
对于每种蘑菇，将其编号转换为二进制表示，然后根据二进制位的值来决定是否喂给对应的松鼠。
如果二进制位为 1，则喂给对应的松鼠。
如果二进制位为 0，则不喂给对应的松鼠。
72 小时后，根据松鼠的生死情况，可以确定毒蘑菇的编号。
如果松鼠死了，则对应的二进制位为 1。
如果松鼠活着，则对应的二进制位为 0。

2. 囚帽难题

3. 一串数字正确的数是一个三位数，且必定是这串数字中从左到右连续的，猜到正确数字的概率

### 二、专业相关题目

java 集合：

主要涉及到集合去重、数组分离等集合相关操作，需要熟悉集合 API

mybatis：

1.Mybatis 一级缓存和二级缓存的区别

一级缓存：一级缓存是 MyBatis 的默认缓存，它在每个 SqlSession 中都是独立的。一级缓存的作用范围是 SqlSession 的生命周期。当 SqlSession 关闭时，一级缓存中的数据会被清空。一级缓存主要用于减少对数据库的频繁访问，提高查询效率。

二级缓存：二级缓存是 MyBatis 的全局缓存，它在多个 SqlSession 之间共享。二级缓存的作用范围是整个应用程序。二级缓存可以配置为全局开启或关闭，也可以在每个命名空间中单独配置。二级缓存主要用于减少对数据库的频繁访问，提高查询效率，特别是在多用户环境中。

2.#{}和${}的区别

`#{}` 是 MyBatis 的预编译处理，它会将 SQL 中的 `#{}` 替换为预编译语句的参数，可以防止 SQL 注入。`#{}` 会将参数值进行字符串拼接，如果参数是多个值，会用逗号分隔。

`${}` 是 MyBatis 的字符串替换，它会将 SQL 中的 替换为字符串，不会进行预编译处理。{} 替换为字符串，不会进行预编译处理。替换为字符串，不会进行预编译处理。{} 会直接将参数值拼接到 SQL 中，如果参数是多个值，会用逗号分隔。`${} `不安全，容易导致 SQL 注入。

3.什么是 resultMap 和 resultType，以及区别（可以直接找答案，背下来）

vue：

1. 简述 Vue.js 的生命周期函数及其执行顺序。

onBeforeMount - 组件挂载到 DOM 之前执行
onMounted - 组件挂载完成后执行（DOM 已渲染）
onBeforeUpdate - 响应式数据变更导致 DOM 更新前执行
onUpdated - 响应式数据变更导致 DOM 更新后执行
onBeforeUnmount - 组件卸载前执行
onUnmounted - 组件卸载后执行

setup() → onBeforeMount → onMounted →
（数据更新时）onBeforeUpdate → onUpdated →
（组件销毁时）onBeforeUnmount → onUnmounted

2. Vue.js 中的 v-bind 指令和 v-model 指令有什么区别?

v-bind 是单向绑定，将 vue 实例和 DOM 绑定，更新数据时 DOM 会更新，但是 DOM 的数据修改不会反向更新数据，v-model 是双向绑定，vue 实例和 DOM 相互绑定，数据更新 DOM 更新，而 DOM 被修改也会反向更新数据。

3. 简述 Vue.js 的组件通信方式及其优缺点。

* props：
  父传子，⾸先在⼦组件中使⽤ props，来接收对应的属性，⽽在⽗组件中使⽤⼦组件的地⽅，添加上⾯定义的属性。

  优点：单向数据流易于维护。可以设置默认值和校验规则，缺点：传递的实际上是只读数据，不能直接修改。多级组件需要透传。

* emit：

  子传父，⼦组件中声明对应的事件，当⼦组件触发事件，就会通过 emit(‘事件’ , ‘数据’)传递到，⽽在⽗组件中使⽤⼦组件的地⽅，添加上⾯定义的事件，这个可以获取⼦组件传来的值。
  优点：单向数据流易于维护，父组件可以灵活处理传递的数据。缺点：只能父子通信，事件可能有命名冲突。

* provide/inject：
  祖先组件提供 provide(键,值)，子组件 inject(键)来获取值来使用

  优点：跨层级组件通信，可以替代 props 透传方法。缺点：非响应式，依赖注入的数据来源可能不明确。

* eventBus：

  是事件总线，不论组件是不是⽗⼦关系，通过新建⼀个 Vue 事件 bus 对象，然后通过 bus.emit 触发事件，bus.on 监听触发的事件。缺点是不好维护。

* vuex:

  对于⼤型的项⽬来说往往是很必要的，尤其单⻚⾯应⽤，很多⻚⾯嵌套⻚⾯，关系很多。⽽使⽤ VUEX 就能便捷的统⼀管理。

* refs：

  在父组件使用 provide 传递数据，在子组件中使用 inject 接收传递的数据

vuex/pinia(状态管理⼯具)

4. Vue.js 如何实现父子组件之间的数据传递?

* 父组件向子组件传递数据 - 使用 props，子组件预设要接受的数据，父组件通过元素属性单向绑定传递给子组件

* 子组件向父组件传递数据 - 使用自定义事件，子组件 emit 触发传递数据，父组件在绑定子组件的回调函数接收

* v-model 双向绑定：父组件使用 v-model 指令绑定数据到子组件，子组件通过 props 接受属性，emits 触发事件更新数据。

* refs：在子组件上设置 ref 属性，值为字符串，在当前组件中调用

* provide/inject：在父组件使用 provide 传递数据，在子组件中使用 inject 接收传递的数据

5. 简述 Vue.js 中的响应式原理。

6. 如何在 Vue.js 中实现路由跳转?

7. Vue.js 中的 computed 和 watch 有什么区别?

8. Vue.js 中的 v-for 指令和 v-if 指令有什么区别?
   v-for 指令的优先级比 v-if 高，在同一个元素上使用这个两种指令 v-for 会先执行，

v-for ：基于源数据多次渲染元素或模板块。此指令之值，必须使⽤特定语法 alias in expression，为当前遍历的元素提供别名，同时设置 独⼀⽆⼆的 key 。

v-if ：根据表达式的真值来有条件的渲染元素，在切换时元素及它的数据绑定 / 组件被销毁并重建。

9. 简述 Vue.js 中的 mixins 和 extends 的作用及其区别。

10. Vue.js 中的 keep-alive 组件有什么作用?如何使用?

## 二面-技术面

1. 介绍你自己，然后的问题大概都是你最骄傲的事，遇到的困难怎么解决，有矛盾怎么解决，周围人对你的评价，你的职业规划
   你目前对我们公司的了解是什么？

2. 对于这个薪资你这边还有什么疑问吗？

3. 除了这些，还有什么不了解想问的吗？
