南通最专业的开锁公司 南通最好的开锁公司 君威遥控器电池 君威专用汽车钥匙电池雷诺科雷傲汽车钥匙遥控器电池更换方法 南通开锁公司电话_南通修锁 换锁芯 开汽车锁 崇川区 港闸区 如皋 如东开锁 南通开锁公司电话 南通金钥匙开锁服务部-专业开修锁 换锁芯(正规公安工商备案) 南通开锁公司电话 南通开锁公司修锁 装锁电话|崇川区开锁|港闸区开锁 led吸顶灯光源 吸顶灯32w 吸顶灯 灯管 吸顶灯 节能灯泡 led吸顶灯灯泡 三头吸顶灯 led吸顶灯灯管 欧普圆形吸顶灯 55w吸顶灯 吸顶灯光源 旅游壶 真空保温 汉方养生壶 美的电热水壶15s08a2 半球牌电饭煲 美的 mg123-d hd2 飞科 三洋洗衣机全自动 新安怡 学饮杯 黑苦荞黄酮软胶囊 苦荞糖安胶囊 五彩凉山苦荞茶 苦荞茶250g 全胚芽黑苦荞茶500 内蒙特产苦荞茶 富贵康苦荞茶 苦荞面包邮 正中苦荞茶包邮 正中苦荞茶 包邮 苦荞香茶西部 苦荞香茶 西部 轩庆苦荞玫瑰鲜花饼 苦荞真空 苦荞500克 苦荞茶120 苦荞 真空 0.02安全套包邮0.2大力马鱼线0.4mm0.4鱼线0.5l氮纤维高压瓶007sh充电器007电子请柬00高达xn-raiser01102400018401背囊0-25微米千分尺03g101系列全套图集0-3个月婴儿连体哈衣05-08本田奥德赛05ffc23套机05版河南动感地带0603贴片电阻包06年款英派斯06斯巴鲁森林人cd机07军衔07军用水壶07款福克斯两厢07数码迷彩07速腾大灯总成 泰好大门锁 泰好豪华大门锁 cei超b级锁芯 玻璃橱门锁 指纹锁耶鲁4109 耶鲁凯特曼指纹锁 防盗挂锁包邮 包挂锁 包梁挂锁 新君威门锁 新君威门锁扣 指纹锁木门 太空铝黑色门锁 泰好浴室铜门锁 浴室门锁不锈钢 1178冷库门锁 南通配新桑塔纳2000 3000 时代超人 志俊汽车钥匙_配帕桑塔纳钥匙遥控器_帕萨特钥匙全丢重配崇川区 南通配宝来汽车钥匙_配宝来遥控器_宝来钥匙全丢如皋 南通配帕萨特汽车钥匙_配帕萨特遥控器_帕萨特钥匙全丢通州 南通配凯越汽车钥匙_配凯越遥控器_凯越钥匙全丢如东

  • 格子衬衣女 长袖 秋
  • t男恤 短袖 韩版包邮
  • 男士职业衬衫
  • 衬衫 女 长袖点点
  • 衬衫 素色 男 宽松 休闲
  • 职场气质衬衫女
  • t恤男短袖加大码不掉色
  • 帅T 小西装
  • 裤子棕色长裤男
  • 衬衣 女 灯芯绒
  • 衬衣 女商务
  • 女士职业衬衫短袖
  • 休闲裤 男 修身
  • jamesearl纯棉休闲长裤
  • 占姆士女式长袖衬衫
  • 男黑色商务休闲棉长裤
  • 女士长袖衬衫
  • 男士绿色休闲长裤
  • 全棉短袖衬衫 男 薄
  • 女士长袖纯棉衬衫
  • 秋裤男直筒
  • 马自达3汽车挂件吊坠饰品 高档琉璃汽车挂饰品蒙迪欧致胜汽车挂件吊坠饰品 高档琉璃汽车挂饰品 启辰D50汽车挂件吊坠饰品 高档琉璃汽车挂饰品起亚K2汽车挂件吊坠饰品 高档琉璃汽车挂饰品索纳塔汽车挂件吊坠饰品 高档琉璃汽车挂饰品天籁汽车挂件吊坠饰品 高档琉璃汽车挂饰品 天语SX4汽车挂件吊坠饰品 高档琉璃汽车挂饰品英朗GT汽车挂件吊坠饰品 高档琉璃汽车挂饰品英伦SC7汽车挂件吊坠饰品 高档琉璃汽车挂饰品自由舰汽车挂件吊坠饰品 高档琉璃汽车挂饰品雨燕汽车挂件吊坠饰品 高档琉璃汽车挂饰品雪佛兰迈锐宝汽车挂件吊坠饰品 高档琉璃汽车挂饰品

    秋冬季现代瑞纳 宝马5系 帕萨特 日产骐达专用汽车毛绒方向盘套 江苏省盐城市地图2014 最新版 江苏省卫星地图2014 最新版 百度地图-谷歌地图-中国地图-北京地图-搜狗地图google地图 广本凌派汽车座垫 凌派秋冬季汽车坐垫 四季通用 长安福特福克斯油耗详解 宝来汽车遥控钥匙电池 更换方法 图解宝来遥控钥匙的电池换法 宝骏630车钥匙遥控器电池更换步骤 更换方法 迈腾车钥匙电池 迈腾更换遥控器电池详解逍客汽车钥匙电池 遥控器逍客智能钥匙的电池更换步骤 新天籁智能遥控钥匙电池 新天籁智能钥匙如何更换纽扣电池 golf6 汽车钥匙遥控器换电池 图解高尔夫6遥控钥匙的电池换法 长安福特福克斯加速时间详解[图] 福克斯汽车钥匙电池 福克斯钥匙电池更换作业 Q5车钥匙更换电池方法 图解新凯越车钥匙更换电池
  • 汽车坐垫 可爱
  • wrc汽车坐垫
  • 汽车坐垫套四季通用
  • 明锐冰丝 汽车坐套
  • 骐达汽车脚垫全包围
  • 三菱蓝瑟汽车坐垫
  • 捷达汽车脚垫 3d
  • 奥迪S7坐垫
  • 别克荣御坐垫
  • Jeep指南者坐垫
  • 力帆320坐垫
  • 路虎卫士坐垫
  • 双龙爱腾坐垫
  • 斯柯达Yeti坐垫
  • 现代途胜坐垫
  • 一汽威乐坐垫
  • 哈飞路宝汽车坐垫
  • 吉利远景汽车坐垫
  • 吉利全球鹰汽车坐垫
  • 房门锁执手锁 防盗挂锁
  • 运动短裤
  • 短裤 男
  • 半裙
  • 手工拖鞋鞋底
  • iphone4皮套 手机套
  • 机油滤清器扳手工具
  • 桑塔纳3000机油
  • 家居摆件现代
  • 玻璃摆件
  • 瓷器摆件
  • 马到成功摆件
  • 高档瓷器摆件
  • 宝马山地自行车包邮
  • 根雕工艺品摆件
  • 家居摆件吊脚娃娃
  • 泰国佛像摆件工艺品
  • 美利达儿童自行车
  • 天鹅摆件结婚
  • 龙龟摆件纯铜
  • 金摆件聚宝盆
  • 亲子自行车 女式
  • 客厅卧室装饰摆件
  • 贵宾狗摆件
  • 木摆件
  • 羚羊头摆件
  • 招财兔摆件
  • 自行车前包
  • 牛仔短裤
  • 短裤 男 休闲
  • 高腰短裤
  • 夏季短裤
  • 蕾丝短裤
  • 连体短裤
  • 裙裤
  • 裤裙
  • 拖鞋 海外
  • 拖鞋 浴室
  • 拖鞋 防滑
  • 拖 鞋 男
  • 拖鞋 女
  • 浴室拖鞋
  • 家居拖鞋
  • 凉拖鞋
  • 夏天拖鞋
  • 香菇丸
  • 韩国饮料
  • 打草绳小松打草绳二手挖掘机小松 小松割灌机配件 钢木书桌办公桌钢木桌玻璃杯子水壶钢化玻璃水壶钢木办公桌钢木电脑桌进口玻璃水壶玻璃水成份防冻玻璃水包邮防冻玻璃水车用 环保果皮箱环保垃圾袋环保垃圾桶小松120-6常州小松割草机小松打草头小松割灌机小松割灌机配件 咖啡厅员工制服_咖啡厅服务员制服_西餐咖啡服务员制服_咖啡馆制服_咖啡店西餐
  • 5号充电电池8节套装
  • 5-7号电池充电器
  • 充电电池5号正品
  • 可充电电池5号
  • 7号充电电池批发
  • 7号电池包邮
  • 1.5v充电电池5号
  • 5号充电器电池免邮
  • 双鹿电池5号正品
  • 双鹿9v电池
  • 双鹿电池批发
  • 双鹿7号电池
  • 双鹿1号电池
  • 双鹿碱性电池
  • 三星s4电池原装正品
  • 三星s4原装电池后盖
  • n7100原装电池
  • 小米2s原装电池
  • galaxy s4大容量电池
  • galaxy s4原装电池
  • galaxy s3电池
  • galaxy nexus电池
  • 三星galaxy s4电池后盖
  • 品胜小米2s电池
  • 品胜手机电池
  • 小米2a电池品胜
  • 背夹电池iphone4s
  • note2背夹电池
  • 三星s4背夹电池皮套
  • 自行车fixedgear 自行车眼镜 近视 婴儿推车小自行车 自行车骑行眼镜风镜 钻石自行车 山地自行车立管 led自行车气嘴专用灯 三鼎自行车坐椅儿童 自行车线管 金镶玉玉器挂件 自行车脚踏双轴承 铬钼钢架自行车 邦德自行车女式 山地公路自行车 自行车骑行手电筒 自行车灯架 灯夹包邮 自行车水壶支架 自行车 组装 mosso 自行车载mp3 26自行车 男生单车 自行车 折叠 复古 giant山地车 自行车 炫彩自行车 七彩马亲子自行车 ucc山地车 自行车 贝嘉琦 女孩自行车 zxc自行车配件码表 自行车前置安全椅 女童自行车 小龙哈比 自行车碳纤维垫圈 自行车骑行用品 装饰木板板材 美式壁挂装饰 家具装饰配件 衣服装饰亮片 婚礼礼品实用 公司开业庆典礼品 婴儿衣柜 儿童欧式公主床 床围栏护栏嵌入式 床靠背套 派克圆珠笔芯 卧室台灯床头灯现代 个性笔袋 派克im签字笔 彩色铅笔包邮 派克宝珠笔芯 派克笔芯正品 百乐摩可擦笔笔芯 斑马油笔 微型钢笔钓鱼竿 电子教鞭遥控笔 镭射灯激光笔 彩色水笔芯 黑色水笔笔芯 公爵宝珠笔芯 touch3代马克笔 韩国文具笔包邮 水溶性彩色铅笔 马可 sgp触控笔 礼品创意笔筒 铂金 项链 pt950 男 老竹笔筒 竹雕笔筒 六福珠宝铂金手镯 8.9寸笔记本电脑 三菱签字笔1.0 华硕游戏笔记本 插座面板

    收藏的零碎东西

    课参考
    http://www.unsbiz.com/



    Create PROCEDURE [dbo].[flyso_ListPage]
    (
    --FLYSO Blog
    @tblName     nvarchar(200),        ----要显示的表或多个表的连接
    @fldName     nvarchar(500) = '*',    ----要显示的字段列表
    @pageSize    int = 1,        ----每页显示的记录个数
    @page        int = 10,        ----要显示那一页的记录
    @pageCount    int = 1 output,            ----查询结果分页后的总页数
    @Counts    int = 1 output,                ----查询到的记录数
    @fldSort    nvarchar(200) = null,    ----排序字段列表或条件
    @Sort        bit = 1,        ----排序方法,0为升序,1为降序(如果是多字段排列Sort指代最后一个排序字段的排列顺序(最后一个排序字段不加排序标记)--程序传参如:' SortA Asc,SortB Desc,SortC ')
    @strCondition    nvarchar(1000) = null,    ----查询条件,不需where
    @ID        nvarchar(150),        ----主表的主键
    @Dist                 bit = 0           ----是否添加查询字段的 DISTINCT 默认0不添加/1添加
    )
    AS
    SET NOCOUNT ON
    Declare @sqlTmp nvarchar(1000)        ----存放动态生成的SQL语句
    Declare @strTmp nvarchar(1000)        ----存放取得查询结果总数的查询语句
    Declare @strID     nvarchar(1000)        ----存放取得查询开头或结尾ID的查询语句

    Declare @strSortType nvarchar(10)    ----数据排序规则A
    Declare @strFSortType nvarchar(10)    ----数据排序规则B

    Declare @SqlSelect nvarchar(50)         ----对含有DISTINCT的查询进行SQL构造
    Declare @SqlCounts nvarchar(50)          ----对含有DISTINCT的总数查询进行SQL构造


    if @Dist  = 0
    begin
        set @SqlSelect = 'select '
        set @SqlCounts = 'Count(*)'
    end
    else
    begin
        set @SqlSelect = 'select distinct '
        set @SqlCounts = 'Count(DISTINCT '+@ID+')'
    end


    if @Sort=0
    begin
        set @strFSortType=' ASC '
        set @strSortType=' DESC '
    end
    else
    begin
        set @strFSortType=' DESC '
        set @strSortType=' ASC '
    end



    --------生成查询语句--------
    --此处@strTmp为取得查询结果数量的语句
    if @strCondition is null or @strCondition=''     --没有设置显示条件
    begin
        set @sqlTmp =  @fldName + ' From ' + @tblName
        set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName
        set @strID = ' From ' + @tblName
    end
    else
    begin
        set @sqlTmp = + @fldName + 'From ' + @tblName + ' where (1>0) ' + @strCondition
        set @strTmp = @SqlSelect+' @Counts='+@SqlCounts+' FROM '+@tblName + ' where (1>0) ' + @strCondition
        set @strID = ' From ' + @tblName + ' where (1>0) ' + @strCondition
    end

    ----取得查询结果总数量-----
    exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
    declare @tmpCounts int
    if @Counts = 0
        set @tmpCounts = 1
    else
        set @tmpCounts = @Counts

        --取得分页总数
        set @pageCount=(@tmpCounts+@pageSize-1)/@pageSize

        /**//**当前页大于总页数 取最后一页**/
        if @page>@pageCount
            set @page=@pageCount

        --/*-----数据分页2分处理-------*/
        declare @pageIndex int --总数/页大小
        declare @lastcount int --总数%页大小

        set @pageIndex = @tmpCounts/@pageSize
        set @lastcount = @tmpCounts%@pageSize
        if @lastcount > 0
            set @pageIndex = @pageIndex + 1
        else
            set @lastcount = @pagesize

        --//***显示分页
        if @strCondition is null or @strCondition=''     --没有设置显示条件
        begin
            if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理
                begin
                    set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                            +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                            +' order by '+ @fldSort +' '+ @strFSortType+')'
                            +' order by '+ @fldSort +' '+ @strFSortType
                end
            else
                begin
                set @page = @pageIndex-@page+1 --后半部分数据处理
                    if @page <= 1 --最后一页数据显示
                        set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                            +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
                    else                
                        set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                            +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                            +' order by '+ @fldSort +' '+ @strSortType+')'

                            +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
                end
        end

        else --有查询条件
        begin
            if @pageIndex<2 or @page<=@pageIndex / 2 + @pageIndex % 2   --前半部分数据处理
            begin
                    set @strTmp=@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName +' from  '+@tblName
                        +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-1) as Varchar(20)) +' '+ @ID +' from '+@tblName
                        +' Where (1>0) ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType+')'
                        +' ' + @strCondition + ' order by '+ @fldSort +' '+ @strFSortType                 
            end
            else
            begin
                set @page = @pageIndex-@page+1 --后半部分数据处理
                if @page <= 1 --最后一页数据显示
                        set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@lastcount as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                            +' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
                else
                        set @strTmp=@SqlSelect+' * from ('+@SqlSelect+' top '+ CAST(@pageSize as VARCHAR(4))+' '+ @fldName+' from '+@tblName
                            +' where '+@ID+' not in('+ @SqlSelect+' top '+ CAST(@pageSize*(@page-2)+@lastcount as Varchar(20)) +' '+ @ID +' from '+@tblName
                            +' where (1>0) '+ @strCondition +' order by '+ @fldSort +' '+ @strSortType+')'
                            + @strCondition +' order by '+ @fldSort +' '+ @strSortType+') AS TempTB'+' order by '+ @fldSort +' '+ @strFSortType
            end    
        end

    ------返回查询结果-----
    exec sp_executesql @strTmp
    --print @strTmp
    SET NOCOUNT OFF











    原始的Joseph问题的描述如下:
    有n个人围坐在一个圆桌周围,把这n个人依次编号为1,......,n。从编号是1 的人开始报数,
    数到m个人出列,然后从出列的下一个人重新开始报数,数到第m个人又出列,......,
    如此反复直到所有的人全部出列为止。比如当n=6,m=5的时候,出列的顺序依次是5,4,6,2,3,1。
    现在的问题是:假设有k个好人和k个坏人。好人的编号是1到k,坏人的编号是k+1到2k。
    我们希望求出m的最小值,使得最先出列的k个人都是坏人。
    输入:
    仅有的一个数字是k
    输出:
    使得最先出列的k个人都是坏人的m的最小值。

    <---------这道题直接翻译,结果如下:------------->

    import java.util.*;

    class ShiTi
    {
     public ShiTi()
     {
     }
     
     public ShiTi(int size)
     {
      this.size=size;
     }
     public void initNum()
     {
      array=new LinkedList();
      temp=new LinkedList();
      for(int i=1;i<=size;i++)
      {
       array.add(new Integer(i));
      }
     }

     public void initPerson()
     {
      array=new java.util.LinkedList();
      temp = new LinkedList();
      for(int i=0;i<size;i++)
      {
       array.add(new Boolean(true));
      }
      for(int i=0;i<size;i++)
      {
       array.add(new Boolean(false));
      }
     }
     private boolean bool(Object o)
     {
      if(temp.size()==size)
      {
       System.out.println("temp.size:"+temp.size());
       status=true;
       return false;
      }
      if(((Boolean)o).booleanValue()==true)
      {
       return false;
      }
      else
       return true;
     }
     
     public void searches(int start,int _span,boolean b)//start开始值为1
     {

      if(array.size()>0 && b)
      {
       if((start+_span-1)>array.size())
       {
        int leave=array.size()-start+1;//剩几个
        int n=(_span-leave)-(_span-leave)/array.size()*array.size();//最后一遍取几个
        int start_temp=0;
        
        if(n==0)
        {
         start_temp=array.size();
        }
        else
        {
         start_temp=n;
        }
        
        boolean bl=this.bool(array.get(start_temp-1));
        if(bl)
        {
         temp.add(array.get(start_temp-1));
         array.remove(start_temp-1);
         searches(start_temp,_span,bl);
        }
       }
       else
       {
        boolean bl=this.bool(array.get((start-1)+(_span-1)));
        if(bl)
        {
         temp.add(array.get((start-1)+(_span-1)));
         array.remove((start-1)+(_span-1));
         searches(start+_span-1,_span,bl);
        }
       }
      }
      else
       return;
     }
     
     
     public void searchesPerson()
     {
      while(!status)
      {
       initPerson();
       this.searches(1,span,true);
       if(status != true)
       {
        span++;
       }
       else
        return;
      }
     }

     
     //数字按指定步长排列
     public void searches(int start,int _span)//start开始值为1
     {
      if(array.size()>0)
      {
       if((start+_span-1)>array.size())
       {
        int leave=array.size()-start+1;//剩几个
        int n=(_span-leave)-(_span-leave)/array.size()*array.size();//最后一遍取几个
        int start_temp=0;
        if(n==0)
        {
         start_temp=array.size();
        }
        else
        {
         start_temp=n;
        }
        temp.add(array.get(start_temp-1));
        array.remove(start_temp-1);
        searches(start_temp,_span);
       }
       else
       {
        temp.add(array.get((start-1)+(_span-1)));
        array.remove((start-1)+(_span-1));
        searches(start+_span-1,_span);
       }
      }
      else
       return;
     }
     
     
     
     public void printResult()
     {
      System.out.println("输入:"+size);
      System.out.print("结果:");
      for(int i=0;i<temp.size();i++)
      {
       System.out.print(temp.get(i).toString()+",");
      }
      System.out.println("");
      if(status)
       System.out.println("输出:最小步长为  "+span+"  可提出所有坏人");
      System.out.println("");
     }
     
     
     java.util.LinkedList array=null;
     java.util.LinkedList temp=null;
     java.util.LinkedList result=new LinkedList();
     
     private int size=0;
     private int span=1;
     
     private boolean status=false;
     
    }

    class Excute
    {
     public static void main(String[] args)
     {
      ShiTi s = new ShiTi(6);//1-13可以试,14和14以上的就不要试 了,
     
      s.initNum();
      s.searches(1,5);
      s.printResult();
     
      s.searchesPerson();
      s.printResult();
     }
    }

    <----------------算法优化---------------->

    public class Joseph4 {
      long k = 0;
      long m = 0;
      long begin = 0;
     
      public int check(long remain) {
        long result = (begin + m - 1) % remain; //开始报数,但是一定要找到报数点
       // System.out.println(m);
        if (result >= k) {//出列的人的报数必须不小于k值,才能保证是坏人
          begin = result;
          return 1;
        }
        else {
          return 0;
        }
      }
     
      public void find() {
        long i, find = 0;
        k = 14;
        for (m = k; find == 0; m++) {
          find = 1;
          begin = 0;
          for (i = 0; i < k; i++) {
            //若check(2*k-i)==1为真,证明为坏人,向下继续出列,
            //若为0,证明不是坏人,则退出,使m加1
            if (check(2 * k - i) == 0) {
              find = 0;
              break;
            }
          }
        }
        System.out.println("m:   " + (m - 1));
      }
     
      public static void main(String[] args) {
        Joseph4 joseph=new Joseph4();
        joseph.find();
      }
    }








    运算  

    19链接表和数组之间的区别是什么?  

    20做一个链接表,你为什么要选择这样的方法?  


    21选择一种算法来整理出一个链接表。你为什么要选择这种方法?现在用o(n)时间来做。  

    22说说各种股票分类算法的优点和缺点。  

    23用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。  

    24用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。  

    25用一种算法整理一个数组。你为什么选择这种方法?  

    26用一种算法使通用字符串相匹配。  

    27颠倒一个字符串。优化速度。优化空间。  

    28颠倒一个句子中的词的顺序,比如将“我叫克丽丝”转换为“克丽丝叫我”,实现速度最快,移动最少。  

    29找到一个子字符串。优化速度。优化空间。  

    30比较两个字符串,用o(n)时间和恒量空间。  

    31假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?  

    32不用乘法或加法增加8倍。现在用同样的方法增加7倍。  

    应用  

    33如何将计算机技术应用于一幢100层高的办公大楼的电梯系统上?你怎样优化这种应用?工作日时的交通、楼层或时间等因素会对此产生怎样的影响?  

    34你如何对一种可以随时存在文件中或从因特网上拷贝下来的操作系统实施保护措施,  
    防止被非法复制?  

    35你如何重新设计自动取款机?  

    36假设我们想通过电脑来操作一台微波炉,你会开发什么样的软件来完成这个任务?  

    37你如何为一辆汽车设计一台咖啡机?  

    38如果你想给微软的word系统增加点内容,你会增加什么样的内容?  

    39你会给只有一只手的用户设计什么样的键盘?  

    头脑  

    41如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。这时你如何重新组装这个时钟?  



    43假设由你负责设计比尔•盖茨的卫生间。当然,钱不成问题,但是你不可以和比尔谈。你会怎样做?  



    45如果微软公司说,我们愿意投资500万美元用来开发你提出的方案。那么你会做什么?为什么?  

    46如果你将世界上所有的计算机制造商召集起来,告诉他们必须要做一件事,你会让他们做什么事?  

    47如果你在五年内会得到一笔奖金,你认为会是因为什么?关注你的成绩的人会是谁?  





    62.元帅领兵  

    元帅统领八员将,每将各分八个营,每营里面摆八阵,每阵配置八先锋,每个先锋八旗头,每个旗头有八队,每队分设八个组,每组带领八个兵。请你掐指算一算,元师共有多少兵?  


    63.运算符号的妙用  

    在1、2、3、4、5、6、7、8、9这一串数字中间,加入运算符号“+”或“-”,使其代数和等于99,按(1 …… 9)可以有17种解,倒过来的后者(9 …… 1)可以有11种解。有兴趣的读者,不妨一试。  

    64.两龟赛跑  

    有两只乌龟一起赛跑。甲龟到达10米终点线时,乙龟才跑到9米。现在如果让甲龟的起跑线退后1米,这时两龟再同时起跑比赛,问甲、乙两龟是否同时到达终点?  

    65.电视机的价格  

    麦克因工作繁忙,决定临时请尼克来协助他工作。规定以一年为期限,一年的报酬为600美元与一台电视机。  

    可是尼克做了7个月后,因急事必须离开麦克,并要求麦克付给他应得的钱和电视机。由于电视机不能拆散付给他,结果尼克得到了150美元和一台电视机。  

    现在请你想一想:这台电视机值多少钱?  

    66.这块石头究竟有多重  

    有4个小孩看见一块石头正沿着山坡滚下来,便议论开了。  

    “我看这块石头有17公斤重,”第一个孩子说。  

    “我说它有26公斤,”第二个孩子不同意地说。  

    “我看它重21公斤”,第三个孩子说。  

    “你们都说得不对,我看它的正确重量是20公斤,”第四个孩子争着说。  

    他们四人争得面红耳赤,谁也不服谁。最后他们把石头拿去称了一下,结果谁也没猜准。其中一个人所猜的重量与石头的正确重量相差2公斤,另外两个人所猜的重量与石头的正确重量之差相同。当然,这里所指的差,不考虑正负号,取绝对值。请问这块石头究竟有多重?  









      20、对一批编号为1~100 全部开关朝上开的灯进行以下操作:   凡是1 的倍数反方向拨一次开关2 的倍数反方向又拨一次开关3 的倍数反方向又拨一次开关。问最后为关熄状态的灯的编号。
      21、假设一张圆盘像唱机上的唱盘那样转动。这张盘一半是黑色,一半是白色。假设你有数量不限的一些颜色传感器。要想确定圆盘转动的方向,你需要在它周围摆多少个颜色传感器?它们应该被摆放在什么位置?
      22、假设时钟到了12点。注意时针和分针重叠在一起。在一天之中,时针和分针共重叠多少次?你知道它们重叠时的具体时间吗?
      23、中间只隔一个数字的两个奇数被称为奇数对,比如17和19。证明奇数对之间的数字总能被6整除(假设这两个奇数都大于6)。现在证明没有由三个奇数组成的奇数对。
      24、一个屋子有一个门(门是关闭的)和3盏电灯。屋外有3个开关,分别与这3盏灯相连。你可以随意操纵这些开关,可一旦你将门打开,就不能变换开关了。确定每个开关具体管哪盏灯。
      25、假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少要称多少次才能找出这个较重的球?
      26、下面玩一个拆字游戏,所有字母的顺序都被打乱。你要判断这个字是什么。假设这个被拆开的字由5个字母组成:
        1.共有多少种可能的组合方式?
        2.如果我们知道是哪5个字母,那会怎么样?
        3.找出一种解决这个问题的方法。
      27、有4个女人要过一座桥。她们都站在桥的某一边,要让她们在17分钟内全部通过这座桥。这时是晚上。她们只有一个手电筒。最多只能让两个人同时过桥。不管是谁过桥,不管是一个人还是两个人,必须要带着手电筒。手电筒必须要传来传去,不能扔过去。每个女人过桥的速度不同,两个人的速度必须以较慢的那个人的速度过桥。
          第一个女人:过桥需要1分钟;
          第二个女人:过桥需要2分钟;
          第三个女人:过桥需要5分钟;
          第四个女人:过桥需要10分钟。
          比如,如果第一个女人与第4个女人首先过桥,等她们过去时,已经过去了10分钟。如果让第4个女人将手电筒送回去,那么等她到达桥的另一端时,总共用去了20分钟,行动也就失败了。怎样让这4个女人在17分钟内过桥?还有别的什么方法?
      28、如果你有两个桶,一个装的是红色的颜料,另一个装的是蓝色的颜料。你从蓝色颜料桶里舀一杯,倒入红色颜料桶,再从红色颜料桶里舀一杯倒入蓝颜料桶。两个桶中红蓝颜料的比例哪个更高?通过算术的方式来证明这一点。

           B:疯狂计算

      29、已知两个1~30之间的数字,甲知道两数之和,乙知道两数之积。
          甲问乙:你知道是哪两个数吗?乙说:不知道;
          乙问甲:你知道是哪两个数吗?甲说:也不知道;
          于是,乙说:那我知道了;
          随后甲也说:那我也知道了;
          这两个数是什么?
      30、4,4,10,10,加减乘除,怎么出24点?
      31、1000!有几位数,为什么?
      32、F(n)=1 n>8 n<12
            F(n)=2 n<2
            F(n)=3 n=6
            F(n)=4 n=other
            使用+ - * /和sign(n)函数组合出F(n)函数
            sign(n)=0 n=0
            sign(n)=-1 n<0
            sign(n)=1 n>0
      33、编一个程序求质数的和例如F(7)=1+3+5+7+11+13+17=58
      34、请仅用一支笔画四根直线将上图9 各点全部连接
      35、三层四层二叉树有多少种
      36、1--100000 数列按一定顺序排列,有一个数字排错,如何纠错?写出最好方法。两个数字呢?
      37、链接表和数组之间的区别是什么?
      38、做一个链接表,你为什么要选择这样的方法?
      39、选择一种算法来整理出一个链接表。你为什么要选择这种方法?现在用O(n)时间来做。
      40、说说各种股票分类算法的优点和缺点。
      41、用一种算法来颠倒一个链接表的顺序。现在在不用递归式的情况下做一遍。
      42、用一种算法在一个循环的链接表里插入一个节点,但不得穿越链接表。
      43、用一种算法整理一个数组。你为什么选择这种方法?
      44、用一种算法使通用字符串相匹配。
      45、颠倒一个字符串,优化速度,优化空间。
      46、颠倒一个句子中的词的顺序,比如将我叫克丽丝转换为克丽丝叫我,实现速度最快,移动最少。
      47、找到一个子字符串,优化速度,优化空间。
      48、比较两个字符串,用O(n)时间和恒量空间。
      49、假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?
      50、不用乘法或加法增加8倍。现在用同样的方法增加7倍。

     

    strong是web标准中xhtml的标签,strong的意思是“强调”;b是html的,b的意思是bold(粗体)。为什么用strong代替b?其实这个问题不妨改问:xhtml和html有什么不同,为什么要用xhtml代替html?
    网上有很多详细的文章谈这个,可以找了看看
    简单地说:web标准主张xhtml不涉及具体的表现形式,“强调”可以用加粗来强调,也可以用其它方式来强调,比如下划线,比如字体加大,比如红色,等等,可以通过css来改变strong的具体表现,这就是为什么b要改为strong
    strong 代表其中内容文字的意义。b代表其中文字的样式是粗体。 在html规范中二者的区别基本上看不出来。在xhtml中由于强调“样式与内容的分离”所以代 表样式的b被掏汰了。取而代之的是其它标签。注意,不是strong代替了b。strong代表强调,你可以自定义任何样式来代表强调。只是strong 的默认样式与b相同而已。
    是加重语气标签;是粗体标签
    它们起的均是加粗字体的作用。在大多数情况下,它们表现出来的效果也大致相同,所不同的是,标签是一个实体标签,它所包围的字符将被设为bold(粗体),而标签是一个逻辑标签,它的作用是加强字符的语气,一般来说,加强字符的语气是通过将字符变为bold (粗体)来实现的。但是在不同的HTML解释器下,情况也可能有所不同。
    同样的一段代码,在Internet Explorer和Netscape中显示有可能不同,因为这两个标签涉及浏览器的兼容性的问题。在Netscape中,如果将字符集设为GB2312的话,和是不起作用的。要解决这个问题,我们可以将字符集改为885981,也就是将〈meta>标签所在行改为:

    然后在Netscape中打开,两个标签就都起作用了!
    忠告:在实际网页设计中,为使页面效果受客户端因素影响变为最小,应该尽量使用实体标签!



    C#文件上传

    --------------------------------------------------------------------------------

    2007-07-29 15:53:21 标签:文件 上传 C#   [推送到技术圈]


    找了很多的资料,学到了不少有用的东西,最简单的实现就是使用FileUpload控件.
    using System;
    namespace UpFile { ///
    /// upfile 的摘要说明。
    ///
    public class upfile
    {
      private string path = null;
      private string fileType = null;
      private int sizes = 0;
      ///
      /// 初始化变量
      ///
      public upfile()
      {
       path = @"\uploadimages\"; //上传路径
       fileType = "jpg|gif|bmp";
       sizes = 200; //传文件的大小,默认200KB
      }
      ///
      /// 设置上传路径,如:uploadimages\
      ///
      public string Path
      {
       set
       {
        path = @"\" + value + @"\";
       }
      }
      ///
      /// 设置上传文件大小,单位为KB
      ///
      public int Sizes
      {
       set
       {
        sizes = value * 1024;
       }
      }
      ///
      /// 设置上传文件的类型,如:jpg|gif|bmp ///
      public string FileType
      {
       set
       {
        fileType = value;
       }
      }
      ///
      /// 上传图片
      ///
      /// 上传控件名称
      /// true则以当前时间创建文件夹,false则为设置的文件夹
      /// 返回上传图片的相对路径
      public string fileSaveAs(System.Web.UI.HtmlControls.HtmlInputFile name,bool creatDirectory)
      {
       try
       {
        string filePath=null;
        //以当前时间修改图片的名字或创建文件夹的名字
        string modifyFileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
        //获得站点的物理路径
        string uploadFilePath = null;
        //如果为true则以当前时间创建文件夹,否则为设置的文件夹
        if(creatDirectory)
        {
         uploadFilePath = System.Web.HttpContext.Current.Server.MapPath(".") + @"\" + DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + @"\";
        }
        else
        {
         uploadFilePath = System.Web.HttpContext.Current.Server.MapPath(".") + path;
        }
        //获得文件的上传的路径
        string sourcePath=name.Value.Trim();
        //判断上传文件是否为空
        if(sourcePath == "" || sourcePath == null)
        {
         message("您没有上传数据呀,是不是搞错了呀!");
         return null;
        }
        //获得文件扩展名
        string tFileType = sourcePath.Substring(sourcePath.LastIndexOf(".")+1);
        //获得上传文件的大小
        long strLen = name.PostedFile.ContentLength;
        //分解允许上传文件的格式
        string[] temp = fileType.Split('|');
        //设置上传的文件是否是允许的格式
        bool flag = false;
        //判断上传文件大小
        if(strLen >= sizes)
        {
         
         message("上传的图片不能大于" + sizes + "KB");
         return null;
        }
        //判断上传的文件是否是允许的格式
        foreach(string data in temp)
        {
         if(data == tFileType)
         {
          flag = true ;
          break;
         }
        }
        //如果为真允许上传,为假则不允许上传
        if(!flag)
        {
         message("目前本系统支持的格式为:"+fileType);
         return null;
        }
        System.IO.DirectoryInfo dir=new System.IO.DirectoryInfo(uploadFilePath);
        //判断文件夹否存在,不存在则创建
        if(!dir.Exists)
        {
         dir.Create();
        }
        filePath = uploadFilePath + modifyFileName + "." + tFileType;
        name.PostedFile.SaveAs(filePath);
        filePath = path + modifyFileName + "." + tFileType;
        return filePath;
       }
       catch
       {
        //异常
        message("出现未知错误!");
        return null;
       }
      }
      private void message(string msg,string url)
      {
       System.Web.HttpContext.Current.Response.Write(" alert('"+msg+"');window.location='"+url+"' ");
      }
      private void message(string msg)
      {
       System.Web.HttpContext.Current.Response.Write(" alert('"+msg+"'); ");
      }
    }
    }
     
    --------------------------------------------------------------------------------

    1. C#实现Web文件的上传
     
      在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛。
      那么使用C#如何实现文件上传的功能呢?下面笔者简要介绍一下。
      首先,在你的Visual C# web project 中增加一个上传用的Web Form,为了要上传文件,需要在ToolBox中选择HTML类的File Field控件,将此控件加入到Web Form中,然而此时该控件还不是服务端控件,我们需要为它加上如下一段代码:<INPUT&NBSP;ID=UPLOADFILE1&NBSP;TYPE=FILE&NBSP;SIZE=49&NBSP;RUNAT="SERVER">,这样它就成为服务端控件了,如果需要同时上传数个文件时,我们可以相应增加此控件。
      需要注意的是代码中一定要把<form>的属性设置成为:
    <form method=post encType=multipart/ form-data runat="server">
      如果没有这个属性,就不能实现上传。
      然后在此Web Form中增加一个Web Form类的Button,双击Button添加如下代码:
    //上传图片的程序段
    DateTime now = DateTime.Now ;
    //取现在时间到DataTime类的对象now中
    string strBaseLocation = "D:\\web\\FC\\pic\\";
    //这是文件将上传到的服务器的绝对目录
    if (uploadfile1.PostedFile.ContentLength != 0) //判断选取对话框选取的文件长度是否为0
    {
        uploadfile1.PostedFile.SaveAs(strBaseLocation+now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg");
    //执行上传,并自动根据日期和文件大小不同为文件命名,确保不重复
    Label1.Text="图片1已经上传,文件名为:"+now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg";
     navigator.Insert(System.Xml.TreePosition.After, XmlNodeType.Element,"pic1","","") ;
        navigator.Insert(System.Xml.TreePosition.FirstChild, XmlNodeType.Text,"pic1","","") ;
        navigator.Value= now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg" ;
        navigator.MoveToParent() ;
    }
      上面的代码用于笔者开发的一个使用XML文件存储新闻信息的系统中,后面几句代码作用是写上传文件信息到XML文件中。如果要上传其他类型文件,只需要将jpg改为相应类型的后缀名即可,如改为doc即可上传Word文件,浏览器即可直接浏览上传的Word文件。
      【注意事项】
      1. 上传文件不可以无限大;
      2. 要注意IIS的安全性方面的配合;
      3. 用Visual Studio 的安装项目做安装程序的时候,请注意安装程序所在的绝对路径问题;
      4. 注意文件上传后的重名问题。

     
     

    --------------------------------------------------------------------------------
     
    2. C#实现Web文件的上传
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Web.UI.HtmlControls;
    using System.Drawing.Imaging;
    using System.Configuration;
    using System.Drawing;
    namespace zhuanti
    {
    /// <summary>
    /// 这是一个用于玩家投稿中实现玩家上传文件功能中用到的相应的函数的功能模块
    /// </summary>
    public class FileUpload
    {
    public enum File //定义一个人用于存放玩家上传文件信息的一个数组
    {
    FILE_SIZE , //大小
    FILE_POSTNAME, //类型(文件后缀名)
    FILE_SYSNAME , //系统名
    FILE_ORGINNAME, //原来的名字
    FILE_PATH //文件路径
    }
    private static Random rnd = new Random(); //获取一个随机数
    public static string[] UploadFile(HtmlInputFile file,string Upload_Dir) //实现玩家文件上传功能的主函数
    {
    string[] arr = new String[5];
    string FileName = GetUniquelyString(); //获取一个不重复的文件名
    string FileOrginName = file.PostedFile.FileName.Substring
    (file.PostedFile.FileName.LastIndexOf("\\")+1);//获取文件的原始名
    if(file.PostedFile.ContentLength<=0)
    { return null; }
    string postFileName;
    string FilePath = Upload_Dir.ToString();
    string path = FilePath + "\\";
    try
    {
    int pos = file.PostedFile.FileName.LastIndexOf(".")+1;
    postFileName = file.PostedFile.FileName.Substring(pos,file.PostedFile.FileName.Length-pos);
    file.PostedFile.SaveAs(path+FileName+"."+postFileName); //存储指定的文件到指定的目录
    }
    catch(Exception exec)
    {
    throw(exec);
    }
    double unit = 1024;
    double size = Math.Round(file.PostedFile.ContentLength/unit,2);
    arr[(int)File.FILE_SIZE] = size.ToString(); //文件大小
    arr[(int)File.FILE_POSTNAME] = postFileName; //文件类型(文件后缀名)
    arr[(int)File.FILE_SYSNAME] = FileName; //文件系统名
    arr[(int)File.FILE_ORGINNAME] = FileOrginName; //文件原来的名字
    arr[(int)File.FILE_PATH]=path+FileName+"."+postFileName; //文件路径
    return arr;
    }
    public static bool OperateDB(string sqlstr) //建立一个和数据库的关联
    {
    if (sqlstr==String.Empty)
    return false;
    SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["connstring"]);
    SqlCommand myCommand = new SqlCommand(sqlstr, myConnection);
    myConnection.Open();
    myCommand.ExecuteNonQuery();
    myConnection.Close();
    return true;
    }
    public static string GetUniquelyString() //获取一个不重复的文件名
    {
    const int RANDOM_MAX_VALUE = 1000;
    string strTemp,strYear,strMonth,strDay,strHour,strMinute,strSecond,strMillisecond;
    DateTime dt =DateTime.Now;
    int rndNumber = rnd.Next(RANDOM_MAX_VALUE);
    strYear = dt.Year.ToString ();
    strMonth = (dt.Month > 9)? dt.Month.ToString() : "0" + dt.Month.ToString();
    strDay = (dt.Day > 9)? dt.Day.ToString() : "0" + dt.Day.ToString();
    strHour = (dt.Hour > 9)? dt.Hour.ToString() : "0" + dt.Hour.ToString();
    strMinute = (dt.Minute > 9)? dt.Minute.ToString() : "0" + dt.Minute.ToString();
    strSecond = (dt.Second > 9)? dt.Second.ToString() : "0" + dt.Second.ToString();
    strMillisecond = dt.Millisecond.ToString();
    strTemp = strYear + strMonth + strDay +"_"+ strHour + strMinute + strSecond +"_"+ strMillisecond +"_"+ rndNumber.ToString () ;
    return strTemp;
    }
    }
    }

     
     
    ASP.NET中文件上传下载方法集合
    文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:
      1、如何解决文件上传大小的限制
      2、以文件形式保存到服务器
      3、转换成二进制字节流保存到数据库以及下载方法
      4、上传Internet上的资源
      第一部分:
      首先我们来说一下如何解决ASP.net中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改Web.Config文件来自定义最大文件大小,如下:
      这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大 MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理。解决的方法是利用隐含的 HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法从IIS为ASP.NET 建立的pipe里分块读取数据。实现方法如下:
    IServiceProvidERProvider=(IServiceProvider)HttpContext.Current;
    HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
    byte[]bs=wr.GetPreloadedEntityBody();
    .
    if(!wr.IsEntireEntityBodyIsPreloaded())
    {
     intn=1024;
     byte[]bs2=newbyte[n];
     while(wr.ReadEntityBody(bs2,n)>0)
     {
      ..
     }
    }
      这样就可以解决了大文件的上传问题了。
      第二部分:
      下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息。
      首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。
    public class FileUpLoad
    {
     public FileUpLoad()
     {}
     /**////
     /// 上传文件名称
     ///
     public string FileName
     {
      get
      {
       return fileName;
      }
      set
      {
       fileName = value;
      }
     }
     private string fileName;
     /**////
     /// 上传文件路径
     ///
     public string FilePath
     {
      get
      {
       return filepath;
      }
      set
      {
       filepath = value;
      }
     }
     private string filepath;
     /**////
     /// 文件扩展名
     ///
     public string FileExtension
     {
      get
      {
       return fileExtension;
      }
      set
      {
       fileExtension = value;
      }
     }
     private string fileExtension;
    }
      另外我们还可以在配置文件中限制上传文件的格式(App.Config):
    <?XML version="1.0" encoding="gb2312" ?>
    <Application>
    <FileUpLoad>
    <Format>.jpg|.gif|.png|.bmp
    </FileUpLoad>
    </Application>
      这样我们就可以开始写我们的上传文件的方法了,如下:
    public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)
    {
     FileUpLoad fp = new FileUpLoad();
     string fileName,fileExtension;
     string saveName;
     //
     //建立上传对象
     //
     HttpPostedFile postedFile = InputFile.PostedFile;
     fileName = System.IO.Path.GetFileName(postedFile.FileName);
     fileExtension = System.IO.Path.GetExtension(fileName);
     //
     //根据类型确定文件格式
     //
     AppConfig app = new AppConfig();
     string format = app.GetPath("FileUpLoad/Format");
     //
     //如果格式都不符合则返回
     //
     if(format.IndexOf(fileExtension)==-1)
     {
      throw new ApplicationException("上传数据格式不合法");
     }
     //
     //根据日期和随机数生成随机的文件名
     //
     if(myfileName != string.Empty)
     {
      fileName = myfileName;
     }
     if(isRandom)
     {
      Random objRand = new Random();
      System.DateTime date = DateTime.Now;
      //生成随机文件名
      saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString() + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);
      fileName = saveName + fileExtension;
     }
     string phyPath = HttpContext.Current.Request.MapPath(filePath);
     //判断路径是否存在,若不存在则创建路径
     DirectoryInfo upDir = new DirectoryInfo(phyPath);
     if(!upDir.Exists)
     {
      upDir.Create();
     }
     //
     //保存文件
     //
     try
     {
      postedFile.SaveAs(phyPath + fileName);
      fp.FilePath = filePath + fileName;
      fp.FileExtension = fileExtension;
      fp.FileName = fileName;
     }
     catch
     {
      throw new ApplicationException("上传失败!");
     }
     //返回上传文件的信息
     return fp;
    }
      然后我们在上传文件的时候就可以调用这个方法了,将返回的文件信息保存到数据库中,至于下载,就直接打开那个路径就OK了。
      第三部分:
      这里我们主要说一下如何以二进制的形式上传文件以及下载。首先说上传,方法如下:
    public byte[] UpLoadFile(HtmlInputFile f_IFile)
    {
     //获取由客户端指定的上传文件的访问
     HttpPostedFile upFile=f_IFile.PostedFile;
     //得到上传文件的长度
     int upFileLength=upFile.ContentLength;
     //得到上传文件的客户端MIME类型
     string contentType = upFile.ContentType;
     byte[] FileArray=new Byte[upFileLength];
     Stream fileStream=upFile.InputStream;
     fileStream.Read(FileArray,0,upFileLength);
     return FileArray;
    }
      这个方法返回的就是上传的文件的二进制字节流,这样我们就可以将它保存到数据库了。下面说一下这种形式的下载,也许你会想到这种方式的下载就是新建一个 aspx页面,然后在它的Page_Load()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:
      首先,在Web.config中加入:
    <add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
      这表示我打开openfile.aspx这个页面时,系统就会自动转到执行RuixinOA.Web.BaseClass.OpenFile 这个类里的方法,具体实现如下:
    using System;
    using System.Data;
    using System.Web;
    using System.IO;
    using Ruixin.WorkFlowDB;
    using RXSuite.Base;
    using RXSuite.Component;
    using RuixinOA.BusinessFacade;
    namespace RuixinOA.Web.BaseClass
    {
     /**////
     /// NetUFile 的摘要说明。
     ///
     public class OpenFile : IHttpHandler
     {
      public void ProcessRequest(HttpContext context)
      {
       //从数据库中取出要下载的文件信息
       RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();
       EntityData data = os.GetFileDetail(id);
       if(data != null && data.Tables["RX_OA_File"].Rows.Count >0)
       {
        DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];
        context.Response.Buffer = true;
        context.Response.Clear();
        context.Response.ContentType = dr["CContentType"].ToString();
        context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
        context.Response.BinaryWrite((Byte[])dr["CContent"]);
        context.Response.Flush();
        context.Response.End();
       }
      }
      public bool IsReusable
      {  
       get { return true;}
      }
     }
    }
      执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。
      第四部分:
      这一部分主要说如何上传一个Internet上的资源到服务器。
      首先需要引用 System.Net 这个命名空间,然后操作如下:
    HttpWebRequest hwq = (HttpWebRequest)WebRequest.Create("http://localhost/pwtest/webform1.aspx");
    HttpWebResponse hwr = (HttpWebResponse)hwq.GetResponse();
    byte[] bytes = new byte[hwr.ContentLength];
    Stream stream = hwr.GetResponseStream();
    stream.Read(bytes,0,Convert.ToInt32(hwr.ContentLength));
    //HttpContext.Current.Response.BinaryWrite(bytes);
      HttpWebRequest 可以从Internet上读取文件,因此可以很好的解决这个问题。
      第五部分:总结
      今天简单的介绍了几种文件上传与下载的方法,都是在实际的项目开发中经常需要用到的,可能还有不完善的地方,希望大家可以互相交流一下项目开发中的经验。
     



    posted @ 2010-11-15 18:27  ChaunceyHao  阅读(324)  评论(0编辑  收藏  举报
  • 汽车羊毛坐垫长毛
  • 车垫四季通用
  • 御车宝
  • 凯美瑞坐垫四季通用
  • 手编冰丝坐垫
  • 珍珠戒指新款
  • 汽车皮坐垫四季垫
  • 汽车四季坐垫新款
  • 汽车皮坐垫四季通用
  • 汽车羊毛坐垫短毛
  • 包女
  • 汽车亚麻坐垫包邮
  • 汽车布坐垫
  • 汽车布坐垫套
  • 紫风铃亚麻四季坐垫
  • 蒙奇奇汽车
  • 蒙奇奇汽车毛绒坐垫
  • 蒙奇奇坐垫三件套
  • 尼罗河车坐垫
  • 尼罗河手编坐垫
  • 尼罗河四季垫
  • 羊剪绒坐垫
  • 牧宝冬季坐垫
  • 牧宝四季垫正品
  • 牧宝羽绒坐垫
  • 牧宝汽车垫羊毛
  • 高压洗车机
  • 高压洗车器
  • 高压洗车水泵
  • 高压洗车泵
  • 熊猫洗车
  • 洗车器高压220v
  • 洗车器便携高压
  • 高压水枪洗车机
  • 220v高压水枪洗车机
  • 家用洗车水枪高压枪
  • 汽车洗车水枪
  • 虎贝尔洗车水枪
  • 水枪头洗车
  • 洗车水枪水管
  • 洗车水枪套装
  • 洗车水枪接头
  • 佳百丽洗车水枪
  • 洗车工具套装
  • 洗车用品工具
  • 家用洗车工具
  • 汽车洗车工具
  • 洗车设备工具
  • 洗车刷子
  • 现代途胜保险杠
  • 现代新胜达保险杠
  • 保险杠车贴纸
  • 后保险杠车贴纸
  • 前保险杠车贴
  • 雨燕保险杠
  • 后保险杠贴纸
  • 前保险杠贴纸
  • 汽车保险贴纸
  • rav4后保险杠
  • 专业运动文胸htc c715e evo design 4g
  • htc evo 4g a9292
  • htc x515m g17 evo 3d
  • htc one x s720e
  • htc x920e
  • 名牌手表男正品
  • povos 奔腾 pffn3003苏泊尔电热水壶正品
  • tcl tcl电热水壶ta-kb181a
  • 乔邦181j
  • 乔邦不锈钢电热水壶
  • supor 苏泊尔 swf15j3-150
  • 逸动空气滤芯
  • 空气压缩机喷漆
  • 德国车载空气净化器
  • sr927w手表电池
  • cartier手表蓝气球
  • 机械手表男士名表
  • anne klein手表
  • 手表柜台展示柜
  • 女士皮带 头层牛皮
  • 女士皮带 头层纯牛皮
  • jeep皮带 纯牛皮
  • 女皮带 真皮 牛皮
  • 女士皮带 真皮
  • 头层牛皮皮带
  • 女士皮带 时尚
  • 真皮皮带头层牛皮女
  • 女士皮带 包邮
  • 皮带条 头层牛皮
  • 女士皮带 时尚 宽
  • 头层牛皮纯铜扣皮带
  • 女士皮带 纯牛皮
  • 女士皮带头层纯牛皮
  • 女士皮带头层牛皮
  • jeep皮带纯牛皮
  • 女皮带真皮牛皮
  • 女士皮带真皮
  • 女士牛皮皮带包邮
  • 女士皮带时尚
  • 三星微单镜头
  • 三星单反镜头
  • 三星50-200镜头
  • 三星7100镜头保护膜
  • 三星i9210
  • 三星i9210手机套面包蛋糕酸奶机
  • 鸡蛋牛奶面包干饼干
  • 面包片饼干
  • 摩托车机油