博文
关于一个微软外包SDET的讨论(2010-03-10 23:12:00)
摘要:小弟在IT这个行业混了2年多了。一般本科毕业没有名牌的大学光环。我也是一步一个的走过来的。小第2005年底就来北京了(当时还没有大学毕业),开始一直在一家小公司做ASP.NET程序员。由于小弟的英语还可以,后来就进入的微软的外包的行业。如果大家做过微软的外包,大家应该知道微软很大一部分的工作都是测试工作。当时我也对测试比较好奇,就做了SDET(Software Development Engineer in Test)测试开发工程师。由于一个比较好的机会做了一个小TEAM的lead。但是由于测试工作确实比较枯燥,根本没有编程的那种成就感(这是个人的感觉,你也可能觉得测试会有成就感)。而且作为一个测试开发工程师,写代码,做自动化测试工具的机会也比较少(指在微软的项目)。
由于一些原因,考虑跳槽。面试了一家外包公司,推荐我去微软研究院做SDET。给的工资也还行6.5(必尽我去年毕业的,但是我的能力个人认为还可以无论是英语还是技术)。我现在的犹豫是我如果在选择做SDET,以后要转开发就有些困难,如果一直做开发要转SDET是非常容易的。但是微软研究院的项目据说学习的机会很好,英文环境也很好。如果是去做SDE(Software Development Engineer)我绝对不会犹豫的。而且北票一族也知道挣点钱也不容易。如果我选择一家国内的企业做开发,大家也知道工资可能要相对低一些,而且工作强度也要大一些(当然我这个年龄不是考虑安逸的时候),还有英语的环境呢?现在我的困惑就是SDET这个职位一直做下去,是否会有比较好的发展,对于我个人来说,我还是很喜欢做开发的,我有些困惑了。
希望大家给小弟一些意见和建议。......
MS aR/Dev/Test/RSDE/PM Introduction(2010-03-10 23:11:00)
摘要:面对招聘会上花里胡哨的E文,小白们往往心虚:连职位是啥意思都搞不清白,还应聘呢……现在,微软的面试官详细解释微软招聘技术职位的都是啥意思,有什么样的职责,未来的发展方向。
aR:AssistantResearcher,叫助理研究员,也可以叫研究员助理,主要在R&D的R这一端,读paper,提想法,被否决后再提想法(反复N次),赶paperdeadline。aR的想法得到初步验证之后,还要跟产品部门推销自己的想法。aR的乐趣是能在一个领域能深入研究,发表paper,申请专利,每个专利申请(无论是否批准)能给自己得一块黑色立方体石头。好多人的桌面上堆了不少石头,好像他们没什么苦恼()。aR有时和做的事情和RSDE差不多。
Dev:正式的名称叫SDE(SoftwareDevelopmentEngineer),这个职位和aR相对,是在R&D的D这一端。MS的一个产品发布之后,所有成员会得到一小块铁皮,上面写着产品的名字和发布日期,资深的dev会收集到不少,他们会认真地把这些小铁皮整齐地贴起来,摆在办公桌最高的位置。Dev的乐不少,这里就不列举了。但是也有不少苦–比如产品的周期有时非常冗长,过程定义得非常完备,比如要维护老版本,比如要用比较成熟的技术,而不是最时髦的东西来开发产品。另外dev要负责一个或几个模块,这些模块不一定和最终用户打交道,未必是责整个产品的核心模块。做一个好的Dev要生活在代码中(liveinthecode),对代码,平台的各种细节要非常熟悉,掌握非常底层的技术,有些人以此为乐,有些人则未必。
Test:经过HR批准的正式名称是Software Development Engineering Test(SDET),简称为Test或SDET(读作S-DET)。这个职位看似没有Dev和aR酷,但是很有前途,首先中国的同学由于种种原因(不了解,看不起,做不来),不太愿意做,因此公司找人非常急迫,相对容易进入。这一职位所谓的苦(也反映了一些人的偏见和误解)就是SDET得等着上家(PM/DEV)给你东西,你才能“测试”。然而现代软件工程要求TEST从项目一开始就积极参与项目的规划,了解客户需求,制定测试计划,设计测试架构,实现测试自动化,等等。这些事实上都是开发的工作,所以他们叫......
中国软件外包IT公司最新排名(IT外包人才可关注)(2010-03-10 21:09:00)
摘要:1. 博朗软件 Bleum(上海)
2. 中软国际(北京)
3. 东软集团 Neusoft(沈阳)
4. 博彦科技 BeyondSoft(北京)
5. 海辉软件 HiSoft(大连)
6. 文思 VanceInfo(北京)
7. 浙大网新 Insigma (杭州)
8. 奥博杰天 Objectiva(北京)
9. 浪潮 Inspur(济南)
10. 软通动力 iSoftStone(北京 )
11. 福瑞博德 Freeborders(深圳 )
12. 信必优 Symbio(北京 )
13. 大展科技 Achievo(深圳 )
14. 恒生电子 hundsun(杭州 )
15. 日电卓越软件(北京 )
16. 大连华信(大连 )
17. 中和软件 chuwa(上海 )
18. 新致软件 newtouch(上海 )
19. 柯莱特(北京 )
20. 海隆软件 hyron(上海 )
21. 大宇宙信息(天津 )
22. 晟峰软件(上海 )
23. 富士通信息(上海 )
24. NTTDATA(北京 )
25. 宏智科技(苏州)
26. 神州数码通用软件(北京 )
27. 凌志软件(上海 苏州 )
28. 音泰思(成都 )
29. 微创软件(上海 )
30. 开目佰钧成(武汉 )......
HBA(2010-01-08 13:19:00)
摘要: 主机总线适配器(Host Bus Adapter,HBA)是一个在服务器和存储装置间提供输入/输出(I/O)处理和物理连接的电路板和/或集成电路适配器。因为HBA减轻了主处理器在数据存储和检索任务的负担,它能够提高服务器的性能。一个HBA和与之相连的磁盘子系统有时一起被称作一个磁盘通道。
我们知道网卡是用于连接计算机和计算机网络。网卡一般插在计算机大总线扩展槽上,卡上有连接计算机网络的接口。网卡物理上连接计算机内部总线,例如PCI,PCI-X,PCI-E,SUN的Sbus总线等,和计算机网络,例如以太网等。存储系统中也有类似的用于连接计算机内部总线和存储网络的设备。这种位于服务器上与存储网络连接的设备一般称为主机总线适配卡(Host Bus Adaptor)HBA。HBA是服务器内部的I/O通道与存储系统的I/O通道之间的物理连接。最常用的服务器内部I/O通道是PCI和Sbus,它们是连接服务器CPU和外围设备的通讯协议。存储系统的I/O通道实际上就是光纤通道。而HBA的作用就是实现内部通道协议PCI或Sbus和光纤通道协议之间的转换。
常见的服务器和存储设备之间的数据通讯协议是IDE,SCSI和光纤通道。为了实现服务器和存储设备之间的通讯,通讯的两端都需要实现同样的通讯协议。存储设备上通常都有控制器,控制器实现了一种或几种通讯协议,它可以实现IDE,SCSI或光纤通道等存储协议到物理存储设备的操作协议之间的转换。而服务器的通讯协议是由扩展卡或主板上的集成电路实现的,它负责实现服务器内总线协议和IDE,SCSI等存储协议的转换。例如PC机中,一般主板上都有IDE协议的功能,IDE磁盘控制器上有IDE协议的功能。因此IDE磁盘可以连接到PC机的IDE连接线上。如果磁盘只支持SCSI协议,那么这种磁盘就不能直接与PC机连接。这时就需要在PC机扩展槽上插入一块SCSI卡,SCSI磁盘可以与卡连接。SCSI卡实现了PC总线到SCSI的转换。这种SCSI卡实现的功能就是主机总线适配卡的功能。如果磁盘只支持光纤通道协议,那么服务器上就需要支持光纤通道协议,因为光纤通道的高速特性一般服务器主板都不支持,需要专门的主机总线适配卡。服务器插入主机总线适配卡后,就可以与支持光纤通道的磁盘通过光纤通道连接了。
主机总线适配卡内部有一个小的中央......
.net 操作XML小结(2010-01-02 19:53:00)
摘要:一、简单介绍
using System.Xml;
//初始化一个xml实例
XmlDocument xml=new XmlDocument();
//导入指定xml文件
xml.Load(path);
xml.Load(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
//指定一个节点
XmlNode root=xml.SelectSingleNode("/root");
//获取节点下所有直接子节点
XmlNodeList childlist=root.ChildNodes;
//判断该节点下是否有子节点
root.HasChildNodes;
//获取同名同级节点集合
XmlNodeList nodelist=xml.SelectNodes("/Root/News");
//生成一个新节点
XmlElement node=xml.CreateElement("News");
//将节点加到指定节点下,作为其子节点
root.AppendChild(node);
//将节点加到指定节点下某个子节点前
root.InsertBefore(node,root.ChildeNodes[i]);
//为指定节点的新建属性并赋值
node.SetAttribute("id","11111");
//为指定节点添加子节点
root.AppendChild(node);
//获取指定节点的指定属性值
string id=node.Attributes["id"].Value;
//获取指定节点中的文本
string content=node.InnerText;
//保存XML文件
string path=Server.MapPath("~/file/bookstore.xml");
xml.Save(path);
//or use :xml.Save(HttpContext.Current.Server.MapPath("~/file/bookstore.xml"));
......
ADO.net操作数据库总结(2010-01-02 19:41:00)
摘要:一.用SqlConnection连接SQL Server
1..加入命名空间
using System.Data.SqlClient;
2.连接数据库
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = "user id=sa;password=sinofindb;initial catalog=test;data source=127.0.0.1;Connect Timeout=30";
myConnection.Open();
改进(更通用)的方法:
string MySqlConnection="user id=sa;password=sinofindb;Database =test;data source=127.0.0.1;Connect Timeout=30";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
二。用OleDbConnection连接
1.加入命名空间
using System.Data.OleDb;
2.连接sql server
string MySqlConnection="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=test;Integrated Security=SSPI;";
SqlConnection myConnection = new SqlConnection(MySqlConnection);
myConnection.Open();
3.连接Access(可通过建立.udl文件获得字符串)
string MySqlConnection="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:db2000.mdb;
Persist Security Info=False;
4.连接Oracle(也可通过OracleConnection连接)
【摘录】.NET多线程编程(2009-12-31 11:08:00)
摘要: 在.NET中编写的程序将被自动的分配一个线程.让我们来看看用C#编程语言创建线程并且继续学习线程的知识。我们都知道.NET的运行时环境的主线程由Main ()方法来启动应用程序,而且.NET的编译语言有自动的垃圾收集功能,这个垃圾收集发生在另外一个线程里面,所有的这些都是后台发生的,让我们无法感觉到发生了什么事情.在这里默认的是只有一个线程来完成所有的程序任务,但是正如我们在第一篇文章讨论过的一样,有可能我们根据需要自己添加更多的线程让程序更好的协调工作。比如说我们的例子中,一个有用户输入的同时需要绘制图形或者完成大量的运算的程序,我们必须得增加一个线程,让用户的输入能够得到及时的响应,因为输入对时间和响应的要求是紧迫的,而另外一个线程负责图形绘制或者大量的运算。
.NET 基础类库的System.Threading命名空间提供了大量的类和接口支持多线程。这个命名空间有很多的类,我们将在这里着重讨论Thread这个类。
System.Threading.Thread类是创建并控制线程,设置其优先级并获取其状态最为常用的类。他有很多的方法,在这里我们将就比较常用和重要的方法做一下介绍:
Thread.Start():启动线程的执行;
Thread.Suspend():挂起线程,或者如果线程已挂起,则不起作用;
Thread.Resume():继续已挂起的线程;
Thread.Interrupt():中止处于 Wait或者Sleep或者Join 线程状态的线程;
Thread.Join():阻塞调用线程,直到某个线程终止时为止
Thread.Sleep():将当前线程阻塞指定的毫秒数;
Thread.Abort():以开始终止此线程的过程。如果线程已经在终止,则不能通过Thread.Start()来启动线程。
通过调用Thread.Sleep,Thread.Suspend或者Thread.Join可以暂停/阻塞线程。调用Sleep()和Suspend()方法意味着线程将不再得到CPU时间。这两种暂停线程的方法是有区别的,Sleep()使得线程立即停止执行,但是在调用Suspend()方法之......
Net中的反射使用入门(2009-12-31 11:05:00)
摘要: [转载]
MSDN:
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpcondiscoveringtypeinformationatruntime.htm
提纲:
1、 什么是反射
2、 命名空间与装配件的关系
3、 运行期得到类型信息有什么用
4、 如何使用反射获取类型
5、 如何根据类型来动态创建对象
6、 如何获取方法以及动态调用方法
7、 动态创建委托
1、什么是反射
Reflection,中文翻译为反射。
这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分:‘程序集(Assembly)’、‘模块(Module)’、‘类型(class)’组成,而反射提供一种编程的方式,让程序员可以在程序运行期获得这几个组成部分的相关信息,例如:
Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类型的实例。
Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。
诸如此类,还有FieldInfo、EventInfo等等,这些类都包含在System.Reflection命名空间下。
2、命名空间与装配件的关系
很多人对这个概念可能还是很不清晰,对于合格的.Net程序员,有必要对这点进行澄清。
命名空间类似与Java的包,但又不完全等同,因为Java的包必须按照目录结构来放置,命名空间则不需要。
装配件是.Net应用程序执行的最小单位,编译出来的.dll、.exe都是装配件。
装配件和命......