当前位置:
文档之家› 尚硅谷_宋红康_Java基础就业攻略
尚硅谷_宋红康_Java基础就业攻略
拓展:模板设计模式、代理模式
题目7:古典问题:有一对兔子,从出生后第3个月起 每个月都生一对兔子,小兔子长到第三个月后每个月 又生一对兔子,假如兔子都不死,问每个月的兔子总 数为多少? //这是一个菲波拉契数列问题
1 1 2 3 5 …..
题目8: 汉诺塔,古印度游戏。
递归方法
一个庙里有三个柱子,第一个有64个盘子,从上往下盘子越来 越大。要求庙里的老和尚把这64个盘子全部移动到第三个柱子 上。移动的时候始终只能小盘子压着大盘子。而且每次只能移 动一个。 圆盘数n与移动最少次数f(n)有等比数列函数关系f(n)=2^n-1, 剧中n=4,f(n)=15。传说中n=64,f(n)=18446744073709551615, 完成时就是世界末日。设一秒移动一次,则要约5845亿年,宇 宙毁灭又重生很多次了。
排错:
interface A{ int x = 0; } class B{ int x =1; } class C extends B implements A { public void pX(){ System.out.println(x); } public static void main(String[] args) { new C().pX(); } }
提示:将短的那个串进行长度依次递减的子串与较长 的串比较。
题目6:写一个实现private的构造器,不能在类的外部创建该 类的对象 private Single() {} //私有的,只能在类的内部访问 private static Single onlyone = new Single(); //getSingle()为static,不用创建对象即可访问 public static Single getSingle() { return onlyone; } }
例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。
分析:如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们 的和。不过非常遗憾的是,由于长度为n的数组有O(n^2)个子数组;而且 求一个长度为n的数组的和的时间复杂度为O(n)。因此这种思路的时间是 O(n^3)。
6. 谈谈对序列化的理解
==操作符与equals方法
= =: 基本类型比较值:只要两个变量的值相等,即为true. int a=5; if(a==6){…} 引用类型比较引用(是否指向同一个对象):只有指向 同一个对象时,==才返回true. Person p1=new Person(); Person p2=new Person(); if (p1==p2){…} 用“==”进行比较时,符号两边的数据类型必须兼 容(可自动转换的基本数据类型除外 ),否则编译 出错;
程序输出: 12. Given: 13. public class Pass { 14. public static void main(String [] args) { 15. int x=5; 16. Pass p = new Pass(); 17. p.doStuff(x); 18. System.out.print(” main x = “+ x); 19. } 20. 21. void doStuff(int x) { 22. System.out.print(” doStuff x = “+ x++); 23. } 24. } What is the result? doStuffx = 5 main x = 5
public class ReturnExceptionDemo { static void methodA() { try { System.out.println("进入方法A"); throw new RuntimeException("制造异常"); } finally { System.out.println("用A方法的finally"); }} static int methodB() { try { System.out.println("进入方法B"); // throw new Exception(); return 1; } catch (Exception e) { return 3; } finally { System.out.println("调用B方法的finally"); // return 2; }} public static void main(String[] args) { try { methodA(); } catch (Exception e) {
排错:
public class Something { public int addOne(final int x) { return ++x; } }
public class Something { public static void main(String[] args) { Other o = new Other(); new Something().addOne(o); } public void addOne(final Other o) { o.i++; } } class Other { public int i; }
2—算法 & 数据结构
题目1:一个数组,让数组的每个元素去除第一个元素,得 到的商作为被除数所在位置的新值。 题目2:输入两个正整数m和n,求其最大公约数和最小公倍 数。 拓展:输入某年某月某日,判断这一天是这一年的第几天?
题目3:输入一个整形数组,数组里有正数也有负数。数组 中连续的一个或多个整数组成一个子数组,每个子数组都有 一个和。求所有子数组的和的最大值。要求时间复杂度为 O(n)。
super.x A.x
程序输出: 1. class Test4 { 2. public static void main (String [] args) { 3. boolean x=true; 4. boolean y=false; 5. short z=42; 6. 7. if((z++==42)&&(y=true))z++; 8. if((x=false) || (++z==45)) z++; 9. 10. System. out.println(“z=”+z); 11. } 12. } 结果为: z= 46
排错: public class Something { public static void main(String[] args) { Something s = new Something(); System.out.println("s.doSomething() returns " + doSomething()); } public String doSomething() { return "Do something ..."; } }
2—算法 & 数据结构
3—Java基础概念描述
面试层面
1—Java基础基本概念/知识点考查 排错:
abstract class Name { private String name; public abstract boolean isStupidName(String name) {} } abstract class Something { private abstract String doSomething (); }
程序输出: Given: 1. public class Threads3 implements Runnable { 2. public void run() { 3. System.out.print(”running”); 4. } 5. public static void main(String[] args) { 6. Thread t = new Thread(new Threads3()); 7. t.run(); 8. t.run(); 9. t.start(); 10. } 11. } What is the result?
==操作符与equals方法
equals() : 所 有 类 都 继 承 了 Object , 也 就 获 得 了 equals()方法。还可以重写。 只能比较引用类型,其作用与“ ==” 相同 , 比较是否 指向同一个对象。 格式:obj1.equals(obj2)
特 例 : 当 用 equals() 方 法 进 行 比 较 时 , 对 类 File 、 String 、 Date及包装类(Wrapper Class)来说,是比较类型及内容而 不考虑引用的是否是同一个对象; 原因:在这些类中重写了Object类的equals()方法。
拓展1:输入一个英文句子,翻转句子中单词的顺序,但单词 内字符的顺序不变。句子中单词以空格符隔开。为简单起见, 标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。 拓展2:获取两个字符串中最大相同子串。比如: str1 = "abcwerthelloyuiodef“;str2 = "cvhellobnm"
拓展:已知一个数列:f(20) = 1,f(21) = 4,f(n+2) = 2*f(n+1)+f(n), 其中n是大于0的整数,求f(10)的值。
拓展:求1+2!+3!+...+20!的和 public class Test8{ public static void main(String[] args) { long sum = 0; long fac = 1; for(int i=1; i<=20; i++) { fac = fac * i; sum += fac; } System.out.println(sum); } }