# interview-questions **Repository Path**: ljxh012/interview-questions ## Basic Information - **Project Name**: interview-questions - **Description**: 数智起源的线上题 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-05 - **Last Updated**: 2024-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # interview-questions #### 介绍 数智起源的线上题 #### 第一题 解题思路 运用反射的技术,实现深拷贝 1.遍历所有属性,先判断属性是否一致, 2.然后判断属性类型,如果是17大基本数据类型就直接赋值 是引用类型,则递归进去获取引用数据类型的属性去newInstance()后对其属性赋值 最终这样就可以实现循环引用的深拷贝 我有三个类,Student类,User类,IdCard类 在Student类中维护了idCard类,User类也维护了idCard类 结果: 将student类深拷贝给user对象,并且将idCard的通过递归去深拷贝 这个是我的运行结果 ![img_5.png](img_5.png) #### 第二题 这道题的思路: 利用全局监听器+filter过滤器实现权限控制 1.设置一个全局监听器,去获取controller类方法上的role注解 2.使用map类型做权限值的容器,用uri加上HTTP请求方法类型做map的key值,role权限的值做value值 这样就能根据uri+请求方法类型储存了每个方法的权限值 3.使用filter过滤器校验每次的请求, 获取请求的uri,用uri加HTTP请求方法类型去map容器中查找方法对应的role权限值 4.使用前端传过来的token从内存中获取用户信息,查询到用户所具有的权限, 判断用户具有的权限值是否大于等于被请求方法所需的role值 如果大于,则鉴权通过,放行 否则鉴权失败返回权限不足的消息 运行结果: 登录成功后返回一个token ![img_6.png](img_6.png) 请求头中没有携带token的时候,会鉴权失败,显示未登录 ![img_1.png](img_1.png) 普通用户携带token访问用户权限接口,鉴权通过,访问成功 ![img_7.png](img_7.png) 普通用户携带token访问高权限的方法的时候,鉴权不通过,访问失败 ![img_8.png](img_8.png) 换成管理员的token,鉴权通过, 访问成功 ![img_9.png](img_9.png) #### 第三题 解题思路: 获取两个数据库的表结构,表中的列结构,循环遍历去对比差异 1.获取两个数据库中的所有表 2.分别遍历两个数据库中的表,并与另一个数据库的表进行对比 3.如果有相同的表-》则获取两个表数据库中表的结构,继续分别遍历两个数据库中的表的字段的信息,并做对比 运行结果如图,我已经把输出结果通过io流打印到backend3.txt了,您可以直接查看该文件 ![img_4.png](img_4.png) ### 第四题 考察的是github的使用 执行命令克隆前端项目到本地 git clone https://github.com/yangzongzhuan/RuoYi-Vue3.git 安装tsc npm install typescript vue-tsc --save-dev 新增命令 ![img_10.png](img_10.png) 运行前端代码:npm run dev 后端也从git上克隆过来 https://gitee.com/y_project/RuoYi-Vue.git 运行后端 ![img_11.png](img_11.png) 访问127.0.0.1:端口号 输入 admin admin123 成功登录进后台 ![img_12.png](img_12.png) ### 第五题 考察的是vue组件之间通信的问题 1.使用Provide Inject进行组件之间的通信 Grandpa.vue ![img_13.png](img_13.png) Father.vue ![img_14.png](img_14.png) 女儿和儿子同理 2.使用Event Bus进行组件之间的通信 新建一个eventBus.js ![img_15.png](img_15.png) 在main.js中注册 ![img_16.png](img_16.png) Grandpa.vue ![img_17.png](img_17.png) Father.vue ![img_18.png](img_18.png) 女儿和儿子同理