新浪研发中心笔试题
新浪网应聘考试试题.doc

新浪网应聘考试试题新浪网应聘考试试题新浪网招聘分两类,一类是技术研发,一类是客户服务。
我参加的是客户服务类的考试,考试一个半钟头,分五大块:第一部分,给出一些常用网站,要用英文简述这些网站。
我答题时分不 w有多大差别,都是用来搜索信息的嘛。
第二部分,问一些网络方面的常识,比如cookie用来干什么的、怎么估算猫扑网)一天的客户访问量。
第三部分,智力题和数学题,类似于公务员考试的第一部分。
第四部分,问一些关于你个人的问题,比如:你迄今为止做过的自己最得意的事是什么?你的同学平时形容你最多的一句话是什么?用50个字描述你对自己的评价。
你的格言。
等等。
第五部分,实际问题,比如:你以一千五百元的价格卖出一台电脑,后来发现报价错了,应该卖一千七百元,你要怎么才能追回两百元的差价又不失去这个用户?第五部分,实际问题,比如:你以一千五百元的价格卖出一台电脑,后来发现报价错了,应该卖一千七百元,你要怎么才能追回两百元的差价又不失去这个用户?1 其实面对面试考官我们要搞清楚一件事,就是他真正的目的是什么?其实他提出问题的目的是选拔人才,而不是解决提出的那个问题。
也就是说这个问题很可能就没有什么真正的答案,他有可能是需要你的诚实,有可能是需要你的镇定,有可能是需要你的灵活,有可能是需要你的细心,其实只要你在某一方面打动了他,那么你都可能成功。
千万记住,他们要的不是一个答案2 过几天之后再打电话给客户,说那个电脑某重要部件普遍有问题,厂家要招回,特地来告知客户电脑可以退回。
这个过程态度一定要非常好,急人所急的样子。
然后说该厂家又推出了一种该部件的加强版,有多少多少更好的功能,但是要贵两百元钱,我们可以免费派人过来更换。
一般来说,对方肯定会觉得你这个人还不错,卖出去的出了问题还要负责,而且他肯定怕麻烦不会亲自来退机,于是让你过去换,你就那个一样的东西换下来收200元就好了。
最佳的解答了天涯搜的。
技术部的考试题:题目中有个让写文本处理的脚本,我闲麻烦,写查手册~~~已知strcpy函数的原型是:char * strcpy(char * strdest,const char * strsrc);1.不调用库函数,实现strcpy函数。
新浪网技术部笔试题

新浪网技术部笔试题第1篇:新浪网技术部笔试题目一、php基础知识1、strlen()与mb_strlen的作用分别是什么2、下列哪个函数是用正则表达式将字符串分割到数组中()a、splitb、implodec、exploded、join3、写出下列程序的输出结果$x=87;$y=($x%7)*16;$z=$x>$y?1:0;echo$z;>4、写出smarty模板的特点5、写出下列几个预定义全局变量的作用$_server['document_root']当前运行脚本所在的文档根目录。
在服务器配置文件中定义。
$_server['http_host']当前请求的host:头部的内容$_server['remote_addr']正在浏览当前页面用户的ip地址$_server['http_referer']链接到当前页面的前一页面的url地址$_server['server_name']当前运行脚本所在服务器主机的名称$_files包含有所有上传的文件信息。
$_files['userfile']['name']客户端机器文件的原名称。
$_files['userfile']['type']文件的mime类型,如果浏览器提供此信息的话。
一个例子是“image/gif”。
不过此mime类型在php端并不检查,因此不要想当然认为未完,继续阅读 >第2篇:新浪网技术部笔试题一、php基础知识1、strlen()与mb_strlen的作用分别是什么2、下列哪个函数是用正则表达式将字符串分割到数组中()a、splitb、implodec、exploded、join3、写出下列程序的输出结果$x=87;$y=($x%7)*16;$z=$x>$y?1:0;echo$z;>4、写出smarty模板的特点5、写出下列几个预定义全局变量的作用$_server['document_root']当前运行脚本所在的文档根目录。
新浪信息系统java开发工程师测试题

