前端银行外包面试宝典

5 阅读38分钟

个人介绍

面试官您好,我是黄伟,专注银行外包前端开发X年,核心技术栈为Vue3全家桶,熟练掌握银行前端开发的核心要点和外包项目的工作模式。

在过往银行外包项目中,我主要负责核心业务模块的前端开发、接口联调、安全加固和问题修复,重点落实了密码加密、敏感信息脱敏、防重复提交、路由权限控制等银行必备需求,严格遵循行内合规要求和代码规范,确保页面交互严谨、数据安全可控。

作为外包开发,我具备较强的沟通对接能力和快速适配能力,能快速理解行内需求和业务逻辑,高效配合行内团队完成需求评审、测试验证、上线验收等全流程工作,同时注重细节,主动排查潜在的安全隐患和体验问题,确保项目交付质量。我熟悉银行外包项目的时间节点管控和交付标准,能够承受一定的工作压力,高效完成各项开发任务,助力项目顺利推进

银行项目前端开发核心模块(全场景梳理)

银行前端和普通互联网前端完全不同,核心是安全、严谨、合规、高可用,所有模块都围绕资金交易、账户管理、风控、监管要求展开。

一、核心业务模块(最主要工作)

1. 账户与身份认证模块

银行最基础、最核心的入口

  • 登录 / 登出、多因素认证(短信、人脸、U 盾、令牌)
  • 身份核验、实名认证、人脸核身、OCR 识别身份证 / 银行卡
  • 密码管理、安全问题、设备绑定、登录日志
  • 个人 / 企业信息管理、资料修改、地址管理

2. 资金交易模块(核心中的核心)

所有和钱相关的页面、交互、校验

  • 转账汇款(同行、跨行、对公、对私)
  • 支付缴费(水电煤、话费、税费、物业费)
  • 信用卡还款、账单查询、分期
  • 大额交易校验、限额控制、交易密码
  • 交易结果页、回执、凭证下载

3. 存款 / 理财 / 投资模块

银行盈利相关前端

  • 活期 / 定期存款、存款产品购买
  • 理财产品列表、详情、风险评估、购买 / 赎回
  • 基金、贵金属、国债、保险代销页面
  • 收益展示、持仓明细、交易记录

4. 贷款模块

  • 额度申请、授信、征信授权
  • 贷款产品、利率展示、还款计划
  • 借据、合同签署(电子签章)
  • 还款、逾期管理

5. 银行卡管理

  • 储蓄卡 / 信用卡查询、挂失、冻结、解冻
  • 限额设置、支付开关、闪控管理
  • 换卡、补卡、邮寄进度查询

二、风控与安全模块(银行前端独有重点)

银行前端必须做安全,这是区别点:

  • 防钓鱼、防篡改、敏感信息加密
  • 交易风险提示、异常行为拦截
  • 短信 / 邮件 / APP 推送风控提醒
  • 登录环境检测、设备风险判断
  • 合规弹窗、风险告知、用户协议确认

三、运营与服务模块

1. 消息与通知

  • 站内信、交易推送、公告
  • 营销活动、优惠提醒、到期提醒

2. 客服与帮助

  • 在线客服、智能问答机器人
  • 常见问题、使用指南、视频教程

3. 网点与服务

  • 网点查询、ATM 查询、路线导航
  • 预约开户、预约取号、排队查询

四、后台 / 管理端模块(给银行员工用)

很多银行前端项目是给内部员工用的,工作量极大:

  • 员工登录、权限管理
  • 客户信息管理、工单系统
  • 业务审核、风控审核
  • 报表统计、数据可视化(交易、资金、用户)
  • 运营配置、活动上下架、公告发布

五、多端形态(银行前端会覆盖这些端)

  1. PC 网银(最传统、最严谨)
  2. 手机银行 H5/APP 内嵌页(主流)
  3. 微信银行 / 支付宝银行小程序
  4. 银行内部管理系统(中后台)
  5. 智能柜台前端(大厅机器)
  6. PAD 移动展业(客户经理办业务)

六、银行前端的技术特点(你必须知道)

  • 安全要求极高:加密、防 XSS、防 CSRF、防劫持
  • 交互极其严谨:每一步都有校验、提示、确认
  • 合规要求强:必须展示风险提示、协议、费率
  • 兼容性要求高:支持老旧浏览器、低版本手机
  • 稳定性优先:不能崩溃、不能白屏、不能丢数据

银行项目前端(网银、手机银行、柜面系统等),主要做 客户 / 柜员交互层,核心是 安全、稳定、合规、体验好

一、核心业务模块(最常开发)

1. 认证与安全中心(必做)
  • 登录 / 登出、会话超时、设备绑定
  • 短信验证码、人脸识别、指纹、令牌
  • 密码 / 手势 / 人脸修改、找回、锁定
  • 登录日志、异常提醒、风险拦截
2. 账户总览
  • 多账户:储蓄卡、信用卡、定期、理财、贷款
  • 余额、可用余额、冻结金额、昨日收益
  • 账户详情、开户行、卡号脱敏、状态(正常 / 挂失)
3. 交易与流水(高频)
  • 转账:同行 / 跨行、收款人管理、限额控制
  • 缴费:水电、话费、信用卡还款
  • 交易记录:筛选、分页、导出(Excel/PDF)
  • 余额不足、重复提交、超时重试、状态轮询
4. 存款与理财
  • 活期 / 定期 / 大额存单:存入、支取、转存
  • 理财列表、风险测评、购买 / 赎回、持仓明细
  • 基金、贵金属、外汇行情与交易
5. 贷款
  • 我的贷款、额度、还款计划、提前还款
  • 申请:资料填写、上传、进度查询
  • 合同、借据、还款提醒
6. 信用卡
  • 账单、还款日、最低还款、分期
  • 额度、临时调额、锁卡、挂失、补卡
  • 积分、权益、优惠券
