黑马程序员技术交流社区

标题: JavaEE面试经验分享——陕西运景网络科技有限公司 [打印本页]

作者: 就业高冷派    时间: 2018-6-23 16:50
标题: JavaEE面试经验分享——陕西运景网络科技有限公司
本帖最后由 就业高冷派 于 2018-6-23 16:57 编辑

陕西运景网络科技有限公司
公司行业:互联网/电子商务
公司规模:50-150人
公司地址:西安市高新区丈八六路与南三环辅导32号天网软件大厦
笔试题
面试总结:
1: 线程创建有哪些方式:
Thread类和Runnable接口,Callable接口(重写call方法,有返回值, 可由FutureTask获取到)。
Callable和Future组合的应用:有一个很耗时的结果需要计算,但是又不是立即用到,就可以使用这个组合。先用Callable开启一个线程进行计算,等后边程序真正用到的时候,再由Future获取到返回值,这样用户就不用等待了。
注:面试中如果关于线程的部分忘了怎么说了,就说:使用框架之后,框架底层对线程进行了封装,所以一般也不考虑安全问题(Struts2是多例多线程,线程安全;SpringMVC是单例多线程,只要不对全局变量进行增删改,线程也是安全的)。
2: struts默认是多例多线程的,那为什么还要在controller中要使用@Scope("prototype")?
struts默认是多例多线程的,线程安全;但spring创建的实例默认都是单例的,所以        struts2和spring整合之后,struts受到spring管理,变成单例的了,这样线程不安全,所以要在struts的controller中要使用@Scope("prototype")再改成多例的。
3: 说说jsp九大内置对象?
page(pageContext) --> request(response) -->  session -->  application(最大的域)
Out --> Exception --> Config(out了一个Exception,去看一下配置文件Config)
记忆:从前往后,从小往大,成对儿记忆。
1.page:page 对象代表JSP本身,只有在JSP页面内才是合法的,类似于Java编程中的 this 指针
2.pageContext:通过它可以获取 JSP页面的out、request、reponse、session、application、config等对象
3.request:封装请求参数(业务参数,请求路径,IP,端口,请求头等)
4.response:设置contentType,响应方式等
5.session:服务器为每用户都创建一个session对象,保存用户信息
6.application:服务器启动时创建,关闭时销毁。类似session,但它的生命域和声明周期比session更长,所有客户共享这个内置的Application对象(在线人员统计)
7.out:给浏览器输出信息,并管理应用服务器上的输出缓冲区
8.exception:显示异常信息,只有在包含 isErrorPage="true" 的页面才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。
9.config:获取服务器的配置信息。当一个Servlet 初始化时,容器把某些信息通过config对象传递给这个 Servlet,可以在web.xml中提供初始化参数。
4: 常见数据结构特点?
A:栈 先进后出
B:队列 先进先出
C:ArrayList 查询快,增删慢
D:LinkedList 查询慢,增删快
1:
ArrayList :一般情况下,数组在内存中是连续存储的(这就是为啥创建数组时必须要指定长度,因为它要去内存中预留一块足够大的空间),通过指针去找到一个数组下标是非常快的;但是,有好就有坏,数组需要去维护下标,导致增删就比较慢。
LinkedList :链表数据存储是不连续的,比如:内存中,A空间指向B空间,B空间指向C空        间,C空间指向D空间。我要查D空间的数据,每次都要从A空间顺着找过去,跳来跳去导致查询效率很低;但是有坏就有好,链表不需要维护每个数据的地址,增删时,只需要修改该数据前后两个数据的关联地址即可。
2:
如果数组比较大(eg: 2个G的数组),内存中可能没有那么大的连续有效空间去存储,肯定会有一些方式去打断连续存储,但跟咱们没关系。
5: 事务的特性及其意义?
4个特性:一致性,持久性,隔离性,原子性(一尺割圆)
1)一致性:不论事务成功还是失败,你的业务应该是一致的,数据不能被损坏。比如转账,你给张三转了1000,结果代码出错了,你扣了1000,但张三没有收到1000,这样数据/业务就损坏了,违反了一致性。
2)持久性:事务一旦完成,结果永久生效,无法回滚,哪怕完成的瞬间服务器挂了,它也应该把数据持久化,等服务器恢复了,它也恢复。
3)隔离性:多个事务同时处理一份数据时,事务之间应该相互隔离,否则就乱了(跟线程安全有点类似)。
4)原子性:整个方法被捆绑成一个原子,不可拆分,要么一起成功,要么一起失败(同生共死)。
l并发事务(同一时间进行的另一个事务)引起的3个安全问题(按顺序记忆):
1)脏读:A事务读取了B事务未提交的数据(一旦B事务回滚,可能会导致A事务读取的数据无效)。
2)不可重复读:一个事务方法中连续查询多次,却得到不同的结果(原因:并发事务在两次查询的瞬间对数据进行了修改)。
3)虚读/幻读:一个事务方法中连续查询多次,却得到不同的结果(原因:并发事务在两次查询的瞬间对数据进行了增加/删除)。
l数据库4个隔离级别(为了解决并发事务的安全问题):
安全性从低到高:唯一可穿
1)未提交读:安全级别最低,3个安全问题都解决不了。
2)已提交读(Oracle默认):可以解决第一个问题(脏读)。
3)可重复读(mysql默认):可以前两个问题(脏读和不可重复读)。
4)串行[又叫可序列化]:全部解决。
注意1:安全级别越来越高,那么效率就越来越低。比如串行,虽然把3个问题全解决了,但是有代价,它在执行A事务的时候,把整张表锁定了,其他事务后边排队,这样效率很低,所以基本不用。
注意2:数据库的隔离级别可以修改,但一般采用默认,不过有人为了提高mysql的性能,将其隔离级别改为第二级(已提交读),由于间隙锁的优化策略的存在,解决了不可重复读和虚读/幻读。
l事务的传播:
一个事务方法调用另一个事务方法,必须指定事务如何传播(比如:一个service方法        调用另一个service方法)。事务有7种传播行为,什么REQUIRED,REQUIRED_NEW,        SUPPORTS等(随便说几个)。spring默认是Required:调用方有事务就用该事务,没有        则开启新事务。
6: 什么是死锁,并写一个死锁?
线程死锁即多个线程抢夺CPU执行权,往往由于锁的嵌套(也有其他情况),导致通信阻塞,陷入无尽等待。
数据库事务死锁
同时开启两个事务。
事务A:
start transaction/begin;
update t1 set age = “11” where id = 1;
事务B:
start transaction/begin;
update t1 set age = “22” where id = 2;
事务A继续:update t1 set age = “111” where id = 2;
发现此时阻塞,因为id=2的记录数据被事务B锁定了;
事务B继续:update t1 set age = “222” where id = 1; 此时报错:
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
事务B回滚,事务A不再阻塞。
事务A:
commit;
结果:事务A修改成功,事务B失败。
7: session和cookie的生命周期 ?
session:
创建:
第一次访问jsp时,jsp会被转成servlet,在转换过程中,底层会自动调用        request.getSession()方法,去创建一个session,作为jsp九大内置对象之一和        jsp绑定;
而访问servlet时,如果内部没有使用request.getSession()方法,是不会创建        session的;只有手动调用该方法,才会创建。
注:访问HTML,js,图片,css等静态资源是不会创建session的,因为访问        这些静态资源用不到session,跟session没有半毛钱关系,死板的创建session        cookie        是浪费资源的。
销毁:
Tomcat默认30分钟后销毁,或者手动调用invalidate()方法,使之失效。
注:服务器关闭时,如果30分钟不到,session是不会销毁的,会被持久化到        本地磁盘,服务器启动会再次加载进内存。
cookie:
创建:
session创建之后,会自动创建一个cookie,把session的id存入cookie (Set-cookie:JSESSIONID=session的id),并响应给浏览器。当然,代码中可以手动new Cookie(“key”,”value”)并响应给浏览器。
销毁:
默认是浏览器关闭就销毁(cookie存储于浏览器内存,浏览器关闭,内存即释放,因而销毁),可以进行持久化,持久化之后即使浏览器关闭也不会销毁(存到硬盘上,再次打开浏览器又会被加载)。
8: 乱码问题(乱码的情况很多)?
浏览器 ---> 服务器 ---> 数据库:每个环节的数据传递都可能乱码
1.浏览器请求服务器乱码:
1)get请求乱码
浏览器向服务器使用get方式传递参数,如果有中文/日文等非字母语言时,服务器端就会产生乱码问题。因为应用程序之间的数据传递,底层都要转换成计算机能认识的二进制数据,转换过程中就涉及到编码问题。浏览器地址栏会先把参数进行utf-8编码,Tomcat 6/7接收到get请求的参数后,立即使用默认的ISO-8859-1进行解码,因而servlet/action获取的中文参数乱码。
解决方案:修改Tomcat 6/7的server.xml配置文件:URIEncoding="UTF-8", servlet中接收到参数后,进行逆向编码和解码:使用String的构造。
2)post请求乱码:
request.setCharacterEncoding(“utf-8”);
注:使用struts2框架后,它底层自动处理了post乱码问题
3.服务器响应浏览器乱码:
response.setContentType(“text/html;charset=utf-8 ”);
4.文件乱码:另存为无BOM头的UTF-8格式。
5.数据库乱码:修改数据库编码为utf-8。
注:springboot不乱码是因为内嵌的tomcat 8。
9: serialVersionUID作用?
反序列化时验证版本一致性。
序列化:将内存中的对象序列化到IO流(磁盘或网络)中。
eg:session,10万个用户并发访问时,内存可能存不下这么多session,会将一部分序列化到磁盘上(session的活化和钝化:session中的对象需要实现序列化接口,HttpSession本身是个接口,跟Serializable接口没关系)。
反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的序列化版本ID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会报异常。
file:///C:\Users\ADMINI~1.PC-\AppData\Local\Temp\ksohtml\wpsF945.tmp.jpg
1:serialVersionUID可以不写,java编译器会根据属性名等参数会自动生成一个版本号(很长的数字串),但是如果不写,当你将对象序列化后,又将实体类属性改了,再反序列化就会报错,因为两个版本号不一致。如果你写死一个版本号,那么就算对象序列化后又对实体类进行了修改也是没关系的,属性能对应就进行序列化,新增或删除的属性就用默认值。
建议:serialVersionUID写上,因为不同版本的jdk对于其计算方式可能不同,那么进行跨虚拟机传输时可能出问题。
2:为什么不是所有类都实现序列化接口?
String,Integer,集合等大量的类都实现了序列化接口)
安全性:序列化时私有属性是不被保护的,即通过构造方式传入的私有属性,即使不提供get/set方法,反序列化时也能获取到属性值。
资源分配问题:比如Thread,难道反序列化后CPU就能重新创建一个线程吗。


