面试总结
学校大三完了,大四就要出去实习了,由于学校安排的几家公司几乎都是培训公司。所以不甘埋没的我决定自己去找实习单位。面试完才发现自己是那么的菜~
浅谈面试
关于面试呢,我也没有什么经验。我只知道问什么答什么而不知道对问题进行额外的补充。其实,如果你对问题相当的了解的话不妨说一些“题外话”来补充一下自己的说明,来证明自己对问题的了解程度。
之前面试了几家公司问的问题大致包括这几个部分:框架
,··Java常用类··,··几大数据库(MySQL和Oracle居多,深的会接触到MongoDB)··,当然还有前端知识
。也许你会问了,你面试的是全栈吗?为什么感觉前端后台都要会的样子?我最开始也是有这样的疑惑的。后来我问了面试官,面试官是这样回答的:虽说你是面试的Java开发实习生,但是现在需要知道一点点的前端知识,这样才能了解前后端是如何结合的,也会有测试需要你使用前端来验证你的代码。也有面试官是这样回答我的:因为后端的代码主要还是做重复的工作,所以工作量比较少,主要还是前端。
看来现在纯后端是不存在的,特别是小公司就希望你啥都会。后面我将会根据具体问题来谈。
常见问题
== 和 equals 的区别
正确回答:“==”: 比较基本数据类型(即原始数据类型)和引用地址(针对复合数据类型)。"equals": 比较引用类型,它只比较内容。(其实屁话再多不如一张图,下次笔试的时候如果你遇到这个问题直接画图就好了。)
== VS equals.png
错误回答:"==" 常用来比较数值, "equals" 常比较字符串。(我相信很多老师都是这么讲的)。
ArrayList 和 Vector 的区别
答:ArrayList 是非同步的,它是线程不安全的;Vector 是同步的,它是线程安全的。Vector 的查询性能开销比 ArrayList 的开销大。
为什么说ArrayList是线程不安全的?
对于线程安全的集合类(例如Vector)的任何操作是不是都能保证线程安全?
又上面可以看出,虽说 Vector 是线程安全的,但是由于操作也可能导致其并不安全。
会 SSM 框架吗
对于这个问题我也是很无奈的,我学的框架是 SpringBoot 和 MyBatis(虽说 Spring 基础框架我也会点),但是我发现我去面试的时候面试官对我会不会 SpringBoot 框架并不感冒,他们还是会一味的问你会不会 SSM(Spring+SpringMVC+MyBatis) 框架。所以最新的不一定是最好的,有些公司为了避免风险和减少维护成本等各种因素不会立马使用新技术。但是如果你都会当然是更好了。
重定向和转发的区别
重定向是客户端行为,转发是服务端行为。
不知道你有没有遇到过这样的情况,当你输入某个地址准备浏览的时候,发现回车后却跳转到了另一个地址,而那个地址全是不良信息,这就是你的请求被重定向了,它实则发送了两次请求,第一次:请求访问原地址,但是原地址告诉你“对不起,我地址更新了,请你去B地址”,然后浏览器收到 response 就会发送第二次请求来访问更新的后地址,这时你可以看到请求地址发生了变化。
转发是你请求了一个地址,然后该地址知道这个事情不该它管,就会把你的请求转发到另一个控制器,然后再将得到的结果返回给你,该过程你是看不到地址变化的。
转发和重定向的区别
抽象类和接口的区别
说实话,这两者真的很像。
接口下的方法都是抽象的,如果一个类只实现了一个接口的部分方法,那么这个类也必须是抽象的。需要注意的是,只有被 class 修饰的类才能被实例化,接口不是类,所以不能被实例化。我去公司面试的时候竟然有一个选择题问抽象类和接口中的方法内不能带方法体,反正我没有找到正确选项。因为JDK1.8 之后出来了新的类型 default ,在接口中用default修饰的方法是允许有方法体的。Java8 新特性(default)
MySQL 如何创建索引、存储过程、视图
-- 创建索引
CREATE INDEX ON table_name(column_name);
-- 创建存储过程
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[ IN | OUT | INOUT ] param_name type
characteristic:
COMMENT 'string'
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
[begin_label:] BEGIN
[statement_list]
……
END [end_label]
创建视图:
创建视图
画出盒模型
盒模型.pngSpringMVC 执行流程
第一步:前端控制器接收请求,调用doDispatcher
第二步:前端控制器调用处理器映射器查找 Handler,返回执行链HandlerExecutionChain
第三步:请求获取处理器适配器HandlerAdapter用于处理Handler
第四步:调用处理器适配器执行Handler,得到执行结果ModelAndView
第五步:调用processDispatchResult
第六步:视图解析器ViewResolver解析ModelAndView(在processDispatchResult内)
第七步:视图渲染,将model数据填充到request域
SpringMVC 执行流程及源码分析