最近的一些工作总结

    最近一直很忙碌,感觉时间过的很快,来上海有二年多了,记得刚来那会一直感觉自己年纪还小,没有很多顾虑,想法也很简单,找一份工作,做自己喜欢的事,每天就会很开心,总得来说还是蛮幸运的,没有那么多辛酸史。人是有思想的,不同的阶段想法都会不一样,现在最大的感受就是有时候就会感觉时间与精力不够用,更多的顾虑,在外面上班,money是一部分,更多的归属感,现阶段是这样子的感觉。

    坚持与保持热情是一件很难的事,说实话有时候我也会质疑现在去深入学习一些技术有没有用,因为心态有时候会太浮躁,为什么要谈这个呢,因为从去年开始我听到最多的就是这些问题,上个月领导问过我这个问题,未来5年有什么职业规划? 其实按照我的想法比较简单,money多一些减轻些物质上的压力,多陪陪亲人,能有时间做自己喜欢的事就够了。

    说一说工作,第一份工作做.NET ,后面转了JAVA ,JAVA相对来说开源成熟的解决方案确实要多很多,如spring,orm,soa,android,大数据等等, 不会像MS那么狭小,不过现在MS也在进步。现在的公司呢,主要工作还是.NET ,平时的工作强度还好,去年在公司做了一个网站,现在基本就是新增功能与维护,另外就是APP的接口,还有就是各种支付 支付宝 微信 银联 支付等等,后面感觉很繁琐,就基与WEBAPI封装了一套全支付接口。平时的工作强度还能接受,就是多而杂。技术上平时了解自己感兴趣的知识,折腾linux,了解点新语言 nodejs, golang 等等。

工作

简单先说说项目都用了哪些技术吧。

一.ASP.NET MVC

网站使用ASP.NET MVC 开发效率相对还是蛮快的,比如有如下的特性

1.使用模型的声明式验证 ,简化了表单验证

2.Razor视图或单独使用RazorEngine

3.拦截器 我习惯这样称呼,因为之前springmvc一般这样称呼,比如做一个自动登录的验证[cookies],全局的日志记录等