作者: 小公举    时间: 2018-6-25 14:27
感谢分享,我会好好努力学习的
作者: hello!!!    时间: 2018-6-25 14:43
谢谢分享,加油.
作者: 从容微笑    时间: 2018-6-25 15:04
大神,受小生一拜
作者: 760486198    时间: 2018-6-25 15:23

好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: 大晨晨    时间: 2018-6-25 15:28

作者: 专找bug    时间: 2018-6-25 15:52

感谢分享,我会好好努力学习的
作者: 仙人掌Sandy1    时间: 2018-6-25 15:52
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: yy1134787753    时间: 2018-6-25 16:46
感谢分享
作者: 逆风TO    时间: 2018-6-25 17:49
感谢分享  一定要找个好工作
作者: little_superman    时间: 2018-6-25 18:31
6666666666666666666666666
作者: 姑娘(wangxue)    时间: 2018-6-25 18:34
感谢分享   走心
作者: 零度☆黎明    时间: 2018-6-25 19:44
6666666666666666666666666
作者: JavaEE风清扬    时间: 2018-6-25 20:14
不错, 不错 ..................
作者: yujq    时间: 2018-6-25 20:23
有收获
作者: fujiangbo    时间: 2018-6-25 20:54

作者: 耙丫丫    时间: 2018-6-25 22:04

