`
76052186
  • 浏览: 35331 次
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多
取这个题目,给我的感觉很沉重(跟最近心情有关,这里就不说了),做软件也有5,6年了(决不是为了炫耀,没什么能力,现在还是个程序员),也有一些体会,我感觉在实际项目中遇到很多问提,但是有没有一个好的解决方案。我希望这个贴子只是一个开始,希望有更多的人,把自已常遇到的问题提出来,把自已的解决方案提出来,在家一学习,进步。
我先说一个。性能问题(这个网站讨能架构,幽雅的设计,新技术有很多,但从多方面讨论性能的很少,我没看见)。现面列出两个我感触很深的例子:

1,教务系统中的学生选课,在这种情况下,并发很多,到少上千,数据必须时时动态的,当学生选课时,服务器会搞得很慢,最坏情况,就是压死。
2,从历史系统中查数据,因为是历史系统,没办法该动原表结构,为了查询一些数据,要关联很多表,查询非常慢(最坏的情况,一个sql查询要几分钟,好的要几十秒,这还是经过优化的),几十个用户就跑不动了。

对以上这些问提,我们该从那些方面来考虑(从系统架构方面,设计方面,sql方面,数据库方面,还是服务器方面,,,,,还是其它),我认为,从数据库,sql等方面来解决,只能治标,不能治本,治本必须从架构方面,设计方面,如果从架构方面我们该注意一些什么问提,该如何来设计(常听高人说,必须从设计方面来解决,但从没看到谁举下实际的例子出来),希望有高手能指点一下,大家能把自已的经验供享一下,最好能有实标例子,与解决方法。
分享到:
评论
25 楼 jianfeng008cn 2007-01-20  
Allen 写道
有时候也要考虑一些变通的办法,比如楼主提出的第一个学生选课的问题。

学校一般没什么钱来给你配置好的服务器(而且经常是一个服务器上跑着很多个应用,光是应用服务器和CMS通常都有运行着好几个不同的),数据库也基本用的是MySQL这样在他们看来“免费的软件”……

那么就可以尽量争取让服务器的内存容量大一些,MySQL允许的并发连接稍微多几条(同时一定要仔细谨慎地配置一个数据源/JDBC连接池来维护这些连接),MySQL可以获取使用的内存也适当加大一点……

如果使用了Hibernate的话,良好的持久化关联关系配置、合理的缓存规划、逻辑清醒的业务代码……这些都可以提升应用程序的可延展性。

最后,也是最现实的一点(也许可以说是最管用的一条)——和学校这方面的负责人协商一下,改善一下学生选课的流程,适当延长选课的时间段,不要让所有学生都同时在使用你们的选课系统。(一个普通的大学一般都有数以万计的学生,如果很短的时间段里他们同时在你们的系统上进行操作,那么很难相信学校这种近乎业余级别的服务器可以承受得住。)



曾在国内大学教务软件市场做得最好的公司工作过一年,学校的情况可不是这样的哦,硬件条件很不错,数据库也都是oracle的。
24 楼 kevinStar 2007-01-20  
76052186 写道
不过这里我产生另外两个疑问,我本来相作实验的,但没做,偷一下懒,有人知到的回答一下。
1,对一个复杂的sql,我们是分成一个一个的小sql好,还是一个大sql好,我想分成一个一个的小sql可能在大并发时,能提高性能 ,

select * from (select teacher.*,student.*,rownumber() over(ORDER BY studnet.id ASC) AS rn  from select * from teacher left join studenton teacher.id =student.teacherId) where rn >=0 and rn <15,
对这样一个查询,我们一次只需取15条记录 ,如果我们改一下,改成如下方式  
select teacher.id from teacher,
select * from (select *,rownumber() over(order by id) from student where teacherid in("t1","t2",,,)) where rn>=0 and rn<15

这样一个(上面sql有优化的地方,只是示例用,就不优化了),sql是多了,数据库要多执行几次,但每次都是单表查询,数据库不会去做表间连接,响应更快,压力会分散在集群中的各个服务器上,减轻数据库服务器压力。不知可行不,有人做过没有,希望高手提提意见。


这个我在局域网内测试过,我测试的2张表分别有20多万条数据。结果反而比大sql还慢了1-3秒,用了30多秒。大sql其实还关联了一个辅助表。比小的sql还少个表用了30秒就查询出结果了。
我个人认为这种嵌套查询,千万不要写得太多,如果事物再没有控制好的话,在并发量高的时候,特别容易造成数据库死锁。
23 楼 lixigua 2007-01-20  
Lucas Lee 写道

这叫什么说法,数据库集群如果不能提高性能,那集群跟双机热备有什么区别,那一个集群里有几台几十台机器都是用来干什么的?

分区与集群不一样哦。多分区就是多分区,集群是集群,数据库集群没见过,不过多分区用过。
22 楼 lixigua 2007-01-20  
要说分区没用,我估计我们那客户会着急了,前年那项目,1千多万的硬件投入,分区没有用?搞么子哦。别人说没有用,可能是针对你的设备来说没用倒是可能。你搞一个SCSI硬盘用来分区当然没有什么大用了,分区有没有用,也得看你什么设备阿。
21 楼 LucasLee 2007-01-20  
76052186 写道

3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。


这叫什么说法,数据库集群如果不能提高性能,那集群跟双机热备有什么区别,那一个集群里有几台几十台机器都是用来干什么的?

一般来说,对于简单的集群,比如CJDBC(复杂的集群没研究过),对于查询都是可以线性提高性能的,因为查询是只读的,可以分在不同的机器上独立执行,性能提升倍数基本上等于机器数;
而对于写操作,(insert update delete)需要在所有机器上同时执行,执行性能应该和单台机器基本相同。

76052186 写道

4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。

提高硬件性能有很多方法,并不是直接需要弃用硬件,最简单的就是加内存,加CPU(如果支持的话),这样原来的硬件都保留了。
软件有没有伸缩性应该早考虑,项目都做完了,再说这个有点晚,寄希望于可后期优化来实现所谓伸缩性是很难的。当然,优化还是有很多潜力可挖的,但是前期没有做好应有的性能考虑,在后期就很被动了。


你还没有完全描述清楚你的问题。
1.你访问数据库是直接用的JDBC么?使用了PreparedStatement么?
2.选课似乎就是系统唯一的瓶颈,它主要依赖于那些功能,哪几个SQL,具体操作步骤,或者截图,都说说,性能优化最需要的就是对症下药,问题越明确,方案就越容易奏效。
20 楼 LucasLee 2007-01-20  
zuly 写道
Hibernate的性能关键体现在实体的模式抽象度是否足够!类似ejb的Session facade模式!至于集群的问题!我个人认为以product pre analyse不够充分!集群以硬件环境换软件环境是一种高成本,高维护的措施!

至于楼上列举的一种sql,这种无任何封装的业务模式是非常愚蠢的和不可取的!首先sql的操作是不保持连接的,这首先就是一种性能上的丧失!并且大量的曝露了数据结构,死板的设计模版.

其实业务的性能最多丧失在网络和数据库上!争对网络的优化我认为应该把重点放在锐化网络通行上!一如采用代理(agent)的模式来代替裸露的协议!对一些通信要尽可能的封装(单纯的把identify包装)!而争对数据库的优化要争对数据的sync和连接的保持!数据的sync是实时性要求很高的系统中经常遇到的!如果在sync的时候不保持连接(或者有效的保持连接或者条件性的保持的连接)是优化数据库的有效方法!


这位同学的行文看起来很夸张,每句话都是惊叹号结尾。我猜你写的程序里给用户的提示也是每句都是惊叹号吧。
19 楼 zuly 2007-01-19  
76052186 写道
谢谢楼上的各位,看了后有所收获。疑问如下:
1.关于hibernate 的集群问题,我已搜过相关在贴子,没看到实际可行的方法,有人说用支持集群的cache,用这过个东西,我不报太大的希望,至少我没听说过有什么太好的产品。不知到有人用过这种方式没有,如果有,希望分享一下(关建还是cache同步对性能的影响,有几位老兄已经提出这个问题了)。或者有人给过有这种解决方法的联接.
2,查询与计算分开,这在业务复杂时应该是一下好方法,减轻了数据库的负担,但对以下两个例子而言,只存在查询与更新,没有什么复杂的计算。
3.有位老兄提出说学校硬件太差,就实际我遇到的情况而言,硬件环境还是不错的,到少都是4G内存,2cpu/4cpu.不过最后确实如老兄所说,与学校协商,学生选课按学院分了一下,减少并发,看来穷则变,变则通呀。

不过这里我产生另外两个疑问,我本来相作实验的,但没做,偷一下懒,有人知到的回答一下。
1,对一个复杂的sql,我们是分成一个一个的小sql好,还是一个大sql好,我想分成一个一个的小sql可能在大并发时,能提高性能 ,

select * from (select teacher.*,student.*,rownumber() over(ORDER BY studnet.id ASC) AS rn  from select * from teacher left join studenton teacher.id =student.teacherId) where rn >=0 and rn <15,
对这样一个查询,我们一次只需取15条记录 ,如果我们改一下,改成如下方式  
select teacher.id from teacher,
select * from (select *,rownumber() over(order by id) from student where teacherid in("t1","t2",,,)) where rn>=0 and rn<15

这样一个(上面sql有优化的地方,只是示例用,就不优化了),sql是多了,数据库要多执行几次,但每次都是单表查询,数据库不会去做表间连接,响应更快,压力会分散在集群中的各个服务器上,减轻数据库服务器压力。不知可行不,有人做过没有,希望高手提提意见。

2,老有人说,创建太多的对象影响性能,这个不否认。但是到底会关生多少性能影响(先否定太多的对象的情况,如很多str相加的情况),就拿数据库操作而言,你从数据库中得到一个学生的数据 包括(name,sex,age,addree,)  把这些存在一些变量中,与存在一个studnet(如通过hiberante获得) 这样一个对象中,两者之间到底会关生多少性能影响。          


Hibernate的性能关键体现在实体的模式抽象度是否足够!类似ejb的Session facade模式!至于集群的问题!我个人认为以product pre analyse不够充分!集群以硬件环境换软件环境是一种高成本,高维护的措施!

至于楼上列举的一种sql,这种无任何封装的业务模式是非常愚蠢的和不可取的!首先sql的操作是不保持连接的,这首先就是一种性能上的丧失!并且大量的曝露了数据结构,死板的设计模版.

其实业务的性能最多丧失在网络和数据库上!争对网络的优化我认为应该把重点放在锐化网络通行上!一如采用代理(agent)的模式来代替裸露的协议!对一些通信要尽可能的封装(单纯的把identify包装)!而争对数据库的优化要争对数据的sync和连接的保持!数据的sync是实时性要求很高的系统中经常遇到的!如果在sync的时候不保持连接(或者有效的保持连接或者条件性的保持的连接)是优化数据库的有效方法!
18 楼 76052186 2007-01-19  
谢谢楼上的各位,看了后有所收获。疑问如下:
1.关于hibernate 的集群问题,我已搜过相关在贴子,没看到实际可行的方法,有人说用支持集群的cache,用这过个东西,我不报太大的希望,至少我没听说过有什么太好的产品。不知到有人用过这种方式没有,如果有,希望分享一下(关建还是cache同步对性能的影响,有几位老兄已经提出这个问题了)。或者有人给过有这种解决方法的联接.
2,查询与计算分开,这在业务复杂时应该是一下好方法,减轻了数据库的负担,但对以下两个例子而言,只存在查询与更新,没有什么复杂的计算。
3.有位老兄提出说学校硬件太差,就实际我遇到的情况而言,硬件环境还是不错的,到少都是4G内存,2cpu/4cpu.不过最后确实如老兄所说,与学校协商,学生选课按学院分了一下,减少并发,看来穷则变,变则通呀。

不过这里我产生另外两个疑问,我本来相作实验的,但没做,偷一下懒,有人知到的回答一下。
1,对一个复杂的sql,我们是分成一个一个的小sql好,还是一个大sql好,我想分成一个一个的小sql可能在大并发时,能提高性能 ,

select * from (select teacher.*,student.*,rownumber() over(ORDER BY studnet.id ASC) AS rn  from select * from teacher left join studenton teacher.id =student.teacherId) where rn >=0 and rn <15,
对这样一个查询,我们一次只需取15条记录 ,如果我们改一下,改成如下方式  
select teacher.id from teacher,
select * from (select *,rownumber() over(order by id) from student where teacherid in("t1","t2",,,)) where rn>=0 and rn<15

这样一个(上面sql有优化的地方,只是示例用,就不优化了),sql是多了,数据库要多执行几次,但每次都是单表查询,数据库不会去做表间连接,响应更快,压力会分散在集群中的各个服务器上,减轻数据库服务器压力。不知可行不,有人做过没有,希望高手提提意见。

2,老有人说,创建太多的对象影响性能,这个不否认。但是到底会关生多少性能影响(先否定太多的对象的情况,如很多str相加的情况),就拿数据库操作而言,你从数据库中得到一个学生的数据 包括(name,sex,age,addree,)  把这些存在一些变量中,与存在一个studnet(如通过hiberante获得) 这样一个对象中,两者之间到底会关生多少性能影响。          


17 楼 zrweng 2007-01-19  
这和用什么开发工具没关系,如果你将数据存取和数据计算分离,那么就可以做到分布式运算,可以用多个普通PC机,一起计算(数据分类)后将结果存入数据库!
16 楼 feng13041 2007-01-19  
Allen 说得对!学校一般不大可能配置多台服务器。如果数据库和WEB服务器都装在同一台服务器中。要想性能方面由提升,就要考虑增加内存。当然还有CPU。现在服务器一般都支持多CPU。
15 楼 Cecily 2007-01-19  
也在学习Hibernate,看上面的发言都有点怕了 
14 楼 sopestar 2007-01-19  
关注!了解性能不多,但碰到类似的问题,解决方法正在寻找
13 楼 Allen 2007-01-19  
有时候也要考虑一些变通的办法,比如楼主提出的第一个学生选课的问题。

学校一般没什么钱来给你配置好的服务器(而且经常是一个服务器上跑着很多个应用,光是应用服务器和CMS通常都有运行着好几个不同的),数据库也基本用的是MySQL这样在他们看来“免费的软件”……

那么就可以尽量争取让服务器的内存容量大一些,MySQL允许的并发连接稍微多几条(同时一定要仔细谨慎地配置一个数据源/JDBC连接池来维护这些连接),MySQL可以获取使用的内存也适当加大一点……

如果使用了Hibernate的话,良好的持久化关联关系配置、合理的缓存规划、逻辑清醒的业务代码……这些都可以提升应用程序的可延展性。

最后,也是最现实的一点(也许可以说是最管用的一条)——和学校这方面的负责人协商一下,改善一下学生选课的流程,适当延长选课的时间段,不要让所有学生都同时在使用你们的选课系统。(一个普通的大学一般都有数以万计的学生,如果很短的时间段里他们同时在你们的系统上进行操作,那么很难相信学校这种近乎业余级别的服务器可以承受得住。)
12 楼 刑天战士 2007-01-19  
分区,索引可以适当食用
11 楼 giscat 2007-01-19  
复杂查询建视图,这样结构很清晰

可做个物化视图,数据库端做个缓存

还可以做个应用级别的缓存,对关键数据进行缓存

页面级别的缓存也可以用

不过应用级的缓存是最有效的
10 楼 galaxystar 2007-01-19  
在高性能环境下,H反而成本更高!
9 楼 magice 2007-01-19  
Hibernate等东西出来是为了方便我们以常规的思维写程序,也就是面向对象,但是它的长处绝对不在性能,换一句话说,要提高性能的地方,最好不要用Hibernate等。
再有,个人认为在查询历史数据的思想就是创建冗余字段,最好达到不要关联其他表,以空间换速度
8 楼 KayMO 2007-01-19  
zuly 写道
76052186 写道
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle
两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的,
项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。

对于以上几个兄弟的方法,提出几点不明白的,
1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题).
2,有些时候数据是从其它系统来的,不可能动别人的数据库结构,
3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。
4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。
希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!

这个狠

关于hibernate性能,cache,cluster环境等问题论坛已经有过N个相关帖了,楼主可以细心搜索下
7 楼 WinLive 2007-01-18  
这确确实实是个很让人头疼得事情,
平时服务器可能根本就没什么事情
在选课期间会有非常高的并发率,
可以研究一下RowSet,
可以不需要一直与数据库保持连接,而在内存中执行
6 楼 zuly 2007-01-18  
76052186 写道
很高兴有人回贴,我可能没说清楚,我在补充一下
以上列出的两个项目,是我亲身经历的,一个项目是websphere +db2,一个是weblogic+oracle
两个项目都是经过优化的,并且是ibm,oracle公司的服务人员来优化的。sql也是经过优化.查询是分页的,
项目是一个漏斗行,既 apache http(最大连接) ->应用服务器(线程数,连接数)->数据库, 整个是一个逐渐减小的过程。

对于以上几个兄弟的方法,提出几点不明白的,
1.内存换速度,这是个好方法,曾经想用。问题是在集群时(或者多应用同时访问一个数据库时),如何保持数据同步,什么时候清除内存中的数据,其实Hibernate 有同样的问题,怎么解决(现在我真的怀疑Hibernate 有多大在实用价值,在真实环境中,缓存,集群,多个应用同时访问同一个数据库,是常见的事,Hibernate如何解决,说远了。。。回主题).
2,有些时候数据是从其它系统来的,不可能动别人的数据库结构,
3,对数据库而言,如何考增加服务器,来提高性能.分区数据库吗?可这个东西,连ibm自已的工程师都说这种方式不能提高性能。
4,不用集群,提高单台服务器的硬件性能,我认为这是最不好的方式,软件太没伸缩性。这种方案会导至用户原来的硬件不在使用,用户会很不满意的。
希望高手继需!希望能看到更新奇在思想,我正有个想法,但还不成熟,待我做通实验,在请大家指点。
关键是对核心技术的把握不够!我看到过很多的项目把ejb用的就和Hibernate一样!

相关推荐

    软考经验谈如何轻松通过软件设计师考试

    软考经验谈如何轻松通过软件设计师考试,我的计算机学习过程是与考试同步进行的,参加了一系列大大小小的计算机考试有十余次,其中有成功,也有失败,最大的收获是不怕考试。从初、中级职称计算机考试开始,参加过...

    关于数据库设计的经验谈

    一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计...

    温昱---架构设计方法经验谈

    温昱---架构设计方法经验谈,关于架构方面的心得和经验,有独到的见解和分析,详细请查看

    数据库设计经验谈.docx

    数据库设计经验谈全文共11页,当前为第1页。一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成, 而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。 如果把企业...

    数据库设计之——数据库设计经验谈

    一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计...

    数据库设计经验谈.pdf

    15 检查设计 15 Microsoft Visual FoxPro 设计技巧 15 一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组 成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成, 数据库设计的好坏是一个关键。...

    浅谈计算机软件开发设计的难点及解决措施.docx

    一、我国计算机软件设计现状分析 在计算机软件设计领域,我国软件开发和设计的起步较晚,但是也在经验的积累和总结中出现了许多优秀的软件设计方法以及软件开发设计工具,在设计领域取得较大的进步,正在逐渐缩小与...

    App架构设计经验谈-技术选型

    当你做架构设计时,必然会面临技术选型的抉择,不同的技术方案,架构也可能完全不同。有哪些技术选型需要做决策呢?比如,App是 纯原生开发,还是Web App,抑或Hybrid App?iOS开发,语言上是选择Objective-C还是...

    数据库设计经验谈(一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键)

    一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计...

    PCB板设计:PCB布局经验谈

    小编推荐的工程师曾多年从事PCB板设计的工作,将印制线路板设计的点滴经验与大家分享,希望能起到抛砖引玉的作用。小编推荐的工程师的印制线路板设计软件早几年是TANGO,现在则使用PROTEL2.7 FOR WINDOWS。

    数据库设计经验谈

    一个成功的管理系统,是由:[50%的业务+50%的软件]所组成,而50%的成功软件又有[25%的数据库+25%的程序]所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最...

    数据库设计经验谈(上)

    一个成功的管理系统,是由:[50%的业务+50%的软件]所组成,而50%的成功软件又有[25%的数据库+25%的程序]所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最...

    浅谈《机床夹具设计》教学中CAD/CAM软件的应用

    传统的《机床夹具设计》教学方式存在种种弊端,...文章首先分析了《机床夹具设计》授课过程中存在的问题,然后对CAD/CAM软件在《机床夹具设计》中的应用进行了举例和探讨,最后结合教学经验对该教学方法进行了几点思考。

    十年嵌入式码农的 Bug 调试经验谈

    嵌入式学习软件就是给专门的嵌入式系统设计的软件,和一般的PC软件差别不是很大,主要的区别在嵌入式系统对功耗和内存大小上有严格的限制,所以嵌入式软件一定要精简,高效。

    Verilog经验谈

    公司里是很强调规范的,特别是对于大的设计(无论软件 还是硬件),不按照规范走几乎是不可实现的。逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看自己写的代码,估计很多信号功能都忘...

    ARM嵌入式软件编程经验谈

    ARM系列处理器是 RISC (Reducded InSTructiON Set Computing)处理器。很多基于ARM的高效代码的程序设计策略都源于RISC 处理器。

    浅谈数据库设计方法.doc

    浅谈数据库设计方法 本文主要对数据库设计理论内容进行全面分析,这是建立在软件开发经验基础上实施 的操作,可以根据不同角度来阐述数据库设计的方法,以及设计技巧,让更多的数据库 设计人员了解数据库设计相关...

    ThoughtWorks架构师NealFord:演化架构和紧急设计经验谈

    NealFord是全球IT咨询公司ThoughtWorks的软件架构师。除了常规工作,他做的事情还包括设计和开发应用程序、教学材料、杂志文章、课件和视频/DVD演示,同时还是各种技术书籍的作者或者编辑,其中包括最近的新书...

Global site tag (gtag.js) - Google Analytics