面试总结(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是存在浏览器端。

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

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

时间: 2024-07-29 19:03:04

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

腾讯社招 —— 腾讯游戏后端工程师-电话面试

腾讯游戏后端工程师电话面试内容 本来想着9月份再往大厂投简历,但是由于一些其他因素,在boss上投了腾讯三个部门,记录一下2019年05月23号第一个部门的电话一面内容. 描述一下linux系统中的进程与线程,进程中哪些是线程共享的,线程拥有哪些私有的内容. 说一下自己对go语言和java和c之间的区别. 协程相比进程线程有哪些不同. goroutine的优点和缺点. go语言如何实现继承封装和多态. tcp和udp的区别,dup的头部有哪些字段,tcp头部有哪些字段. 简单介绍一下你在公司的项

腾讯社招 —— 应用宝后端工程师-电话面试

这是另一个部门,我之所以能同时面两个部门,应该是我的简历没有进腾讯的内部系统. 这个电话面试应该是我印象最深刻的一次面试,学到很多东西,面试官听声音应该是一个工作2.3年的小哥哥,说话很有趣,可能是周五晚上的原因,他一直类似朋友聊天吐槽一样的和我聊了100多分钟. 他是第一个提到我github上面的个人项目的面试官,面试过程中问到我项目里某几段代码,指出其中的错误.说明这个小哥一定游览过我的代码,当时超级感动,觉得第一次被人肯定的感觉. 面试小哥:你不是计算机专业的,是后来自己自学的吗,平时都怎

2019年Java后端工程师常见面试题和感想

来新公司有5个月了,从第二个月开始就参与公司后端工程师的面试工作了,包括校招在内,面试超过100个(包括40个校招的终面)应聘者了,应聘者中有超过10年的技术经理,有6年以上的高级开发,有3到5年的中级开发,有刚毕业的初级开发,当然还有未毕业的硕士生本科生,有入职公司的,也有外包公司来参与公司项目的,总之,各种水平层次的都有,每个人的素质也参差不齐,今天就分两个部分讲一讲,一个是作为技术面试官,我比较喜欢问的问题,二是面试后的一些感想,希望对大家有帮助,同时也是要鞭策自己. 一,常见的面试题 这

初级JavaWeb攻城狮面试指导

一.概要 初级JavaWeb工程师的面试准备 Java基础知识面试指导 Java面向对象面试指导 JSP面试指导 MySQL数据库基础面试指导 Servlet面试指导 二.初级JavaWeb工程师的面试准备 初级JavaWeb工程师是职业发展的第一步 组成人群:应届计算机专业毕业生和初学者 工作内容:能够独立完成指定的模块开发 面试形式:笔试和问答 要求:熟知所涉及的知识点,具有独立编码能力 主要知识点: Java基本语法知识 Java面向对象 JSP与前端知识 MySQL数据库基础知识 Ser

软件测试工程师这样面试,拿到offer的几率是80%

面试难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:"面试官为什么会这样问?他希望听到什么答案?"然后针对性的准备和回答就行了,无他. "你的优势是什么?"多年前我觉得这个问题很无聊,现在我经常这么问面试者,因为我真的想知道他的优势是什么,能给公司带来什么.最终能和面试官聊的开心愉快投缘的叫面霸,反之叫面瘫. 面霸是可以练成的.我在这篇文章里尝试从

美资软件公司JAVA工程师电话面试题目

面试必备基础题目(虽然不一定常用, 仅用于面试, 面试就是把人搞的都不会然后砍价, 当然您可以讲我可以查资料完成, 但是面试的时候就是没道理的, 起码我是经常看到这些题). 如何把一段逗号分割的字符串转换成一个数组?request.getAttribute() 和 request.getParameter() 有何区别?response.sendRedirect() 和 forward() 区别?<%@include file="xxx.jsp"%>和 <jsp:in

性能测试工程师,面试都问什么?

大概去年这个时候,写过一篇博客:性能测试岗位常见面试题.当时是出于一个求职者的角度,对自己遇到的一些性能岗位面试问题进行了整理归纳. 最近这一年,对性能测试有了更多的认知,也做了大半年性能团队的Leader,最近部门开放了性能测试工程师岗位,也面试了几位候选人. 这篇博客,说说我对性能测试工程师的定位.需要的技能以及我面试候选人时会问的一些问题,仅供参考... 一.岗位定级 以我之前做性能团队Leader时候的经历来说,对性能岗位的定级,大概是按照如下内容划分: 岗位定级 岗位职责 薪资范围(参

测试工程师进阶面试题目大合集

很多软件测试工程师在面试的时候都会遇到考官给的各种各样的面试题,这也反应了测试工程师对企业的重要性,面试通常分为以下几个方面,由于篇幅有限,在这里就只给大家分享一些比较常见的问题. 一. 自我介绍 这里我不分享如何自我介绍,比我话术之类,相信大家都比我熟悉套路,这里分享几个细节 1.自我介绍时需要有底气 有些同学明明技术很厉害,但是一面试就紧张,一直低头,不敢直视面试官,更为紧张者都说不出话,这样的表现面试官不会觉得你是紧张,反而是觉得你是没能力的表现,所以要有底气,自信很重要. 2.自我介绍时

Java 后端工程师实习总结

2017-9-16 8 月份开始到现在,进行了一个多月的实习,岗位是 Java Web 后端开发.这过程学到的知识着实比自学要来得多,而且也让我意识到需要学习的知识也更加多.在这里我会在比较大的方面总结这次实习中学习到的事情,以及之后需要努力学习的知识. 基础 经过一个多月的项目的锻炼,最大一点感受就是基础的重要.这里我指的是数据结构基础.因为经历过实际项目的开发,无疑我更清楚一个企业项目里的编程是怎样一会事,明白实际用到的技术大概是怎样而这个过程我了解到基本的数据结构是如此重要.老实说,我感觉