嗯,今天是2019年2月18号,来到杭州已经两天了。来之前,杭州这边的hr已经电话联系了本博主了,预约了今天面试。开始打电话是一个小姐姐,结果我兴高采烈的来到公司。到前台和前台的小姐姐说了一句:你好,我预约了今天下午4点钟的面试。然后这个小姐姐就给我了一张面试的表,我简单的填了一下自己的简介信息。
本来按道理是去面试的时候,我们是需要带好纸质简历和自己的笔记本电脑的。但是本博主这次什么都没有带,哈哈。因为在来之前,今天中午我就提前打了一个电话给那个hr:第一是确认今天下午是否准备了给本博主面试的流程;第二是问下hr需要准备什么,结果hr就和我说了一句:简历你不用准备了,我已经帮你打印了。。。
结果:我就空着手来了。。。。
面试环境:环境比较随意,就是在该公司的一楼客厅,有一排的咖啡桌,很惬意。这样就不会紧张了,也没有什么电视机上面的那种在一个小房间里,面试官坐在里面,一个个进。面试本人的是一个戴眼镜的小伙子,年龄和我相仿,也应该不大。很和谐的面容。
面试内容:开场白:先介绍一下自己。然后叽里呱啦的说了一下万年不变的it自我介绍。然后面试官开始说,随便讲下一个你这些项目吧。然后本博主说这些项目都比较久了,就说下我最近自己在写的一个项目吧:由于是个人项目,说了一下自己项目的功能,实现原理,运用了哪些技术,框架,然后面试官抓住了一个“数据爬虫技术”,开始问我怎么实现的,然后我说就是开始自己专研底层点的原理,自己写爬取数据的代码,然后后来觉得自己写的代码不够高效,不够系统开发,改用市面上开源的数据爬虫框架,jar包了。后来聊到框架,也就那几个框架springmvc啊,spring啊,mybatis啊,然后要我说下springmvc的实现过程,本人来前没什么准备,直接说了用登录这个业务来进行举例,说前端发送用户名和密码到springmvc,springmvc进行数据查询,匹配,然后返回一个model进行页面解析。后来面试官说你讲下数据结构之类的东西吧,然后我说栈,链表,二叉树,面试官说:说下集合之类的数据结构,哦,我恍然大悟,原来他想考我map,set,list之类东西的底层数据结构是什么,那么我就是说了,list的底层是数组,它的优点是通过下标查询,那么它的查询效率高,增删效率略低。接着就开始问我上家公司是做什么?是为什么离职了?对自己期望的公司是什么样的?我就回答道:对公司的一些项目的功能编码啊,维护啊。离职原因就是我之前是在江西的一个小城市工作,一个三线城市都算不上的,没有那种工作的感觉。期望的公司就是有发展的公司。接着就来了一句:什么才是有发展的公司?就是那种有竞争力,有工作氛围,有积极性的那种公司。然后就开始问,有什么想问的吗?我就来了一句,贵公司平时主要经营什么业务。贵公司有什么自己的框架,有什么需要我入职前需要准备的。然后说着说着就吹了一下牛皮,说本人技术不算牛逼,但是自学能力很强,说本人大学大二期间就把所规划的路线就学完了,然后就开始要我说一下简述路线怎么规划的。后来说着说着又问起了,你项目中有什么碰到的问题难点说一下看,然后说了一下多线程并发效率的问题,然后问我怎么优化的,有什么解决思路,我说暂时还没有,然后就是好像说回去等通知吧。。。。
面试心得:总结此次面试,由于面试环境的好处,本人也没有什么紧张,和不舒服,就是有点冷,打抖,哈哈。面试内容,感觉没有什么技术点的交流,只是在不停的聊项目功能,模块。和规划。感觉吧,没有达到预期。还是有点准备不好的原因。后来一查技术点问题的答案,几乎都是瞎说的。全错误了,但是面试官人的素养真好,一直给我面子,没有揭穿我。
面试问题总结,解答:
Conlleciton(集合)
List Set Map;
List(有序,可以支持重复元素)
1.其中ArrayList底层数据结构是数组,查询效率快,增删效率慢,线程相对不安全,但是效率高,首选
2.然后就是Vector,底层数据结构是数组,查询快,增删效率慢,线程相对安全,但是效率低。
3.还有就是LinkedList,底层数据结构是链表,查询效率慢,增删效率高,线程相对不安全,但是效率高。
Set(无序,元素具有唯一性)
1.其中HashSet底层数据结构就是哈希表。哈希表依赖两个方法:hashCode()和equals(),执行顺序就是首先判断hashCode()值是否相同
,是的话就是继续执行equals()方法,看其返回值是否为true:说明元素重复,不进行添加。为false,就直接添加到集合中,如果hashCode()的值不相同,那么直接添加到集合中。最终自动生成hashCode()和Equals()。
1.2.LinkedHashSet底层数据结构有链表和哈希表组成。有链表来保证其有序性,由哈希表来保证其唯一性。
2.TreeSet其底层数据结构为红黑树。是一种自平衡的二叉树。通过比较的返回值是否为0来决定唯一性。如何保证元素的排序呢?有两种方式:自然排序(元素具备比较性):就是让元素所属的类实现Comparable接口。还有一种方式是比较器排序(集合具备比较性),让集合接收一个Comparator的实现类对象
Map(双列集合)
在map集合中的数据结构仅对键有效,与其value无关,然后存储的是通过键值对形式的元素,键是具有唯一性的,值是可重复的。
1.HashMap:底层数据结构是哈希表,线程不是安全的,但是是效率高,哈希表也是依赖两个方法hashCode()和equals()其执行过程和HashSet是一样的,通过比较两个hash值和equals的返回值来比较。
1.2LinkedHashMap底层的数据结构是链表和哈希表,通过链表来决定有序性,通过哈希表来决定唯一性。
2.Hashtable:底层数据结构是哈希表,线程较HashMap是安全的,但是执行效率低。
其哈希表的原理也是和HashSet、HashMap一样的。
3.TreeMap,底层数据结构是红黑树,是一种自平衡的二叉树。通过比较出来的返回值是否为0来决定唯一性。通过两种排序方式来决定有序性。自然排序(让元素本身具有比较性)和比较器排序(集合具备比较性),这两者都是实现Comparator接口。
SpringMVC流程
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。