新人培训记录

时间:0731-0804(第四周)

1. 新人计划

1、第一天:技能线继续深入学习React,接入项目“个人履历”参与开发
2、第二天:了解React相关的Api,接入项目“个人履历”参与开发
3、第三天:了解React相关的生命周期、事件及Refs,接入项目“个人履历”参与开发
4、第四天:了解Karma,深入使用Mocha,接入项目“个人履历”参与开发
5、第五天:深入了解Babel,了解虚拟DOM,接入项目“个人履历”参与开发

2. 问题

0731

  1. 修改隐私设置bug
  2. 学习异步编程 promise generator async

问题反馈

  1. 这个用generator函数的意义是什么,不用的话也是可以打印出来
var arr = [1, [[2, 3], 4], [5, 6]];
var flat = function* (a) {
  var length = a.length;
  for (var i = 0; i < length; i++) {
    var item = a[i];
    if (typeof item !== 'number') {
      yield* flat(item);
    } else {
      yield item;
    }
  }
};

for (var f of flat(arr)) {
  console.log(f);
}
// 1, 2, 3, 4, 5, 6

答:Generator就是一个迭代器,通过不断的执行next,然后向下执行代码,并不是异步的,只是配合Promise更好的处理异步请求而已

0801

  1. 用两种方式完成异步编程思考题
  2. 学习react API内容

问题反馈

  1. 思考题如何用async的函数来实现,async会自动运行,如何在读取5个json文件的过程进行处理
    async函数里面使用await来处理各个promise的继发操作,也就是说下一个await可以读取上一个await操作的值,如果说5个json文件处理是一起的,则可以直接在async函数里面使用Promise.all,因为Promise.all返回的也是个promise,如下例
async function readAllFile() {
  const [json1, json2] = await Promise.all([readFile('./1.json'), readFile('2.json')])
}

0802

  1. 学习fish ui中的弹窗以及表单和一些输入框

问题反馈

  1. ui中有一些自带样式,都要改为和PSD图一样的吗?就是去修改ui生成的ant-那个classname吗

可以复写ant 的样式,但要注意对组件样式的编写是全局的,如果只对某一个模态框某一个输入框可以通过加className
答:如果使用第三方组件,可以查询组件中的classname,复写,这对没有使用css module的代码是有效的

  1. fish form中的 this.props.form无法获取
    阅读文档不够仔细,需要加入create即可
AddWorkForm = Form.create({})(AddWorkForm)

0803

  1. 学习react 事件、refs等内容,完成两个弹窗

问题反馈

localstorage中如果要存储数组、json对象等内容,需要转换为字符串,利用JSON.stringify和JSON.parse

  1. 现在要对li增加click事件,但这个事件无法获得li的文本内容 li用获取真实dom的值 还是 用一个组件
    答:正常来说,li里面的值可以通过一个变更绑定到state中,而li的click事件就可以直接引用state的变量,不需要去操作dom

3. CodeReview

http://git.sdp.nd/213520/ND-FE/tree/async

  1. 在使用数组的forEach前一般会判断下是否为空,否则就会直接抛出异常
    如 json && _.isArray(json) && json.forEach(...)
    同埋,使用数组的其它可能产生异常的操作前都要进行相关异常的处理
  2. 在react作业的index.js中,并未使用到'react',所以可以不用在这里引用import React from 'react'

http://git.sdp.nd/213520/ND-FE/tree/react

时间:0724-0728(第三周)

1. 新人计划

第一天:根据上周的学习总结并复习,分析及CodeReview之前的代码

第二天:按技能组路径学习React知识

  • 作业:开始接入项目,每天抽出2小时,进行项目开发:了解Vue

第三天:按技能组路径学习React知识

  • 作业:开始接入项目:隐私管理台开发部分模块

第四天:按技能组路径学习React知识,并把之前支持组作业按React改造

  • 作业:开始接入项目:隐私管理台开发部分模块

第五天:按技能组路径学习React知识,并把之前支持组作业按React改造

  • 作业:开始接入项目:隐私管理台开发部分模块

周思考题:深入实践异步编程

请自行先创建两个.json文件

person.json 人员列表,里面有5000个人员,cid是身份证号,name是人员名称,did是部门ID
dept.json 部门列表,里面有1000个部门,did是部门ID,name是部门名称,pid是上级部门ID
用多种异步的方式读取上面两个文件,并生成如下字符串
部门(全路径名称)/人员名称
注意:每次只能从person中取50个人员
要求有三种实现方案

2. 成长总结

3. 作业汇总

0724

主要内容

  1. 完成新增作品渲染到页面
  2. 重新编辑新增作品逻辑

问题反馈

  1. 无法给列表中的li增加事件,jQuery中动态加载的元素增加事件必须用on
$('#authorname-add-list').on('click','li',function(){
})

答:是的

  1. utils方法中 函数参数中的fn的作用
function mySort(arr, columnName, fn) {})

答:比如这个函数,要正序还是逆序,需要传入fn来决定

  1. 要往页面中添加作品,一个作品的样式和结构比较复杂,应该如何添加
    用clone方法
    答:clone是比较方便的方式