4.路由也是蛮重要的一个东西,特别是对有洁癖的开发人员来说,比如你就是喜欢要每一个访问的URL都要简短并且有意义,或SEO实现类似/shanghai的URL等等(开始mvc4试了特性路由 http://attributerouting.net/),ASP.NET MVC 5.1 后已经支持,调试路由的工具 Install-Package routedebugger 等

5.返回匿名类JSON,局部视图,扩展htmlhelper等等,这个功能非常方便,可以自定义扩展自己的方法

6.缓存 使用MvcDonutCaching ,功能还比原生的多一些,基本一致,另外缓存服务Redis或Couchbase

7.js与css的合并压缩,Bundle 确实要方便很多,无需管理js的合并与样式版本号问题

8.日志 使用了NLog个人感觉要笔log4j好很多,错误与异常级别记录文本,window事件,db,email,基本满足需求,另外Elman也是蛮好用

9.XSS 使用了AntiXSS,ValidateAntiForgeryToken 另外就是写代码的时候多注意

10.页面性能,使用 MiniProfiler 检查调试页面性能,貌似有时候会与 routedebugger 的样式混乱

二. WEBAPI

APP的接口与一些常用的接口之前是使用WCF的Rest,后面感觉比较臃肿,就换成了WEBAPI, 个人非常喜欢这个,相比WCF比较轻量,好扩展,相比ASP.NET MVC我改进了一点东西

1.使用Autofac作为IOC容器

2.使用特性路由定义接口URL

3.使用markdown书写接口文档

5.全局拦截器对参数约束验证

6.自动生成/help参数文档 Install-Package Microsoft.AspNet.WebApi.HelpPage

7.支持跨越访问 Install-Package Microsoft.AspNet.WebApi.Cors

8.路由调试 WebApiRouteDebugger 执行过程跟踪 Install-Package Microsoft.AspNet.WebApi.Tracing Update-Package Microsoft.AspNet.WebApi.WebHost

9.另外推荐个HTTP类库Flurl.Http个人感觉要比.NET 4.5自带的HttpClient要好用,支持Task异步 ;扩展方法 Z.ExtensionMethods类库,包含大多数常用的扩展方法

例:

        /// <summary>
        /// 测试业务异步回调接口是否正确
         /// </summary>
        /// <param name="notifyUrl">业务服务地址</param>
        /// <returns></returns>
        [HttpPost]
        [Route("notify")]
        public async Task<IHttpActionResult> PostJsonAsync(string notifyUrl)
        {
            if (notifyUrl.IsNullOrEmpty() || !notifyUrl.Contains("http", StringComparison.OrdinalIgnoreCase)) return Ok(new { IsError = true, Msg = "NotifyUrl IS EMPTY", Data = string.Empty });
            //notifyUrl = notifyUrl.UrlDecode(System.Text.Encoding.UTF8);
            var payPal = new PayPalData
            {
                UserID = "test",
                Subject = "测试异步回调接口",
                OutTradeNO = "10086",
                CreateTime = DateTime.Now,
                GuidNO = Guid.NewGuid().ToString(),
                TotalFee = "0.01",
                Origin = "WEB"
            };
            try
            {
                var data = await notifyUrl.PostJsonAsync(payPal).ReceiveJson<WebAPIResponse>();
                logger.Info("PayPalController JsonAsync : " + payPal.SerializeJson(System.Text.Encoding.UTF8));
                if (data.IsError)
                {
                    return Ok(new { IsError = true, Msg = data.Msg, Data = data.Data });
                }
                return Ok(new { IsError = false, Msg = string.Empty, Data = payPal.SerializeJson(System.Text.Encoding.UTF8) });
            }
            catch (Exception ex)
            {
                return Ok(new { IsError = true, Msg = "PostJsonAsync Exception : " + ex.Message, Data = payPal.SerializeJson(System.Text.Encoding.UTF8) });
            }
        }

列:Filter

/// <summary>
    /// http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
    /// http://www.asp.net/web-api/overview/error-handling/exception-handling
    /// </summary>
    public class ModelValidFilter : ActionFilterAttribute
    {
        /// <summary>
        /// 模型验证
        /// </summary>
        /// <param name="actionContext"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public override Task OnActionExecutingAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
        {
            if (actionContext.ActionArguments.Values.FirstOrDefault().IsNull())
            {
                var data = new { IsError = true, Msg = "参数不能为空!", Data = string.Empty };
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, data);
                return base.OnActionExecutingAsync(actionContext, cancellationToken);
            }
            if (!actionContext.ModelState.IsValid)
            {
                // 注意 !!!!: http://tmenier.github.io/Flurl/fluent-http/ HttpStatusCode.BadRequest
                var data = new { IsError = true, Msg = actionContext.ModelState.Values.FirstOrDefault().Errors.FirstOrDefault().ErrorMessage, Data = actionContext.ModelState.Keys.FirstOrDefault() + " :参数验证有误!!!" };
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, data);
                return base.OnActionExecutingAsync(actionContext, cancellationToken);
            }
            return base.OnActionExecutingAsync(actionContext, cancellationToken);
        }
    }

另外推荐一个开源的Markdown编辑器  https://pandao.github.io/editor.md/ ,可以集成到项目中,写写接口文档。

三.StackExchange Dapper

