安世亚太(PERA Global)致力于精益研发技术的丰富与发展,提供该领域中最先进的方法技术、平台与服务,帮助用户提升产品技术附加值,提高核心竞争力。公司员工500余人,总部设在中国北京,在上海、成都、广州、沈阳、南京、武汉、西安、深圳、重庆、哈尔滨、济南等城市设有分公司。

技术以人为本

凝聚人才是安世亚太成功的主要原因。我们从未停止过吸纳世界上在工程仿真、创新设计、质量管理、精益研发等领域的优秀人才。在现有员工500余人中,半数多为研发与技术人员,拥有包括院士在内的50多位知名顾问,与国际30多家公司和600多位专业技术专家建立长期合作关系。在中国及白俄罗斯设有研发中心。

 

 

本科或本科以上学历;
-熟悉C#;
-熟悉.NET Framework 4.0者优先;
-熟悉下列技术的一种或者几种:
-WPF、Silverlight、WCF、WF、ASP.NET;
-熟悉Python/IronPython语言者优先;
-熟悉SharpDevelop框架者优先;
-具备很强的分析和解决问题的能力,对于攻关疑难问题具有强烈的兴趣
-较高的综合素质,很强的责任心。

有意者请将简历发送至:haoyu.zheng@peraglobal.com
posted @ 2011-05-17 09:31 郑浩宇 阅读(201) 评论(2) 编辑

    有个需求,笔者比较挠头,要求如果前台有数据项的话 这一行就显示,没有的话,就隐藏。

    如果要是一个一个判断,并通过Panel的Visible属性设置的话,就得写25次,难道没有别的办法了吗?当然有,就用反射机制就可以。

    

Code
    需要注意的是:
    第一,应当放在PreRender事件中;
    第二,必须有一个判断,就是必须属性器是字符串类型;
    第三,Panel的ID命名有一个约定,就是“pn_”开头,后面跟属性器的名字。

 

posted @ 2009-04-24 10:45 郑浩宇 阅读(1136) 评论(9) 编辑
    最近要完成一个项目,有一个查询可难住了笔者,无论是子查询还是分组,都没弄出来,还是基础知识不行啊。不过呢,可以查资料,最后用一个窗口函数解决了问题。由于开始的数据库是Access,后来笔者导成SQL Server的,一下子明白了很多。
    数据库类似是这个样子滴:
    Employee表的字段:
    empId,englishName,depId
    Department表的字段:
    depId,deptName
    需求是:查找出Department表的所有字段,但是在前面显示出该部门的人数。
    就是这样:
    peopleCount    depId deptName
    25                     1       人力资源部
    42                     2       市场营销部
    
    一、分组的失败
    首先说说分组的概念。根据关系数据库理论,分组的概念是(G,·,e ),其中G是聚集,·是二目运算,e是G的一个成员,SELECT和GROUP BY的关系如下:
    (一)当使用聚集函数(例如count),对于SELECT 列表中的项,如果没有把它当做聚集函数的参数使用,必须是分组的一部分,例如有一个SQL语句:
      
 
SELECT depId
       ,
