😊前面两篇讲述的,简历、面试,那么这一篇将会告诉你,怎么练习。人的记忆都是线性的记忆,对于大部分人来讲,笔、背、看,都是绝对正义的方法。javascript
"局限"。面试了不少人,发现不少萌新甚至一些3年经验以上的人,都有一个误区,那就是太过局限本身。把本身局限在前端,局限在React、Vue、Css、ECMAscript、Node。举个例子,不知道多少人还记得当年很火的ActionScript。当年大部分网页的交互,都是用这个完成的。惋惜最后被html+javascript+css给干死了。flash工程师们,我并非要诋毁大家,可是就如今的市场而言,确实缩水了。我可不敢保证如今的前端,会不会步入ActionScript的后尘。世事难料,谁知道呢。css
"为了钱"。我不排斥为了钱,转行来作前端的人,你们都是要恰饭的嘛。就算你只是为了讨生活,也请敬畏这门技术。不要张口就来,夸夸其谈。你面对的老大不见的都是不懂行,你面对的就是一位开发了N个项目+保持长久学习的人。既然为了钱,那么你更加应该保持旺盛的学习精力。学好ts,工资+1k,学好node,工资+3k,学好react,工资+1k。学好算法,工资+5k,学好网络基础,工资+5k…...html
"ctrl+v/ctrl+c"。复制/粘贴的代码,其实一点问题都没有,在一些特殊场景之下,这是很实用的技巧。例如:短线项目、快速上线项目。可是请概括总结,沉淀出本身的代码。当你提炼出一些符合当前pm逼数的代码,我相信你的工做会更加游刃有余。前端
例子:java
Q:
ES6方法Object.getOwnPropertyNames、Object.keys、for...in三者之间的区别?
A:
- Object.getOwnPropertyNames:获取对象可枚举和不可枚举的属性名
- Object.keys():获取对象可枚举的属性名
- for...in:遍历对象可枚举属性
扩展:
- 什么是可枚举属性,
- 什么是不可枚举属性
- 如何设置
- 用途
参考:
- [Object.getOwnPropertyNames()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames)
- [Object.keys()](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys)
- [for...in](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/for...in)
复制代码
将一个问题拆分为Q、A、扩展、参考。养成一个习惯,那就是不仅是回答问题,也要思考问题会被如何扩展。通常来讲,一个正常的面试官,最多只会将一个问题扩展三次。当扩展到第四次时,大部分人都很难回答出来。你能够尝试一下,将一个问题从深度扩展四次以后的状况会是怎样。node
例如:react
// 初次业务
// 简单的input输入框,btn提交
export default function Search(){
let [val,setVal] = useState('');
function handleEmit(e){
props.emit(val)
};
function handleChange(e){
setVal(e.target.value)
};
return(
<>
<Input detailValue={value} placeholder='用户名' name='value' onChang={()=>handleChange(e)}>
<Button onClick={()=>handleEmit()}>提交<Button>
</>
)
}
复制代码
// 增长业务
// 增长搜索条件,根据手机号搜索
export default function Search(props){
let [val,setVal] = useState({
value: '',
phone: '',
});
function handleEmit(e){
props.emit({
value: e.target.value,
name: e.target.name,
})
};
return(
<>
<Input defaultValue={val.value} placeholder='用户名' name='value' onChang={()=>handleChange(e)}>
<Input defaultValue={val.phone} placeholder='手机号' name='phone' onChang={()=>handleChange(e)}>
<Button onClick={()=>handleEmit()}>提交<Button>
</>
)
}
复制代码
当这种业务无限扩展的时候,每次改具体的业务代码是一件特别乏味的事情。你彻底能够程序员
const map = [
{
value: '',
placeholder: '',
type: 'input',
name: 'phone'
},
{
value: '',
placeholder: '',
type: 'input',
name: 'value'
}
];
<Inputs map={map} emit={(e)=>{}}/> 复制代码
这就是分析业务,在可预见的状况下,扩展你代码的可用、健壮、稳定。UI = render(data)
是阶段最适合GUI编程的方法,没有之一。面试
千言万语,就是一个字,练,给我往里死练。武功秘籍目录以下,练去吧。算法
长路漫漫其修远兮,但愿你不仅是作一个程序员,但愿你学会这种思惟,再将来的生活里乘风破浪。人性很复杂,代码很简单。加油⛽️。