一些开发遇到的"小问题",你能答对多少?
我会把问题先写在前面,答案用白色字体写在后面.所以用鼠标选择文本就可以看到答案啦.
调用await后因为切换了线程环境(这种说法可能不严谨,但我只能想到这种说法),httpcontext会为null.自然取他的属性(request,response)会出现未将对象引用设置到实例的异常.
虽然据说4.5有"友好线程上下文"的说法,但是呢,当时我试了那个配置,发现装逼失败.最后用临时变量储存,await之后再赋临时变量给当前上下文.
网站
发布网站的时候,全站源代码做成一个压缩包,然后丢到公网的项目根目录里,解压.这个操作有什么问题.
整站源代码都可以下载.好开心耶.(IIS默认没有禁止访问压缩包)
为什么网站发布完第一次访问的时候很慢?
JIT(即时编译)
基础
Dictionary
public void RandomString(List<int> list)
{ Dictionary<int, string> d = new Dictionary<int, string>();
foreach (var item in list)
{
d.Add(item, "");
}
}
上述代码有什么问题?
没有判断字典的添加需要先判断key是否存在.推广一下,其实很多情况下自认为不会重复的数据结果往往都会重复,这时候得去重和判断key,两者选择一个方案.
正则表达式
这个判断正则的方法有什么问题?
public static bool IsEmail(this string str)
{
var reg = new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$", RegexOptions.Singleline | RegexOptions.ExplicitCapture);
return reg.IsMatch(str);
}
string参数为null的话正则会出错.其实这也是一个很通用的问题.如果各种引用类型为空的话,你调用他们的成员方法是要出异常的.
哪一个if的写法没有问题?
string[] a;
if (a.Any() || a == null)
if (a == null || a.Any())
第二个,因为这涉及到一个程序设计的基本概念:短路.即||/|在条件1为true的话就不会执行后面的判断.
!=null&&XX.Any()同理
而对于null用集合的any方法,显然是不合适的.
ASB.NET MVC
控制器
下图是某个控制器里某个action的写法,不考虑rows的类型和这个异常的出现.此外,这个代码片段有什么问题?

