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
16public 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开发要掌握的知识欠缺,最新的技术掌握的太少,接下来要好好学习前言技术知识。