请先阅读欢迎并感谢您参加此次面试,有几点事项请您注意一下:1.开始答题前请在按照下面表格要求填写一下您的个人信息。
2.本试题包括Java 开发、Web 开发、数据库开发和非技术题目4个部分(共7页),满分100 ( 非技术题目不计分 ),请在120分钟内完成。
3.答题完毕后请把您的简历放到试题后一同交给我们的同事。
4.答题为闭卷考试,如有任何疑问,请答题前提出,答题开始后请勿咨询任何人员。
5.试题请勿带出新浪公司。
6.答题完毕后,如果合适,我们会在3天内通知您进一步面谈,限于人力,不合适就不再另行通知,非常感谢您的理解。
祝您取得好成绩。
一、java 基础1.请简要叙述下 public、protected、friendly、private 的访问限制。
(5分)public在任何地方都可以访问。
Protected在同包下和不同包子类可以访问。
Friendly在同包下可以访问,private在同一个类中可以访问。
2.请参考如下代码,回答后列问题.1)上面代码能否通过编译并运行,如果能请写出运行结果,如果不能请改正并写出运行结果。
(5分)0.9dCreatd1ordercreated1order2)如将上面代码第20 行处改为order =OrderCreator.createOrder("agent"); 请写出运行结果。
(5分) Null;Creatd0order3)请用 uml 画出上面代码的类结构图。
(10分)4)按设计模式的观点,这个应该是属于什么模式,试举几个其他模式的名字。
(5分)单利恶汉二、web开发1.请简述jsp中forword和sendRedirect的区别。
(5分) sendRedirect 重定向将地址栏不改变forword转发转发是服务器行为,重定向是客户端行为;二转发是一次请求重定向,其实是两次request请求2.请写出如下代码的执行结果:(5分)3.请简要画出mvc模式的流程图。
新浪微博招聘参考笔试题

新浪微博招聘参考笔试题不定项选择:1.不能用来修饰interface的有()A.private B.public C.protected D.static2.System.out.println(-1>>>1) 输出什么.A.-1B.1C. 2147483647D. -21474836473.下列有关Servlet的生命周期,说法不正确的是()。
A、在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例。
B、在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法。
C、在销毁阶段,执行destroy()方法后系统立刻进行垃圾回收。
D、destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法。
4.关于异常处理机制的叙述哪些正确()A. catch部分捕捉到异常情况时,才会执行finally部分B. 当try区段的程序发生异常时,才会执行catch区段的程序C. 不论程序是否发生错误及捕捉到异常情况,都会执行finally部分D. 以上都是下列程序有错误吗,错在那里1.public class Something {void doSomething() {private String s = "";int i = s.length();}}2.abstract class Something {private abstract String doSomething ();}3.public class Something {public static void main(String[] args) {Something s = new Something();System.out.println("s.doSomething() returns " + doSomething()); }public String doSomething() {return"Do something ...";}}4.public class Something {public static void main(String[] args) {Other other= new Other();new Something().addOne(other);}public void addOne(final Other other){other.i++;}}class Other{public int i;}5.interface A {int x = 0;}class B {int x = 1;}class C extends B implements A {public void printX() {System.out.println(x);}public static void main(String[] args) {new C().printX();}}编程题:jsp有哪些内置对象?作用分别是什么request 用户端请求,此请求会包含来自GET/POST请求的参数response 网页传回用户端的回应pageContext 网页的属性是在这里管理session 与请求有关的会话期application servlet 正在执行的内容out 用来传送回应的输出config servlet的构架部件page JSP网页本身exception 针对错误网页,捕捉异常1.2.由于没有设置主键,表weibo有许多重复记录,写一个sql,把所有重复的记录删除掉,留下唯一的记录。
新浪网技术部笔试题(PHP)02答案

1、例举常用的浏览器类型以及他们使用的内核还有对应的调试工具?(7分)一般来讲分ie浏览器和非ie浏览器.Ie浏览器家族版本较多,有ie6-ie9 以及国内比较常见的基于ie浏览器的世界之窗,傲游等,基本上使用的内核是Trident,一般简称为ie内核.IE常用的调试工具有IEWebDeveloper (IE9默认有安装)非ie浏览器主要有:Firefox(内核Gecko) ,著名的调试工具是firebugchrome(内核webkit) 自带的有google 开发的内置调试工具。
2、用javascript编写通过class属性获得html元素的方法(7分)<script type="text/javascript">/*通过类名来获取一组元素的方法有三个参数,第一个参数必须要有表示类名,后两个参数可选第二个ele是限定的范围,如果没有ele这个参数,则表示在整个文档的范围内返回所有的类名是className的元素第三个参数是限定的标签名,表示取到此类名的元素的标签名必须是此参数传进来的名*/function getElementsByClassName(className,ele,tagName){//通过类名获取元素,后两可参数是可选的var a=[];//用来存筛选用来的元素var eles=null;if(ele) {//如果指定了第二个参数,就是限定了获取元素的范围if(tagName)//如果指定了第三个参数就是限定了标记名eles=ele.getElementsByTagName(tagName)elseeles=ele.getElementsByTagName('*')}else //如果没有传后两个参数eles=document.getElementsByTagName('*');//则在所有的元素中做遍历for(var i=0;i<eles.length;i++){if(eles[i].className.search(new RegExp("\\b" + className + "\\b"))!=-1){//用正则表达式来判断是不是包含此类名a.push(eles.item(i)) //如果满足条件,则存到数组里}}return a}var ele=document.getElementById('p1');var a=getElementsByClassName('a',ele,'div');//获取id为p1的这个元素下类名为a并且标记名为div的元素应该返回两个alert(a);</script>3、用php编写一个方法通过url地址匹配出页面所有a标签的链接地址?(7分)//先获取URL字符串$contents=file_get_contents($url);//函数function getAllURL($contents){//再匹配网页字符串中的a标签preg_match_all('/<a\s+href=["|\']?([^>"\' ]+)["|\']?\s*[^>]*>([^>]+)<\/a>/i',$contents,$arr);//返回return array('name'=>$arr[2],'url'=>$arr[1]);}4、用php编写一个页面分页方法?(7分)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>php make page list</title><style type="text/CSS"><!--.page a:link {color: #0000FF;text-decoration: none;}.page a:visited {text-decoration: none;color: #0000FF;}.page a:hover {text-decoration: none;color: #0000FF;}.page a:active {text-decoration: none;color: #0000FF;}.page{color:#0000FF;}--></style></head><body><table width="530" height="103" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><th width="30" height="38" bgcolor="#E3E3E3" scope="col">ID</th> <th width="500" bgcolor="#E3E3E3" scope="col">文章标题</th></tr><?php/** Created on 2010-4-17** Order by Kove Wong*/$link=MySQL_connect('localhost','root','root');mysql_select_db('hi');mysql_query('set names gbk');$Page_size=3;$result=mysql_query('select * from admin');$count = mysql_num_rows($result);$page_count = ceil($count/$Page_size);$init=1;$page_len=7;$max_p=$page_count;$pages=$page_count;//判断当前页码if(empty($_GET['page'])||$_GET['page']<0){$page=1;}else {$page=$_GET['page'];}$offset=$Page_size*($page-1);$sql="select * from admin limit $offset,$Page_size";$result=mysql_query($sql,$link);while ($row=mysql_fetch_array($result)) {?><tr><td bgcolor="#E0EEE0" height="25px"><div align="center"><?php echo $row['id']?></div></td><td bgcolor="#E0EEE"><div align="center"><?php echo $row['name']?></div></td></tr><?php}$page_len = ($page_len%2)?$page_len:$pagelen+1;//页码个数$pageoffset = ($page_len-1)/2;//页码个数左右偏移量$key='<div class="page">';$key.="<span>$page/$pages</span> "; //第几页,共几页if($page!=1){$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=1\">第一页</a> "; //第一页$key.="<a href=\"".$_SERVER['PHP_SELF']."?page=".($page-1)."\">上一页</a>"; //上一页}else {$key.="第一页";//第一页$key.="上一页"; //上一页}if($pages>$page_len){//如果当前页小于等于左偏移if($page<=$pageoffset){$init=1;$max_p = $page_len;}else{//如果当前页大于左偏移//如果当前页码右偏移超出最大分页数if($page+$pageoffset>=$pages+1){$init = $pages-$page_len+1;}else{//左右偏移都存在时的计算$init = $page-$pageoffset;$max_p = $page+$pageoffset;}}}for($i=$init;$i<=$max_p;$i++){if($i==$page){$key.=' <span>'.$i.'</span>';} else {$key.=" <a href=\"".$_SERVER['PHP_SELF']."?page=".$i."\">".$i."</a>";}}if($page!=$pages){$key.=" <a href=\"".$_SERVER['PHP_SELF']."?page=".($page+1)."\">下一页</a> ";//下一页$key.="<a href=\"".$_SERVER['PHP_SELF']."?page={$pages}\">最后一页</a>"; //最后一页}else {$key.="下一页";//下一页$key.="最后一页"; //最后一页}$key.='</div>';?><tr><td colspan="2" bgcolor="#E0EEE0"><div align="center"><?php echo $key?></div></td></tr></table></body></html>5、mysql中哪些sql语句执行效率很差?如何避免使用这种sql语句?(7分)多表联合查询where条件中没有添加索引。
新浪网技术PHP工程师部笔试题目

新浪网技术PHP工程师部笔试题目1、strlen()与mb_strlen的作用分别是什么2、下列哪个函数是用正则表达式将字符串分割到数组中()A、SplitB、implodeC、explodeD、join3、写出下列程序的输出结果$x=87;$y=($x%7)*16;$z=$x>$y?1:0;echo $z;?>4、写出smarty模板的特点5、写出下列几个预定义全局变量的作用$_SERVER['DOCUMENT_ROOT']当前运行脚本所在的文档根目录。
在服务器配置文件中定义。
$_SERVER['_HOST ']当前请求的 Host: 头部的内容$_SERVER['REMOTE_ADDR']正在浏览当前页面用户的 IP 地址$_SERVER['_REFERER']链接到当前页面的前一页面的 URL 地址$_SERVER['SERVER_NAME']当前运行脚本所在服务器主机的名称$_FILES包含有所有上传的文件信息。
$_FILES['userfile']['name']客户端机器文件的原名称。
$_FILES['userfile']['type']文件的 MIME 类型,如果浏览器提供此信息的话。
一个例子是“image/gif”。
不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size']已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']和该文件上传相关的错误代码。
新浪科技编辑应聘试题

