Fork me on GitHub
摘要: 关于ASP.NET的知识太多了,这里只列出一些问题留作自己下次思考并随时会补充一些知识点。页生命周期关于asp.net的页面生命周期先看两幅我收藏的图片,第一幅图片有点瑕疵,第二幅图片信息量少了点,但结合两张图片能说明很多东西。再提几个自己比较关心的问题:页面声生命周期在整个http请求中的位置?控件的事件执行顺序是什么?控件什么时候进行数据绑定的?ViewState的TrackViewState是什么时候开始的?什么时候加载ViewState保存的值的?控件是如何追赶生命周期的?只针对动态创建的控件?服务器控件关于服务器控件同样也提几个问题留给自己思考(答案)什么是控件树?html控件,ht 阅读全文
posted @ 2013-01-04 18:34 zhanjindong 阅读(415) 评论(0) 推荐(1) 编辑
摘要: 以下内容都是本人之前学习的一些笔记很多是摘自网上并非完全原创,特此申明。 最简单的一句js: <html> <body> <script type="text/javascript"> document.write("Hello World!"); </script> </body> </html> 阅读全文
posted @ 2013-01-02 16:28 zhanjindong 阅读(554) 评论(0) 推荐(0) 编辑
摘要: 以下内容摘自网上各处本人只是总结并非完全原创,特此申明。文档类型<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">这句话标明本html文档是过渡模式,过度模式浏览器对XHTML的解析比较宽松,允许使用HTML4.01的标签,但必须符合XHTML的语法。另外还有Quirks模式(有的翻译为怪异模式)和严格(Srick)模式。严格模式也叫标准模式:<! 阅读全文
posted @ 2013-01-01 22:28 zhanjindong 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 毕业之前在学校用CMS做过两个网站,一个ASP(dedecms)的一个PHP(phhpcms),那时候纯粹兴趣使然做出来还是蛮有成就感的。后来实习,毕业到正式工作到现在有9个多月就一直没有再接触web开发了,一些基础知识也忘记的差不多了。其实刚开始进公司的时候因为我在的项目组属于运营支撑,部门的几个网站也属于我们维护的,我以为我肯定是要先走网页制作这一步的,很多刚毕业的本科生也是从这一步走来的,但说实话很多人包括很多开发自己对web开发都是嗤之以鼻的,再加上调网页是非常繁琐的而又被认为是没什么技术含量的活,可谓吃力不讨好,所以妄自菲薄,自暴自弃乃至最终因为不堪忍受只是弄弄网页而选择跳槽的人不在 阅读全文
posted @ 2012-12-30 16:49 zhanjindong 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 原文这篇文章要介绍的,是我作为专业程序员这些年来学到的能真正提高我的代码质量和整体工作效率的10件事情。1. 永远不要复制代码不惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的同事在读你的代码时产生困惑。而重复的代码如果在一个地方修改,在另外一个地方忘记修改,就会产生到处是bug,它还会使你的代码体积变得臃肿。现代的编程语言提供了很好的方法来解决这些问题,例如,下面这个问题在以前很难解决,而如今使用lambdas却很好实现:/// <summary>/// 一些函数含有部分重复代码/// </ 阅读全文
posted @ 2012-12-29 19:04 zhanjindong 阅读(206) 评论(0) 推荐(1) 编辑
摘要: 2、线程池线程阻塞上一篇提到我为了防止定时器事件重入而加了锁。某一天我再打开监控页面发现监控频率为27秒的监控项的最后监控时间都停止在了前一天晚上的零点左右。在本机也没有重现这种情况,我觉得可能是偶然现象,但持续观察了几天之后发现持续运行24小时左右这种情况是毕现,更严重的情况是所有的定时器貌似都是跑着跑着跑“累了”就不跑了,而且通过任务管理器查看发现进程创建的线程达到了200多个,至于原因我的第一反应是死锁导致线程池的线程被阻塞(block)了,因为前面我为了防止出现定时器事件重入而加了锁。而当线程池的线程被阻塞,线程池会创建额外的线程。锁和线程同步以前交通不发达村与村之间只有一条马路相连, 阅读全文
posted @ 2012-12-27 10:33 zhanjindong 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 我们是多么希望我们写的代码一直完美的运行下去,但是这个行业的一条真理就是“没有不存在bug的软件”。最近这几个月一有空就打开我写的代码,目的只是为了苦苦寻找各种bug所在,而所有这些bug必定都源于我学艺不精。在这个过程中我发现我是多么的“善变”。截至到目前仍然没确定我干掉了所有bug,但是我得感谢它们和我的“无知”。好了废话到此结束,把我的debug过程和大家分享下。背景这些bug都出自一直在做的一个用在我们系统内部的监控组件,主要用来监控一些组件比如业务接口、sqlserver、redis、mongodb是否运行正常。主要抽象出来有以下几个对象:sqlserver之类抽象为监控对象(Mon 阅读全文
posted @ 2012-12-23 20:41 zhanjindong 阅读(752) 评论(0) 推荐(0) 编辑
摘要: ServiceStack.Redis是Redis官网推荐的C#客户端(这里下载),使用的人也很多。最近项目中也用到了,网上查了一下使用这个客户端的方法大概有三种:每次访问新建一个连接,使用连接池和使用长连接(可以看这里)。我一开始使用很简单(我用的版本是3.9.32.0)封装了一个RedisHelper类,内部每次访问new一个RedisClient,并每次用完dispose掉。public class RedisHelper : IDisposable { public const string DefaultHost = "localhost"; publ... 阅读全文
posted @ 2012-12-10 20:26 zhanjindong 阅读(15452) 评论(7) 推荐(1) 编辑
摘要: public class InterfaceKey : IComparable { /// <summary> /// 接口名称 /// </summary> public string InterfaceName = string.Empty; /// <summary> /// 产品标识 /// </summary> public string Aid = string.Empty; /// <summary> /// 版本标识 /... 阅读全文
posted @ 2012-12-06 12:02 zhanjindong 阅读(1677) 评论(0) 推荐(0) 编辑
摘要: 今天用.net写一个小程序,利用System.Net.Mai通过OutLook发送发送邮件,有两个附件一个是Excel一个是txt,结果奇怪的现象发生了,接收后发现excel附件名称变成了后缀为.dat的乱码,但txt的正常。在网上各种搜都没有解决,结果自己试尽各种格式的名称最终发现原来是名称太长的缘故。 阅读全文
posted @ 2012-12-05 19:20 zhanjindong 阅读(1357) 评论(0) 推荐(0) 编辑
摘要: IDisposable模式实现的目的:Dispose方法释放托管资源和非托管资源,析构函数释放非托管资源,保证了显示的调用Dispose后不会在调用析构函数并保证多次重复调用Dispose不存在问题。实现IDisposable接口后尽量保证手动的调用Dispose或Close来释放资源(托管资源和非托管资源),不要期望析构函数,因为托管资源的释放都是由GC来控制的,但是GC到底什么时候释放和释放的顺序是不确定的,析构函数总是GC在释放托管对象的时候才调用的,那时候再指望它释放掉非托管资源可能为时已晚,而且析构函数的实现还会延缓对象至少到下次GC回收垃圾才被释放(Finalization lis 阅读全文
posted @ 2012-11-10 12:21 zhanjindong 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 摘要:1)“引用必须用左值来初始化”基本上着意味着引用的初始化物必须具有一个地址,也有一个值(→常见错误6)。不过谈及指向常量的引用时,事情就开始变得复杂了。指向常量的引用仍然必须用左值来初始化,不过编译器很乐意——在特定的情况下——为此从一个非左值出发来创建一个左值(临时对象):const int &r3=12;//没问题引用r3指向编译器隐式分配内存并创建的匿名int类型对象。一般情况下,这种编译器的生存期持续到权表达式结束处①。不过“在这种特例下,标准网开一面,保证临时对象会和以其为初始化物的引用共存亡”。“请注意该对象与以其为初始化物的引用之间并无联接纽带”。②2)“编译器还会 阅读全文
posted @ 2012-09-30 17:14 zhanjindong 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 首先要理清几个术语:常量指针(const pointer)和指向产量的指针:常量指针(const pointer)是指一个拥有常量值得指针,其中并不包含“其指涉物是否为常量”的任何暗示。const char *pci;//指向常量的指针char *const cpi=0;//常量指针char const *pci2;//仍然是指向常量的指针const char * const cpci=0;//指向常量的常量指针。char *ip;//普通的指针“C++标准规定允许进行‘增加常量性’的(无条件)类型转换”。举例来说,我们可以把一个指向非常量的指针复制到一个指向常量的指针。这样我们就可以——当. 阅读全文
posted @ 2012-09-30 17:13 zhanjindong 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 摘要:1)“字面常量没有地址,永远不能改变其值”③2)关于左值和右值得理解误区:左值并不是指能放在赋值号左边的值,右值自然也不是指能放到赋值号右边的。左值可以放在赋值号右边,但右值一定只能是在赋值号的右边。但左值也不一定能放在赋值号的左边:const int i;对于常量i是不能放在赋值号的左边的,但其的的确确是个左值,它是一个不能改变的左值。正确的理解是:左值是“能放置值得地方”,而右值就是没有与之相关的地址的值。3)关于常量性的理解:int i=10;const int *ip=&i;i=10;//没问题,约束的不是i的一般操作,而是通过ip对i的操作*ip=13;//错误“con 阅读全文
posted @ 2012-09-30 17:12 zhanjindong 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 很久以前收藏的原文地址找不到了。单继承对象内存分配:#include <iostream>using namespace std;class Base1{public: long ibase1; int ibase12; Base1():ibase1(10),ibase12(100) {} virtual void f() { cout << "Base1::f()" << endl; } virtual void g() { cout << "Base1::g()" << endl; } vi 阅读全文
posted @ 2012-09-25 20:57 zhanjindong 阅读(381) 评论(0) 推荐(0) 编辑
TOP