【7.12】农行研发中心暑期实习面试+机试
面试
上午八点半后候场,然后九点开始面试。
有很多个面试官,但是全程只有一个面试官提问。我是java技术栈,自我介绍说了两个学习过程中的小项目,然后面试官就追着这两个小项目提问。因为我的有一个项目涉及到并发访问,但是是低并发,面试官就问了如何处理高并发场景。最后面试官说我简历上写了那么多技术,最熟悉的是哪一个,我回答了数据结构和算法,就问了我两个问题:1.图的存储方式;2.最短路径算法。
整个面试过程只有十多分钟
机考
然后中午来短信说下午参加机考,与前面的笔试不同,这次只有两道编程题+一道SQL题(60分钟)。两道编程很简单:
- 1.合并两个有序数组
- 2.给定一个字符串,相邻的两个字符可以消去,求最后剩下的字符串(用栈即可)
SQL题没写出来,不知道会有SQL题,早知道就复习了。但是下来回忆着写了一下,我觉得应该差不多
题目回忆(表和字段名随便取的,但是不影响):
- 一个user表,字段有id,name,
- 一个work表,字段有id,s1,s2
字段类型都为varchar,s2的长度=3。
如果s1的前三个字符=s2,认定该条记录时正确的,否则为错误的;
查询每个用户的错误记录数,并按错误数降序排列,如果错误数相等,则按照id升序建表和插入数据
CREATE TABLE `user` ( `id` VARCHAR(255) NOT NULL, `name` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4; INSERT INTO `user` VALUES('001','z1'),('002','z2'),('003','z3'),('004','z4'),('005','z5'); CREATE TABLE `work` ( `id` VARCHAR(255) NOT NULL, `s1` VARCHAR(255) NOT NULL, `s2` VARCHAR(255) NOT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4; INSERT INTO `work` VALUES('001','12345678','123'), ('001','123456','123'), ('002','1111111','112'), ('003','151515','111'), ('004','11111','111'), ('005','1111','111'), ('002','1111111','113');
执行查询
SELECT t1.id,t1.name,IFNULL(t2.TIMES,'0') AS `TIMES` FROM `user` AS t1 LEFT JOIN ( SELECT id,COUNT(id) AS `TIMES` FROM `work` WHERE STRCMP(LEFT(s1,3),s2)!=0 GROUP BY id ) AS t2 ON t1.id = t2.id ORDER BY t2.TIMES DESC,id ASC;
SQL题主要考察了:子查询、按多个字段排序、字符串函数用法、连接查询中将结果为null的置为'0'(题目要求是字符串)
贴一下结果: