算法
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
我的解法:
var merge = function(nums1, m, nums2, n) {
var j=0;
for(let i=0; i<n; i++){
while(nums1[j] < nums2[i] && j < m+i){
j++;
}
console.log(j)
nums1.splice(j, 0, nums2[i]);
}
nums1.length = m+n;
};
最优解法:
var merge = function(nums1, m, nums2, n) {
let len = nums1.length;
nums2.forEach((num2, i2) => {
let index = nums1.findIndex(num1 => num1 > num2);
index = index === -1 ? m + i2 : index;
nums1.splice(index, 0, num2);
});
nums1.length = len;
};
后评估系统
前面总结各种架构,最终如何衡量各种架构做的结果如何,不能凭借主观性的评价,需要构建一套评估体系去评估最终结果如何。这快目前自己也不是非常清晰。
当然也有很多评估系统是评价不出来的,比如团队潜力,技术能否承担未来业务发展。但是后评估系统也分三方面去评估。
业务架构
业务会有业务的指标,这些指标可能开发不背,但是开发有责任去主动关注一些指标,并且通过技术层面去提出优化建议,目标是为了更好的推进业务。
业务数据常规有 PV、UV、转化率,下单率,下单时长等等,很多都可以通过交互和展现来提升,页面展现的不同侧重来提高转化率。根据具体的业务情况来定和前端技术相关的数据指标,通过交互和页面侧重点来提高相关数据
技术架构
可以通过各种性能指标来衡量技术架构的优劣。比如白屏时间,资源加载时间,页面间切换的时间来衡量技术架构的性能
js 报错的情况,线上 bug 情况,线上的故障的情况来衡量技术架构的稳定性。
上述这些维度网上一搜一大堆,这些维度的统计都是比较常规的,但是数据得从一定量级去衡量才有效,比如硬币问题,至少要达到一万次的实验量级概率才能基本稳定,所以这些数据一定要在一定的量级下才有意义。
团队架构
团队架构的衡量更多是项目管理的衡量,完成需求的情况,有没有 delay,测试 bug 的情况,代码 review 的情况等等
总结
这块自己的实践目前还不足,这些衡量并非为了衡量结果而衡量,而是通过衡量发现问题,然后推动方案去解决问题,最终提升产品品质。
一开始应该有个用户产品期望,然后有个我们自身对于产品的一个期望,我们的期望比用户的期望高,就会给用户带来惊喜,如果我们的期望比用户低就会失望。
后评估系统实际上是评估现状,衡量现状和产品期望的落差,现在高于产品期望就是产品收益高,低于落差就是应该去查找问题,解决问题,将实际产品价值体现出来。