今天碰到一个新浪的老同事,被告之新浪最近组织总编以下的编辑人员进行英语水平测试。
突然想起了新浪的诸多考试:一、打字水平测试;二、搜索水平测试;三、互联网使用水平测试;四、智力测试;五、情商测试……据说平时的测试成绩,最近跟绩效、工资挂钩了。
编辑反应很大。
总的来说,这是新浪不断提高编辑水平的一个办法,同时防止编辑骄傲自满,毕竟在国内第一大网站做事,很自然是很容易骄傲、不谦虚,自以为是。
当然还有求职时候的测试;一般求职考试包括以上测试的大部分内容。
下面是新浪科技对求职人员的测试笔试题:新浪科技编辑应聘试题第一部分专业知识测试一、选择题(共5分每题1分)1、三大门户中最后一个在纳斯达克上市的是:A、新浪B、网易C、搜狐2、中国电信业巨头中尚未在海外上市的是:A、中国电信B、中国移动C、中国网通3、HY代表哪种品牌的内存?A、现代B、金邦C、三星4、中国移动的海外策略伙伴曾经是:A、沃达丰B、日本电信C、NTT DOCOMO5、全球营业额最大IT公司是:A、IBM B、HP C、戴尔二、填空题:(共10分每题2分)1、全球最大硬件公司是(),全球最大的软件公司是(),全球最大的PC公司是()。
2、VIA、ASUS、ACER分别代表台湾的()公司、()公司、()公司。
3、微软产品有哪些:()、()、()、()。
4、列出6家海外(含港台)著名门户网站名字:()、()、()、()、()、()。
5、请说出你所知道的操作系统(至少5种、包括手机):()、()、()、()、()。
三、简答题:(共10分,每题2分)1、请简单解释GPRS、TD—SCDMA、I—Mode。
2、请说出下面几个人的身份:田溯宁、杨元庆、唐骏、杜家滨、汪延、丁磊。
3、3G有哪几个国际标准?中国推出的标准是什么?哪个厂家研发的?4、TCP/IP 、WWW、FTP、SQL、CPU各是什么意思?5、最新的我国互联网用户数目前是多少?宽带用户有多少?四、综述题:(共20分,每题4分)1、请说出你所知道的主要IT类网站(涵盖中英文),并对你经常浏览的简单进行评价。
新浪网技术部笔试题(PHP)03答案

