1.看看他们的作品
可以要求看一些程序员已经完成的作品。花一些时间来研究他们的项目。指出你喜欢和不喜欢的地方。也许他们建立web应用是很快,却有一些奇特之处限制了用户密码。问问他们是什么导致他们做出这样的决定。
任何形式的软件开发,无论是web、移动app,都能找到最佳的折中方案。听听开发人员面临的各种权衡和取舍,以及他们解决问题的方法,这对你评估他们今后的表现是非常有价值的。
如果你自己本身对代码了解得不多,那么不妨挖掘一下开发人员的GitHub账户,看看他们写的代码,做过哪些项目。通过代码能让你从技术的角度确定他们是否是一个合适的选择。
当你查看自由职业者的GitHub时,下面这些要点是你应该要特别注意的:
语言:此开发人员是只使用一两种他所青睐的语言呢,还是许多不同的语言都有涉足?找一个匹配项目的专业型人才能快速推动项目的进展,而有着丰富经验的人才则能够提供更适合现实工作的相关建议。
注释和文档:代码注释写的如何?自由职业者的性质意味着他的代码很有可能需要转经其他人之手,所以其代码是否友好就是关键了。如果答案是否定的,那么你就需要三思了。有的开发人员认为,自文档化的代码就不需要任何注释了。呵呵,如果没有注释,你怎么确保代码的可读性呢?
是否参与过其他项目?理解别人的代码是个难题,但是这是个必要技能,特别是你如果想要聘请开发人员参与到现有的代码库中去的话。所以如果他们已经参与过其他项目,促成过开源项目,那么他们写出可维护代码的可能性更大,因为他们知道这样做的重要性。
2.了解他们如何学习以及学什么
无论是实践还是现实中使用的技术,软件开发的变化速度是非常快的,所以如果你选了一位依然停留在10年前老技术的开发人员,那么你将会错过很多可以让你的项目更好、更快、更易于维护的工具和技术。
问问他们是如何学习新事物的,最近学了什么有助于开发的内容,从学习中收获了什么,接下来想学什么以及为什么。
即使你并不熟悉相关细节,你也可以从他们的回答中了解他们是否对这一行业有着充沛的热情和好奇心。虽然说,好奇心害死猫,但是一般说来,一个拥有着好奇心的开发人员对项目总归是利大于弊的。
3.和谐的沟通
沟通可以成就项目,也可以破坏项目。所以请确保你和开发人员都能用一种双方都认可的方式和频率进行沟通交流。大多数开发人员都有常用的通讯工具。你先看看你是否能用。如果不能的话,那么应该确保开发人员能够适应你提出的替代工具。
此外,你还需要问一问开发人员大概多久会与你沟通。如果你听到的回答是,“每个里程碑结束之时说一下”。那么你就需要注意了。这样的频率是有风险的。最后出来的结果可能与你原先设想的完全南辕北辙。
定期查阅工具(至少每周一次)可以修复一些小误会,以避免最后成为大麻烦。
4.通过项目来测试他们
问问题和看代码只能让你了解一个开发人员很琐碎的一面。要想真正了解与他们合作的感觉,最好的办法是通过实际的项目测试一下。
所以如果可以的话,将你的项目掰出一小块来,然后一起合作来解决它。当然最好能够支付他们报酬。这么做的好处是:
测试风险低;
即使最后不能一起工作,也有一定的成果;
如果你愿意支付公平报酬的话,那么你们双方就是互惠互利的。
我之所以提及最后一点,是因为有的企业会要求开发人员建立一个小的测试项目以评估他们和他们的工作作风,而不付出酬劳。我认为这并不是一个好方法。没有人愿意成为实验对象。而且如果一切顺利的话,你们以后将成为合作伙伴,所以不要因此而让对方心生芥蒂。
在测试期间,请睁大眼睛好好观察,看看该开发人员有没有什么你不能容忍的行为。
5.仔细审查
如果项目很紧迫,你没有时间采取上述举措,那么至少做一下测试。可以让开发人员来构建大型项目的某一片段。这么做不但风险低,而且不浪费时间。即使最后你并不满意,还是需要再找其他的合作伙伴,所耗费的时间和资金也更少。
当然,如果一开始就进行挑选,选择余地肯定会大得多。不过,总而言之,要想找到适合的开发人员,你应该尽可能地睁大你的眼睛。
1.后端代码的规范
if else语句判断 勤判断
迭代器遍历数据
返回数据模板
Map<string,object>
Map.put(" " , );
注释文档
sqlMapper语句写通用
增加个人的代码质量
接口明确 js代码正确
前端js代码
a 标签中 href=javascript:edite(); 点击事件edite
click
onclick
弹出页面 end 弹窗结束后执行的方法
layer.open({
content: "提现成功,请耐心等待3-5天",
skin: 'msg' ,
time: 2,//2秒后自动关闭
end:function(){
closeAll();
}
});
跳转页面
window.location.href="${S_URL}/toMoney";
刷新本页面
window.location.reload();
截取文字等 substr(0,4);第一个 取前4个
spilt(#); 根据#号分开字符串
2.js各种取值
文本 text(); html();
value val();
单选取value值 ('input:radio[name="***"]:checked').val();
多选 遍历取值
obj = document.getElementsByName(fullName);
check_val = [];
for(k in obj){
if(obj[k].checked)
check_val.push(obj[k].value);
}
class 取值
$(".lv_select_active").attr("value");
秒杀时间根据class取值
//秒杀倒计时 seconds数据库取到的值
function setTime(){
if(parseInt($(".lmFSG_countdown_time").attr("seconds"))>=0){
var value=$(".lmFSG_countdown_time").attr("seconds");
$(".lmFSG_countdown_time").prev().text("倒计时:"); /** prev 上一级的标签 兄弟标签**/
$(".lmFSG_countdown_time").attr("seconds",Number(value)-Number(1));
}else{
$("#btn-seckill").removeAttr("disabled");
$("#btn-seckill").css('background','');
var value=$(".lmFSG_countdown_time").attr("restSeconds");
$(".lmFSG_countdown_time").prev().text("秒杀已开始,剩余:");
$(".lmFSG_countdown_time").attr("restSeconds",Number(value)-Number(1));
}
$("._h").text(parseInt(value/3600));
$("._m").text(parseInt(value/60%60));
$("._s").text(parseInt(value%60));
if($(".lmFSG_countdown_time").attr("restSeconds")<=0){
window.location.reload();
return;
}
setTimeout(setTime,1000)
}
3.mui开发注意
app 开发
mui.js
$(function(){
mui.back = function(){
window.location.href="${S_URL}/personal/data";
}
mui('body').on('tap','a',function(){
if(this.href != ""){
window.top.location.href=this.href;
}
});
$.post("${S_URL}/about/selectAboutHuaYu",{},function(data){
console.log(data);
$("#userPhoto").attr("src",data.info.logo);
$("#aboutHua").html(data.info.about);
},'json');
})
不引mui.js 就要写
document.addEventListener('plusready', function() {
var webview = plus.webview.currentWebview();
plus.key.addEventListener('backbutton', function() {
webview.canBack(function(e) {
if(e.canBack) {
webview.back();
} else {
webview.close(); //hide,quit
//plus.runtime.quit();
}
})
});
});
bootstrap 按钮
白色 btn,
浅蓝色 btn btn-primary,
深蓝色 btn btn-info,
绿色 btn btn-success,
黄色 btn btn-warning,
红色 btn btn-danger,
黑色 btn btn-inverse,