7. 个人中心
  • 实名认证、信息修改、地址管理
  • 消息中心、推送、站内信
  • 客服、意见反馈、帮助中心
8. 后台 / 柜员端(银行内部)
  • 客户信息查询、开户、挂失、解冻
  • 业务审核、大额交易复核
  • 权限管理(RBAC)、操作日志、审计

前端必做业务模块(面试高频)

  1. 登录认证账号密码、短信验证码、图形验证码、人脸识别、会话超时、单点登录
  2. 账户中心我的账户、银行卡列表、余额展示、卡号脱敏、账户状态管理
  3. 转账汇款行内转账、跨行转账、收款人管理、转账限额、重复提交拦截、结果轮询
  4. 交易流水 / 明细列表、筛选、分页、导出 Excel/PDF、日期范围选择
  5. 理财 / 基金 / 存款产品列表、风险测评、购买赎回、持仓、收益展示
  6. 信用卡账单、还款日、分期、额度、积分、权益
  7. 个人中心信息管理、消息中心、操作日志、安全设置
  8. 柜员后台 / 管理端客户信息、业务审核、权限控制、操作留痕

三、前端高频组件(你一定要会说)

  • 表单校验(必填、格式、异步校验)
  • 表格(多选、分页、合计、导出)
  • 弹窗 / 步骤条(业务办理流程)
  • 下拉选择器、级联选择
  • 上传(身份证、银行卡、资料)
  • 数字输入框(金额、保留两位小数)
  • 日历、日期范围选择
  • 懒加载、下拉刷新、上拉加载
  • 加密键盘、密码框

二、前端技术与特殊要求

  • 技术栈:Vue3/React + TS + Pinia/Vuex + Element Plus/AntD/Vant

  • 架构:SPA、微前端、多端适配(PC/H5 / 小程序)

  • 安全:

    • 敏感信息加密传输
    • 防 XSS、防 CSRF、签名 / 验签
    • 输入严格校验、防注入
  • 体验:

    • 加载状态、骨架屏、错误重试
    • 弱网 / 断网处理、数据缓存
    • 操作确认、结果反馈、防重复提交

三、一句话总结

银行前端 = 账户 + 交易 + 理财 + 贷款 + 信用卡 + 安全认证 + 合规风控,特点:表单多、弹窗多、校验严、状态复杂、安全要求极高

Vue3 + 银行项目 面试高频题(高频到几乎必问)

  1. Vue3 相比 Vue2 有哪些主要改进?

    • 响应式从 definePropertyProxy
    • 支持 Tree-shaking
    • Composition API 更好逻辑复用
    • 更小体积、更好 TS 支持
    • 新生命周期(setup 替代 beforeCreate/created)
  2. script setup 有什么优势?

    • 更简洁
    • 声明即导出,无需 return
    • 更好 TS 类型推导
    • 组件注册更简单
  3. ref 和 reactive 的区别与使用场景?

    • ref:基础类型、简单值
    • reactive:对象 / 数组
    • 注意:reactive 解构丢失响应式,用 toRefs
  4. computed 和 watch 区别?

    • computed 有缓存,依赖变化才更新
    • watch 更适合异步、开销大操作
  5. watch 和 watchEffect 区别?

    • watch 需指定依赖
    • watchEffect 自动追踪,立即执行一次

(2)Vue3 进阶高频

  1. Vue3 响应式原理简单说一下( Proxy 拦截 get/set,收集依赖,触发更新。)

  2. **Vue3 自定义 hooks 怎么写?有什么好处?

    • **把复用逻辑抽离,如 useRequest、useForm、useAuth。
    • 好处:逻辑清晰、便于测试、减少组件臃肿。
  1. **Vue3 中 v-if 和 v-for 优先级?**Vue3 中 v-if 优先级更高,不建议同标签使用。

  2. setup 中怎么获取路由和 store?

    • useRouter / useRoute
    • usePinia + 对应 store
  3. Vue3 父子组件通信方式?

    • props / emit
    • v-model
    • defineExpose
    • provide / inject
    • mitt / pinia

(3)路由 & 权限(银行项目必问)

  1. 路由守卫有哪些?项目里怎么用?

    • beforeEach 权限校验、登录判断
    • afterEach 埋点、日志银行场景:未登录拦截、未授权页面拦截、敏感操作二次验证
  2. **动态路由怎么实现?

  • **后端返回菜单 → 前端过滤、addRoute 挂载。银行重点:按钮级权限、菜单权限、数据权限

(4)Pinia 状态管理

  1. Pinia 相比 Vuex 优势?

    • 简洁,无 mutation
    • 更好 TS
    • 无需命名空间
    • 天然支持组合式
  2. Pinia 数据持久化怎么做?pinia-plugin-persistedstate 配合 localStorage/sessionStorage。银行注意:敏感信息不能存在本地

(5)银行项目安全 & 业务必考题(非常重要)

  1. **前端密码怎么加密?**登录密码、交易密码:RSA 公钥加密后传给后端。

  2. XSS、CSRF 怎么防范?

    • XSS:转义、CSP、不渲染危险 HTML
    • CSRF:token、SameSite、Referer 校验银行项目必问。
  3. 敏感信息怎么处理?

    • 手机号、身份证脱敏显示
    • 禁止控制台打印
    • 禁止 localStorage 存明文
  4. **表单校验怎么做?**正则 + 异步校验(身份证、银行卡号 Luhn 算法)。

  5. **交易防重复提交怎么实现?**按钮禁用 + 防抖 + 接口幂等 + 状态锁。

  6. **银行项目常见性能优化?**路由懒加载、虚拟列表、图片懒加载、分包、gzip。

(6)工程化 & 打包

  1. **Vite 为什么比 Webpack 快?**依赖预构建 + esbuild 编译 + 按需加载。
  2. 环境变量怎么管理?.env.development/.env.production/.env.test银行多环境:开发、联调、UAT、生产、灰度。
  3. **代码规范怎么做?**ESLint + Prettier + Husky + lint-staged。