1、__FILE__表示什么意思?(5分)文件的完整路径和文件名。
如果用在包含文件中,则返回包含文件名。
自PHP 4.0.2 起,__FILE__ 总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。
2、如何获取客户端的IP地址?(5分)$_SERVER[‘REMOTE_ADDR’]3、写出使用header函数跳转页面的语句(5分)Header(‘location:index.php’);4、$str是一段html文本,使用正则表达式去除其中的所有js脚本(5分)$pattern = ‘/<script.*>\.+<\/script>/’; /<script[^>]*?>.*?<\/script>/siPreg_replace($pattern,’’,$str);5、写出将一个数组里的空值去掉的语句(5分)$arr = array(‘’,1,2,3,’’,19);第一种方法:$array1 = array(' ',1,'',2,3);print_r(array_filter($array1, "del"));function del($var){return(trim($var));}PS:array_filter() 依次将 input 数组中的每个值传递到 callback 函数。
如果 callback 函数返回TRUE,则 input数组的当前值会被包含在返回的结果数组中。
数组的键名保留不变。
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
第二种方法:$arr=array("",1,2,3,"");$ptn="/\S+/i";print_r(preg_grep($ptn,$arr));6、写出获取当前时间戳的函数,及打印前一天的时间的方法(格式:年-月-日时:分:秒) (5分)Time();Date(“Y-m-d H:i:s”,Strtotime(“-1 day”)); //前一天7、写出php进行编码转换的函数(5分)Iconv(‘utf-8’,’gb2312’,$str);8、$str = “1,3,5,7,9,10,20”,使用什么函数可以把字符串str转化为包含各个数字的数组?(5分)$arr = explode(“,”,$str);9、serialize() /unserialize()函数的作用(5分)serialize()和unserialize()在php手册上的解释是:serialize —产生一个可存储的值的表示,返回值为字符串,此字符串包含了表示value 的字节流,不丢失其类型和结构,可以存储于任何地方。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
新浪网研发中心招聘笔试题
姓名:申请职位:
一、开发能力部分:
通用题
1. 尽可能多的写出各种语言的 hello world! 程序(C、Shell、Perl、Python、Java等等)
C语言部分
1. 判断ABCD四个表达式是否正确, 若正确, 写出经过表达式中 a 的值
int a = 4;
(A)a += (a++); (B) a += (++a) ;(C) (a++) += a;(D) (++a) += (a++);
a = ?
2. 请问运行下面的 test 函数会有什么样的结果
char *allocate (void) {
char p[] = "hello world";
return p;
}
void test (void) {
char *str = NULL;
str = allocate();
printf("%s\n", str);
}
3. 比较 char *p 和 char p[10] 的区别
4. 完成如下所示的宏定义,其作用是将接收到的两个参数的值互换
#define EXCHANGE(x, y) \ 在不利用其他函数的情况下,完成如下所示的函数,其功能是将src所指向的n
个字节的内容,复制到dest所指向的位置
void memcopy(void *dest, void *src, size_t n) {
完成下面的程序,其功能是利用两个线程同时执行 print_a 和print_b 两个函数
void print_a () {
printf("A\n");
}
void print_b () {
printf("B\n");
}
int main (int argc, const char **argv) {
当执行上题中的程序时,"A"和"B"以不定的顺序打印到屏幕上,请对上题的程
序进行改进,要求如下:
1). 两个线程同时执行函数 print_a 和 print_b
2). "A"和"B"能够依次打印到屏幕上,即"A", "B", "A", "B", "A", ....
8. 根据如下的单向链表结构,写出一个函数用于将其参数中指定的链表进行反
转,其返回值为新链表的头
struct link_list {
char *value;
struct link_list *next;
};
struct link_list *reverse(struct link_list *l) {
编写一个程序,判断给定的单向链表是否是回文的,其中,链表的结构如上题
所示,回文定义如下:
对于给定的单向链表,如 'A' -> 'B' -> 'C' -> 'B' -> 'A',其中
'A','B','C'为链表节点所存储的值,
如果链表中的值是关于中心对称的,则称这个链表是回文的
int is_palindrome(struct link_list *l) {
文本分析
按要求使用两种方法取出password中shell出现的次数
第一种方法结果:
4 /bin/bash
1 /bin/sync
1 /sbin/halt
31 /sbin/nologin
1 /sbin/shutdown
第二种方法结果:
/bin/sync 1
/bin/bash 1
/sbin/nologin 30
/sbin/halt 1
/sbin/shutdown 1
{
A[$7]++
}
END{
For (x in a
Print x,a[x]
}
Awk –F :
2. 文件整理
employee文件中记录了工号和姓名
:
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma
bonus文件中记录工号和工资
:
100 $5,000
200 $500
300 $3,000
400 $1,250
要求把两个文件合并并输出如下
处理结果:
400 ashok sharma $1,250
100 jason smith $5,000
200 john doe $500
300 sanjay gupta $3,000
3. 打印本机的交换分区大小
处理结果示例:
Swap:1024M
Free –m | awk –F : '$1~/swap/{print $2}' |awk ' {print }'
4. 打印当前sshd的端口和进程id
处理结果示例:
port pid
sshd: 22 5412
awk ‘$1~/^port/{print $2}’ /etc/ssh/sshd_config
pidof sshd
#!/bin/bash
Ifconfig eth0 |awk –F “: | +”‘/Mask/{ print $4}’
5. 输出本机创建20000个目录所用的时间
处理结果示例:
real
user
sys
6. 在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文
件new中
Find /tmp –name “abc*”–exec hend -1 {}
7. 把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c 的行数
二、系统能力部分
1.说明linux内核与linux发行版的关系,列举一些内核提供的功能和发行版提供的功能来说明其区别。
2.描述linux的一般启动过程,从bootloader到出现login。
?
3. 列举linux常见的本地文件系统和网络文件系统,并说明其适合的应用场景。
4. 列举linux中常用的性能和问题分析工具,并简单举例如何用这些工具来分析实际问题。
5.说明系统调用和库函数的区别。
6.描述tcp协议建立连接和断开连接的过程。
7.请说明poll() select() 和epoll()的区别
8.列举常见的虚拟化技术,并说明其优缺点。
9.请描述LVS的DR方式实现原理。
10.请说明NAS和SAN的区别和共同点。
以及列举出适合的使用场
景。
11.写出你曾使用过的高可用集群的产品。
并描述其特点。
12.请解释这个shell脚本的含义:
:() { :|:& }; :
13.请说出你对apache,nginx,squid和其他你知道的web应用
软件的特点的理解。
14.请说出你对mysql和oracle数据库的特点的理解,并描述其适
用场景。
15.你是怎么看待系统运维工作的?
16.请简要分析LB集群4层实现和7层实现的优缺点。
17. 请说出你使用过的监控软件,并分析他们的特点。