每周一更:网络上值的一看的技术博文第二期

这一周发现一个前端进阶的知识库github,该库收纳了一个合格前端必要掌握的知识体系,并且该库还在持续更新,知识技术都属于当下最新,非常值得一看
20W字囊括上百个前端面试题的项目开源了
github:https://github.com/xiaomuzhu/front-end-interview

1. Java:控制反转(IoC)与依赖注入(DI)

内容节选:
在我们编码的过程中,通常都需要两个或者更多的类通过彼此的合作来实现业务逻辑,也就是说,某个对象需要获取与其合作对象的引用,如果这个获取的过程需要自己实现,代码的耦合度就会高,维护起来的成本就比较高。
我们来通过实战模拟一下。假如老王是少林寺的主持,他想让小二和尚去扫达摩院的地,代码可以这样实现。
小二类的代码如下所示:

public class Xiaoer {
	public void saodi() {
		System.out.println("小二我在扫达摩院的地");
	}
}
复制代码

老王类的代码如下所示:

public class Laowang {
	public void mingling() {
		new Xiaoer().saodi();
	}
}
复制代码

测试类的代码如下所示:

public class Test {
	public static void main(String[] args) {
		Laowang laowang = new Laowang();
		laowang.mingling();
	}
}
复制代码

Laowang 类的 mingling 方法中使用 new 关键字创建了一个 Xiaoer 类的对象——这种代码的耦合度就很高,维护起来的成本就很高,为什么这么说呢?
某一天,达摩院的地又脏了,老王主持想起了小二和尚,可小二和尚去练易筋经了,让谁去扫地呢,老王主持想起了小三和尚,于是 Laowang 类就不得不重新下一个新的命令,于是代码变成了这样:

public class Xiaosan {
    public void saodi() {
        System.out.println("小三我在扫达摩院的地");
    }
}
public class Laowang {
    public void mingling() {
        new Xiaoer().saodi();
    }
    public void mingling1() {
        new Xiaosan().saodi();
    }
}
复制代码

假如小三和尚去挑水了,老王主持没准要下命令给小四和尚去扫达摩院的地。这样下去的话,Laowang 这个类会疯掉的。
老王主持觉得自己堂堂一届高僧,下个扫地的命令竟然这样麻烦,他觉得很不爽…
从博文中Get:

1)控制反转是一种在软件工程中解耦合的思想,把控制权交给了第三方,在运行的时候由第三方决定将具体的依赖对象“注入”到调用类的对象中。
2)依赖注入可以作为控制反转的一种实现方式,将实例变量传入到一个对象中去。
3)通过 IoC 框架,类 A 依赖类 B 的强耦合关系可以在运行时通过容器建立,也就是说把创建 B 实例的工作移交给容器,类 A 只管使用就可以。

2. 公司新来的女实习生问我什么是闭包?

内容节选:
**撩妹守则第一条,女孩子都喜欢童话故事。
那就先来讲一个童话故事~

// 有一个公主
// 她生活在一个充满冒险的奇妙世界里
// 她遇见了她的白马王子,带着她骑着独角兽环游世界
// 与龙搏斗,遇到了会说话的松鼠,以及许多其他幻想的事情。
function princess () {
    var adventrures = [];
    function princeCharming () {};
    var unicorn = {};
    var dragons = [];
    var squirrel = "Hello!";
    // 但她不得不回到她那充满家务和大人们的单调世界。
    return {
    // 她经常给身边的人讲她作为一个公主的奇妙经历。
      story:function () {
          return adventures[adventures.length - 1];
      }
    }
}
// 但他们看到的只是一个小女孩在讲述关于魔法和幻想的故事
var littleGril = princess();
littleGril.story();
// 即使大人们知道她是真正的公主,他们也不会相信所谓的独角兽或龙,因为他们永远看不到它们
// 大人们说它们只存在于小女孩的想象中
// 但我们知道真正的真理
// 里面的小女孩真的是个公主

