“金山快盘”6道面试题题目及解答如下。
第一题:String,StringBuilder,StringBuffer的区别。
String:有两种初始化方式。其一是字面值创建,其二是使用new关键字创建。
举例如下:
String strA=“adf”;
String strB=“adf”;
String strC=new String("adf");
String strD=new String("adf");
根据字面值创建的是保存在常量池中,创建StrB的时候,先检查常量池中是否已经存在常量“adf”,如果已经存在,此时不会再创建新的字符串。创建strC的时候,不会去常量池中查找,而是在堆内存中直接创建了一个对象。即使再创建strD变量,同样会再开辟内存。因此当字符串串联时会造成很大浪费如下:
String strE=“a”+“df”+"ty";//中间会生成无用的“adf”,最终生成“adfty”。
String strF=strC+strD;//重新开辟内存存储strF
如果经常对字符串进行插入,删除,追加等操作,显然会造成内存浪费。解决办法是:StringBuffer
StringBuffer:String类是不可变的,体现在它是final修饰的类。内部维护的是:
private final char value[]; // The value is used for character storage
(注:String用final修饰,应用了设计模式中的不可变模式,该模式的好处是:在多线程操作的时候,有效的避免了异步问题,但是显然在内存方面就会做出牺牲)
对于StringBuffer,它同样是维护一个数组,但是它默认的数组大小是16,所以在append追加的时候,会检查是否越界才进行添加。这样不会每次都创建新的对象,而是直接对该对象操作,避免了内存浪费。对于线程异步问题,则是使用了关键字synchronized修饰,强制性进行了同步,所以是线程安全的。
StringBuilder:它和StringBuffer的区别在于它不是线程安全的。可以发现该类中方法并没有synchronized的修饰。StringBuffer是@since JDK1.0,StringBuilder是 @since 1.5
第二题:用什么办法可以让父类的方法不能被子类覆盖。
1:final: 无法继承,何谈重写。
2:private:无法继承,何谈重写。
3:static :可以被继承,不能被重写。
第三题:Java为什么可以在不同平台上运行?
只要在不同平台上安装了JRE-运行时环境,它会根据不同的平台将class文件翻译成不同平台上的执行命令,实现与平台无关。
第四题:给定一个数组,求出第二个最大的数。
可以先排序(如冒泡)再取出。方法应该很多。
第五题:用递归和非递归实现K阶Fib(K,n)函数。函数定义是:
F(n)=F(n-1)+F(n-2)+...+F(n-k),(n>=k)
F(n)=1,(n=k-1)
F(n)=0,(0=<n<k-1)
递归方法:
public static int FibD(int k, int n) {
// 递归终止条件
if (n < k) {
return 0;
}
if (n == k) {
return 1;
}
// 初始化数组前k-1项的值
int[] data = new int[n];
for (int i = 0; i < k - 1; i++) {
data[i] = 0;
}
// 第k项的值
data[k - 1] = 1;
// 计算
int total = 0;
for (int j = n - k; j < n; j++) {
total += FibD(k, j);
}
return total;
}
非递归方法:
public static int FibF(int k, int n) {
int[] data = new int[n];
// 前k-1项的值
for (int i = 0; i < k - 1; i++) {
data[i] = 0;
System.out.println("data[" + i + "]=" + data[i]);
}
// 第k项的值
data[k - 1] = 1;
for (int i = k; i < n; i++) {
for (int j = i - k; j < i; j++) {
data[i] += data[j];
}
}
return data[n-1];
}
第六题:设计一个日志类框架,可以实现自定义的KPLog日志类,写出主要思路和核心代码(尚未实现)
分享到:
相关推荐
大三学年总结-总结.docx
【标题】:“大三上课设-快递信息管理系统.zip”揭示了一个针对大三学生的信息系统设计与开发实践项目,重点在于创建一个快递信息管理系统。在这个项目中,学生将应用人工智能技术来提升系统的智能化程度。 【描述...
01-01-机器人控制
模仿计算机等级考试系统:大三(2018-2019)上学期,软件工程课程设计,此项目使用的技术:后台框_rankexam
《软件体系结构》是计算机科学与技术专业的重要课程,尤其对于大三学生来说,它为深入理解软件开发的高级设计提供了基础。这份压缩包“中南大学-软件体系结构(大三下)-课程考试资料以及真题回忆.zip”包含了多份...
大三安卓课设-基于Kotlin编写的饥了么外卖APP源码+sql数据库+项目说明+设计报告.zip 客户端使用Android Studio编译器,Kotlin为主要语言。 | 系统组成部分 | 功能概括 | 完成情况 | | -------------------- | ------...
大三软件工程课程设计-影院系统,已获高分通过项目。 大三软件工程课程设计-影院系统,已获高分通过项目。大三软件工程课程设计-影院系统,已获高分通过项目。大三软件工程课程设计-影院系统,已获高分通过项目。...
在这个大三课程设计中,我们可能面临的是一个编程挑战,即通过编程实现对图形或虚拟地图的四色解决方案。 在汇编语言的学习过程中,学生们通常会接触到基本的计算机指令系统、内存管理和程序流程控制等概念。汇编...
北邮-大三-操作系统-进程管理实验报告.doc
大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发...
大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发...
大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发...
【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发...
对于大学大三毕业生而言,这是一个回顾过去三年大学生活、学习经历,以及为未来职业道路做准备的重要环节。从所提供的内容中,我们可以提取出以下几点关于自我鉴定的知识点: 1. 自我鉴定的重要性:自我鉴定是个人...
大三学期学习计划-.docx
大三上学的课程,本人期末整理的复习内容,以及实验报告内容等等 计算机组成原理 - Principle of Computer Composition 操作系统 - Operation System JAVA程序(课程)设计 - Java Programming Design 数据库原理 - ...
### 大专大三毕业生自我鉴定中的核心知识点 #### 一、个人成长与自我认知 - **友情的力量**:在大学期间,建立深厚的友谊是非常重要的。作者通过与几位优秀的室友相处,不仅获得了宝贵的人生经验,而且也在他们的...
【标题】大三学年自我鉴定-年终总结 【关键词】高校学习,生活技能,实践经验,个人成长,专业发展 【正文】 大三学年的自我鉴定是对过去一年学习、生活和实践经验的全面回顾与总结,它揭示了大学生在这个关键...