服务器存储面试题
Ⅰ session和cookie的区别 面试题
1、Session和Cookie都是会话跟踪技术;
2、Session是保存在服务器端的技术(保持用户登录状态的检查常用Session),而Cookie是保存在客户端的技术;
3、Cookie只能存字符串,Session可以存对象;
Ⅱ 一个面试问题,为什么用redis做缓存
redis不是数据库,只是一种缓存软件,为了缓解服务器频繁读数据库带来的内存资源消耗,redis将需要和数据库交互的信息暂存,当下次同样的http请求,就能直接读取redis里面的内容,而不用读数据库。
这样减少了数据库压力又能提高服务器响应时间。
Ⅲ ORACLE数据库面试题
1.
update t
set logdate=to_date('2003-01-01','yyyy-mm-dd')
where logdate=to_date('2001-02-11','yyyy-mm-dd');
2.
select *
from t
where name in (select name from t group by name having coung(*)>1)
order by name;--没说清楚,到底是升序还是降序
3.
select ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select t.*,row_number() over(partition by name order by name) rn
from t
)
where rn = 1;
4.
update t
set (address,phone)=
(select address,phone from e where e.name=t.name);
5.
select *
from t
where rownum <=5
minus
select *
from t
where rownum <=2;
也没什么特别的地方,有些题目用oracle特有的函数去做会比较简单,像在第三题中用到的oracle的分析函数,以及在第一题中用到的oracle的to_char()函数。
这几个题目主要是看你能不能使用oracle的函数去处理
Ⅳ php面试题 memcache和redis的区别
Redis与Memcached的区别
传统Mysql+ Memcached架构遇到的问题
实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题:
1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。
2.Memcached与MySQL数据库数据一致性问题。
3.Memcached数据命中率低或down机,大量访问直接穿透到DB,MySQL无法支撑。
4.跨机房cache同步问题。
众多NoSQL百花齐放,如何选择
最近几年,业界不断涌现出很多各种各样的NoSQL产品,那么如何才能正确地使用好这些产品,最大化地发挥其长处,是我们需要深入研究和思考的
问题,实际归根结底最重要的是了解这些产品的定位,并且了解到每款产品的tradeoffs,在实际应用中做到扬长避短,总体上这些NoSQL主要用于解
决以下几种问题
1.少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。
2.海量数据存储,分布式系统支持,数据一致性保证,方便的集群节点添加/删除。
3.这方面最具代表性的是dynamo和bigtable 2篇论文所阐述的思路。前者是一个完全无中心的设计,节点之间通过gossip方式传递集群信息,数据保证最终一致性,后者是一个中心化的方案设计,通过类似一个分布式锁服务来保证强一致性,数据写入先写内存和redo log,然后定期compat归并到磁盘上,将随机写优化为顺序写,提高写入性能。
4.Schema free,auto-sharding等。比如目前常见的一些文档数据库都是支持schema-free的,直接存储json格式数据,并且支持auto-sharding等功能,比如mongodb。
面对这些不同类型的NoSQL产品,我们需要根据我们的业务场景选择最合适的产品。
Redis适用场景,如何正确的使用
前面已经分析过,Redis最适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-
backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就会有疑问,似乎Redis更像一个加强版的Memcached,那么何时使用
Memcached,何时使用Redis呢?
如果简单地比较Redis与Memcached的区别,大多数都会得到以下观点:
1 Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
2 Redis支持数据的备份,即master-slave模式的数据备份。
3 Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
抛开这些,可以深入到Redis内部构造去观察更加本质的区别,理解Redis的设计。
在
Redis中,并不是所有的数据都一直存储在内存中的。这是和Memcached相比一个最大的区别。Redis只会缓存所有的
key的信息,如果Redis发现内存的使用量超过了某一个阀值,将触发swap的操作,Redis根据“swappability =
age*log(size_in_memory)”计
算出哪些key对应的value需要swap到磁盘。然后再将这些key对应的value持久化到磁盘中,同时在内存中清除。这种特性使得Redis可以
保持超过其机器本身内存大小的数据。当然,机器本身的内存必须要能够保持所有的key,毕竟这些数据是不会进行swap操作的。同时由于Redis将内存
中的数据swap到磁盘中的时候,提供服务的主线程和进行swap操作的子线程会共享这部分内存,所以如果更新需要swap的数据,Redis将阻塞这个
操作,直到子线程完成swap操作后才可以进行修改。
使用Redis特有内存模型前后的情况对比:
VM off: 300k keys, 4096 bytes values: 1.3G used
VM on: 300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on: 1 million keys, 256 bytes values: 160.09M used
VM on: 1 million keys, values as large as you want, still: 160.09M used
当
从Redis中读取数据的时候,如果读取的key对应的value不在内存中,那么Redis就需要从swap文件中加载相应数据,然后再返回给请求方。
这里就存在一个I/O线程池的问题。在默认的情况下,Redis会出现阻塞,即完成所有的swap文件加载后才会相应。这种策略在客户端的数量较小,进行
批量操作的时候比较合适。但是如果将Redis应用在一个大型的网站应用程序中,这显然是无法满足大并发的情况的。所以Redis运行我们设置I/O线程
池的大小,对需要从swap文件中加载相应数据的读取请求进行并发操作,减少阻塞的时间。
如果希望在海量数据的环境中使用好Redis,我相信理解Redis的内存设计和阻塞的情况是不可缺少的。
补充的知识点:
memcached和redis的比较
1 网络IO模型
Memcached是多线程,非阻塞IO复用的网络模型,分为监听主线程和worker子线程,监听线程监听网络连接,接受请求后,将连接描述
字pipe 传递给worker线程,进行读写IO, 网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache
coherency和锁的问题,比如,Memcached最常用的stats
命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。
(Memcached网络IO模型)
Redis使用单线程的IO复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll、kqueue和select,
对于单纯只有IO操作来说,单线程可以将速度优势发挥到最大,但是Redis也提供了一些简单的计算功能,比如排序、聚合等,对于这些操作,单线程模型实
际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。
2.内存管理方面
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内
存池的方式可以省去申请/释放内存的开销,并且能减小内存碎片产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可
能会被剔除,原因可以参考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/
Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis
跟据存储命令参数,会把带过期时间的数据单独存放在一起,并把它们称为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔
除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis更适合作为存储而不是cache。
3.数据一致性问题
Memcached提供了cas命令,可以保证多个并发访问操作同一份数据的一致性问题。 Redis没有提供cas 命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断。
4.存储方式及其它方面
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能
Redis除key/value之外,还支持list,set,sorted set,hash等众多数据结构,提供了KEYS
进行枚举操作,但不能在线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其mp文件,枚举出所有数据,Redis还同时提供了持久化和复制等功能。
5.关于不同语言的客户端支持
在不同语言的客户端方面,Memcached和Redis都有丰富的第三方客户端可供选择,不过因为Memcached发展的时间更久一些,目
前看在客户端支持方面,Memcached的很多客户端更加成熟稳定,而Redis由于其协议本身就比Memcached复杂,加上作者不断增加新的功能
等,对应第三方客户端跟进速度可能会赶不上,有时可能需要自己在第三方客户端基础上做些修改才能更好的使用。
根据以上比较不难看出,当我们不希望数据被踢出,或者需要除key/value之外的更多数据类型时,或者需要落地功能时,使用Redis比使用Memcached更合适。
关于Redis的一些周边功能
Redis除了作为存储之外还提供了一些其它方面的功能,比如聚合计算、pubsub、scripting等,对于此类功能需要了解其实现原
理,清楚地了解到它的局限性后,才能正确的使用,比如pubsub功能,这个实际是没有任何持久化支持的,消费方连接闪断或重连之间过来的消息是会全部丢
失的,又比如聚合计算和scripting等功能受Redis单线程模型所限,是不可能达到很高的吞吐量的,需要谨慎使用。
总的来说Redis作者是一位非常勤奋的开发者,可以经常看到作者在尝试着各种不同的新鲜想法和思路,针对这些方面的功能就要求我们需要深入了解后再使用。
总结:
1.Redis使用最佳方式是全部数据in-memory。
2.Redis更多场景是作为Memcached的替代者来使用。
3.当需要除key/value之外的更多数据类型支持时,使用Redis更合适。
4.当存储的数据不能被剔除时,使用Redis更合适。
谈谈Memcached与Redis(一)
1. Memcached简介
Memcached是以LiveJurnal旗下Danga Interactive公司的Bard
Fitzpatric为首开发的高性能分布式内存缓存服务器。其本质上就是一个内存key-value数据库,但是不支持数据的持久化,服务器关闭之后数
据全部丢失。Memcached使用C语言开发,在大多数像Linux、BSD和Solaris等POSIX系统上,只要安装了libevent即可使
用。在Windows下,它也有一个可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached
的客户端软件实现非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang,
Lua等。当前Memcached使用广泛,除了LiveJournal以外还有Wikipedia、Flickr、Twitter、Youtube和
WordPress等。
在Window系统下,Memcached的安装非常方便,只需从以上给出的地址下载可执行软件然后运行memcached.exe –d
install即可完成安装。在Linux等系统下,我们首先需要安装libevent,然后从获取源码,make && make
install即可。默认情况下,Memcached的服务器启动程序会安装到/usr/local/bin目录下。在启动Memcached时,我们可
以为其配置不同的启动参数。
1.1 Memcache配置
Memcached服务器在启动时需要对关键的参数进行配置,下面我们就看一看Memcached在启动时需要设定哪些关键参数以及这些参数的作用。
1)-p <num> Memcached的TCP监听端口,缺省配置为11211;
2)-U <num> Memcached的UDP监听端口,缺省配置为11211,为0时表示关闭UDP监听;
3)-s <file> Memcached监听的UNIX套接字路径;
4)-a <mask> 访问UNIX套接字的八进制掩码,缺省配置为0700;
5)-l <addr> 监听的服务器IP地址,默认为所有网卡;
6)-d 为Memcached服务器启动守护进程;
7)-r 最大core文件大小;
8)-u <username> 运行Memcached的用户,如果当前为root的话需要使用此参数指定用户;
9)-m <num> 分配给Memcached使用的内存数量,单位是MB;
10)-M 指示Memcached在内存用光的时候返回错误而不是使用LRU算法移除数据记录;
11)-c <num> 最大并发连数,缺省配置为1024;
12)-v –vv –vvv 设定服务器端打印的消息的详细程度,其中-v仅打印错误和警告信息,-vv在-v的基础上还会打印客户端的命令和相应,-vvv在-vv的基础上还会打印内存状态转换信息;
13)-f <factor> 用于设置chunk大小的递增因子;
14)-n <bytes> 最小的chunk大小,缺省配置为48个字节;
15)-t <num> Memcached服务器使用的线程数,缺省配置为4个;
16)-L 尝试使用大内存页;
17)-R 每个事件的最大请求数,缺省配置为20个;
18)-C 禁用CAS,CAS模式会带来8个字节的冗余;
2. Redis简介
Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字
符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。Redis使用C语言开发,在大多数像Linux、BSD和Solaris等
POSIX系统上无需任何外部依赖就可以使用。Redis支持的客户端语言也非常丰富,常用的计算机语言如C、C#、C++、Object-C、PHP、
Python、Java、Perl、Lua、Erlang等均有可用的客户端来访问Redis服务器。当前Redis的应用已经非常广泛,国内像新浪、淘
宝,国外像Flickr、Github等均在使用Redis的缓存服务。
Redis的安装非常方便,只需从http://redis.io/download获取源码,然后make && make
install即可。默认情况下,Redis的服务器启动程序和客户端程序会安装到/usr/local/bin目录下。在启动Redis服务器时,我们
需要为其指定一个配置文件,缺省情况下配置文件在Redis的源码目录下,文件名为redis.conf。
Ⅳ 面试题-关于大数据量的分布式处理
面试题-关于大数据量的分布式处理
题目:生产系统每天会产生一个日志文件F,数据量在5000W行的级别。文件F保存了两列数据,一列是来源渠道,一列是来源渠道上的用户标识。文件F用来记录当日各渠道上的所有访问用户,每访问一次,记录一条。
请问如何快速计算出各渠道上新增的用户?
问题分析:首先本次面试的是有关于分布式数据处理以及数据分析的职位,所以相关的面试题目可能会偏向于使用分布式的思想去解决。但无奈本人当时反应太慢,实在没向分布式处理方向思考。
方案一:
本题最直观的一个处理方法就是,直接拿着当日新增的5000W条访问记录一条一条的去匹配历史访问用户。若存在历史访问记录,则忽略;若不存在访问记录,则保存为新增记录。很明显,假若历史访问用户有2亿条记录,则需要和2亿条数据比较5000W次。比较次数可想而知。
由于本人一直在做基于数据库的数据处理工作,很容易就想到将历史数据保存在数据库的一张表中,并对来源渠道和用户标识这两个字段建立索引,然后遍历日志文件F(5000W次)。根据日志文件F中的每一行去匹配数据库中的历史访问记录。由于历史数据表有索引,单次查询的速度也非常快。但是需要5000W次的数据库查询,很明显效率低下。
方案二:
既然多次单一查询无法满足要求,于是可以先通过一种数据导入技术将当日新增数据导入到数据库的另一张表中,并和历史数据做左外关联。若能关联成功,则表示此用户已存在;若关联失败,则表示此用户不存在。
此方案暂且不说5000W条记录的大表与2亿条记录的大表关联效率有多高以及使用到的数据库缓冲区的资源有多少,单就5000W条访问记录导入数据库表,都是一个不小的时间花费。
方案三:
很明显,面试时方案二的回答并未达到面试官的预期,最初被遗憾的PASS掉。一家很有潜力,自己很看好的公司,并计划做为自己未来发展方向的职位,就这样丢下我,扬长而去了。
这几天又看了下分布式相关的介绍,突然想到这道题。一下子醒悟过来,其实还是因为对题目要考察的点分析得不够透彻。当时以为只是仅仅考数据处理效率的一个题目,其实考的是一种将复杂问题拆分为简单问题的拆分思想。了解到这一层,一种新的方式立马在脑海中浮现出来。具体如下:
假如现在有N(N>=2)个存储块,并存在一个函数f(来源渠道,用户标识),对于给定的一组(来源渠道,用户标识),总能将其分发到一个固定的存储块内。那么可以使用此函数将5000W行访问记录尽量均匀的分发至N个存储块上,并同时使用此函数将历史访问记录也分发至这些存储块上。由于相同的一组记录,肯定会被分配至同一个存储块,所以比较时,只需要分别比较各个存储块上当日新增记录与历史访问用户,然后将N个存储块上比较的结果汇总,即可得到最终结果。
假设历史访问用户数据已通过函数f(来源渠道,用户标识)被分发至了N个历史文件H1、H2、…、HN。则详细处理步骤如下:
1、将F中的内容使用函数f(来源渠道,用户标识),分发至文件F1、F2、…、FN内。(可开M(M>=2)个并行,且若N-M越大,同时向同一文件写入数据的概率越小)
2、将文件F1、F2、…、FN内的访问记录去重。(可开N个并行分别处理对应的N个文件)。
3、将文件Fn(1=<n<=N)去重后的结果与对应的历史文件Hn比较得出新增用户结果Rn。(可开N个并行分别处理对应的N个文件且当N足够大时,实际要处理数据的量级就会相当小)。
4、合并第3步得到的结果R1、R2、…、RN即可得到当日新增用户。(可并行)
5、为使历史数据文件H1、H2、…、HN中的数据最全,将结果R1、R2、…、RN分别写入对应的历史文件中。(可并行)
本方案主要有以下优点:
1、数据的分发、处理、合并都可并行处理,明显提高了处理效率。
2、由于每个存储块上的新增数据,只需要与它对应存储块上的历史数据比较即可,大大减少了比较次数。(对于当日每一条记录来说,都只需要与大约历史的N分之一条数据去比较)
3、基本不需要考虑历史全量数据的保存及获取问题。
本方案缺点:
1、处理方案明显变的复杂许多,不仅需要处理数据的分发,处理,还需要一个并行的快速收集方法。
2、可能需要多台服务器并行处理。
本方案难点:
1、一个稳定(对于相同的一组来源渠道和用户标识,必定会被分发至同一存储块)、快速(根据一条来源渠道和用户标识数据,可以快速的计算出它将要被分发至的存储块)、均匀(当日新增数据及历史数据都能尽量均匀的被分发至N个存储块,最理想的情况是每个存储块上分发到的数据都是总数据的N分之一)的分发函数至关重要。
2、如何分发、并行处理及汇总数据。
Ⅵ 面试题:oracle数据库优化
oracle数据库优化的话主要有以下几个方面(我接触过的,可能不全面):
1 查询语句的优化,这个主要是根据语句和数据库索引的情况,结合查询计划的分析结果,对性能较低的查询语句进行重写,在执行查询前执行表分析语句也可以算这里;
2 数据结构优化,这个包括根据实际的应用中业务逻辑,对数据库的结构进行重新设计,或者创建相关索引里提高查询效率;
3 数据库设置优化,这方面主要是调整数据库和数据结构的相关参数提高应用访问系统的效率;
4 存储结构优化,在数据量较大的情况下,可以考虑通过数据库的存储结构进行优化,比如对数据进行partition,将数据存储在磁盘阵列服务器上等。
我的经验有限,以上是部分建议
Ⅶ 求:存储过程面试题!
其实存储过程的基本写法我相信你都知道了。
面试这种语言不要紧张,估计多数是要考你对sql效率概念的理解。
普通的sql语句谁都会写的,但是这样的语句往往会造成程序的低效,在压力比较大的服务器上,很有可能造成系统的瘫痪。
注意几点:
1、写语句要用到索引
2、not exists 替换 not in
3、exists 替换 in
4、尽量不要用3个表以上的连接,宁可单个单个取
5、注意书写规则,要写的明白写,错误信息返回那个地方要注意
6、写游标的话,要注意有退出的地方和关闭游标。
7、变量之间要注意转换,隐式的转换往往会耗掉更多的时间。
这些是最基本的了,你需要查阅相关资料进行了解下。
Ⅷ 数据库存储过程有哪些,面试题
/*
系统存储过程很多,有些常用,有些不常用
常用:
sp_attach_db附加数据库到一个服务器中
sp_columns返回在当前环境中列的信息
sp_databases列出当前系统中的数据库
sp_configure显示或修改当前服务器的全局配置
sp_depends显示数据库对象的依赖信息
sp_executesql执行动态的T-SQL语句
sp_help报告有关数据库对象的信息
sp_helpdb返回指定数据库或全部数据库的信息
sp_helptext显示规则、默认值、存储过程、触发器、视图等的未加密的文本定义信息
sp_indexes返回指定远程表的索引信息
sp_lock返回有关锁的信息
sp_password增加或者修改指定login的口令
sp_rename更改用户创建的数据库对象名称
sp_renamedb更改数据库名称
sp_spaceused显示数据库的空间使用情况
sp_tables返回在当前环境中可以被查询的对象的列表
sp_who提供当前用户和进程的信息
不常用:
sp_addlinkedserver创建一个允许执行分布式查询的链接服务器
sp_addlinkedsrvlogin在本地服务器和远程服务器之间创建login帐户的映射关系
sp_addlogin创建一个新的login帐户
sp_add_agent_parameter在代理文件中增加一个参数
sp_add_agent_profile为复制代理增加一个代理文件
sp_add_alert创建一个警报
sp_add_category在服务器上,增加一种作业、警报或者操作员的特定分类
sp_add_data_file_recover_suspect_db当数据库复原不能完成时,向文件组增加一个数据文件
sp_add_file_recover_suspect_db对于复原有问题的数据库增加一个文件
sp_add_job增加一个sqlserveragent可以执行的作业
sp_add_jobschele为作业创建调度
sp_add_jobserver把指定的作业增加到指定服务器上
sp_add_jobstep在作业中增加一步或一个操作
sp_add_log_file_recover_suspect_db当数据库复原不能完成时,向文件组增加一个日志文件
sp_add_notification为警报创建一个通知
sp_add_operator为警报或者作业创建一个操作员
sp_add_targetservergroup增加指定的服务器组
sp_add_targetsvrgrp_member在指定的目标服务器组增加一个目标服务器
sp_addalias在数据库中为login帐户增加一个别名
sp_addapprole在数据库中增加一个特殊的应用程序角色
sp_addarticle创建文章,并把该文章添加到出版物中
sp_adddistpublisher创建一个使用本地分布服务器的出版服务器
sp_adddistributiondb在分布服务器上创建一个新的distribution数据库
sp_adddistributor增加一个分布服务器
sp_addextendedproc在系统中增加一个扩展存储过程
sp_addgroup在当前数据库中增加一个组
sp_addmergearticle为一个已有的合并出版物创建一个文章
sp_addmergefilter为了连接另外一个表,创建一个合并过滤器
sp_addmergepublication创建一个新的合并出版物
sp_addmergepullsubscription增加一个拉回类型的订阅物
sp_addmergepullsubscription_agent在订阅服务器上,为合并拉回订阅物创建一个代理
sp_addmergesubscription创建一个推出或者拉回类型的订阅物
sp_addmessage在系统中增加一个新的错误消息
sp_addpublicaton创建一个快照复制或者事务复制出版物
sp_addpublicaton_snapshot创建一个快照代理
sp_addpullsusscription在当前订阅服务器的数据库中增加一个拉回或者匿名订阅物
sp_addpullsusscription_agent在订阅服务器的数据库中增加一个新的代理
sp_addremotelogin在本地服务器上增加一个远程login帐户,允许执行远程存储过程调用
sp_addrole在当前数据库中增加一个角色
sp_addrolemember为当前数据库中的一个角色增加一个安全性帐户
sp_addserver添加一个远程或者本地服务器
sp_addsrvrolemember为固定的服务器角色增加一个成员
sp_addsubscriber增加一个新的订阅服务器
sp_addsubscriber_schele为分布代理和合并代理增加一个调度
sp_addsubscription订阅文章并且设置订阅服务器的状态
sp_addsynctrigers在订阅服务器上创建一个立即修改触发器
sp_addtabletocontents在合并跟踪表中插入一个参考
sp_addtype创建一个用户定义的数据类型
sp_admpdevice增加一个备份设备
sp_adser在当前数据库中为一个新用户增加一个安全性帐户
sp_altermessage修改错误信息的状态
sp_addly_job_to_targets把作业应用到一个或者多个目标服务器
sp_approlepassword在当前数据库中改变应用程序角色的口令
sp_aarticle_validation为指定的文章初始化确认请求
sp_aarticlecolumn指定在文章中使用的列
sp_aarticlefilter创建一个用于水平过滤数据的过滤器
sp_articleview当表被过滤时,为文章创建一个同步化对象
sp_attach_single_file_db在当前服务器中,附加一个只有一个数据文件的数据库
sp_aautostats对于一个指定的索引或统计,自动显示updatestatistics的状态
sp_bindefault把默认值绑定到列或用户定义的数据类型上
sp_bindrule把规则绑定到列或用户定义的数据类型上
sp_bindsession绑定或解除绑定与实例中的其它事务的连接
sp_browsereplcmds在分布数据库中返回一种可读格式的结果集
sp_catalogs返回指定连接服务器中的系统目录列表,在本地服务器中等价于数据库列表
sp_certify_removable确认在可移动介质上用于分布的数据库是否正确配置
sp_change_agent_parameter修改复制代理配置使用的参数
sp_change_agent_profile修改复制代理配置使用的配置参数
sp_change_users_login修改login与当前数据库中用户之间的关系
sp_changearticle改变文章的属性
sp_changedbowner改变当前数据库的所有者
sp_changedistpublisher改变分布出版服务器的属性
sp_changedistributor_password改变分布服务器的口令
sp_changedistributor_property改变分布服务器的属性
sp_changedistribtutiondb改变分布数据库的属性
sp_changegroup改变安全性帐户所属的角色
sp_changemergearticle改变合并文章的属性
sp_changemergefilter改变一些合并过滤器的属性
sp_changemergepublication改变合并出版物的属性
sp_changemergepullsubscription改变合并拉回出版物的属性
sp_changemergesubscription改变合并的推出或者拉回出版物的属性
sp_changeobjectowner改变对象的所有者
sp_changepublication改变出版物的属性
sp_changesubscriber改变用于订阅服务器的选项
sp_changesubscriber_schele改变用于分布式代理和事务代理的订阅服务器的调度
sp_changesubstatus改变订阅服务器的状态
sp_column_privileges返回列的权限信息
sp_column_privileges_ex返回在链接服务器上指定表的列的权限信息
sp_columns_ex返回在链接服务器上列的信息
sp_create_removable创建一个可移动介质数据库
sp_createstats创建单列的统计信息
sp_cursor用于请求定位更新
sp_cursor_list报告当前打开的服务器游标属性
sp_cursorclose关闭和释放游标
sp_cursorfetch从游标中取出数据行
sp_cursoropen定义与游标和游标选项相关联的SQL语句,然后填充游标
sp_cursoroption用于设置各种游标选项
sp_cycle_errorlog关闭错误日志文件重新开始错误记录
sp_datatype_info返回当前环境支持的数据类型信息
sp_dbfixedrolepermission显示每一个固定数据库角色的许可
sp_dboption显示或修改数据库选项
sp_dbremove删除数据库和与该数据库相关的所有文件
sp_defaultdb设置登录帐户的默认数据库
sp_defaultlanguage设置登录帐户的默认语言
sp_delete_alert删除警报
sp_delete_backuphistory删除备份和恢复的历史信息
sp_delete_category删除指定类型的作业、警报和操作员
sp_delete_job删除一个作业
sp_delete_jobschele删除作业的调度
sp_delete_jobserver删除指定的目标服务器
sp_delete_jobstep从作业中删除指定的作业步骤
sp_delete_notfication删除发送给某个操作员的所有通知
sp_delete_operator删除操作员
sp_delete_targetserver从可以使用的目标服务器列表中删除指定的服务器
sp_delete_targetservergroup删除指定的目标服务器组
sp_delete_targetsvrgrp_member从目标服务器组中删除一个目标服务器
sp_deletemergeconflictrow删除冲突表中的记录行
sp_denylogin防止window用户或群组连接到sqlserver
sp_describe_cursor报告服务器游标的属性
sp_describe_cursor_columns报告在服务器游标的结果集中列的属性
sp_describe_cursor_tables报告服务器游标参考的基表信息
sp_detach_db分享服务器中的数据库
sp_drop_agentparameger删除配置文件中的一个或者多个参数
sp_drop_profile删除配置文件
sp_dropalias删除一个帐户的别名
sp_dropapprole删除当前数据库中的应用程序角色
sp_droparticle从出版物中删除一篇文章
sp_dropdevice删除数据库或者备份设备
sp_dropdistpublisher删除出版服务器
sp_dropdistributiondb删除分布数据库
sp_dropdistributor删除分布服务器
sp_dropdropextendedproc删除一个扩展存储过程
sp_dropgroup从当前数据库中删除角色
sp_droplinkedsrvlogin删除一个本地服务器和连接服务器的映射帐户
sp_droplogin删除一个登录帐户
sp_dropmergearticle从合并出版物中删除一篇文章
sp_dropmergefilter删除一个合并过滤器
sp_dropmergepublication删除一个合并出版物和与其相关的快照复制
sp_dropmergepullsubscription删除一个合并拉回订购物
sp_dropmergesubscription删除一个订阅物
sp_dropmessage删除一个消息
sp_droppublication删除出版物和与其相关的文章
sp_droppullsubscription删除当前订阅服务器数据库中的订阅物
sp_dropremotelogin删除一个远程登录帐户
sp_droprole从当前数据库中删除一个角色
sp_droprolemember从当前数据库中的一个角色中删除一个安全性帐户
sp_dropserver删除一个远程或者连接服务器列表中的服务器
sp_dropsrvrolemember从一个固定的服务器角色中删除一个帐户
sp_dropsubscriber删除一个订阅服务器
sp_dropsubscription删除订阅物
sp_droptype删除一种用户定义的数据类型
sp_dropuser从当前数据库中删除一个用户
sp_dropdropwebtask删除以前版本定义的web任务
sp_dsninfo从一个与当前服务器相关的分布服务器返回ODBC和OLEDB数据源的信息
sp_mpparamcmd返回存储在分布数据库中的参数化命令的详细信息
sp_enumcodepages返回一个字符集和代码页的列表
sp_enumcustomresovers返回所有可用的定制解决方案表表
sp_enumdsn返回所有可用的odbc和oledb数据源列表
sp_enumfullsubscribers返回订阅服务器的列表
sp_expired_subscription_cleanup周期性地检查订阅物的状态是否失效
sp_fkeys返回当前环境的外键信息
sp_foreignkeys返回参照连接服务器的表的主键的外键
sp_fulltext_catalog创建和删除全文本目录
sp_fulltext_column指定某一个列是否参加全文本索引
sp_fulltext_database从当前数据库中初始化全文本索引
sp_fulltext_service改变MicrosoftSearchService属性
sp_fulltext_table标记用于全文本索引的表
sp_generatefilters在外键表上创建一个过滤器
sp_get_distributor确定一个分布服务器是否安装在某个服务器上
sp_getbindtoken创建一个绑定的连接文本
sp_getmergedeletype返回合并删除的类型
sp_grant_publication_access在出版物的访问列表中增加一个用户
sp_grantdbaccess在当前数据库中增加一个安全性帐户
sp_grantlogin允许Windows用户或群组连接到SQLServer
sp_help_agent_default检索作为参数传送的代理类型的默认配置的标识号
sp_help_agent_parameter返回代理配置的所有参数
sp_help_agent_profile返回指定代理的配置
sp_help_alert报告有关警报的信息
sp_help_category提供有关作业、警报、操作员的指定种类的信息
sp_help_downloadlist列出有关作业的信息
sp_help_fulltext_catalogs返回有关全文本索引表的信息
sp_help_fulltext_columns返回标记全文本索引的列信息
sp_help_fulltext_columns_cursor使用游标检索标记为全文本的索引列
sp_help_fulltext_tables返回标记为全文本索引的表
sp_help_fulltext_tables_cursor使用游标返回标记为全文本索引的表
sp_help_job返回有关作业的信息
sp_help_jobhistory提供有关作业的历史信息
sp_help_jobschele返回作业的调度信息
sp_help_jobserver返回给定作业的服务器信息
sp_help_jobstep返回作业的步骤信息
sp_help_operator返回有关操作员的信息
sp_help_publication_access返回可以访问指定出版物的帐户列表
sp_help_targetserver列出全部目标服务器
sp_help_targetservergroup列出指定服务器组中的全部目标服务器
sp_helparticle显示有关文章的信息
sp_helpconstraint返回有关约束的类型、名称等信息
sp_helpdbfixedrole返回固定的服务器角色的列表
sp_helpdevice返回有关数据库文件的信息
sp_helpdistpublisher返回充当分布服务器的出版服务器的属性
sp_helpdistributiondb返回分布数据库的属性信息
sp_helpdistributor列出分布服务器、分布数据库、工作目录等信息
sp_helpextendproc显示当前定义的扩展存储过程信息
sp_helpfile返回与当前数据库相关的物理文件信息
sp_helpfilegroup返回与当前数据库相关的文件组信息
sp_helpgroup返回当前数据库中的角色信息
sp_helpindex返回有关表的索引信息
sp_helplanguage返回有关语言的信息
sp_helplinkedsrvlogin返回链接服务器中映射的帐户信息
sp_helplogins返回有关login和与其相关的数据库用户信息
sp_helpmergearticle返回有关合并文章的信息
sp_helpmergearticleconflicts返回有关冲突的出版物中的文章信息
sp_helpmergeconflictrows返回在指定冲突表中的行
sp_helpmergefilter返回有关合并过滤器的信息
sp_helpmergepublication返回有关合并出版物的信息
sp_helpmergepullsubscription返回有关拉回订阅物的信息
sp_helpmergesubscription返回有关推出订阅物的信息
sp_help_notification报告对于给定操作员的警报信息
sp_helppublication返回有关出版物的信息
sp_helprole返回当前数据库中的角色信息
sp_helprolemember返回当前数据库中角色成员的信息
sp_helprotect返回有关用户许可的信息
sp_helpserver显示特定远程或者复制服务器的信息
sp_helpsort显示系统的排列顺序和字符集的信息
sp_helpsrvrole显示系统中的固定服务器角色列表
sp_helpsrvrolemember显示系统中的固定服务器角色成员的信息
sp_helpsubscrberinfo显示有关订阅服务器的信息
sp_helpsubscription显示有特定出版物等有关的订阅物信息
sp_helpsubscription_properties检索安全性信息
sp_helptrigger显示触发器的类型
sp_helpuser显示当前数据库中的用户、WindowsNT用户和组、角色等信息
sp_indexoption为用户定义的索引设置选项
sp_link_publication设置立即修改订阅服务器的同步化触发器使用的配置和安全性信息
sp_linkedservers返回在本地服务器上定义的链接服务器的列表
sp_makewebtask创建一个执行html文档的任务
sp_manage_jobs_by_login删除或者重新指定属于login的作业
sp_mergemmyupdate制作用于合并复制的修改备份
sp_mergesubscription_cleanup删除元数据
sp_monitor显示系统的统计信息
sp_msx_defect从多个服务器操作中删除当前服务器
sp_msx_enlist增加当前服务器到可用的目标服务器列表中
sp_pkeys返回某个表的主键信息
sp_post_msx_operation插入一些目标服务器可以执行的信息
sp_primarykeys返回主键列的信息
sp_processmail使用扩展存储过程修改邮件信息
sp_procoption设置或者显示过程选项
sp_publication_validation初始化文章校验请求
sp_purge_jobhistory删除作业的历史记录
sp_recompile使存储过程和触发器在下一次运行时重新编译
sp_refreshsubscriptions在拉回出版物中增加订阅物到文章中
sp_refreshview刷新指定视图的元数据
sp_reinitmergepullsubscription标记一个合并拉回订阅
sp_reiniteergesubscription标记一个合并订阅
sp_reinitpullsubscription标记一个事务订阅或者匿名订阅
sp_reinitsubscription重新初始化订阅
sp_remoteoption显示或者修改远程登录帐户的选项
sp_remove_job_from_targets从给定的目标服务器中删除指定的作业
sp_removedbreplication从数据库中删除所有的复制对象
sp_replcounters返回复制的统计信息
sp_repldone修改服务器做的分布事务的统计信息
sp_replflush处理文章的高速缓冲存储区
sp_replication_agent_checkup检查每一个分布数据库
sp_replicationdboption在当前数据库中设置复制数据库的选项
sp_replsetoriginator用于在事务复制中检测循环登录
sp_replshowcmds返回标记复制的事务命令
sp_repltrans返回在出版数据库事务日志中的所有事务的结果集
sp_resetstatus重新设置异常数据库的形态
sp_resync_targetserver重新同步所有的多服务器作业
sp_revoke_publication_access从出版数据库的访问列表中删除login帐户
sp_revokedbaccess从当前数据库中删除安全性帐户
sp_revokelogin删除系统的login帐户
sp_script_synctran_commands生成一个可以用于立即修改订阅物的脚本
*/
Ⅸ 帮忙给弄一些asp.net工程师面试时的笔试题。谢谢
1、简述private,protected,public,internal修饰符的访问权限
1.private私有的,public公共的,protected受保护的
internal内部权限的
private : 私有成员, 在类的内部才可以访问。
protected : 保护成员,该类内部和继承类中可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。
2.请编程遍历页面上所有TextBox控件并给它赋值为stringEmpty
前台的代码:
foreach (Control txtobj in this.Page.Controls)
{
if (txtobj.GetType().Name == "TextBox")
{
// ((TextBox)txtobj).Text = "";//这是第一种方法赋值,第二种在下面
TextBox tb = new TextBox();
tb = (TextBox)this.FindControl(txtobj.ID); nbsp;
tb.Text = string.Empty;
}
后台代码:
foreach(Control ctl in this.Controls)
{
if(ctl is TextBox){
(ctl as TextBox).Text = string.Empty;
}}
}
4.ASP.net的身份验证方法有哪些?分别是什么原因?
1、 Windows 身份验证提供程序
提供有关怎么将 Windows 身份验证与 Microsoft Internet 信息服务 (IIS) 身份验证结合用来确保 ASP.NET 应用程序安全的信息。
2、 Forms 身份验证提供程序
提供有关怎么用您自己的代码创建应用程序特定的登陆窗体并执行身份验证的信息。用 Forms 身份验证的一种简便方法是用 ASP.NET 成员资格和 ASP.NET 登陆控件,它们一起提供了一种只需少量或无需代码就可以收集、验证和管理用户凭据的方法。有关更多信息,请
参见用成员资格管理用户和 ASP.NET 登陆控件概述。
3、 Passport 身份验证提供程序
提供有关由 Microsoft 提供的集中身份验证服务的信息,该服务为成员站点提供单一登陆和核心配置文件服务。
5.在C#中string str=null 与string str=“”请尽量使用文字说明其中的区别
string str=null;不会开辟内存给str,string str="";会开辟一块内存,值为空字符串
6.try{}里有一个return语句,那么紧跟在这个try后的finaliy{}里的code会不会被执行,什么时候被执行。在return前还是后?
finally()代码块 无论什么情况都会被执行,在return之后。
下面是个测试程序public class FinallyTest {
public static void main(String[] args) {
System.out.println(new FinallyTest().test()); }
static int test() {
int x = 1;
try{
x++;
return x;
}finally{
++x;
} }}
肯定执行了你在finally里加一条输出语句你就知道了但结果为什么会是2呢?在try语句中,在执行return语句时,要返回的结果已经准备好了,
就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,
执行完finally之后,在从中取出返回结果,因此,即使finally中对变量a进行了改变,但是不会影响返回结果。
它应该使用栈保存返回值。
7.ASP.NET与ASP相比,主要有哪些进步?
1.网页内容与程序代码分离2.多语言支持3.执行效率更高4.面向对象的特性5.运行在.net平台上
8.请说明在.net中常用的几种页面间传递参数的方法。并说出他们的优缺点。
QueryString此方法的优点是简单、方便,缺点是能传递的数据量少,而且不能传递对象。
Session该 方 法 的 特点是 :
(1)用户数据存储在服务器端;
(2)ASP.NET 中的Session 对象也可以不依赖Cookie 而正常工作;
(3)可以直接存储对象,且无大小限制;
(4)有效期与用户的活动时间有关,具体为用户活动时间+自定义延迟时间。该方法的缺点是:由于Web 应用程序对每个用户都会生成 Session 变量,因此它会随着用户数量的增多而加重服务器的负担。如果数据量比较小,Sessionss 对象是保存只需要在当前对话中保持
的特定数据的极好位置。
cookie该方法的缺点是:并非所有的浏览器都支持Cookie;用户可以禁用和删除它;信息采用明文保存,安全性差。当特定的用户需要特定的数据片,并且需要把数据在某个可变的时段中保持的时候,Cookie 就非常方便,存在于客户端,不占用服务器资源。
static静态变量,可能直接通类名来调用,优点是如果善加利用,则可以有效提高数据传递效率,缺点是如果滥用,则会导致用户或页面间数据紊乱,造成极大的隐患。
9.DataReader与Dataset有什么区别?
dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表
DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接
datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。
10.什么叫做SQL注入,在.net 中如何防止?请举例说明
sql注入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
.net中可以使用带参数的sql语句或者直接调用存储过程可以有效的防止sql注入攻击
还可以对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。