【面试】HS一面总结
在这之前先聊聊笔试:
笔试属于比较简单的题目,考的东西也很基础:封装继承多态、简单的程序执行结果、类初始化、Linux命令、数据库CRUD、字符串替换空格、二维数组查找
笔试时间是21.9.9晚上,第二天下午14点收到的面试邀请,11号晚上安排的面试
一、自我介绍
二、问了下Java基础知识:什么时候使用抽象类?没答出来,面试官问:使用接口不是也一样的吗?
正确答案:
把编程映射会日常生活进行对照:那么一个东西,抽象类表示它是什么,接口表示它能做什么。
简单来说,就是对象的属性特征可以用抽象类;而动作可以当成是接口。比如一个Person对象,他有的属性包括:眼睛、嘴巴、四肢等,可以用抽象类来封装,因为这些属性放在别的Person上也会存在;他的行为包括打篮球、游泳等,这些行为并不是所有的Person都应该具有的,所以一般不用抽象类来实现。
- 抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。
- 当需要为一些类提供公共的实现代码时,应优先考虑抽象类。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。
- 当注重代码的扩展性跟可维护性时,应当优先采用接口。
- ①接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活
- ②接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。
三、问了从输入网址到网站加载之中,发生了什么?
DNS 解析
DNS 解析的过程就是寻找哪台机器上有需要的资源的过程。寻找过程:①寻找浏览器缓存中是否存在对应域名的IP地址;②寻找本机系统缓存中是否存在域名对应的IP;③向本地域名解析服务器发起域名解析请求;④本地域名解析服务器向根域名解析服务器发起域名解析请求,返回请求的顶级域名地址(gTLD);⑤本地域名解析服务器向gTLD域名解析服务器发起请求,找到对应的域名服务器;⑥ Name Server 服务器返回IP地址给本地服务器;⑦本地域名服务器缓存解析结果;⑧返回结果给主机 TCP 连接
- 发送
HTTP 请求
- 服务器处理请求并返回返回
HTTP 报文
- 浏览器解析渲染页面
- 连接结束
四、group by使用过没有?什么情况下使用?
GROUP BY语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。例如查询一张员工表中每个部门中最高的工资:
select dept, max(salary) as maximum
from staff
group by depf;
五、如果一张数据表中ABC三个字段为主键,那么将如何建立索引?
具体问题忘记了,先说说怎么建立索引:
create index indexName on table(column);
主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用关键字PRIMARY KEY 来创建。也就是默认建立表格之后,会产生一个主键索引。
索引可以建立在多个数据列上,这种索引属于联合索引,比如CREATE INDEX INDEXNAME ON TABLE(COLUMN A, COLUMN B)
索引可以极大的提高数据的查询(select)速度,但是会降低插入、删除、更新的速度,因为在执行这些写操作时,还要操作索引文件。
六、Spring MVC执行过程?
七、会哪些排序算法?(至少应该掌握基础的快排)
冒泡排序:
private static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j + 1] < arr[j]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
选择排序:
private static void choiceSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int temp = arr[i];
for (int j = i + 1; j <= arr.length - 1; j++) {
if (arr[j] < temp) {
int swapTemp = arr[j];
arr[j] = arr[i];
arr[i] = swapTemp;
}
}
}
}
快速排序:
private static void quickSort(int[] array, int left, int right) {
if(left < right) {
int pivot = array[left];
int low = left, high = right;
while(low < high) {
while(array[high] >= pivot && low < high)
high--;
array[low] = array[high];
while(array[low] <= pivot && low < high)
low++;
array[high] = array[low];
}
array[low] = pivot;
quickSort(array, left, low - 1);
quickSort(array, low + 1, right);
}
}
八、用过Linux没有?会哪些?
回答只用过Cent OS虚拟机来学分布式,安装docker之类的…
九、总结
面试官给人感觉很舒服,但我实在是太菜了,面试官都没有问题要问了(因为问了也是基本都不知道),我全程“对不起,我不知道(不记得了)”回答,面试官最后拿出了”优缺点“、“意向城市”来问我水面试时间……
劝退的是准备的基础面经反射容器一概没考,虽然不够八股却全是些我平时没注意的,准备的方向错了,实力不够。其余的问题印象不深刻,记不清楚就不贴上来了…
最后神奇的是,还有个笔试链接:
|