泰隆银行前端春招准备
泰隆银行科技菁英前端方向春招备考入口,整理岗位画像、笔试题型与题解、面试高频考点、行为稳定性题和准备优先级。
#type / resource
#status / growing
#tech / dev / frontend
#source / company / tailong
[!info] related notes
泰隆银行前端春招准备
泰隆近届/今年春招里,前端都归在科技专场 IT”菁英”人才 下,职责核心是”核心项目的前端开发、设计与性能优化”;科技专场流程里还会有线上测评、简历筛选、笔试、面试。
岗位画像
- 岗位:IT”菁英”人才(前端方向)
- 流程:线上测评 → 简历筛选 → 笔试 → 面试
- 职责:核心项目前端开发、设计与性能优化
- 技术栈倾向:Vue 为主,计算机基础有要求
笔试题型
| 模块 | 内容 |
|---|---|
| 选择 | JS 等于比较(== / === 陷阱) |
| 算法一 | BFS 迷宫最短路径 |
| 算法二 | 环形滑动窗口子序列计数 |
选择题:等于比较
泰隆的选择题常围绕 JavaScript 的隐式转换和相等比较展开,重点是能说清 == 的转换规则和 === 的严格比较。
null == undefined->true[] == ![]->true0 == false->true"" == 0->true===不会触发隐式转换
算法一:二维矩阵迷宫最短路径
1. 题目描述
给定一个二维矩阵表示迷宫,其中 0 表示可以通行,1 表示障碍物。从起点 S(0,0) 出发,到右下角终点 E(n-1, m-1) 结束,求最短路径长度(假设一定存在通路),如果没有正确解,则返回 -1。
注意:只能上下左右移动。 要求:使用 BFS(广度优先搜索)求解,并返回最短路径的步数。
示例:
迷宫:
[
['S', '0', '1', '0'],
['0', '1', '0', '0'],
['0', '0', '0', '1'],
['0', '1', '0', 'E']
]
输出: 6 (最短路径长度)
2. JavaScript 题解
function getShortestPath(maze) {
if (!maze || maze.length === 0 || maze[0].length === 0) return -1;
const rows = maze.length;
const cols = maze[0].length;
// 队列中存储的是 [当前行索引, 当前列索引, 走到当前位置的步数]
const queue = [[0, 0, 0]];
// 记录访问过的节点,避免重复访问导致死循环或冗余计算
const visited = Array.from({ length: rows }, () => Array(cols).fill(false));
visited[0][0] = true;
// 上、下、左、右四个移动方向
const directions = [[-1, 0], [1, 0], [0, -1], [0, 1]];
while (queue.length > 0) {
const [r, c, steps] = queue.shift();
// 遇到终点,直接返回步数(BFS 保证了首次遇到终点时的步数即为最短)
if (maze[r][c] === 'E') {
return steps;
}
// 探索四个方向
for (const [dr, dc] of directions) {
const nr = r + dr;
const nc = c + dc;
// 检查边界条件以及是否已经访问过
if (nr >= 0 && nr < rows && nc >= 0 && nc < cols && !visited[nr][nc]) {
// 只有路径为 '0' 或者终点 'E' 时才可通行
if (maze[nr][nc] === '0' || maze[nr][nc] === 'E') {
visited[nr][nc] = true;
queue.push([nr, nc, steps + 1]);
}
}
}
}
return -1; // 队列清空仍未找到终点,表示无解
}
3. 详细说明与相关题型
- 解题思路:这是一道非常典型的无权图最短路径问题。广度优先搜索 (BFS) 的特性就像水波纹一样层层向外扩散,它能保证当我们第一次访问到终点
E时,所走过的层数(步数)一定是绝对最小的。我们需要维护一个队列用于逐层遍历,以及一个visited二维数组来防止走回头路。 - 复杂度分析:时间复杂度为 $O(R \times C)$,其中 $R$ 和 $C$ 分别为矩阵的行数和列数(最坏情况下每个格子遍历一次);空间复杂度为 $O(R \times C)$,主要用于队列和
visited数组的开销。 - 相关题型标签:
BFS、图论、最短路径、网格遍历。类似力扣 (LeetCode) 上的”迷宫”系列或”腐烂的橘子”等问题。
算法二:环形小球序列满足条件的子序列数量
1. 题目描述
给定一个环形小球序列 balls,序列中有 $n$ 种不同的颜色。请你找到所有连续子序列,使得该子序列同时满足以下两个条件:
- 子序列包含全部 $n$ 种颜色;
- 子序列的长度严格小于一个给定的整数阈值
K。
请编写程序,返回满足上述条件的连续子序列的总数量。
输入:
String[] balls: 一个表示环形序列的字符串数组。int k: 长度阈值。Set<String> allColors: 一个集合,包含所有 $n$ 种颜色的名称。
输出:一个整数,表示符合条件的子序列总数。
示例:
balls = {"A", "B", "C", "A", "B"}
allColors = {"A", "B", "C"} (即 n=3)
k = 4
扩展序列: {"A", "B", "C", "A", "B", "A", "B", "C", "A", "B"}
符合条件的连续子序列有:
{"A", "B", "C"} (长度 3)
{"B", "C", "A"} (长度 3)
{"C", "A", "B"} (长度 3)
期望输出: 3
2. JavaScript 题解
function countValidSubsequences(balls, k, allColorsArray) {
const n = balls.length;
if (n === 0 || k <= 1) return 0;
const allColors = new Set(allColorsArray);
const targetCount = allColors.size;
// 环形数组的最大子序列长度通常不会超过原数组长度 n,
// 同时题目要求严格小于 k,所以最大有效长度为 min(n, k - 1)
const maxLen = Math.min(n, k - 1);
// 将数组复制一份拼接在末尾,巧妙解决环形数组首尾相连的问题
const extended = [...balls, ...balls];
let totalValid = 0;
let right = 0;
const colorCounts = new Map();
let currentColors = 0; // 记录当前窗口内包含了多少种目标颜色
// 外层循环控制左边界 left
for (let left = 0; left < n; left++) {
// 右边界 right 向右扩展,直到满足条件或超过允许的最大长度
while (right < left + maxLen && currentColors < targetCount) {
const c = extended[right];
if (allColors.has(c)) {
colorCounts.set(c, (colorCounts.get(c) || 0) + 1);
if (colorCounts.get(c) === 1) {
currentColors++;
}
}
right++;
}
// 如果此时窗口内集齐了所有的颜色
if (currentColors === targetCount) {
// 当前找到的最短有效长度就是 (right - left)
const shortestLen = right - left;
if (shortestLen <= maxLen) {
// 如果最短长度满足要求,那么从 shortestLen 到 maxLen 长度的子序列都满足
// 因为它们都一定是以 left 为起点,且包含这个最短有效窗口
totalValid += (maxLen - shortestLen + 1);
}
}
// 左边界 left 即将右移,需要把移出窗口的元素从计数中剔除
const leftColor = extended[left];
if (allColors.has(leftColor)) {
colorCounts.set(leftColor, colorCounts.get(leftColor) - 1);
if (colorCounts.get(leftColor) === 0) {
currentColors--;
}
}
}
return totalValid;
}
3. 详细说明与相关题型
- 解题思路:
- 破环成链:处理环形序列最经典的技巧,就是将数组复制一份拼接到末尾(
[...balls, ...balls]),这样跨越首尾的子序列就能转化为在这个普通长数组中的普通连续子序列。 - 滑动窗口 (双指针):我们需要统计以每个索引
i作为起始点的合法子序列数量。通过维护一个可变窗口,右指针不断向右试探直到集齐所有颜色。 - 数学计算优化:当我们在起点
left找到了包含所有颜色的最短窗口(长度为L),那么以left为起点,长度在[L, maxLen]范围内的所有连续子序列必然也都包含所有颜色。因此,对于当前起点,合法序列数量直接就是maxLen - L + 1,避免了重复枚举。
- 破环成链:处理环形序列最经典的技巧,就是将数组复制一份拼接到末尾(
- 复杂度分析:采用了滑动窗口优化后,左、右指针最多各遍历数组(长度为 $2n$)一次,时间复杂度优化到了 $O(N)$。空间复杂度为 $O(N)$ 用于存储扩充后的数组和哈希表。
- 相关题型标签:
滑动窗口、双指针、环形数组、哈希表计数。属于笔试中常考的中高难度技巧结合题。
面试高频考点
一面(约 20 分钟)
Vue 基础(必考):
- 为什么学前端 / 跨专业怎么想
- Vue 双向绑定原理 → Vue 响应式原理
- v-show 和 v-if 区别 → v-if vs v-show
- 垂直居中布局 → CSS 基线与垂直对齐, Flex 布局
行为/稳定性(必考):
- 怎么解决困难(案例题)
- 个人优势
- 职业规划
- 工作强度与抗压能力
- 留杭稳定性
计算机基础(可能混问):
- 数据库基础
- 事务隔离级别 → 事务隔离级别
- 网络基础 → HTTP 与前端网络 MOC
- 系统设计流程
备考优先级
第一优先(必考)
- Vue 双向绑定原理(Object.defineProperty / Proxy)
- v-if vs v-show 区别与使用场景
- CSS 垂直居中至少三种方案
- 行为题答案准备(为什么来金融、为什么来杭州、长期规划、抗压)
第二优先(高频)
- JS 类型比较(
==隐式转换陷阱) - 数据库基础与隔离级别
- 网络基础(HTTP 状态码、TCP 三次握手)
第三优先(笔试算法)
备考建议
- 泰隆是典型的银行科技岗考法:技术不深挖,但 Vue 基础必须讲透,行为稳定性占比大
- 行为题提前准备好”为什么选金融/为什么来杭州/长期规划/抗压”的叙事
- 计算机基础会混问,数据库和网络至少能说出核心概念
- 笔试算法难度中等,BFS 和滑动窗口是重点,模板要熟练
- 整场面试约 20 分钟,节奏快,答案要简洁直接