智乐活java面经
线上面试,远程办公模式。应该是 kpi 面,临时通知业务调整,取消岗位招聘
一面-笔试
一、逻辑题:
- 现在有 1011 种蘑菇,其中 1 种是毒蘑菇。人一旦吃了微量的毒蘑菇,就会在 72 小时后发作身亡。现在用松鼠做试验,从开始喂松鼠计时,要在 72 小时后马上找出毒蘑菇,问最少需要多少只松鼠?(需要给出解题过程) 请在「答题卡」作答,并通过直播清晰表述你的思路和分析过程。另外,「答题卡」中也尽量留下答题过程, 因为思路比结果重要。只有答案,不说思路或分析过程,不得分。
解题思路:
将 1011 种蘑菇编号为 0 到 1010。 每只松鼠代表一个二进制位,从右到左编号为 0 到 9。 每种蘑菇的编号转换为二进制表示,然后根据二进制的值来决定是否喂给对应的松鼠。 72 小时后,根据松鼠的生死情况,可以确定毒蘑菇的编号。 具体步骤: 将 1011 种蘑菇编号为 0 到 1010。 每只松鼠代表一个二进制位,从右到左编号为 0 到 9。 对于每种蘑菇,将其编号转换为二进制表示,然后根据二进制位的值来决定是否喂给对应的松鼠。 如果二进制位为 1,则喂给对应的松鼠。 如果二进制位为 0,则不喂给对应的松鼠。 72 小时后,根据松鼠的生死情况,可以确定毒蘑菇的编号。 如果松鼠死了,则对应的二进制位为 1。 如果松鼠活着,则对应的二进制位为 0。
囚帽难题
一串数字正确的数是一个三位数,且必定是这串数字中从左到右连续的,猜到正确数字的概率
二、专业相关题目
java 集合:
主要涉及到集合去重、数组分离等集合相关操作,需要熟悉集合 API
mybatis:
1.Mybatis 一级缓存和二级缓存的区别
一级缓存:一级缓存是 MyBatis 的默认缓存,它在每个 SqlSession 中都是独立的。一级缓存的作用范围是 SqlSession 的生命周期。当 SqlSession 关闭时,一级缓存中的数据会被清空。一级缓存主要用于减少对数据库的频繁访问,提高查询效率。
二级缓存:二级缓存是 MyBatis 的全局缓存,它在多个 SqlSession 之间共享。二级缓存的作用范围是整个应用程序。二级缓存可以配置为全局开启或关闭,也可以在每个命名空间中单独配置。二级缓存主要用于减少对数据库的频繁访问,提高查询效率,特别是在多用户环境中。
2.#{}和${}的区别
#{} 是 MyBatis 的预编译处理,它会将 SQL 中的 #{} 替换为预编译语句的参数,可以防止 SQL 注入。#{} 会将参数值进行字符串拼接,如果参数是多个值,会用逗号分隔。
${} 是 MyBatis 的字符串替换,它会将 SQL 中的 替换为字符串,不会进行预编译处理。{} 替换为字符串,不会进行预编译处理。替换为字符串,不会进行预编译处理。{} 会直接将参数值拼接到 SQL 中,如果参数是多个值,会用逗号分隔。${} 不安全,容易导致 SQL 注入。
3.什么是 resultMap 和 resultType,以及区别(可以直接找答案,背下来)
vue:
- 简述 Vue.js 的生命周期函数及其执行顺序。
onBeforeMount - 组件挂载到 DOM 之前执行 onMounted - 组件挂载完成后执行(DOM 已渲染) onBeforeUpdate - 响应式数据变更导致 DOM 更新前执行 onUpdated - 响应式数据变更导致 DOM 更新后执行 onBeforeUnmount - 组件卸载前执行 onUnmounted - 组件卸载后执行
setup() → onBeforeMount → onMounted → (数据更新时)onBeforeUpdate → onUpdated → (组件销毁时)onBeforeUnmount → onUnmounted
- Vue.js 中的 v-bind 指令和 v-model 指令有什么区别?
v-bind 是单向绑定,将 vue 实例和 DOM 绑定,更新数据时 DOM 会更新,但是 DOM 的数据修改不会反向更新数据,v-model 是双向绑定,vue 实例和 DOM 相互绑定,数据更新 DOM 更新,而 DOM 被修改也会反向更新数据。
- 简述 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(状态管理⼯具)
- Vue.js 如何实现父子组件之间的数据传递?
父组件向子组件传递数据 - 使用 props,子组件预设要接受的数据,父组件通过元素属性单向绑定传递给子组件
子组件向父组件传递数据 - 使用自定义事件,子组件 emit 触发传递数据,父组件在绑定子组件的回调函数接收
v-model 双向绑定:父组件使用 v-model 指令绑定数据到子组件,子组件通过 props 接受属性,emits 触发事件更新数据。
refs:在子组件上设置 ref 属性,值为字符串,在当前组件中调用
provide/inject:在父组件使用 provide 传递数据,在子组件中使用 inject 接收传递的数据
简述 Vue.js 中的响应式原理。
如何在 Vue.js 中实现路由跳转?
Vue.js 中的 computed 和 watch 有什么区别?
Vue.js 中的 v-for 指令和 v-if 指令有什么区别? v-for 指令的优先级比 v-if 高,在同一个元素上使用这个两种指令 v-for 会先执行,
v-for :基于源数据多次渲染元素或模板块。此指令之值,必须使⽤特定语法 alias in expression,为当前遍历的元素提供别名,同时设置 独⼀⽆⼆的 key 。
v-if :根据表达式的真值来有条件的渲染元素,在切换时元素及它的数据绑定 / 组件被销毁并重建。
简述 Vue.js 中的 mixins 和 extends 的作用及其区别。
Vue.js 中的 keep-alive 组件有什么作用?如何使用?
二面-技术面
介绍你自己,然后的问题大概都是你最骄傲的事,遇到的困难怎么解决,有矛盾怎么解决,周围人对你的评价,你的职业规划 你目前对我们公司的了解是什么?
对于这个薪资你这边还有什么疑问吗?
除了这些,还有什么不了解想问的吗?
更新日志
8bd98-docs: 添加 blog/04_ARCHIVES 归档文档于