0725

主要内容

  1. 根据题目修改第三周作业,主要加入回调函数
  2. 了解数据双向绑定,学习react

问题反馈

  1. react组件是不是应该从大的开始写,再抽离小的
    答:理论上来讲,进行组件抽离,有些人喜欢从下向上,有些喜欢从上向下,这个跟据个人爱好,如果是最佳实践的话,应该先在早稿上似定各组件的层次,及先设计出来,再进行编码,这样写代码的时候,实践上你已经把小组件抽离出来了
  2. 改造作业自己重头搭建一个react项目还是可以用create-react-app
    答:如果是入门,一步一步来,按教程上不使用工具create-react-app,而直接手写代码是比较好的,可以一步一步了解一些包的安装及使用。建议初学者不直接使用create-react-app

0726

主要内容

  1. 导师进行codereview 修改前四周的代码
  2. 在作业中使用react,完成静态页面部分

问题反馈

  1. git push的时候报错
Counting objects: 28, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (28/28), 102.79 KiB | 0 bytes/s, done.
Total 28 (delta 1), reused 0 (delta 0)
error: RPC failed; HTTP 500 curl 22 The requested URL returned error: 500 Internal Server Error
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date

这是由于我要用压缩过的图片来替换原来项目中所有的图片,在push的时候文件太大报错。 需要到项目中的.git 下的config 文件修改
URL 的协议

url = http://git.sdp.nd/213520/ND-FE.git

改为

url = git@git.sdp.nd:213520/ND-FE.git

0727

主要内容

  1. 完成作业react 部分路由改造
  2. 接入项目,完成隐私模块新增和编辑

问题反馈

react-router 的 link 报错
用新的写法 引入

import {Link,Route,BrowserRouter as Router} from 'react-router-dom' 

<Router>
    <section className="works">
        <Route path="/mine" component={Mine} ></Route>
        <Route path="/classes" component={Classes}></Route>
    </section>
</Router>

答:需要注意各个模块的引入

0728

主要内容

  1. 完成隐私模块新增和编辑,修改代码规范
  2. 学习异步编程,先用promise实现

4. 问题答疑

5. 能力评估

6. 导师点评


时间:0717-0721(第二周)

1. 新人计划

第一天:根据上周的学习总结并复习,实现一个博客页面的制作

  • 作业1:视频1视频2,参考上面视频,写一个博客页面,并附上git地址

第二天:学习模块化前端编程,了解npm、nodejs、webpack等工具,了解前端单元测试mocha,深入理解Javascript并实现一些工具类的npm包

  • 作业1:参考上面记npm包开发过程例子,实现一个npm包,内容同例子
  • 作业2:参考Java的Calendar时间类,用javascript实现一个Calendar时间工具类,并发布npm

第三天:复习并巩固js基础,webpack联系,了解数据绑定原理

  • 作业1:见如下代码,分析最终打印结果、原因,以及如何打印如"My Object",并形成文档
  var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
  console.log(object.getNameFunc()());

第四天:今天按技能组路线学习

  • 作业1:实现技能组作业
  • 作业2:JS闭包、EventLoop等基础示例
  • 请看下面代码,并解释输出结果
for (var i = 0; i < 5; i++) {
  console.log(i);
}
  • 再看下面代码,并解释输出结果
for (var i = 0; i < 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000 * i);
}
  • 如何改造上面代码,可以实现输出0,1,2,3,4呢?
  • 再看如下代码,并解释输出结果
for (var i = 0; i < 5; i++) {
  setTimeout((function(i) {
    console.log(i);
  })(i), i * 1000);
}
  • 再看如下代码,并解释输出结果
setTimeout(function() {
  console.log(1)
}, 0);
new Promise(function executor(resolve) {
  console.log(2);
  for( var i=0 ; i<10000 ; i++ ) {
    i == 9999 && resolve();
  }
  console.log(3);
}).then(function() {
  console.log(4);
});
console.log(5);

第五天:今天按技能组路线学习

  • 作业1:使用jQuery完成技能组作业

2. 成长总结

  • 0717 JS和CSS的基础学习、实现瀑布流页面、完成了一个H5和CSS3的博客
  • 0718 学习npm包开发全过程、前端单元测试moch,跟着教程实现一个包发布;动手用js实现一个dateUtils工具类,包含一些常用的时间处理方法,并发布
  • 0719 复习巩固js基础,主要学习上下文栈和作用域,完成思考题,学习webpack,完成16个小例子,并形成文档;将博客页面用webpack进行打包
  • 0720 js深入系列 主要学习执行上下文和闭包,理解思考题,完成技能组任务到第三周内容
  • 0721 完成技能组作业,利用jQuery对dom操作,实现增加作品

3. 作业汇总

