⾯试总结(JavaWeb后端⼯程师三年⾯试问题,附答案!)
笔者在今年上半年辞职了,陆陆续续⾯试了⼀些互联⽹公司,⼀起来看看这些公司都问的些什么⾯试题吧!
⼀、Spring MVC和Spring boot有啥区别
1.Spring MVC和Spring Boot都是Spring的⼀部分,且两者都是由IOC提供了依赖注⼊的容器,由AOP解决⾯相切⾯编程(IOC和AOP后续会讲到),然后在此⼆者基础上衍⽣的⾼级功能。SpringMVC的配置⽐Springboot的配置要复杂得多,各种xml和properties配置⽂件,处理起来⽐较繁琐;Springboot他遵循约定优于配置,啥意思呢,就是全都是⽤默认的配置,这样极⼤地降低了Sring使⽤的门槛。
2.Springboot的涉及⾯⽐SpringMVC要⼴,Springboot不仅可以集成Spring MVC,还可以集成JPA Security等,如下图所⽰:
3.SpringMVC和Sringboot都属于Spring,SpringMVC是基于Spring的⼀个MVC框架,Springboot是基于Spring的⼀套快速开发整合包。
总结:Spring 最初利⽤“⼯⼚模式”( DI )和“代理模式”( AOP )解耦应⽤组件。⼤家觉得挺好⽤,于是按照这种模式搞了⼀个MVC 框架(⼀些⽤ Spring 解耦的组件),⽤开发 web 应⽤( SpringMVC )。
然后有发现每次开发都要搞很多依赖,写很多样板代码很⿇烦,于是搞了⼀些懒⼈整合包( starter ),这套就是 Spring Boot 。
⼆、session和cookie的区别
1.session是存在服务器端的,cookie是存在浏览器端。
3.session会在⼀定时间内存储在服务器上。如果⽤户量较⼤,会影响服务器性能,考虑到服务器性能因素,可以使⽤cookie。
4.⼀般单个cookie不能超过4k。很多浏览器设置最多保存20个cookie,⽽session是⽆限量的。
三、在HashMap中是如何⽐较“key”的值的
在HashMap⽐较两个key值时,⾸先使⽤equals进⾏⽐较两个key的值,如果不同则认为是两个不同的key;如果相同,再⽐较两个key的hashcode,如果不同,则认为是两个不同的key;如果相同则认为是两个相同的key,此时的value2会覆盖value1的值。
四、JDK、JRE、JVM的联系与区别
JDK,java development kit,java开发⼯具包;
JRE,java runtime enviroment,java运⾏环境;
JVM,java virtual machine,java虚拟机;
在JDK安装⽬录下有⼀个jre⽬录,jre⽬录下⾯有bin和lib两个⽂件夹,我们可以认为bin⾥⾯就是jvm,lib就是jvm运⾏所需的类库,jvm和lib结合起来就是jre。
【JDK⽬录结构】
【JDK–>JRE⽬录结构】
下⾯我们由下图来描述⼀下三者关系:
1.JDK提供开发⼯具包,编译都是在JDK中进⾏的(由.java编译为.class),但运⾏不是在JDK中进⾏;
2.JRE由JVM和类库组成,
3.JVM借助jre提供的类库,运⾏.Java程序,java做到跨平台的特性,就是由于不同的平台拥有不同的JVM或JDK,才得以实现。
五、如果main⽅法被声明为private会怎样?
我们想⼀下,如果如果类中没有main⽅法,会怎么样?当然是没啥问题!
如果将修饰符改为private,其实也没啥问题。
如果将修饰符改为private,就相当于我们⾃⼰定义了⼀个⽅法,名字叫main,当我们运⾏这个类的时候,会提⽰我们“不到main⽅法,请将main⽅法定义为public static void main(String[] args)”,因为这⾥只有我们⾃定义的⼀个private main⽅法,⽽没有系统默认的public main⽅法。
如果这时我们再写⼀个public static void main(String[] args),这时候也会报错,因为已经存在了⼀个private static void
main(String[] args),同⼀个类中不能存在⽅法名和参数相同的两个⽅法,因为重载的定义为“⽅法名相同,参数不同的两个⽅法叫重载”,所以和修饰符⽆关。
六、&和&&有啥区别
1.&是位运算符,按⼆进制进⾏运算;
⽐如5 & 4就是将5和4分别转换为⼆进制5(00000101)和⼆进制4(00000100)进⾏“与”运算。我们顺便提⼀下&(与)、“~”(⾮)、“|”(或)、“^”(异或)四种运算符规则:
【均需要转换成⼆进制】
运算符 运算⽅式
&(与) 两个数转换为⼆进制,然后从⾼位开始⽐较,如果所⽐较的两个数都是1则为1,否则为0
|(或) 两个数转换为⼆进制,然后从⾼位开始⽐较,如果所⽐较的两个数有⼀个是1则为1,否则为0
~
(⾮) 如果该为为0,结果是1;如果该为是1,结果为0
^(异或) 两个数转换为⼆进制,然后从⾼位开始⽐较,两个数相同为0,不同
例:
2.&&是逻辑运算符,⽐较两个Boolean表达式。
&&运算符对两个Boolean表达式进⾏⽐较,当⽐较的两个均为true时,结果才是true,有⼀个false,结果就是false。
并且&&运算符具有短路功能,如果⽐较的前者为false,&&后⾯将不会运⾏,如果为true,将会继续运⾏&&后⾯的代码;
||运算符同样具有短路功能。
七、char类型的变量能不能存储⼀个中⽂?为什么
答案是可以的,但是两个中⽂不⾏。因为char占两个字节,⼀个中⽂也占两个字节,所以是可以存储的。
⼋、a=a+b和a+=b的区别
a=a+b是先进⾏“+”运算,然后进⾏赋值运算,如果当a(short)与b(int)的类型不同时,会报错,若进⾏强转,可能会导致精度丢失。
a+=b中,“+=”是⼀个运算符,⽽不是两个,所以在运算时 会进⾏⾃动类型转换。
总结⼀下,在两个变量的数据类型⼀样时:a+=b 和a=a+b 是没有区别的。
但是当两个变量的数据类型不同时,就需要考虑⼀下数据类型⾃动转换的问题了。
也就是涉及到精度了。
⾃⾝多年的⾯试体会:项⽬中尽量多思考,迎难⽽上,如碰到复杂的性能,内存泄露等问题的问题,往往是提升⾃⼰的机会,千万要仔细研究解决,可以参考其他解决类似问题的⽂章和实践经验,对技术深度的提升是很⼤的,关键时候可以让你的⾯试官突然觉得⾯⽿⽬⼀新。
很多技术⼈员的项⽬和技术相对单⼀,长久以往,容易造成技术思路和视野的狭窄,接触不到⾏业最新思路和动态或者当前疑难问题的最佳解决⽅案。
欢迎做Java的⼯程师朋友们私信我【⾯试】免费获取免费的Java架构学习资料(⾥⾯有⾼可⽤、⾼并发、⾼性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)spring boot是啥

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。