搜房面试题

1、不使用数据库,如何通过程序实现快速的排重计算?

      a、加载数据到集合中,然后使用Linq中的Distinct()进行去重。

      b、如果明确是哪几列中重复的数据的话,可以通过将数据加载到table中,在过滤table的方式来进行去重。      

2、Union all与union的区别?Truncate与delete的区别?Having如何使用?

      Union all与union的区别

      Truncate与delete的区别

      Having如何使用

3、对于1000万数据量的表来说,对于唯一的ID列创建索引与不创建索引,查询速度有多大区别?

        测试由于内存限制生成大量测试数据时,会提示内存不足,故本次测试将数据量限制在1000000(一百万)。

        构造测试数据如下:

create table myTestTable as
select rownum as id,
               to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
               trunc(dbms_random.value(0, 100)) as random_id,
               dbms_random.string('x', 20) random_string
          from dual
        connect by level <= 1000000;
--myTestTableTest
create table myTestTableTest as
select rownum as id,
               to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime,
               trunc(dbms_random.value(0, 100)) as random_id,
               dbms_random.string('x', 20) random_string
          from dual
        connect by level <= 1000000;

生成测试数据可以参考:

点击打开链接

点击打开链接

为myTestTable表创建索引:

create index sy001 on myTestTable(ID);

Oracle创建索引的语法如下:

create index 索引名 on 表名(列名);

测试sql如下:

SELECT * FROM myTestTableTest  WHERE  ID='10000';
SELECT * FROM myTestTable  WHERE  ID='10000';

测试查询所用时间:myTestTableTest耗时10.671秒,myTestTable耗时0.047秒

SELECT * FROM myTestTableTest  WHERE  random_string='R5XLUNRTKUTE1IZT5R';
SELECT * FROM myTestTable  WHERE  random_string='R5XLUNRTKU5YTE1IZT5R';

测试查询所用时间:myTestTableTest耗时9.532秒,myTestTable耗时8.362秒

        通过数据可以看出对于创建了索引的ID列来说,查询速度的提升还是相当明显的,但对于非索引列的查询来说,提升并不是很明显,当数据量继续增加的时候,相信这种差距会被增大。

4、Guid的哈希值是否会重复?同一个字符串,在不同的程序和两个不同的服务器中,哈希值是否一样?

        全局唯一标识符,简称GUID,是一种由算法生成的唯一标识。GUID的主要目的是产生完全唯一的数字。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。随机生成两个相同GUID的可能性是非常小的,但并不为0。所以,用于生成GUID的算法通常都加入了非随机的参数(如时间),以保证这种重复的情况不会发生。

        哈希算法一样,哈希值应该不一样。

5、对聚集索引和非聚集索引的理解?

      区别与理解

6、

Select * from  test  where name like  ‘a%’;
Select name from  test  where name =  ‘a%’;

    当name上有非聚集索引时上述两种情况的查询差异?

    当name上有聚集索引时上述两种情况的查询差异?

背景:

新建表myTestTable002、myTestTable003,建表Sql如下:

create table myTestTable003 (
   ID      int identity(1,1)    not null,
   NAME01  varchar(20)          null,
   NAME02  varchar(20)          null,
   String  varchar(3000)        DEFAULT '所发生的冯绍峰的水果湖光和热过奖过奖个梵蒂冈'
   )

预制测试数据如下:

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[USP_SRZCHMX]    Script Date: 07/15/2014 13:13:43 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[USP_SRZCHMX]
(      @Number VARCHAR(70),
       @NAME varchar(70)
)
AS
DECLARE
        @num int ;
set @num=0
while @num<10000000
begin
insert into myTestTable003(NAME01,NAME02)values(LEFT(NEWID(),10),LEFT(NEWID(),15));
insert into myTestTable002(NAME01,NAME02)values(LEFT(NEWID(),10),LEFT(NEWID(),15));
set @num=@num+1
end
GO

建立索引:

CREATE CLUSTERED INDEX IX_NAME01
    ON myTestTable003 (NAME01);
CREATE NONCLUSTERED INDEX IX_NAME01
    ON myTestTable002 (NAME01); 

myTestTable002为非聚集索引、myTestTable003为聚集索引,测试查询的sql如下:

name上有聚集索引的时:

Select * from  myTestTable003  where NAME01 like 'a%';
Select NAME01 from  myTestTable003  where NAME01 =  'a%'; 

测试结果如下:04分35秒、 0秒

        name上有聚集索引时:

Select * from  myTestTable002  where NAME01 like 'a%';
Select NAME01 from  myTestTable002  where NAME01 =  'a%';  

测试结果如下:03分35秒、 1秒

7、sql如何实现查询分页?

具体可以参考:http://blog.csdn.net/jiankunking/article/details/43062729

在网上搜到了这么几个,也测试了一下,的确可以实现查询分页

第一个:

CREATE  procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
 @rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

第二个:

-- 使用方法 EXEC PageShow 'MillionData M inner join MillDic D on M.id=D.nodeid','D.nodename,M.title,M.content','id',2,2,0,0,''
CREATE  PROCEDURE PageShow
(
@tblName   varchar(255),       -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='',      -- 排序的字段名
@PageSize   int = 10,          -- 页尺寸
@PageIndex int = 1,          -- 页码
@doCount bit = 0,   -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)
)
AS
declare @strSQL   varchar(5000)       -- 主语句
declare @strTmp   varchar(110)       -- 临时变量
declare @strOrder varchar(400)       -- 排序类型

if @doCount != 0
begin
    if @strWhere !=''
    set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere
    else
    set @strSQL = 'select count(*) as Total from ' + @tblName + ''
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况
else
begin

if @OrderType != 0
begin
    set @strTmp = '<(select min'
set @strOrder = ' order by ' + @fldName +' desc'
--如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by ' + @fldName +' asc'
end

if @PageIndex = 1
begin
    if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
    else
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
    + @tblName + ' where ' + @fldName + ' ' + @strTmp + '('+ @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + ' ' + @strOrder + ') as tblTmp)'+ @strOrder

if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
       + @tblName + ' where ' + @fldName + ' ' + @strTmp + '('
       + @fldName + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '
       + @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '
       + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
exec (@strSQL)

8、Sql查询


查询性别男女根据id排序的前两条数据。

解答:

Oracle版:

SELECT *
FROM
(
SELECT ROW_NUMBER() OVER(PARTITION BY sex ORDER BY ID) AS rnk,NAME,sex
FROM testsf
)
WHERE rnk<=2

效果如下:

Sql Server版:

select *
from
testsf a
where a.id in(select top 2 id
   from testsf
   where SEX=a.SEX
   --group by id
   order by id asc)

效果如下:

9、override与重载的区别?

        重载:同一个作用域内发生(比如一个类里面),定义一系列同名方法,但是方法的参数列表不同。这样才能通过传递不同的参数来决定到底调用哪一个。而返回值类型不同是不能构成重载的。
        重写:继承时发生,在子类中重新定义父类中的方法,子类中的方法和父类的方法是一样的。例如:基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.

理解:
        重载必须发生在一个类中,函数名相同,参数类型或者个数可以不同,返回值类型可以不同。根据参数选择调用方法。重载就是让类以统一的方式处理不同的数据,在同一个类中多个方法可以用同一个名字就叫做方法重载。
        重写override一般用于接口实现和继承类的方法改写,要注意:
                覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;
                覆盖的方法的返回值必须和被覆盖的方法的返回一致;
                覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;
                被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
                可以说,override是一个非常智能的东西,它可以动态决定究竟是采用父类还是子类的方法。

10、Json与xml两个数据结构的优劣比较?

         知乎争论

11、什么是HTTPS?

          百科解读

12、假如让你做一个分页,需要注意哪些点?

13、生产消费者模式的应用场景?

         生产者消费者模式浅析

14、简述MVC开发的几个主要组成部分及作用?

         MVC框架

         MVC拓展

15、简述cookie、session、application、静态字段的作用域区别?

         参考一

        参考二

16、Webform是如何做身份认证的?

        参考一

17、什么是Sql注入?如何防止?

        sql注入百科

       如何防止参考一

18、对称加密、非对称加密、MD5区别是什么?哪个适合做URL安全验证,如何使用?

       对称加密

        非对称加密

        MD5

19、当使用new b()创建b的实例的时候,产生输出什么?

using system;
class a
{
	public a()
	{
		test();
	}
	public virtual  void test();
}
class b:a
{
	int x=1;
	int y;
	public b()
	{
		y=-1;
	}
	public override void test()
	{
		console.writeline("x={0},y={1}",x,y);
	}
}

输出:x=1,y=0

跟踪过程:

问题19测试代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VirtualTest
{
    class Program
    {
        static void Main(string[] args)
        {
           B bb=new B();
        }

    }
    class A
    {
        public A()
        {
            Test();
        }
        public virtual void Test() { }
    }
    class B : A
    {
        int x = 1;
        int y;
        public B()
        {
            y = -1;
        }
        public override void Test()
        {
            Console.WriteLine("x={0},y={1}", x, y);
            Console.ReadLine();
        }
    }
}

小注:

        本人主要做WinForm开发,Web甚少涉及,有不对的或者好的答案,希望大家留下言,谢谢。

时间: 2024-09-01 04:03:04

搜房面试题的相关文章

搜房网无线主管王峰:互联网生存四原则

搜房网无线主管.网络运营专家王峰先生(山东济南人)于27号晚8点半于百忙之中抽出时间做客山东站长网.站长QQ群,与山东的198位站长共同讨论了大家比较关心的话体.我稍加整理.提取精华献给大家,希望能给你有所帮助! 互联网生存四原则: 第一原则:剩者为王 剩者为王是不是作者打错字了?当然不是,就是这四个字.为什么是这四个字呢? 中国互联网初期有多少家网站,肯定到现在能够活下来大部分都赚到了钱.比如:门户类网站中的新浪(sina).搜狐(sohu).网易(163):垂直门户中的地产门户搜房(souf

搜房网的变革或许正是其踏往深渊的第一步!

前几天,搜房宣布13亿元入股中国领先的房地产代理机构世联行与合富辉煌,成为两者的第二大股东,并提出了房产O2O和互联网金融的概念.然而,这些动作虽然看上去很美,我认为却是进一步把搜房推向深渊的前奏. "城门失火,殃及池鱼",今年以来,房地产市场的持续冷淡不仅让众多开发商伤透脑筋,也让更广大的房产中介服务商渐入"难"境.在生存面临压力的情况下,房产中介将愤怒的目光投向了"骑在它们头上"的搜房网等房产信息发布及房产电商平台. 5月底以来,全国多地爆发

房产中介自建平台影响乏力 搜房有望继续运营

对于中原地产.德佑地产.21世纪不动产这些搜房网之前的合作者来说,搜房网对合富辉煌.世联行的收购无疑可能会影响到他们的合作心态.<每日经济新闻>记者近日采访搜房控股董事长莫天全,询问这些房地产中介和代理商会否因为上述收购而另选其他电商合作机构?莫天全未能给出直接的回应. 记者调查发现,联合抵制搜房网的事件并非常态,房地产中介公司面对房源全面的线上第三方平台,处于劣势地位.尽管中介公司都已建立起自己的线上平台,但要想"封杀"搜房网,需要过硬的品牌. 搜房或仍然被沿用 房产中介

搜房网被曝涉嫌数据造假市场份额一周内翻倍

晚报记者 秦川 近日有知情人士在多个论坛爆料称,知名房产网站搜房网一连两份市场报告涉嫌造假,在援引第三方统计机构易观国际的数据时,刻意拉低竞争对手的市场份额,重排座次后跻身第一,并通过网站和手机群发该消息.记者了解到,此事 曝光后,搜房网已删除大部分的涉假报告网页. 搜房市场份额一周内"翻倍" "易观最新报告及搜房收入数据显示,2009年4季度房地产网络广告搜房以50.21%市场份额遥遥领先其他网站."日前,搜房网部分客户收到来自网站的群发短信,这样的数字足以振奋人

搜房联席总经理刘坚介绍搜房发展和规划

中介交易 SEO诊断 淘宝客 云主机 技术大厅 [主持人 代建功]谢谢对搜房国际化的期望.下面有请搜房控股副总裁,搜房联席总经理刘坚先生介绍搜房的发展和搜房未来的规划,有请刘总. 搜房控股副总裁 资讯集团总经理 刘坚[刘坚] 各位嘉宾.各位朋友.女士们.先生们,晚上好,非常高兴受莫总的委托,在这里我向大家比较系统简洁的介绍搜房的历史和搜房的发展战略.大家都知道今天晚上 澳大利亚电讯和搜房一起在这里发布了搜房国际网的开通,在Telstra的支持下,搜房更加成为我们全球华人房地产的 网络媒体的领跑者

搜房网第三季度财报

搜房网(NYSE: SFUN )今日宣布,将于美国东部时间2013年11月7日美国股市开盘前(北京时间11月7日晚)发布2013财年第三季度财报. 财报发布后,搜房网管理团队将于美国东部时间11月7日上午8点(北京时间11月7日晚上9点)召开电话会议.收听电话会议的电话号码如下: 国际(付费):+65 6723 9381 国际(免费): 中国香港:800 930 346 美国:+1 866 519 4004 当地: 中国内地:400 620 8038 / 800 819 0121 密码:8992

预测为搜房网当前初步观点,未来或有调整

搜房网(NYSE:SFUN)今天发布了2013财年第四季度及全年未经审计财报.财报显示,搜房网第四季度总营收为2.172亿美元,同比增长47.2%:净利润为1.121亿美元,上年同期为5580万美元.同比增长101%.2013财年,搜房网总营收为6.374亿美元,同比增长48.1%:净利润为2.986亿美元,同比增长96.7%.搜房网第四季度主要运营数据:总营收:第四季度总营收为2.172亿美元,同比增长47.2%.主要来自于房源清单服务.搜房网会员服务和营销服务增长驱动,其中营销服务营收为97

搜房网今天公布了2014年第三季度财报

摘要: 查看最新行情 北京时间11月6日晚间消息, 搜房网 (NYSE: SFUN )今天公布了2014年第三季度财报.净营收为1.905亿美元,同比增长3.0%.不按美国通用会计准则的净利润为6970万美元,同比下降   查看最新行情 北京时间11月6日晚间消息, 搜房网 (NYSE: SFUN )今天公布了2014年第三季度财报.净营收为1.905亿美元,同比增长3.0%.不按美国通用会计准则的净利润为6970万美元,同比下降27.8%. 根据 雅虎 财经汇总的数据,6位分析师平均预计,不按

搜房网Q1营收5850万美元 搜房卡收入占两成

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp; 搜房网财报显示,电子商务服务营收主要来自搜房卡会员服务 5月15日消息,搜房网今晚发布了2012年第一季度未经审计财报,报告显示搜房网第一季度总收入同比增长43.4%达到5,850万美元,增长的主要原因是搜房卡的增长. 第一季度搜房网总营收5850万美元,与去年同期的4080万美元相比增长43.4%.搜房网总营收包括四部分:网络营销服务.搜房帮房源发布.电子商务服务