企业面试笔试题总汇v1.6.docx

格式: docx 页数: 62 文件大小: 0MB 侵权/举报
企业面试笔试题总汇v1.6.docx

企业面试笔试题总汇v1.6.docx

格式: docx 页数: 62 文件大小: 0MB
企业面试笔试题总汇v1.6.docx 企业面试题总汇(13-51) Java基础部分 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 <目录> 指定输出类文件的位置 用法: 2.jar 打架包,查看 jar包 jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...选 项: -c 创建新的存档 -t 列出存档内容的列表 -x 展开存档中的命名的(或所有的)文件 -u 更新已存在的存档 -v 生成详细输出到标准输出上 -f 指定存档文件名 -m 包含来自标明文件的标明信息 -0 只存储方式;未用ZIP压缩格式 -M 不产生所有项的清单(manifest)文件 -i 为指定的jar文件产生索引信息 用法: 3.javadoc:根据 Java 源代码及其说明语句 生成的HTML文档 javadoc [options] [packagenames] [sourcefiles] [classnames] [@files] -overview<file>读取 HTML 格式的概述文档 -public 仅显示 public 类和成员 -protected 显示 protected/public 类和成员(缺省) -package 显示 package/protected/public 类和成员 -private 显示所有类和成员 -help 显示命令行选项 -doclet <class> 通过候选 doclet 生成输出 -docletpath <path> 指定 doclet 类文件的查找位置 -sourcepath <pathlist> 指定源文件的查找位置 -classpath <pathlist> 指定用户类文件的查找位置 用法: 4.javah:产生可以调 用 Java 过程的 C 过程, 或建立能被 Java 程序 调用的 C 过程的头文 件 javah [options] <classes> 其中 [options] 包括: -help 打印该帮助信息 -classpath <path> 类的加载路径 -bootclasspath <path> 自举类的加载路径 -d <dir> 输出目录 -o <file> 输出文件(仅能使用 -d 或 -o 之一) -jni 生成 JNI 风格的头文件(缺省) -old 生成 JDK1.0 风格的头文件 -stubs 生成 stubs 文件 -version 打印版本信息 -verbose 输出有关本命令所做工作的信息 -force 始终写输出文件 用法: 2、 请分析命题:“Java 采用自动垃圾回收技术(GC),因此不会出现内存泄露” 对象的建立和放置都是在内存堆栈上面进行的。程序或者其他的对象可以锁定一 块堆栈地址来进行其他对象的引用。 当一个对象没有任何引用的时候,Java 的自动垃圾回收机制就发挥作用,自动 删除这个对象所占用的空间,释放内存以避免内存泄漏。但是内存泄漏并不是就此而完全避免了,当程序 员疏忽大意地忘记解除一个对象不应该有的引用的时候,内存泄漏仍然不可避免,不过发生的几率要比不 启用垃圾回收机制的 C++程序少很多。但总体来讲,自动垃圾回收机制要安全和简单许多。 3、 简单描述单子模式(单例模式)的各种不同实现方式,极其各自优缺点。请列举至少 2 种其他的设计模式及应用场景。 1、 /*单例设计模式主要有 2种实现方式:懒汉式、饿汉式。 2、他们分别有如下实现: 3、饿汉式: 4、 //饿汉式单例类.在类初始化时,已经自行实例化 */ 5、 public class Singleton1 { 6、 //私有的默认构造子 7、 private Singleton1() {} 8、 //已经自行实例化 9、 private static final Singleton1 single = new Singleton1(); 10、 //静态工厂方法 11、 public static Singleton1 getInstance() { 12、 return single; 13、 } 14、 } 15、 懒汉式: 16、 //懒汉式单例类.在第一次调用的时候实例化 17、 public class Singleton2 { 18、 //私有的默认构造子 19、 private Singleton2() {} 20、 //注意,这里没有 final 21、 private static Singleton2 single=null; 22、 //静态工厂方法 23、 public synchronized static Singleton2 getInstance() { 24、 if (single == null) { 25、 single = new Singleton2(); 26、 } 27、 return single; 28、 } 29、 } 30、 /*其他设计模式: 31、 1.适配器模式 32、 应用场景:比如说在朋友聚会上遇到一个德国人 sarsh,可以我不会德语,她不会中文,我只 好求助于我的朋友 mary了,他作为我和 sarsh之间的 adapt,让我和 sarsh可以交流了。 33、 2.装饰模式 34、 应用场景:想要自己做礼物送给朋友,拿出去年在华山顶上的照片,在背面写上“最好的礼 物”再到街上礼品店买个相框,在找隔壁学美术的朋友设计一个漂亮的盒子装起来,我们都是 Decorator。*/ 4、 输出结果 1. public static void main(String[] args)throws Exception{ 2. String str = "中国"; 3. System.out.println(str.getBytes("UTF-8").length); 4. System.out.println(str.getBytes("GBK").length); 5. System.out.println(str.getBytes("ISO-8859-1").length); 6. System.out.println(new String(str.getBytes("ISO-8859-1"),("ISO-8859- 1")); 7. System.out.println(new String(str.getBytes("UTF-8"),("UTF-8")); 8. System.out.println(new String(str.getBytes("GBK"),("GBK")); 9. } 10. 输出结果: 11. 6 12. 4 13. 2 14. ?? 15. 中国 16. 中国 5、 使用二分查找法找字符串数组{"a","b","c","d","e","f","g","h"}中"g"元素 5、 public class Query4Half { 6、 static int bsearch( String[] a, String v ) { 7、 int l, r; 8、 l = 0; r = a.length-1; 9、 while ( l <= r ) { 10、 int m = (l+r)/2; 11、 if ( a[m].compareTo(v)==0 ) return m; else 12、 if ( a[m].compareTo(v)>0 ) r = m-1; else 13、 if ( a[m].compareTo(v)<0 ) l = m+1; 14、 } 15、 return -1; 16、 } 17、 public static void main(String[] args) { 18、 String str[] = {"a","b","c","d","e","f","g","h"}; 19、 int bsearch = bsearch(str, "g"); 20、 System.out.println(bsearch); 21、 } 6、 Java 代码实现一个链表结构 6、 public class MyList<AnyType> { 7、 private class Node<AnyType>{ 8、 public Node<AnyType> pre; 9、 public Node<AnyType> next; 10、 public AnyType data; 11、 public Node(AnyType d, Node<AnyType>p, Node<AnyType> n){} 12、 public Node(){} 13、 } 14、 private int theSize; 15、 private Node<AnyType> Header; 16、 private Node<AnyType> Tail; 17、 public MyList(){} 18、 public void add(AnyType item){} 19、 public boolean isEmpty(){} 20、 public int size(){} 21、 public AnyType get( int idx){} 22、 public void print(){} 23、 } 24、 /*Node<AnyType>类定义了双向链表中节点的结构,它是一个私有类,而其属性和构造函数都 是公有的,这样,其父类可以直接访问其属性,而外部类根本不知道 Node类的存在。Data是节点 中的数据与,pre指向前一个 Node节点,next指向后一个 Node节点。其构造函数的实现如下, 不解释: 25、 View Code*/ 26、 public Node(AnyType d, Node<AnyType>p, Node<AnyType> n){ 27、 this.data = d; 28、 this.pre = p; 29、 this.next = n; 30、 } 31、 public Node(){ 32、 this.data = null; 33、 this.pre = null; 34、 this.next = null; 35、 } 36、 /*下面我们看一下链表的构造函数实现: 37、 View Code*/ 38、 public MyList(){ 39、 theSize = 0; 40、 Header = new Node<AnyType>(null,null,null); 41、 Tail = new Node<AnyType>(null,Header,null); 42、 Header.next = Tail; 43、 } 44、 /*我们构造了一个带有头、尾节点的双向链表,头节点的 Next指向尾节点,为节点的 pre指 向头节点。链表长度起始为 0。 45、 继续贴上链表类其它方法的实现,不解释了,应该比较清楚:*/ 46、 //View Code 47、 public void add(AnyType item){ 48、 Node<AnyType> aNode = new Node<AnyType>(item,null,null); 49、 Tail.pre.next = aNode; 50、 aNode.pre = Tail.pre; 51、 aNode.next = Tail; 52、 Tail.pre = aNode; 53、 theSize++; 54、 } 55、 public boolean isEmpty(){ 56、 return ( theSize == 0); 57、 } 58、 public int size(){ 59、 return theSize; 60、 } 61、 public AnyType get( int idx){ 62、 if(idx > theSize-1 || idx < 0) 63、 throw new IndexOutOfBoundsException(); 64、 Node<AnyType> current = new Node<AnyType>(null,Header,null); 65、 for(int i = 0; i<idx; i++) 66、 current = current.next; 67、 return current.data; 68、 } 69、 public void print(){ 70、 Node<AnyType> current = Header.next; 71、 while(current.next != null){ 72、 //如果 AnyType是你自己定义 //的数据类型,那么请务必提供 73、 //一个 toString方法,要么就不 74、 //要在链表里实现 print方法。 75、 System.out.println(current.data.toString()); 76、 current = current.next; 77、 } 78、 } ...