java、vue面试经理
2020-01-13 23:00:10 20 举报
AI智能生成
java vue 真实面试经历
作者其他创作
大纲/内容
待续...
进程和线程
<ul><li><p><b>进程</b>就是正在进行的程序,进程是操作系统控制的基本运行单元;</p>-JVM虚拟机占用一个进程,但是它至少包含了一个用户和几个守护线程。<br></li><li>谷歌浏览器正在运行着,它就是一个进行中的程序,也就是进程。进程中独立运行的子任务就是一个<font color="#c41230">线程</font>。像QQ.exe运行的时候就有很多子任务在运行,比如聊天<font color="#c41230">线程</font>、下载文件<font color="#f15a23">线程</font>等。<br></li></ul><p></p>1、<b>进程</b>是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位) 2、<b>进程</b>有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。 而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。 3、<font color="#c41230">线程</font>之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行。不过如何处理好同步与互斥是编写多线程程序的难点。 4、但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。
组件传值
原则
<font color="#16884a" style="font-size: inherit;"><b>"props down , events up"</b></font><span style="font-size: inherit;">,在Vue中,父子组件的关系可以总结为</span><font color="#00a650" style="font-size: inherit;"><b>prop向下传递</b></font><span style="font-size: inherit;">,</span><b style="font-size: inherit;"><font color="#00a650">事件向上传递。</font></b><span style="font-size: inherit;">父组件通过prop给子组件下发数据,子组件通过事件给父组件发送信息。</span><br>
父组件->子组件
<ol><li>明白怎么在父页面中向子组件中传值?<br></li></ol><span style="font-size: inherit;">在子组件标签上冒号:或<font color="#16884a">v-bind</font>绑定一个自己定义的<font color="#fdb813">key</font>。</span><br><ol><li>要知道如何在子组件中接受父页面传过来的值,有几点需要了解:<br></li></ol>子组件要显式的用<b><font color="#80bc42">props</font></b>选项声明它的key,之后才能拿到<font color="#80bc42">value</font>。
子组件->父组件
<ul><li>每个Vue实例都实现了事件接口:使用v-on(evntName)监听事件;<br></li><li>使用<font color="#fdb813">$<b>emit</b>(</font>eventName,optionalPayload)触发事件。<br></li><li>另外,父组件可以在使用子组件的地方直接用v-on来监听子组件触发的事件。<br></li></ul><ol><li>父组件在组件上,给子组件标签上定义一个自定义事件@<font color="#fdb813"><b>child</b></font>="<font color="#fdb813"><b>fromChild</b></font>",事件名为<b><font color="#fdb813">fromChild</font></b>(data)用于接受子组件传过来的message值, this.message =<b><font color="#662c90"> </font><font color="#b296c7">data</font></b>;等待被子组件调用。<br></li><li>子组件是一个buttton按钮,并为其添加了一个<font color="#fdb813"><b>click</b></font>事件,当点击的时候使用$<b><font color="#fdb813">emit</font></b>()触发事件, this.$<font color="#fdb813"><b>emit</b></font>('child', this.<b><font color="#b296c7">message</font></b>);把message传给父组件。<br></li></ol>
设计模式23种
创建型模式
共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式
共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式
共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
而外两种:并发型模式和线程池模式
vue跨域配置方式
代理
跨域问题核心就是设置代理devServer.proxy,然后用axios或者fetch来访问
axios
1.配置BaseUrl:在全局入口配置BaseUrl=/api,每发送一个请求会携带你配置的路径/api
2.配置代理:vue.config.js(或者config/index.js)下配置代理,路径规则、目标接口、changeOrigin:true
vue菜单权限访问权限
简介:动态加载菜单,将从后端获取到的用户数据和菜单树放在store里。“动态添加路由”和“导航守卫”
前端<b>router.js</b>中只写所有人可以访问的路由表,比如<b>login和404</b>页面等。其他所有的组件资源全部写到一个新的components.js文件中,然后通过<b>后端</b>返回的<b>menuData</b>去<b>映射符合components.js</b>中的<b>key</b>,如果有对应的,就把它<b>动态添加到router</b>中,通过<b>addRoutes</b>添加。动态添加路由这个方法要写到<b>导航守卫beforeEach</b>这个钩子函数中。<b>导航守卫</b>的意思是我路由跳转到<b>下个页面之前</b>要做些什么。就是说我们登录后会跳到dashboard页面,在进到这个页面之前我们需要将后端请求回来的<b>menuData进行二次封装</b>,把他根据权限返回回来的data与我们前端components.js去做map匹配,将最终的数据通过<b>addRoutes来push</b>到我们的路由中,<b>之后</b>才能进到我们的<b>dashborad</b>页面,再通过dashborad页面进到对应的page页面,就是说我们把所有的权限控制全在dashboard页面进入之前就做完了。这里面还有一个小的优化的点:当我们通过前面说的浏览器菜单栏访问到非权限页面或者不存在的页面时,需要根据vue-router中的匹配优先级来最后addRoutes 404和*这个页面,这样就可以直接到达404页面而非空页面。
登录时从后台得到菜单数据navData和路由数据routerData把它存进sessionStorage防止刷新页面时丢失,
数据访问权限
SpringSecurity
功能权限/访问权限/菜单权限/拦截器过滤器
WebSecurityConfigurerAdapter自定义安全策略/AuthenticationManagerBuilder自定义策略
配置实现WebSecurityConfigurerAdapter并开启认证模式@EnableWebSecurity
antMatchers配置权限路径,hasRole配置角色
0 条评论
下一页