1、序列化有什么用?为什么要用序列化?我回答是按照中国大多数BLOG上说的那样回答的,貌似他们不赞同。
2、new一个JAVA对象的时候,内存是怎么分配的?
3、容器是怎么管理session的?
4、Spring的AOP是用什么原理实现的?我回答动态代理,他说还有一个,不知道是什么?
5、JVM的工作原理?注意不是工作流程,这谁都知道
2、new一个JAVA对象的时候,内存是怎么分配的?
3、容器是怎么管理session的?
4、Spring的AOP是用什么原理实现的?我回答动态代理,他说还有一个,不知道是什么?
5、JVM的工作原理?注意不是工作流程,这谁都知道
解决方案 »
- 关于java剔除手机黑名单的算法,有没有更好的?
- 哪位高手用java写过子网内发现拓扑的程序
- 出现[Microsoft][SQLServer 2000 Driver for JDBC]Connection reset by peer: socket异常,求解。。
- 如何用java读取zip文件名和zip内文件的文件名!在线等
- 客户端用axis2调webServer出错
- 请看一下我Tomcat和JDK的环境变量是不是配错了?麻烦帮帮忙
- 谁搞过即时通讯?
- TOMCAT配置问题
- 向高手请教:基于RMI的分布式垃圾收集的设计
- MyEclipse调试自己的代码出现Source not fund
- Js,select赋值问题.
- Java 作业 求解答 谢谢
2.new一个JAVA对象的时候,在栈中分配一块内存存储变量即引用,这个变量指向堆内存中得值,大概就是这么个意思,表述的不是很清楚
3.session参考下这篇文章,http://blog.csdn.net/iloveqing/archive/2007/03/29/1544958.aspx
4.还一个是反射机制
5.这个还真不知道。http://wuchangshengp27.blog.163.com/blog/static/60543761200811313826993/
new 一个java对象在内存中分配出2快区域,一块存储要创建的对象,一块存储当前对象的引用
不知道回到的对不对,等高手
java 语言要比框架那些重要的多
可以不学框架 语言一定要学好 还有数据库
2、序列化是为了解决在对对象流进行读写操作时所引发的问题。
3、当Session数量超过默认缓存大小,应用服务器6.0会将内存中的Session持久化到存储介质中,并根据Session的活跃性对存储中的Session和缓存中的Session进行交换。
管理员可配置Session缓存池的大小。应用服务器6.0支持的Session持久化包括文件系统、RDBMS、BerkerlyDB,管理员可通过管理工具切换Session的存储方式。
如果Session中的数据非常重要,即使服务器失效,这些数据也不能丢失,那么建议采用数据库来持久化Session。
4、.aop的实现原理
1>.其核心为自动生成代理对象(动态代理).
动态代理在spring中有两种实现手段:jdk动态代理(Proxy+InvocationHandler),cglib动态代理.前者要求目标必须实现接口,而后者无此要求.2>代理对象由增强和目标两部分构成.3>代理对象与目标对象肯定是同一种类型.
5、JVM不清楚,,不玩过
2、序列化是为了解决在对对象流进行读写操作时所引发的问题。
3、当Session数量超过默认缓存大小,应用服务器6.0会将内存中的Session持久化到存储介质中,并根据Session的活跃性对存储中的Session和缓存中的Session进行交换。
管理员可配置Session缓存池的大小。应用服务器6.0支持的Session持久化包括文件系统、RDBMS、BerkerlyDB,管理员可通过管理工具切换Session的存储方式。
如果Session中的数据非常重要,即使服务器失效,这些数据也不能丢失,那么建议采用数据库来持久化Session。
4、.aop的实现原理
1>.其核心为自动生成代理对象(动态代理).
动态代理在spring中有两种实现手段:jdk动态代理(Proxy+InvocationHandler),cglib动态代理.前者要求目标必须实现接口,而后者无此要求.2>代理对象由增强和目标两部分构成.3>代理对象与目标对象肯定是同一种类型.
5、JVM classload类加载
1. 序列化 是为了保存对象用的,可以理解为复制一个按钮。 只有实现了这个接口才可以使用对象流来实现读写。2. Object o = new Object() , 堆上创建object对象, 栈里保存引用 o 。
好像序列化 是用来 网络传输对象的,把对象搞成2进制后 在网络上传送 然后 在序列化成对象2、new一个JAVA对象的时候,内存是怎么分配的?
new 对象的时候 在内存中 建立一个 内存区域 就是堆内存 用来存放对象的属性, 当new完对象把对象的地址赋给对象的引用变量 这个时候 又在内存中建立一个区域 叫栈内存 用来存储 引用变量 引用变量存储对象的地址, 当对象没有被任何引用变量 引用的时候 就变成了 垃圾会被java的垃圾清除机制清除掉
别的不知道了
类加载期织入需要有特殊的类加载器。这种类型主要的框架有 AspectJ 等
运行期(动态代理)织入,依赖于 JDK 或者其他框架的动态代理功能实现。这种类型典型的是 Spring AOPAspectJ 有两种类型的织入,因此可以说是最棒的。像 Spring AOP 中有个切点表达式,那语法就是 AspectJ 切点表达式中的一部分。
实现了Serializable接口的对象,可将它们转换成一系列字节,并可在以后完全恢复回原来的样子。这一过程亦可通过网络进行。这意味着序列化机制能自动补偿操作系统间的差异。换句话说,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新“装配”。不必关心数据在不同机器上如何表示,也不必关心字节的顺序或者其他任何细节。例如:
User{
String name;
String icon;
String message;
}
当我想把这个User信息从一个客户端发到另一个的时候: 我可能会这个写(不用序列化实现):
String msg=user.getName()+"_"+user.getIcon()+"_"user.getMessage();
把这个msg发到另一端,
然后另一端解析这个字符串
String[] msgs=msg.split("_");
User user=new User();
user.setName(msgs[0]);
user.setIcon(msgs[1]);
user.setMessage(msgs[2]);
这样我们就完成了信息的传送,但是这样还是很麻烦的,如果字段多的话,而且你的分隔符'_'是不能在name,icon,message中出现,要不然另一端解析就会出错。
如果用序列化实现,直接把user的字节码发过去,再另一端还原就OK了。
楼主的这些问题 我面试官不是靠你的理论基础,而是始终应用举例。我会这么回答。
1 序列化,我以前写过一个游戏,里面有很多对象,当我想保存有劲进度的时候 就用到了序列化,直接把游戏里面的对象全部保存到硬盘上, 下次打开游戏的时候我直接加载这些对象就ok。
2. new一个对象会把对象放在堆栈里,堆栈的具体大小和实际内存条有关, 二不new的话是放在栈里 栈的空间很小1m~2m,而且栈还有队列顺序 虽然栈里的变量或者对象读写速度很快但是都是要保持对流原则很浪费性能,放在堆里,是很好的选择。
3.session 每一个浏览器访问 在服务器都会产生一个session,sessionid是有浏览器决定,服务区通过sessionid来区别不同浏览器的访问,同一个浏览器不会再创建session,session有空闲时间设置,一般是30分钟超过就会失效,session占用的事服务器的资源,一般的话还是谨慎使用。
4.spring 的实现 是ioc和aop思想,我感觉面试官靠这个题目如果你能打上来算80分 如果你还能联想到ioc在说一下 甚至再说一下springsecurity 你会得100分 甚至120分。 aop就是动态代理,动态代理的实现有很多,比如struts2的拦截器,(servlet的过滤器的思想也很像实现有点区别),他们的原理都差不多就是应用在不同的地方而已,spring 的反射机制没研究,感觉是在解析xml之后条用相应的属性赋值的时候用到了。5. 这个问题我也不清楚 jvm内部有一个大的适配器 为了跨平台,而为了代码能在适配器上运行,sun又想出来了一个class文件,jvm会根据不同的os(操作系统)来分别解析class,最后在编译成能在该os上运行的程序。当运行虚拟机的时候jvm类加载器classloader会找到main作为入口函数,进而把操作权交给main所在的类。另外在jre的lib下面还有策略文件来管理java的安全机制。
我感觉面试 遇见自己不会的很正常,但是你别一看见不会就什么都不说了,要把自己会的说出来就ok了 面试也是两面性,你选他 他也要选择你
顶一下是用HashMap不是用WeakHashMap么