银行项目前端完整开发流程(行内 / 外包通用)

1. 需求阶段

  • 产品 PRD、原型
  • 参与需求评审(重点关注:合规、风控、安全提示)
  • 输出前端评估(页面、接口、权限、加密点)

2. 设计与排期

  • UI 设计稿(蓝湖 / 摹客)
  • 技术方案:路由、store、权限、加密方案
  • 排期、拆分任务

3. 开发阶段(标准流程)

  1. 搭建 / 拉取项目骨架
  2. 配置路由、权限、axios 拦截器
  3. 封装通用 hooks:useRequest、useForm、useAuth
  4. 页面开发
  5. 表单校验、按钮权限、脱敏展示
  6. 加解密逻辑接入
  7. 联调后端接口

4. 自测与联调

  • 自测:正常流程、异常流程、边界值
  • 接口联调:参数、错误码、状态码
  • 安全自测:明文、日志、重复提交

5. 提测与 Bug 修复

  • 提测到测试环境
  • 修复功能 Bug、体验 Bug、安全 Bug银行测试非常严:一笔交易要测几十条用例

6. 代码评审 & 合入

  • CR(Code Review)
  • 合并到 develop/test 分支
  • 禁止硬编码、禁止敏感信息提交

7. 灰度 / 上线

  • 打包构建
  • 部署到预发 → 灰度 → 生产
  • 上线验证、监控

8. 运维与复盘

  • 线上问题排查
  • 日志、监控、性能分析
  • 需求复盘

银行 Vue3 前端 10 道模拟面试题(标准答案版)

1. 你们银行项目用的什么技术栈?

**答:**项目采用 Vue3 + Vite + Element Plus 开发,状态管理用 Pinia,路由用 Vue Router4,接口用 Axios 封装,密码与敏感信息使用 RSA + AES 加密,代码规范用 ESLint + Prettier,多环境区分开发、测试、UAT、生产。

2. Vue3 响应式原理简单说下

**答:**Vue3 使用 Proxy 代理对象,拦截 get/set 等操作,在 get 时收集依赖,set 时触发依赖更新,实现响应式。相比 Vue2 的 Object.defineProperty,能监听数组、新增属性、删除属性,性能更好。

3. ref 和 reactive 区别,项目怎么选?

答:

  • ref 用于基础类型(string/number/boolean),访问需要 .value
  • reactive 用于对象和数组,不需要 .value,但解构会丢失响应式项目中:表单简单字段用 ref,复杂数据对象用 reactive,解构时用 toRefs。

4. 银行项目里路由权限怎么做?

答:

  1. 登录后获取用户角色 / 菜单列表
  2. 通过 addRoute 动态添加路由
  3. 全局路由守卫 beforeEach 校验是否登录、是否有权限
  4. 无权限跳 403 或登录页同时配合 按钮级权限指令,控制增删改查按钮显示隐藏。

5. Pinia 相比 Vuex 好在哪?

答:

  • 去掉 mutation,action 支持同步异步
  • 天然支持 TS,类型推导友好
  • 不需要命名空间,模块更清晰
  • 支持组合式 API,和 Vue3 更契合项目中用 pinia-plugin-persistedstate 做持久化,但敏感信息不存本地。

6. 银行前端密码怎么加密?为什么不能明文?

**答:**登录密码、交易密码使用 后端返回的 RSA 公钥加密,再传给后端。明文传输会被抓包,存在安全风险,银行等保要求必须加密,禁止明文传输、禁止明文打印日志。

7. 如何防止 XSS 和 CSRF?

答:

  • XSS:对用户输入转义,不直接使用 v-html,配置 CSP,过滤特殊字符
  • CSRF:接口携带 token,设置 SameSite,校验 Referer银行项目还会做环境检测、设备风险识别、异地登录提醒

8. 交易按钮怎么防止重复提交?

答:

  1. 点击后立即 disabled 禁用按钮
  2. 接口添加防抖 / 节流
  3. 请求加全局 loading,同一请求未返回不能再次发起
  4. 后端做幂等校验,前端传唯一请求序列号

9. 敏感信息(身份证、手机号)怎么展示?

**答:**前端做脱敏处理:

  • 手机号:138****1234
  • 身份证:110***********1234同时禁止在控制台打印、禁止存在 localStorage,接口返回也只返回脱敏后字段。

10. 银行项目表单校验有哪些难点?

答:

  • 银行卡号 Luhn 算法校验
  • 身份证合法性校验(长度、校验位、出生日期)
  • 金额输入限制:只能数字、两位小数、不能输入负数
  • 联动校验:产品类型变,校验规则跟着变
  • 提交前全表单校验,不通过阻止提交

银行项目 “难点 & 解决方案” 标准回答(面试加分)

1. 难点:权限体系复杂(菜单 + 按钮 + 数据权限)

**答:**项目权限粒度很细,不仅要控制菜单,还要控制按钮和数据范围。解决方案:

  • 登录后拉取权限码,全局存储
  • 封装自定义指令 v-permission 控制按钮显隐
  • 动态路由根据权限过滤
  • 数据权限通过接口参数控制展示范围最终实现完整的权限闭环。

2. 难点:交易流程严谨,校验多、弹窗多、状态复杂

**答:**转账、理财购买等流程步骤多、校验规则复杂。解决方案:

  • 把校验逻辑抽成 hooks,统一管理
  • 步骤状态用 Pinia 全局维护,避免组件间传值混乱
  • 统一错误提示与异常处理,提升体验
  • 边界值、异常流程全部覆盖自测,保证交易安全。

3. 难点:安全要求高,容易踩坑

**答:**银行对明文、日志、缓存要求非常严格。解决方案:

  • 所有敏感字段前端加密,禁止 localStorage 存敏感信息
  • 关闭 console 打印,禁止输出用户信息
  • 做防重复提交、防篡改、超时机制
  • 配合测试做安全扫描,及时修复风险点。

