个人遇到的java面试题二

xiaoxiao2021-04-16  78

个人总结面试:大公司面试注重基础、原理、深度以及你的逻辑思维;小公司注重过来能做项目、能干活就行。所以你要去面试看一下你去面试公司的规模适当准备一下你的知识


1、spring的用到的设计模式有哪些?

百度一下一堆回答,不做解释,在这里我想说的是你在意过这些东西吗?反正我是没注意过这些设计模式的应用,呜呜呜~

2、mybatis的传参方式有几种?

这里我想说的是从两个方面回答:

1)传参方式:

a.多个参数

dao.java

public User selectUser(String id, String name);

mapper.xml

<select id="selectUser">

 select * from t_user where id = #{0} and name = #{1}

</select>

 #{0} 代表的是第一个参数,#{1} 代表的是第二个参数,以此类推

b.参数名称(注解声明参数名称)

dao.java

public User selectUser(@Param(value="id") String id, @Param(value="name") String name);

mapper.xml

<select id="selectUser">

 select * from t_user where id = #{id} and name = #{name}

</select>

c.map形式

dao.java

public User selectUser(Map param);

mapper.xml

<select id="selectUser">

 select * from t_user where id = #{id} and name = #{name} 对应map中的key

</select>

2)取值方式:#{} 和 ${}区别,#{}是占位符select * from t_user where id = ? 这样的;${}直接替换对应位置的值select * from t_user where id = 1

3、dubbo框架用的是什么协议?

我个人回答的是socket(tcp协议),但是面试官说tcp和http协议都可以,我们在这里不纠结这个问题。我们说一下dubbo的原理,dubbo的原理是socket通信,客户端传递我们的参数(接口名称-我们要调用哪个接口;方法名称-我们要调用哪个方法;参数类型-我们要调用方法的参数类型;具体的参数值-我们传递的参数值),服务端通过反射去调取的相应的接口,相应的方法最后得到返回值返回给客户端。我们称这种叫RPC(远程调用)

4、集合ArrayList的初始化大小以及增长倍数?

ArrayList的初始化大小为10个长度的数组。增长速度是当前数组长度的一半,比如list维护的数组大小是10,我们增加第11个元素时,这时候会搞一个长度为(10 + 10 /2)的数组,将原数组copy进来,然后放置新元素。具体源码分析,大家可以去看我的集合ArrayList集合分析。https://blog.csdn.net/zhao_xinhu/article/details/82712002

5、LinkList是怎样一种结构?你是怎么理解的?

java中的LinkList维护的是一个双链表的Node节点,node节点中有item(自身值),node prev(前节点),node next(后节点),具体自行看java源码,个人博客中也有LinkList的源码分析https://blog.csdn.net/zhao_xinhu/article/details/82713574

6、既然说到了ArrayList和LinkList了,那我们来说一下Map集合的理解?

map首先是数组和链表的组合。数组是16长度的数组,通过分析key的hashCode和equals方法来判断是否相同来放置key的,如果遇到key相同的,会替换原来的value值。具体查看个人博客https://blog.csdn.net/zhao_xinhu/article/details/82740652

7、 spring-aop运用到哪些地方?

spring的事务控制(这是spring自己的东西,其实不能算是我们自己对aop的运用),日志的插入,其他的我就不知道了,哈哈哈

8、聊聊你对协议的理解?说说你对http协议的理解?

http协议首先是基于tcp/ip协议的,http协议会有http请求头(放置的是请求方的ip和被请求方的ip)和请求体(具体的内容),整个http协议是放在tcp协议的请求体中的,tcp协议也有自己的请求头(请求方的mac地址和被请求方的mac地址)和请求体(具体的内容),找到具体的服务器,处理请求进行返回

9、你接触的权限框架有哪些?你对权限的理解?

我接触的权限框架有shiro,别的就没了。我对权限的理解是:哪些是你可以操作的,哪些是不能操作的;哪些是可见的,哪些是不可见的等等。当然具体的话可能具体到页面上的按钮你是否可操作,服务器中的图片你是否可以访问等等。

接着问:那如果让你来设计权限相关的表你会怎么来设计?具体有哪些表?

首先会有一个用户表,只有有了用户才有意义;其次可能有一个用户对应的角色表(一个用户对应了什么角色);然后角色对应的权限表(权限表里面可能就比较多的内容了,具体到按钮是否可见啊,是否可点击啊等等),我觉得这个可能面试官是看一下你的逻辑分析能力的

10、老生常谈的东西了String和StringBuilder以及StringBuffer区别?

11、线程安全你是怎样理解的?为什么会有出现线程不安全?

线程安全就是同一时间我们只允许一个线程来操作对象或是变量这样我们就保证了线程的安全性。因此线程不安全就是因为多个线程同时操作了一个对象,后来者将前一个修改的内容改变了,所以达到了不安全的过程


大概能记住的就这些了,随后想起来了或是在面试中遇到的再补充吧。

转载请注明原文地址: https://www.6miu.com/read-4818157.html

最新回复(0)