注:本文系作者原创,但可随意转载。

***************************************************************************************

  使用规则:

  1. 名字被写入到『Death Note』中的『BUG』会死亡。
  2. 写名字的时候,如果不在笔记中记录该『BUG』的详细特征,则无效。因此,同名同姓的『BUG』不会一次全部被杀。
  3. 写完名字后如果在『人间界』单位的 40秒 内写下死因的话,会依其发生。
  4. 不写死因的『BUG』全部默认为遭到『程序员』以『键盘』击杀。
  5. 写下死因的同时,更会有 6分40秒 的时间可以记入死亡的详细情况。
  6. 『Death Note』从落入『人间界』的那一刻起就是属于『程序员』的东西。
  7. 『Death Note』的持有者可以识别『Death Note』的宿主『死神』的音貌。
  8. 使用过『Death Note』的『程序员』,既不能升入『天堂』,亦不能堕入『地狱』。

****************************************************************************************

名称:| IE11 与 Chrome v31 在文件上传控件上的差异|

==============================================================================

特征:

  ASP.NET MVC 5.O, Web项目中,需要客户上传EXCEL文件,存到WEB服务器的临时目录,处理后进行删除。

  

// ………………
if (Request.Files.Count != 0)
            {
                var file = Request.Files[0];
                if (file != null && file.ContentLength > 0)
                {
                    var filename = file.FileName;
                    if (filename.Contains("\\"))
                        filename = filename.Split('\\').Last();
                    string filePath = Server.MapPath("~/App_Data/Temp/" + filename);

// ………………

  此处,客户点击“上传”按钮后,后台获取文件名。首先获取文件对象file, 然后使用其属性FileName, 此处假定客户上传文件的本地路径是 "C:\\MyDocuments\\Test.excel", 那么在Chrome v31的环境下调试,FileName属性值是Test.excel, 而IE11下, FileName属性的值为 "C://MyDocuments//Test.excel"。 因此,在上面这段代码中,我对FileName做了处理 ,如果其包含"\\",则对其使用Split方法,将其分成字符串数组并取最后一个。

  同时,还有另外一个值得一提的是,在ASP.NET MVC下,同一个View中可能包含了其他PartialView,在进行一些操作时,可能会进行Ajax请求Get一些PartialView,但IE11下,貌似只要是Ajax的Get请求全部被缓存了起来,即使重新发起Ajax请求,页面也不会被刷新,这样一来使Ajax的Get方法失去了意义。我认为其缓存的目的是为了提高用户浏览体验及速度,但此处应该是一个失误。在Chrome下不存在此问题。不过我并未在广泛的机器环境下测试,不知道其他人是否也有同样的问题。

================================================================

名称: | 浮点数的不精确性 |

================================================================

特征:

  看书的时候发现了一个有趣的问题,过去一直都不晓得。

  

for ( double i = 0; i != 1.0; i += 0.1)
{
    Console.WriteLine(i);
    // 同 C++ 中的 cout<<i<<endl;
}

  问题就是以上4行代码的输出。

   如果没有看书并且亲自测试的话,我会认为是从 0开始,步长0.1, 输出11次,到 1.0结束。

  但实际上,这4段代码,会一直从0输出到正无穷。

  原因就是,这段代码最终会转为二进制代码进行计算,而二进制代码不能精确的表示0.1,只能精确的表示2的N次幂, 比如0.5。因此如果上述代码的步长改为0.5, 则会依次输出0, 0.5, 1.0。

=================================================================

名称: | 奇妙的delete操作 |

================================================================

特征:

  

  如图,在C++中,初始化一个指向NULL的指针,那么他指向地址00000000。

  动态分配内存给该指针,无论是什么类型的指针,指针使用完毕后,进行delete操作。

  释放内存后,指针并没有重新指向00000000,而是指向了00008123,此时p!=nullptr, if(p)==true。

  如果打印输出*p的值,程序则会出现异常停止工作。

此时,应该将p重新指向nullptr。否则,将使用p将试图进入一个已经释放掉的内存产生异常。

=================================================================

名称: | Asp.Net Web API delete操作 |

================================================================

特征:

  以前一直使用Asp.Net MVC但没有使用过Web API, 之前看了angularjs, knockoutjs这些前端MV*框架,感觉非常方便,所以最近的新项目中决定借机使用Asp.Net Web API 2.0 + knockoutjs。

  在尝试使用的过程中,GET, POST方法都十分顺畅。但唯独delete操作,一直被提示 error 405 method not allowed。

  这个问题我调试了整整一天多。期间各种BING, GOOGLE, BAIDU,大多数说的问题是iis的配置问题,需调整web.config等。

  后来我新建一个最小项目实现了delete操作。但将二者的web.config配置成一样的,还是不能解决原项目的问题。

  一个BUG一天都解决不了,网上又找不到答案,周围有大神但即便是大神没有经历过这些细节也很难帮你分析出问题所在,简直想砸电脑有木有!

  最后,在机缘巧合之下,终于发现。原来是AJAX写法出了问题 0.0。下面上代码:

  

 self.deleteProduct = function(product){
     $.ajax({
         url: "/api/product",
         data: { id: product.id }
         type: "delete",
         success: function(){
             // ....此处省略若干逻辑
         },
         error: function(){
             // ....
         }
     });
 }

错误代码

  

 self.deleteProduct = function(product){
     $.ajax({
         url: "/api/product/" + product.id,
         type: "delete",
         success: function(){
             // ....此处省略若干逻辑
         },
         error: function(){
             // ....
         }
     });
 }

正确代码

  呵呵,这两种写法的区别就是,一个直接把需要传递的参数写进URL里作为URL的一部分,另一个则在data属性中传递,则是作为表单数据的一部分。

  原谅我这一生放荡不羁js不精通,这里具体原因就不解释了,估计先记录下这个蛋疼的问题,有机会再深入研究。

  

=================================================================

名称: | MVC表单之坑 |

================================================================

特征:

  坑啊!已经被这个问题坑了估计有三次了吧!不得不记录之!

  案例:

    假设某网站首页有个登录表单,顶部导航条有个登录按钮,点开弹出模态对话框,异步加载一个登录表单PartialView,也可以进行登录。登录无非就是账号,密码。

    那么在首页我们会写一个form, 然后继续写 @Html.TextBoxFor( m=> m.UserName)  ....  @Html.PasswordFor( m => m.Password) 之类的。

    在写另一个模态对话框的时候,打开另一个cshtml文件,其中也有一个表单,也要写 @Html.TextBoxFor( m => m.UserName) ... @Html.PasswordFor( m => m.Password) 之类的。

    马蛋。 这种语法写出来的<input id="UserName" ...> <input id="Password"> ,无论是在首页View中还是在模态对话框PartialView中,只要属性名不变,他们ID就是一样的。如果你在首页调用这个模态对话框,那么就会有两个一模一样的input标签,会导致表单提交UserName这个input标签的时候总是提交html全文终最靠前的那一个。这里就需要给他们分别赋值不同的ID.。比如这么写,@Html.TextBoxFor( m => m.UserName, new { id = "index_UserName" })

和@Html.TextBoxFor( m => m.UserName, new { id = "login_UserName" }) 之类的。

    这里经常会被疏忽,然后程序又可以正常的运行。不注意的话就会产生BUG -。- 简直蛋碎=、=

    

=================================================================

Death Note的更多相关文章

  1. Educational Codeforces Round 48 (Rated for Div. 2)——A. Death Note ##

    A. Death Note time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  2. 【CF1016A】Death Note(签到)

    题意:无限页的书,每页可以写m个名字,给你一个长度为n的序列,序列为你每天要写的名字数,输出你每天要翻的页数. n<=2e5,m,a[i]<=1e9 思路: #include<cst ...

  3. Educational Codeforces Round 48

    题目地址 Edu48 A.Death Note 翻译 你有一个无穷页的本子,每一页可以写\(m\)个名字, 你在第\(i\)天要写\(a_i\)个名字,如果这一页恰好写满了,你就会翻页, 问每天的翻页 ...

  4. 用Python做词云可视化带你分析海贼王、火影和死神三大经典动漫

    对于动漫爱好者来说,海贼王.火影.死神三大动漫神作你肯定肯定不陌生了.小编身边很多的同事仍然深爱着这些经典神作,可见"中毒"至深.今天小编利用Python大法带大家分析一下这些神作 ...

  5. Codeforces Edu Round 48 A-D

    A. Death Note 简单模拟,可用\(\%\)和 \(/\)来减少代码量 #include <iostream> #include <cstdio> using nam ...

  6. 字符串(AC自动机):HDU 5129 Yong Zheng's Death

    Yong Zheng's Death Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/O ...

  7. 三星Note 7停产,原来是吃了流程的亏

    三星Note 7发售两个月即成为全球噩梦,从首炸到传言停产仅仅47天.所谓"屋漏偏逢连天雨",相比华为.小米等品牌对其全球市场的挤压.侵蚀,Galaxy Note 7爆炸事件这场连 ...

  8. 《Note --- Unreal --- MemPro (CONTINUE... ...)》

    Mem pro 是一个主要集成内存泄露检测的工具,其具有自身的源码和GUI,在GUI中利用"Launch" button进行加载自己待检测的application,目前支持的平台为 ...

  9. 《Note --- Unreal 4 --- Sample analyze --- StrategyGame(continue...)》

    ---------------------------------------------------------------------------------------------------- ...

随机推荐

  1. Java——Random类随机整数---18.10.11

    一.Random类的定义 1.Random类位于java.util包中,主要用于生成 伪随机数 2.random类将 种子数 作为随机算法的起源数字,计算生成伪随机数,其与生成的随机数字的区间无关 3 ...

  2. linux redhat 打开防火墙中的某个端口

    服务器成功监听了一个端口(如 5500),但是外面连接不进来,telnet其端口不通,解决办法如下(在root用户下): $ /sbin/iptables -I INPUT -p tcp --dpor ...

  3. python语法join函数

    Python语法中join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. vid = )

  4. JMeter学习笔记(九) 参数化3--User Defined Variables

    3.User Defined Variables 1)添加用户定义的变量 2)添加变量 3)添加HTTP请求,引用变量,格式:${} 4)执行HTTP请求,察看结果树 5)用户定义的变量,优缺点: * ...

  5. shiro笔记

    控制某一角色拥有此选项 上图 标签为shiro:hasRole表示 此时只有admin角色才拥有 系统用户管理和角色管理两个tab 页 上图 标签为shiro:hasPermission表示 此时只有 ...

  6. LeetCode 24——两两交换链表中的节点

    1. 题目 2. 解答 新建一个哨兵结点作为头结点,然后每次交换相邻两个结点.并依次将它们连接到新链表中去,再将原链表中后面的结点也串到新链表后面.直至到达链尾或者剩余一个节点,则此时返回新链表的头结 ...

  7. kaldi基于GMM的单音素模型 训练部分

    目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...

  8. Alpha阶段展示

    程序员杀产品经理祭天(SacrificePM)团队 1.团队成员简介和个人博客地址 故事 我们队伍的建立过程稍具戏剧性,大家看我们也颇为奇怪,这么一支8人队伍是怎么诞生的呢?其实我们原本分属三组,而第 ...

  9. java对数组的操作

    1 拷贝数组 数组全拷贝 数组定位拷贝 2 判断数组是否相等(每个元素都对应相等) 3 数组和集合的相互转化 import java.util.Arrays; import java.util.Lis ...

  10. ExtJS新手学习中常见问题

    1.常常出现运行之后不出现应该出现的效果. 这种情况一般是引用ExtJS路径不正确,要确保路径正确. 示例: <!DOCTYPE html> <html lang="en& ...