4. 难点:多人协作,代码规范混乱

**答:**项目人员多,容易风格不一致。解决方案:

  • 统一 ESLint + Prettier 规则
  • 使用 Husky 做提交前校验
  • 公共逻辑抽成 hooks / 工具函数
  • 定期 Code Review,保证代码质量。

技术基础面试题

面试官: 说一下Vue3相比Vue2的核心改进?

候选人: 第一,响应式从Object.defineProperty换成Proxy,能监听数组、新增删除属性,性能更好;第二,推出Composition API,逻辑复用更清晰;第三,打包体积更小,支持Tree-Shaking;第四,对TS支持更友好,生命周期优化,script setup语法更简洁高效。

面试官: ref和reactive的区别,项目里怎么使用?

候选人: ref用于基础数据类型,取值需要.value;reactive用于对象和数组,不需要.value,但是解构会丢失响应式,需要用toRefs处理。项目里表单单个字段用ref,复杂对象、表格数据用reactive。

面试官: watch和watchEffect的区别?

候选人: watch需要手动指定监听的数据源,不会立即执行;watchEffect会自动收集依赖,初始化就会执行一次,适合依赖不固定、需要自动监听的场景,比如表单联动、数据实时计算。

面试官: Vue3父子组件通信有哪些方式?

候选人: 常用props+emit、v-model、defineExpose、provide/inject,跨组件通信用Pinia,简单事件通信用mitt。


路由、状态管理专项题

面试官: 你们项目路由权限是怎么实现的?

候选人: 登录成功后获取用户角色和菜单权限列表,通过全局路由守卫beforeEach做登录校验、权限校验,无权限跳转403;通过addRoute动态挂载路由,同时封装自定义权限指令,控制页面按钮级别的显隐,完整实现菜单+按钮的权限管控。

面试官: Pinia相比Vuex有什么优势?

候选人: Pinia去掉了mutation,action支持同步异步,写法更简洁;天然支持TS,类型推导更友好;不需要命名空间,模块拆分更清晰;和Vue3组合式API完全契合,使用更灵活,项目里用持久化插件做非敏感数据缓存。

面试官: Pinia数据持久化需要注意什么?

候选人: 禁止存储密码、交易信息、身份证、手机号等敏感数据,只缓存用户基础信息、菜单权限等非敏感内容,敏感数据全部存在内存里,页面销毁就清空,符合银行安全规范。


银行安全、业务核心必考题

面试官: 银行项目密码、敏感信息怎么处理?

候选人: 登录密码、交易密码全部用后端返回的RSA公钥加密后再传输,绝对禁止明文传参;手机号、身份证号前端做脱敏展示,禁止控制台打印、禁止本地存储明文,所有敏感接口都做加密处理,符合等保要求。

面试官: 怎么防范XSS、CSRF攻击?

候选人: XSS方面,对用户输入内容做转义,不随意使用v-html,配置CSP策略,过滤特殊字符;CSRF方面,接口统一携带token,设置Cookie SameSite属性,校验请求来源,银行项目还会增加设备校验、环境检测、异地登录提醒。

面试官: 交易按钮怎么防止重复提交?

候选人: 第一,点击后立即禁用按钮,添加loading状态;第二,接口添加防抖,同一请求未完成不能再次发起;第三,前端生成唯一请求幂等号传给后端;第四,后端做幂等校验,多重保障避免重复交易。

面试官: 银行表单校验有哪些特殊要求?

候选人: 除了基础必填校验,还要做银行卡号Luhn算法校验、身份证合法性校验、金额格式限制(只能数字、两位小数、非负数)、联动规则校验,所有校验不通过绝对禁止提交,交易类表单必须二次确认弹窗。

面试官: 项目里遇到的最大难点是什么,怎么解决的?

候选人: 最大难点是银行权限体系复杂,需要同时控制菜单、按钮、数据权限,还有交易流程校验多、状态联动复杂。解决方案是封装统一的权限指令和工具函数,把校验逻辑抽成自定义Hooks,全局维护交易状态,拆分组件降低复杂度,全覆盖边界场景自测,保证业务稳定和安全合规。


工程化、项目流程题

面试官: 你们银行项目完整开发流程是什么?

候选人: 标准流程是需求评审→技术方案设计→开发搭建→页面开发→安全处理→接口联调→自测→提测→Bug修复→Code Review→预发布验证→灰度上线→线上监控,全程严格遵守银行合规和安全要求。

面试官: 项目怎么保证代码规范?

候选人: 项目配置ESLint+Prettier统一代码格式,Stylelint管控样式规范,用Husky做提交前校验,禁止不合规代码提交,同时定期做Code Review,保证团队代码风格统一、质量可控。

银行外包最爱问的技术点(高频 12 题)

1. 路由权限怎么做?

  • 路由表配置权限字段
  • 登录后获取角色权限
  • 全局守卫判断是否允许进入
  • 无权限跳 403

2. 按钮权限怎么实现?

  • 自定义指令 v-permission
  • 全局混入判断权限列表
  • 满足则显示,不满足则隐藏或禁用

3. 怎么防止重复提交?

  • 提交按钮立即 disable
  • 请求加防抖
  • 请求前生成唯一 key,接口返回前禁止再次发起
  • 后端做幂等校验

4. 敏感信息怎么脱敏?

  • 银行卡号:6228 **** **** 1234
  • 身份证:1101********1234
  • 手机号:138****1234
  • 前端过滤器 / 指令统一处理

5. Axios 怎么封装?

  • 请求拦截:加 token、加签名、加请求头
  • 响应拦截:统一处理成功 / 失败提示
  • 401 跳登录,500 提示系统异常
  • 全局 loading、错误捕获

6. 表单校验怎么做?

  • 必填校验
  • 金额格式(最多两位小数)
  • 手机号、身份证、银行卡号规则
  • 异步校验(如账户合法性)

