阿里面试总结
2013-06-03 18:17
288 查看
这次妥妥的倒在了一面上。还是基础不够扎实。
1. 重载与多态区别
重载(overload)一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
a、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
b、不能通过访问权限、返回类型、抛出的异常进行重载;
c、方法的异常类型和数目不会对重载造成影响;
重写/覆盖(override),子类在继承父类时,重写父类中的方法。
重写的规则:
a、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
b、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
c、重写的方法的返回值必须和被重写的方法的返回一致;
d、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
e、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
f、静态方法不能被重写为非静态的方法(会编译出错)。
多态为了避免在父类里大量重载引起代码臃肿且难于维护。通过重写实现。
2. read()执行时操作系统完成的工作
3. 进程有哪些状态
基本状态:运行-就绪-阻塞(也称为等待或睡眠)。实际的系统中经常引入新建态和终止态。有的系统引入了挂起态。
Java线程状态共6个:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
4. url中参数去掉一部分的算法
当时想到了切分字符串和正则替换,但是写的正则有问题。面试结束和面试官交流,他提示扫描一遍就可以。
5. 试卷回顾
1. 重载与多态区别
重载(overload)一般是用于在一个类内实现若干重载的方法,这些方法的名称相同而参数形式不同。
重载的规则:
a、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
b、不能通过访问权限、返回类型、抛出的异常进行重载;
c、方法的异常类型和数目不会对重载造成影响;
重写/覆盖(override),子类在继承父类时,重写父类中的方法。
重写的规则:
a、重写方法的参数列表必须完全与被重写的方法的相同,否则不能称其为重写而是重载.
b、重写方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。
c、重写的方法的返回值必须和被重写的方法的返回一致;
d、重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是其子类;
e、被重写的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行重写。
f、静态方法不能被重写为非静态的方法(会编译出错)。
多态为了避免在父类里大量重载引起代码臃肿且难于维护。通过重写实现。
public class Shape { public static void main(String[] args) { Triangle tri = new Triangle(); System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承 Shape shape = new Triangle(); System.out.println("My shape has " + shape.getSides() + " sides."); // 多态 Rectangle Rec = new Rectangle(); Shape shape2 = Rec; System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); // 重载 } public boolean isShape() { return true; } public int getSides() { return 0; } public int getSides(Triangle tri) { // 重载 return 3; } public int getSides(Rectangle rec) { // 重载 return 4; } } class Triangle extends Shape { public int getSides() { // 重写,实现多态 return 3; } } class Rectangle extends Shape { public int getSides() { // 重写,实现多态 return 4; } }
2. read()执行时操作系统完成的工作
3. 进程有哪些状态
基本状态:运行-就绪-阻塞(也称为等待或睡眠)。实际的系统中经常引入新建态和终止态。有的系统引入了挂起态。
Java线程状态共6个:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
4. url中参数去掉一部分的算法
当时想到了切分字符串和正则替换,但是写的正则有问题。面试结束和面试官交流,他提示扫描一遍就可以。
package monitor; import java.util.Arrays; class CheckHelper { private char temp[] = new char[64]; private String params[]; private boolean check[]; private int tag = 0; public CheckHelper(String params[]) { this.params = params; check = new boolean[params.length]; } public void initCheck() { for (int i = 0; i < check.length; i++) check[i] = true; tag = 0; } public void doCheck(char c) { for (int i = 0; i < params.length; i++) { String param = params[i]; temp[tag] = c; if (tag >= param.length() || param.charAt(tag) != c) { check[i] = false; } } tag++; } public String getResult() { for (int i = 0; i < params.length; i++) { String param = params[i]; if (check[i] && param.length() == tag) { initCheck(); return null; } } String ret = new String(Arrays.copyOf(temp, tag)); initCheck(); return ret; } } public class Test { public static String removeParam(String url, String[] params) { CheckHelper ch = new CheckHelper(params); ch.initCheck(); StringBuilder sb = new StringBuilder(); boolean start = false; boolean rest = false; boolean copy = false; for (int i = 0; i < url.length(); i++) { char c = url.charAt(i); if (!start) { sb.append(c); if (c == '?') start = true; } else if (c == '=') { rest = true; String ret = ch.getResult(); if (ret != null) { if (sb.charAt(sb.length() - 1) != '?') sb.append('&'); sb.append(ret); sb.append('='); copy = true; } else { copy = false; } } else if (!rest) { ch.doCheck(c); } else if (c != '&') { if (copy) sb.append(c); } else { ch.initCheck(); rest = false; copy = false; } } return sb.toString(); } public static void main(String[] args) throws Exception { String url = "http://s.taobao.com/search?spm=a230r.1.0.100.S98nmj&" + "q=Apple%2F%C6%BB%B9%FB+MacBook+Pro+MD101CH%2FA&v=product&p=" + "detail&pspuid=202666380&cat=1101&from_pos=55_1101.xlcombo_1_2_202666380"; String[] params = { "spm", "pspuid", "cat" }; System.out.println(removeParam(url, params)); } }
5. 试卷回顾
相关文章推荐
- 阿里JAVA开发面试常问问题总结4
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)
- 阿里、百度、搜狐、优土等互联网公司面试经验总结
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(二)
- 阿里面试总结
- 阿里、百度等公司面试经验总结
- 阿里内推电话面试总结
- 阿里、百度、搜狐等公司社招面试记录与总结
- 阿里面试总结
- 面试通过——阿里校招面试总结
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(一)
- 16年阿里电话面试总结
- 阿里、百度等多家公司Java面试记录与总结
- 关于阿里、优酷面试总结
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(一)
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(三)
- 阿里面试重点总结
- 阿里JAVA开发面试常问问题总结
- 毕业后就是程序员——我的阿里、金山、中华、腾讯、360、网易面试总结(一)