给伟伟的java web面试助攻
Posted 海上小波
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给伟伟的java web面试助攻相关的知识,希望对你有一定的参考价值。
背景
下周一伟伟同学将要去参加一个java开发岗位的面试,很久没写博客的我打算给他助攻下。本文内容来源于本人参加过的面试中面试官问过的一些问题,以及一些个人心得体会。本文本着实用原则,采用一问题一答形式呈现,方便阅读。由于本人才疏学浅,难免有遗漏、浅薄的地方请见谅,如有指教将不胜感激。
概述
本文内容,主要包括一些常见技术问题和一些非技术性质的问题。技术问题包含一些前端常问知识点,以及一些基本后端概念;非技术问题是一些HR的常见套路(欢迎分享^_^)。以下是内容基本结构:
(图一:技术内容概要)
(图二:非技术问题)
技术
前端部分
1、 标签的position属性有哪些值?
答案:absolute、fixed、relative、static(默认)、inherit。absolute相对于除static外最近的一个父元素定位,常和left、right、top和bottom一起使用;fixed只相对浏览器窗口进行定位,其他同absolute; relative相对于static进行定位;static是默认布局方式;inherit继承父元素的定位。
2、 简单描述下盒子模型?
答案:盒子模型是以盒子的基本属性类比html元素定位中常见的概念。盒子就像html元素,盒子和其他盒子的距离是margin,包括和左右上下盒子的距离,分别对应margin-left、margin-right、margin-top、margin-bottom;盒子壁是border,包括颜色(color)、厚度、材质(border-style);盒子和其内部盒子的距离是padding,和margin一样包含上下左右,对应padding-top -> padding-right。
3、 浏览器cookie容量最大值是多大?
答案:Cookie是浏览器端的小文本,存储在客户端本地。不同浏览器容量大小有差异,大约4K。
4、 你最常使用的js库是什么?
答案:jquery。Jquery是基于js封装的一个轻量级库。拥有十分丰富的插件资源,非常实用的包括jqgrid数据网格插件、jTree树插件、jquery form表单插件等。Jquery将html dom元素抽象成jquery对象,可以使用jquery对象提供的一些基本方法轻松操作dom元素,我就常用jquery的选择器实现dom元素属性、值的修改。
5、 Jquery插件是什么?
答案:不是使用jquery编写,依赖jquery库的插件就叫jquery插件。Jquery插件是基于jquery提供的扩展接口用户根据自己的需求扩展出来的组件,其使用方式和原生jquery的使用方式相同,都以$(或jQuery)的形式调用。我曾经就基于jquery提供的fn扩展接口,集成jquery的ajax,模仿jqgrid实现过一个自己的简易数据网格插件。
6、 使用过ajax吗?
答案:在以往的项目经历中,我主要采用后端基于json的rest api,前端采用ajax调用的形式。我最常使用的ajax工具是jquery封装XmlHttpRequest原生对象的库函数。
7、 前端加密和后端加密哪个好?
答案:前端加密是采用md5等函数对消息加密的一种技术。前端内容是完全暴露给用户的,所以其安全性不高。对安全性要求较高的信息一般采用后端验证、加密。
8、 有遇到过浏览器跨域请求问题吗?
答案:有。跨域是来自一个服务器的内容想另一服务器发送服务请求的过程,由于浏览器对安全性的考虑默认情况下跨域请求是被禁止的。跨域的解决方案主要包括1)利用nginx等反向代理服务器将不同域映射到同一域下的不同资源;2)ajax的jsonp过程也可以实现跨域,但是由于jsonp是利用了浏览器对<script>标签src资源跨域允许,而通过<script>标签获取资源只能是get方法,所以如想跨域提交文件(数据量较大需要使用post方法),jsonp过程是不支持的;3)form 的target属性定向到一个空的iframe也可以实现跨域,此种方式需要服务器端将响应内容包在<script>标签包含的函数调用中以实现回调,spring的aop可以很好的实现这一点;另外根据w3标准,服务器端响应的页面如果其http报文响应头中有Access-Control-Allow-Origin设置允许跨域也可以实现跨域,java对应response.setHeader("Access-Control-Allow-Origin","*"),静态html资源不支持这样的设置。
后端部分
1、 什么是重载?什么是重写?
答案:重载是同一个类中,出现方法名相同但是参数列表(参数类型和个数)不同的一种现象(方法返回类型不同不叫重载;重载中如果出现重载方法参数是子孙、祖先关系,传入的参数是子孙对象就调用子孙类参数对应的方法,子孙类的子孙类对象调用子孙类参数对应方法,子孙类祖先对象则调用祖先类参数对应方法);
重写是父类子类之间的一种关系,子类中对父类中方法进行重新实现。
2、 如何创建一个具有String类全部功能的类(final属性修饰的类全功能拷贝)?
答案:使用聚合思想实现,在自定义类中保存一个String属性并提供一个public访问权限,当使用到String的功能时使用聚合的String对象实现调用。
3、 Java语言包括哪几个版本?
答案:SE,标准版,提供基本功能支持;EE,企业版,基于SE在web开发方面做了加深,开发好的程序在web服务器中运行;ME,移动版,基于SE在移动端做了加深,开发好的程序运行在移动端,前几年功能机时代很火的JAVA 小游戏就是利用ME开发的。
4、 了解java语言社区版吗?
答案:java sdk目前主要由oracle公司(商业)和Sun公司开源的openjdk提供,openjdk就是java语言的社区版,社区版和oracle提供的版本功能基本相同,源码中有些地方差别仅在于注释中的版权信息,其他内容完全一样。
5、 什么是面向对象?
答案:万物皆对象,类是对象的蓝图。
6、 String中equals和 == 的区别是什么?
答案:==是用来判断两个对象的引用地址是否相同,只有当在堆内存中的引用地址相同时才会返回true; equals用来判断String值是否相同,当值相同时返回true。
7、 equals使用注意点是什么?
答案:避免null.equals(“xx”)的异常调用形式出现。有三种思路,1)采用”xx”.equals(null),常量在前的形式;2)在进行equals方法调用前先判断要使用equals方法的对象是否为null;3)用 try catch() 将需要调用equals的代码块包裹起来,添加异常处理。
8、 说下HashMap和HashTable的区别?
答案:HashMap和HashTable基本功能相似。HashTable相较HashMap是线程安全的,并且HashTable不支持null。
9、 HashMap有哪些遍历方法?
答案:主要有三种。1)先利用HashMap对象的keySet方法获得key集合,然后依次遍历key集合, 利用对象的get(String key)方法获得值;2)先利用HashMap对象的entrySet方法获得对象中的映射条目集合,然后遍历条目集合,根据每个条目获得其key和value;3)java8提供的lamda表达式遍历。
10、 为什么选择了java语言?
答案:作为完全面向对象的语言、java拥有最大的开发者社区,极其丰富的类库功能强大,以及其良好的跨平台性都是其他语言很难相相比的;java开发工程师岗位需求量非常大,拥有良好的就业前景。
11、 班上有来自不同省份的同学,设计一条sql语句查出所有省份名称,并按照人数从高到低排序(基本分组查询统计)?
答案:select 省份字段 from 学生表 group by 省份字段 order bycount(*) desc;
12、 JSP和Servlet的关系是什么?
答案:JSP可以看作在html中植入了java代码。JSP通过服务器的JSP引擎转化为Servlet, jsp的基本内置对象对应转化过后的Servelt中的局部变量。JSP是为了弥补Serlvet视图处理的繁杂而出现的一种技术。
13、 Java web中listener、filter、servlet的加载顺序是怎样的?
答案:listener先加载然后是filter,最后才是servlet。
14、 什么是rest api?
答案:rest 是后端服务接口设计规范,主要包括url命名设计、http请求方法选择、状态码使用等。常常以一个接口是否足够restful来衡量一个接口设计是否规范。
15、 Spring的核心思想是什么?
答案:ioc(控制反转)又叫做DI(依赖注入),以及aop(面向切片编程)。Ioc是spring的基础,bean的管理用到的就是ioc。aop主要用来实现事物处理以及一些验证功能。在学习spring的初期我曾经已java的反射来实现简单的ioc, 以动态代理来实现简单面向切片。
16、 Spring、struts、spring MVC的核心启动类是什么(web.xml里面配置的入口是什么)?
答案:spring是ContextLoader; struts是FilterDispatcher; spring MVC是DispatcherFilter。
17、 Hibernate中遇到过的印象深刻的问题是什么?
答案:在一个事物中,先对对象进行持久化操作(主键自动生成),然后根据对象的属性值去查询生成的对象,最后修改更新对象,结果是更新操作没有产生效果。经过研究发现session具有缓存机制,当事物没有提交时直接查询获取持久化的对象,这时就会出现session缓存中有两个对象,两个对象通过其映射id标识自身,而两个对象的id又是一样的,导致无法区分,这时会产生对后来查询对象无法生效的后果。解决办法很简单,在对象持久化后不用利用查询语句查询对象(持久化后id已经自动设置到了对象中),直接在原有对象的基础上修改然后更新就好了。
18、 描述下用户登陆流程。
答案:1)用户在登陆页面上面填写好账号、密码还有验证码,然后提交登陆信息;2)服务器端控制层先检验下session中是否有用户账号记录防止重复登陆;3)匹配session中的验证码是否和用户提交的一致;4)控制层利用用户账号做参数调用model层,判断有没有用户记录,如有则为控制层返回用户密码;5)控制层利用约定好的加密算法对登陆页面传来的密码进行加密然后和数据库中的密码进行对比,如果一致则登陆成功,往session中存入用户信息。任意一个环节有问题则终止接下来的环节,并返回提示信息。
19、 如何设计一个权限管理模块?
答案:权限管理模块包含用户、角色、模块和功能四部分。用户和角色是多对多的关系、角色和模块是多对多的关系、角色和功能也是多对多的关系。角色直接拥有功能,模块起功能组织汇总作用。只有当用户的角色同时具有功能和功能所在的模块时才具有该功能的权限。
20、 你了解哪些web服务器?
答案:apache提供的tomcat开源免费且性能优异;weblogic, 要收费的;jetty较为轻量,启动速度快,常用来做开发用的服务器。
非技术
1、 你最大的缺点是什么?
答案:我最大的缺点是沟通问题。曾经我接了一个外包来做,按照当时熟悉的那套技术体系完全是可以在和客户约定好的时间前搞定的。但是当时对什么新知识都好奇,正好最近新接触的技术也可以实现外包项目,就没有使用自己熟识的技术而是迫不及待的把新接触了技术用了上来。因为对新接触技术的不熟悉,项目进度在不断填坑中推进缓慢,到项目截至日期不到一个星期的时候才完成了不到一半的工作量,但是当时仍旧抱着一丝侥幸心里——说不定可以完成的,就没有及时和客户反应情况。到项目截至的时候,客户打电话来问情况,结果被教训了一顿——“平时给你打电话问有没有问题,不是没问题吗,现在是怎么了,当初你是怎么信誓旦旦的保证的……”。最后项目延期完成了,项目的钱也顺利拿到了,但是因为自己没有及时沟通汇报情况,让客户做好异常处理准备导致了客户的业务活动受到了影响,不仅如此,还使自己失掉了信义,典型的损人害己。当时的我技术水平一般也没有经验,在技术选型方面出了岔子是可以理解的,但是问题的影响是完全可以减小或者消除的,如果我能及时和客户沟通说明情况让他们做好准备结果就不一样了。究其根源还是没有及时沟通的结果。
回答要点:你要达到的效果是弱化缺点、强化你在缺点改正方面的认识:让面试官意识到你已经深深意识到了缺点;并且你的缺点是成长过程中基本上人人都要经历的;你在缺点上面确实得到了深刻的教训,你已经下定决心要改变了或者已经改变了。
2、 你经历过印象最深刻的失败的事情是什么?
答案:可以套题目一: 失败了 -> 得到了教训–> 在改正中或者已经成功改正。
3、 你的学习方法是什么?
答案:案例一:在看源代码的时候,我使用idea来做阅读器,锁定一个类然后使用idea自带的生成类图功能生成要看的类及其关联父类和祖先类的关系类图,然后根据类图结构依次往上看,遇到不懂的英文单词,使用有道翻译的划词翻译功能快速翻译词汇保证思路不被打断,如果是常见词汇点击有道翻译的保存按钮保存下来,平时午饭或者睡觉前使用有道翻译手机客户端将源代码阅读遇到的生词同步下来复习;
案例二:在阅读一本从前没看过的技术书籍的时候,我会把印象笔记打开,专门建立一篇笔记取名某某技术重要知识点,在读书的过程中如果遇到之前不懂的概念就把它记录下来,然后在手机端利用空闲时间片段复习。
回答要点:细节。拈几个平时学习的场景来谈下就行了。
4、 以后打算在厦门发展吗?
答案:1)家在福建省外可以这样回答:我女朋友是厦门本地的,我也挺喜欢厦门这个地方的,应该会待个五六年吧;2)如果家在福建省内:我家在XXX, 我想在离家近的地方工作,待在福建省内。厦门是经济特区,IT薪资水平比福州还会高些。综合下离家的距离和薪资水平我确定下来了要在厦门工作;3)如果是厦门土著:我家就在厦门,父母叫我在厦门本地工作。厦门是我的家乡,个人觉得厦门薪资水平在福建省也是数一数二的,我会在厦门发展。
回答要点:应该以回答”你打算在厦门长久发展吗?为什么?”的角度来回答这个问题。厦门二线城市要突出生活环境还有家庭因素;薪资水品和北上广没法比,但是和省内其他城市还是有得一比的。
5、 你的职业规划是什么?
答案:我的目标是能够走技术路线,成为JAVA WEB技术专家。在以往的学习中我学习了html、css、js、jquery、extjs、jquery mobile等WEB前端技术;JAVA WEB后端技术方面我学习struts2、spring、hibernate、ehcache、springMVC、mybatise、mysql等技术,并接了一些外包来做了实践。现在的我已经具备独立开发出一个简单个人网站的能力,但是网站各个模块的核心细节实现把握上面还有待加强,现在正在自己设计权限管理模块,数据库已经做出来了,剩下业务代码的设计。权限管理模块做好后,我还会去加强登陆模块开发知识,使用更为安全的https、错误访问次数频率过高产生验证码。等到WEB核心业务技术模块的加强到一定水平后,我将进入中间件的学习,现在已经确定了redis、rabitMQ、zookeeper、kafka,具体学习方案待确认中。
回答要点:说明自己的目标,分析自己现在的情况,现在自己正在怎么实现这个目标。
结语
本文主要面向应届生或其他应聘初级java开发工程师的仁兄。
以上是关于给伟伟的java web面试助攻的主要内容,如果未能解决你的问题,请参考以下文章