4. 问题答疑

  • 0717
  1. 为什么需要加call,call的作用
    解答:call其实是变更作用域,举例来说object1.method.call(object2),这样就相当于让object2继承object1,这样object2就可以直接调用object1的method方法,另外如果method里面有this的话,这个this就是object2了,而不是object1。所以通常来说,一种就是实现没有的方法,一种就是改变this的作用域指向
  • 0718
  1. 写好一个npm包后,无法publish
    解答:由于之前按公司的源设置了npm源,导致无法publish到npm上,所以安排cnpm,源指向公司,再修改npm为默认源,现在可以上传
  • 0719
  1. webpack中的load是啥,没用好像也可以加载
    解答:webpack核心是模块加载和插件,模块加载把所有文件都当成资源,通过一定的加载器加载并统一处理,而插件就是让功能更丰富require(‘./main.css’) 需要loader才能被识别,同理图片等
  2. 可是发现没有加这个模块热替换, 修改完内容也可以不用刷新 页面就改动了
    解答:教程是2.0的,安装的是webpack3.3,好像已经改成默认HRM,不需要配置了
  • 0720
  1. script执行时,遇到setTimeout为一个宏任务源
    new Promise实例,第一个参数构造函数会执行,而then会被放到微任务源的队列中,for循环不会放到任何队列中,代码会依次执行
    所以顺序为23541
  • 0721
  1. jQuery click事件会执行两次
    解答:问题的根源定位错了,这个主要是解答如何有效的定位问题,尽量在疑点处定位debugger,然后再逐条debug,后定位为.class的获取错误
  2. jQuery的.class选择器
    解答:优先使用#id选择器,一是速度快,二是不会重复(或重复少)

5. 能力评估

  • 较深入理解了JS,扎实了HTML与CSS的基础,理解作用域及作用域链的操作顺序,了解了闭包。下周可以介入项目实践,并实践异步编程。

6. 导师点评

  • 由于第一周学习很快,第二周的学习计划定制为深入了解基础并学习模块化开发,朱婉灵本周在知识体系的了解上,掌握到位,虽然知识面较广但学员吸收较快,余下一些知识需要再进行巩固和扩展学习。总体上来说,进度速度很快。

7. Review(第三周、第四周作业)

  • arrToObj方法
  1. 定义对象的时候可以更简洁的定义为如下方式
let jsonObj = {
  result: [],
  entities: {}
}
  1. 需要进行边界判断,参数不一定传的是数据,需要进行判断
const tempArr = arr && arr[0] || []
  1. 另外Object.keys是ES5的语法,建议用更早的语法进行实现(IE8不支持Object.keys)
  • myFilter方法
  1. 同样,forEach也是ES5语法,另外做为底层库,forEach的速度不同原生loop

时间:0710-0714(第一周)

1. 新人计划

2. 成长总结

  • 对HTML、JS、CSS基础加深了解

3. 作业汇总

4. 问题改进

  • 0714
  1. 页面的所有内容最好应该包在一个块里面吗?如果不包起来,那整体的样式(比如长宽)应该写在body里面吗
    解答:理论上包在块里面有一定的好处,可以进行块宽度与高度的继承,但实际上,头、中、尾三块一般是独立出来的,然后,其它再包含在这三块中,这样可维护性比较好,这点上没有标准答案。
  2. 如下图的竖线怎么解决比较好,是通过
    标签设置样式,还是用border,或者其他的什么方式
    Paste_Image.png

    解答:在HTML布局中,为了可读性,像这种介于两个元素之间的竖线之类的处理,一般会使用before/after伪元素或使用border,也可以使用背景渐变或box-shadow之类的,不过一般不推荐,最后就是图片了,也不推荐,除非特殊用途。也不建议像这种通用的坚型直接使用标签重复标记
    前端开发上,布局使用HTML,而样式则最好是由CSS处理。

5. 能力评估

  • 有一定的HTML、CSS、JS基础,可以考虑深入学习

6. 导师点评

  • 本周工作达到预期目标。朱婉灵本周花费了一定时间,对前端基础知识进行巩固,并提前完成了技能组的部份作业,额外实践了瀑布流布局,值得表扬。

7. Review

  • 最后输出切图最好优化大小,进行无损压缩(建议使用:https://tinypng.com/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 作为一个前端程序猿,下面这些站会让你眼前一亮。 amazeui框架组建丰富 http://amazeui.org...
    欧巴冰冰阅读 8,798评论 18 303
  • 前些日子从@张鑫旭微博处得一份推荐(Front-end-tutorial),号称最全的资源教程-前端涉及的所有知识...
    谷子多阅读 4,137评论 0 44
  • 今天收获:再一次梳理清晰了思维导图的制作过程。 首先明白了导图的六大原则:表达、学习、会议、发展、笔记、回忆,不断...
    暖暖的花开阅读 796评论 4 6
  • 我和我想成为的那个人 距离太远 他谦逊 平和 宽厚 忍耐 大度 …… 心装得下整个世界 我自大 躁动 狭隘 放纵 ...
    庆善阅读 118评论 5 1
  • 只是时间不等人,还没有缓过神,转眼间,暑假就这样悄悄的离去了,开学将即将面临,我也随时准备开始上学,这段旅程...
    山西地之锦阅读 255评论 0 1