已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java 工程师面试题1、下面的代码片段会输出什么?String s = Hello ;s += World ;s.trim( );System.out.println(s);2、下面的代码片段中,行A和行B所标识的代码有什么区别呢?public class ConstantFolding static final int number1 = 5;static final int number2 = 6;static int number3 = 5;static int number4= 6;public static void main(String args) int product1 = number1 * number2; /line Aint product2 = number3 * number4; /line B3、以下代码会输出什么 int m=3, n=4, total=0; public void comb(String str)for(int i=1;in+1;i+)if(str.length()=m-1)System.out.println(str+i);total+;elsecomb(str+i); comb();4、有如下接口,用于字符串反转,请完成接口的实现public interface Reverser public String reverse(String str);public class JdkReverser implements Reverser public String reverse(String str) /-请于此完成此方法实现字符串反转如果不使用JDK里的方法,自己采用递归方式实现反转,如何实现?5、列举几种不同的创建线程的方法,你所列举的方法中,你推荐通过哪种方式创建线程,为什么? 简要的说明一下高级线程状态6、如果让你实现类似12306的车次查询,如输入Z可以查到z61,z181,在以下条件下简述你怎么设计表和实现,写出表结构和查询的sql约束条件:一、性能要求高,但是存储空间大,可接受数据冗余二、不使用like ,不使用数据库的字段全文检索三 车次表结构如下车次基本信息表 tbl_train number_info字段名 数据类型 备注train_numberID int PK 车次idtrain_number varchar 车次名称start_station varchar 起始站end_station varchar 终点站starttime time 发车时间endtime time 终点时间7、java的数据结构有哪些?如果使用数组,如何权衡是用无序的数组还是有序的数组呢?答案:问题1、正确输出是” Hello World “。由于字符串前后都有空格,因为有些人可能会认为结果是”Hello World”。那么,这个题目想要考察的是?面试时可以延伸问1. 字符串对象(String Object)是非可变的(immutable),这个题目容易迷惑人的地方在s.trim( )这一行。2. 理解对象引用和不可达对象会由垃圾回收器收集。顺着这个题目,还可以考察哪些概念呢?上面的代码中一共会生成几个字符串对象,什么时候这些对象会变成不可达对象从而被垃圾回收器回收。最好的解释方式是通过一个图表来说明,如下:问题2考察编译时与运行时的理解,在行A的代码中,product的值是在编译期计算的,行B则是在运行时计算的实际上,使用Java反编译器(例如,jd-gui)来反编译ConstantFolding.class文件的话,可以看到一个已经是常量了。public class ConstantFolding static final int number1 = 5; static final int number2 = 6; static int number3 = 5; static int number4 = 6; public static void main(String args) int product1 = 30; int product2 = number3 * number4; 延伸问题,还有哪些是在编译时处理的,如java里的泛型是在编译时构造的,方法重载:这个是发生在编译时的。方法重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。继承 发生在编译时,因为它是静态的问题3主要考察对递归和循环的理解输出:1 1 11 1 21 1 31 1 41 2 1。4 4 4问题4在Java中,最好的实现就是用JDK中StringBuffer的反转方法,它不仅速度快,效率高,而且还知道如何处理unicode代理对(surrogate pairs)。其它方案基本上都可以忽略掉。public class JdkReverser implements Reverser public String reverse(String str) if (null = str) | (str.length() = 1) return str; return new StringBuffer(str).reverse().toString(); 递归的实现public String reverse(String str) if (null = str) | (str.length() = 1) return str;return reverse(str.substring(1) + str.charAt(0);延伸问题:问他代码中什么地方有bug,即使没有。或者代码怎么会报错,他的答案至少可以引出一个讨论关于如何处理空值的话题来。比如 空字符,null, 1字节长度字符做没做处理 为什么会返回一下值,或抛出以下异常 返回null 返回“” 抛出NullPointerException 抛出IllegalArgumentException问题5考察对线程基本概念的理解可以通过如下几种方式:继承Thread 类实现Runnable 接口使用Executor framework (这会创建一个线程池) ,通过线程池来创建更有效率推荐最好使用Runnable接口,这样你的类就不必继承Thread类,不然当你需要多重继承的时候,就无法处理线程的状态包括 可执行(Runnable):当调用start()方法后,一个线程变为可执行状态,但是并不意味着他会立刻开始真正地执行。而是被放入线程池,由线程调度器根据线程优先级决定何时挂起执行。 执行中(Running):处理器已经在执行线程的代码。他会一直运行直到被阻断,或者通过静态方法Thread.yield()自行放弃执行的机会,考虑到场景切换所带来的开销,yield()方法不应该被经常调用。 等待中(Waiting):线程由于等待I/O等外部进程的处理结果而处于被阻断的状态,调用currObject.wait( )方法会使得当前线程进入等待状态,直到其它线程调用currObject.notify() 或者currObject.notifyAll() 。 睡眠中(Sleeping):重载方法Thread.sleep(milliseconds),Thread.sleep(milliseconds, nanoseconds)可以迫使Java线程进入睡眠状态(挂起)。 由于I/O阻塞(Blocked on I/O):当I/O条件发生变化时(例如读取了几个字节的数据)会迁移到可执行状态。 由于同步阻塞中(Blocked on synchronization): 当获取锁之后会进入执行中状态。Thread.State 枚举类型包含了Java虚拟机支持的全部的线程状态类型可延伸问对线程状态的解释,以及哪个类枚举了线程状态问题6从性能出发,不考虑存储的限制建立车次索引表比如z61,可对应索引 z z6 z61表结构如下车次索引表 tbl_ train number_indexid int pk 流水号 index varchar 索引 要在该字段建立索引train_numberID int fk 车次IDselect t.* from tbl_ train number_index as I , tbl_ train number_info as t wherei.index = ? and t. train_numberID = i. train_numberID当然用join也可以主要考察是否能想到通过建索引表把like查询转化为在索引字段上的=查询问题7数组(无序数组、有序数组),栈,队列,链表,树(二叉树、红黑树、234数)、哈希表、堆、图大部分不会说到树和图延伸问题:树和图在java中有实现吗?(无实现),自己怎么实现树的实现只需要创建一个Node对象,里面包含一个指向叶子节点的ArrayList。package bigo;import java.util.ArrayList;import java.util.List;public class Node private String name;private List children = new ArrayList( );private Node parent;public Node getParent( ) return parent;public void setParent(Node parent) this.parent = parent;public Node(String name) = name;public void addChild(Node child) children.add(child);public void removeChild(Node child) children.remove(child);public String toString( ) return name;可延伸问,什么数据可以用图来表示,树是不是图?只要数据元素的关系可以表示成节点和边的网状结构的话,就可以用图来表示。树是一种特殊的图,它的所有节点都只能有一个父节点。和树不同的是,图的形状是由实际问题或者问题的抽象来决定的。图的实现比较复杂,有很多第三方库里提供了,例如JUNG,JGraphT有序数组最大的优点在于n比较大的时候,搜索元素所花的时间O(log n)比无序素组所需要的时间O(n)要少很多。有序数组的缺点在于插入的时间开销比较大(一般是O(n)),因为所有比插入元素大的值都要往后移动。而无序数组的插入时间开销是常量时间,也就是说,插入的速度和元素的数量无关。所以,如何去选择还是取决于实际的使用情况。你需要考虑下面几个问题。你的程序是插入/删除的操作多,还是查找的操作多?数组里最多可能存储多少元素?排序的频率是多少?以及你的性能基准测试的结果是怎样的?讨论性能时,可延伸你对大O这个符号有什么了解呢,你是否可以根据不同的数据结构举出一些列子来?大O符号可以表示一个算法的效率,也可以用来描述当数据元素增加时,最坏情况下的算法的性能。大O符号也可以用来衡量的性能,例如内存消耗量。有时候你可能会为了减少内存使用量而选择一个比较慢的算法。大O符号可以表示在大量数据的情况下程序的性能。不过,对于程序在大量数据量下的性能的测量,唯一比较实际的方式是行用较大的数据集来进行性能基准测试,这样可以把一些在大O复杂度分析里没有考虑到的情况包含进去,例如在虚拟内存使用比较多的时候系统会发生换页的情况。虽然基准测试比大O符号表示的结果更加实际,但是它不适用于设计阶段,所以在这个这时候大O复杂度分析是最合适的选择。各种数据结构在搜索,插入和删除算法上的性能都可以用下面方式表示:常量复杂度O(1),线性复杂度O(n),对数复杂度O(log n),指数复杂度O(cn),多项式复杂度O(nc),平方复杂度O(n2)以及阶乘复杂度O(n!),这里面的n都指的是数据结构里的元素的数量。性能和内存占用是可以相互权衡的。下面是一些示例。示例1:在HashMap里查找一个元素的的时间复杂度是常量的,也即是O(1)。这是因为查找元素使用的是哈希函数,并且计算一个哈希值的时间是不受HashMap里的元素的个数的影响的。示例2:线性搜索一个数组,列表以及链表都是的复杂度线性的,也即是O(n),这是查找的时候需要遍历整个列表。也就是说,如果一个列表的长度是原来的两倍,那么搜索所花的时间也是原来的两倍。示例3:一个需要比较数组里的所有元素的排序算法的复杂度
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 野生动物保护与科研承诺书5篇范文
- 项目按期完成及质量保障承诺书5篇
- 桌上的绿植我的生活好伙伴写物9篇
- 2026年大型活动联合推广协议
- 一件感动的事作文14篇范文
- 黄河谣教学设计:地方文化与社会实践相结合的教学方案
- 新能源技术发展应用承诺函范文7篇
- 产品设计初期市场调研报告范本
- 数字化营销团队信用承诺函(9篇)
- 品牌推广方案策划模板
- 学生公寓准军事化管理服务方案投标文件(技术方案)
- 2025年人工智能算法工程师校招笔试模拟题及答案解析
- 2024新版2025秋八年级上册历史全册教案教学设计含大单元整体教学设计
- 2025版实习生实习期间责任保险合同范本
- 2025年南京保安考试题库
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 光伏电站试运行验收报告
- 父母帮忙带娃协议书
- 中小学思政课教师培训
- 模切行业的应用与发展
- 去冰岛旅游景点
评论
0/150
提交评论