c# - 服务器端技能和桌面开发技能有什么区别?

标签 c# .net asp.net database multithreading

今天早上,我读到一个很好的问题,关于人们应该从 Sharepoint 职位中得到什么。我对服务器端工程有类似的问题。我对服务器端工程职位有什么期望,它与桌面开发有何异同?

我有使用 WinForms、WPF 的经验,一些简单的多线程经验,一些使用 Web 服务的经验,一些编写简单的 Web 服务的经验,编写数据访问层 (DAL) 的经验,以及一些设置和使用基于 SQL Server 的经验具有 CRUD 样式界面并使用存储过程的数据库。

我的团队没有一个人拥有服务器端工程师头衔,所以我真的不确定这些技能是什么样的。

最佳答案

他们是截然不同的世界。我在营地的两边都工作过,但主要是服务器端。不过,我使用的是经典的客户端-服务器而不是网络(是的,我们还在)。

  • 客户端完全是关于用户交互的,服务器端(通常)没有用户。这实际上是相当自由的。
  • 服务器端意味着考虑管理人员,而不是用户。您需要为故障查找、报告、诊断日志记录提供访问权限 - 您自己的通常是 Windows 事件日志。
  • 客户端是短暂的(用户来来去去),服务器端是持久的。因此,资源管理至关重要:泄漏意味着死亡。内存泄漏、句柄泄漏、堆碎片。你最终会梦到这些东西。我被提前 24 小时通知拖到西类牙,因为一个系统可能会在异常情况下破坏 Windows DDE 内存分配器的顶部,这告诉你这东西有多重要。
  • 在客户端,对用户的响应(为 GUI 提供服务)就是一切,在服务器端则更为复杂。线程化变得更加重要,但线程化是为了可扩展性而不是为了保持 GUI 响应。我还没有像在固件时代那样开始计算处理器周期或检查中断延迟数据,但它已经接近了。
  • 安全变得很重要,但没有您想象的那么重要。并非每个服务器应用程序都面向 Internet。考虑访问级别、通过 View 限制访问等。
  • 曾几何时,服务器端始终意味着原生,但这种情况正在改变。

编辑:

通过线程实现可伸缩性,我的意思是可以很容易地以不可伸缩的方式应用线程。为每个查询生成一个线程很好,直到您的建模告诉您可能有 500 个并发查询。所以你需要考虑线程池和队列。

对于“管理者”来说,这里其实有两种需求,一种是SysAdms的reporting,一种是适合的management types的reporting。 SysAdms 需要故障查找方面的帮助,我认为这是碰巧影响您的应用程序的系统故障(网络中断、网络 Storm 、硬盘满/崩溃、服务器故障转移、调用 DR 等)和诊断,我认为是报告您自己的应用程序的异常行为。

SysAdms 有非常短期的需求 - 这个小时,今天,给我发电子邮件,给我发短信,让它备份等等。他们需要随时可用的详细技术信息,因为你不知道什么时候可以真的需要它。但是,无论您向他们提供多少信息,只有最优秀的系统管理员才不会在空气输送装置出现问题时接起电话给您打电话。

经理需要中长期绩效报告,每天/每周/每月有多少查询,我上周的表现如何,本周我需要做些什么来改进,我如何让目标绩效对我的下属可见工作人员/同事/上级等。这主要是根据要求(报告),尽管经常需要诸如带有运行统计数据的墙板之类的东西……但即使是那些也不一定是实时的。你可以在民意调查中从数据库中吸取这种东西。作为服务器端人员,您可能需要设计一些 View 来促进此报告,但您的大部分工作都是针对 SysAdms 感兴趣的异常情况。至少,以我的经验是这样的。但请记住,如果 SysAdm 不满意,您无论如何都会与经理打交道......

旁白:奇怪的是,尽管系统管理员似乎过着压力很大的生活,但与我共事过的所有最优秀的人都是非常悠闲的人。奇怪,那个。我想这是一种应对机制。

关于c# - 服务器端技能和桌面开发技能有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/744691/

相关文章:

.net - 调制解调器在发出 ATDTnnnnnnn 后给出错误

.net - 防止竞争条件

asp.net - 实体类型 'Customer' 无法映射到表,因为它是从 'ApplicationUser' 派生的

c# - 仅使用 url 嵌入视频

ASP.NET CustomErrors - RemoteOnly 其中 "remote"表示在我们的网络之外

c# - .Net LINQ - 使用另一个字典过滤字典

c# - Task.Run 支持取消

.net - 在 Linq To SQL 中更新的最佳方式

c# - xsd.exe C# 文件到 XSD 文件

c# - TPL 数据流 - ExecutionDataflowBlockOptions.SingleProducerConstrained