首页 > 编程语言 > 详细

面试总结(JavaWeb后端工程师三年面试问题,附答案!)

时间:2019-07-13 01:13:00      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:boolean   单个   true   class   学习资料   虚拟   转换成   red   来看   

笔者在今年上半年辞职了,陆陆续续面试了一些互联网公司,一起来看看这些公司都问的些什么面试题吧!

一、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是存在浏览器端。

2.cookie相对于session是不安全的。因为cookie是存在浏览器端,别人可以通过分析本地的cookie进行cookie欺骗,如果考虑安全问题,应该使用session。

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等多个知识点的架构资料)

面试总结(JavaWeb后端工程师三年面试问题,附答案!)

标签:boolean   单个   true   class   学习资料   虚拟   转换成   red   来看   

原文:https://blog.51cto.com/14440597/2419830

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号