VB.NET, C#
Asp.NET, Asp.net MVC, SignalR, WebService, WCF, WebHook, WebApi,WinForm,WindowsService
JavaScript, jQuery, AngularJS
MSSQL,Oracle,MySQL
AutoMapper
NODEJS和Egg框架(阿里的Egg框架)。
【上海 万得资讯】
使用纯Nodejs后端打造大前端式的金融产品,
主要负责业务逻辑的编码,使用Egg.js(后端)+ReactJS(纯前端)。
包含以下内容:
1)使用Egg的schedule进行日志定时清除。
2)使用Egg的middleware进行日志记录以及自动错误捕获。
3)使用Egg框架完成socketIO的内部数据推送(message群发等)。
4)升级Egg框架,将yield改为async语法升级,配合NodeJS升级。
【上海柯达——Insite prepress portal system 7.0】
1)使用到SignalR取代AJAX,以实现服务端主动推送信息到达客户端,节省AJAX无效请求资源的浪费。
2)TypeScript取代js,强类型检查,避免因为弱类型的js导致调试困难。
3)Message Queue,将繁重复杂的任务后置处理,然后通过Queue+SignalR机制推送告知客户端信息处理完毕以及处理结果。
技术难点——分布式开发,分布在不同服务器上对象需要互相发送数据,且需要一定同步。此地有两种方式:
1)Queue,我们多台服务器同享一个数据库,因此带着IP发送,然后每台服务器接受之后自动对IP过滤,只接受属于自己的IP数据的那个。
2)1的做法有问题,Queue比较合适多播发送,我的建议:
用SignalR+WCF:SignalR部署在本台服务器,专门负责本地服务器的人员(实体)与网络通讯。要与其它服务器(人员实体)通讯,调用公开的WCF的方法,该WCF方法里边再通过GlobalHost获取其它服务器的SignalR的实体,进行通讯。这样的好处:避免用Queue进行多播通讯,取而代之是“需要与什么通讯,直接用什么服务器进行通讯”。
2015.01 - 2015.05 Api外部调用系统 开发
难点1:由于无法判定第三方连入地址的合法性,容易发送错误异常,多次发送系统发生卡机现象。
难点2:使用ThreadPool处理长时间业务逻辑导致WinService无法正常关闭,甚至崩溃。
【描述】由于我们是第三方交易平台,提供开发接口供外部商户连入自己的服务器地址,导致我们无法全程管理确定第三方的连入地址是否合法,或者即便合法,短时间因为各种因素无法正常连接导致发送超时情况发生(因为原平台基于VS2005构建且不升级仅为打补丁),所以无法判断网址是否正确。且后来考虑用内置的ThreadPool进行子线程处理,导致Service无法正常启动或者关闭,严重影响业务后续发展。
【解决方案】
I)采用WinService后台不断死循环读取数据表,内部写一个多线程的管理方法,先一次性读取N条记录入内存,然后自动根据N条适当分配M个子线程分别处理(90%的地址应该是正确的)。
II)针对10%的不正确地址,必须增加超时功能,且采用另外一个WinService辅助专门去处理。
III)这两个Service其实都是一套代码的反复使用。只是第一个Service仅读取状态标记为0(未处理)的,如果处理成功标记为1,否则标记为2(再次处理),此时第二个Service仅读取状态为2的记录。这样根据状态分别读取不同的记录块,既避免了使用锁,同时解决了效率问题。
IV)针对ThreadPool,使用了自定义的LongThreadPool(自己使用Thread而不是短寿命的线程池线程),去处理(自定义了一些处理事件和方法)。
2)难点:用户体验不好(反复刷页面),且由于内部通过XML信息交互,编程非常麻烦(拼接传输的XML)。
【解决方案】
1)整体页面采用纯无刷新技术操作(不使用任何服务端控件,页面都是HTML)数据传输以JSON方式(轻量级),考虑内部是分布式服务器跨域问题,采用JSONP(因为我们考虑IE6,而IE6不支持CORS的跨域解决方案)。
2)后端仅提供JSON数据的接口(仅暴露WebService),前端采用RequireJS方式异步加载需要的JS文件,且使用类MVC结构方式把JS文件分成controller,view和lib三个层次)。
【上海 励德爱思唯尔】
小型法律事务管理系统 开发
该项目分为前端+后端,分别是两个项目构成,用VS2015开发:
一、后台CoreService分成“数据层”(数据增删改查,EF的Code-First),“业务逻辑层”(各种不同复杂的业务逻辑的组合”)以及模型层(与FM和“数据层”交互的模型层)。
使用到的技术:
a)AutoMap(展现层的Model和EF的Model的映射)。
b)Ninject注入(实现已知接口,动态调用不同的方法)。
c)借