7. 转账状态不确定怎么处理?

  • 提交后不直接判定成功失败
  • 定时轮询查询结果接口
  • 超时提示 “处理中,请稍后查询”

8. 登录过期怎么处理?

  • axios 拦截 401
  • 清除 token & 缓存
  • 跳转到登录页并提示登录已过期

9. 微前端在银行系统干嘛?

  • 把存款、贷款、信用卡、运营后台等多个系统
  • 整合到一个门户,独立部署、独立运行

10. 导出 Excel / 打印怎么实现?

  • 前端:xlsx 库生成
  • 后端:返回文件流,前端下载
  • 表格分页数据全部导出

11. 银行项目安全点有哪些?

  • 防 XSS:转义内容
  • 防 CSRF:token 校验
  • 密码、敏感信息加密传输
  • 接口签名防篡改
  • 操作日志留痕

12. 弱网 / 异常怎么处理?

  • 断网提示
  • 请求超时重试
  • 异常状态页(空数据、错误、加载中)
  • 防止页面卡死

Vue 基础(必问)

1. Vue2 和 Vue3 响应式区别

  • Vue2:Object.defineProperty 劫持对象属性,数组需重写方法,对象新增 / 删除属性不响应
  • Vue3:Proxy 代理整个对象,支持数组、对象新增删除,性能更好

2. ref 和 reactive 区别

  • ref:支持所有类型,取值要 .value,可整体替换
  • reactive:只能对象 / 数组,不用 .value,不能整体替换
  • 解构 reactive 会丢失响应式,ref 不会

3. watch 和 watchEffect 区别

  • watch手动指定依赖,懒执行,可拿新旧值
  • watchEffect自动收集依赖,立即执行,只能拿最新值

4. toRef /toRefs 作用

  • 解决 reactive 解构丢失响应式问题
  • toRef:把对象一个属性转 ref
  • toRefs:把对象所有属性批量转 ref

5. computed 和 watch 区别

  • computed:计算属性,有缓存,依赖变才重新计算
  • watch:监听属性,无缓存,适合异步 / 复杂逻辑

6. Vue3 生命周期

setup 内部:

  • onBeforeMount
  • onMounted
  • onBeforeUpdate
  • onUpdated
  • onBeforeUnmount
  • onUnmounted

7. 组件通信

  • 父子:props /emit
  • 爷孙:provide /inject
  • 兄弟:eventBus / 状态库
  • 全局:pinia/vuex

8. v-if 和 v-show

  • v-if:真正销毁 / 创建,切换开销大
  • v-show:只是 display:none,初始化开销大

9. v-for 为什么要 key

  • 给 Vue 标识节点,方便diff 算法复用节点,提升渲染效率
  • 不要用 index 做 key(顺序变化会错乱)

10. 双向绑定原理

  • 数据通过响应式更新视图
  • 视图通过 input 事件同步数据
  • v-model 本质是 :value + @input

二、项目实战(银行高频)

1. 路由权限

  • 路由配置 meta 权限字段
  • 全局路由守卫判断权限
  • 无权限跳 403 或登录页

2. 按钮权限

  • 自定义指令 v-permission
  • 登录后获取权限列表
  • 匹配不上则隐藏 / 禁用按钮

3. axios 封装

  • 请求拦截:加 token、签名、请求头
  • 响应拦截:统一提示、错误处理
  • 401 自动跳登录
  • 全局 loading、防重复提交

4. token 过期

  • 响应拦截判断 401
  • 清除本地存储
  • 跳转到登录页并提示

5. 防止重复提交

  • 按钮点击后禁用
  • 防抖节流
  • 请求加唯一标识,未返回前禁止重复请求

6. 敏感信息脱敏

  • 银行卡:6228 **** **** 1234
  • 身份证:1101********1234
  • 手机号:138****1234
  • 封装过滤器或函数统一处理

7. 转账状态不确定

  • 提交后不直接展示结果
  • 轮询查询接口
  • 超时提示 “处理中,请稍后查询”

8. 长列表优化

  • 虚拟列表
  • 分页加载
  • 图片懒加载
  • 减少不必要渲染

9. 导出 Excel

  • 后端返回文件流
  • 前端通过 a 标签下载
  • 或用 xlsx 库导出

10. 文件上传

  • 前端校验格式 / 大小
  • FormData 上传
  • 进度条、预览、删除、限制上传数量

三、银行安全题(必考)

1. XSS

  • 跨站脚本攻击,注入恶意脚本
  • 防御:转义特殊字符、使用 textContent、CSP

2. CSRF

  • 跨站请求伪造
  • 防御:token 验证、SameSite、校验 referer

3. 接口签名

  • 防止参数被篡改
  • 按规则拼接参数 + 密钥加密生成 sign
  • 后端验签

4. 敏感信息加密

  • 密码、身份证、卡号用 RSA/AES 加密
  • 不明文传输、不明文存 localStorage

5. 会话超时

  • 后端设置过期时间
  • 前端定时检测
  • 超时自动退出登录

6. 为什么用 TS

  • 类型约束,减少线上 bug
  • 代码提示强,便于维护
  • 银行系统要求严谨安全

JS 基础 & 手写题答案

1. 防抖(高频手写)

js

function debounce(fn, delay) {
  let timer = null
  return function (...args) {
    clearTimeout(timer)
    timer = setTimeout(() => fn.apply(this, args), delay)
  }
}

2. 节流

js

function throttle(fn, delay) {
  let flag = true
  return function (...args) {
    if (!flag) return
    flag = false
    setTimeout(() => {
      fn.apply(this, args)
      flag = true
    }, delay)
  }
}

3. 手机号脱敏

js

function maskPhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

4. 金额格式化

js

function formatMoney(num) {
  return Number(num).toFixed(2)
}

5. 深拷贝简单版

js

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') return obj
  const res = Array.isArray(obj) ? [] : {}
  for (let k in obj) {
    res[k] = deepClone(obj[k])
  }
  return res
}

