几个java 面试题备忘

java:
(1)希望so/dll文件只被某个特定的class调用,其他class不能调用,怎么办?
(2)如何防止用户反编译,有什么有效手段?
A)混淆编译
B)自己实现ClassLoader,同时实现一个DLL,DLL将原生成的class文件进行处理,然后程序启动的时候,只要入口Class(这个是原生态的)加载dll,dll解析相应的class,然后加载。这样如果想反编译,就需要DLL中分析了。
(3)soft reference,weak reference 会在什么场景下使用?
(4)有多个读线程,一个写线程,写线程定时需要写数据,读线程随机发生读取数据,读取的数据可以是脏数据(允许有延后),怎么实现?
读写锁(是否公平,确实需要考虑,我也不知道哪个最合适),或者ConcurrentHashMap
(5)实现一个登录对话框,对话框中有一个cancel,和一个进度条展示,如果点击canel,对话框消失,登陆过程终止且需要回滚;如果进度条满了,对话框消失。
 
这道题不错,难点挺多,我的想法是:
登录线程于当前主线程的同步,主线程cancel时,给登录线程设立一个标志位volatile boolean isCanceled,同时登录线程.interrupt(),退出对话框。
 
登录线程:
在每次反馈进度的时候,加一个类似Linux的cancel点,比如sleep(0),并且判断isCanceled(true时,回滚),因为sleep会触发InterruptException异常中处理回滚。
线程结束时,发送给主线程一个标识,safeExited。
 
这样做的问题是:主线程退出时,子线程其实并没有退出(除非设置成Daemon线程,但那样,回滚做不到)。给主线程safeExited有可能是不切实际的(主线程有可能已经退出),如果不发标志位,也不合适,有可能登录子线程处理失败,主线程不知道子线程实际处理结果。但如果,主线程 join子线程的话,又会使得主线程没有及时退出。

 (5)有两个集合A,B,每个集合元素无重复,且都为整形。如何求C=A∩B。A,B类的元素都超过1000个

将|A|,|B|中元素多的放到SET中,然后遍历查找。因此,算法复杂度为MlogN,这里的SET说的是RBTree,如果hash方式,则不好评估。M=min(|A|,|B|),N=max(|A|,|B|)

其实,本题等价于,数据库中,如何通过某个不重复字段,去关联2张表。显然,需要对该字段建立索引。建立索引的过程,即放入set过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值