这个故事来自于stackoverflow的一则回答,看不懂没关系,等阅读完本文后,回头再来看这个故事,你会发现你已经完全了解了我的魅力,咳咳@¥%#…………JavaScript中闭包的魅力。

从博文中Get:

  1. 困扰多时的闭包问题终于得到了较能理解的答案。
  2. 原来JavaScript和Java一样存在GC,并且回收算法是类似的
  3. 裤子都脱了,博主却告诉我,女实习是假的?!

3. 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?

内容节选:
首先,我们先来合理的推断一下,当我们在代码中使用String s = “”;的形式来定义String对象的时候,""中字符的个数有没有限制呢?
既然是合理的推断,那就要要足够的依据,所以我们可以从String的源码入手,根据public String(char value[], int offset, int count)的定义,count是int类型的,所以,char value[]中最多可以保存Integer.MAX_VALUE个,即2147483647字符。(jdk1.8.0_73)
但是,实验证明,String s = “”;中,最多可以有65534个字符。如果超过这个个数。就会在编译期报错…
从博文中Get:

一直以为String可以满足任何长度,这是个冷知识,确实个细节。

  1. String长度的限制是编译期的限制,也就是使用String s= “”;这种字面值方式定义的时候才会有的限制。
  2. String在运行期有没有限制呢,答案是有的,就是我们前文提到的那个Integer.MAX_VALUE ,这个值约等于4G,在运行期,如果String的长度超过这个范围,就可能会抛出异常

4. [译]React v16.9 新特性

内容概要:

  1. 重命名 Unsafe 生命周期方法
  2. 弃用:javascript: URLs
  3. 弃用 “Factory” 组件
  4. 用于测试的一部函数 act()
  5. 修复一些Bug
  6. 在 组件中调用 findDOMNode() 造成崩溃,已修复
  7. 保存已删除的子树导致内存泄漏,已修复
  8. 在 useEffect 中,使用 setState 引起的循环引用,现在会输出错误(这与在 class 组件中的 componentDidUpdate 使用 setState 导致的错误一致)

从博文中Get:

时刻关注流行技术动态,更新自己的知识

  1. componentWillMount、componentWillReceiveProps、componentWillUpdate 这三个函数在今后的开发中要避免使用,以免给框架升级带来不便
  2. 可以尝试这使用act()做一些测试
  3. 可尝试使用 <React.Profiler> 进行性能评估

5. 可靠React组件设计的7个准则之SRP【全文请查看原英文版】

全文链接【英文】:https://dmitripavlutin.com/7-architectural-attributes-of-a-reliable-react-component/
内容概要:
我喜欢React组件式开发方式。你可以将复杂的用户界面分割为一个个组件,利用组件的可重用性和抽象的DOM操作。
基于组件的开发是高效的:一个复杂的系统是由专门的、易于管理的组件构建的。然而,只有设计良好的组件才能确保组合和复用的好处。
尽管应用程序很复杂,但为了满足最后期限和意外变化的需求,你必须不断地走在架构正确性的细线上。你必须将组件分离为专注于单个任务,并经过良好测试。

不幸的是,遵循错误的路径总是更加容易:编写具有许多职责的大型组件、紧密耦合组件、忘记单元测试。这些增加了技术债务,使得修改现有功能或创建新功能变得越来越困难。

编写React应用程序时,我经常问自己:

  • 如何正确构造组件?
  • 在什么时候,一个大的组件应该拆分成更小的组件?
  • 如何设计防止紧密耦合的组件之间的通信?

幸运的是,可靠的组件具有共同的特性。让我们来研究这7个有用的标准(本文只阐述 SRP,剩余准则正在途中),并将其详细到案例研究中…
从博文中Get:

本篇是只是原文翻译的其中一篇,其他篇也非常实用。
最近刚好准备整理一下组件库,原本本人英文能力有限,原文只能看三分之一,所以,默默等博主更新全部内容,养肥再杀

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值