作者: 黑马程序员啊    时间: 2018-6-25 23:07
666666666666666666666666666
作者: hongping    时间: 2018-6-26 09:04

作者: duanshaobo    时间: 2018-6-26 09:29
在盒子里睡着的美梦,一打开就无影无踪,睡醒的人哭着想回家,可离家的人不会相信他
作者: 致橡树    时间: 2018-6-26 10:14
水军11号顶顶顶顶顶顶顶顶瞎jb顶顶
作者: 兮兮哈哈    时间: 2018-6-26 11:14
你好不好 好想知道
别急着把回忆都丢掉
作者: 小伙啊    时间: 2018-6-26 12:57

作者: xiaoheizi    时间: 2018-6-26 13:08

作者: 举个栗子    时间: 2018-6-26 13:09

作者: ruoquan    时间: 2018-6-26 13:10
很不错。。。。
作者: 王航    时间: 2018-6-26 13:24
6666666666666
作者: xuanxushuai01    时间: 2018-6-26 13:29
日了狗了
作者: 半个程序员    时间: 2018-6-26 14:04
键盘敲烂,月薪过万,你最棒。。
作者: 谢先森    时间: 2018-6-26 14:08
感谢分享 祝你工作顺利
作者: ouweina    时间: 2018-6-26 14:10
66666666666666666666666666
作者: 疯子小花花    时间: 2018-6-26 14:13

