搜狐面试mark

第一次去搜狐的那个楼,盈科大厦,感觉写字楼建的真不错,看到好多别的知道的公司在那

vmvare intel

面试先笔试,我只把自己感觉没答好的记录下来

1、海量数据查找出现次数最多的前十个

这是个经典的算法,毕业去百度面试过类似的问题,求1000万条查询String串中,重复次数最多的10条,即热门搜索用到的算法。

步骤1:建立hash表,空间换时间,遍历一遍,形成一个key为字符串,value为次数的hash表,时间复杂度为1000万

步骤2:堆排序,建立一个最小堆,遍历一遍hash表的记录,求value最大的10个记录。时间复杂度去重后的300万+log10

2、垃圾回收算法中cms收集器,G1收集器的大致原理

cms的大致目的是减少stop the world的时间,如果你的系统对fullgc的时间有要求,对很长时间的程序停止不允许的话,可以使用cms收集器。

它的回收算法是基本的标记 回收清除算法,它的原理就是充分利用计算机强大的硬件,利用多核多线程,让标记后应该回收的对象,在回收时和程序并行工作。

它的缺点是:在申请堆空间的时候,会留下碎片空间,cms对这个情况的优化时维护了一个表,这个表里记录了,还剩余空间的地址和堆大小,这样在申请空间的时候

直接查询表来完成,但是这个会导致再申请较大空间的时候可能会存在找不到很到的堆碎片,而导致提前的一个fullgc操作。

G1 收集器是java7后推崇的一个收集器,oracle也一直对它进行优化,相信不久的将来,它可能会成为主流的垃圾收集器,

它的优点包含了cms的stw时间短,他的回收算法是标记清楚整理,包含了整理碎片的过程,它还有一个相比cms显著的优点

还建立了可预测时间时间停顿模型。

3、LoggerReader程序的主备实现机制还是需要在捋一捋,分流程序的作用是什么,之前也想过这个问题,是不是冗余,乱序问题

4、项目的架构图,大型网站开发的架构图画出来

5、http报文的报文头格式

6、sql优化的方法或者换一种问法,数据库的优化、聚簇索引和非聚簇索引的区别

7、表级联操作的sql写法

8、equals和==的区别

简单的讲:

==比较的是引用,equals比较的是实例的char数组(内容)

string的intern方法

package test;
  
  public class StringTest {
      public static void main(String[] args) {
       String a = "hello";
       String b = "hello";
       
       String newA = new String("hello");
       String newB = new String("hello");       
       System.out.println("****** Testing Object == ******");
       System.out.println("a==b ? :" + (a==b));
       System.out.println("a.equals(b) ? :" + (a.equals(b)));
       System.out.println("newA==newB ? :" +(newA==newB));
       System.out.println("newA.equals(newB) ? :" +(newA.equals(newB)));
       System.out.println("a==newA ? :" + (a==newA));
       
       System.out.println("***** Testing String Object intern method******");
       System.out.println("a.intern()==b.intern() ? : " + (a.intern()==b.intern()));
       System.out.println("newA.intern()==newB.intern() ? :" + (newA.intern()==newB.intern()));
       System.out.println("a.intern()==newA.intern() ? :" + (a.intern()==newA.intern()));
       System.out.println("a=a.intern() ? :" + (a==a.intern()));
       System.out.println("newA==newA.intern() ? : " + (newA==newA.intern()));
       
       System.out.println("****** Testing String Object equals method******");
       System.out.println("equals() method :" + a.equals(newA));
      
       String c = "hel";
       String d = "lo";
       final String finalc = "hel";
       final String finalgetc = getc();
      
       System.out.println("****** Testing Object splice ******");
       System.out.println("a==\"hel\"+\"lo\" ? :" + (a=="hel"+"lo"));
       System.out.println("a==c+d ? : " + (a==c+d));
       System.out.println("a.equals(c+d)?:" + a.equals(c+d));
       System.out.println("a==c+\"lo\" ? : " + (a==c+"lo"));
       System.out.println("a==finalc+\"lo\" ? :" + (a==finalc+"lo"));
       System.out.println("a==finalgetc+\"lo\" ? :" + (a==finalgetc+"lo"));
       
      }
      private static String getc(){
       return "hel";
      } 
 }

最终也没想到会去这里工作,离家近,还有面试官是师兄,现在看之前的选择是信息不对称,或者说是我消息太闭塞导致的,本有更好的选择。

不过话说优秀的人在哪都不会差,在这里也学到了很多很多,要往前看,不要为自己的选择后悔。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值