内外功兼修、实力与技巧并举、解决恼人的面试题
基本原则: 举例+画图
(1)java类题:
问题: count += count++;能不能编译通过,这个执行结果是什么
或者
try{
System.exit();
}finally{
System.out.println();
}
这段代码里两行,哪行先执行
1. 平时我写项目写得比较多,很少用这种写法
2. 如果让我试的话,我试一下,我会深入了解一下 深入java虚拟机,给我一点时间,我会解决
第2句也可以换为: 如果让我试的话,我会试一下,先打一个断点,debug模式下看哪个先执行
(2)js题:
问题: 用js写一个飘浮窗口
答:平时写js代码,都是把别人的代码拿过来,改一改。如果给我一点时间,我写这个肯定可以,没有问题
(3)思维题
生小牛问题: 一个农场有一头母牛,它每年都会生一头母牛(这里是假设生出来的全部是母牛),
每一头小母牛4岁后每年生一头小母牛,而且无死亡,无损伤失踪,问20年以后,农场有多少头牛
分析: 这样的问题,听上去有点难度,如果思路不对,一天也写不出来
这道题实际上是一道递归题,肯定要用到循环
答:首先写思路,写一些注释,定义一些变量出来,如牛的数量,牛的年龄,农场的经营年数
如果连思路都没有,那就先定义一个类: 牛,它有一个属性年龄,一个类: 农场,
它里面有一个List记录牛的数量, 然后在主方法中写算法,可以尝试写一些循环
public class Cow{
int count=1;
public void calculate(int y){
if(y-3<0){
count = 1;
}else{
for(i=0;i<(y-3)/4+1;i++){
count*=2;
}
System.out.println(y+"年后母牛数量为:"+count+"头");
}
}
public static void main(String[] args){
Cow c = new Cow();
c.calculate(10);//这个地方的10就是你需要输入的年份
}
}
另外一种简易写法:
public class Cow {
//n年后有多少牛
public void method(int n){
int zero=0;//零岁的牛头数
int one=1;//1岁牛
int two=0;//2岁牛
int three=0;//3岁牛
int other=0;//大于3岁牛
int born=0;//刚出生牛
for(int i=1;i<=n;i++){//随着时间的增长小牛的年龄也在变化
born=other;
other+=three;
three=two;
two=one;
one=zero;
zero=born;
}
System.out.println("总的牛数量:"+(zero+one+two+three+other));
}
public static void main(String[] args){
Cow p=new Cow();
p.method(10);//10为输入的年份
}
}
(4) 算法题
java算法题: 通常有7种排序算法:冒择入希快归堆:冒泡,选择,插入,希尔,快速,归并,堆排序
(5) 背记题
问题: 写出JSP常见的内置对象,以及该对象的常用方法
答:能背记住最好
(6) 优化题
关于数据库优化(涉及索引、缓存、SQL优化、分表)
答: 提到优化, 首先想到的是缓存,举例:在我的数据库里记录着我们所有部门的信息,我们一个大集团MicroSoft, 每个人
登陆都用OA,只要OA一启动,或者有一个人登陆,就把所有部门的信息读到内存里,
将来有人再用直接从内存中拿,效率当然就高,但是同时这里也会有问题,如果数据库更新,缓存也要跟着更新.
第二个想到就是索引,数据库里要有索引,Lucene里也有索引
优化最先想的就是: 缓存 + 索引
(7) 无聊题
问题: 一个字符串,把java 替换成C++
分析: 面试官是想让你了解字符串的算法,如果就简单用replace()当然可以,但是要这样想,一定要体现出自己的水平,
还有这是不是面试官想要的
答:这个问题,有三种解决方法
第一种方法: 调用replace()方法
第二种方法: 使用正则表达式,进行替换(间接向面试官透露出, 我还会正则表达式)
第三种方法: (这是面试官真想要的)把java一个字符一个字符分别处理,把整个字符串转成一个字符数组,
然后写一堆代码上去,(写自己的代码,让面试官头疼去吧)