作者: zhuyanting    时间: 2018-6-26 15:18

作者: zhaosongzhi    时间: 2018-6-26 15:43
说的非常好,3Q
作者: zhaosongzhi    时间: 2018-6-26 15:43
6666666666666
作者: huochaochao    时间: 2018-6-26 17:49
666666666666
作者: 殷凯老师    时间: 2018-6-26 19:47

感谢分享!!!!!!!!!!!!!!!!!!!!
作者: 疯言峰语02    时间: 2018-6-26 21:34
6666666666666666
作者: zplxwl    时间: 2018-6-26 21:39
很好很好很好
作者: 这是一个师哥    时间: 2018-6-27 06:05
  西安 黑马就是厉害
作者: 1098018910    时间: 2018-6-27 09:21
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
好厉害!
作者: 就业高冷派    时间: 2018-6-27 10:50
为祖国贡献,不喊累
作者: dajiahao    时间: 2018-6-27 13:22
6666666666666666666
作者: SunYan    时间: 2018-6-27 13:28
黑马6666666666666666666
作者: 同心筑梦1    时间: 2018-6-27 16:14

作者: 小航子    时间: 2018-6-27 17:11
66666666666666
作者: 淡写薰衣草的香    时间: 2018-6-27 17:19

作者: mydorling11    时间: 2018-6-27 19:22
老铁66666老铁66666老铁66666老铁66666老铁66666老铁66666
作者: json0314    时间: 2018-6-27 19:38
棒棒哒
作者: #风萧萧#    时间: 2018-6-28 12:08

谢谢分享,加油.
作者: superbaby    时间: 2018-6-28 12:16
棒棒哒 .....................
作者: 巴拉拉小魔仙    时间: 2018-6-28 14:59

作者: 黑马小王子123    时间: 2018-6-28 16:24

666666666666666666666666666
作者: SharkSSB    时间: 2018-6-28 16:28

作者: kdhdjdj    时间: 2018-6-28 17:15

作者: 哦嗨呦    时间: 2018-6-28 17:18
顶!!!!!!!!!!!
作者: 多喝点热水~    时间: 2018-6-28 17:30
            
