返回信息流lz面的java研发岗,阴错阳差遇到一个C++面试官,问的一些问题强调不要用开源框架解决
下面一个问题不确定是否正确
面试官问有没有对项目进行过什么改进。
答:项目某接收心跳数据的接口,包含大量重复数据,对数据库的访问太大,连接次数过多,尝试用缓存解决。
问:具体方法是什么?
答:在请求对应的类声明一个静态的hashmap全局变量A作为缓存,每次接收到请求以后,解析出数据B与全局变量A做比较,根据比较结果决定时候updateOrinsert数据库和A。
问:怎么保证线程安全
答:加锁
然后面试就挂了....
————————————————更新————————————————
会学校想了想这个答案不对,问题有两个
一:我的方法是缓存和响应类紧耦合,一旦所有的请求被处理完,那响应类的所有实例可能被回收,方法区的缓存也可能被回收。下次请求到来的时候,还要重新连接数据库,取出所有数据,这样可能反而会影响效率。
二:无论用什么数据类型,只要将操作他的方法都加上synchronized关键字不就可以了?
多线程变成的经验太少,各位见谅....
这是一条镜像帖。来源:北邮人论坛 / java / #34853同步于 2014/9/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
面试遇到了一个问题求解
lllavici
2014/9/23镜像同步16 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我补充了还可以用hashtable
【 在 renyi 的大作中提到: 】
: 人家都提示了嘛?? 要保证线程安全为什么还是hashmap呢? 不懂,等大神回答...
应该是ConcurrentHashMap吧
【 在 xiayu5945 的大作中提到: 】
: CurrentHashMap Collectios.sysncronizedMap()
如果直接用hashmap,但是将所有方法都加入synchronized关键字不能保证线程安全么?
【 在 HB0318 的大作中提到: 】
: 应该是ConcurrentHashMap吧
能,hashtable差不多就是这样的吧,但是这样多线程并发性就不好了,严重影响性能,因为hashtable只有一个锁,一次只允许一个线程进行读写操作。多线程并发的话,使用concurrenthashmap。
【 在 lllavici 的大作中提到: 】
: 如果直接用hashmap,但是将所有方法都加入synchronized关键字不能保证线程安全么?
多谢!我去研究研究concurrenthashmap
【 在 HB0318 的大作中提到: 】
: 能,hashtable差不多就是这样的吧,单线程的话可以,但是这样多线程并发性就不好了,严重影响性能,因为hashtable只有一个锁,一次只允许一个线程进行数据操作。多线程并发的话,使用concurrenthashmap。
:
使用CurrentHashMap吧?? 与hashtable相比,整体上来说,它的get()操作无锁,put()操作粒度也较小,所以整体性能优于同步的hashmap...
如果LZ是研究生的话,感觉您在提示后还这样回答应该减分不少吧?
【 在 lllavici 的大作中提到: 】
: 我补充了还可以用hashtable
嗯...因为这个问题面挂了...
【 在 renyi 的大作中提到: 】
: 使用CurrentHashMap吧?? 与hashtable相比,整体上来说,它的get()操作无锁,put()操作粒度也较小,所以整体性能优于同步的hashmap...
: 如果LZ是研究生的话,感觉您在提示后还这样回答应该减分不少吧?
: