(给前端学加星标,数据库中并没有立即出现更改或保存完的新数据。所以一度怀疑spring 的事务失效了。那么这篇文章就来总结一下,提升前端技能.)
前言
家好,家给家造成 “spring事务失效”错觉的 几个常见场景,我是林三心,然后对症下药。Let's GO!!!以本人的经历中遇到的问题,这几天发生了很多事(具体是啥我就不说了),概分有以下几个场景:数据库引擎是否支持事务(Mysql 的 MyIsam引擎不支持事务);注解所在的类是否被加载为 Bean(是否被spring 管理);注解所在的方法是否为 public 修饰的;是否存在自身调用的问题;所用数据源是否加载了事务管理器;@Transactional的扩展配置propagation是否正确。下面展开分析每一个场景:数据库引擎不支持事务这里以 MySQL 为例,这些事,其 MyISAM 引擎是不支持事务操作的,吓得我把我这些年珍藏的都拿出来整理了一遍,InnoDB 才是支持事务的引擎,巴不得能多总结出一道是一道,一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档:https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,我拿出了我的笔记,之前默认的都是:MyISAM,并且使劲回忆,所以这点要值得注意,终于悟出了这50道(咱不要太俗哈,底层引擎不支持事务再怎么搞都是白搭。没有被 Spring 管理如下面例子所示:如果此时把 @Service 注解注释掉,不叫面试题,咱叫知识点)
image.png
荣耀黄金
1. Vue的优点?Vue的缺点?
优点:渐进式,组件化,轻量级,虚拟dom,响应式,单页面路由,数据与视图分开
缺点:单页面不利于seo,不支持IE8以下,首屏加载时间长
2. 为什么说Vue是一个渐进式框架?
渐进式:通俗点讲就是,你想用啥你就用啥,咱也不强求你。你想用component就用,不用也行,你想用vuex就用,不用也可以
image.png3. Vue跟React的异同点?
相同点:
1.都使用了虚拟dom
2.组件化
3.都是单向数据流(父子组件之间,不建议子修改父传下来的数据)
4.都支持服务端渲染
不同点:
1.React的JSX,Vue的template
2.数据变化,React手动(setState),Vue自动(初始化已响应式处理,Object.defineProperty)
3.React单向绑定,Vue双向绑定
4.React的Redux,Vue的Vuex
4. MVVM是什么?和MVC有何区别呢?
MVC
Model(模型):负责从数据库中取数据
View(视图):负责展示数据的地方
Controller(控制器):用户交互的地方,例如点击事件等等
思想:Controller将Model的数据展示在View上
image.png
MVVM
VM:也就是View-Model,做了两件事达到了数据的双向绑定 一是将【模型】转化成【视图】,即将后端传递的数据转化成所看到的页面。实现的方式是:数据绑定。二是将【视图】转化成【模型】,即将所看到的页面转化成后端的数据。实现的方式是:DOM 事件。
思想:实现了 View 和 Model 的自动同步,也就是当 Model 的属性改变时,我们不用再自己手动操作 Dom 元素,来改变 View 的显示,而是改变属性后该属性对应 View 层显示会自动改变(对应Vue数据驱动的思想)
image.png
区别
整体看来,MVVM 比 MVC 精简很多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作 DOM 元素。因为在 MVVM 中,View 不知道 Model 的存在,Model 和 ViewModel 也观察不到 View,这种低耦合模式提高代码的可重用性
Vue是不是MVVM框架?
Vue是MVVM框架,但是不是严格符合MVVM,因为MVVM规定Model和View不能直接通信,而Vue的可以做到这点
5. Vue和JQuery的区别在哪?为什么放弃JQuery用Vue?
1.jQuery是直接操作DOM,Vue不直接操作DOM,Vue的数据与视图是分开的,Vue只需要操作数据即可
2.jQuery的操作DOM行为是频繁的,而Vue利用虚拟DOM的技术,提高了更新DOM时的性能
3.Vue中不倡导直接操作DOM,者只需要把分精力放在数据层面上
4.Vue集成的一些库,提高效率,比如Vuex,Router等
6. Vue的作者是谁?声说出它的名字!!!
他的名字就是:鱿鱼西
永恒钻石
7. 为什么data是个函数并且返回一个对象呢?
之所以只一个函数,是因为一个组件可能会多处调用,而每一次调用就会执行并返回新的数据对象,这样,可以避免多处调用之间的。
8. 使用过哪些Vue的修饰符呢?
可以看我这篇文章「百毒不侵」面试官最喜欢问的13种Vue修饰符[2]
截屏2021-07-11 下午9.56.53.png9. 使用过哪些Vue的内指令呢?
image.png10. 组件之间的传值方式有哪些?
父组件传值给子组件,子组件使用进行接收
子组件传值给父组件,子组件使用对父组件进行传值
组件中可以使用和获取到父组件实例和子组件实例,进而获取数据
使用和,在对一些组件进行二次封装时可以方便传值,例如A->B->C
使用获取组件实例,进而获取数据
使用进行状态管理
使用进行跨组件触发事件,进而传递数据
使用和,官方建议我们不要用这个,我在看源码时发现量使用
使用浏览器本地缓存,例如
11. 路由有哪些模式呢?又有什么不同呢?
hash模式:通过后面的内容的更改,触发事件,实现路由切换
history模式:通过和切换url,触发事件,实现路由切换,需要后端配合
12. 如何设置动态class,动态style?
动态class对象:
动态class数组:
动态style对象:
动态style数组:
13. v-if和v-show有何区别?
1.是通过控制dom元素的删除和生成来实现显隐,每一次显隐都会使组件重新跑一遍生命周期,因为显隐决定了组件的生成和销毁
2.是通过控制dom元素的css样式来实现显隐,不会销毁
3.频繁或者数量显隐使用,否则使用
14. computed和watch有何区别?
1.是依赖已有的变量来计算一个目标变量,多数情况都是凑在一起计算出,并且具有,依赖值不变的情况下其会直接读取缓存进行复用,不能进行
2.是某一个变量的变化,并执行相应的回调函数,通常是的变化决定的变化,可以进行
3.简单记就是:一般情况下是,是
15. Vue的生命周期,讲一讲?
image.png16. 为什么v-if和v-for不建议用在同一标签?
在Vue2中,优先级是高于的,咱们来看例子
上面的写法是和同时存在,会先把7个元素都遍历出来,然后再一个个判断是否为3,并把3给隐藏掉,这样的坏处就是,渲染了无用的3节点,增加无用的dom操作,建议使用computed来解决这个问题:
17. vuex的有哪些属性?用处是什么?
image.png
State:定义了应用状态的数据结构,可以在这里设置默认的初始状态。
Getter:允许组件从 Store 中获取数据,mapGetters 辅助函数仅仅是将 store 中的 getter 映射到计算属性。
Mutation:是唯一更改 store 中状态的方法,且必须是同步函数。
Action:用于提交 mutation,而不是直接变更状态,可以包含任意异步操作。
Module:允许将单一的 Store 拆分为多个 store 且同时保存在单一的状态树中。
至尊星耀
18. 不需要响应式的数据应该怎么处理?
在我们的Vue中,会有一些数据,从始至终都,这种,既然,那也就了,不然只会做一些无用功消耗性能,比如一些写死的下拉框,写死的表格数据,这些数据量的,如果都进行响应式处理,那会消耗量性能。
19. watch有哪些属性,分别有什么用?
当我们一个基本数据类型时:
当我们一个引用数据类型时:
20. 父子组件生命周期顺序
父beforeCreate -> 父created -> 父beforeMount -> 子beforeCreate -> 子created -> 子beforeMount -> 子mounted -> 父mounted
21. 对象新属性无法更新视图,删除属性无法更新视图,为什么?怎么办?
原因:没有对对象的新属性进行属性劫持
对象新属性无法更新视图:使用,组件中
删除属性无法更新视图:使用,组件中
22. 直接arr[index] = xxx无法更新视图怎么办?为什么?怎么办?
原因:Vue没有对数组进行的属性劫持,所以直接arr[index] = xxx是无法更新视图的
使用数组的splice方法,
使用
23. 自定义指令
建议看这篇文章8个非常实用的Vue自定义指令[3]
24. 插槽的使用以及原理?
建议看我这篇文章「Vue源码学」你真的知道插槽Slot是怎么“插”的吗[4]
25. 为什么不建议用index做key,为什么不建议用随机数做key?
举个例子:
用和用都是同理,每次都在变,做不到专一性,很,也很消耗性能,所以,拒绝,选择
26. 说说nextTick的用处?
我举个例子,在vue中:
我们修改了三个变量,那问题来了,是每修改一次,DOM就更新一次吗?不是的,Vue采用的是的策略,通俗点说就是,多次修改,会进行一次,这样才能节性能嘛
看懂了上面,那你应该也看得懂下面的例子了吧:
答案是“小林”,前面说了,Vue是,所以数据一更新,视图却还没更新,所以拿到的还是上一次的旧视图数据,那么想要拿到最新视图数据怎么办呢?
27. Vue的SSR是什么?有什么好处?
就是服务端渲染
基于服务环境,所有代码在服务端渲染
数据返回给前端,然后前端进行“激活”,即可成为浏览器识别的html代码
首次加载更快,有更好的用户体验,有更好的seo优化,因为爬虫能看到整个页面的内容,如果是vue项目,由于数据还要经过解析,这就造成爬虫并不会等待你的数据加载完成,所以其实Vue项目的seo体验并不是很好
最强王者
28. Vue响应式是怎么实现的?
整体思路是数据劫持+观察者模式
对象内通过 方法,使用 将属性进行劫持(只会劫持已经存在的属性),数组则是通过重写数组方法来实现。当页面使用对应属性时,每个属性都拥有自己的属性,存放他所依赖的 (依赖收集),当属性变化后会通知自己对应的 去更新(派发更新)。
想详细了解过程,建议阅读我的Vue源码解析系列[5]
29. 为什么只对对象劫持,而要对数组进行方法重写?
因为对象最多也就几十个属性,拦截起来数量不多,但是数组可能会有几百几千项,拦截起来非常耗性能,所以直接重写数组原型上的方法,是比较节性能的方案
30. Vue的模板编译原理?
因为这个问题讲起来可能比较长,所以:
建议看我这篇「Vue源码学\(二\)」你不知道的-模板编译原理[6]
31. Vue的computed和watch的原理?
因为这个问题讲起来可能比较长,所以:
建议看我这篇「Vue源码学\(四\)」立志写一篇人人都看的懂的computed,watch原理[7]
32. Vue.set方法的原理?
33. Vue.delete方法的原理?
34. nextTick的原理?
35. key有什么用?说说diff算法吧?
直接看这篇吧:为什么 Vue 中不要用 index 作为 key?(diff 算法详解)[8]
我讲的没他好
冷门的知识点
36. 如果子组件改变props里的数据会发生什么
改变的props数据是基本类型
如果修改的是基本类型,则会报错
0458e2ff1538ee85d42953cec9a94ca.png
改变的props数据是引用类型
37. props怎么自定义验证
38. watch的immediate属性有什么用?
比如平时created时要请求一次数据,并且当搜索值改变,也要请求数据,我们会这么写:
使用完全可以这么写,当它为时,会初始执行一次
39. watch一个对象时,如何排除某些属性的
下面代码是,params发生改变就重新请求数据,无论是a,b,c,d属性改变
但是如果我只想要a,b改变时重新请求,c,d改变时不重新请求呢?
40. 审查元素时发现data-v-xxxxx,这是啥?
image.png
这是在标记vue文件中css时使用scoped标记产生的,因为要保证各文件中的css不相互影响,给每个component都做了唯一的标记,所以每引入一个component就会出现一个新的'data-v-xxx'标记
41. computed如何实现传参?
42. vue的hook的使用
同一组件中使用
这是我们常用的使用定时器的方式
上面做法不好的地方在于:得全多定义一个timer变量,可以使用hook这么做:
7.2 父子组件使用
如果子组件需要在mounted时触发父组件的某一个函数,平时都会这么写:
使用hook的话可以更方便:
43. provide和inject是响应式的吗?
44.Vue的el属性和$mount优先级?
比如下面这种情况,Vue会渲染到哪个节点上
这是官方的一张图,可以看出和同时存在时, >
image.png45. 动态指令和参数使用过吗?
46. 相同的路由组件如何重新渲染?
人员经常遇到的情况是,多个路由解析为同一个Vue组件。问题是,Vue出于性能原因,默认情况下共享组件将不会重新渲染,如果你尝试在使用相同组件的路由之间进行切换,则不会发生任何变化。
如果依然想重新渲染,怎么办呢?可以使用
47. 自定义v-model
默认情况下,v-model 是 @input 事件侦听器和 :value 属性上的语法糖。但是,你可以在你的Vue组件中指定一个模型属性来定义使用什么事件和value属性——非常棒!
48. 如何将获取data中某一个数据的初始状态?
在中,有时候需要拿初始状态去计算。例如
49.为什么不建议v-for和v-if同时存在
上面的写法是v-for和v-if同时存在,会先把7个元素都遍历出来,然后再一个个判断是否为3,并把3给隐藏掉,这样的坏处就是,渲染了无用的3节点,增加无用的dom操作,建议使用computed来解决这个问题:
50.计算变量时,methods和computed哪个好?
会好一些,因为computed会有。例如index由0变成1,那么会触发视图更新,这时候methods会重新执行一次,而computed不会,因为computed依赖的两个变量num和price都没变。
Sunshine_Lin
点赞和在看就是最的支持