作者: 小西西哦    时间: 2018-6-28 17:33
6666666666666666666666666666
作者: 温柔一刀!喵!    时间: 2018-6-28 17:35

作者: 小西西哦    时间: 2018-6-28 17:42
66666666666666666666666666666666666666666
作者: 小丹子    时间: 2018-6-28 17:56


感谢分享,我会好好努力学习的
作者: 凯凯小王子    时间: 2018-6-29 11:21
撸起袖子加油干
作者: 小丹子    时间: 2018-6-30 18:35
好高大上啊!
作者: 逆风TO    时间: 2020-2-18 18:10
小公举 发表于 2018-6-25 14:27
感谢分享,我会好好努力学习的

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:10
hongping 发表于 2018-6-26 09:04

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:10
duanshaobo 发表于 2018-6-26 09:29
在盒子里睡着的美梦,一打开就无影无踪,睡醒的人哭着想回家,可离家的人不会相信他 ...

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:10
小公举 发表于 2018-6-25 14:27
感谢分享,我会好好努力学习的

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:10
hello!!! 发表于 2018-6-25 14:43
谢谢分享,加油.

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:11
从容微笑 发表于 2018-6-25 15:04
大神,受小生一拜

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:11
760486198 发表于 2018-6-25 15:23
好厉害!
好厉害!
好厉害!

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:11
大晨晨 发表于 2018-6-25 15:28

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:11
逆风TO 发表于 2018-6-25 17:49
感谢分享  一定要找个好工作

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
little_superman 发表于 2018-6-25 18:31
6666666666666666666666666

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
JavaEE风清扬 发表于 2018-6-25 20:14
不错, 不错 ..................

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
耙丫丫 发表于 2018-6-25 22:04

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
黑马程序员啊 发表于 2018-6-25 23:07
666666666666666666666666666

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
hongping 发表于 2018-6-26 09:04

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
仙人掌Sandy1 发表于 2018-6-25 15:52
好厉害!
好厉害!
好厉害!

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
fujiangbo 发表于 2018-6-25 20:54

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:12
耙丫丫 发表于 2018-6-25 22:04

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
致橡树 发表于 2018-6-26 10:14
水军11号顶顶顶顶顶顶顶顶瞎jb顶顶

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
这是一个师哥 发表于 2018-6-27 06:05
西安 黑马就是厉害

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
zplxwl 发表于 2018-6-26 21:39
很好很好很好

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
zplxwl 发表于 2018-6-26 21:39
很好很好很好

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
zhuyanting 发表于 2018-6-26 15:18

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
殷凯老师 发表于 2018-6-26 19:47
感谢分享!!!!!!!!!!!!!!!!!!!!

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
xuanxushuai01 发表于 2018-6-26 13:29
日了狗了

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
huochaochao 发表于 2018-6-26 17:49
666666666666

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:13
殷凯老师 发表于 2018-6-26 19:47
感谢分享!!!!!!!!!!!!!!!!!!!!

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
zhaosongzhi 发表于 2018-6-26 15:43
6666666666666

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
xuanxushuai01 发表于 2018-6-26 13:29
日了狗了

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
zhuyanting 发表于 2018-6-26 15:18

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
兮兮哈哈 发表于 2018-6-26 11:14
你好不好 好想知道
别急着把回忆都丢掉

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
王航 发表于 2018-6-26 13:24
6666666666666

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
小伙啊 发表于 2018-6-26 12:57

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
逆风TO 发表于 2020-2-18 18:14
感谢分享

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
逆风TO 发表于 2020-2-18 18:14
感谢分享

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:14
逆风TO 发表于 2020-2-18 18:14
感谢分享

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:15
逆风TO 发表于 2020-2-18 18:14
感谢分享

感谢分享
作者: 逆风TO    时间: 2020-2-18 18:15
1098018910 发表于 2018-6-27 09:21
好厉害!
好厉害!
好厉害!

感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2