count(*as peopleCount
FROM Employee
    那就必须在GROUP BY中出现deptId:
     
SELECT depId
       ,
count(*as peopleCount
FROM Employee 
GROUP BY depId
    但是窗口函数是例外的,不必(也不能)出现在Group BY子句中。
    而对于可能更改分组(或者聚集函数返回值,例如新的列),则一定要包含在GROUP BY子句之中。否则就会报错。
    二、窗口函数
    知道了分组的基本概念之后,理解窗口函数就容易了,与聚集函数一样,窗口函数也是针对元组(就是行)进行聚集,但是不像聚集函数那样只返回一个值(也就是聚集所有行,然后计算),窗口函数可以为每个分组返回多个值。执行聚集的元组(行组)是窗口。
     例如第一个代码:select count(*) as cnt from Employee 这很容易,只返回一行,但是往往需要从不表示聚集或者其他聚集的行中访问这种聚集数据,窗口函数就解决了这个问题。例如下面的SQL语句表示用窗口函数从细节行访问聚集数据,就是员工总数:
    
SELECT EnglishName
       ,deptId
       ,
count(*over() as peopleCount
FROM Employee
ORDER BY 2
 
      OVER关键字表明,把Count当成窗口函数,对于查询返回的每一行,它返回了表中所有行的计数,括号表示还可以接收一些条件来限定行数,即多一层聚集。
      三、partition的使用
      partition就可以成为那个括号中的条件,它能够定义行的分区或者分组,以完成聚集。空的括号表示分区是整个结果集。partition by是一个移动的GROUP BY,例如:
     
SELECT EnglishName
       ,depId
       
count(*over(partition by deptId) as peopleCount
FROM Employee
ORDER BY 2
     通过partition by depId,为每个部门执行count同一个部门的每个count值相同。所以会返回很多相同的行,这时可以通过内联视图的方式进行解决:
  
SELECT DISTINCT EnglishName
                ,depId
                ,peopleCount
FROM
    (
SELECT EnglishName
            ,depId
            ,
count(*over(partition by depId) as peopleCount
     
FROM Employee
     
ORDER BY 2
    ) x
 
            如果要在Access中使用,由于Access不支持窗口函数,只能使用标量子查询,代码如下:
           
Code
      需要指出的是,窗口函数经过了数据库专门的优化,所以性能较为优异,比标量子查询要好,所以应当尽量使用。
posted @ 2009-04-21 23:17 郑浩宇 阅读(1226) 评论(5) 编辑

    IE 8虽然发布,但是依然有不少人用IE 6,对于样式的构建十分头疼。

     Div+CSS中最关键的是浮动布局,如果出现右边的框移到下边的状况,一般是以下两种原因:

     (一)父元素宽度不够

      主要是增加父元素宽度即可,因为IE 6的宽度计算和IE 8/FF不一样导致。

       (二)IE 6本身的Bug

        当浮动的时候,宽度可能会被双倍计算,这样的话可以在float之后写:*display:inline来解决。

posted @ 2009-04-17 14:41 郑浩宇 阅读(213) 评论(4) 编辑
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go



ALTER    PROCEDURE [dbo].[T_Consultation_Select] 
    
@ConsultationStyleID TINYINT,
    
@AnswerUserID VARCHAR(30),
    
@IncomeCallBeginTime [DATETIME],
    
@IncomeCallEndTime [DATETIME]
    
AS
    
BEGIN
        
DECLARE @whereStr VARCHAR(8000),
        
@count INT
        
SET @count=0
        
SET @whereStr=''
        
IF  @ConsultationStyleID IS NOT NULL
          
BEGIN
               
IF(@count>0)
                
BEGIN
                 
SELECT @whereStr=@whereStr+'    AND T_Consultation.ConsultationStyleID  ='+Convert(Varchar(10),@ConsultationStyleID)
             
END
        
ELSE
             
BEGIN
                 
SELECT @whereStr=@whereStr+'  T_Consultation.ConsultationStyleID ='+Convert(Varchar(10),@ConsultationStyleID)
               
END
          
SET  @count=@count +1
           
END
           
IF  @AnswerUserID IS NOT NULL
          
BEGIN
               
IF(@count>0)
                
BEGIN
                 
SELECT @whereStr=@whereStr+'    AND T_Consultation.AnswerUserID  ='''+Convert(Varchar(10),@AnswerUserID)''
             
END
        
ELSE
             
BEGIN
                 
SELECT @whereStr=@whereStr+'  T_Consultation.AnswerUserID ='''+Convert(Varchar(10),@AnswerUserID)''
               
END
          
SET  @count=@count +1
           
END
            
IF @IncomeCallBeginTime IS NOT NULL
                
BEGIN
                    
IF(@count>0)
                        
BEGIN
                             
SELECT @whereStr=@whereStr+' AND  T_Consultation.CreateTime >=''+ CONVERT(VARCHAR(10),@IncomeCallBeginTime)'''
                        
END
            
ELSE
                    
BEGIN
                       
SELECT @whereStr=@whereStr+'  T_Consultation.CreateTime >='' + CONVERT(VARCHAR(10),@IncomeCallBeginTime)'''
                    
END        
                
END
             
IF @IncomeCallEndTime IS NOT NULL
                
BEGIN
                    
IF(@count>0)
                        
BEGIN                                                                                                            
                             
SELECT @whereStr=@whereStr+' AND  T_Consultation.CreateTime <='' + CONVERT(VARCHAR(10),@IncomeCallEndTime)'''
                        
END
            
ELSE
                    
BEGIN
                       
SELECT @whereStr=@whereStr+'  T_Consultation.CreateTime <='' + CONVERT(VARCHAR(10),@IncomeCallEndTime)'''
                    
END        
                
END
           
IF(@count>0)
            
SELECT @whereStr='SELECT [CreateTime]
  FROM T_Consultation WHERE T_Consultation.FollowUpMark=
'+'1'+'  And ' + @whereStr
   
ELSE
   
SELECT @whereStr='SELECT ConsultationID,(SELECT ParaName FROM T_SysPara WHERE GroupID=14 AND ParaID=T_Consultation.ConsultationStyleID)AS ConsultationStyleID,
            [ConsultationContent],[ConsultationResults],(SELECT ParaName FROM T_SysPara WHERE GroupID=16 AND ParaID=T_Consultation.HaveOrderingIntention)AS HaveOrderingIntention,[OrderingIntentionContent],
  [CustomerID],[AnswerUserID],[CreateTime]
  FROM T_Consultation where  T_Consultation.FollowUpMark=
'+'1' 
END
select  (@whereStr)
posted @ 2008-07-08 15:08 郑浩宇 阅读(461) 评论(0) 编辑
摘要: 虽然已经有了ASP.NET AJAX了,最近学习ASP.NET控件的时候,逐步理解了原始的控件异步回调(代码取自《ASP.NET 2.0 高级编程》): 首先,在Render事件中添加好一个事件protectedoverridevoidRenderContents(HtmlTextWriteroutput){output.RenderBeginTag(HtmlTextWriterTag.Div);...阅读全文
posted @ 2007-07-20 00:31 郑浩宇 阅读(234) 评论(0) 编辑
摘要: 以前对于基础知识有些没有很好的掌握,特决定开辟一个日志,专门记录一些基础的问题。一天进步1%,70天就能积累一倍! 1.ArrayList是类,Array是数据结构,所以ArrayList需要在遍历的时候强制类型转换,Array不用,如果不希望强制类型转换,可以考虑使用范型。 2.装箱和拆箱 装箱是:容许将值类型作为引用类型(比如:对象)进行处理的过程,而拆箱是允许将引用作为值类型的进行处理的过程...阅读全文
posted @ 2007-07-19 10:08 郑浩宇 阅读(228) 评论(1) 编辑
摘要: 这篇文章是我第一次写关于ASP.NET AJAX的文章,关注这个框架已经很长时间了但是一直没有学得很好,主要是刚开始的时候没有理解ASP.NET AJAX,而是受《AJAX IN ACTION》这本书的影响很大,过于关注客户端代码,但是那本书也没有提出如何和服务器端进行交互,看了赵老师的MSDN WebCast之后进步很快,今天就照着官方的例子实现了。 官方的代码我不愿意再重复了,也没有很多的意义...阅读全文
posted @ 2007-06-08 21:24 郑浩宇 阅读(481) 评论(0) 编辑
摘要: 今天看《ASP.NET 2.0高级编程》,学会了ADO.NET 2.0中的数据批量更新,把代码发到这里,以供日后之需。 DemoBulkUpdate.aspx<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="DemoBulkUpdate.aspx.cs"Inherits="DemoBulkUpdate"%><!DOCTYPEh...阅读全文
posted @ 2007-02-22 00:10 郑浩宇 阅读(1498) 评论(2) 编辑
摘要: usingSystem;namespaceDstrQueue{/**////<summary>///Class1的摘要说明。///</summary>classQueueNode{Objectitem;QueueNodelink;}classQueue{/**////<summary>///应用程序的主入口点。///</summary>[STAThr...阅读全文
posted @ 2006-12-14 19:08 郑浩宇 阅读(121) 评论(1) 编辑