面试题之辞旧迎新篇(1)

2月 6, 2015 |

前言

年终奖收入囊中,很多同事可能和我一样也开始寻觅新的机会,在此,博主javacoder.cn,将面试遇到的问题整理处理,与君分享。

1、如何查看tar包内的文件是否包含某个词组

tar -xzOf test.tar.gz? | grep abcd
-O --to-stdout 将提取的内容显示在屏幕上,而不是写入文件中

2, interface和abstract class的不同

interface是设计时用于定义接口,
abstract class是实现时抽取相同实现,

具体来说
不同:
抽象类能实现接口,
一个类能实现多个接口,但是只能继承一个基类,也就只能继承一个抽象类。
接口只能有常量定义和方法声明,而抽象类既可以有常量定义,方法声明,还可以有成员变量和静态变量的定义,也能有成员变量和成员函数的定义。
相同点:
都不能实例化对象,

3、4亿条数据的表如何有效的查找

(纯属个人观点,如有不对请多多指点)
现在主流的服务器的内存大概8G左右,假设每行记录大概是100字节,将系统内存的80%分给数据库使用,那么6.4G最大能缓存6400条记录,加上索引会占据一部分内存,那么在没有额外磁盘IO操作的情况下,最多能缓存5000万条记录,所以说4亿条记录就需要大量的IO操作,传统的逐行索引在这种情况下显得力不从心。
常见的解决方案是:
1)按业务上的区域,时间进行,分库,分表,直接过滤掉那些明显不匹配的数据
2)放弃关系型数据库,需求别的解决方案,比如inforbright等按列存储的产品,将过滤那些明显不满足条件的数据快的任务委托给这些专业的产品来完成。

4, 线程问题

class MyThread extends Thread{
public static void main(String[] argvs) {
MyThread t = new MyThread();
t.run();
}
}
如上的代码片段是否开启了一个线程,为什么?
没有启动一个新的线程,而是让t.run方法在当前线程中执行,只有t.run执行结束后main方法才能继续向下执行!
改为t.start()就能启动另一个线程。

5,一个页面加载很慢,该如何诊断原因。

用firebug 等工具查看哪些请求响应慢,然后使用jProfiler等工作查看该请求的call stack的耗时情况

Posted in: 面试加油站

Comments are closed.