1、java系统出现OOM,应该如何处理。
首先,要搞清OOM的分类:
OMM主要三类: permgen OOM , heap OOM, stack overflow
1)permgen OOM:
这个主要是由于加载的类太多,或者反射的类太多, 还有 调用 String.intend(jdk7之前)也会造成这个问题。
所以出现了这个问题,就检查这三个方面;
2)heap OOM:
把内存大户找出来。可通过命令定期抓取heap dump 或者 启动参数OOM时 自动抓取heap dump。
通过对比多个heap dump,以及heap dump的内容,找出内存大户。
分析占用的内存对象,是否是因为错误导致的内存未及时释放,或者 数据过多导致的内存溢出。
根据原因,fix bug 或者 修改方案,主要是因为一些无用对象没有及时释放造成的,检查代码加上 heap dump 去分析吧
3)stack overflow:
这个主要是由于调用层数,或者递归深度太大造成的,看异常信息,基本上就能定位得出来了
2、如何实现微信“附近的人”功能?
初期实现:客户端固定时间发送经纬度(x,y)到服务器s,服务器存储每个登陆的用户的经纬度到表t中,
表t按照经纬度分表,将地图分成一个个的小格子。当用户店家“附近的人”时,对用户(x,y)进行计算,
最多一次查询其中的4个格子(子表),计算两点间距离获取结果(有点像桶排序)。
性能上可以将表t替换为内存结构,容灾即可。
从实际的微信提供的功能来看,附近的人并不太多,估计是其对地图划分的格子很小。
3、DNS进行域名解析的过程。
首先,客户端发出DNS请求翻译IP地址或主机名。DNS服务器在收到客户机的请求后:
(1)检查DNS服务器的缓存,若查到请求的地址或名字,即向客户机发出应答信息;
(2)若没有查到,则在数据库中查找,若查到请求的地址或名字,即向客户机发出应答信息;
(3)若没有查到,则将请求发给根域DNS服务器,并依序从根域查找顶级域,由顶级查找二级域,
二级域查找三级,直至找到要解析的地址或名字,即向客户机所在网络的DNS服务器发出应答信息,
DNS服务器收到应答后现在缓存中存储,然后,将解析结果发给客户机。
(4)若没有找到,则返回错误信息。
4、什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
链接分硬链接和符号链接。
符号链接可以建立对于文件和目录的链接。符号链接可以跨文件系统,即可以跨磁盘分区。
符号链接的文件类型位是l,链接文件具有新的i节点。
硬链接不可以跨文件系统。它只能建立对文件的链接,硬链接的文件类型位是-,
且硬链接文件的i节点同被链接文件的i节点相同。
5、如何减少上下文切换?
- 上下文切换又分为2种:让步式上下文切换和抢占式上下文切换。
- 前者是指执行线程主动释放CPU,与锁竞争严重程度成正比,可通过减少锁竞争来避免;
- 后者是指线程因分配的时间片用尽而被迫放弃CPU或者被其他优先级更高的线程所抢占,一般由于线程数大于CPU可用核心数引起,可通过调整线程数,适当减少线程数来避免。