java实习生面试-2021-7-27
笔试:
java基础
- 1.简单说一下list set map
Collection接口中有两个常用的子接口:List(列表),Set(集)。
- List:可存放重复元素,元素存取是有序的。
- ArrayList:底层为数组结构。查询速度快。增删稍慢。线程不同步。
- LinkedList:底层为链表结构。增删速度快,查询稍慢。线程不同步
- Vector:底层为数组结构。线程同步。被ArrayList替代了。因为效率低。
- Set:不可以存放重复元素,元素存取是无序的
- HashSet:数据结构是哈希表。线程不同步。hashCode和equals
- TreeSet:可以对Set集合中的元素进行排序,数据结构为二叉树 实现Comparable接口,覆盖compareTo(Object obj)方法 实现Comparator接口,覆盖compare(Object o1,Object o2)方法
- Map:存储键值对,键不可以重复,值可以重复。
- 取出map集合元素的两种方式方法keySet()和entrySet()
- Hashtable: 数据结构为哈希表,不可以存入null键null值,线程同步。
- HashMap:数据结构为哈希表,允许使用 null 值和 null 键,线程不同步。
- TreeMap:数据结构为二叉树。线程不同步。
- 用于给map集合中的键进行排序(排序方法和TreeSet一样,实现comparable和comparator两个接口即可)。
- 注:其实Set底层就是使用了Map集合
- 2.接口和抽象类的区别
语法层面上的区别:
- 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;
- 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
设计层面上的区别:
- 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
- 设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。
- 3.MVC模式是什么,有什么优缺点
1.MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。 V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。
2.优缺点(没写完整)
SpringMVC本身是与Spring框架结合而成的,它同时拥有Spring的优点(例如依赖注入DI和切面编程AOP等)。
SpringMVc提供强大的约定大于配置的契约式编程支持,即提供一种软件设计范式,减少软件开发人员做决定的次数,开发人员仅需规定应用中不符合约定的部分。
支持灵活的URL到页面控制器的映射。
可以方便地与其他视图技术(JSP、FreeMarker等)进行整合。由于SpringMVC的模型数据往往是放置在Map数据结构中的,因此其可以很方便地被其他框架引用。
拥有十分简洁的异常处理机制。
可以十分灵活地实现数据验证、格式化和数据绑定机制,可以使用任意对象进行数据绑定操作。
支持RestFul风格。
- 4、sql
这里我就不写出具体的题了,都很简单,我主要写一下我之前没碰到过的知识点(mysql为例)
模糊查询
1. like
SELECT 字段 FROM 表 WHERE 某字段 Like 条件
其中关于条件,SQL提供了四种匹配模式:
1) % :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
比如 SELECT * FROM [user] WHERE u_name LIKE ‘%三%’
将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。
另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件
SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’
若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%猫%’
虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。
2) _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
比如 SELECT * FROM [user] WHERE u_name LIKE ‘三’
只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;
再比如 SELECT * FROM [user] WHERE u_name LIKE ‘三__’;
只找出“三脚猫”这样name为三个字且第一个字是“三”的;
3) like可以利用字符串前缀索引
本来还有两道编程题的,我只粗略的看了一下,感觉不会做,现在基本没啥印象了。百度一下也没搜到,这里就不写出来了。本来说好的答题半小时,结果只写了十多分钟,我才刚好把简答题写完面试官就说时间到了,让我去面试–。
中途还有个前端的老哥过来面试,我看他的面试题比我的多了3页,我只一页,我俩当时就惊了
面试
自我介绍
我的自我介绍很差,但是还好面试官也没把自我介绍当回事。
面试问题
面试的问题基本就是根据笔试题来的。一开始都是很基础的,因为背过面试题的,基本上答出来了,然后他就开始问带一点底层的了。我是一脸蒙蔽,我这也不能全部记下来,就把印象深刻的记录下来吧
-
1.list,set里面存的是什么
- 我:数组
- 面试官:元素
-
2.为什么ArryList查找快,LinkedList慢
- 我:不知道
- 面试官:–(后面有个面试官贴心的给我解释了一下)
**ArryList:底层是数组。**需要申请连续的内存空间保存元素,可以通过内存中的物理位置直接找到元素的逻辑位置。在顺序表中间插入 or 删除元素需要把该元素之后的所有元素向前 or 向后移动。
**LinkedList:**底层是双向链表。不需要申请连续的内存空间保存元素,需要通过元素的头尾指针找到前继与后继元素(查找元素的时候需要从头 or 尾开始遍历整个链表,直到找到目标元素)。在双向链表中插入 or 删除元素不需要移动元素,只需要改变相关元素的头尾指针即可。
-
3.你有没有想什么时候该用ArryList,LinkedList
我:没有
面试官:—
查找多的时候用ArrayList,增删多用LinedList
-
4.springboot里面有哪些常用的注解
-
我:
-
@Autowired 注解自动装配 bean。
-
@Component :通用的注解,可标注任意类为 Spring 组件。如果一个Bean不知道属于哪个层,可以使用@Component 注解标注。
-
@Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
-
@Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao层。
-
@Controller : 对应 Spring MVC 控制层,主要用户接受用户请求并调用 Service 层返回数据给前端页面。
-
-
面试官:那你知道@Autowired的实现原理吗?
-
我:我还没接触到这一层
-
面试官:没事,就是随便聊聊(后面也一直在强调只是聊聊)
-
-
5.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响应用户。
- 这里尽量记完整,我说的时候应该是控制器(handle)说成是controller了他一直在挑刺
-
6.数据结构、操作系统、计算机网络
数据结构和操作系统还有计算机网络咋样
- 我:当初没好好学,基本都忘了
- 面试官:tcp和udp知道吗
- 我:听说过
- 面试官:好,今天就到这
我感觉这么多我都不知道,应该是没戏了,然后就出来的,出来的时候其中一个面试官还问我从哪里去的公司,听说我住的远,还说了声谢谢,搞得我的心拔凉拔凉的,以为已经毫无机会了。
没想到的是,晚上我抱着试一试的心态问了问HR,HR居然说我面试过了。那俩面试官真就问了些技术问题,其他的什么都没说
哈哈
Java实习生面试题可以看看:
另外,我的博客:
[www.ranblog.vip]:
- 还在完善中