1用request[]绝对差评,不能因为便携性而如此偷懒.并且,要偷懒也是把提交内容作为action参数,模型绑定会帮你转型,如果也不会需要下文的类型转换.
2对于请求的参数类型转换写法有误,理应是tryparse,2个结果皆为true才进行下一步.该coder只考虑了请求参数不为空的问题,没有考虑请求参数的其他合法性问题.
3局部变量的声明声明顺序(list)有误.比如我们需要连接数据库的时候,应该是在所有的验证通过之后,最后调用.
4设计规范问题.很多初学者看了微软模板后认为,控制器负责业务逻辑.然而,实际上控制器应该是最薄的一层,这既是为了方便分开测试.也是MVC本身的规范.
[HttpGet]
public ActionResult Des(string json)
{
return Json(new { a = "" });
}
有什么问题?
应使用其重载,追加参数 JsonRequestBehavior.AllowGet
视图
在视图中使用HTML.action 需要注意什么问题?
该方法会走一遍请求管道,滤器也会跑过去
不能使用异步控制器方法(async Task<ActionResult> .ASB.NET vnext将会有异步组件取代.)
递归调用问题.就是这个A的子action里面返回了一个分部视图,然后这个分部视图调用了A的那个action.
这个问题提醒大家,慎用全局过滤器,慎用html.action.
如何捕捉视图的异常?
用自定义异常过滤器(HandleErrorAttribute).(好吧,我打脸了).
避免因属性变更导致的强类型视图里的字段没有更新导致的视图编译错误如何防止?
可以在编译时追加编译视图.
一个不是问题的问题
为什么我写这文章的文字符号都用半角(英文标点)
因为用全角符号写程序符号将导致无法通过编译.
之前刘兴国一段时间的揭秘网站:
据说有500关.
如果这些问题你都知道答案,那么恭喜你,你是一个"有经验"的开发人员吧.
因为我也不知道经验这玩意该咋衡量.年?好像不太合适.
这些问题都是我遇到过的,如果用年算的话,你觉得能折算成多少年?
一些开发遇到的"小问题",你能答对多少?的更多相关文章
- ios开发中的小技巧
在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...
- 带你使用h5开发移动端小游戏
带你使用h5开发移动端小游戏 在JY1.x版本中,你要做一个pc端的小游戏,会非常的简单,包括说,你要在低版本的浏览器IE8中,也不会出现明显的卡顿现象,你只需要关心游戏的逻辑就行了,比较适合逻辑较为 ...
- Android开发效率的小技巧
提高eclipse使用效率(二) 提高Android开发效率的小技巧 XML文件的代码提示 adt中也有xml文件的代码提示,为了让提示来的更加猛烈,我们还要设置一下 打开eclipse - Wi ...
- 开发一个微信小程序教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可. 2.注册成功后进入首页,在 小程序发布流程->小程序 ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 如何快速地开发一个微信小程序
如何快速地开发一个微信小程序呢?我觉得作为初学者,最好能有一个模板,然后改这个模板. 同样作为初学者,刚开始的时候我有下面的几个问题,后来通过问同学,我弄清楚了. 微信小程序可以连接MySQL或者Sq ...
- Java可视化日历(Date类、DATe Format类、Calendar类综合运用),开发可视化日历小程序
Java时间日期类综合运用,开发可视化日历小程序 由键盘输入指定格式的日期,打印这个月的日历 1.代码 import java.text.DateFormat; import java.text.Pa ...
- 全栈开发工程师微信小程序-中(下)
全栈开发工程师微信小程序-中(下) 微信小程序视图层 wxml用于描述页面的结构,wxss用于描述页面的样式,组件用于视图的基本组成单元. // 绑定数据 index.wxml <view> ...
- 全栈开发工程师微信小程序-中(中)
全栈开发工程师微信小程序-中(中) 开放能力 open-data 用于展示微信开放的数据 type 开放数据类型 open-gid 当 type="groupName" 时生效, ...
随机推荐
- Java中成员变量和局部变量的区别
java面向对象过程中,最基本的两类变量就是成员变量和局部变量 成员变量是写在类中并且写在方法外部,一般写在每个类的头部,用于初始化或者方法操作,作用域是整个类被实例化到被销毁,中间变量都可以被外部方 ...
- CStringUtf8ToUnicode
CString CStringUtf8ToUnicode( CString Utf8 ) { int wLen = 0; CString strUnicode; LPSTR pBufChar = NU ...
- mac os 显示文件列表命令 ls -a
显示正常文件列表用ls就行了,但是要是想显示隐藏的文件,需要加-a
- Redis适用于高并发的递增、递减功能
递增指令:incr(默认从0开始) 递减指令:decr(默认从0开始,递减会出现负数,这点跟memcache不一样,mc到0) 如下: 附上shardedJedisPool和JedisCluster的 ...
- Mysql 5.6.17-win64.zip配置
第一大步:下载. a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是 ZIP Archive 版的,win7 64位的机器支持这个,所以我建议都用这个.因为这个简单嘛,而且还干净. 地址见图 拉倒最下面 ...
- Android之多线程断点下载
本文主要包含多线程下载的一些简单demo,包括三部分 java实现 android实现 XUtils开源库实现 注意下载添加网络权限与SD卡读写权限 java实现多线程下载 public class ...
- Redis、Memcache和MongoDB的区别
>>Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境 ...
- angular语法:Controller As
这个东东我觉得很好哟. 数据可以在同一个页面的不同的controller之间自由穿梭... 当然, https://thinkster.io/a-better-way-to-learn-angular ...
- 面向服务的体系结构(SOA)——(1)目标与核心概念
什么是SOA? 常常听到人们拿OOP和SOA一起来说事,诸如SOA是否可以代替面向对象(OOP)或者两者比哪个更加有优势?直接回答有难度举个例子可能显得答案更容易理解.小孩子问你该认真写作业呢?还是高 ...
- C#学习笔记——Show()与ShowDialog()的区别
用Show()调用的窗体不会返回任何值,在使用form.Show()显示form以后,会马上继续执行form.Show()后面的语句.而用ShowDialog()调用的窗体会返回一个DialogRes ...