推荐StackExchange的两款开源项目 StackExchange.Redis (https://github.com/StackExchange/StackExchange.Redis) 与 Dapper

使用Dapper,操作数据库的代码相比更简洁 ,同时也支持.NET 4.5 Task异步 ,示例具体git下来看下单元测试 https://github.com/StackExchange/dapper-dot-net ,不过要主要Dapper下的一个与MSSQL执行计划的问题 

Be careful with varchars in Dapper :http://www.codeproject.com/Articles/594133/BepluscarefulpluswithplusvarcharsplusinplusDapper

四. Quartz

使用了Quartznet,寄宿window服务,运行一直很稳定。如果想不想使用服务方式可以试试 Install-Package Hangfire 可以集成MVC或OWIN等。

活动

杭JS2014

去年参加了杭JS2014 ,基本就是分享一些关于nodejs相关的东西,不得不说阿里不仅仅是JAVA帝国还是前端江湖的缔造者。

杭JS - 2014 JavaScript中国开发者大会: 2014-6-21 ~ 22

https://cnodejs.org/topic/53473dde502e5602740078bc

2014 杭JS大会 会议盛况与技术热点现场报道(直播)

http://segmentfault.com/a/1190000000584556

杭JS 2014 演讲视频合集

https://cnodejs.org/topic/53bbc408a3ccaece73467f11

PyConChina 2014

PyCon2014 这个票是gitcafe送的,一些主题 linux的线程 协程 回调与上下文切换; py与机器学习很厉害的样子;golang 的nsq消息列队

shanghai-osc-meeting-2014

shanghai-osc-meeting   the docker way;go的持续集成

OSC上海源创会

http://115.29.174.111/shanghai-osc-meeting/

搭建服务

后面我还搭建了基于一个nodejs博客:http://115.29.174.111/ 与基于golang的git服务:http://115.29.174.111:3000/

现在

码了这么多字,都是一些零碎的东西,感觉也没啥主题,就是记录一些经历过程,年初的时候弄了台Mac Pro ; 现在在捣鼓啥呢

angularjs nodejs

objective-c golang

乱乱的,就这样子吧,关机睡觉。

时间: 2024-05-11 23:07:12

最近的一些工作总结的相关文章

关于工作中微信分享接口的bug

调用config 接口1的时候传入参数 debug: true 可以开启debug模式,页面会alert出错误信息.以下为常见错误及解决方法: invalid url domain当前页面所在域名与使用的corpid没有绑定(可在该企业号的应用可信域名中配置域名). invalid signature签名错误.建议按如下顺序检查: 确认签名算法正确,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验. 确认c

20170919关于工作以及崇洋媚外

上个周六考pet3,应该过了,高手还是很多的,旁边的小姑娘答题嗖嗖的. 因为当天还是大爷温锅的时间,所以11:00考完直接就网上约了个车回家了,开车的小伙子是我们那一村的,才95年,打算去澳洲投奔姐姐去,所以因此小伙子在新航路英语报名学习雅思可能,5万元100个小时的课程,不包过,早上从错埠岭自己租的1300的房子就去了(小伙应该是和女友一起住这个价,公寓,女友青大的,女友的同学去万达那边公司实习一个月2000),10点一直到晚上8点,上午背单词,他说他70个就到极限了,然后复习之后靠文章句子中

Java 详解 JVM 工作原理和流程

作为一名Java使用者,掌握JVM的体系结构也是必须的.说起Java,人们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言.Java类文件格式.Java虚拟机和Java应用程序接口(JavaAPI).它们的关系如下图所示: 运行期环境代表着Java平台,开发人员编写Java代码(.java文件),然后将之编译成字节码(.class文件),再然后字节码被装入内存,一旦字节码进入虚拟机,它就会被解释器解释执行,或者是被即时代码发生器有选择的转换成机器码执

关于重构工作的一点思考

最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考. 起因: 本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,后期一直保持快速前进,没有进行过实质性的重构. 具体表现: ● 分层不清,sql哪都有,dao有.service也有,就差controller没写了.同样dao也包含业务逻辑. ● sql用的是spring jdbc,并没有使用mybatis,导致sql写起来有些复杂,封装不够基本都是原始sql

如果提高工作效率(转载)

效率由心生,快速提高工作效率秘诀 来源: Veda原型  发布时间: 2012-03-19 15:13  阅读: 2348 次  原文链接   全屏阅读  [收藏] 现代人都很忙,但忙的可能没有效率,可能在"忙人"摸象,也就是瞎忙.也许你的效率可以提升20倍,也许你的激情和潜能可以提升10倍!秘诀就在于目标管理.时间管理.精力管理.如何在短时间内完成更多的事情.如何从痛苦的修行中悟道.如何尊崇内心的自由.如何有更多的时间去享受生活.如何动态平衡工作和生活?!这里有能大大提升工作效率和时

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

2017全国两会政府工作报告(全文)

2017全国两会政府工作报告(全文) "两会"并不是一个特定的机构名称,而是对自1959年以来历年召开的"中华人民共和国全国人民代表大会"和"中国人民政治协商会议"的统称.由于两场会议会期基本重合,而且对于国家运作的重要程度都非常的高,故简称做"两会".下面一起来阅读2017年政府两会工作报告! 2017年两会政府工作报告 --2017年3月5日在第十二届全国人民代表大会第五次会议上 国务院总理 李克强 各位代表,现在,我代表

用汇编来解释“计算机是怎么工作的”

本文章为<Linux内核分析>实验报告 梁永锐 原创作品转载请注明出处 http://www.cnblogs.com/liangyongrui/p/6392035.html <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " ----- 以下为要分析的c代码 int g(int x) { return x + 36; } int f(int x) { return g(x) * 4; }

记录最小化安装centos7后所做的一些工作

操作环境 1.1. 虚拟机:    产品:VMware Workstation 版本:7.1.5 build-491717 1.2.  主机操作系统:Windows XP Professional 5.1.2600, Service Pack 3 1.3.虚拟机操作系统: [[email protected] NetworkManager]# uname -a Linux RHEL7 3.10.0-327.el7.i686 #1 SMP Fri Dec 4 17:52:05 UTC 2015 i