企业面试题总汇
1、 请列举至少3个JDK安装目录下的可执行程序(如:javac),并列举几个常用的命令行参数
1、 javac 将Java源代码换成字节代 用法: javac <选项><源文件> 可能的选项包括: -g 生成所有调试信息 -g:none 生成无调试信息 -g:{lines,vars,source} 生成只有部分调试信息 -O 优化;可能妨碍调试或者增大类文件 -nowarn 生成无警告 -verbose 输出关于编译器正在做的信息 -deprecation 输出使用了不鼓励使用的API的源程序位置 -classpath <路径> 指定用户类文件的位置 -sourcepath <路径> 指定输入源文件的位置 -bootclasspath <路径> 覆盖自举类文件的位置 -extdirs <目录(多个)> 覆盖安装的扩展类的位置 -d <目录> 指定输出类文件的位置 jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...选项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的)文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用ZIP压缩格式 -M 不产生所有项的清单(manifest)文件 -i 为指定的jar文件产生索引信息 javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] -overview
对象的建立和放置都是在内存堆栈上面进行的。程序或者其他的对象可以锁定一块堆栈地址来进行其他对象的引用。
当一个对象没有任何引用的时候,Java的自动垃圾回收机制就发挥作用,自动删除这个对象所占用的空间,释放内存以避免内存泄漏。但是内存泄漏并不是就此而完全避免了,当程序员疏忽大意地忘记解除一个对象不应该有的引用的时候,内存泄漏仍然不可避免,不过发生的几率要比不启用垃圾回收机制的C++程序少很多。但是总体来讲,自动垃圾回收机制要安全和简单许多。
3、 请简单描述单子模式(单例模式)的各种不同实现方式,及各自优缺点。请列举至少2中其
他的设计模式及应用场景
4、 /*单例设计模式主要有2种实现方式:懒汉式、饿汉式。 5、 他们分别有如下实现: 6、 饿汉式: 7、 //饿汉式单例类.在类初始化时,已经自行实例化 */ 8、 public class Singleton1 { 9、 //私有的默认构造子 10、 private Singleton1() {} 11、 //已经自行实例化 12、 private static final Singleton1 single = new Singleton1(); 13、 //静态工厂方法 14、 public static Singleton1 getInstance() { 15、 return single; 16、 } 17、 } 18、 懒汉式: 19、 //懒汉式单例类.在第一次调用的时候实例化 20、 public class Singleton2 { 21、 //私有的默认构造子 22、 private Singleton2() {} 23、 //注意,这里没有final 24、 private static Singleton2 single=null; 25、 //静态工厂方法 26、 public synchronized static Singleton2 getInstance() { 27、 if (single == null) { 28、 single = new Singleton2(); 29、 } 30、 return single; 31、 } 32、 } 33、 34、 /*其他设计模式: 35、 1.适配器模式 36、 应用场景:比如说在朋友聚会上遇到一个德国人sarsh,可以我不会德语,她不会中文,我只好求助于我的朋友mary了,他作为我和sarsh之间的adapt,让我和sarsh可以交流了。 37、 2.装饰模式 38、 应用场景:想要自己做礼物送给朋友,拿出去年在华山顶上的照片,在背面写上“最好的礼物”再到街上礼品店买个相框,在找隔壁学美术的朋友设计一个漂亮的盒子装起来,我们都是Decorator。*/ 4、 输出结果
1. public static void main(String[] args)throws Exception{ 2. String str = \中国\; 3. System.out.println(str.getBytes(\).length); 4. System.out.println(str.getBytes(\).length); 5. System.out.println(str.getBytes(\).length); 6. System.out.println(new String(str.getBytes(\),(\)); 7. System.out.println(new String(str.getBytes(\),(\)); 8. System.out.println(new String(str.getBytes(\),(\)); 9. } 10. 输出结果: 11. 6 12. 4 13. 2 14. ?? 15. 中国 16. 中国 5、 使用二分查找法查找字符串数组{\中\元素
6、 public class Query4Half { 7、 8、 static int bsearch( String[] a, String v ) { 9、 int l, r; 10、 l = 0; r = a.length-1; 11、 while ( l <= r ) { 12、 int m = (l+r)/2; 13、 if ( a[m].compareTo(v)==0 ) return m; else 14、 if ( a[m].compareTo(v)>0 ) r = m-1; else 15、 if ( a[m].compareTo(v)<0 ) l = m+1; 16、 } 17、 return -1; 18、 } 19、 20、 public static void main(String[] args) { 21、 String str[] = {\,\,\,\,\,\,\,\}; 22、 int bsearch = bsearch(str, \); 23、 System.out.println(bsearch); 24、 } 6、 请详细阐述Spring事务机制的实现原理?
Spring的事务管理机制实现的原理,就是通过AOP,使用动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的 方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。
7、 Spring声明式事务的优点
执行情况提交或者回滚事务。
声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过等价的基于标注的方式),便可以将事务规则应用到业务逻辑中。因为事务管理本身就是一个典型的横切逻辑,正是 AOP 的用武之地。Spring 开发团队也意识到了这一点,为声明式事务提供了简单而强大的支持。
声明式事务管理曾经是 EJB 引以为傲的一个亮点,如今 Spring 让 POJO 在事务管理方面也拥有了和 EJB 一样的待遇,让开发人员在 EJB 容器之外也用上了强大的声明式事务管理功能,这主要得益于 Spring 依赖注入容器和 Spring AOP 的支持。依赖注入容器为声明式事务管理提供了基础设施,使得 Bean 对于 Spring 框架而言是可管理的;而 Spring AOP 则是声明式事务管理的直接实现者,这一点通过清单8可以看出来。 通常情况下,笔者强烈建议在开发中使用声明式事务,不仅因为其简单,更主要是因为这样使得纯业务代码不被污染,极大方便后期的代码维护。
和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。
8、 Struts采用了什么设计模式?并详细说明各个组成部分?
struts采用了MVC设计模式,严格按照mvc设计模式进行设计,实现解耦和,struts2经过前端控制器来转发请求,控制请求流向(也就是我们的控制层)。然后Struts经过模型层去处理数据,把处理结果再交给控制层进行视图解析。这样一个过程严格按照MVC设计模式。