外企面试时的几道题,大家试试

punk004 2009-01-20 08:33:40
1.Give one or two examples of class clean-up operations that should not be delegated to a finalize() method? Explain.

2.How would you implement in Java the equivalent of passing a function pointer in C/C++?

3.What is a potential user-observable consequence of performing I/O tasks from within a Swing listener callback? What is a better alternative?

4.What should be accounted for when updating swing components from an arbitrary thread?
...全文
343 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang511123 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ochinchina 的回复:]
3) 有时整个窗口不能响应了,应该创建一个线程来做IO操作,IO结束后再通知Swing

4) 任意线程更新Swing组件可能会产生意想不到的结果,应该用SwingUtilities.invokeLater()来更新Swing的组件
[/Quote]
高人,膜拜了
luckyboy101 2009-01-20
  • 打赏
  • 举报
回复
学习
bzwm 2009-01-20
  • 打赏
  • 举报
回复
3.在Java中Swing是单线程的设计。
所以如果在事件派发线程中执行很费时的操作,整个画面就好像卡住一样。
所以复杂的操作要在单独的线程去做。
bzwm 2009-01-20
  • 打赏
  • 举报
回复
4.因为只有从事件派发线程才好去更新swing components。
所以,如果要从arbitrary thread去更新swing components,
就得使用到

SwingUtilities.invokeAndWait([arbitrary thread])

SwingUtilities.invokeAndWait([arbitrary thread])

使事件派发线程上的可运行对象排队。
更新组件才是安全的。
ochinchina 2009-01-20
  • 打赏
  • 举报
回复
3) 有时整个窗口不能响应了,应该创建一个线程来做IO操作,IO结束后再通知Swing

4) 任意线程更新Swing组件可能会产生意想不到的结果,应该用SwingUtilities.invokeLater()来更新Swing的组件
bzwm 2009-01-20
  • 打赏
  • 举报
回复
1.是不是要我们自己清理复杂对象的成员变量?

2.不太记得C++的函数指针怎么用了。
觉得可以用反射来实现:

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class FunctionPointer {

public static Method getMethod(Object o, String funcName, Object[] params) {
Method m = null;
Class c = null;
Class[] p = null;

if (o != null) {
c = o.getClass();
}

if (params != null) {

p = new Class[params.length];

for (int i = 0; i < params.length; i++) {
p[i] = params[i].getClass();
}
}

if (funcName != null && c != null && p != null) {
try {
m = c.getMethod(funcName, p);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}

return m;
}

public void test(String name){
System.out.println("Hello " + name);
}

public static void main(String args[]){
FunctionPointer f = new FunctionPointer();

try {
FunctionPointer.getMethod(f, "test", new Object[]{"bzwm"}).invoke(f, "bzwm");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Miracle1216 2009-01-20
  • 打赏
  • 举报
回复
up
pxcong007 2009-01-20
  • 打赏
  • 举报
回复
1 System.gc Runtime.gc

2 使用反射

风中舞者 2009-01-20
  • 打赏
  • 举报
回复
只看懂了第二个~~问在java中怎么像C\C++那样传递函数指针。

这个容易。
定义一个接口,包含一个抽象函数f()。
定义不同的子类(A、B、C)实现这个接口,需要传递不同函数f()的时候传递不同的子类对象就行了。
酒剑仙 2009-01-20
  • 打赏
  • 举报
回复
进来看高手解题!
leo_bogard 2009-01-20
  • 打赏
  • 举报
回复
up
gs840120 2009-01-20
  • 打赏
  • 举报
回复
谁先把题翻译过来,嘎嘎
xuzhen1984 2009-01-20
  • 打赏
  • 举报
回复
学习~~~

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