技术填补-问题1
循环, 判断质数,放到结果集中
循环方式.筛选法
function findPrime(number) {
const result = []
for (let i = 0; i < number; i++) {
let m = 0;
for (let j = 0; j < i; j++) {
if (i%j===0) {
m = 1
break
}
}
if(m === 0 ){
result.push(i)
}
}
return result
}
function prime(number){
const result = new Array(number).fill(1)
const let = result.length
for(let i = 2;i<=number;i++){
let m = 2;
let middle = m * i
while (middle < len) {
result[middle] = 0
m ++
middle = m * i
}
}
return result.map((item, index)=>{
if (item && index > 1) {
return index
}
}).filter(item => item)
}
test.js
const num = 100000
console.time('start');// 打印时间
console.log(findPrime(num));
console.timeEnd('start');
技术填补-问题2
判断过多,体积过大,不好查找问题在哪
演变为:责任链模式
方式1
function judge(a) {
if(a > 100){
return 100
}
if(a > 50){
return 50
}
if(a > 20){
return 20
}
if(a > 10){
return 10
}
return 0
}
方式2
理解为,
如果 大于100 ,将交给下一个函数实现,
如果大于50, 将交给下一个函数实现,向下传递,直到返回0结束
…
优势:
function is100(a) {
if(a > 100){
return 100
}
return is50(a)
}
function is50(a) {
if(a > 50){
return 50
}
return is20(a)
}
function is20(a) {
if(a > 20){
return 20
}
return is10(a)
}
function is10(a) {
if(a > 10){
return 10
}
return 0
}
技术填补-问题3
层级多后,层级变多, props,传参不利于参数传递,不利于逻辑定位
使用全局状态管理方式实现参数传递,
减少了props的传递流程, 并且清晰了所有参数内容,将从那里进行修改.
技术填补-问题4
技术填补-问题5
所有设计都是面向功能开发,并没有预留扩展与接口, 这样在做新功能时候,需要兼容旧功能的功能,
为之前的旧功能提供兼容版本, 兼容版本与当前版本可能相背,并不能按照之前的架构设计,进行设计,而要兼容旧功能
通过阶段性重构,将旧功能变为新功能,让旧功能符合新的架构设计内容,之后在进行新功能开发时候,便没有架构设计的差异,按照当前的架构设计,来进行功能开发
技术填补-后果1
技术填补-后果2
技术填补-后果3
容易陷入 维护旧功能---->开发新功能---->兼容旧功能---->维护旧功能---->开发新功能…这样的恶性循环
直到旧功能维护时间过长
技术填补—解决方案1
非常优秀的架构设计,兼容旧功能的开发, 兼容之后新功能开发,并不因为架构设计时间很长,而导致拖慢开发速度
简练精简的内容, 预留接口,扩充接口,不改变之前架构设计
技术填补—解决方案2
针对业务情况进行纠错,专注项目, 没有过多设计与没有注重到的情况
方便业务运行,与纠错, 业务查找问题
技术填补—解决方案3
技术填补—解决方案4
技术填补—解决方案5
技术填补—解决方案6
处理技术债务, 学习很多收益
等产品上线后,开发就没有那么紧急了, 这个时间大家就可以找个时间
处理技术债务,一边建立感情,一边品味下原来的代码,这种感觉及其酸爽