六、工程化

跨域

  • 开发环境:devServer 代理
  • 生产:Nginx 反向代理

环境变量

  • .env.development / .env.production
  • 通过 import.meta.env/process.env 获取

七、银行场景题一句话答案

  1. 转账流程表单填写 → 校验 → 加密提交 → 等待结果 → 轮询 → 展示成功 / 失败
  2. 多步骤表单暂存每步 change 存 localStorage/pinia,进入页面自动回填
  3. 弱网处理断网提示、请求重试、异常状态页、防止重复提交
  4. 分页搜索页码、页数、搜索条件作为参数请求接口,重新渲染列表

银行移动端(H5 / 小程序 / APP 内嵌页)前端都做什么

一、登录与安全模块(必做)

  • 手机号快捷登录、密码登录、短信验证码
  • 手势密码、指纹登录、面容登录
  • 图形验证码、滑块验证
  • 会话超时、异地登录提醒、强制下线
  • 找回密码、重置密码、修改密码

二、账户总览模块

  • 银行卡列表(储蓄卡、信用卡)
  • 余额、可用余额、冻结金额、昨日收益展示
  • 卡号脱敏、一键复制、开户行信息
  • 账户挂失、解除挂失、升降级

三、转账汇款(核心业务)

  • 行内转账、跨行转账
  • 常用收款人管理、智能联想
  • 转账限额展示与判断
  • 转账结果页、处理中状态
  • 转账撤销、转账备注
  • 弱网 / 超时轮询查询结果

四、交易明细 / 流水

  • 按时间、金额、类型筛选
  • 上拉加载更多、下拉刷新
  • 流水详情、订单号、对手信息
  • 导出、分享、回显

五、生活缴费

  • 话费充值、流量充值
  • 水费、电费、燃气费
  • 物业费、宽带、有线电视
  • 缴费历史、常用缴费项

六、信用卡模块

  • 账单查询、还款日提醒
  • 账单分期、最低还款
  • 额度管理、临时调额
  • 积分查询、积分兑换
  • 信用卡还款

七、存款 / 理财 / 基金

  • 活期、定期、大额存单
  • 风险测评问卷
  • 理财产品列表、收益曲线
  • 购买、赎回、持仓明细
  • 基金行情、定投

八、贷款模块

  • 我的贷款、还款计划
  • 额度测算、申请借款
  • 身份认证、人脸核验
  • 资料上传(身份证、银行卡)
  • 提前还款、逾期记录

九、个人中心

  • 个人信息管理
  • 消息中心、推送通知
  • 安全设置(设备管理、登录保护)
  • 客服、意见反馈
  • 关于我们、版本更新

十、公共业务组件(移动端必做)

  • 金额输入键盘(自定义数字键盘)
  • 身份证 / 银行卡 / 手机号脱敏
  • 上传身份证正反面、OCR 识别
  • 多步骤表单(步骤条)
  • 弹窗协议、阅读倒计时
  • 下拉刷新、上拉加载
  • 空页面、加载中、异常页面

十一、安全与风控相关(银行特别看重)

  • 防重复提交
  • 敏感数据加密
  • 防截屏、防录屏提示
  • 操作留痕、行为日志
  • 风险交易拦截页面

我在银行移动端项目主要负责:

登录安全、账户总览、转账汇款、交易流水、生活缴费、信用卡、理财贷款、个人中心等 H5 页面开发,

熟练处理表单校验、脱敏展示、自定义键盘、多步骤流程、弱网处理、防重复提交、接口轮询等移动端常见需求。

Vue 中如何做移动端适配?

  • postcss-px-to-viewport 把 px 转 vw
  • 或 amfe-flexible + rem 适配
  • 禁止用户缩放:meta viewport

**移动端点击 300ms 延迟怎么解决?

  • 使用 fastclick 或 meta 设置 viewport
  • 现代浏览器默认已解决。 **H5 页面如何阻止下拉回弹 / 橡皮筋效果?

touchmove 阻止默认行为, 或用 CSS overscroll-behavior

业务难点 & 高频题(银行必考)

1. 转账页面金额输入怎么处理?

  • 只能输入数字和小数点
  • 最多两位小数
  • 禁止以小数点开头
  • 禁止输入多个小数点
  • 大数分隔显示 12,345.67

2. 移动端如何防止重复提交?

  • 按钮立即 disabled
  • 防抖控制
  • 请求加唯一标识,未返回前禁止再次提交
  • 后端做幂等

3. 转账 / 支付结果不确定怎么处理?

提交后进入处理中页面,定时轮询查询结果接口,超时提示 “处理中请稍后查询”。

4. 敏感信息如何脱敏?

  • 手机号:138****1234
  • 身份证:110***********1234
  • 银行卡:6228 **** **** 1234封装成过滤器或函数统一使用。

5. 移动端自定义数字键盘怎么做?

  • 自己写 div 模拟 0-9、小数点、删除
  • 监听点击,拼接金额字符串
  • 控制格式、光标位置目的:防止系统键盘被劫持、安全合规

6. H5 如何实现人脸识别 / 活体检测?

一般是接入 SDK:

  • 跳人脸 H5 页面
  • 调用相机
  • 按提示完成动作
  • 前端拿到 success/fail 回调前端主要做页面展示、状态跳转、结果回传

7. 多步骤表单怎么实现?

  • 步骤条进度展示
  • 每一步校验
  • 数据存在 pinia/localStorage
  • 支持返回修改、最终统一提交

8. 上传身份证 / 银行卡怎么做?

  • 调用相册 / 相机
  • 前端校验格式、大小
  • 压缩图片
  • FormData 上传
  • 回显、重传、删除

9. 弱网 / 接口异常怎么处理?

  • 展示 loading / 错误页
  • 失败重试按钮
  • 断网提示
  • 避免白屏、卡死

