2021提前批-京东一面

    7月15号上午11点30分要面试京东提前批,下面是京东一面面试题目,面试官nice,说话委婉,但感觉还是凉了。学习过程中如有错误,欢迎私聊我纠正。

第一轮面试题

自我介绍

介绍下hashcode()和equal()方法

Java重载和重写

推荐一本技术书籍

类的加载过程

Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制。
详细过程后面探讨

介绍下你做过的redis的应用

MySQL注入过程

答:(1)绕过登录:

1
SELECT USER from database WHERE username='a' or 1=1;

现在,即使没有名为“a”的用户,此查询也会计算为true,因为1 = 1始终为true,并且当其中一个查询为true时,使用OR会使查询返回true。
(2)获得秘密的数据:SQL注入本质上不是为了绕过登录,而是用于访问数据库服务器中的敏感和秘密数据.
(3)写shell。如果能登录到后台,找到上传文件点或其他楼栋写入webshell,通过SQL语句写入。例如:

1
id=de' union select 1,'<?php eval($_post[shell]); ?>' into outfile 'C:/xampp/htdocs/dvwa/testtest.php'

写一个sql,查询出学生信息表中同名的两个人

这道题送分题,当时有点懵逼。

1
2
解法一:selecct 姓名 from 学生表 group by 姓名 having count(*)>1;   
解法二:select * from 学生表 where name in 姓名;

扩展:in 和exist区别:

1
exist:例:select * from p_user_2 where EXISTS(select * from p_user where id=12);

如果p_user表中有id为12的记录,那么将返回所有p_user_2表中的记录;否则,返回记录为空。
总之:如果A表有n条记录,那么exists查询就是将这n条记录逐条取出,然后判断n遍exists条件。
小表在前,大表在后(exist后的sql语句能走索引)
in:in所对应的select语句返回的结果一定是一列!可以为多行。

1
例:select * from p_user_2 where id [not] in (select id from p_user)

查询id在p_user表id集合的p_user_2的记录。not in则相反。
总之:大表在前,小表在后;
not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引(这句话有待商榷);而not extsts 的子查询依然能用到表上的索引。
所以无论哪个表大,用not exists都比not in要快。

介绍一下Spring的原理

设计模式了解过吗

出一道题能体现出面试者综合能力的题目

手撕代码,给出一个数组和目标值,找出数组中两个数总和为目标值的下标

答:解法一:暴力穷举法 时间复杂度:O(N^2)
解法二:Hash表法,以空间换时间。时间复杂度:O(N),空间复杂度O(N):首先从头开始遍历数组中的数值,计算出对应的另外一个数值,作为Map中的key,value记录当前遍历的值在数组中的下标,加入map中。当遍历过程中发现hash映射表中存在这个值时说明另一个数字也在数组中,但需要承担O(N)的hash表存储空间。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static int[] twoSum2(int[] numbers, int target) {  
if (numbers != null) {
// 其思想在于用index的value表示数组中的该数据,map中的key与之匹配,并在数组中寻找匹配值
HashMap<Integer, Integer> num_map = new HashMap<>();
for (int i = 0,len = numbers.length; i < len; i++) {
if (num_map.containsKey(numbers[i])) {
int index = num_map.get(numbers[i]);
int[] result = { ++index, ++i };
return result;
} else {
num_map.put(target - numbers[i], i);
}
}
}
return null;
}

如果你是面试官,会出一道什么类型的题给面试者

接上一题,我回答情景题,请举例?

评价一下自己的优缺点

反问环节

总结

面试官态度nice,对我评价基础扎实,算法竞赛做的比较多,对当前Java Web开发要掌握的知识欠缺,最新的技术掌握的太少,接下来要好好学习前言技术知识。

坚持原创技术分享,您的支持将鼓励我继续创作!