10. 登录过期 / 超时怎么做?

axios 拦截 401 → 清除 token → 跳登录页 → 提示 “登录已过期”。


三、安全类(银行特别爱问)

1. H5 页面如何防 XSS?

  • 渲染内容用 v-text 或转义
  • 不直接插入 innerHTML
  • 禁止外链恶意脚本

2. 如何防 CSRF?

请求带上 token,后端校验。

3. 密码、敏感信息怎么传?

前端用 AES/RSA 加密,绝不明文传输。

4. 如何防止页面被截屏 / 录屏?

前端做不到完全禁止,但可以:

  • 进入重要页面提示风险
  • 关键操作增加水印
  • 重要信息脱敏展示

四、CSS & 移动端坑点

1. 移动端 1px 边框怎么实现?

transform: scaleY (0.5)或使用 box-shadow 模拟。

2. 键盘弹起压住输入框怎么办?

  • scrollIntoView
  • 监听 resize 调整高度
  • 使用固定布局避免挤压

3. 移动端滚动不流畅?

-webkit-overflow-scrolling: touch;

4. 页面弹窗导致背景滚动穿透怎么解决?

弹窗打开时给 body 设置 overflow:hidden,或阻止 touchmove 默认。


五、手写题(现场常考)

1. 金额格式化(保留两位小数)

js

function formatMoney(val) {
  val = val.toString().replace(/[^0-9.]/g, '')
  if (val.split('.').length > 2) val = val.slice(0, -1)
  return Number(val || 0).toFixed(2)
}

2. 手机号脱敏

js

function maskPhone(phone) {
  return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2')
}

3. 防抖(搜索 / 输入用)

js

function debounce(fn, delay) {
  let timer
  return (...args) => {
    clearTimeout(timer)
    timer = setTimeout(() => fn(...args), delay)
  }
}

六、面试官最爱问的 “场景题”

  1. 转账过程中接口超时了你怎么处理? 不提示失败,进入处理中,轮询查询结果。
  2. 用户在转账时切后台 / 锁屏回来怎么办? 检查登录态,超时则重登,未超时继续操作。
  3. 为什么银行 H5 喜欢用自定义键盘? 安全,防止第三方键盘劫持、记录密码。
  4. 列表数据很多怎么优化? 下拉刷新、上拉加载、分页、图片懒加载。

银行移动端 H5 难点 + 标准回答(面试直接背)

1. 安全要求高(加密、签名、防篡改)

**问题:**银行项目对安全要求极高,密码、身份证、银行卡不能明文传输。

你的回答:

  • 前端使用 RSA 加密敏感字段,接口参数做 MD5/SHA 签名,防止被抓包篡改。
  • 本地不存明文,token 存在内存或安全存储。
  • 做 XSS 过滤、禁止执行外部脚本、关闭调试弹窗。
  • 会话超时自动退出,异地登录强制下线。

2. 防重复提交、交易一致性

**问题:**转账、缴费容易重复点击,弱网下会重复扣款。

你的回答:

  • 点击后立即 disable 按钮,加防抖控制。
  • 全局封装 请求锁,同一订单号未返回前禁止重复请求。
  • 后端做幂等,前端根据交易流水号轮询状态。
  • 避免前端直接判断成功失败,统一以查询接口为准。

3. 弱网、异常处理

**问题:**网络差、超时、接口异常导致页面卡死。

你的回答:

  • 封装 axios 统一处理超时、异常、断网提示。
  • 关键交易(转账 / 缴费)进入 处理中页面,不直接展示结果。
  • 提供 重试按钮,避免白屏和无反馈。
  • 弱网下做轻量交互,减少大图和请求量。

4. 自定义安全数字键盘

**问题:**不能用系统键盘,防止被劫持监听。

你的回答:

  • 封装了自定义安全键盘组件,支持数字、小数点、乱序键盘。
  • 控制金额只能输入数字,最多两位小数,自动格式化。
  • 处理光标定位、删除、输入长度限制。
  • 解决 iOS/Android 键盘弹出、页面滚动冲突问题。

5. 复杂多步骤表单

**问题:**开户、贷款、信用卡流程长,数据容易丢失。

你的回答:

  • 每一步表单实时 暂存到 Pinia 或 localStorage
  • 支持返回修改、重新进入页面自动回填。
  • 做全字段校验、联动校验、异步校验(如卡号合法性)。
  • 协议加倒计时,必须读完才能勾选下一步。

6. 敏感信息脱敏

**问题:**卡号、身份证、手机号必须脱敏展示。

你的回答:

  • 封装全局过滤器 / 函数:

    • 手机号:138****1234
    • 身份证:1101********1234
    • 银行卡:6228**** ****1234
  • 复制、分享、截图场景也做脱敏。

  • 日志和缓存严禁出现明文。


7. WebView 兼容性问题

**问题:**工行农行 App webview 版本低,iOS/Android 差异大。

你的回答:

  • 处理键盘弹起顶起页面、底部按钮被遮挡问题。
  • 修复橡皮筋回弹、滚动穿透、fixed 定位异常。
  • 针对老旧 webview 做兼容样式,避免布局错乱。
  • 统一弹窗、输入框、选择器交互规范。

8. 风控验证多,体验难平衡

**问题:**短信、人脸、滑块验证频繁,容易中断流程。

你的回答:

  • 风控跳转后支持原路返回,保留表单数据。
  • 验证失败自动重试,不丢失流程状态。
  • 合理设计 loading 和提示,不影响体验。

9. 证件上传 & OCR

**问题:**身份证上传模糊、过大、格式不对。

你的回答:

  • 前端做压缩、尺寸限制、格式校验。
  • 接入 OCR 识别,自动填充姓名、身份证号。
  • 处理反光、模糊、横屏拍摄等异常场景。

10. 交易状态多,容易展示错误

**问题:**转账 / 理财 / 贷款状态非常复杂。

你的回答:

  • 后端返回状态码,前端做状态映射统一展示文案。
  • 处理:处理中、成功、失败、待复核、过期、撤销等场景。
  • 避免写死逻辑,提高可维护性。

银行移动端 H5 面试真题(高频・场景化・带标准答案)

适合工行 / 农行 / 建行外包面试,直接背

一、安全与加密(必问)

  1. :银行 H5 如何防范 XSS、CSRF?:XSS 用 DOMPurify 清洗输入、禁止 innerHTML、CSP 策略;CSRF 用 SameSite=Strict、防伪造 Token、校验 Referer/Origin。
  2. :敏感信息(密码、卡号)如何传输与存储?:前端 RSA/AES 加密后传输,仅存密文;Token 放内存或 HttpOnly Cookie,禁用明文与本地存储。
  3. :如何实现接口防篡改与防抓包?:参数 SHA256 签名 + 时间戳防重放;强制 HTTPS + 证书校验;关键接口加设备指纹与灰度拦截。

二、弱网与异常(高频)

  1. :弱网 / 断网时如何保证交易不重复、不失败?:按钮禁用 + 防抖 + 请求锁;唯一订单号 + 后端幂等;“处理中” 中间态 + 轮询查询状态,前端不盲判成功。
  2. :接口超时 / 失败的重试策略有哪些?:指数退避 + 最大重试次数;非幂等操作(支付)仅一次重试;失败时给重试按钮并提示原因。

三、自定义安全键盘(银行特色)

  1. :为什么不用系统键盘?如何实现自定义数字键盘?:系统键盘易被劫持 / 监听;自定义乱序 / 随机键盘,限制金额两位小数,处理光标与删除,兼容 iOS/Android 键盘顶起。
  2. :自定义键盘遇到的兼容性问题怎么解决?:统一封装组件,针对老旧 WebView 做样式兼容,处理 fixed 定位与滚动冲突,监听键盘弹起调整布局。

四、复杂表单与多步骤(必问)

  1. :开户 / 贷款流程长,数据丢失如何处理?:实时暂存到 Pinia / 内存,支持返回修改与恢复;全字段联动校验,协议阅读倒计时 + 强制勾选。
  2. :如何做异步校验(如卡号合法性)?:输入防抖 + 远程校验;失败时高亮提示并阻断下一步;前端与后端双重校验。

五、WebView 兼容性(高频)

  1. :农行 / 工行 App WebView 老旧的兼容性问题有哪些?:键盘顶页面、fixed 异常、滚动穿透、橡皮筋回弹;用 viewport + 弹性布局适配,做样式降级与特性检测。
  2. :iOS 与 Android 差异如何处理?:统一交互规范,针对系统差异做 hack;用 PostCSS/Autoprefixer 自动兼容,测试覆盖主流机型。

六、状态管理与体验(高频)

  1. :转账 / 理财状态多,如何避免展示错误?:后端状态码 + 前端映射统一文案;处理 “处理中 / 成功 / 失败 / 待复核” 全场景,用状态机管理避免逻辑混乱。
  2. :如何平衡风控严格与用户体验?:风控跳转后保留表单数据,支持原路返回;失败自动重试,合理设计 Loading 与提示,减少中断。

七、图片 / OCR 与性能(常问)

  1. :证件上传(身份证 / 人脸)如何压缩与校验?:前端压缩(WebP / 质量压缩)、限制尺寸与大小;校验格式 / 清晰度;配合 OCR 识别并防反光 / 逆光。
  2. :银行 H5 的性能优化手段?:懒加载 + 资源压缩 + CDN;HTTP/2 多路复用减少请求;骨架屏 + 缓存策略;弱网下轻量交互,减少大图与请求。

银行前端项目最常用的公共组件

1. 表单类(最多)

  • 金额输入框限制数字、两位小数、千分位、最大金额、禁止非法输入
  • 手机号 / 身份证 / 银行卡输入框自动格式化空格、长度校验、Luhn 校验、脱敏
  • 验证码输入框短信验证码、数字验证码、自动聚焦、自动跳转
  • 协议勾选组件阅读倒计时、必须勾选才能下一步、多行协议滚动
  • 搜索框防抖搜索、历史记录、清空、联想提示

2. 安全类(银行特色)

  • 自定义安全数字键盘数字键盘、随机乱序键盘、金额键盘、密码键盘
  • 脱敏展示组件手机号、身份证、银行卡、姓名脱敏过滤器 / 指令
  • 防重复提交按钮自带 loading、防抖、请求锁、禁用状态

3. 弹窗与反馈

  • 通用弹窗提示框、确认框、结果弹窗、强提示弹窗
  • **底部弹出框(ActionSheet)**选择银行卡、选择账户、选择转账方式
  • 全局 Toast / Loading成功、失败、处理中、加载状态
  • 错误页 / 空状态页无数据、网络异常、系统异常、暂无流水

4. 业务流程类

  • 步骤条组件开户、贷款、信用卡、风险测评多步骤流程
  • 卡片组件银行卡展示、账户卡片、理财卡片
  • 折叠面板交易详情、账单详情、流水展开收起

5. 列表与滚动

  • 下拉刷新 + 上拉加载交易流水、明细列表、历史记录
  • 通用表格还款计划、费率明细、资产列表
  • 无限滚动列表长流水优化

6. 上传与 OCR

  • 图片上传组件身份证、银行卡、人脸拍照上传
  • 图片压缩 / 裁剪压缩大小、方向矫正、质量控制
  • OCR 结果回显自动填充姓名、身份证号、卡号

7. 权限与安全控制

  • 权限按钮组件v-permission 按钮显隐、禁用控制
  • 会话超时弹窗自动检测、倒计时、强制退出

8. 工具类组件

  • 日期选择器账单日期、交易时间筛选
  • 地区选择器开户行、省市区选择
  • 数字滚动动画余额变化、收益变化动画
  • 水印组件页面防截屏水印、客户号水印